Initial import of mutt-ng.
authorak1 <ak1@e385b8ad-14ed-0310-8656-cc95a2468c6d>
Fri, 7 Jan 2005 12:07:52 +0000 (12:07 +0000)
committerak1 <ak1@e385b8ad-14ed-0310-8656-cc95a2468c6d>
Fri, 7 Jan 2005 12:07:52 +0000 (12:07 +0000)
git-svn-id: svn://svn.berlios.de/mutt-ng/trunk@1 e385b8ad-14ed-0310-8656-cc95a2468c6d

378 files changed:
.gdb_history [new file with mode: 0644]
ABOUT-NLS [new file with mode: 0644]
BEWARE [new file with mode: 0644]
COPYRIGHT [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
ChangeLog.nntp [new file with mode: 0644]
ChangeLog.old [new file with mode: 0644]
GPL [new file with mode: 0644]
INSTALL [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
Makefile.in [new file with mode: 0644]
Muttrc [new file with mode: 0644]
Muttrc.head.in [new file with mode: 0644]
NEWS [new file with mode: 0644]
OPS [new file with mode: 0644]
OPS.CRYPT [new file with mode: 0644]
OPS.MIX [new file with mode: 0644]
OPS.PGP [new file with mode: 0644]
OPS.SMIME [new file with mode: 0644]
PATCHES [new file with mode: 0644]
README [new file with mode: 0644]
README.SECURITY [new file with mode: 0644]
README.SSL [new file with mode: 0644]
TODO [new file with mode: 0644]
VERSION [new file with mode: 0644]
_regex.h [new file with mode: 0644]
acconfig.h [new file with mode: 0644]
account.c [new file with mode: 0644]
account.h [new file with mode: 0644]
aclocal.m4 [new file with mode: 0644]
addrbook.c [new file with mode: 0644]
alias.c [new file with mode: 0644]
ascii.c [new file with mode: 0644]
ascii.h [new file with mode: 0644]
attach.c [new file with mode: 0644]
attach.h [new file with mode: 0644]
base64.c [new file with mode: 0644]
browser.c [new file with mode: 0644]
browser.h [new file with mode: 0644]
buffy.c [new file with mode: 0644]
buffy.h [new file with mode: 0644]
charset.c [new file with mode: 0644]
charset.h [new file with mode: 0644]
color.c [new file with mode: 0644]
commands.c [new file with mode: 0644]
compile.sh [new file with mode: 0755]
complete.c [new file with mode: 0644]
compose.c [new file with mode: 0644]
config.guess [new file with mode: 0755]
config.h.in [new file with mode: 0644]
config.sub [new file with mode: 0755]
configure [new file with mode: 0755]
configure.in [new file with mode: 0644]
contrib/Makefile.in [new file with mode: 0644]
contrib/Mush.rc [new file with mode: 0644]
contrib/Pine.rc [new file with mode: 0644]
contrib/Tin.rc [new file with mode: 0644]
contrib/ca-bundle.crt [new file with mode: 0644]
contrib/colors.default [new file with mode: 0644]
contrib/colors.linux [new file with mode: 0644]
contrib/gpg.rc [new file with mode: 0644]
contrib/iconv/README [new file with mode: 0644]
contrib/iconv/iconv.aix-3.2.5.rc [new file with mode: 0644]
contrib/iconv/iconv.aix-4.1.5.rc [new file with mode: 0644]
contrib/iconv/iconv.aix-4.2.0.rc [new file with mode: 0644]
contrib/iconv/iconv.aix-4.3.2.rc [new file with mode: 0644]
contrib/iconv/iconv.freebsd-3.3.rc [new file with mode: 0644]
contrib/iconv/iconv.glibc-2.1.3.rc [new file with mode: 0644]
contrib/iconv/iconv.glibc-2.1.90.rc [new file with mode: 0644]
contrib/iconv/iconv.hpux-10.01.rc [new file with mode: 0644]
contrib/iconv/iconv.hpux-10.20.rc [new file with mode: 0644]
contrib/iconv/iconv.hpux-11.00.rc [new file with mode: 0644]
contrib/iconv/iconv.irix-6.5.rc [new file with mode: 0644]
contrib/iconv/iconv.osf1-4.0a.rc [new file with mode: 0644]
contrib/iconv/iconv.osf1-4.0d.rc [new file with mode: 0644]
contrib/iconv/iconv.solaris-2.4.rc [new file with mode: 0644]
contrib/iconv/iconv.solaris-2.5.1.rc [new file with mode: 0644]
contrib/iconv/iconv.solaris-2.6-cjk.rc [new file with mode: 0644]
contrib/iconv/iconv.solaris-2.6.rc [new file with mode: 0644]
contrib/iconv/iconv.solaris-2.7.rc [new file with mode: 0644]
contrib/iconv/make.sh [new file with mode: 0755]
contrib/language.txt [new file with mode: 0644]
contrib/language50.txt [new file with mode: 0644]
contrib/patch.slang-1.2.2.keypad.1 [new file with mode: 0644]
contrib/pgp2.rc [new file with mode: 0644]
contrib/pgp5.rc [new file with mode: 0644]
contrib/pgp6.rc [new file with mode: 0644]
contrib/sample.mailcap [new file with mode: 0644]
contrib/sample.muttrc [new file with mode: 0644]
contrib/sample.muttrc-tlr [new file with mode: 0644]
contrib/smime.rc [new file with mode: 0644]
contrib/smime_keys_test.pl [new file with mode: 0644]
copy.c [new file with mode: 0644]
copy.h [new file with mode: 0644]
crypt.c [new file with mode: 0644]
cryptglue.c [new file with mode: 0644]
curs_lib.c [new file with mode: 0644]
curs_main.c [new file with mode: 0644]
cvslog2changelog.pl [new file with mode: 0644]
date.c [new file with mode: 0644]
depcomp [new file with mode: 0644]
doc/Makefile.in [new file with mode: 0644]
doc/PGP-Notes.txt [new file with mode: 0644]
doc/applying-patches.txt [new file with mode: 0644]
doc/devel-notes.txt [new file with mode: 0644]
doc/dotlock.man [new file with mode: 0644]
doc/instdoc.sh [new file with mode: 0644]
doc/instdoc.sh.in [new file with mode: 0644]
doc/manual.sgml [new file with mode: 0644]
doc/manual.sgml.head [new file with mode: 0644]
doc/manual.sgml.tail [new file with mode: 0644]
doc/manual.txt [new file with mode: 0644]
doc/mbox.man [new file with mode: 0644]
doc/mutt.man [new file with mode: 0644]
doc/muttbug.man [new file with mode: 0644]
doc/muttrc.man [new file with mode: 0644]
doc/muttrc.man.head [new file with mode: 0644]
doc/muttrc.man.tail [new file with mode: 0644]
doc/patch-notes.txt [new file with mode: 0644]
doc/smime-notes.txt [new file with mode: 0644]
dotlock.c [new file with mode: 0644]
dotlock.h [new file with mode: 0644]
edit.c [new file with mode: 0644]
editmsg.c [new file with mode: 0644]
enter.c [new file with mode: 0644]
extlib.c [new file with mode: 0644]
filter.c [new file with mode: 0644]
flags.c [new file with mode: 0644]
flea [new file with mode: 0755]
from.c [new file with mode: 0644]
functions.h [new file with mode: 0644]
gen_defs [new file with mode: 0755]
getdomain.c [new file with mode: 0644]
globals.h [new file with mode: 0644]
gnupgparse.c [new file with mode: 0644]
handler.c [new file with mode: 0644]
hash.c [new file with mode: 0644]
hash.h [new file with mode: 0644]
hdrline.c [new file with mode: 0644]
headers.c [new file with mode: 0644]
help.c [new file with mode: 0644]
history.c [new file with mode: 0644]
history.h [new file with mode: 0644]
hook.c [new file with mode: 0644]
imap/BUGS [new file with mode: 0644]
imap/Makefile.am [new file with mode: 0644]
imap/Makefile.in [new file with mode: 0644]
imap/README [new file with mode: 0644]
imap/TODO [new file with mode: 0644]
imap/auth.c [new file with mode: 0644]
imap/auth.h [new file with mode: 0644]
imap/auth_anon.c [new file with mode: 0644]
imap/auth_cram.c [new file with mode: 0644]
imap/auth_gss.c [new file with mode: 0644]
imap/auth_login.c [new file with mode: 0644]
imap/auth_sasl.c [new file with mode: 0644]
imap/browse.c [new file with mode: 0644]
imap/command.c [new file with mode: 0644]
imap/imap.c [new file with mode: 0644]
imap/imap.h [new file with mode: 0644]
imap/imap_private.h [new file with mode: 0644]
imap/message.c [new file with mode: 0644]
imap/message.h [new file with mode: 0644]
imap/utf7.c [new file with mode: 0644]
imap/util.c [new file with mode: 0644]
init.c [new file with mode: 0644]
init.h [new file with mode: 0644]
install-sh [new file with mode: 0755]
intl/ChangeLog [new file with mode: 0644]
intl/Makefile.in [new file with mode: 0644]
intl/VERSION [new file with mode: 0644]
intl/bindtextdom.c [new file with mode: 0644]
intl/config.charset [new file with mode: 0644]
intl/dcgettext.c [new file with mode: 0644]
intl/dcigettext.c [new file with mode: 0644]
intl/dcngettext.c [new file with mode: 0644]
intl/dgettext.c [new file with mode: 0644]
intl/dngettext.c [new file with mode: 0644]
intl/explodename.c [new file with mode: 0644]
intl/finddomain.c [new file with mode: 0644]
intl/gettext.c [new file with mode: 0644]
intl/gettext.h [new file with mode: 0644]
intl/gettextP.h [new file with mode: 0644]
intl/hash-string.h [new file with mode: 0644]
intl/intl-compat.c [new file with mode: 0644]
intl/l10nflist.c [new file with mode: 0644]
intl/libgettext.h [new file with mode: 0644]
intl/libgnuintl.h [new file with mode: 0644]
intl/loadinfo.h [new file with mode: 0644]
intl/loadmsgcat.c [new file with mode: 0644]
intl/localcharset.c [new file with mode: 0644]
intl/locale.alias [new file with mode: 0644]
intl/localealias.c [new file with mode: 0644]
intl/ngettext.c [new file with mode: 0644]
intl/plural.c [new file with mode: 0644]
intl/plural.y [new file with mode: 0644]
intl/ref-add.sin [new file with mode: 0644]
intl/ref-del.sin [new file with mode: 0644]
intl/textdomain.c [new file with mode: 0644]
keymap.c [new file with mode: 0644]
keymap.h [new file with mode: 0644]
lib.c [new file with mode: 0644]
lib.h [new file with mode: 0644]
m4/Makefile.am [new file with mode: 0644]
m4/Makefile.am.in [new file with mode: 0644]
m4/Makefile.in [new file with mode: 0644]
m4/README [new file with mode: 0644]
m4/codeset.m4 [new file with mode: 0644]
m4/curslib.m4 [new file with mode: 0644]
m4/funcdecl.m4 [new file with mode: 0644]
m4/gettext.m4 [new file with mode: 0644]
m4/glibc21.m4 [new file with mode: 0644]
m4/gssapi.m4 [new file with mode: 0644]
m4/iconv.m4 [new file with mode: 0644]
m4/lcmessage.m4 [new file with mode: 0644]
m4/libesmtp.m4 [new file with mode: 0644]
m4/progtest.m4 [new file with mode: 0644]
mailbox.h [new file with mode: 0644]
main.c [new file with mode: 0644]
makedoc.c [new file with mode: 0644]
mapping.h [new file with mode: 0644]
mbox.c [new file with mode: 0644]
mbyte.c [new file with mode: 0644]
mbyte.h [new file with mode: 0644]
md5.h [new file with mode: 0644]
md5c.c [new file with mode: 0644]
menu.c [new file with mode: 0644]
mh.c [new file with mode: 0644]
mime.h [new file with mode: 0644]
mime.types [new file with mode: 0644]
missing [new file with mode: 0755]
mkchangelog.sh [new file with mode: 0755]
mkinstalldirs [new file with mode: 0755]
mutt.h [new file with mode: 0644]
mutt_crypt.h [new file with mode: 0644]
mutt_curses.h [new file with mode: 0644]
mutt_idna.c [new file with mode: 0644]
mutt_idna.h [new file with mode: 0644]
mutt_libesmtp.c [new file with mode: 0644]
mutt_libesmtp.h [new file with mode: 0644]
mutt_menu.h [new file with mode: 0644]
mutt_regex.h [new file with mode: 0644]
mutt_sasl.c [new file with mode: 0644]
mutt_sasl.h [new file with mode: 0644]
mutt_socket.c [new file with mode: 0644]
mutt_socket.h [new file with mode: 0644]
mutt_ssl.c [new file with mode: 0644]
mutt_ssl.h [new file with mode: 0644]
mutt_ssl_nss.c [new file with mode: 0644]
mutt_tunnel.c [new file with mode: 0644]
mutt_tunnel.h [new file with mode: 0644]
muttbug [new file with mode: 0755]
muttbug.sh.in [new file with mode: 0644]
muttlib.c [new file with mode: 0644]
mx.c [new file with mode: 0644]
mx.h [new file with mode: 0644]
newsrc.c [new file with mode: 0644]
nntp.c [new file with mode: 0644]
nntp.h [new file with mode: 0644]
pager.c [new file with mode: 0644]
pager.h [new file with mode: 0644]
parse.c [new file with mode: 0644]
patchlist.sh [new file with mode: 0755]
pattern.c [new file with mode: 0644]
pgp.c [new file with mode: 0644]
pgp.h [new file with mode: 0644]
pgpewrap.c [new file with mode: 0644]
pgpinvoke.c [new file with mode: 0644]
pgpkey.c [new file with mode: 0644]
pgplib.c [new file with mode: 0644]
pgplib.h [new file with mode: 0644]
pgpmicalg.c [new file with mode: 0644]
pgppacket.c [new file with mode: 0644]
pgppacket.h [new file with mode: 0644]
pgppubring.c [new file with mode: 0644]
po/Makefile.in.in [new file with mode: 0644]
po/POTFILES.in [new file with mode: 0644]
po/bg.gmo [new file with mode: 0644]
po/bg.po [new file with mode: 0644]
po/ca.gmo [new file with mode: 0644]
po/ca.po [new file with mode: 0644]
po/cs.gmo [new file with mode: 0644]
po/cs.po [new file with mode: 0644]
po/da.gmo [new file with mode: 0644]
po/da.po [new file with mode: 0644]
po/de.gmo [new file with mode: 0644]
po/de.po [new file with mode: 0644]
po/el.gmo [new file with mode: 0644]
po/el.po [new file with mode: 0644]
po/eo.gmo [new file with mode: 0644]
po/eo.po [new file with mode: 0644]
po/es.gmo [new file with mode: 0644]
po/es.po [new file with mode: 0644]
po/et.gmo [new file with mode: 0644]
po/et.po [new file with mode: 0644]
po/fr.gmo [new file with mode: 0644]
po/fr.po [new file with mode: 0644]
po/gl.gmo [new file with mode: 0644]
po/gl.po [new file with mode: 0644]
po/hu.gmo [new file with mode: 0644]
po/hu.po [new file with mode: 0644]
po/id.gmo [new file with mode: 0644]
po/id.po [new file with mode: 0644]
po/it.gmo [new file with mode: 0644]
po/it.po [new file with mode: 0644]
po/ja.gmo [new file with mode: 0644]
po/ja.po [new file with mode: 0644]
po/ko.gmo [new file with mode: 0644]
po/ko.po [new file with mode: 0644]
po/lt.gmo [new file with mode: 0644]
po/lt.po [new file with mode: 0644]
po/mutt.pot [new file with mode: 0644]
po/nl.gmo [new file with mode: 0644]
po/nl.po [new file with mode: 0644]
po/pl.gmo [new file with mode: 0644]
po/pl.po [new file with mode: 0644]
po/pt_BR.gmo [new file with mode: 0644]
po/pt_BR.po [new file with mode: 0644]
po/ru.gmo [new file with mode: 0644]
po/ru.po [new file with mode: 0644]
po/sk.gmo [new file with mode: 0644]
po/sk.po [new file with mode: 0644]
po/sv.gmo [new file with mode: 0644]
po/sv.po [new file with mode: 0644]
po/tr.gmo [new file with mode: 0644]
po/tr.po [new file with mode: 0644]
po/uk.gmo [new file with mode: 0644]
po/uk.po [new file with mode: 0644]
po/zh_CN.gmo [new file with mode: 0644]
po/zh_CN.po [new file with mode: 0644]
po/zh_TW.gmo [new file with mode: 0644]
po/zh_TW.po [new file with mode: 0644]
pop.c [new file with mode: 0644]
pop.h [new file with mode: 0644]
pop_auth.c [new file with mode: 0644]
pop_lib.c [new file with mode: 0644]
postpone.c [new file with mode: 0644]
prepare [new file with mode: 0755]
protos.h [new file with mode: 0644]
query.c [new file with mode: 0644]
recvattach.c [new file with mode: 0644]
recvcmd.c [new file with mode: 0644]
regex.c [new file with mode: 0644]
reldate.h [new file with mode: 0644]
remailer.c [new file with mode: 0644]
remailer.h [new file with mode: 0644]
resize.c [new file with mode: 0644]
rfc1524.c [new file with mode: 0644]
rfc1524.h [new file with mode: 0644]
rfc2047.c [new file with mode: 0644]
rfc2047.h [new file with mode: 0644]
rfc2231.c [new file with mode: 0644]
rfc2231.h [new file with mode: 0644]
rfc822.c [new file with mode: 0644]
rfc822.h [new file with mode: 0644]
score.c [new file with mode: 0644]
send.c [new file with mode: 0644]
sendlib.c [new file with mode: 0644]
sha1.c [new file with mode: 0644]
sha1.h [new file with mode: 0644]
signal.c [new file with mode: 0644]
smime.c [new file with mode: 0644]
smime.h [new file with mode: 0644]
smime_keys.pl [new file with mode: 0755]
snprintf.c [new file with mode: 0644]
sort.c [new file with mode: 0644]
sort.h [new file with mode: 0644]
stamp-h.in [new file with mode: 0644]
status.c [new file with mode: 0644]
stderr.txt [new file with mode: 0644]
strcasecmp.c [new file with mode: 0644]
strdup.c [new file with mode: 0644]
system.c [new file with mode: 0644]
thread.c [new file with mode: 0644]
url.c [new file with mode: 0644]
url.h [new file with mode: 0644]
utf8.c [new file with mode: 0644]
wcwidth.c [new file with mode: 0644]

diff --git a/.gdb_history b/.gdb_history
new file mode 100644 (file)
index 0000000..88f60ce
--- /dev/null
@@ -0,0 +1,9 @@
+r
+bt
+quit
+r
+bt
+quit
+r
+bt
+quit
diff --git a/ABOUT-NLS b/ABOUT-NLS
new file mode 100644 (file)
index 0000000..5fde45a
--- /dev/null
+++ b/ABOUT-NLS
@@ -0,0 +1,324 @@
+Notes on the Free Translation Project
+*************************************
+
+   Free software is going international!  The Free Translation Project
+is a way to get maintainers of free software, translators, and users all
+together, so that will gradually become able to speak many languages.
+A few packages already provide translations for their messages.
+
+   If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site.  But you do _not_
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+   Installers will find here some useful hints.  These notes also
+explain how users should proceed for getting the programs to use the
+available translations.  They tell how people wanting to contribute and
+work at translations should contact the appropriate team.
+
+   When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used.  The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+Quick configuration advice
+==========================
+
+   If you want to exploit the full power of internationalization, you
+should configure it using
+
+     ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed.  So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias, message inheritance, automatic
+charset conversion or plural form handling) as the implementation here.
+It is also not possible to offer this additional functionality on top
+of a `catgets' implementation.  Future versions of GNU `gettext' will
+very likely convey even more functionality.  So it might be a good idea
+to change to GNU `gettext' as soon as possible.
+
+   So you need _not_ provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+INSTALL Matters
+===============
+
+   Some packages are "localizable" when properly installed; the
+programs they contain can be made to speak your own native language.
+Most such packages use GNU `gettext'.  Other packages have their own
+ways to internationalization, predating GNU `gettext'.
+
+   By default, this package will be installed to allow translation of
+messages.  It will automatically detect whether the system already
+provides the GNU `gettext' functions.  If not, the GNU `gettext' own
+library will be used.  This library is wholly contained within this
+package, usually in the `intl/' subdirectory, so prior installation of
+the GNU `gettext' package is _not_ required.  Installers may use
+special options at configuration time for changing the default
+behaviour.  The commands:
+
+     ./configure --with-included-gettext
+     ./configure --disable-nls
+
+will respectively bypass any pre-existing `gettext' to use the
+internationalizing routines provided within this package, or else,
+_totally_ disable translation of messages.
+
+   When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this.  This might be not what is desirable.  You
+should use the more recent version of the GNU `gettext' library.  I.e.
+if the file `intl/VERSION' shows that the library which comes with this
+package is more recent, you should use
+
+     ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+   The configuration process will not test for the `catgets' function
+and therefore it will not be used.  The reason is that even an
+emulation of `gettext' on top of `catgets' could not provide all the
+extensions of the GNU `gettext' library.
+
+   Internationalized packages have usually many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language.  Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package.  However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+Using This Package
+==================
+
+   As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+`LL_CC' combination.  Here `LL' is an ISO 639 two-letter language code,
+and `CC' is an ISO 3166 two-letter country code.  For example, let's
+suppose that you speak German and live in Germany.  At the shell
+prompt, merely execute `setenv LANG de_DE' (in `csh'),
+`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
+This can be done from your `.login' or `.profile' file, once and for
+all.
+
+   You might think that the country code specification is redundant.
+But in fact, some languages have dialects in different countries.  For
+example, `de_AT' is used for Austria, and `pt_BR' for Brazil.  The
+country code serves to distinguish the dialects.
+
+   Not all programs have translations for all languages.  By default, an
+English message is shown in place of a nonexistent translation.  If you
+understand other languages, you can set up a priority list of languages.
+This is done through a different environment variable, called
+`LANGUAGE'.  GNU `gettext' gives preference to `LANGUAGE' over `LANG'
+for the purpose of message handling, but you still need to have `LANG'
+set to the primary language; this is required by other parts of the
+system libraries.  For example, some Swedish users who would rather
+read translations in German than English for when Swedish is not
+available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+
+   In the `LANGUAGE' environment variable, but not in the `LANG'
+environment variable, `LL_CC' combinations can be abbreviated as `LL'
+to denote the language's main dialect.  For example, `de' is equivalent
+to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
+(Portuguese as spoken in Portugal) in this context.
+
+Translating Teams
+=================
+
+   For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list.  The up-to-date list of
+teams can be found at the Free Translation Project's homepage,
+`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
+area.
+
+   If you'd like to volunteer to _work_ at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is _not_ the same as the list itself, it has
+`-request' appended.  For example, speakers of Swedish can send a
+message to `sv-request@li.org', having this message body:
+
+     subscribe
+
+   Keep in mind that team members are expected to participate
+_actively_ in translations, or at solving translational difficulties,
+rather than merely lurking around.  If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `translation@iro.umontreal.ca' to reach the
+coordinator for all translator teams.
+
+   The English team is special.  It works at improving and uniformizing
+the terminology in use.  Proven linguistic skill are praised more than
+programming skill, here.
+
+Available Packages
+==================
+
+   Languages are not equally supported in all packages.  The following
+matrix shows the current state of internationalization, as of September
+2001.  The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination, with a
+translation percentage of at least 50%.
+
+     Ready PO files    bg cs da de el en eo es et fi fr gl he hr id it ja
+                     +----------------------------------------------------+
+     a2ps            |          []             []    []                   |
+     bash            |          []       [] []       []                   |
+     bfd             |                                                    |
+     binutils        |                               []                   |
+     bison           |          []          [] []    []                [] |
+     clisp           |          []    []    []       []                   |
+     cpio            |       [] []          []       [] []                |
+     diffutils       |       [] []       [] []       [] []       []       |
+     enscript        |          []                   []                   |
+     error           |                      []       []                   |
+     fetchmail       |                                                    |
+     fileutils       |    [] [] [] []       []       [] []             [] |
+     findutils       |       [] []          [] []    [] []       [] []    |
+     flex            |       []             []       []                   |
+     freetype        |                                                    |
+     gas             |                                                    |
+     gawk            |                               []    []             |
+     gcal            |                                                    |
+     gcc             |                                                    |
+     gettext         |    [] [] [] []       []       [] []       [] [] [] |
+     gnupg           |          []       []    []    [] []          [] [] |
+     gprof           |                                                    |
+     grep            |    []    []       [] [] []    [] []          []    |
+     hello           |       [] [] []    [] [] [] [] [] []          [] [] |
+     id-utils        |       [] []                   []                   |
+     indent          |       [] []             []    [] []                |
+     jpilot          |                               []                   |
+     kbd             |                                                    |
+     ld              |                               []                   |
+     libc            |    [] [] [] []       []       [] []             [] |
+     lilypond        |                                                 [] |
+     lynx            |    [] [] []                                     [] |
+     m4              |    [] [] [] []                [] []       []    [] |
+     make            |       [] []          []       [] []             [] |
+     mysecretdiary   |          []                                        |
+     nano            |                      []          []       []       |
+     opcodes         |                                                    |
+     parted          |          []                      []             [] |
+     ptx             |       [] []          [] []    [] []       []       |
+     python          |                                                    |
+     recode          |       [] [] []    [] []       [] [] []       []    |
+     sed             |    [] [] [] []    []    []    [] [] []    [] [] [] |
+     sh-utils        |    [] [] [] []       [] []    [] []          [] [] |
+     sharutils       |    [] [] [] []       []       [] []             [] |
+     sketch          |                                                    |
+     soundtracker    |          []          []          []                |
+     sp              |                                                    |
+     tar             |    [] [] []          [] []    []             [] [] |
+     texinfo         |    [] [] []       []          []                [] |
+     textutils       |    [] [] [] []       []       [] []             [] |
+     util-linux      |    [] []                                           |
+     wdiff           |       [] []             []                         |
+     wget            |    [] [] [] []       [] []    [] [] []          [] |
+                     +----------------------------------------------------+
+                       bg cs da de el en eo es et fi fr gl he hr id it ja
+                        0 14 24 32 11  1  8 23 13  1 33 22  4  0  7  9 18
+     
+                       ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh
+                     +----------------------------------------------------+
+     a2ps            |          []                   []    []             |  6
+     bash            |                                                    |  4
+     bfd             |                                                    |  0
+     binutils        |                                                    |  1
+     bison           |                               []                   |  6
+     clisp           |          []                                        |  5
+     cpio            | []       []       []     []   []                   | 10
+     diffutils       |                   []          []       [] []       | 11
+     enscript        |          []              []   []                   |  5
+     error           |                                  []       []       |  4
+     fetchmail       |                                                    |  0
+     fileutils       | []       []       []     []   [] [] [] [] []       | 17
+     findutils       | []       []       []     []   []    [] [] []       | 16
+     flex            | []                            []       []          |  6
+     freetype        |                                                    |  0
+     gas             |                                                    |  0
+     gawk            |                                           []       |  3
+     gcal            |                                                    |  0
+     gcc             |                                                    |  0
+     gettext         | []                []     []   []    [] [] []    [] | 18
+     gnupg           |                   []                   [] []       | 10
+     gprof           |                                                    |  0
+     grep            |                   []                [] [] []       | 12
+     hello           | [] [] [] []    [] []          [] []    [] [] []    | 22
+     id-utils        |          []                   []       []          |  6
+     indent          | []       []       []          [] []    [] []       | 12
+     jpilot          |                                                    |  1
+     kbd             |                                           []       |  1
+     ld              |                                                    |  1
+     libc            | []    []       [] []     []      []    [] []       | 16
+     lilypond        |          []                            []          |  3
+     lynx            |          []              []   []       []          |  8
+     m4              |          []       []          []       []          | 12
+     make            | []       []       []     []   []          []       | 12
+     mysecretdiary   |                                                    |  1
+     nano            |                                        []          |  4
+     opcodes         |                                           []       |  1
+     parted          |          []                   []                   |  5
+     ptx             |       [] []    [] [] []       []       [] []       | 15
+     python          |                                                    |  0
+     recode          |                   []          []    [] []          | 13
+     sed             |          []              []   [] [] [] [] []       | 19
+     sh-utils        |       [] []    [] []     []   [] [] [] [] []    [] | 21
+     sharutils       |          []                   []       []          | 11
+     sketch          |                                                    |  0
+     soundtracker    |                                                    |  3
+     sp              |                                                    |  0
+     tar             |       []       [] []     []         [] [] []       | 15
+     texinfo         |                               []                   |  7
+     textutils       |       [] []    [] []     []   [] [] []             | 16
+     util-linux      |                          []               []       |  4
+     wdiff           |                               [] []    [] []       |  7
+     wget            |          []                   [] [] [] [] [] []    | 17
+                     +----------------------------------------------------+
+       33 teams        ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh
+       53 domains       9  1  6 20  0  6 17  1  13   25 10 11 23 21  2  2  387
+
+   Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect.  This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+   For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer.  There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+   If September 2001 seems to be old, you may fetch a more recent copy
+of this `ABOUT-NLS' file on most GNU archive sites.  The most
+up-to-date matrix with full percentage details can be found at
+`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
+
+Using `gettext' in new packages
+===============================
+
+   If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU `gettext' in your
+package.  Of course you have to respect the GNU Library General Public
+License which covers the use of the GNU `gettext' library.  This means
+in particular that even non-free programs can use `libintl' as a shared
+library, whereas only free software can use `libintl' as a static
+library or use modified versions of `libintl'.
+
+   Once the sources are changed appropriately and the setup can handle
+to use of `gettext' the only thing missing are the translations.  The
+Free Translation Project is also available for packages which are not
+developed inside the GNU project.  Therefore the information given above
+applies also for every other Free Software Project.  Contact
+`translation@iro.umontreal.ca' to make the `.pot' files available to
+the translation teams.
+
diff --git a/BEWARE b/BEWARE
new file mode 100644 (file)
index 0000000..d5a7df7
--- /dev/null
+++ b/BEWARE
@@ -0,0 +1,15 @@
+MUTT HACKERS BEWARE
+
+A word of warning about string comparisons: Since mutt may run in a
+huge variety of locales, case-insensitive string comparisons and
+case conversions may be dangerous.  For instance, in iso-8859-9,
+tolower('I') is DIFFERENT from 'i' - it's indeed the Turkish dotless
+lowercase i.
+
+For this reason, always use the ascii_* functions defined in ascii.h
+and implemented in ascii.c when comparing or handling strings whcih
+are defined as us-ascii.  This concerns lots of text-based
+protocols, message header tags, character set names, domain names,
+e-mail addresses, etc.
+
+Thu Apr 26 15:40:11 CEST 2001, <roessler@does-not-exist.org>
diff --git a/COPYRIGHT b/COPYRIGHT
new file mode 100644 (file)
index 0000000..c0b3823
--- /dev/null
+++ b/COPYRIGHT
@@ -0,0 +1,31 @@
+The following copyright notices apply to most of the program.  Some
+modules are under different licenses, or in the public domain.
+
+Please note that this is by no means an exhaustive list of all the
+persons who have been contributing to this program.  Please see the
+manual for a (probably still non complete) list of the persons who
+have been helpful with the development of this program.
+
+Copyright (C) 1996-2001 Michael R. Elkins <me@cs.hmc.edu>
+Copyright (C) 1996-2001 Brandon Long <blong@fiction.net>
+Copyright (C) 1997-2001 Thomas Roessler <roessler@guug.de>
+Copyright (C) 1998-2001 Werner Koch <wk@isil.d.shuttle.de>
+Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com>
+Copyright (C) 1999-2001 Tommi Komulainen <Tommi.Komulainen@iki.fi>
+Copyright (C) 2000-2001 Edmund Grimley Evans <edmundo@rano.org>
+
+
+    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.
+
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..1423066
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,3153 @@
+2004-02-01 18:00:16  Mike Schiraldi  <1074468571@schiraldi.org>  (roessler)
+
+       * init.c: As you all know, running "mutt -F foo.rc" will have
+       mutt read foo.rc as its config file. However, there is a bug --
+       if you specify a directory (like accidentally typing "mutt -F
+       /etc/mutt") mutt will silently ignore the flag and leave you
+       wondering why it isn't working.
+
+       Emil Sit posted a patch for this in March of 2002, but it seems
+       to have slipped through the cracks. Here's the patch again;
+       please consider it for inclusion.
+
+2004-02-01 17:50:43  Luke Mewburn  <luke@mewburn.net>  (roessler)
+
+       * buffy.c: Put a zero byte into the string, not into the pointer.
+
+2004-02-01 17:48:25  Dan Ohnesorg  <Dan@ohnesorg.cz>  (roessler)
+
+       * po/cs.po: update
+
+2004-02-01 17:45:33  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * doc/manual.sgml.head: A cross-reference was missing.
+
+       * doc/manual.sgml.head: Improve documentation of alterantes.
+
+       * alias.c, doc/manual.sgml.head, doc/muttrc.man.head, globals.h,
+       hdrline.c, init.c, init.h, mutt.h, mutt_regex.h, muttlib.c,
+       protos.h: Turn alternates, lists, and subscribe into regular
+       expression lists.
+
+2004-01-12 22:56:58  Christoph Ludwig  <cludwig@cdc.informatik.tu-darmstadt.de>  (roessler)
+
+       * smime_keys.pl: Avoid a Perl warning.
+
+2004-01-12 20:24:09  Matt Kraai  <kraai@ftbfs.org>  (roessler)
+
+       * doc/manual.sgml.head: A newline was missing from the
+       documentation; #1754.  (The actual commit message for this
+       change is garbage; wrong window.)
+
+2004-01-12 19:59:38  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * crypt.c: Retainable PGP signatures were broken badly.  #1757.
+
+2004-01-05 11:55:14  Robert Schiele  <robert.schiele@t-online.de>  (roessler)
+
+       * mutt_sasl.c: Back out part of the previous SASL/IPv6 patch
+       due to portability issues.
+
+2004-01-04 10:55:20  René Clerc  <rene@clerc.nl>  (roessler)
+
+       * init.h: Fix hide_missing / hide_limited documentation.
+
+2004-01-04 10:51:49  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * hdrline.c: Permit list patterns that match the domain name of
+       an address; these patterns begin with '@'.  Example:  subscribe
+       @bugs.guug.de matches all messages sent to the bug tracking
+       system.
+
+2004-01-04 10:30:52  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * po/ru.po: Argh, I shouldn't replace files by patches.
+
+2004-01-04 10:25:13  Cameron Patrick  <cameron@patrick.wattle.id.au>  (roessler)
+
+       * menu.c: Fix #1697 (Debian  #219594.)
+
+2004-01-04 10:21:19  Roland Rosenfeld  <roland@spinnaker.de>  (roessler)
+
+       * po/de.po: update
+
+2004-01-04 10:19:45  TAKAHASHI Tamotsu  <ttakah@lapis.plala.or.jp>  (roessler)
+
+       * po/ja.po: update
+
+2004-01-04 10:08:02  Pawel Dziekonski  <dzieko@pwr.wroc.pl>  (roessler)
+
+       * po/pl.po: update
+
+2004-01-04 10:03:46  Michael Elkins  <me@sigpipe.org>  (roessler)
+
+       * send.c: Fix #1488 (Debian#1882526): Honor Reply-To while
+       generating Mail-Followup-To headers.
+
+2004-01-04 09:59:42  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * init.h: Fix #1738; documentation issue re $from, $use_from.
+
+2004-01-04 09:52:55  Michael Elkins  <me@sigpipe.org>  (roessler)
+
+       * hook.c, send.c: Fix #1724, cannot use ~h pattern match with
+       reply-hook.
+
+2004-01-04 09:49:23  Vsevolod Volkov  <vvv@mutt.org.ua>  (roessler)
+
+       * pop.h, pop_lib.c: Attached patch provides support of STLS
+       (STARTTLS) command in POP3 protocol.
+
+       * po/ru.po: update
+
+2004-01-04 09:45:05  Brendan Cully  <brendan@kublai.com>  (roessler)
+
+       * imap/imap.c: Fix #1703.
+
+2004-01-04 09:42:35  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * smime.c: Fix a NULL pointer deference noted by Will Fiveash
+       <william.fiveash@sun.com>.
+
+2003-12-30 13:04:20  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * commands.c, crypt.c, mutt.h, mutt_crypt.h, smime.c: Handle
+       partially signed messages more reasonably.  See #1743.
+
+2003-12-29 11:44:35  Alain Bench  <veronatif@free.fr>  (roessler)
+
+       * commands.c: Fix #844.
+
+2003-12-29 11:37:41  Patrick Welche  <prlw1@newn.cam.ac.uk>  (roessler)
+
+       * m4/gssapi.m4, mutt_sasl.c: A while ago I posted a similar
+       patch which is necessary as when mutt tries to connect to an
+       imap server over ipv6 it stores the address in a sockaddr which
+       may not be large enough to hold the ipv6 address.
+
+2003-12-17 17:42:02  Scott Koranda  <skoranda@gravity.phys.uwm.edu>  (roessler)
+
+       * crypt.c: pkcs7-signature wasn't recognized properly in one
+       more place.
+
+2003-12-17 08:46:50  Michael Elkins  <me@sigpipe.org>  (roessler)
+
+       * rfc1524.c: Fix possible core dump in mailcap nametemplate
+       handling.
+
+2003-12-10 00:48:57  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * thread.c: Avoid NULL pointer deference in threading code.
+
+2003-12-03 08:19:11  Alain Bench  <veronatif@free.fr>  (roessler)
+
+       * pager.c: Fix 1716.
+
+2003-11-15 09:32:30  Velko Hristov  <hristov@informatik.hu-berlin.de>  (roessler)
+
+       * po/bg.po: updat
+
+2003-11-12 22:31:51  Edmund GRIMLEY EVANS  <edmundo@rano.org>  (roessler)
+
+       * po/eo.po: update
+
+2003-11-12 14:01:03  René Clerc  <rene@clerc.nl>  (roessler)
+
+       * po/nl.po: update
+
+2003-11-12 13:49:32  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * configure.in, mutt_idna.c, mutt_idna.h, mutt_socket.c: Fix
+       IDN API incompatibility problems.
+
+2003-11-12 11:47:46  duvall@emufarm.org  (roessler)
+
+       * configure.in: Fix 1515, 1693.
+
+2003-11-12 11:40:27  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * mh.c, sort.c: Fix dangling pointer problems in threading code.
+       Noted and tracked down by q4xk3j002@sneakemail.com who also
+       provided the initial fix.
+       
+       CORRECTION: q4xk3j002 (whoever that is) reported the bug,
+       but thr problem was tracked down and fixed by YONETANI
+       Tomokazu <qhwt@myrealbox.com>
+
+2003-11-11 10:19:22  Ronny Haryanto  <ronnylist@haryan.to>  (roessler)
+
+       * po/id.po: update
+
+2003-11-10 18:02:26  Rudy Taraschi  <rudy@cae.com>  (roessler)
+
+       * mutt_socket.c: Fix double-free problems related to IDN support.
+
+2003-11-10 10:37:10  Vincent Lefevre  <vincent@vinc17.org>  (roessler)
+
+       * po/fr.po: update
+
+2003-11-09 21:41:28  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * mh.c: Fix #1692.
+
+2003-11-09 09:38:32  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * send.c: Commit the fix for #1509. This must have been lost
+       earlier this year.
+
+2003-11-05 20:09:36  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po,
+       po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po,
+       po/zh_TW.po, ChangeLog, VERSION, po/bg.po, po/ca.po, po/cs.po,
+       po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po,
+       po/fr.po, po/gl.po, po/hu.po, po/id.po, po/it.po: automatic
+       post-release commit for mutt-1.5.5.1
+
+2003-11-05 12:17:10  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * Makefile.am: Include regex.c and snprintf.c with the
+       distribution.  Noted by Lars Hecking.
+
+       * build-release: Ups, we don't upload the CVS any more.
+
+       * po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po,
+       po/uk.po, po/zh_CN.po, po/zh_TW.po, ChangeLog, VERSION, po/bg.po,
+       po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po,
+       po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po,
+       po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, reldate.h:
+       automatic post-release commit for mutt-1.5.5
+
+2003-11-05 09:27:43  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * build-release: Use gpg for signing releases.
+
+2003-11-03 10:30:58  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * attach.c: Fix a logic flaw in attachment saving.
+
+2003-10-08 19:55:39  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * pgpkey.c: KeyTable is pgp_uid_t **, not pgp_key_t *.  Fix some
+       sizeof statements accordingly.  Note that pgp_key_t is also a
+       pointer, though, so this should not have broken things.
+
+2003-10-06 09:58:35  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * query.c: Fiy memory corruption. (# 1659)
+
+2003-10-04 22:12:10  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * lib.c: mutt_basename() was garbage.
+
+2003-10-04 20:54:37  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * doc/manual.sgml.head: Fix some tags.  Noted by Todd
+       <Freedom_Lover@pobox.com>.
+
+2003-10-04 20:35:00  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * recvattach.c, attach.h, commands.c, compose.c, keymap.h, lib.c,
+       lib.h, menu.c, mutt.h, mutt_menu.h, muttlib.c, pager.c, protos.h:
+       This patch fixes various aspects of the attachment-saving user
+       interface.  Changes include:
+
+       - When tagging and saving multiple attachments, you can now use
+         the same target directory for multiple attachments.
+
+       - When you can't save an attachment, you get an opportunity to
+         enter a new file name.
+
+       - The menu cursor will highlight the attachment that you are
+         currently discussing with mutt.
+
+       - Various bug fixes.
+
+       This does, in particular, address #1619 (Debian#208430).
+
+       * menu.c: Fix #1656.
+
+2003-09-29 16:34:32  René Clerc  <rene@clerc.nl>  (roessler)
+
+       * doc/muttrc.man.head: Fix typo.
+
+2003-09-29 15:05:52  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * doc/dotlock.man, doc/mutt.man, doc/muttrc.man.head: Fix #1652
+       (Debian #213007), noted by Jens Seidel <tux-master@web.de>.
+
+2003-09-20 06:24:10  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * muttbug.sh.in: Adapt to new GNU coreutils by not using head (1).
+
+2003-09-19 13:09:59  René Clerc  <rene@clerc.nl>  (roessler)
+
+       * po/nl.po: update
+
+2003-09-19 13:05:13  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * imap/utf7.c: Fix remaining (void **) casts.
+
+2003-09-19 13:03:26  Mads Martin Joergensen  <mmj@suse.de>  (roessler)
+
+       * imap/browse.c, imap/command.c, parse.c, pgp.c, pgpkey.c,
+       pop_lib.c, query.c, recvattach.c, remailer.c, rfc1524.c,
+       rfc2047.c, rfc2231.c, sendlib.c, smime.c, thread.c, addrbook.c,
+       browser.c, color.c, compose.c, copy.c, crypt.c, curs_lib.c,
+       edit.c, enter.c, handler.c, lib.c, lib.h, mh.c, mutt_idna.c, mx.c,
+       pager.c: As the ones of you who compile with new gcc's probably
+       have noticed, there's a lot of type-punning in Mutt. With help
+       from Philipp Thomas, I've fixed all I could find in CVS (please
+       double-check, one might have slipped through the cracks), I can
+       make one for 1.4 CVS branch as well if wanted.
+
+2003-09-19 12:56:49  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * send.c: Change abort_unmodified so it doesn't abort a message
+       that has an attachment.  Catches the "send a file from the
+       command line, quickly" case.
+
+2003-09-11 16:59:54  Brendan Cully  <brendan@kublai.com>  (roessler)
+
+       * mutt_sasl.c: This trivial patch closes #1516 (NI_WITHSCOPEID
+       undefined). Thanks to Mads for the initial patch.
+
+2003-09-11 07:27:23  Velko Hristov  <hristov@informatik.hu-berlin.de>  (roessler)
+
+       * po/bg.po: Bulgarian translation.  (Seems like I screwed up an
+       earlier commit.  -tlr)
+
+2003-09-10 13:20:49  Jon Miles  <jon@zetnet.net>  (roessler)
+
+       * pop_auth.c: In pop_auth.c:pop_auth_sasl(), if the main loop
+       received anything back from the server that didnt begin with '+
+       ', it was bailing out and skipping the checks to see if there
+       was a +OK response.
+
+2003-09-07 10:11:49  Im Eunjea  <eunjea@koru.org>  (roessler)
+
+       * po/ko.po: update.
+
+2003-09-04 15:10:09  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * init.h: Fix some formatting glitches that lead to error messages
+       when viewing the muttrc(5) manual page.
+
+2003-09-04 14:59:57  Christoph Ludwig  <cludwig@cdc.informatik.tu-darmstadt.de>  (roessler)
+
+       * smime.c: Fix verification bug when messages are S/MIME signed
+       & encrypted.
+
+2003-09-03 17:22:09  Dan Born  <dan@danborn.net>  (roessler)
+
+       * postpone.c: I've attached a patch for bug number 1036, as
+       reported at http://bugs.guug.de/db/pa/lmutt.html ("segfault
+       when more than one msg is postponed").  This is a patch against
+       mutt 1.4.1.
+
+       As it was previously left, no one could reproduce it.  The problem
+       occurs because sorting is disabled when opening the postponed
+       folder, but the Sort global variable still tells mutt to use
+       whatever sorting algorithm the $sort config option indicates.
+       Eventually, the code would get to mutt_messages_in_thread and
+       try to dereference a NULL thread object, causing the segfault.
+
+2003-09-03 17:20:56  Pawel Dziekonski  <dzieko@pwr.wroc.pl>  (roessler)
+
+       * po/pl.po: update.
+
+2003-09-03 17:15:20  TAKAHASHI Tamotsu  <ttakah@lapis.plala.or.jp>  (roessler)
+
+       * po/ja.po: New ja.po.
+
+2003-09-03 17:12:52  Velko Hristov  <hristov@informatik.hu-berlin.de> (roessler)
+
+       * configure.in: Bulgarian translation.
+
+2003-09-03 17:10:37  Brendan Cully  <brendan@kublai.com>  (roessler)
+
+       * mutt_ssl.c: Fix a segmentation fault which occurs
+       when a certificate is rejected.  Bug noted by Rob Latham
+       <rob@terizla.org>.
+
+2003-09-03 17:09:09  Anatoly Vorobey  <mellon@pobox.com>  (roessler)
+
+       * curs_main.c: The commands "read-thread" (^R) and
+       "read-subthread" (Esc-R) do not honor the resolve variable (don't
+       advance cursor after marking the thread/subthread as read),
+       which, to me at least, is a nuisance.
+
+2003-08-11 14:06:08  Brendan Cully  <brendan@kublai.com>  (roessler)
+
+       * imap/imap.c: 1595: My guess is this bug is caused by
+       mlarson@verisign.com's patch to check for UNSEEN rather than
+       RECENT messages. This means that as long as there are messages
+       in a mailbox either new or old, mutt will think it has new mail.
+
+       The attached patch reverts that change. Let me know if it solves
+       the problem.
+
+2003-08-11 14:05:13  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * doc/muttrc.man.head: Fix a formatting bug.
+
+2003-08-05 13:55:47  Brendan Cully  <brendan@kublai.com>  (roessler)
+
+       * attach.c, buffy.c, commands.c, copy.c, editmsg.c, init.c,
+       mbox.c, mx.c, mx.h, sendlib.c: This patch removes the Kendra
+       format from mutt.  (The support was broken anyways.)
+
+2003-08-02 11:01:09  Horvath Szabolcs  <horvaths@fi.inf.elte.hu>  (roessler)
+
+       * po/hu.po: update
+
+2003-07-29 10:11:05  Edmund GRIMLEY EVANS  <edmundo@rano.org>  (roessler)
+
+       * pager.c: It seems that Solaris has an incorrect implementation
+       of mbrtowc: when there is an encoding error and mbrtowc returns
+       (size_t)(-1) no value should be stored in *pwc (the first
+       argument), as I understand it, but here mbrtowc is storing 8
+       when presented with the bytes "\xc8\x4d".
+
+       However, relying on mbrtowc not to store anything in *pwc when
+       there is an error is a bit silly; it makes sense to look at
+       the return value. So, the following patch should be applied if
+       Pawel can confirm that it fixes the problem. I've tested it and
+       it worked for me with glibc's mbrtowc.
+
+2003-07-24 18:40:50  Vincent Lefevre  <vincent@vinc17.org>  (roessler)
+
+       * alias.c, copy.c, handler.c, imap/command.c, imap/imap.c,
+       imap/message.c, imap/util.c, init.c, intl/l10nflist.c,
+       intl/loadmsgcat.c, intl/localealias.c, keymap.c, lib.c,
+       makedoc.c, muttlib.c, pattern.c, rfc2047.c, rfc2231.c, rfc822.c,
+       strcasecmp.c, url.c: Some functions/macros like isspace take an
+       int and require the argument to have the value of an unsigned char
+       (or EOF). Under Solaris, gcc complains when the argument is a char
+       (as this is a possible bug, on platforms where char is signed,
+       like Solaris). The attached patch fixes such problems (well,
+       perhaps I've changed more than necessary, but this doesn't hurt).
+
+2003-07-22 12:56:38  dshaw@jabberwocky.com  (roessler)
+
+       * gnupgparse.c: When encrypting a message to a user that has more
+       than one subkey, at least one of which is revoked or expired,
+       mutt treats the entire key as unusable rather than just the
+       subkey(s) in question.
+
+2003-07-16 11:18:12  Brendan Cully  <brendan@kublai.com>  (roessler)
+
+       * account.c, account.h, imap/auth_sasl.c, imap/imap.c: I noticed
+       that my mutt hung when I tried SASL DIGEST-MD5 authentication
+       (I'm not sure when this started). I believe this patch should
+       solve that problem in a reliable way.
+
+       This patch also attempts to reuse connections even when
+       authentication fails, instead of just throwing away a perfectly
+       good socket.
+
+       * curs_lib.c, enter.c, keymap.c, keymap.h, mutt.h, mutt_curses.h,
+       mutt_ssl.c: This patch redoes yesterday's unbuffered input
+       patch. Now it uses a pseudo-option, which means less mess to carry
+       down the call stack.  It also made it much easier to have the SSL
+       certificate menu be unbuffered, which it is now. So push commands
+       won't annoy you when entering passwords or accepting certificates.
+
+2003-07-15 11:41:32  Brendan Cully  <brendan@kublai.com>  (roessler)
+
+       * curs_main.c, globals.h, imap/command.c, imap/imap.c,
+       imap/imap.h, imap/imap_private.h, imap/util.c, mx.c: The attached
+       patch should keep all opened IMAP connections alive, no matter
+       what mailbox you are currently in. With the patch that got
+       committed yesterday, this should close bug 1523.
+
+       (There was a typo in that patch. This one supersedes it.)
+
+       * configure.in, .cvsignore: autoconf 2.5 compatibility.
+
+2003-07-14 12:40:03  Hugo Haas  <hugo@larve.net>  (roessler)
+
+       * send.c: Fix #1520.
+
+2003-07-14 12:20:27  Pawel Dziekonski  <dzieko@pwr.wroc.pl>  (roessler)
+
+       * po/pl.po: small fix.
+
+2003-07-14 12:19:07  Brendan Cully  <brendan@kublai.com>  (roessler)
+
+       * imap/command.c, imap/imap.c: 
+
+       On Sunday, 13 July 2003 at 18:09, Brendan Cully wrote:
+
+       > The attached patch should help when the connection to your
+       > postponed folder times out and you can't reconnect without
+       > restarting mutt. I'd like anyone who has that problem to
+       > try it and let me know how it works.
+
+       I dug a little deeper. The attached patch seems to work better. It
+       complains the first time you try to recall a message, but works
+       the second.
+
+       * account.c, curs_lib.c, enter.c, keymap.c, keymap.h, mutt.h,
+       mutt_curses.h: The attached patch prevents mutt from reading the
+       push buffer when asking for passwords. This is a proper fix for
+       bug 1312. I think it's uncontroversial.
+
+2003-07-04 17:15:34  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * imap/auth_sasl.c: Increase a buffer's size.
+
+2003-07-04 17:07:22  Nicolas Rachinsky  <nr@rachinsky.de>  (roessler)
+
+       * OPS, curs_lib.c, curs_main.c, functions.h, menu.c: Introduce
+       tag-prefix-cond and end-cond.  This makes simple conditional
+       execution of parts of macros possible.
+
+2003-07-04 17:03:51  Bruno Postle  <bruno@postle.net>  (roessler)
+
+       * curs_main.c, pattern.c: Display an empty index when no messages
+       match search criteria.
+
+2003-07-04 16:57:56  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * init.h, muttlib.c: Add a ':' flag to % expandos.  This will
+       make sure that any dots are converted into underscores.  (_
+       is already used for lowercasing the result of an expando.)
+
+2003-06-04 14:01:39  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * muttlib.c: Don't colorize empty lines generated with
+       state_attach_puts();
+
+2003-05-29 17:49:00  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * po/id.po, po/eo.po: Updates from the respective authors.
+
+2003-05-29 17:48:28  David Shaw  <dshaw@jabberwocky.com>  (roessler)
+
+       * pgp.c: Fix part of #1564.
+
+2003-05-29 17:47:10  Matt Larson  <mlarson@verisign.com>  (roessler)
+
+       * imap/imap.c: Look at UNSEEN, not RECENT in
+       imap_check_mailbox().
+
+2003-05-29 17:47:10  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * init.c: Fix a segmentation fault which would occur when
+       pgp_sort_keys is set in a configuration file, but mutt is compiled
+       without PGP support.
+
+       * gnupgparse.c: Fix PGP subkey handling when looking at key
+       capabilities.  This should take care of the recent "mutt does
+       not see all keys" problems.
+
+2003-05-13 13:06:16  Dale Woolridge  <dale-list-mutt-dev-2@woolridge.org>  (roessler)
+
+       * crypt.c: Fix gpg-agent use.
+
+2003-05-13 12:53:20  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * doc/manual.sgml.head: Remove useless examples about treating
+       text/enriched externally.  #1549; Debian #190309.
+
+2003-05-13 12:50:04  Juan Altmayer Pizzorno  <juan@altmayer.com>  (roessler)
+
+       * recvattach.c: view-attachments does not extract the message
+       within a x-pkcs7-mime if it's only signed, but not encrypted.
+       Such a message results, for example, from a decrypt-save if the
+       message was previously encrypted and signed.
+
+2003-05-13 12:45:35  Thomas Glanzmann  <sithglan@stud.uni-erlangen.de>  (roessler)
+
+       * doc/manual.sgml.head: Fix an inconsistency between manual
+       and code.
+
+2003-05-13 12:43:45  David Shaw  <dshaw@jabberwocky.com>  (roessler)
+
+       * gnupgparse.c, pgppubring.c: Currently, mutt uses the OpenPGP key
+       algorithm to determine the capabilities of the key.  For example,
+       in mutt, a key of type 1 (RSA) can both encrypt & sign.  This is
+       not correct as per OpenPGP, however, where the capabilities of
+       the key are determined by both the algorithm and key capability
+       flags that are set on the key.  This can lead to user confusion
+       when their RSA encrypt-only or sign-only key is listed for both
+       signing and encryption in mutt.
+
+       GnuPG lists these flags in key listings, so it is easy to take
+       advantage of them.  Here is a patch to use the flags, as well
+       as provide the flags in pgpring.  Note that the pgp+pgpring
+       users won't see any change since the flags there are based on
+       the key algorithm as they are now, but the GnuPG users will see
+       an improvement.
+
+2003-05-12 16:21:26  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * enter.c: Fix alias completion when the alias is entered as
+       part of a group.  (E.g., The Tea Party: alias1, alias2, alias3;)
+
+2003-05-03 20:07:40  Dan Nelson  <dnelson@allantgroup.com>  (roessler)
+
+       * mutt.h, muttlib.c: Fix #1558.  (mutt_expand_fmt rewrite;
+       OPT_MAX wasn't maximal.)
+
+2003-04-15 13:17:05  René Clerc  <rene@clerc.nl>  (roessler)
+
+       * compose.c: Fix two more cases in which ctrl-G is interpreted
+       as M_YES.
+
+2003-04-15 09:52:06  Dale Woolridge  <dale-flea-mutt-bug@woolridge.org>  (roessler)
+
+       * compose.c: The "sign (a)s" code strips the pgp application
+       bit causing drawing issues in redraw_crypt_lines().  Other bits
+       (well bit = encrypt) are ignored as a result.  I've only tested
+       with pgp, but the same problem exists in the smime code too.
+       This inline patch (against cvs head revision) fixes the problem.
+
+2003-04-14 09:09:53  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * init.h, mutt.h, send.c: Fix the PGP / S/MIME selection mess
+       in send.c.  This patch adds two new configuration variables,
+       $crypt_autopgp and $crypt_autsmime.  Both are set to "yes"
+       by default.  By turning them off, you can disable the automatic
+       selection of one or both mechanisms.  (Useful when your mutt is
+       PGP- and S/MIME enabled, but you only use, say S/MIME.)
+
+2003-04-11 15:15:04  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * send.c: Backing out the previous change. It was nonsense.
+
+2003-04-11 11:56:58  Lars Hecking  <lhecking@nmrc.ucc.ie>  (roessler)
+
+       * config.guess, config.sub, depcomp, install-sh, missing,
+       mkinstalldirs: updates.
+
+2003-04-11 11:56:22  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * send.c: Try to fix a PGP / S/MIME-related problem.  Found by
+       Matt Larson <mlarson@verisign.com>, tracekd down by René Clerc
+       <rene@clerc.nl>.
+
+       * thread.c: Fix a segmentation fault.
+
+2003-04-09 08:21:59  Zardoz@users.sourceforge.net  (roessler)
+
+       * recvcmd.c: Fix #1531.  (recvcmd.c duplicate of #1528)
+
+2003-04-08 22:32:56  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * lib.c: Avoid a division by zero.
+
+       * color.c: Make sure has_colors() is only invoked when OPTNOCURSES
+       is unset.  This fixes a segmentation fault on RH 8.0 which was
+       observed by Matt Larson <mlarson@verisign.com>.
+
+       * browser.c, enter.c, imap/imap.c, lib.c, mutt_idna.c, mx.c,
+       sendlib.c, smime.c, thread.c: Try to catch a couple of cases
+       in which parameters for malloc calls could overflow.  Thanks to
+       Timo Sirainen for the heads-up.
+
+2003-04-08 10:18:15  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * po/es.po: Mark a translation as fuzzy in order to fix #1522.
+
+2003-04-07 20:08:10  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * commands.c: Fix #1528.
+
+2003-04-07 07:57:49  René Clerc  <rene@clerc.nl>  (roessler)
+
+       * po/nl.po: update
+
+2003-04-06 11:00:59  Ivan Vilata i Balaguer  <ivan@selidor.net>  (roessler)
+
+       * po/ca.po: update
+
+2003-04-02 09:05:19  Bjoern Jacke  <muttbug@j3e.de>  (roessler)
+
+       * smime_keys.pl: - add a missing filehandle closure - some
+       cleanups of unused/bogous code
+
+2003-04-02 08:47:28  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * contrib/Makefile.in, contrib/colors.default,
+       contrib/colors.linux: sample.muttrc-tlr would try to include
+       my color configurations, which weren't distrubted.  Fix
+       that. (Bug noted while helping someone else to configure
+       mutt during a conference.)
+
+2003-04-02 08:43:24  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * contrib/sample.muttrc: Fix sample.muttrc.  (Error noted by
+       Thomas Glanzmann.)
+
+2003-04-02 08:40:50  Gary Johnson  <garyjohn@spk.agilent.com>  (roessler)
+
+       * curs_main.c: Here is the patch to fix the bug I reported
+       earlier in this thread, that sometimes when changing folders,
+       mutt would generate an error message and stop the further
+       processing of folder-hooks.
+
+2003-04-02 08:38:13  Vincent Lefevre  <vincent@vinc17.org>  (roessler)
+
+       * po/fr.po: update
+
+2003-04-02 08:34:49  TAKAHASHI Tamotsu  <ttakah@lapis.plala.or.jp>  (roessler)
+
+       * po/ja.po: update
+
+2003-04-02 08:31:00  Roland Rosenfeld  <roland@spinnaker.de>  (roessler)
+
+       * po/de.po: update
+
+2003-04-02 08:28:24  David Shaw  <dshaw@jabberwocky.com>  (roessler)
+
+       * init.h, mutt.h, pgp.c: Here is the pgp_check_exit patch
+       updated for 1.5.4.  This patch adds the pgp_check_exit option
+       (enabled by default) that causes mutt to check the exit code
+       of the PGP subprocess.  A non-zero exit code means that the
+       subprocess failed and mutt will not continue to send the message.
+
+       This is needed as in certain cases, PGP or GnuPG can fail to
+       completely process a document (say, if the gpg.conf file is
+       mangled, which is how I discovered the problem).  Without an
+       exit code check, mutt will continue anyway and send the half
+       processed file.
+
+2003-04-02 08:21:09  Vsevolod Volkov  <vvv@mutt.org.ua>  (roessler)
+
+       * po/ru.po: update.
+
+2003-03-19 22:43:08  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po,
+       po/uk.po, po/zh_CN.po, po/zh_TW.po, po/et.po, po/fr.po, po/gl.po,
+       po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po,
+       po/nl.po, ChangeLog, Makefile.am, VERSION, po/Makefile.in.in,
+       po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po,
+       po/es.po, reldate.h: automatic post-release commit for mutt-1.5.4
+
+2003-03-19 22:18:43  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/sk.po,
+       po/sv.po, po/pl.po, po/pt_BR.po, po/ru.po, po/ja.po, po/ko.po,
+       po/lt.po, po/nl.po, po/gl.po, po/hu.po, po/id.po, po/it.po,
+       po/et.po, po/fr.po, po/da.po, po/de.po, po/el.po, po/eo.po,
+       po/es.po, VERSION, po/bg.po, po/ca.po, po/cs.po, reldate.h,
+       ChangeLog: automatic post-release commit for mutt-1.4.1
+
+       * pgppubring.c: Fix some memory management calls. (Stable branch.)
+
+2003-03-19 21:33:30  Edmund GRIMLEY EVANS  <edmundo@rano.org>  (roessler)
+
+       * imap/utf7.c: Fix a buffer overflow in utf8_to_utf7. (Stable
+       branch.)
+
+       * imap/utf7.c: Fix a buffer overflow in utf8_to_utf7.
+
+2003-03-18 14:51:52  Andrew W. Nosenko  <awn@bcs.zp.ua>  (roessler)
+
+       * buffy.c (test_last_status_new): Fix memory leak.  Envelope
+       structure allocated by mutt_read_rfc822_header() was never
+       deallocated.
+
+       * parse.c (mutt_read_rfc822_header): Comment added about
+       needing deallocate envelope structure returned by
+       mutt_read_rfc822_header().
+
+       * mutt_idna.c: (mutt_addr_for_display): Fix memory leak.  `user'
+       and `domain' buffers was never deallocated.
+
+       (mbox_to_udomain): Fix memory leak.  `scratch' buffer was not
+       deallocated when `mbx' doesn't contain '@'. Also rewritten for
+       allocating memory only when needed and only how many as needed.
+
+2003-03-12 13:00:03  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * copy.c, sendlib.c: We need to re-format address headers instead
+       of just decoding them.
+
+2003-03-07 14:55:53  Brendan Cully  <brendan@kublai.com>  (roessler)
+
+       * mutt_sasl.c: The global callbacks set up in sasl_client_init
+       are not copied by the SASL library, so they can't be allocated
+       on the stack. This is the case with both versions of the SASL
+       library, and I frankly don't understand why it hasn't caused
+       problems before. Since it segfaults reliably on OS X for me now,
+       I thought a patch would be in order.
+
+2003-03-07 08:23:27  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * crypt.c, pgp.h: Don't use functions without importing the
+       corresponding prototype.
+
+       * mutt_idna.c: It seems like libidn doesn't like to translate
+       NULL pointers.
+
+2003-03-07 07:52:49  Jim Mock  <mij@soupnazi.org>  (roessler)
+
+       * globals.h: globals.h is looking for crypt.h instead of
+       mutt_crypt.h.
+
+2003-03-06 21:23:53  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * send.c: Fixing a segmentation fault.  Here's how to
+       reproduce it: Start mutt.  Compose a new message, with an
+       attachment. Turn on PGP signing.  Press C-G on the pass
+       phrase prompt. Turn off PGP signing.  Send the message.
+
+2003-03-05 21:18:24  Andrew W. Nosenko  <awn@bcs.zp.ua>  (roessler)
+
+       * protos.h, sort.c: Fix a warning.
+
+       * mutt_idna.c: Fix tlr's pre-processor screw-up.
+
+2003-03-04 09:51:07  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * mutt_idna.c, mutt_socket.c: Unset UseSTD3ASCIIRules, and set
+       AllowUnassigned.  (Just reading some standards.)
+
+2003-03-04 09:31:19  Edmund GRIMLEY EVANS  <edmundo@rano.org>  (roessler)
+
+       * handler.c: Be more friendly about bad multipart/alternative
+       bodies; #1478. Note that the relevant standards explicitly
+       *forbid* nested MIME encodings.
+
+2003-03-04 09:27:21  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * copy.c: Fix another stupid error, and decode IDNs in the
+       CC header.
+
+       * init.h: Fix two typos in one line.  Noted by Thomas Glanzmann
+       and Steve Kennedy.
+
+       * addrbook.c, alias.c, send.c: Fixing more IDN bugs.
+
+2003-03-03 14:25:14  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * copy.c, sort.c: Fixing some nits.
+
+       * mutt_socket.c: IDNA support for the socket back-end.
+
+       * Makefile.am, addrbook.c, alias.c, charset.h, commands.c,
+       compose.c, configure.in, copy.c, edit.c, hdrline.c, headers.c,
+       init.c, main.c, mutt_idna.c, mutt_idna.h, pgpinvoke.c,
+       protos.h, query.c, recvcmd.c, rfc822.c, rfc822.h, send.c,
+       sendlib.c: IDN support for e-mail messages.  Things should work
+       automagically once you have the GNU IDN library available from
+       ftp://alpha.gnu.org/pub/gnu/libidn/ installed.  For IDN's which
+       can't be losslessly recoded to your local character set, mutt
+       should automatically fall back to using the ASCII representation.
+       There's probably a considerable number of bugs in this, and the
+       code may, at this point, not even compile on machines without
+       libidn.  Will start working on that ASAP.
+
+2003-03-03 08:26:21  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * contrib/sample.muttrc, doc/manual.sgml.head, recvcmd.c,
+       commands.c, init.h, mutt.h: Introduce a new option named
+       $bounce, and fix some inconsistencies in the messages created
+       when bouncing.  Based on work done by Thomas Glanzmann
+       <sithglan@stud.uni-erlangen.de>.
+
+2003-02-25 22:00:38  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * commands.c, recvcmd.c: Fix some (too lazy and tired to do all)
+       of the inconsistencies between message and attachment bouncing.
+
+       * crypt.c: I should test-compile things before committing.
+       Stupid typo.
+
+2003-02-25 21:41:32  Michael Elkins  <me@sigpipe.org>  (roessler)
+
+       * query.c: Use mutt_strwidth for query response formatting.
+       (#1477)
+
+2003-02-25 21:37:59  Christian Vogel  <vogelchr@vogel.cx>  (roessler)
+
+       * mx.c: Recognize MH folders used by sylpheed.
+
+2003-02-25 21:35:24  jesus.climent@hispalinux.es  (roessler)
+
+       * po/es.po: Fix a typo. (#1482)
+
+2003-02-25 21:33:16  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * doc/manual.sgml.head: Remove some ftp.guug.de URLs from the
+       manual. (#1485)
+
+       * crypt.c: Fix #1486; noted by Jeroen Coekaerts
+       <jeroen@coekaerts.be>.
+
+2003-02-19 21:33:43  David Shaw  <dshaw@jabberwocky.com>  (roessler)
+
+       * pgpmicalg.c: 3156 defined several micalg values (pgp-md5,
+       pgp-sha1, etc.)  Since then, three more hashes have been assigned
+       numbers in 2440bis.  Here is a patch to add values for pgp-sha256,
+       pgp-sha384, and pgp-sha512 so mutt can properly handle them.
+
+2003-02-19 21:31:19  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * parse.c: Fix a memory leak observed by Vineet Kumar
+       <mutt-dev@virtual.doorstop.net>.
+
+2003-02-13 09:55:02  David Shaw  <dshaw@jabberwocky.com>  (roessler)
+
+       * init.h: Here are some updates to the muttrc docs (spell check,
+       language tweaks, etc).  No functional changes - this is just
+       language stuff.
+
+2003-02-13 09:50:00  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * pgp.c: Fix #1444, Debian #178563.  The details of this problem
+       were tracked down by Steven Barker <steve@blckknght.org>.
+
+2003-01-31 00:15:03  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * init.h: Change the default for crypt_replyencrypt back to "yes".
+       Noted by Thomas Poindessous in Debian bug #178899; also #1448.
+
+       * pgp.c: Fix #1442 (thanks, Dale); properly initialize some
+       pointers which could otherwise lead to crashes.
+
+2003-01-30 23:54:30  David Shaw  <dshaw@jabberwocky.com>  (roessler)
+
+       * crypt.c, init.h, mutt.h, mutt_crypt.h, send.c: Introduce
+       $pgp_auto_traditional.
+
+2003-01-30 23:48:36  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * flags.c: The IMAP ACL patch broke things.
+
+2003-01-23 22:05:02  Nathan Dushman  <nhd+mutt@andrew.cmu.edu>  (roessler)
+
+       * pop_auth.c: SASL2 support for popo_auth.c.
+
+       * curs_main.c, flags.c, imap/imap.c, pager.c: The attached
+       patch provides improved support for IMAP ACLs (on servers that
+       support them).  This means that mutt will now write the Seen
+       flag in mailboxes that allow it, even if the mailbox doesn't
+       allow other changes.
+
+2003-01-23 22:01:03  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * handler.c: Automatically use the text/plain handler for text/*
+       body parts which don't have a handler of their own.
+
+2003-01-21 18:56:10  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * cryptglue.c: Fix a typo which broke pgp-extract-traditional.
+
+       * mutt_crypt.h: Fix an #ifdef.
+
+2003-01-21 12:33:41  Werner Koch  <wk@gnupg.org>  (roessler)
+
+       * Makefile.am, acconfig.h, attach.c, commands.c, compose.c,
+        configure.in, copy.c, copy.h, crypt.c, cryptglue.c, curs_main.c,
+        functions.h, globals.h, gnupgparse.c, handler.c, hdrline.c,
+        headers.c, hook.c, init.c, init.h, keymap.c, keymap.h,
+        main.c, mutt.h, mutt_crypt.h, muttlib.c, mx.c, pager.c,
+        parse.c, pattern.c, pgp.c, pgp.h, pgpkey.c, pgplib.c, pgplib.h,
+        pgppubring.c, pop.c, postpone.c, protos.h, recvattach.c, send.c,
+        sendlib.c, smime.c, smime.h, sort.h:  
+        
+        - To cleanup the pgp/smime code and prepare for other
+                  backends.  
+        - Support gpg-agent by not asking for a passphrase.
+
+       This is just a start and probably we need a couple of other things
+       to do. One drawback is that the help menu does always list all
+       crypto realted stuff even when configured for no crypto at all.
+       Same goes for the configure options but I consider thsi a feature:
+       It allows to use the same .muttrc for different versions of mutt -
+       at least during development, this is an advantage.  This all might
+       be fixed but requires some changes to the configuration system.
+
+       Note, the use of the WithCrypto macro - it enables the compiler
+       to do dead-code-elimination depending on the configured backend.
+       This is better readable than all the nested ifdefs.  I did some
+       short tests and it seems to work, althoug mutt's size does not
+       change largely when compiled w/o crypto.
+
+       cryptglue.c is new as a warpper to all crypto calls; some are
+       still in crypt.c but they should eventually also be wrapped.
+       We don't use function pointers to keep a path to use dlopen or
+       runtime configured backends.  crypt.h is also new and replaces
+       pgp.h and smime.h in most files (except for the backend).
+
+       (Details are in Werner's changelog entries from January 4
+       and January 6 below.  Note that the configure update Werner
+       had done are not in the CVS at this point. -- T.R.)
+
+2003-01-09 17:27:25  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * pgppubring.c: Don't make a "hard" transition to the new GnuPG
+       syntax in pgpring.  This change undoes one of David Shaw's
+       changes which were just committed.
+
+2003-01-09 17:24:41  David Shaw  <dshaw@jabberwocky.com>  (roessler)
+
+       * gnupgparse.c, pgppubring.c: The latest GnuPG has new abilities
+       to work with disabled keys.  Part of this change will eventually
+       involve moving the 'd' that indicates a disabled key to a
+       different part of the key listing.
+
+       To smooth this transition, as of version 1.2.2, GnuPG will
+       start giving the 'd' in both places (and will do this for a good
+       long time).
+
+       Here is a patch so mutt will accept either the old or new syntax.
+
+       * curs_lib.c: A recent change causes all mutt_yesorno prompts
+       to come out as [yes]/yes or [no]/no.  Here's a fix.
+
+2003-01-06  Werner Koch  <wk@gnupg.org>  (Committed 2003-01-21, roessler.)
+
+       * crypt.c (crypt_valid_passphrase): Detect gpg-agent and don't ask
+       for the passphrase.
+       * pgp.c (pgp_decrypt_part, pgp_application_pgp_handler)
+       (pgp_sign_message, pgp_encrypt_message)
+       (pgp_traditional_encryptsign): Make sure that we never ever send
+       the passphrase if the gpg-agent has been detected.  Likewise.
+
+       * acconfig.h: Removed all remaining stuff as AC_TEMPLATEs to
+       configure.in. BTW, we should consider to rename configure.in to
+       configure.ac.
+
+2003-01-05 22:16:02  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * smime_keys.pl: Error checking for the creation of the temporary
+       directory; also, use file mode 0700.
+
+2003-01-05 22:08:25  Bjoern Jacke  <bjoern@j3e.de>  (roessler)
+
+       * smime_keys.pl: Improve temporary file handling.
+
+2003-01-05 22:02:37  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * commands.c: Another mutt_yesorno() change, in order to correctly
+       interpret a C-g.
+
+2003-01-05 22:00:00  Armin Wolfermann  <aw@osn.de>  (roessler)
+
+       * recvcmd.c, send.c, alias.c, attach.c, commands.c, curs_lib.c,
+       main.c, muttlib.c, mx.c, pgpkey.c: Fix a number of invocations
+       of mutt_yesorno(): Always explicitly use the M_YES and M_NO
+       constants.  Fixes a couple of cases in which C-g would be
+       mis-interpreted.
+
+2003-01-04  Werner Koch  <wk@gnupg.org>  (Committed 2003-01-21, roessler.)
+
+        Replaced the use of HAVE_PGP and HAVE_SMIME by a more readable
+       and extendable solution.
+
+       * pgplib.h: Moved enum pgp_ring and KEYFLAGS_* to
+       * crypt.h: here.
+       * smime.c (mutt_is_application_smime): Moved to 
+       * crypt.c (mutt_is_application_smime): here.
+       * pgp.c (mutt_is_application_pgp): Moved to 
+       * crypt.c (mutt_is_application_pgp): here.
+       * pgp.c (pgp_is_multipart_encrypted): Removed. Merged code with 
+       * crypt.c (mutt_is_multipart_encrypted): this.
+
+       * mutt.h: Protect against double inclusion.
+
+       * pgplib.h (struct pgp_keyinfo): Remove the typedef to pgp_key_t.
+       * crypt.h (pgp_key_t): Declare the typedef here.  NOTE:  This is
+       now a pointer.  Changed all usages accordingly.
+
+       * configure.in: Replace HAVE_PGP and HAVE_SMIME by the new
+       CRYPT_BACKEND macros.  Always include all OPS.*. 
+       (LIBOBJ): Replaced by AC_LIBOBJ as required by newer autoconfs.
+       * Makefile.am (EXTRA_mutt_SOURCES): Move crypt.c to mutt_SOURCES.
+       (mutt_SOURCES): Add cryptglue.c
+       (EXTRA_DIST): Add crypt.h
+
+       * pgp.h, pgplib.h, smime.h: Use the header only when the
+       approriate backend has been configured.
+       * pgp.c, pgpkey.c, smime.c: Build only if the approriate
+       CRYPT_BACKEND_ macro is defined.
+       * pgp.h, smime.h, global.h: Moved all variable declarations to
+       global.h because they are now always defined. 
+
+       * sort.h: Always define PgpSortKey, although it does not belong to
+       here.
+
+       * keymap.h: Unconditionally include all PGP and SMIME stuff.
+       * mutt.h: Ditto.
+       * protos.h: Ditto.
+
+       * init.h (HAVE_SMIME): Unconditionally include all crypto related
+       definitions.  Mark the doc entries with "(Crypto/PGP/SMIME only)".
+
+       * globals.h: Replace gpg.h and smime.h by crypt.h.
+
+       * functions.h: Always include all crypto commands.
+       
+       * copy.h: Unconditionally define the crypto related M_CM_
+
+       * pgplib.h: Move APPLICATION_PGP and PGP* to crypt.h and include
+       it.
+       * smime.h: Move APPLICATION_SMIME and SMIME* to crypt.h and
+       include it.
+       * mutt_crypt.h (ENCRYPT,SIGN,GOODSIGN, BADSIGN): Move to crypt.h.
+
+       * crypt.c: Replaced pgp.h and smime.h header by crypt.h.  Always
+       include all functions but shortcut them depending on WITHCRYPTO.
+        All over the place use WITHCRYPTO instead of ifdefs.  Replaced all
+       direct calls of the backend fucntions by twrapper functions
+       defined in cryptglue.c
+       (crypt_get_keys): Removed prototypes.
+       * pgp.h (pgp_findKeys): New prototype.
+       * smime.h (smime_findKeys): New prototype.
+       * cryptglue.c: New.
+       * crypt.h: New.
+       * mutt_crypt.h: Moved all crypt_* prototypes to gcrypt.h.
+       Unconditionally use this file.
+       
+       * init.c: Replaced pgp.h and smime.h header by crypt.h.
+       (parse_set): Use WITHCRYPTO instead of ifdefs.
+       (mutt_var_value_complete): Ditto.
+
+       * sendlib.c: Replaced pgp.h and smime.h header by crypt.h.
+       (write_as_text_part): Now one macro using WITHCRYPTO.
+       (mutt_write_mime_body): Use WITHCRYPTO instead of ifdefs.
+       (mutt_make_message_attach): Ditto.
+       (mutt_write_fcc): Ditto.
+
+       * send.c: Replaced pgp.h and smime.h header by crypt.h.
+       (include_forward): Use WITHCRYPTO and validate passphrases for pgp
+       and smime.
+       (include_reply): Ditto.
+       (generate_body): Use WITHCRYPTO instead of ifdefs.
+       (ci_send_message): Ditto.
+
+       * recvattach.c: Replaced pgp.h and smime.h header by crypt.h.
+       (mutt_gen_attach_list): Use WITHCRYPTO instead of ifdefs.
+       (mutt_attach_display_loop): Ditto
+       (mutt_view_attachments): Ditto.
+
+       * postpone.c: Replaced pgp.h and smime.h header by crypt.h.
+       (mutt_get_postponed): Use WITHCRYPTO instead of ifdefs.
+       (mutt_parse_crypt_hdr): Always include and use WITHCRYPTO instead
+       of ifdefs.
+       (mutt_prepare_template): Use WITHCRYPTO instead of ifdefs.
+
+       * pop.c: Removed pgp.h and smime.h.
+       (pop_fetch_message): Use WITHCRYPTO instead of ifdefs.
+
+       * pattern.c: Replaced pgp.h and smime.h header by crypt.h.
+       (Flags): Always include the crypto flags.
+       (msg_search): Use WITHCRYPTO instead of ifdefs.
+       (mutt_pattern_exec): Ditto.
+
+       * parse.c: Removed pgp.h and smime.h.
+       (mutt_parse_mime_message): Use WITHCRYPTO instead of ifdefs.
+
+       * pager.c: Replaced pgp.h and smime.h header by crypt.h.
+       (mutt_pager): Use WITHCRYPTO instead of ifdefs.
+
+       * mx.c: Removed smime.h and pgp.h.
+       (mx_update_context): Use WITHCRYPTO instead of ifdefs.
+
+       * muttlib.c: Replaced pgp.h and smime.h header by crypt.h.
+       (mutt_needs_mailcap): Use WITHCRYPTO. Note, that there used to be
+       an error when PGP was not configured so that TYPEAPPLICATION was
+       not recognized for SMIME.
+       (mutt_is_text_part): Use WITHCRYPTO instead of ifdefs.
+
+       * main.c: Include crypt.h.
+       (show_version): Remove HAVE_PGP and HAVE_SMIME.  Add
+       CRYPT_BACKEND_CLASSIC_PGP, CRYPT_BACKEND_CLASSIC_SMIME.
+
+       * keymap.c: Include crypt.h so that we can test WITHCRYPTO.
+       (Menus): Always include pgp and smime. 
+       (km_init): Create smime and pgp bindings depending on WITHCRYPTO.
+       (km_get_table): Return OpPgp depending on WITHCRYPTO.
+
+       * hook.c (mutt_parse_hook): Use WITHCRYPTO instead of ifdefs.
+       (mutt_crypt_hook): Always include.
+
+       * headers.c: Replaced pgp.h and smime.h header by crypt.h.
+       (mutt_edit_headers): Use WITHCRYPTO instead of ifdefs
+
+       * hdrline.c: Replaced pgp.h and smime.h header by crypt.h.
+       (hdr_format_str): Use WITHCRYPTO.
+
+       * handler.c: Replaced pgp.h and smime.h header by crypt.h.
+       (mutt_can_decode): Use WITHCRYPTO instead of ifdefs.
+       (mutt_can_decode): Application/smime is now also checked when PGP
+       support is not configured.
+       (mutt_body_handler): Use WITHCRYPTO
+
+       * curs_main.c: Replaced pgp.h and smime.h header by crypt.h.
+       (mutt_index_menu): Shortcut crypto only operations depending on
+       WITHCRYPTO.
+
+       * copy.c: Replaced pgp.h and smime.h header by crypt.h.
+       (_mutt_copy_message): 
+
+       * compose.c: Replaced pgp.h and smime.h header by crypt.h.
+       (enum): Always include HDR_CRYPT and HDR_CRYPTINFO.
+       (redraw_crypt_lines): Always include this fnc but shortcut it
+       depending on WITHCRYPT.  Draw lines depending on the configured
+       crypto support.
+       (pgp_send_menu): Always include this one.  Call wrapper functions.
+       (smime_send_menu): Likewise.
+       (draw_envelope): Use WITHCRYPTO instead of ifdefs.
+       (mutt_compose_menu): Allow pgp/smime commands only when configured.
+
+       * commands.c: Replaced pgp.h and smime.h header by crypt.h.
+       (mutt_display_message,pipe_msg, _mutt_pipe_message)
+       (set_copy_flags, mutt_save_message, mutt_edit_content_type)
+       (_mutt_check_traditional_pgp): Use pgp wrapper.
+
+       * attach.c (mutt_view_attachment): Removed HAVE_GPG and HAVE_SMIME
+       and replaced by global variable WITHCRYPTO.  Replaced pgp and
+       smime header by crypt.h.x
+
+2003-01-03 18:07:36  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * pgp.c: Detect in-line key material when checking for traditional
+       PGP messages.
+
+2002-12-22 20:04:51  René Clerc  <rene@clerc.nl>  (roessler)
+
+       * po/nl.po: update
+
+2002-12-22 20:01:32  Bjoern Jacke  <bjoern@j3e.de>  (roessler)
+
+       * smime_keys.pl: Remove an unnecessary invocation of "cat";
+       call openssl with the full path.
+
+2002-12-22 11:20:00  Vincent Lefevre  <vincent@vinc17.org>  (roessler)
+
+       * po/fr.po: Another fr.po update for the CVS (taking into account
+       the change in pgpkey.c:486)...
+
+2002-12-22 11:17:24  Martin Michlmayr  <tbm@cyrius.com>  (roessler)
+
+       * hdrline.c, init.h: Add %A to the format strings, which expands
+       to the reply-to address (if present) or to the author's address
+       when there's no Reply-To header.
+
+2002-12-21 20:32:13  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * curs_main.c: OK, Michael is right: Gotos suck. ;-)
+
+2002-12-21 13:25:11  Vsevolod Volkov  <vvv@mutt.org.ua>  (roessler)
+
+       * po/ru.po: update
+
+2002-12-20 09:37:59  David Shaw  <dshaw@jabberwocky.com>  (roessler)
+
+       * pgpkey.c: Minor tweak to an error message.
+
+2002-12-20 09:29:12  Pawel Dziekonski  <dzieko@pwr.wroc.pl>  (roessler)
+
+       * po/pl.po: update
+
+2002-12-19 11:48:58  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * doc/manual.sgml.head, doc/muttrc.man.head: Improve the
+       documentation of pgp-hook/crypt-hook.
+
+       * pgpkey.c: Don't bother the user with weak keys when there's
+       a strong one.  Experimental, based on discussions on mutt-dev.
+
+       * cvslog2changelog.pl: Identify both the author of a change and
+       the one who committed it to the CVS in the changelog.
+
+2002-12-19 07:42:36  Vincent Lefevre  <vincent@vinc17.org>  (roessler)
+
+       * po/fr.po: update
+
+2002-12-19 07:37:01  Thomas Roessler  <roessler@does-not-exist.org>  (roessler)
+
+       * Makefile.am: Michael doesn't have $VISUAL set.
+
+2002-12-18 17:29:56  Sahil Tandon  <sahil@brandeis.edu>
+
+       * init.h: I found a small typo in the manual, specifically
+       at this[1] URL.  The description of the smart_wrap variable reads:
+       "Controls the display of lines longer then the screen width in the
+       internal pager."  The word _then_ should be _than_ if I'm not
+       mistaken.
+
+2002-12-18 10:26:35  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po,
+       po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po,
+       po/zh_TW.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po,
+       po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po,
+       po/id.po, po/it.po: make update-po
+
+       * mkchangelog.sh: Turn on compression when getting log messages
+       from the CVS server.  (Now that I don't have the server locally,
+       bandwidth is expensive...  ;-)
+
+       * keymap.c: Make the messages from the what-key function
+       internationalizable.
+
+       * crypt.c, crypt.h, mutt_crypt.h, pgp.c, pgp.h, smime.c,
+       smime.h: Rename crypt.h to mutt_crypt.h.
+
+       * Makefile.am: cvs update ChangeLog before trying to update
+       it locally.
+
+2002-12-18 07:37:56  Roland Rosenfeld  <roland@spinnaker.de>
+
+       * po/de.po: update
+
+2002-12-17 13:45:16  Vincent Lefevre  <vincent@vinc17.org>
+
+       * po/fr.po: update fr.po
+
+2002-12-17 13:04:29  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * .cvsignore: Ignore some more files.
+
+       * Makefile.am, mkjtags.c: Remve that jed tags generator.  I don't
+       use it anyway.
+
+       * cvslog2changelog.pl: Adding Michael's address to the changelog
+       generator.
+
+       * build-release: Adopting the release-building script to the
+       new changelog process.
+
+       * po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po,
+       po/zh_TW.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po,
+       po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/es.po, po/et.po,
+       po/fr.po, po/gl.po, VERSION, build-release, po/ca.po, po/cs.po,
+       po/da.po, po/de.po, po/el.po, po/eo.po, reldate.h: automatic
+       post-release commit for mutt-1.5.3
+
+       * OPS, curs_main.c, functions.h: Experimental: Introduce
+       {next,previous}-new-then-unread.  These functions behave
+       like {next,previous}-new as long as new messages are
+       visible. When no new messages are visible any more, there's
+       a fall-back to {next,prev}-unread.
+
+       Memo to self: Impose a weekly quota on the use of goto
+       statements.
+
+2002-12-16 20:28:46  Edmund GRIMLEY EVANS  <edmundo@rano.org>
+
+       * handler.c, rfc2047.c, url.c: Fix #1424.
+
+2002-12-16 17:59:51  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * pgp.c: Experimental short-cut code if the "image" of an address
+       under a pgp-hook looks like a hexadecimal key id.
+
+2002-12-13 15:53:36  David Shaw  <dshaw@jabberwocky.com>
+
+       * lib.c: Fixing Thomas' screw-up in mutt_concat_path.
+
+2002-12-13 11:00:44  René Clerc  <rene@clerc.nl>
+
+       * po/nl.po: update.
+
+2002-12-11 22:47:57  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * muttlib.c, pgp.c, protos.h, send.c: Fix #1417; thanks to
+       Derek D. Martin <ddm@sophic.org> for the excellent observation.
+       (In addition to the fix proper, some tracking of temporary files
+       is added to mutt's debugging output.)
+
+2002-12-11 22:23:42  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * crypt.c: Call endwin() before calling PGP for traditional
+       encryption.
+
+2002-12-11 15:51:57  Vincent Lefevre  <vincent@vinc17.org>
+
+       * po/fr.po: update.
+
+2002-12-11 15:20:21  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * browser.c, complete.c, hook.c, init.c, lib.c, lib.h: Herbert
+       Martin Dietze <herbert@the-little-red-haired-girl.org> notes that
+       mutt may currently build IMAP URLs like imap://exchange//herbert
+       for FCCs.  The fix in this patch is to include a function named
+       mutt_concat_path which concatenates path elements, but avoids
+       the creation of double slashes.  (These don't create problems
+       when you're just accessing the file system, but apparently they
+       do cause problems with IMAP.)
+
+       * imap/auth.c, imap/command.c, imap/imap.c, imap/imap.h,
+       imap/util.c, date.c, dotlock.c, dotlock.h, edit.c, editmsg.c,
+       enter.c, extlib.c, flags.c, from.c, functions.h, gnupgparse.c,
+       handler.c, hash.c, hash.h, headers.c, help.c, history.c,
+       history.h, keymap.c, keymap.h, lib.c, lib.h, main.c, makedoc.c,
+       mapping.h, menu.c, mh.c, mime.h, mkjtags.c, mutt_curses.h,
+       mutt_menu.h, mutt_regex.h, mutt_socket.c, muttlib.c, mx.c, mx.h,
+       pager.h, parse.c, pattern.c, pgp.c, pgp.h, pgpinvoke.c, pgpkey.c,
+       pgplib.c, pgplib.h, postpone.c, protos.h, query.c, recvattach.c,
+       recvcmd.c, remailer.c, remailer.h, resize.c, rfc1524.c, rfc1524.h,
+       rfc2047.c, rfc2047.h, rfc2231.c, rfc2231.h, rfc822.c, rfc822.h,
+       score.c, signal.c, snprintf.c, sort.c, sort.h, status.c,
+       system.c, thread.c, url.c, addrbook.c, alias.c, attach.c,
+       attach.h, browser.c, browser.h, buffy.c, buffy.h, charset.c,
+       charset.h, commands.c, complete.c, compose.c, copy.h, crypt.c,
+       crypt.h, curs_main.c: Fix Mike's and my e-mail addresses in
+       copyright lines.
+
+       * muttbug.sh.in: Ask for the user's e-mail address.
+
+       * pager.c: Try to make search-next behave more closely to what
+       people are used to, again.  The behaviour introduced by this
+       patch will give you the previous search string as the default,
+       but will search-next when you just press enter without changing
+       the search string.
+
+2002-12-10 20:56:52  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/command.c, imap/imap.c, imap/message.c, imap/utf7.c,
+       imap/util.c, score.c, send.c, sendlib.c, smime.c, thread.c, url.c,
+       addrbook.c, alias.c, attach.c, browser.c, buffy.c, charset.c,
+       color.c, compose.c, copy.c, crypt.c, curs_main.c, enter.c,
+       gnupgparse.c, hash.c, history.c, hook.c, init.c, lib.c, main.c,
+       mbox.c, menu.c, mh.c, mutt_ssl.c, mutt_ssl_nss.c, muttlib.c,
+       mx.c, pager.c, parse.c, pattern.c, pgp.c, pgpkey.c, pgplib.c,
+       pgppacket.c, pgppubring.c, pop.c, pop_auth.c, postpone.c,
+       query.c, recvattach.c, remailer.c, rfc1524.c, rfc2047.c,
+       rfc2231.c, rfc822.c: Replace safe_free calls by the FREE macro.
+
+2002-12-09 19:06:40  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * Makefile.am: Minor formatting fix.
+
+       * cvslog2changelog.pl: Change the ChangeLog format as
+       suggested by Martin Michlmayer.
+
+       * send.c: Try to fix another obscure error in S/MIME
+       auto-signing upon reply.
+
+       * rfc822.c: Experimental patch to fix #1318.
+
+2002/12/09 18:09:49  David Jardine <david@jardine.de>
+
+       * init.h: Documentation fix concerning %L in index_format.
+       #1313.
+
+2002/12/09 18:05:54  David Shaw <dshaw@jabberwocky.com>
+
+       * mh.c, parse.c: Reduce the meaning of the mark_old option
+       so it only controls whether new messages are marked as old
+       when leaving the mailbox.
+
+2002/12/09 17:54:25  Jesus Climent <jesus.climent@hispalinux.es>
+
+       * po/es.po: Fix a typo.  (#1392)
+
+2002/12/09 17:52:50  Anders Helmersson <anders.helmersson@telia.com>
+
+       * addrbook.c, curs_lib.c, protos.h, query.c: Fix #1390.
+       Based on a patch submitted earlier by Edmund Grimley Evans.
+
+2002/12/09 17:44:54  Thomas Roessler <roessler@does-not-exist.org>
+
+       * PATCHES: Ups.
+
+2002/12/09 17:44:28  Michael Elkins <me@sigpipe.org>
+
+       * OPS, PATCHES, curs_main.c, functions.h, keymap.c, keymap.h,
+       menu.c: This patch adds two features to mutt:
+
+       - you can now specify the octal code of a key in a bind or
+         macro function, using the syntax <NNN>.  Eg, bind index
+         <541> show-version This allows you to bind to a function
+         key for which Mutt doesn't have a friendly name associated
+         with it.
+
+       - adds a what-key function which allows you to press a key
+         and have mutt show you the decimal/octal value.  (not
+         bound to anything by default)
+
+2002/12/09 16:07:24  Toomas Soome <tsoome@muhv.pri.ee>
+
+       * po/et.po: update.
+
+2002/12/09 13:30:02  Thomas Roessler <roessler@does-not-exist.org>
+
+       * po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po,
+       po/uk.po, po/zh_CN.po, po/zh_TW.po, po/gl.po, po/hu.po,
+       po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po,
+       po/pl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/ca.po,
+       po/cs.po, po/da.po, po/de.po, po/el.po, compose.c: Try to
+       fix a localization issue identified by Pawel Dzienkonski
+       (#1410).  Side effect: All translations will need an update
+       of the S/MIME key translations.
+
+2002/12/09 11:20:14  Pawel Dziekonski <dzieko@pwr.wroc.pl>
+
+       * po/pl.po: update.
+
+2002/12/08 23:14:43  ph04169@cc.uoi.gr
+
+       * po/el.po: update.
+
+2002/12/08 16:11:35  TAKAHASHI Tamotsu <ttakah@lapis.plala.or.jp>
+
+       * po/ja.po: update.
+
+2002/12/08 15:10:59  Roland Rosenfeld <roland@spinnaker.de>
+
+       * po/de.po: Update.
+
+2002/12/07 19:19:34  Thomas Roessler <roessler@does-not-exist.org>
+
+       * Makefile.am: yet another one.
+
+       * Makefile.am: Another changelog-related change.
+
+       * ChangeLog, Makefile.am, cvslog2changelog.pl: Automatically
+       update ChangeLog as part of the commit process.
+
+       * doc/Makefile.in, ChangeLog, ChangeLog.old, Makefile.am,
+       cvslog2changelog.pl, mkchangelog.sh: Change the style of
+       ChangeLog: Now, the actual patch submitter's name is
+       extracted from the commit message and used for the change
+       log.  For the moment, the date format doesn't match the one
+       in the old changelog.  If you want to fix this, submit a
+       patch to cvslog2changelog.pl. ;-)
+
+2002/12/07 08:55:59  Vincent Lefevre <vincent@vinc17.org>
+
+       * po/fr.po: update
+
+2002/12/07 08:55:23  Paul Walker <paul@black-sun.demon.co.uk>
+
+       * pgppubring.c: Fix a compilation warning.
+
+2002/12/07 08:53:21  Thomas Roessler <roessler@does-not-exist.org>
+
+       * mh.c, mutt.h, muttlib.c: Gracefully handle unknown maildir flags.
+
+2002/12/06 11:30:08  Thomas Roessler <roessler@does-not-exist.org>
+
+       * Makefile.am: Run check_sec.sh before committing.
+
+2002/12/06 11:28:30  Brendan Cully <brendan@kublai.com>
+
+       * m4/gettext.m4, m4/iconv.m4, build-release, configure.in: autoconf cleanup.
+
+2002/12/06 11:14:13  Thomas Roessler <roessler@does-not-exist.org>
+
+       * po/zh_CN.po, po/zh_TW.po, po/uk.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/da.po, po/de.po, VERSION, po/ca.po, po/cs.po, reldate.h, ChangeLog: automatic post-release commit for mutt-1.5.2
+
+       * curs_lib.c, pgppubring.c: Fixing a number of traditional malloc calls which have made their
+       way into the code.
+
+       * build-release: Don't post announcements automatically for the moment.
+
+2002/12/05 22:30:02  Michael Elkins <me@sigpipe.org>
+
+       * doc/manual.sgml.head: Fix #1398.
+
+2002/11/25 14:16:47  Lars Hecking <lhecking@nmrc.ucc.ie>
+
+       * sendlib.c, ChangeLog, INSTALL, charset.h, configure.in: The noiconv patch.
+
+2002/11/14 08:12:30  Michael Elkins <me@sigpipe.org>
+
+       * curs_lib.c: Fix #1388.
+
+2002/11/13 10:10:52  Thomas Roessler <roessler@does-not-exist.org>
+
+       * main.c: A description of -A was lacking from the help string.
+
+       * doc/manual.sgml.head, doc/mutt.man, main.c, protos.h: Add a new command line option -A which is used to expand aliases.
+
+       * keymap.c: Add a safeguard #ifdef for the KEY_BTAB entry.  Suggested by Thomas
+       Dickey.
+
+2002/11/12 09:20:30  Michael Elkins <me@sigpipe.org>
+
+       * keymap.c: Tell mutt about the back-tab key (shift tab).
+
+2002/11/12 09:20:09  Thomas Roessler <roessler@does-not-exist.org>
+
+       * Makefile.am: ups.
+
+       * Makefile.am: Add "make pclean" in order to clean up PATCHES.
+
+2002/11/12 08:55:57  TAKAHASHI Tamotsu <arms405@jade.dti.ne.jp>
+
+       * po/ja.po: update
+
+2002/11/12 08:41:18  Thomas Roessler <roessler@does-not-exist.org>
+
+       * README: Add an explicit note that CVS doesn't work from ftp.mutt.org any more.
+
+2002/11/12 08:35:34  "Yasuhiro Matsumoto" <mattn_jp@hotmail.com>
+
+       * mbyte.c: cp932 should be treated like shift_jis.
+
+2002/11/12 08:20:11  Nathan Dushman <nhd+mutt@andrew.cmu.edu>
+
+       * imap/auth_gss.c, imap/auth_sasl.c, configure.in, main.c, mutt_sasl.c, mutt_sasl.h: Hi - this is a patch against mutt-1.4 to use version 2 of the Cyrus
+       SASL library; all changes are ifdef'd so as not to break SASLv1
+       support. This includes a patch to configure.in to allow the choice
+       between v1 and v2, but someone with a better understanding of
+       autoconf should double-check it.
+
+2002/11/12 08:00:51  Michael Elkins <me@sigpipe.org>
+
+       * handler.c: Actually commit patch-1.5.1.me.long_qp.2.
+
+       * mailbox.h, mh.c, mx.c: The maildir_time patch.
+
+2002/11/11 21:17:25  Thomas Roessler <roessler@does-not-exist.org>
+
+       * muttbug.sh.in: You shall not use CVS to distribute test versions.
+
+       * muttbug.sh.in: more fixes.
+
+       * muttbug.sh.in: Add some rpm-related intelligence to flea.
+
+       * muttbug.sh.in: Fix flea's interaction with bug(1) on Debian systems.
+
+       * PATCHES: Clean up the patch list.
+
+2002/11/11 20:32:30  Michael Elkins <me@sigpipe.org>
+
+       * PATCHES, hdrline.c: Fix #485: Make %z work like %Z inside of %{} in $index_format.
+
+       * PATCHES, copy.c: Fix #1379 - update the total mailbox size when an attachment is
+       deleted.
+
+       * PATCHES, curs_main.c, menu.c, pager.c: Fix #1310; redraw problems.
+
+       * doc/manual.sgml.head, init.h: Fix #1306.
+
+       * send.c: Fix #1364.
+
+2002/11/11 19:50:23  Steve Kennedy <steve-md@gbnet.net>
+
+       * pgp.c: Fix memory leak in the PGP code.
+
+2002/11/11 19:46:29  Paul Walker <paul@black-sun.demon.co.uk>
+
+       * commands.c, protos.h, sendlib.c: Fix #718.
+
+2002/11/11 19:38:30  Thomas Roessler <roessler@does-not-exist.org>
+
+       * sendlib.c: Fix #1366.
+
+2002/11/11 19:24:24  Martin Siegert <siegert@sfu.ca>
+
+       * mx.c: Fix IMAP moving; #1367.
+
+2002/11/11 19:22:17  rene@clerc.nl
+
+       * send.c: Another S/MIME ifdef misses and causes compilation problems.
+
+2002/11/11 19:21:24  Michael Elkins <me@sigpipe.org>
+
+       * init.h: patch-1.5.1-me.status_doc.2
+
+2002/11/11 19:16:11  Thomas Roessler <roessler@does-not-exist.org>
+
+       * alias.c, init.c, protos.h: patch-1.5-tlr.alias-parse.1 - extension of patch-1.5.1-me.aliascheck.1
+       
+       This patch catches the same kind of bad alias names caught by
+       Michael's patch.  There are some extensions:
+       
+       1. Mutt makes sure that it doesn't _suggest_ bad names to the user.
+       2. If a name is bad, the user is informed, and may elect to fix the
+          name.  In this case, mutt will automatically suggest a fixed
+          version.
+       3. If the user insists in the bad name, it's written into the
+          aliases file with proper quoting.
+       4. When mutt parses the aliases file, it now uses the normal
+          tokenizer routines in order to properly handle quoted alias names.
+
+2002/11/11 18:36:25  Michael Elkins <me@sigpipe.org>
+
+       * handler.c: patch-1.5-me.long_qp.2 (#1371) - fix truncation with overly long Q-P
+       encoded lines.
+
+2002/10/22 21:24:07  René Clerc <rene@clerc.nl>
+
+       * commands.c: Add some missing #ifdefs.
+
+2002/10/22 21:23:20  Michael Elkins <me@sigpipe.org>
+
+       * init.h, recvattach.c: Documentation fix; #1326
+
+2002/10/22 21:22:45  René Clerc <rene@clerc.nl>
+
+       * send.c: Another crypt_reply fix.
+
+2002/10/22 21:20:07  Michael Elkins <me@sigpipe.org>
+
+       * contrib/sample.muttrc: #1357
+
+2002/10/10 09:50:03  René Clerc <rene@clerc.nl>
+
+       * send.c: Make sure that crypt_reply replies with the same type, despite a
+       possible S/MIME default.
+
+2002/10/10 09:43:29  Michael Elkins <me@sigpipe.org>
+
+       * doc/manual.sgml.head, doc/manual.sgml.head: Document escaping rules for regular expressions (#1351).
+
+       * pager.c: Fix header coloring, so there is no difference between ncurses and
+       slang.
+
+       * init.h: PGP documentation glitch.
+
+2002/10/10 09:33:33  Paul Walker <paul@black-sun.demon.co.uk>
+
+       * doc/manual.sgml.head: Fix #1340 (documentation)
+
+2002/10/10 09:33:05  Michael Elkins <me@sigpipe.org>
+
+       * pager.c: Jeremy Lin wrote:
+       > When I search with / and get a match, doing '/\r' doesn't move to the next
+       > match. This behavior is unlike the less pager, and is rather useless, IMHO.
+       
+       Try the attached patch.
+
+2002/09/23 12:08:43  Thomas Roessler <roessler@does-not-exist.org>
+
+       * buffy.c: A variant of buffy notification.  Note:  If you folks don't like
+       this, we can return to the old version.
+
+2002/09/09 21:48:19  Rudi Chiarito <nutello@sweetness.com>
+
+       * OPS, browser.c, buffy.c, curs_main.c, functions.h, pager.c, protos.h: Add a buffy-list function, and display more information when new
+       mail arrives.  With some modifications from tlr.
+
+2002/09/09 21:19:08  Michael Elkins <me@sigpipe.org>
+
+       * mh.c: Fix #1321.
+
+       * mh.c: [STABLE] Fix #1321.
+
+2002/09/09 21:04:03  Tony Leneis <tony@cvr.ds.adp.com>
+
+       * signal.c: Tru64 Unix portability patch.
+
+       * signal.c: [STABLE] Tru64 Unix portability patch.
+
+2002/09/09 21:02:05  Vincent Lefevre <vincent@vinc17.org>
+
+       * doc/manual.sgml.head: Fixing a typo.
+
+2002/09/09 20:53:46  Thomas Roessler <roessler@does-not-exist.org>
+
+       * postpone.c: Fixing #1300.  Noted by David Shaw <dshaw@jabberwocky.com>.
+
+       * postpone.c: Fix #1299; noted by David Shaw <dshaw@jabberwocky.com>.
+
+2002/09/09 20:20:20  Michael Elkins <me@sigpipe.org>
+
+       * init.h, mutt.h, send.c: Introducing $forward_edit.
+
+       * send.c: #265:
+       
+       > Suppose a user wants to fcc to a file (e.g., /a/b/c) but accidentally
+       > typed a = before the path name. Mutt will fail to find the =/a/b/c
+       > folder, display the error message and beep, but immediately erase the
+       > error message; the mail will be sent even though the fcc failed. (The
+       > same can be accomplished by accidentally mistyping other parts of the
+       > path name.) On local systems where screen update is quick, the user
+       > might not notice the error message at all.
+       >
+       > The problem with this behaviour is that the user might have no chance
+       > to read the error message if the screen update is quick enough; as a
+       > result (s)he might not notice that the fcc failed.
+       >
+       > A related thing (probably can't be classified as a problem) is that if
+       > fcc fails, the user probably don't want to send the mail out because
+       > if fcc is requested (s)he probably very much want to keep a copy of
+       > the sent mail.
+       
+       Try the following patch.  We keep track of whether or not the fcc
+       failed with a local var `fcc_error' and perform the same behavior as
+       if the actual send of the message failed (without really sending)
+       when the FCC fails, thus giving the user a chance to correct the
+       error.
+
+       * globals.h, init.h, send.c: Introduce $content_type.  There's one change against Michael's
+       patch, in how the "format=flowed" parameter is used.
+
+2002/09/09 20:04:45  Vincent Lefevre <vincent@vinc17.org>
+
+       * history.c: [STABLE] Fixing history classes.
+
+       * history.c: Fixing history classes.
+
+2002/09/09 19:56:25  Armin Wolfermann <aw@osn.de>
+
+       * mh.c: when doing the second parsing pass on a maildir, mutt doesn't delete
+       the fake HEADER struct if the file is unreadable. With this fix
+       unreadable files get silently ignored (like in the MH case).
+
+2002/09/09 19:55:01  "TAKAHASHI, Tamotsu" <arms405@jade.dti.ne.jp>
+
+       * po/ja.po: Update.
+
+2002/09/09 19:53:24  Michael Elkins <me@sigpipe.org>
+
+       * editmsg.c: Fixing #1149:  Truncate files used for editing messages.
+
+2002/09/09 19:29:26  Nicolas Rachinsky <nicolas@dauerreden.de>
+
+       * doc/manual.sgml.head, doc/muttrc.man.head, buffy.c, buffy.h, init.h: An unmailboxes command.  #1311.
+
+2002/09/09 19:24:54  Michael Elkins <me@sigpipe.org>
+
+       * attach.c: Fixing #1330.
+
+       * attach.c: [STABLE] Fixing #1330.
+
+2002/08/09 07:01:11  Thomas Roessler <roessler@does-not-exist.org>
+
+       * doc/muttrc.man.head: Document unalternative_order in the manual page.
+
+2002/08/09 06:58:37  Michael Elkins <me@sigpipe.org>
+
+       * doc/manual.sgml.head, init.c, init.h: The following patch adds the `unalternative_order' command.  It also
+       allows using "*" more generically in un-commands which use
+       parse_unlists().
+
+2002/08/05 17:25:05  Michael Elkins <me@sigpipe.org>
+
+       * pgpewrap.c, pgppubring.c, pgpewrap.c, pgppubring.c: Error handling fixes.
+
+2002/07/26 08:24:01  Michael Elkins <me@sigpipe.org>
+
+       * doc/manual.sgml.head: Documentation for reply-hook.  Another patch (for the manual page)
+       would be most welcome. ;-))
+
+       * curs_lib.c: The attached patch fixes mutt_yesorno() so that the question will be
+       truncated enough to always fit in the default answer string.  The
+       size is calculated on the fly so that there is no artificial
+       truncation.
+
+2002/07/24 09:46:58  TAKIZAWA Takashi <taki@luna.email.ne.jp>
+
+       * mutt.h, mutt.h: The attached patch sets MB_LEN_MAX to 16, which is MB_LEN_MAX value
+       on glibc-2.2. It works only with --without-wc-funcs switch. It may
+       be applied to mutt-1.4 and mutt-1.5.1.
+
+2002/07/24 09:37:41  Lars Hecking <lhecking@nmrc.ie>
+
+       * configure.in, configure.in: Fix a quoting sloppiness.  Noted by Vincent Lefevre.
+
+2002/07/24 09:33:59  Thomas Roessler <roessler@does-not-exist.org>
+
+       * browser.c, browser.c: Fixing #1282.  An off-by-one error. :-/
+
+2002/07/24 09:20:22  Michael Elkins <me@sigpipe.org>
+
+       * mutt.h, send.c, hook.c, init.h: reply-hook.  Documentation still needed.
+
+2002/07/24 09:06:06  Vincent Lefevre <vincent@vinc17.org>
+
+       * po/fr.po: update.
+
+2002/07/24 08:41:31  Michael Elkins <me@sigpipe.org>
+
+       * doc/mutt.man, compose.c, editmsg.c, init.c, init.h, attach.c, doc/mutt.man, compose.c, editmsg.c, init.c, init.h, attach.c: Fix $editor and $visual.  Based on an earlier patch from Edmund
+       Grimley Evans.
+
+2002/07/19 19:23:21  Michael Elkins <me@sigpipe.org>
+
+       * doc/manual.sgml.head: Another documentation patch.
+
+2002/07/17 12:48:38  Rocco Rutte <s1118644@mail.inf.tu-dresden.de>
+
+       * sendlib.c: * Thomas Roessler [02-07-08 10:14:53 +0200] wrote:
+       >  * sendlib.c, 3.12 -> 3.13
+       >    From: Rocco Rutte <s1118644@mail.inf.tu-dresden.de>
+       
+       >    Make encode_from a bit more aggressive, by also catching a 'f' in
+       >    the beginning of a line.
+       
+       'Catch' is good but also to encode it is better. It may have
+       been too late (sorry for that) so I fixed it. I don't know
+       why the current source only escapes lines that actually
+       begin with 'from' or 'From' followed by some text. I think
+       that escaping 'from' or 'From' on a single line should be
+       done, too.
+       
+       Not a big deal, anyways.
+
+2002/07/16 07:28:11  Michael Elkins <me@sigpipe.org>
+
+       * main.c, main.c: Update copyright notices.
+
+2002/07/07 19:33:50  Cedric Duval <cedricduval@free.fr>
+
+       * doc/manual.sgml.head, doc/mutt.man, init.h: Documentation fixes.
+
+2002/07/07 19:29:05  "TAKAHASHI, Tamotsu" <arms405@jade.dti.ne.jp>
+
+       * doc/manual.sgml.head: Dcumentation fixes.
+
+2002/07/07 19:23:22  Cedric Duval <cedricduval@free.fr>
+
+       * doc/manual.sgml.head, doc/mutt.man, init.h: Documentation fixes.
+
+2002/07/07 19:22:19  Rocco Rutte <s1118644@mail.inf.tu-dresden.de>
+
+       * sendlib.c: Make encode_from a bit more aggressive, by also catching a 'f' in
+       the beginning of a line.
+
+2002/07/07 19:13:03  Velko Hristov <hristov@informatik.hu-berlin.de>
+
+       * po/bg.po: Update.
+
+2002/07/07 19:11:15  Jeremy Blosser <jblosser-mutt@firinn.org>
+
+       * init.h: Add unauto_view to the stable branch.  A one-liner.
+
+2002/06/28 19:52:31  Michael Elkins <me@sigpipe.org>
+
+       * doc/manual.sgml.head, doc/manual.sgml.head: Documentation fix (#271).
+
+2002/06/18 10:03:52  (automatic)
+
+       * po/zh_TW.po, po/tr.po, po/uk.po, po/zh_CN.po, po/sv.po, po/sk.po, po/ru.po, po/pt_BR.po, po/nl.po, po/pl.po, po/ja.po, po/ko.po, po/lt.po, po/it.po, po/gl.po, po/hu.po, po/id.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/el.po, po/da.po, po/de.po, po/ca.po, po/cs.po: "make update-po"
+
+2002/06/18 10:02:44  several submitters
+
+       * po/ca.po: Adding a BG translation.  Update for CA.
+
+2002/06/18 10:02:43  Thomas Roessler <roessler@does-not-exist.org>
+
+       * po/bg.po: branches:  1.1.2;
+       file bg.po was initially added on branch mutt-1-4-stable.
+
+2002/06/18 10:02:43  several submitters
+
+       * po/bg.po: Adding a BG translation.  Update for CA.
+
+       * configure.in: Adding a BG translation.
+
+2002/06/18 09:53:12  Michael Elkins <me@sigpipe.org>
+
+       * init.c, init.c: The string used to store the commmand for a backtic expansion in the
+       muttrc was not free'd if the command failed for some reason.
+
+2002/06/18 09:52:13  David Champion <dgc@uchicago.edu>
+
+       * m4/gssapi.m4: Okay, two bugs here. One's an oversight of mine in my previous patch,
+       where I tried to use "[hH]" as Bourne code while m4 had quoting set to
+       ([, ]) -- this probably makes mutt mis-detect Heimdal after all.
+       
+       The other is not mine (i.e., it's in cvs now) and it makes mutt
+       overstrike $LIBS if Heimdal or MIT Kerberos is detected. This is a
+       problem for anyone who needs -lnsl -lsocket, in particular. I was
+       fixing
+       this by hand during late 1.3.x releases, as I didn't have time to
+       track
+       it down....
+       
+       Here's a patch against the current (unpatched) 1.5 cvs copy of
+       m4/gssapi.m4. It probably should go into both branches. Sorry for the
+       repeats.
+
+2002/06/06 23:13:54  Michael Elkins <me@sigpipe.org>
+
+       * color.c: Fix #1230.
+
+2002/06/06 12:22:05  Will Fiveash <william.fiveash@sun.com>
+
+       * init.h, init.h: Fix a couple of compile-time warnings.
+
+2002/05/31 16:59:39  Edmund GRIMLEY EVANS <edmundo@rano.org>
+
+       * charset.c, charset.h, sendlib.c, charset.c, charset.h, sendlib.c: Fix charset-hook.
+
+2002/05/31 16:45:49  Lars Hecking <lhecking@nmrc.ucc.ie>
+
+       * m4/iconv.m4, INSTALL, charset.h, configure.in: The noiconv patch.  Should probably have been in 1.4.
+
+2002/05/30 12:15:02  Thomas Roessler <roessler@does-not-exist.org>
+
+       * rfc822.c: Properly handle empty addresses (<>) when they show up in mail
+       headers.  The approach taken is to store this address as <@>, and to
+       check this special case when printing an address.
+
+2002/05/29 09:31:51  Thomas Roessler <roessler@does-not-exist.org>
+
+       * po/zh_CN.po, po/zh_TW.po, po/uk.po, po/tr.po, po/sk.po, po/sv.po, po/pl.po, po/pt_BR.po, po/ru.po, po/ko.po, po/lt.po, po/nl.po, po/it.po, po/ja.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/eo.po, po/es.po, po/et.po, po/da.po, po/de.po, po/el.po, VERSION, po/ca.po, po/cs.po, reldate.h, ChangeLog: automatic post-release commit for mutt-1.4
+
+2002/05/29 09:28:33  Roland Rosenfeld <roland@spinnaker.de>
+
+       * po/de.po: update.
+
+2002/05/29 09:27:46  Ronny Haryanto <ronny@haryan.to>
+
+       * po/id.po: update
+
+2002/05/28 09:07:29  Michael Elkins <me@sigpipe.org>
+
+       * mx.h, postpone.c: Fix some warnings noted by Vincent Lefevre.
+
+2002/05/21 07:28:28  Edmund GRIMLEY EVANS <edmundo@rano.org>
+
+       * po/eo.po: update
+
+2002/05/18 05:39:55  Thomas Roessler <roessler@does-not-exist.org>
+
+       * pattern.c: Fix #1175.
+
+       * pattern.c: Fix #1175.  Noticed by Alain Bench.
+
+2002/05/18 05:34:50  Vsevolod Volkov <vvv@mutt.org.ua>
+
+       * pop_lib.c, pop_lib.c: Attached patch for mutt 1.3.X/1.4 and 1.5.X removes gcc warning in
+       pop_lib.c.
+
+2002/05/16 17:33:19  Pawel Dziekonski <dzieko@pwr.wroc.pl>
+
+       * po/pl.po: update
+
+2002/05/16 13:05:14  Im Eunjea <eunjea@koru.org>
+
+       * po/ko.po: update.
+
+       * po/ko.po: update
+
+2002/05/16 13:04:23  Ronny Haryanto <ronny@haryan.to>
+
+       * po/id.po: update.
+
+       * compose.c: Triple-DES, not Tripple-DES.
+
+2002/05/14 18:56:01  "Andrej N. Gritsenko" <andrej@lucky.net>
+
+       * po/uk.po: update
+
+2002/05/13 20:18:57  Toomas Soome <Toomas.Soome@microlink.ee>
+
+       * po/et.po, po/et.po: update
+
+2002/05/13 20:18:17  Vsevolod Volkov <vvv@mutt.org.ua>
+
+       * po/ru.po, po/uk.po, po/ru.po: update
+
+2002/05/13 20:16:08  Byrial Jensen <byrial@image.dk>
+
+       * po/da.po: update
+
+2002/05/13 20:15:40  Vsevolod Volkov <vvv@mutt.org.ua>
+
+       * po/ru.po: update
+
+2002/05/13 20:15:07  Jörgen Tegnér <jorgen.tegner@telia.com>
+
+       * po/sv.po, po/sv.po: update
+
+2002/05/13 20:13:56  Vincent Lefevre <vincent@vinc17.org>
+
+       * po/fr.po: update
+
+2002/05/09 09:52:09  Thomas Roessler <roessler@does-not-exist.org>
+
+       * doc/muttrc.man.head, doc/muttrc.man.head: #1190, from Tim Alexeevsky <tim@zhuchka.gbnet.net>
+
+2002/05/06 11:27:20  Thomas Roessler <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.head: Remove -Q which is only present in unstable from the stable
+       documentation.  Thanks to Andreas Kneib <Andreas.Kneib@t-online.de>
+       for noting.
+
+2002/05/02 01:05:27  Thomas Roessler <roessler@does-not-exist.org>
+
+       * Makefile.am: Include smime.h with EXRA_DIST.
+
+2002/05/01 23:24:17  Thomas Roessler <roessler@does-not-exist.org>
+
+       * po/zh_TW.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/pl.po, po/pt_BR.po, po/ru.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, VERSION, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, reldate.h, ChangeLog: automatic post-release commit for mutt-1.5.1
+
+       * smime.c: Shut up check_sec.sh.  No security holes, but some ugly code.
+
+       * check_sec.sh: Give all the warnings at once.
+
+       * build-release: - This is a development branch.
+       - Add a -nodiff option to suppress generating a patch.
+
+       * po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/pl.po, po/pt_BR.po, po/ru.po, po/lt.po, po/nl.po, po/it.po, po/ja.po, po/ko.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, ChangeLog, VERSION, po/ca.po, po/cs.po, reldate.h: automatic post-release commit for mutt-1.3.99
+
+       * build-release: s/scp1/scp/
+
+2002/04/29 17:12:18  Thomas Roessler <roessler@does-not-exist.org>
+
+       * lib.c, lib.h, protos.h, lib.c, lib.h, protos.h: Fix #1171.
+
+2002/04/29 12:26:23  Vincent Lefevre <vincent@vinc17.org>
+
+       * po/fr.po: update.
+
+2002/04/29 12:25:38  oota toshiya <oota@mspd.mt.nec.co.jp>
+
+       * po/ja.po, po/ja.po: update.
+
+2002/04/29 12:09:21  Byrial Jensen <byrial@image.dk>
+
+       * imap/util.c: There is a possible buffer overflow due an off-by-one error in
+       imap/util.c, line 125. The error is in the maximum field width
+       indication in the sscanf() call. You must have room in the receiving
+       buffer for this number of characters /plus a terminating NULL
+       character/.
+
+       * imap/util.c: There is a possible buffer overflow due an off-by-one error in
+       imap/util.c, line 125. The error is in the maximum field width
+       indication in the sscanf() call. You must have room in the
+       receiving buffer for this number of characters /plus a
+       terminating NULL character/.
+
+2002/04/25 13:30:49  Vsevolod Volkov <vvv@mutt.org.ua>
+
+       * pop.c, pop_lib.c, pop.c, pop_lib.c: Attached patch fixes the problem described below. It should be
+       applied to both mutt 1.3/1.4 and 1.5 branches.
+       
+       > Date: Thu, 11 Apr 2002 16:24:00 -0500
+       > Subject: mutt 1.3.x / pop
+       > From: "Ryan O'Hara" <rohara@isis.visi.com>
+       > To: bcully@users.sourceforge.net
+       > User-Agent: Mutt/1.3.27i
+       
+       > Hi. My apologies if this has nothing to do with you. If it does not,
+       > maybe you could forward it on to someone.
+       
+       > In mutt 1.3.x I have noticed that if I uses POP to retrieve mail, and
+       > I enter an incorrect password whem prompted, it will *save* that
+       > password and keep trying to use it. However, in the 1.2.x versions it
+       > worked like this: type in wrong POP password, try to connect to POP
+       > server again and it will ask you (again) for the password. mutt 1.3.x
+       > does not, it just tries to connect with the wrongs password (which
+       > just failed).
+       
+       > This is kinda annoying. Just thought I'd point out this regression.
+       
+       > Thanks.
+       > R
+
+2002/04/25 13:28:31  Wouter Verheijen <wv@xs2mail.com>
+
+       * doc/manual.sgml.head, doc/manual.sgml.head: Someone in news:comp.mail.mutt noted that the list of command-line
+       options in the manual is not up-to-date.
+       
+       Included a small patch that includes all options that 'mutt -h' shows.
+
+2002/04/25 13:26:58  Cedric Duval <cedricduval@free.fr>
+
+       * doc/manual.sgml.tail, OPS, init.h, pattern.c: attached are fixes for some little mistakes :
+       
+       * history-down -> scroll _down_, not up
+       * functions decode-(save|copy) do not exist in the attach menu.
+       * gettext oversight in pattern.c
+       * inconsistency between "printf-like sequences" used all over the place
+         and "escape sequences" for the description of $attribution.
+
+       * doc/manual.sgml.tail, pattern.c, OPS, init.h: attached are fixes for some little mistakes :
+       
+       * history-down -> scroll _down_, not up
+       * functions decode-(save|copy) do not exist in the attach menu.
+       * gettext oversight in pattern.c
+       * inconsistency between "printf-like sequences" used all over the
+         place and "escape sequences" for the description of $attribution.
+
+2002/04/25 13:24:33  Thomas Roessler <roessler@does-not-exist.org>
+
+       * recvattach.c: Also fix this for the S/MIME case.
+
+       * recvattach.c: Fiy handling of multiparts which have encrypted sub-parts, at least
+       for PGP.
+
+       * sendlib.c: Force 7bit encoding for application/pgp-keys.
+
+2002/04/20 21:38:47  Thomas Roessler <roessler@does-not-exist.org>
+
+       * m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/lcmessage.m4, m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4, m4/progtest.m4, intl/ChangeLog, intl/Makefile.in, intl/bindtextdom.c, intl/config.charset, intl/dcigettext.c, intl/eval-plural.h, intl/gettextP.h, intl/gmo.h, intl/hash-string.h, intl/l10nflist.c, intl/libgnuintl.h, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/localealias.c, intl/localename.c, intl/os2compat.c, intl/os2compat.h, intl/osdep.c, intl/plural-exp.c, intl/plural-exp.h, intl/plural.c, intl/plural.y, ABOUT-NLS, INSTALL, config.rpath, configure.in: Backing out the latest iconv-related changes from the
+       mutt-1-4-stable branch.
+
+       * m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/lcmessage.m4, m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4, m4/progtest.m4: same as above.
+
+       * intl/eval-plural.h, intl/gettextP.h, intl/gmo.h, intl/hash-string.h, intl/l10nflist.c, intl/libgnuintl.h, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/localealias.c, intl/localename.c, intl/os2compat.c, intl/os2compat.h, intl/osdep.c, intl/plural-exp.c, intl/plural-exp.h, intl/plural.c, intl/plural.y, intl/ChangeLog, intl/Makefile.in, intl/bindtextdom.c, intl/config.charset, intl/dcigettext.c: Committing the new iconv patches into a separate branch.
+
+       * ABOUT-NLS, INSTALL, config.rpath, configure.in: Committing the new noiconv patches into a separate branch.
+
+       * sendlib.c: Generate the resent-message-id ourselves, and add it in the top of
+       the header.
+
+2002/04/20 08:11:13  Wouter Verheijen <wv@xs2mail.com>
+
+       * copy.c, mutt.h, sendlib.c: Bug #571 "mutt should not replicate ">From " headers while bounding",
+       has a patch attached.
+       Will that patch get in?
+       
+       Although these lines are not generated by mutt, I would strongly
+       suggest
+       to prevent it, because by boucing a mail the MUA should ensure
+       that the message header is according to the specification.
+       A ">From " line is not, because of the spaces before a colon.
+       
+       Because this has such serious consequences (totally unreadable mail)
+       when a MTA interpretes this line as the beginning of the body (not
+       unreasonable), I think Mutt should prevent sending this invalid
+       headerline.
+       
+       Because the other patch to the bugreport is not really correct IMHO
+       (because the fieldnames are not limited to alphanumeric chars, RFC2822
+       3.6.8), I propose another one.
+       
+       This patch also appends Resent-* to the header, instead of
+       prepending it. The Resent-Message-Id is however still appended,
+       because I could not find it; is it added by the MTA instead of by
+       Mutt?
+
+2002/04/20 07:55:20  Thomas Roessler <roessler@does-not-exist.org>
+
+       * m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4: Try to get the noiconv patch to work.
+
+       * configure.in: Try to get the noiconv patch to work with my development environment.
+
+       * INSTALL: Fix a typo.
+
+2002/04/20 07:26:10  Lars Hecking <lhecking@nmrc.ie>
+
+       * init.h, rfc2047.c, sendlib.c, INSTALL, charset.c, charset.h, configure.in, gnupgparse.c:  patch.1.3.28.lh.noiconv
+        =======================
+       
+        This is the new version of my noiconv patch. It _requires_ the previous
+        patch! If applied without, you'll have to resolve a couple of conflicts
+        manually.
+       
+        Notes:
+        - it's a lot cleaner than the old noiconv patch because no m4 files are
+          modified
+        - new configure option --disable-iconv; INSTALL updated accordingly
+          [I am guessing here, but the background for the --without-iconv option
+           mentioned in INSTALL was that mutt had a without-iconv option before
+           gettext included iconv support. When mutt's intl/* files were updated
+           to a newer gettext, there suddenly were two iconv options, which then
+           got merged, that is, mutt's was removed. That was probably when
+           --without-iconv stopped working, but I'm not sure, it may well be that
+           it never worked since iconv support was introduced.]
+        - all changes in *.[ch] files should be identical to the old patch
+
+       * intl/localename.c: This one seems to have been missing, too.
+
+2002/04/20 07:25:40  Thomas Roessler <roessler@does-not-exist.org>
+
+       * intl/localename.c: branches:  1.1.2;  1.1.4;
+       file localename.c was initially added on branch mutt-1-4-stable.
+
+2002/04/20 07:25:15  Lars Hecking <lhecking@nmrc.ie>
+
+       * config.rpath: Another file from the gettext patch.
+
+2002/04/20 07:25:15  Thomas Roessler <roessler@does-not-exist.org>
+
+       * config.rpath: branches:  1.1.2;  1.1.4;
+       file config.rpath was initially added on branch mutt-1-4-stable.
+
+2002/04/20 07:24:54  Lars Hecking <lhecking@nmrc.ie>
+
+       * m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4: Add new m4 files from patch.1.3.28.lh.gettext-0.11.1.
+
+2002/04/20 07:24:54  Thomas Roessler <roessler@does-not-exist.org>
+
+       * m4/lib-ld.m4: branches:  1.1.2;  1.1.4;
+       file lib-ld.m4 was initially added on branch mutt-1-4-stable.
+
+       * m4/lib-link.m4: branches:  1.1.2;  1.1.4;
+       file lib-link.m4 was initially added on branch mutt-1-4-stable.
+
+       * m4/lib-prefix.m4: branches:  1.1.2;  1.1.4;
+       file lib-prefix.m4 was initially added on branch mutt-1-4-stable.
+
+2002/04/20 07:24:22  Lars Hecking <lhecking@nmrc.ie>
+
+       * m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4, intl/ChangeLog, intl/Makefile.in, intl/bindtextdom.c, intl/config.charset, intl/dcigettext.c, intl/eval-plural.h, intl/gettextP.h, intl/gmo.h, intl/hash-string.h, intl/l10nflist.c, intl/libgnuintl.h, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/localealias.c, intl/os2compat.c, intl/os2compat.h, intl/osdep.c, intl/plural-exp.c, intl/plural-exp.h, intl/plural.c, intl/plural.y:  patch.1.3.28.lh.gettext-0.11.1
+        ==============================
+       
+        This one updates the gettext stuff in mutt to gettext-0.11.1. I started
+        doing this in the hope that the new gettext version would simplify the
+        noiconv patch, but unfortunately, this turned out not to be the case
+        (the new iconv m4 macros still don't allow for switching iconv support off).
+       
+        However, as a few hours of merging and testing were spent, I'd suggest to
+        adopt it for 1.4. The actual changes to intl/* are part cosmetic, part code
+        reorganisation. Ok, a bit more, I'm no gettext expert :)
+       
+        Notes:
+        - after applying the patch, you need to chmod 755 config.rpath
+        - a couple of new files for m4/*, too
+        - I have broken with the tradition of renaming gettext's AM_* macros
+          to MUTT_AM_*! I don't think it's necessary anymore to customise these
+          macros, but you (I really mean "you, tlr" :) want to have a look at
+          the new gettext.m4.  The others should be ok as they are.
+        - previous gettext updates were also updating po/Makefile.in.in, which
+          I didn't; someone who has a clue about gettext should check whether
+          this might be necessary, and also whether any other files in po/ need
+          updating
+       
+        I will provide the same patch for the 1.5 branch at some stage, ideally
+        after getting some  F E E D B A C K  for this one.
+
+2002/04/20 07:23:49  Thomas Roessler <roessler@does-not-exist.org>
+
+       * intl/eval-plural.h: branches:  1.1.2;  1.1.4;
+       file eval-plural.h was initially added on branch mutt-1-4-stable.
+
+       * intl/gmo.h: branches:  1.1.2;  1.1.4;
+       file gmo.h was initially added on branch mutt-1-4-stable.
+
+       * intl/os2compat.c: branches:  1.1.2;  1.1.4;
+       file os2compat.c was initially added on branch mutt-1-4-stable.
+
+       * intl/os2compat.h: branches:  1.1.2;  1.1.4;
+       file os2compat.h was initially added on branch mutt-1-4-stable.
+
+       * intl/osdep.c: branches:  1.1.2;  1.1.4;
+       file osdep.c was initially added on branch mutt-1-4-stable.
+
+       * intl/plural-exp.c: branches:  1.1.2;  1.1.4;
+       file plural-exp.c was initially added on branch mutt-1-4-stable.
+
+       * intl/plural-exp.h: branches:  1.1.2;  1.1.4;
+       file plural-exp.h was initially added on branch mutt-1-4-stable.
+
+2002/04/20 07:23:39  Lars Hecking <lhecking@nmrc.ie>
+
+       * ABOUT-NLS, charset.c, charset.h, configure.in, gnupgparse.c, init.h, rfc2047.c, sendlib.c:  patch.1.3.28.lh.gettext-0.11.1
+        ==============================
+       
+        This one updates the gettext stuff in mutt to gettext-0.11.1. I started
+        doing this in the hope that the new gettext version would simplify the
+        noiconv patch, but unfortunately, this turned out not to be the case
+        (the new iconv m4 macros still don't allow for switching iconv support off).
+       
+        However, as a few hours of merging and testing were spent, I'd suggest to
+        adopt it for 1.4. The actual changes to intl/* are part cosmetic, part code
+        reorganisation. Ok, a bit more, I'm no gettext expert :)
+       
+        Notes:
+        - after applying the patch, you need to chmod 755 config.rpath
+        - a couple of new files for m4/*, too
+        - I have broken with the tradition of renaming gettext's AM_* macros
+          to MUTT_AM_*! I don't think it's necessary anymore to customise these
+          macros, but you (I really mean "you, tlr" :) want to have a look at
+          the new gettext.m4.  The others should be ok as they are.
+        - previous gettext updates were also updating po/Makefile.in.in, which
+          I didn't; someone who has a clue about gettext should check whether
+          this might be necessary, and also whether any other files in po/ need
+          updating
+       
+        I will provide the same patch for the 1.5 branch at some stage, ideally
+        after getting some  F E E D B A C K  for this one.
+
+2002/04/17 17:05:54  Vincent Lefevre <vincent@vinc17.org>
+
+       * po/fr.po: Update.
+
+2002/04/17 17:05:04  David Champion <dgc@uchicago.edu>
+
+       * m4/gssapi.m4: MIT krb5 1.2.4 has krb5-config, so it's no longer sufficient to say
+       that possession of krb5-config indicates Heimdal. Patch attached. This
+       assumes that Heimdal's "kreb5-config --vendor" begins with "Heimdal".
+       I cannot verify that this is correct, so patch might be wrong on this
+       point.
+
+2002/04/07 21:19:57  Brendan Cully <brendan@kublai.com>
+
+       * imap/command.c, imap/imap.c, imap/message.c, imap/command.c, imap/imap.c, imap/message.c: The attached patch cleans up some bugs in switching IMAP mailboxes:
+       * free current flags on mailbox close
+       * reset reopen state
+       * don't parse the same untagged SELECT response for multiple options
+       * call mx_update_context after reading the whole mailbox, not after
+         each message
+       * reset new mail flag if mail arrives in the middle of opening the
+         mailbox. This should close 1139
+       
+       939 is most likely unaffected. I discovered these problems while
+       investigating 939.
+
+2002/04/05 10:42:54  "TAKAHASHI, Tamotsu" <arms405@jade.dti.ne.jp>
+
+       * po/ja.po: update.
+
+2002/04/04 20:49:46  Im Eunjea <eunjea@koru.org>
+
+       * po/ko.po: Update.
+
+2002/04/04 06:50:52  "TAKAHASHI, Tamotsu" <arms405@jade.dti.ne.jp>
+
+       * po/ja.po: Update.
+
+2002/04/04 06:50:12  Thomas Roessler <roessler@does-not-exist.org>
+
+       * pgp.c: Fix a typo noted by Tamotsu Takahashi.
+
+2002/04/03 15:22:27  Thomas Roessler <roessler@does-not-exist.org>
+
+       * handler.c: Fix printing of format=flowed text parts.
+
+       * commands.c: Fix #1144 in stable.
+
+       * commands.c: Fix a file descriptor leak in the display filter code.  Noted by
+       Chr. v. Stuckrad.
+       
+       fixes: #1144
+
+2002/04/02 18:49:37  Lars Hecking <lhecking@nmrc.ie>
+
+       * m4/iconv.m4: branches:  1.3.2.1.2;
+       The noiconv patch.
+
+       * charset.c, charset.h: The noiconv patch.
+
+       * configure.in: branches:  2.129.2.3.2;
+       The noiconv patch.
+
+       * gnupgparse.c, init.h, rfc2047.c, sendlib.c: The noiconv patch.
+
+2002/03/30 08:26:31  Thomas Roessler <roessler@does-not-exist.org>
+
+       * po/pl.po: update.  From Pawel Dzienkonski.
+
+       * po/fr.po: Update; From Vincent Lefevre.
+
+       * postpone.c, sendlib.c: The attached patch allows the user to override the user-agent field
+       with my_hdr.  It also removes the stripping of the x-mailer field
+       when recalling a postponed message.
+
+2002/03/28 13:25:23  Thomas Roessler <roessler@does-not-exist.org>
+
+       * mx.c, mx.h, mailbox.h, main.c, mbox.c, mh.c: patch-1.3.28-me.emptycheck.1
+
+2002/03/27 08:50:42  Thomas Roessler <roessler@does-not-exist.org>
+
+       * pgp.c: There was some output missing.
+
+       * po/POTFILES.in: update.
+
+       * pgp.c: More fixes.  Note to self:  The code which controls character set
+       selection for attachments is far too complicated.
+
+       * pgp.c: Don't include temporary file names in the Content-Disposition header.
+
+       * pgp.c: Use text/plain; format=... when we are asked to detect inline PGP
+       material in in text/plain body parts.
+
+       * pgp.c, sendlib.c: Fix encoder mode for text/plain; action=pgp-*.
+
+       * pgp.c: Fix "noconv" handling for the message body when we generate inline
+       PGP.
+
+       * charset.c, charset.h, handler.c, muttlib.c, pgp.c: Some hackisch charset handling for text/plain; x-action=pgp-*.  I
+       don't like this stuff, but it's better than nothing.
+
+2002/03/26 22:25:48  Thomas Roessler <roessler@does-not-exist.org>
+
+       * pgp.c: Change x-action values to "pgp-encrypted", "pgp-signed".
+
+       * contrib/gpg.rc, commands.c, compose.c, crypt.c, handler.c, muttlib.c, pgp.c, protos.h, recvattach.c, sendlib.c: More inline PGP changes.
+
+       * pgp.c: Also permit for "action" and "x-action" on the receiving end, just
+       in case we can settle on a joint standard with other MUA developers.
+
+       * commands.c, crypt.c, handler.c, pgp.c, pgpinvoke.c, sendlib.c: OK, I'm giving up: pgp_create_traditional now creates text/plain;
+       x-mutt-action={pgp-encrypt,pgp-sign}.
+
+       * pgpinvoke.c: Fix application/pgp signatures.
+
+       * charset.c, charset.h, gnupgparse.c, handler.c, mbyte.c, rfc2047.c, sendlib.c, charset.c, charset.h, gnupgparse.c, handler.c, mbyte.c, rfc2047.c, sendlib.c: Fix iconv warnings; from Edmund Grimley Evans.
+
+       * smime.c: Please use ascii_strcasecmp() if you want to compare ASCII parameter
+       strings.  mutt_strcasecmp() depends on the locale, and detects "i"
+       and "I" as _different_ in Turkish locales.
+
+2002/03/25 11:34:40  Thomas Roessler <roessler@does-not-exist.org>
+
+       * crypt.c: Fix S/MIME signature type.  Noted by Dan Ohnesorg <Dan@ohnesorg.cz>.
+
+       * buffy.c, buffy.c: close 1103; from Brendan Cully
+
+       * doc/manual.sgml.tail, doc/manual.sgml.tail: close 1122; from Brendan Cully
+
+       * hdrline.c, muttlib.c: Fix #87s; from Brendan Cully.
+
+       * hdrline.c, muttlib.c: Fix #872, from Brendan Cully.
+
+       * contrib/smime_keys_test.pl, contrib/Makefile.in: Include a test script by Mike Schiraldi.  It's perl > the one I have
+       installed, so I'm just putting it into contrib for now.
+
+2002/03/20 09:53:42  Thomas Roessler <roessler@does-not-exist.org>
+
+       * editmsg.c, mailbox.h, mx.c: Rename M_NEW to M_NEWFOLDER.
+
+       * editmsg.c, mailbox.h, mx.c: Rename the new M_NEW by M_NEWFOLDER.  There was another constant of
+       the same name.  Problem noted by Will Yardley's compiler.
+
+2002/03/19 09:54:05  Thomas Roessler <roessler@does-not-exist.org>
+
+       * browser.c: Fix #1115.
+
+       * editmsg.c, mailbox.h, mx.c: Fix a temporary file race problem when using the edit-message
+       function.  Backported from unstable.
+
+       * po/pl.po, po/pl.po: update
+
+2002/03/18 18:54:56  Thomas Roessler <roessler@does-not-exist.org>
+
+       * browser.c: Should fix #1115.  BACKPORT!
+
+2002/03/15 09:11:05  Thomas Roessler <roessler@does-not-exist.org>
+
+       * po/ja.po: update from oota toshiya.
+
+       * po/ja.po: update, from oota toshiya.
+
+2002/03/13 23:43:41  Thomas Roessler <roessler@does-not-exist.org>
+
+       * attach.c: Undoing the previous patch.  It was junk, and may ruin files.
+
+       * attach.c, editmsg.c, mailbox.h, mx.c: Don't fopen mail folders in append mode where we should safe_fopen()
+       them in write mode.  Debian bug #138200, noted by Colin Philipps
+       <cph@cph.demon.co.uk>.
+       
+       NEEDS BACKPORTING.
+
+       * po/uk.po, po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/tr.po, po/pl.po, po/pt_BR.po, po/ru.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/da.po, po/de.po, po/el.po, po/ChangeLog: automatic post-release commit for mutt-1.3.28
+
+       * po/ChangeLog: branches:  1.1.2;
+       file ChangeLog was initially added on branch mutt-1-4-stable.
+
+       * po/ca.po, po/cs.po, ChangeLog, VERSION, reldate.h: automatic post-release commit for mutt-1.3.28
+
+       * doc/smime-notes.txt, smime.c: Assorted patches from Mike Schiraldi.
+
+2002/03/02 12:11:35  Thomas Roessler <roessler@does-not-exist.org>
+
+       * contrib/smime.rc, compose.c, init.h, mutt.h, sendlib.c, smime.c, smime.h: Introduce smime_default_key.  From Oliver Ehli.
+
+       * contrib/smime.rc, smime.c, smime.h, smime_keys.pl, init.h, mutt.h: smime.c:
+        - the getkeys() function was broken and deleted the last char
+          of the certfilename
+        - it now lets me use more than one key for the same mailbox
+          ie select these.
+        - some display output was garbled when the email didn't match.
+          i posted some fix to mutt-users, but i don't like that sleep()
+          so i dropped the first error message, which basically repeated
+          the from/sender field only. so now there's just the message: they
+          don't match.
+       
+       smime_keys:
+        - i modified the add_chain to continue even if no roo-cert
+          is present (david collantes received som chain that got
+          exported from outlook. obiously they don't (always ?)
+          include the root cert) it will now abort if neither root
+          nor intermediate certs are present.
+        - add_cert created index entries with '-' as issuer cert, when
+          it should have been '?'. thus verify would fail. (obviously
+          nobody ever used that command (add_cert, that is) :)
+       
+       the feature above obsoletes the hash_cert and fingerprint_cert commands,
+       adds import_cert command and ask_cert_label bool. i modified the output
+       of smime_keys (a little) so it doesn't look too garbled when supplying
+       the label (it is actually interactive :) furthermore, i do a verify
+       after the cert was added and modified the verify routine to make the
+       cerificate trusted in case of success. (we discussed this in another
+       message) that is ok so far, but perhaps this requires some better root
+       certificate handling, ie the trust should be somehow connected to the
+       root certificate, that maybe added (if the user trusts it and its not
+       present already) to the ca-file. i'll think about that some more ... but
+       then, there already is the add_root command. hmmm... (btw, you'll now
+       never get asked to trust a certificate)
+       
+       i have not yet deleted the email handling from the import key stuff (in
+       smime.c/crypt.c), for i'm thinking about smime_keys using it as an
+       additional arg. otoh i don't think users would press ^k if verification
+       failed...hmmm... but still, smime_keys does extract the email from the
+       certificate either way and does verify it by itself, so the only thing
+       that would happen is to have some invalid certificates, that mutt'll
+       refuse to use anyways, left in the database....
+       
+       (From Oliver Ehli.)
+
+2002/02/28 23:28:51  Thomas Roessler <roessler@does-not-exist.org>
+
+       * sort.c: Turn on incremental threading again.
+
+       * smime_keys.pl: The script will try to pick out the end-user cert and pass that to
+       openssl. The code which tells the difference may not be perfect. It
+       works with all the certs in my collection, though. I won't be at all
+       surprised if someone comes across a cert chain which confuses it,
+       but it should print out an error in that case. Hopefully they will
+       send us the chain so we can adjust our code.
+       
+       (From Mike Schiraldi.)
+
+       * init.h, mutt.h, thread.c: Threading enhancements from Daniel Eisenbud.
+
+       * curs_main.c, init.c, init.h, mutt.h, thread.c: $narrow_tree; fater redrawing when changing tree options.  From
+       Daniel Eisenbud.
+
+       * imap/message.c, mbox.c, mx.c, thread.c: A possible work-around for #939.  From Daniel Eisenbud.
+
+       * init.h, mutt.h, thread.c: Threading enhancements from Daniel Eisenbud.
+
+2002/02/26 10:58:56  Thomas Roessler <roessler@does-not-exist.org>
+
+       * po/ru.po: update
+
+       * init.h: Fix a typo.
+
+       * init.h: Fix a typo.  #1069.
+
+       * imap/browse.c, imap/message.c, configure.in, mutt_sasl.c, imap/browse.c, imap/message.c, configure.in, mutt_sasl.c: Brendan Cully sent a patch.
+
+       * install-sh, install-sh: Fix a typo.  From Edmund Grimley Evans.
+
+       * po/ru.po: ru.po update.
+
+       * pop_lib.c, pop_lib.c: CAPA response tags are case-insensitive.  Noted by Michael Vore,
+       patch from Vsevolod Volkov.
+
+2002/02/18 14:55:31  Thomas Roessler <roessler@does-not-exist.org>
+
+       * alias.c, send.c: Fix for #1047.  From Michael Elkins.
+
+2002/02/14 11:22:51  Thomas Roessler <roessler@does-not-exist.org>
+
+       * charset.c, gnupgparse.c, init.h, rfc2047.c: Iconv patch from Lars Hecking.  MAY NEED TO BE BACKPORTED.
+
+2002/02/13 12:04:52  Thomas Roessler <roessler@does-not-exist.org>
+
+       * smime.c: mutt_any_key() shouldn't be used in curses mode.
+
+       * hdrline.c, init.h, parse.c: Change the default format to be more friendly to "0-line messages",
+       and fix optional expansion for %l - it was the wrong way around.
+       Also, add a hack to parse.c so we ignore negative values in Lines
+       headers.
+
+       * hdrline.c, muttlib.c, protos.h: Undo the %l fix.  It broke things.
+
+       * menu.c: Fix mutt_pad_string; from Edmund Grimley Evans.  (MAY NEED TO BE
+       BACKPORTED.)
+
+       * main.c: Report libiconv version.
+
+2002/02/12 21:54:41  Thomas Roessler <roessler@does-not-exist.org>
+
+       * hdrline.c, muttlib.c, protos.h: Improve %l's behaviour.
+
+       * extlib.c, main.c, pattern.c, smime_keys.pl: Mike Schiraldi's daily S/MIME patch.
+
+2002/02/11 17:31:53  Thomas Roessler <roessler@does-not-exist.org>
+
+       * smime.c: This patch gets rid of an ugly static variable in smime.c. (From
+       Mike Schiraldi.)
+
+       * smime_keys.pl: This patch lets smime_keys.pl automagically handle both formats of
+       x509 certificate -- PEM (text) and DER (binary). This lets Outlook
+       users (and probably others) directly import the certs without first
+       converting them manually.  (From Mike Schiraldi.)
+
+       * configure.in: Honor current values of $LIBS and $CPPFLAGS.  From Thomas Dickey.
+
+       * configure.in: Honor $LIBS and $CPPFLAGS.  From Thomas Dickey.
+
+       * init.c, init.c: patch-1.3.27.me.initsort.1
+
+2002/02/07 21:48:42  Thomas Roessler <roessler@does-not-exist.org>
+
+       * smime_keys.pl: Another S/MIME patch from Mike Schiraldi.
+
+       * smime_keys.pl: Fix smime_keys.
+
+       * smime.c: S/MIME fixes from Mike Schiraldi.
+
+       * po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/POTFILES.in, po/ca.po, po/cs.po, po/da.po, po/de.po, Makefile.am: Make S/MIME messages translatable.
+
+2002/02/06 19:14:47  Thomas Roessler <roessler@does-not-exist.org>
+
+       * lib.h: Avoid a warning on some machines.
+
+       * lib.h, smime.c: Make some scanf formats safe.
+
+2002/02/05 22:01:06  Thomas Roessler <roessler@does-not-exist.org>
+
+       * ascii.c: The previous fix was complete nonsense.  What a day. :-(
+
+       * ascii.c: The previous fix was complete nonsense.
+
+       * browser.c, lib.c, lib.h: Use strcoll for the file browser.  From David Champion.
+
+       * hook.c: Fix crypt-hook.  From Dale Woolridge
+       <dale-list-mutt-dev@woolridge.org>.
+
+       * smime_keys.pl: Clean-up from Mike Schiraldi.
+
+       * imap/browse.c: Fix.
+
+       * imap/browse.c: Fix another IMAP browsing bug.
+
+       * po/ru.po, po/fr.po, po/ko.po: update
+
+       * smime.c: Don't put garbage onto the screen when trying to decrypt messages.
+
+       * contrib/smime.rc, init.h, smime.c, smime.h, smime_keys.pl: S/MIME fixes from Oliver Ehli:
+       
+       - smime_keys.pl:
+       
+         support for multiple email adrresses in cert: will add one entry
+         to {keys, cetrificates}/.index now (for each mailbox)
+       
+         support for certificates without intermediate certs (e.g. for
+         people who are their own CA: use root as intermediate, for it
+         probably wouldn't be known to anyone...)
+       
+         bugfix in handle_pem: the checks if some type of cert is present;
+         die() could never be reached, as the variables checked wouldn't
+         have been set in that case, so it would break because of undefined
+         value or some such thing.... (so it has to check $iter instead)
+       
+       - smime.c (init.h, ....)
+       
+         support for importing certificates issued for multiple addresses.
+       
+         introduced smime_fingerprint_cert_command, so finally certs can
+         get compared ... (so the above works..)
+       
+         cleaned up some error messages, that would mess up the terminal.
+       
+         fixed typos (init.h)
+
+       * ascii.c: Fix.
+
+       * ascii.c: Fix ascii_*cmp functions.  Problem noted by Brad Thompson.
+
+2002/02/04 09:59:02  Thomas Roessler <roessler@does-not-exist.org>
+
+       * smime.c, crypt.c: Some S/MIME fixes from Oliver Ehli <elmy@acm.org>.
+
+2002/02/03 09:58:45  Thomas Roessler <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.head, doc/muttrc.man.head, init.h: Add unauto_view.  From Jeremy Blosser.
+
+       * Makefile.am, pgplib.h, pgppubring.c: Add a "-f" flag which helps to dump fingerprints.  Contributed by
+       Jason Harris <jharris@widomaker.com>, and not strictly needed for
+       mutt.
+
+       * pgppubring.c: Correctly calculate fingerprints for type 20 ElGamal keys.  Noted by
+       Jason Harris <jharris@widomaker.com>.
+
+       * pgppubring.c: Fix calculation of fingerprints (and key IDs) for type 20 ElGamal
+       keys.  Noted by Jason Harris <jharris@widowmaker.com>.
+
+2002/02/02 16:52:27  Thomas Roessler <roessler@does-not-exist.org>
+
+       * po/ca.po: update
+
+       * po/ca.po: update.
+
+       * mh.c: Don't forget deletions when a folder is changed.  Ups.
+
+2002/02/01 17:23:20  Thomas Roessler <roessler@does-not-exist.org>
+
+       * smime_keys.pl: Fix some possible leaks of the private key (encrypted, but
+       still...).  (yow_security_holes.patch from Mike Schiraldi.)
+
+2002/01/31 22:05:58  Thomas Roessler <roessler@does-not-exist.org>
+
+       * doc/smime-notes.txt: Document %C, and other updates.  From Mike Schiraldi.
+
+       * smime.c: Remove some unnecessary quotation marks.
+
+       * contrib/smime.rc, init.h, smime.c, smime.h, smime_keys.pl: Use mutt -Q from smime_keys.
+
+       * po/zh_TW.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/ca.po, po/cs.po: update-po
+
+       * main.c: fix a string.
+
+       * doc/mutt.man: Document -Q.
+
+       * init.c, main.c, protos.h: Add a -Q option to query configuration variables.  This is needed to
+       avoid a separate mutt configuration parser in smime_keys.pl.
+
+2002/01/30 22:51:12  Thomas Roessler <roessler@does-not-exist.org>
+
+       * send.c, send.c: patch-1.3.27.me.postpone_date.2
+
+       * smime.c: Mike Schiraldi's daily S/MIME patch, as he puts it.
+
+2002/01/29 21:08:10  Thomas Roessler <roessler@does-not-exist.org>
+
+       * smime.c: Improved certificate handling.  Suggested by Oliver Ehli,
+       implemented by Mike Schiraldi.
+
+       * smime.c: Properly handle certain signatures generated by Outlook.  From Mike
+       Schiraldi.
+
+       * parse.c, parse.c: Fix a segmentation fault in debugging code.  From Daniel Eisenbud.
+
+2002/01/28 23:29:05  Thomas Roessler <roessler@does-not-exist.org>
+
+       * crypt.c, init.h, mutt.h: Add a new crypt_timestamp option.  The timestamps aren't really
+       needed any more.
+
+       * commands.c, menu.c, mutt.h, mutt_curses.h, pattern.c: Add ~V to match successfully verified messages.
+
+       * contrib/smime.rc: Add a comment. From Mike Schiraldi.
+
+       * init.h, init.h: Fix list-from documentation.  From Michael Elkins.
+
+       * doc/smime-notes.txt: Add more information on S/MIME.  Adapted from Oliver Ehli's notes by
+       Mike Schiraldi.
+
+       * send.c: Avoid C99 comments.  Noted by Vincent Lefevre.
+
+       * po/ja.po, po/sv.po: updates
+
+       * menu.c, menu.c: Wide character fix from TAKIZAWA Takashi.
+
+       * Makefile.am, hook.c: S/MIME-related bug fixes from Brendan Cully.
+
+2002/01/25 00:08:30  Thomas Roessler <roessler@does-not-exist.org>
+
+       * smime.c: ups
+
+       * commands.c, recvattach.c, smime.c, smime.h: More decryption key detection fixes.
+
+       * commands.c, smime.c: Make some prompts look nicer, and add sensible selection of the
+       decryption key.
+
+2002/01/24 23:53:19  Thomas Roessler <roessler@does-not-exist.org>
+
+       * commands.c, crypt.c, smime.c, smime.h: More S/MIME nit-picking.
+
+       * mh.c: Fix.
+
+       * mh.c: Still more code clean-up.
+
+       * doc/smime-notes.txt: Update.
+
+       * mx.c: little fix.
+
+       * mh.c: Ups, don't use the wrong check function...
+
+       * mh.c: Clean up the mh code, too.
+
+       * mh.c: indentation
+
+       * mh.c, mx.c, mx.h: Maildir efficiency improvements, from Michael Elkins and Thomas
+       Roessler.
+
+       * crypt.c, curs_lib.c, smime.c: S/MIME nits.
+
+       * reap.pl: We don't need this any more.
+
+       * imap/message.c, doc/Makefile.in, doc/smime-notes.txt, contrib/Makefile.in, contrib/ca-bundle.crt, contrib/smime.rc, Makefile.am, OPS.CRYPT, OPS.PGP, OPS.SMIME, attach.c, commands.c, compose.c, configure.in, copy.c, copy.h, crypt.c, crypt.h, curs_main.c, functions.h, globals.h, handler.c, hdrline.c, headers.c, hook.c, init.c, init.h, keymap.c, keymap.h, main.c, mutt.h, muttlib.c, mx.c, pager.c, parse.c, pattern.c, pgp.c, pgp.h, pgplib.h, pop.c, postpone.c, protos.h, recvattach.c, send.c, sendlib.c, smime.c, smime.h, smime_keys.pl: S/MIME support.  From Oliver Ehli <elmy@acm.org> and Mike Schiraldi
+       <raldi@research.netsol.com>.
+
+       * po/pt_BR.po, po/pt_BR.po: update
+
+       * doc/manual.sgml.head, doc/muttrc.man.head, attach.c, globals.h, init.h, protos.h, rfc1524.c, sendlib.c: Introduce mime_lookup.  From Brian Foley and Ulf Erikson.
+
+       * po/ru.po, po/ru.po: update
+
+       * mh.c: Make reading maildirs more efficient.
+
+       * VERSION: Pseudo-revision for mutt-1.5.
+
+       * m4/glibc21.m4, m4/gssapi.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4, m4/funcdecl.m4, m4/gettext.m4, m4/codeset.m4, m4/curslib.m4, m4/README, m4/.cvsignore, m4/Makefile.am.in: version bump
+
+       * po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/pl.po, po/pt_BR.po, po/ru.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/fr.po, po/gl.po, po/hu.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/.cvsignore, po/Makefile.in.in, po/POTFILES.in, po/ca.po, po/cs.po, po/da.po, po/de.po, imap/.cvsignore, imap/BUGS, imap/Makefile.am, imap/README, imap/TODO, imap/auth.c, imap/auth.h, imap/auth_anon.c, imap/auth_cram.c, imap/auth_gss.c, imap/auth_login.c, imap/auth_sasl.c, imap/browse.c, imap/command.c, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/message.c, imap/message.h, imap/utf7.c, imap/util.c: more version bumps.
+
+       * intl/.cvsignore, intl/COPYING.LIB-2, intl/COPYING.LIB-2.1, intl/ChangeLog, intl/Makefile.in, intl/VERSION, intl/bindtextdom.c, intl/cat-compat.c, intl/config.charset, intl/dcgettext.c, intl/dcigettext.c, intl/dcngettext.c, intl/dgettext.c, intl/dngettext.c, intl/explodename.c, intl/finddomain.c, intl/gettext.c, intl/gettext.h, intl/gettextP.h, intl/hash-string.h, intl/intl-compat.c, intl/l10nflist.c, intl/libgettext.h, intl/libgnuintl.h, intl/libintl.glibc, intl/linux-msg.sed, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/locale.alias, intl/localealias.c, intl/ngettext.c, intl/plural.c, intl/plural.y, intl/po2tbl.sed.in, intl/ref-add.sin, intl/ref-del.sin, intl/textdomain.c, intl/xopen-msg.sed: more version number updates.
+
+       * doc/.cvsignore, doc/Makefile.in, doc/PGP-Notes.txt, doc/applying-patches.txt, doc/devel-notes.txt, doc/dotlock.man, doc/instdoc.sh.in, doc/manual.sgml.head, doc/manual.sgml.tail, doc/mbox.man, doc/mutt.man, doc/muttbug.man, doc/muttrc.man.head, doc/muttrc.man.tail, doc/patch-notes.txt: more version number updates
+
+       * contrib/iconv/README, contrib/iconv/iconv.aix-3.2.5.rc, contrib/iconv/iconv.aix-4.1.5.rc, contrib/iconv/iconv.aix-4.2.0.rc, contrib/iconv/iconv.aix-4.3.2.rc, contrib/iconv/iconv.freebsd-3.3.rc, contrib/iconv/iconv.glibc-2.1.3.rc, contrib/iconv/iconv.glibc-2.1.90.rc, contrib/iconv/iconv.hpux-10.01.rc, contrib/iconv/iconv.hpux-10.20.rc, contrib/iconv/iconv.hpux-11.00.rc, contrib/iconv/iconv.irix-6.5.rc, contrib/iconv/iconv.osf1-4.0a.rc, contrib/iconv/iconv.osf1-4.0d.rc, contrib/iconv/iconv.solaris-2.4.rc, contrib/iconv/iconv.solaris-2.5.1.rc, contrib/iconv/iconv.solaris-2.6-cjk.rc, contrib/iconv/iconv.solaris-2.6.rc, contrib/iconv/iconv.solaris-2.7.rc, contrib/iconv/make.sh, contrib/.cvsignore, contrib/Makefile.in, contrib/Mush.rc, contrib/Pine.rc, contrib/Tin.rc, contrib/gpg.rc, contrib/language.txt, contrib/language50.txt, contrib/patch.slang-1.2.2.keypad.1, contrib/pgp2.rc, contrib/pgp5.rc, contrib/pgp6.rc, contrib/sample.mailcap, contrib/sample.muttrc, contrib/sample.muttrc-tlr: Bumping more version numbers.
+
+       * snprintf.c, sort.c, sort.h, stamp-h.in, status.c, strcasecmp.c, strdup.c, system.c, thread.c, url.c, url.h, utf8.c, wcwidth.c, pgpkey.c, pgplib.c, pgplib.h, pgpmicalg.c, pgppacket.c, pgppacket.h, pgppubring.c, pop.c, pop.h, pop_auth.c, pop_lib.c, postpone.c, prepare, protos.h, query.c, reap.pl, recvattach.c, recvcmd.c, regex.c, reldate.h, remailer.c, remailer.h, resize.c, rfc1524.c, rfc1524.h, rfc2047.c, rfc2047.h, rfc2231.c, rfc2231.h, rfc822.c, rfc822.h, score.c, send.c, sendlib.c, sha1.c, sha1.h, signal.c, md5.h, md5c.c, menu.c, mh.c, mime.h, mime.types, missing, mkinstalldirs, mkjtags.c, mutt.h, mutt_curses.h, mutt_menu.h, mutt_regex.h, mutt_sasl.c, mutt_sasl.h, mutt_socket.c, mutt_socket.h, mutt_ssl.c, mutt_ssl.h, mutt_ssl_nss.c, mutt_tunnel.c, mutt_tunnel.h, muttbug, muttbug.sh.in, muttlib.c, mx.c, mx.h, pager.c, pager.h, parse.c, patchlist.sh, pattern.c, pgp.c, pgp.h, pgpewrap.c, pgpinvoke.c, editmsg.c, enter.c, extlib.c, filter.c, flags.c, from.c, functions.h, gen_defs, getdomain.c, gettext.c, globals.h, gnupgparse.c, handler.c, hash.c, hash.h, hdrline.c, headers.c, help.c, history.c, history.h, hook.c, init.c, init.h, install-sh, keymap.c, keymap.h, lib.c, lib.h, mailbox.h, main.c, makedoc.c, mapping.h, mbox.c, mbyte.c, mbyte.h, attach.c, attach.h, base64.c, browser.c, browser.h, buffy.c, buffy.h, build-release, charset.c, charset.h, check_sec.sh, color.c, commands.c, complete.c, compose.c, config.guess, config.sub, configure.in, copy.c, copy.h, curs_lib.c, curs_main.c, date.c, depcomp, dotlock.c, dotlock.h, edit.c, GPL, INSTALL, Makefile.am, Muttrc.head.in, NEWS, OPS, OPS.MIX, OPS.PGP, PATCHES, README, README.SECURITY, README.SSL, TODO, VERSION, _regex.h, acconfig.h, account.c, account.h, addrbook.c, alias.c, ascii.c, ascii.h, .cvsignore, ABOUT-NLS, BEWARE, COPYRIGHT, ChangeLog: Bumping version numbers to 3.0, for the new unstable branch.
+
+       * send.c: branches:  2.77.2;
+       Set default Fcc when resending a message.
+
+       * po/ja.po: branches:  1.33.2;
+       update
+
+2002/01/23 22:37:12  Thomas Roessler <roessler@does-not-exist.org>
+
+       * po/da.po: branches:  1.67.2;
+       updates
+
+       * po/el.po: branches:  1.77.2;
+       updates
+
+       * po/et.po: branches:  1.21.2;
+       updates
+
+       * po/ko.po: branches:  1.72.2;
+       updates
+
+       * po/pl.po: branches:  1.94.2;
+       updates
+
+       * po/uk.po, po/id.po: branches:  1.84.2;
+       update
+
+       * charset.c: branches:  2.50.2;
+       Fix #999.  A single missing comma.
+
+2002/01/22 12:12:45  Thomas Roessler <roessler@does-not-exist.org>
+
+       * po/pt_BR.po: branches:  1.58.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * po/ru.po: branches:  1.129.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * po/sk.po: branches:  1.66.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * po/sv.po: branches:  1.80.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * po/tr.po: branches:  1.25.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * po/uk.po: automatic post-release commit for mutt-1.3.27
+
+       * po/zh_CN.po: branches:  1.14.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * po/zh_TW.po: branches:  1.11.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * po/hu.po: branches:  1.17.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * po/id.po: automatic post-release commit for mutt-1.3.27
+
+       * po/it.po: branches:  1.103.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * po/ja.po, po/ko.po: automatic post-release commit for mutt-1.3.27
+
+       * po/lt.po: branches:  1.25.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * po/nl.po: branches:  1.74.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * po/pl.po: automatic post-release commit for mutt-1.3.27
+
+       * po/ca.po: branches:  1.6.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * po/cs.po: branches:  1.75.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * po/da.po: automatic post-release commit for mutt-1.3.27
+
+       * po/de.po: branches:  1.160.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * po/el.po: automatic post-release commit for mutt-1.3.27
+
+       * po/eo.po: branches:  1.80.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * po/es.po: branches:  1.89.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * po/et.po: automatic post-release commit for mutt-1.3.27
+
+       * po/fr.po: branches:  1.108.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * po/gl.po: branches:  1.61.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * ChangeLog: branches:  2.73.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * VERSION: branches:  2.63.2;
+       automatic post-release commit for mutt-1.3.27
+
+       * reldate.h: branches:  2.55.2;
+       automatic post-release commit for mutt-1.3.27
+
+2002/01/21 17:43:19  Thomas Roessler <roessler@does-not-exist.org>
+
+       * po/it.po: update
+
+       * po/sv.po, po/de.po, po/eo.po: updates
+
+       * mutt_ssl.c: A fix from Ulf Erikson, which he says to fix bug #989.
+
+2002/01/18 11:44:54  Thomas Roessler <roessler@does-not-exist.org>
+
+       * po/zh_CN.po, po/zh_TW.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, VERSION, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, reldate.h, ChangeLog: automatic post-release commit for mutt-1.3.26
+
+2002/01/17 22:41:45  Thomas Roessler <roessler@does-not-exist.org>
+
+       * configure.in: branches:  2.129.2;
+       Use ncurses.h for configure tests, if present.
+
+2002/01/16 20:44:49  Thomas Roessler <roessler@does-not-exist.org>
+
+       * config.guess, config.sub, missing, mkinstalldirs: Updated auto* files. From Lars Hecking.
+
+       * curs_main.c: patch-1.3.25-de-new_threads.1
+
+       * protos.h: branches:  2.86.2;
+       patch-1.3.25-de-new_threads.1
+
+       * thread.c: branches:  2.27.2;
+       patch-1.3.25-de-new_threads.1
+
+2002/01/15 22:08:12  Thomas Roessler <roessler@does-not-exist.org>
+
+       * acconfig.h, configure.in: Configure and config.h cleanup.  From Lars Hecking.
+
+       * handler.c: branches:  2.52.2;
+       Don't hallucinate a '\n' in the end of quoted-printable encoded
+       attachments.
+
+       * po/fr.po: update.
+
+       * flags.c: patch-1.3.25.tlr.maildir_trash.1
+
+       * mh.c: branches:  2.42.2;
+       patch-1.3.25.tlr.maildir_trash.1
+
+       * mutt.h: branches:  2.111.2;
+       patch-1.3.25.tlr.maildir_trash.1
+
+       * mx.c: branches:  2.63.2;
+       patch-1.3.25.tlr.maildir_trash.1
+
+       * po/ko.po: update
+
+       * init.c: branches:  2.60.2;
+       Avoid reading past the end of ta string when handling \ or ^
+       sequences.  From Michael Elkins.
+
+       * po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/ca.po, po/cs.po, po/da.po, pgpkey.c: Shorten some messages.  Noted by Jeremy Blosser.  #978.
+
+       * pattern.c: branches:  2.23.2;
+       Fix an off-by-one error.
+
+2002/01/14 09:03:31  Thomas Roessler <roessler@does-not-exist.org>
+
+       * imap/imap.c: branches:  1.90.2;
+       fix another case-sensitive comparison.
+
+2002/01/13 21:19:25  Thomas Roessler <roessler@does-not-exist.org>
+
+       * ascii.h: Fix the ascii_strncmp() macro.
+
+       * imap/auth_sasl.c: Parse IMAP responses locale- and case- insensitive.  From Brendan
+       Cully.
+
+       * imap/browse.c: branches:  1.34.2;
+       Parse IMAP responses locale- and case- insensitive.  From Brendan
+       Cully.
+
+       * imap/command.c: branches:  1.35.2;
+       Parse IMAP responses locale- and case- insensitive.  From Brendan
+       Cully.
+
+       * imap/imap.c: Parse IMAP responses locale- and case- insensitive.  From Brendan
+       Cully.
+
+       * imap/message.c: branches:  1.60.2;
+       Parse IMAP responses locale- and case- insensitive.  From Brendan
+       Cully.
+
+       * imap/util.c: branches:  1.51.2;
+       Parse IMAP responses locale- and case- insensitive.  From Brendan
+       Cully.
+
+       * muttlib.c: branches:  2.52.2;
+       A different fix for the '\012' issue.  Bug tracked down by Johannes
+       Geiger <geiger@ePost.de>.
+
+       * pager.c: A different fix for the '\012' issue.  Bug tracked down by Johannes
+       Geiger <geiger@ePost.de>.
+
+2002/01/12 11:42:18  Thomas Roessler <roessler@does-not-exist.org>
+
+       * NEWS: More on ~=.
+
+       * doc/manual.sgml.head: branches:  1.73.2;
+       Add a ~= pattern.  From Frederic Duval.
+
+       * doc/muttrc.man.head: branches:  1.16.2;
+       Add a ~= pattern.  From Frederic Duval.
+
+       * mutt.h, pattern.c: Add a ~= pattern.  From Frederic Duval.
+
+       * doc/manual.sgml.head: Fix a typo, #971.
+
+2002/01/09 15:39:28  Thomas Roessler <roessler@does-not-exist.org>
+
+       * pgp.c: Fix #960.
+
+2002/01/08 13:06:21  Thomas Roessler <roessler@does-not-exist.org>
+
+       * mx.c: Try to fix #943.
+
+       * INSTALL: branches:  2.15.2;  2.15.4;
+       fix libiconv URL.  #959.
+
+       * NEWS: fix libiconv URL.  #959.
+
+2002/01/07 19:10:51  Thomas Roessler <roessler@does-not-exist.org>
+
+       * po/ko.po: update
+
+       * attach.c: branches:  2.29.2;
+       Fix #951.
+
+2002/01/04 14:30:29  Thomas Roessler <roessler@does-not-exist.org>
+
+       * rfc822.c: Terminate the correct buffer.  Noted by Durval Menezes
+       <durval@tmp.com.br>.  (This bug shouldn't have any security
+       implications. ;-)
+
+       * po/et.po, po/fr.po, po/pl.po, po/sv.po: updates.
+
+2002/01/03 20:57:20  Thomas Roessler <roessler@does-not-exist.org>
+
+       * mutt_ssl.c, mutt_ssl.h, mutt_ssl_nss.c, globals.h: Move some globals where they belong.  From Brendan Cully.
+
+2002/01/02 16:28:46  Thomas Roessler <roessler@does-not-exist.org>
+
+       * acconfig.h: Cleanup; from Lars Hecking.
+
+       * mutt_ssl.c: Replace a few strncpy() calls by strfcpy().
+
+       * recvcmd.c: Bug fix.  Problem noted by Vincent Lefevre's compiler.
+
+       * muttlib.c: Fix the \012 bug.
+
+2002/01/01 20:18:41  Thomas Roessler <roessler@does-not-exist.org>
+
+       * po/zh_TW.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/Makefile.in.in, po/ca.po, po/cs.po, reldate.h, ChangeLog, VERSION: automatic post-release commit for mutt-1.3.25
+
+       * intl/COPYING.LIB-2, intl/COPYING.LIB-2.1: ups, these were missing from the CVS.
+
+       * po/ca.po: update.
+
+       * po/uk.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/ru.po, po/pl.po, po/pt_BR.po, po/ko.po, po/nl.po, po/it.po, po/gl.po, po/id.po, po/es.po, po/fr.po, po/el.po, po/eo.po, po/de.po, po/cs.po, po/da.po, ChangeLog, VERSION, rfc822.c: post-release commit for mutt-1.2.5.1.
+
+       * rfc822.c: Fix a security problem.
+
diff --git a/ChangeLog.nntp b/ChangeLog.nntp
new file mode 100644 (file)
index 0000000..271e8fb
--- /dev/null
@@ -0,0 +1,301 @@
+* Tue Feb  3 2004 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.5.6
+
+* Thu Dec 18 2003 Vsevolod Volkov <vvv@mutt.org.ua>
+- fixed compose menu
+
+* Thu Nov  6 2003 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.5.5.1
+
+* Wed Nov  5 2003 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.5.5
+- added space after newsgroup name in .newsrc file
+
+* Sun May 18 2003 Vsevolod Volkov <vvv@mutt.org.ua>
+- nntp patch: fixed SIGSEGV when posting article
+
+* Sat Mar 22 2003 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.5.4
+
+* Sat Dec 21 2002 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.5.3
+- replace safe_free calls by the FREE macro
+
+* Fri Dec  6 2002 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.5.2
+- nntp authentication can be passed after any command
+
+* Sat May  4 2002 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.5.1
+
+* Thu May  2 2002 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.99
+
+* Wed Mar 13 2002 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.28
+- fixed SIGSEGV in <get-message>, <get-parent>, <get-children>,
+  <reconstruct-thread> functions
+- fixed message about nntp reconnect
+- fixed <attach-news-message> function using browser
+- added support of Followup-To: poster
+- added %n (new articles) in group_index_format
+- posting articles without inews by default
+
+* Wed Jan 23 2002 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.27
+
+* Fri Jan 18 2002 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.26
+
+* Thu Jan  3 2002 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.25
+- accelerated speed of access to news->newsgroups hash (by <gul@gul.kiev.ua>)
+- added default content disposition
+
+* Mon Dec  3 2001 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.24
+
+* Fri Nov  9 2001 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.23.2
+- fixed segfault if mutt_conn_find() returns null
+
+* Wed Oct 31 2001 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.23.1
+- added support of LISTGROUP command
+- added support for servers with broken overview
+- disabled <flag-message> function on news server
+- fixed error storing bad authentication information
+
+* Wed Oct 10 2001 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.23
+- fixed typo in buffy.c
+- added substitution of %s parameter in $inews variable
+
+* Fri Aug 31 2001 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.22.1
+- update to 1.3.22
+
+* Thu Aug 23 2001 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.21
+
+* Wed Jul 25 2001 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.20
+- removed 'server-hook', use 'account-hook' instead
+- fixed error opening NNTP server without newsgroup using -f option
+
+* Fri Jun  8 2001 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.19
+
+* Sat May  5 2001 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.18
+- fixed typo in nntp_attempt_features()
+- changed algorithm of XGTITLE command testing
+- disabled writing of NNTP password in debug file
+- fixed reading and writing of long newsrc lines
+- changed checking of last line while reading lines from server
+- fixed possible buffer overrun in nntp_parse_newsrc_line()
+- removed checking of XHDR command
+- compare NNTP return codes without trailing space
+
+* Thu Mar 29 2001 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.17
+- support for 'LIST NEWSGROUPS' command to read descriptions
+
+* Fri Mar  2 2001 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.16
+
+* Wed Feb 14 2001 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.15
+
+* Sun Jan 28 2001 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.14
+- show number of tagged messages patch from Felix von Leitner <leitner@fefe.de>
+
+* Sun Dec 31 2000 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.13
+
+* Sat Dec 30 2000 Vsevolod Volkov <vvv@mutt.org.ua>
+- Fixed problem if last article in group is deleted
+
+* Fri Dec 22 2000 Vsevolod Volkov <vvv@mutt.org.ua>
+- Fixed checking of XGTITLE command on some servers
+
+* Mon Dec 18 2000 Vsevolod Volkov <vvv@mutt.org.ua>
+- Added \r in AUTHINFO commands
+
+* Mon Nov 27 2000 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.12
+
+* Wed Nov  1 2000 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.11
+- fixed error opening newsgroup from mutt started with -g or -G
+
+* Thu Oct 12 2000 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.10
+- hotkey 'G' (get-message) replaced with '^G'
+
+* Thu Sep 21 2000 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.9
+- changed delay displaying error messages from 1 to 2 seconds
+- fixed error compiling with nntp and without imap
+
+* Wed Sep  6 2000 Vsevolod Volkov <vvv@mutt.org.ua>
+- fixed catchup in index
+- fixed nntp_open_mailbox()
+
+* Sat Sep  2 2000 Vsevolod Volkov <vvv@mutt.org.ua>
+- functions <edit> and <delete-entry> disabled
+- format of news mailbox names changed to url form
+- option nntp_attempts removed
+- option reconnect_news renamed to nntp_reconnect
+- default value of nntp_poll changed from 30 to 60
+- error handling improved
+
+* Wed Aug 30 2000 Vsevolod Volkov <vvv@mutt.org.ua>
+- update to 1.3.8
+- new option show_only_unread
+- add newsgroup completion
+
+* Fri Aug  4 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.3.7
+
+* Sat Jul 29 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.3.6
+
+* Sun Jul  9 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.3.5
+- authentication code update
+- fix for changing to newsgroup from mailbox with read messages
+- socket code optimization
+
+* Wed Jun 21 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.3.4
+
+* Wed Jun 14 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- don't substitute current newsgroup with deleted new messages
+
+* Mon Jun 12 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.3.3
+- fix for substitution of newsgroup after reconnection
+- fix for loading newsgroups with very long names
+- fix for loading more than 32768 newsgroups
+
+* Wed May 24 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.3.2
+
+* Sat May 20 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.3.1
+
+* Fri May 12 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.3
+
+* Thu May 11 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.2
+
+* Thu May  4 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.1.14
+
+* Sun Apr 23 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.1.12
+
+* Fri Apr  7 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- add substitution of newsgroup with new messages by default
+
+* Wed Apr  5 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- add attach message from newsgroup
+- add one-line help in newsreader mode
+- disable 'change-dir' command in newsgroups browser
+- add -G option
+
+* Tue Apr  4 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- get default newsserver name from file /etc/nntpserver
+- use case insensitive server names
+- add print-style sequence %s to $newsrc
+- add -g option
+
+* Sat Apr  1 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- remove 'X-FTN-Origin' header processing
+
+* Thu Mar 30 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.1.11
+- update to 1.1.10
+
+* Thu Mar 23 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- fix mutt_select_newsserver()
+- remove 'toggle-mode' function
+- add 'change-newsgroup' function
+
+* Wed Mar 22 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- fix server-hook
+
+* Tue Mar 21 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- fix error 'bounce' function after 'post'
+- add 'forward to newsgroup' function
+
+* Mon Mar 20 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- 'forward' function works in newsreader mode
+- add 'post' and 'followup' functions to pager and attachment menu
+- fix active descriptions and allowed flag reload
+
+* Tue Mar 14 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.1.9
+- remove deleted newsgroups from list
+
+* Mon Mar 13 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update .newsrc in browser
+
+* Sun Mar 12 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- reload .newsrc if externally modified
+- fix active cache update
+
+* Sun Mar  5 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.1.8
+
+* Sat Mar  4 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- patch *.update_list_file is not required
+- count lines when loading descriptions
+- remove cache of unsubscribed newsgroups
+
+* Thu Mar  2 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- load list of newsgroups from cache faster
+
+* Wed Mar  1 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.1.7
+
+* Tue Feb 29 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- fix unread messages in browser
+- fix newsrc_gen_entries()
+
+* Mon Feb 28 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- fix mutt_newsgroup_stat()
+- fix nntp_delete_cache()
+- fix nntp_get_status()
+- fix check_children()
+- fix nntp_fetch_headers()
+
+* Fri Feb 25 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.1.5
+
+* Thu Feb 24 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- fix updating new messages in cache
+
+* Mon Feb 21 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- change default cache filenames
+- fix updating new messages in cache
+
+* Fri Feb 18 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- fix segmentation fault in news groups browser
+
+* Tue Feb 15 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.1.4
+
+* Thu Feb 10 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.1.3
+
+* Sun Jan 30 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- add X-Comment-To editing
+- add my_hdr support for Newsgroups:, Followup-To: and X-Comment-To: headers
+- add variables $ask_followup_to and $ask_x_comment_to
+
+* Fri Jan 28 2000 Vsevolod Volkov <vvv@mutt.kiev.ua>
+- update to 1.1.2
diff --git a/ChangeLog.old b/ChangeLog.old
new file mode 100644 (file)
index 0000000..75f415b
--- /dev/null
@@ -0,0 +1,12219 @@
+Fri Dec  6 10:56:30 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * curs_lib.c, pgppubring.c:
+       From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Fixing a number of traditional malloc calls which have made their
+       way into the code.
+
+       * build-release: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Don't post announcements automatically for the moment.
+
+Thu Dec  5 22:30:02 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.head: From: Michael Elkins <me@sigpipe.org>
+
+       Fix #1398.
+
+Mon Nov 25 14:16:47 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * sendlib.c, ChangeLog, charset.h, configure.in, INSTALL:
+       From: Lars Hecking <lhecking@nmrc.ucc.ie>
+
+       The noiconv patch.
+
+Thu Nov 14 08:12:30 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * curs_lib.c: From: Michael Elkins <me@sigpipe.org>
+
+       Fix #1388.
+
+Wed Nov 13 10:10:52 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * main.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       A description of -A was lacking from the help string.
+
+       * doc/manual.sgml.head, doc/mutt.man, main.c, protos.h:
+       From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Add a new command line option -A which is used to expand aliases.
+
+       * keymap.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Add a safeguard #ifdef for the KEY_BTAB entry.  Suggested by Thomas
+       Dickey.
+
+Tue Nov 12 09:20:30 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * keymap.c: From: Michael Elkins <me@sigpipe.org>
+
+       Tell mutt about the back-tab key (shift tab).
+
+       * Makefile.am: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       ups.
+
+       * Makefile.am: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Add "make pclean" in order to clean up PATCHES.
+
+       * po/ja.po: From: TAKAHASHI Tamotsu <arms405@jade.dti.ne.jp>
+
+       update
+
+       * README: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Add an explicit note that CVS doesn't work from ftp.mutt.org any more.
+
+       * mbyte.c: From: "Yasuhiro Matsumoto" <mattn_jp@hotmail.com>
+
+       cp932 should be treated like shift_jis.
+
+       * imap/auth_gss.c, imap/auth_sasl.c, configure.in, main.c, mutt_sasl.c, mutt_sasl.h:
+       From: Nathan Dushman <nhd+mutt@andrew.cmu.edu>
+
+       Hi - this is a patch against mutt-1.4 to use version 2 of the Cyrus
+       SASL library; all changes are ifdef'd so as not to break SASLv1
+       support. This includes a patch to configure.in to allow the choice
+       between v1 and v2, but someone with a better understanding of
+       autoconf should double-check it.
+
+       * handler.c: From: Michael Elkins <me@sigpipe.org>
+
+       Actually commit patch-1.5.1.me.long_qp.2.
+
+       * mailbox.h, mh.c, mx.c: From: Michael Elkins <me@sigpipe.org>
+
+       The maildir_time patch.
+
+Mon Nov 11 21:17:25 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * muttbug.sh.in: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       You shall not use CVS to distribute test versions.
+
+       * muttbug.sh.in: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       more fixes.
+
+       * muttbug.sh.in: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Add some rpm-related intelligence to flea.
+
+       * muttbug.sh.in: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Fix flea's interaction with bug(1) on Debian systems.
+
+       * PATCHES: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Clean up the patch list.
+
+       * hdrline.c, PATCHES: From: Michael Elkins <me@sigpipe.org>
+
+       Fix #485: Make %z work like %Z inside of %{} in $index_format.
+
+       * copy.c, PATCHES: From: Michael Elkins <me@sigpipe.org>
+
+       Fix #1379 - update the total mailbox size when an attachment is
+       deleted.
+
+       * curs_main.c, menu.c, pager.c, PATCHES:
+       From: Michael Elkins <me@sigpipe.org>
+
+       Fix #1310; redraw problems.
+
+       * doc/manual.sgml.head, init.h: From: Michael Elkins <me@sigpipe.org>
+
+       Fix #1306.
+
+       * send.c: From: Michael Elkins <me@sigpipe.org>
+
+       Fix #1364.
+
+       * pgp.c: From: Steve Kennedy <steve-md@gbnet.net>
+
+       Fix memory leak in the PGP code.
+
+       * commands.c, protos.h, sendlib.c:
+       From: Paul Walker <paul@black-sun.demon.co.uk>
+
+       Fix #718.
+
+       * sendlib.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Fix #1366.
+
+       * mx.c: From: Martin Siegert <siegert@sfu.ca>
+
+       Fix IMAP moving; #1367.
+
+       * send.c: From: rene@clerc.nl
+
+       Another S/MIME ifdef misses and causes compilation problems.
+
+       * init.h: From: Michael Elkins <me@sigpipe.org>
+
+       patch-1.5.1-me.status_doc.2
+
+       * alias.c, init.c, protos.h:
+       From: Thomas Roessler <roessler@does-not-exist.org>
+
+       patch-1.5-tlr.alias-parse.1 - extension of patch-1.5.1-me.aliascheck.1
+
+       This patch catches the same kind of bad alias names caught by
+       Michael's patch.  There are some extensions:
+
+       1. Mutt makes sure that it doesn't _suggest_ bad names to the user.
+       2. If a name is bad, the user is informed, and may elect to fix the
+          name.  In this case, mutt will automatically suggest a fixed
+          version.
+       3. If the user insists in the bad name, it's written into the
+          aliases file with proper quoting.
+       4. When mutt parses the aliases file, it now uses the normal
+          tokenizer routines in order to properly handle quoted alias names.
+
+       * handler.c: From: Michael Elkins <me@sigpipe.org>
+
+       patch-1.5-me.long_qp.2 (#1371) - fix truncation with overly long Q-P
+       encoded lines.
+
+Tue Oct 22 21:24:07 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * commands.c: From: René Clerc <rene@clerc.nl>
+
+       Add some missing #ifdefs.
+
+       * init.h, recvattach.c: From: Michael Elkins <me@sigpipe.org>
+
+       Documentation fix; #1326
+
+       * send.c: From: René Clerc <rene@clerc.nl>
+
+       Another crypt_reply fix.
+
+       * contrib/sample.muttrc: From: Michael Elkins <me@sigpipe.org>
+
+       #1357
+
+Thu Oct 10 09:50:03 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * send.c: From: René Clerc <rene@clerc.nl>
+
+       Make sure that crypt_reply replies with the same type, despite a
+       possible S/MIME default.
+
+       * doc/manual.sgml.head: From: Michael Elkins <me@sigpipe.org>
+
+       Document escaping rules for regular expressions (#1351).
+
+       * pager.c: From: Michael Elkins <me@sigpipe.org>
+
+       Fix header coloring, so there is no difference between ncurses and
+       slang.
+
+       * init.h: From: Michael Elkins <me@sigpipe.org>
+
+       PGP documentation glitch.
+
+       * doc/manual.sgml.head: From: Paul Walker <paul@black-sun.demon.co.uk>
+
+       Fix #1340 (documentation)
+
+       * pager.c: From: Michael Elkins <me@sigpipe.org>
+
+       Jeremy Lin wrote:
+       > When I search with / and get a match, doing '/\r' doesn't move to the next
+       > match. This behavior is unlike the less pager, and is rather useless, IMHO.
+
+       Try the attached patch.
+
+Mon Sep 23 12:08:43 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * buffy.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       A variant of buffy notification.  Note:  If you folks don't like
+       this, we can return to the old version.
+
+Mon Sep  9 21:48:19 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * browser.c, buffy.c, curs_main.c, functions.h, OPS, pager.c, protos.h:
+       From: Rudi Chiarito <nutello@sweetness.com>
+
+       Add a buffy-list function, and display more information when new
+       mail arrives.  With some modifications from tlr.
+
+       * mh.c: From: Michael Elkins <me@sigpipe.org>
+
+       Fix #1321.
+
+       * mh.c: From: Michael Elkins <me@sigpipe.org>
+
+       [STABLE] Fix #1321.
+
+       * signal.c: From: Tony Leneis <tony@cvr.ds.adp.com>
+
+       Tru64 Unix portability patch.
+
+       * signal.c: From: Tony Leneis <tony@cvr.ds.adp.com>
+
+       [STABLE] Tru64 Unix portability patch.
+
+       * doc/manual.sgml.head: From: Vincent Lefevre <vincent@vinc17.org>
+
+       Fixing a typo.
+
+       * postpone.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Fixing #1300.  Noted by David Shaw <dshaw@jabberwocky.com>.
+
+       * postpone.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Fix #1299; noted by David Shaw <dshaw@jabberwocky.com>.
+
+       * init.h, mutt.h, send.c: From: Michael Elkins <me@sigpipe.org>
+
+       Introducing $forward_edit.
+
+       * send.c: From: Michael Elkins <me@sigpipe.org>
+
+       #265:
+
+       > Suppose a user wants to fcc to a file (e.g., /a/b/c) but accidentally
+       > typed a = before the path name. Mutt will fail to find the =/a/b/c
+       > folder, display the error message and beep, but immediately erase the
+       > error message; the mail will be sent even though the fcc failed. (The
+       > same can be accomplished by accidentally mistyping other parts of the
+       > path name.) On local systems where screen update is quick, the user
+       > might not notice the error message at all.
+       >
+       > The problem with this behaviour is that the user might have no chance
+       > to read the error message if the screen update is quick enough; as a
+       > result (s)he might not notice that the fcc failed.
+       >
+       > A related thing (probably can't be classified as a problem) is that if
+       > fcc fails, the user probably don't want to send the mail out because
+       > if fcc is requested (s)he probably very much want to keep a copy of
+       > the sent mail.
+
+       Try the following patch.  We keep track of whether or not the fcc
+       failed with a local var `fcc_error' and perform the same behavior as
+       if the actual send of the message failed (without really sending)
+       when the FCC fails, thus giving the user a chance to correct the
+       error.
+
+       * globals.h, init.h, send.c: From: Michael Elkins <me@sigpipe.org>
+
+       Introduce $content_type.  There's one change against Michael's
+       patch, in how the "format=flowed" parameter is used.
+
+       * history.c: From: Vincent Lefevre <vincent@vinc17.org>
+
+       [STABLE] Fixing history classes.
+
+       * history.c: From: Vincent Lefevre <vincent@vinc17.org>
+
+       Fixing history classes.
+
+       * mh.c: From: Armin Wolfermann <aw@osn.de>
+
+       when doing the second parsing pass on a maildir, mutt doesn't delete
+       the fake HEADER struct if the file is unreadable. With this fix
+       unreadable files get silently ignored (like in the MH case).
+
+       * po/ja.po: From: "TAKAHASHI, Tamotsu" <arms405@jade.dti.ne.jp>
+
+       Update.
+
+       * editmsg.c: From: Michael Elkins <me@sigpipe.org>
+
+       Fixing #1149:  Truncate files used for editing messages.
+
+       * doc/manual.sgml.head, doc/muttrc.man.head, buffy.c, buffy.h, init.h:
+       From: Nicolas Rachinsky <nicolas@dauerreden.de>
+
+       An unmailboxes command.  #1311.
+
+       * attach.c: From: Michael Elkins <me@sigpipe.org>
+
+       Fixing #1330.
+
+       * attach.c: From: Michael Elkins <me@sigpipe.org>
+
+       [STABLE] Fixing #1330.
+
+Fri Aug  9 07:01:11 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/muttrc.man.head:
+       From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Document unalternative_order in the manual page.
+
+       * doc/manual.sgml.head, init.c, init.h:
+       From: Michael Elkins <me@sigpipe.org>
+
+       The following patch adds the `unalternative_order' command.  It also
+       allows using "*" more generically in un-commands which use
+       parse_unlists().
+
+Mon Aug  5 17:25:05 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * pgpewrap.c, pgppubring.c: From: Michael Elkins <me@sigpipe.org>
+
+       Error handling fixes.
+
+Fri Jul 26 08:24:01 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.head: From: Michael Elkins <me@sigpipe.org>
+
+       Documentation for reply-hook.  Another patch (for the manual page)
+       would be most welcome. ;-))
+
+       * curs_lib.c: From: Michael Elkins <me@sigpipe.org>
+
+       The attached patch fixes mutt_yesorno() so that the question will be
+       truncated enough to always fit in the default answer string.  The
+       size is calculated on the fly so that there is no artificial
+       truncation.
+
+Wed Jul 24 09:46:58 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * mutt.h: From: TAKIZAWA Takashi <taki@luna.email.ne.jp>
+
+       The attached patch sets MB_LEN_MAX to 16, which is MB_LEN_MAX value
+       on glibc-2.2. It works only with --without-wc-funcs switch. It may
+       be applied to mutt-1.4 and mutt-1.5.1.
+
+       * configure.in: From: Lars Hecking <lhecking@nmrc.ie>
+
+       Fix a quoting sloppiness.  Noted by Vincent Lefevre.
+
+       * browser.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Fixing #1282.  An off-by-one error. :-/
+
+       * mutt.h, send.c, hook.c, init.h: From: Michael Elkins <me@sigpipe.org>
+
+       reply-hook.  Documentation still needed.
+
+       * po/fr.po: From: Vincent Lefevre <vincent@vinc17.org>
+
+       update.
+
+       * doc/mutt.man, compose.c, editmsg.c, init.c, init.h, attach.c:
+       From: Michael Elkins <me@sigpipe.org>
+
+       Fix $editor and $visual.  Based on an earlier patch from Edmund
+       Grimley Evans.
+
+Fri Jul 19 19:23:21 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.head: From: Michael Elkins <me@sigpipe.org>
+
+       Another documentation patch.
+
+Wed Jul 17 12:48:38 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * sendlib.c: From: Rocco Rutte <s1118644@mail.inf.tu-dresden.de>
+
+       * Thomas Roessler [02-07-08 10:14:53 +0200] wrote:
+       >  * sendlib.c, 3.12 -> 3.13
+       >    From: Rocco Rutte <s1118644@mail.inf.tu-dresden.de>
+
+       >    Make encode_from a bit more aggressive, by also catching a 'f' in
+       >    the beginning of a line.
+
+       'Catch' is good but also to encode it is better. It may have
+       been too late (sorry for that) so I fixed it. I don't know
+       why the current source only escapes lines that actually
+       begin with 'from' or 'From' followed by some text. I think
+       that escaping 'from' or 'From' on a single line should be
+       done, too.
+
+       Not a big deal, anyways.
+
+Tue Jul 16 07:28:11 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * main.c: From: Michael Elkins <me@sigpipe.org>
+
+       Update copyright notices.
+
+Sun Jul  7 19:33:50 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.head, doc/mutt.man, init.h:
+       From: Cedric Duval <cedricduval@free.fr>
+
+       Documentation fixes.
+
+       * doc/manual.sgml.head:
+       From: "TAKAHASHI, Tamotsu" <arms405@jade.dti.ne.jp>
+
+       Dcumentation fixes.
+
+       * doc/manual.sgml.head, doc/mutt.man, init.h:
+       From: Cedric Duval <cedricduval@free.fr>
+
+       Documentation fixes.
+
+       * sendlib.c: From: Rocco Rutte <s1118644@mail.inf.tu-dresden.de>
+
+       Make encode_from a bit more aggressive, by also catching a 'f' in
+       the beginning of a line.
+
+       * po/Attic/bg.po: From: Velko Hristov <hristov@informatik.hu-berlin.de>
+
+       Update.
+
+       * init.h: From: Jeremy Blosser <jblosser-mutt@firinn.org>
+
+       Add unauto_view to the stable branch.  A one-liner.
+
+Fri Jun 28 19:52:31 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.head: From: Michael Elkins <me@sigpipe.org>
+
+       Documentation fix (#271).
+
+Tue Jun 18 10:03:52 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/zh_TW.po, po/tr.po, po/uk.po, po/zh_CN.po, po/sv.po, po/sk.po, po/ru.po, po/pt_BR.po, po/nl.po, po/pl.po, po/ja.po, po/ko.po, po/lt.po, po/it.po, po/gl.po, po/hu.po, po/id.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/el.po, po/da.po, po/de.po, po/ca.po, po/cs.po:
+       From: (automatic)
+
+       "make update-po"
+
+       * po/ca.po: From: several submitters
+
+       Adding a BG translation.  Update for CA.
+
+       * po/Attic/bg.po:
+       file bg.po was initially added on branch mutt-1-4-stable.
+
+       * po/Attic/bg.po: From: several submitters
+
+       Adding a BG translation.  Update for CA.
+
+       * configure.in: From: several submitters
+
+       Adding a BG translation.
+
+       * init.c: From: Michael Elkins <me@sigpipe.org>
+
+       The string used to store the commmand for a backtic expansion in the
+       muttrc was not free'd if the command failed for some reason.
+
+       * m4/gssapi.m4: From: David Champion <dgc@uchicago.edu>
+
+       Okay, two bugs here. One's an oversight of mine in my previous patch,
+       where I tried to use "[hH]" as Bourne code while m4 had quoting set to
+       ([, ]) -- this probably makes mutt mis-detect Heimdal after all.
+
+       The other is not mine (i.e., it's in cvs now) and it makes mutt
+       overstrike $LIBS if Heimdal or MIT Kerberos is detected. This is a
+       problem for anyone who needs -lnsl -lsocket, in particular. I was
+       fixing
+       this by hand during late 1.3.x releases, as I didn't have time to
+       track
+       it down....
+
+       Here's a patch against the current (unpatched) 1.5 cvs copy of
+       m4/gssapi.m4. It probably should go into both branches. Sorry for the
+       repeats.
+
+Thu Jun  6 23:13:54 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * color.c: From: Michael Elkins <me@sigpipe.org>
+
+       Fix #1230.
+
+       * init.h: From: Will Fiveash <william.fiveash@sun.com>
+
+       Fix a couple of compile-time warnings.
+
+Fri May 31 16:59:39 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * charset.c, charset.h, sendlib.c:
+       From: Edmund GRIMLEY EVANS <edmundo@rano.org>
+
+       Fix charset-hook.
+
+       * m4/iconv.m4, charset.h, configure.in, INSTALL:
+       From: Lars Hecking <lhecking@nmrc.ucc.ie>
+
+       The noiconv patch.  Should probably have been in 1.4.
+
+Thu May 30 12:15:02 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * rfc822.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Properly handle empty addresses (<>) when they show up in mail
+       headers.  The approach taken is to store this address as <@>, and to
+       check this special case when printing an address.
+
+Wed May 29 09:31:51 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/zh_CN.po, po/zh_TW.po, po/uk.po, po/tr.po, po/sk.po, po/sv.po, po/pl.po, po/pt_BR.po, po/ru.po, po/ko.po, po/lt.po, po/nl.po, po/it.po, po/ja.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/eo.po, po/es.po, po/et.po, po/da.po, po/de.po, po/el.po, po/ca.po, po/cs.po, reldate.h, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.4
+
+       * po/de.po: From: Roland Rosenfeld <roland@spinnaker.de>
+
+       update.
+
+       * po/id.po: From: Ronny Haryanto <ronny@haryan.to>
+
+       update
+
+Tue May 28 09:07:29 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * mx.h, postpone.c: From: Michael Elkins <me@sigpipe.org>
+
+       Fix some warnings noted by Vincent Lefevre.
+
+Tue May 21 07:28:28 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/eo.po: From: Edmund GRIMLEY EVANS <edmundo@rano.org>
+
+       update
+
+Sat May 18 05:39:55 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * pattern.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Fix #1175.
+
+       * pattern.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Fix #1175.  Noticed by Alain Bench.
+
+       * pop_lib.c: From: Vsevolod Volkov <vvv@mutt.org.ua>
+
+       Attached patch for mutt 1.3.X/1.4 and 1.5.X removes gcc warning in
+       pop_lib.c.
+
+Thu May 16 17:33:19 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/pl.po: From: Pawel Dziekonski <dzieko@pwr.wroc.pl>
+
+       update
+
+       * po/ko.po: From: Im Eunjea <eunjea@koru.org>
+
+       update.
+
+       * po/ko.po: From: Im Eunjea <eunjea@koru.org>
+
+       update
+
+       * po/id.po: From: Ronny Haryanto <ronny@haryan.to>
+
+       update.
+
+       * compose.c: From: Ronny Haryanto <ronny@haryan.to>
+
+       Triple-DES, not Tripple-DES.
+
+Tue May 14 18:56:01 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/uk.po: From: "Andrej N. Gritsenko" <andrej@lucky.net>
+
+       update
+
+Mon May 13 20:18:57 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/et.po: From: Toomas Soome <Toomas.Soome@microlink.ee>
+
+       update
+
+       * po/ru.po, po/uk.po: From: Vsevolod Volkov <vvv@mutt.org.ua>
+
+       update
+
+       * po/da.po: From: Byrial Jensen <byrial@image.dk>
+
+       update
+
+       * po/ru.po: From: Vsevolod Volkov <vvv@mutt.org.ua>
+
+       update
+
+       * po/sv.po: From: Jörgen Tegnér <jorgen.tegner@telia.com>
+
+       update
+
+       * po/fr.po: From: Vincent Lefevre <vincent@vinc17.org>
+
+       update
+
+Thu May  9 09:52:09 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/muttrc.man.head:
+       From: Thomas Roessler <roessler@does-not-exist.org>
+
+       #1190, from Tim Alexeevsky <tim@zhuchka.gbnet.net>
+
+Mon May  6 11:27:20 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.head:
+       From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Remove -Q which is only present in unstable from the stable
+       documentation.  Thanks to Andreas Kneib <Andreas.Kneib@t-online.de>
+       for noting.
+
+Thu May  2 01:05:27 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * Makefile.am: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Include smime.h with EXRA_DIST.
+
+Wed May  1 23:24:17 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/zh_TW.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/pl.po, po/pt_BR.po, po/ru.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, reldate.h, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.5.1
+
+       * smime.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Shut up check_sec.sh.  No security holes, but some ugly code.
+
+       * check_sec.sh: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Give all the warnings at once.
+
+       * build-release: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       - This is a development branch.
+       - Add a -nodiff option to suppress generating a patch.
+
+       * po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/pl.po, po/pt_BR.po, po/ru.po, po/lt.po, po/nl.po, po/it.po, po/ja.po, po/ko.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, ChangeLog, po/ca.po, po/cs.po, reldate.h, VERSION:
+       automatic post-release commit for mutt-1.3.99
+
+       * build-release: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       s/scp1/scp/
+
+Tue May  7 15:42:37 IST 2002  Lars Hecking  <lhecking@nmrc.ie>
+
+       * INSTALL: Document new --disable-iconv configure option.
+
+       * charset.h: Conditionalise inclusion of iconv.h. Define iconv_t
+       if not found by configure. Define ICONV_CONST and declare iconv
+       functions if not found by configure.
+
+       * configure.in: New --disable-iconv configure option. Warn instead
+       error if iconv not found. New tests for iconv.h and iconv_t.
+
+       * sendlib.c(convert_file_to): Allow compilation without system
+       iconv and return -1 if no iconv available.
+
+Wed May  1 23:21:10 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * smime.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Shut up check_sec.sh.  No security holes, but some ugly code.
+
+       * check_sec.sh: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Give all the warnings at once.
+
+       * build-release: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       - This is a development branch.
+       - Add a -nodiff option to suppress generating a patch.
+
+       * po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/pl.po, po/pt_BR.po, po/ru.po, po/lt.po, po/nl.po, po/it.po, po/ja.po, po/ko.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, ChangeLog, po/ca.po, po/cs.po, reldate.h, VERSION:
+       automatic post-release commit for mutt-1.3.99
+
+       * build-release: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       s/scp1/scp/
+
+Mon Apr 29 17:12:18 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * lib.c, lib.h, protos.h:
+       From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Fix #1171.
+
+       * po/fr.po: From: Vincent Lefevre <vincent@vinc17.org>
+
+       update.
+
+       * po/ja.po: From: oota toshiya <oota@mspd.mt.nec.co.jp>
+
+       update.
+
+       * imap/util.c: From: Byrial Jensen <byrial@image.dk>
+
+       There is a possible buffer overflow due an off-by-one error in
+       imap/util.c, line 125. The error is in the maximum field width
+       indication in the sscanf() call. You must have room in the receiving
+       buffer for this number of characters /plus a terminating NULL
+       character/.
+
+       * imap/util.c: From: Byrial Jensen <byrial@image.dk>
+
+       There is a possible buffer overflow due an off-by-one error in
+       imap/util.c, line 125. The error is in the maximum field width
+       indication in the sscanf() call. You must have room in the
+       receiving buffer for this number of characters /plus a
+       terminating NULL character/.
+
+Thu Apr 25 13:30:49 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * pop.c, pop_lib.c: From: Vsevolod Volkov <vvv@mutt.org.ua>
+
+       Attached patch fixes the problem described below. It should be
+       applied to both mutt 1.3/1.4 and 1.5 branches.
+
+       > Date: Thu, 11 Apr 2002 16:24:00 -0500
+       > Subject: mutt 1.3.x / pop
+       > From: "Ryan O'Hara" <rohara@isis.visi.com>
+       > To: bcully@users.sourceforge.net
+       > User-Agent: Mutt/1.3.27i
+
+       > Hi. My apologies if this has nothing to do with you. If it does not,
+       > maybe you could forward it on to someone.
+
+       > In mutt 1.3.x I have noticed that if I uses POP to retrieve mail, and
+       > I enter an incorrect password whem prompted, it will *save* that
+       > password and keep trying to use it. However, in the 1.2.x versions it
+       > worked like this: type in wrong POP password, try to connect to POP
+       > server again and it will ask you (again) for the password. mutt 1.3.x
+       > does not, it just tries to connect with the wrongs password (which
+       > just failed).
+
+       > This is kinda annoying. Just thought I'd point out this regression.
+
+       > Thanks.
+       > R
+
+       * doc/manual.sgml.head: From: Wouter Verheijen <wv@xs2mail.com>
+
+       Someone in news:comp.mail.mutt noted that the list of command-line
+       options in the manual is not up-to-date.
+
+       Included a small patch that includes all options that 'mutt -h' shows.
+
+       * doc/manual.sgml.tail, init.h, OPS, pattern.c:
+       From: Cedric Duval <cedricduval@free.fr>
+
+       attached are fixes for some little mistakes :
+
+       * history-down -> scroll _down_, not up
+       * functions decode-(save|copy) do not exist in the attach menu.
+       * gettext oversight in pattern.c
+       * inconsistency between "printf-like sequences" used all over the place
+         and "escape sequences" for the description of $attribution.
+
+       * doc/manual.sgml.tail, pattern.c, init.h, OPS:
+       From: Cedric Duval <cedricduval@free.fr>
+
+       attached are fixes for some little mistakes :
+
+       * history-down -> scroll _down_, not up
+       * functions decode-(save|copy) do not exist in the attach menu.
+       * gettext oversight in pattern.c
+       * inconsistency between "printf-like sequences" used all over the
+         place and "escape sequences" for the description of $attribution.
+
+       * recvattach.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Also fix this for the S/MIME case.
+
+       * recvattach.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Fiy handling of multiparts which have encrypted sub-parts, at least
+       for PGP.
+
+       * sendlib.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Force 7bit encoding for application/pgp-keys.
+
+Sat Apr 20 21:38:47 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * m4/Attic/lib-ld.m4, m4/Attic/lib-link.m4, m4/Attic/lib-prefix.m4, m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4, intl/Attic/eval-plural.h, intl/Attic/gmo.h, intl/Attic/localename.c, intl/Attic/os2compat.c, intl/Attic/os2compat.h, intl/Attic/osdep.c, intl/Attic/plural-exp.c, intl/Attic/plural-exp.h, intl/bindtextdom.c, intl/ChangeLog, intl/config.charset, intl/dcigettext.c, intl/gettextP.h, intl/hash-string.h, intl/l10nflist.c, intl/libgnuintl.h, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/localealias.c, intl/Makefile.in, intl/plural.c, intl/plural.y, ABOUT-NLS, Attic/config.rpath, configure.in, INSTALL:
+       From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Backing out the latest iconv-related changes from the
+       mutt-1-4-stable branch.
+
+       * m4/Attic/lib-ld.m4, m4/Attic/lib-link.m4, m4/Attic/lib-prefix.m4, m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4:
+       same as above.
+
+       * intl/Attic/eval-plural.h, intl/Attic/gmo.h, intl/Attic/localename.c, intl/Attic/os2compat.c, intl/Attic/os2compat.h, intl/Attic/osdep.c, intl/Attic/plural-exp.c, intl/Attic/plural-exp.h, intl/gettextP.h, intl/hash-string.h, intl/l10nflist.c, intl/libgnuintl.h, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/localealias.c, intl/plural.c, intl/plural.y, intl/bindtextdom.c, intl/ChangeLog, intl/config.charset, intl/dcigettext.c, intl/Makefile.in:
+       From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Committing the new iconv patches into a separate branch.
+
+       * ABOUT-NLS, Attic/config.rpath, configure.in, INSTALL:
+       From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Committing the new noiconv patches into a separate branch.
+
+       * sendlib.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Generate the resent-message-id ourselves, and add it in the top of
+       the header.
+
+       * copy.c, mutt.h, sendlib.c: From: Wouter Verheijen <wv@xs2mail.com>
+
+       Bug #571 "mutt should not replicate ">From " headers while bounding",
+       has a patch attached.
+       Will that patch get in?
+
+       Although these lines are not generated by mutt, I would strongly
+       suggest
+       to prevent it, because by boucing a mail the MUA should ensure
+       that the message header is according to the specification.
+       A ">From " line is not, because of the spaces before a colon.
+
+       Because this has such serious consequences (totally unreadable mail)
+       when a MTA interpretes this line as the beginning of the body (not
+       unreasonable), I think Mutt should prevent sending this invalid
+       headerline.
+
+       Because the other patch to the bugreport is not really correct IMHO
+       (because the fieldnames are not limited to alphanumeric chars, RFC2822
+       3.6.8), I propose another one.
+
+       This patch also appends Resent-* to the header, instead of
+       prepending it. The Resent-Message-Id is however still appended,
+       because I could not find it; is it added by the MTA instead of by
+       Mutt?
+
+       * m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4:
+       Try to get the noiconv patch to work.
+
+       * configure.in: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Try to get the noiconv patch to work with my development environment.
+
+       * INSTALL: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Fix a typo.
+
+       * init.h, rfc2047.c, sendlib.c, charset.c, charset.h, configure.in, gnupgparse.c, INSTALL:
+       From: Lars Hecking <lhecking@nmrc.ie>
+
+        patch.1.3.28.lh.noiconv
+        =======================
+
+        This is the new version of my noiconv patch. It _requires_ the previous
+        patch! If applied without, you'll have to resolve a couple of conflicts
+        manually.
+
+        Notes:
+        - it's a lot cleaner than the old noiconv patch because no m4 files are
+          modified
+        - new configure option --disable-iconv; INSTALL updated accordingly
+          [I am guessing here, but the background for the --without-iconv option
+           mentioned in INSTALL was that mutt had a without-iconv option before
+           gettext included iconv support. When mutt's intl/* files were updated
+           to a newer gettext, there suddenly were two iconv options, which then
+           got merged, that is, mutt's was removed. That was probably when
+           --without-iconv stopped working, but I'm not sure, it may well be that
+           it never worked since iconv support was introduced.]
+        - all changes in *.[ch] files should be identical to the old patch
+
+       * intl/Attic/localename.c:
+       file localename.c was initially added on branch mutt-1-4-stable.
+
+       * intl/Attic/localename.c: From: Lars Hecking <lhecking@nmrc.ie>
+
+       This one seems to have been missing, too.
+
+       * Attic/config.rpath:
+       file config.rpath was initially added on branch mutt-1-4-stable.
+
+       * Attic/config.rpath: From: Lars Hecking <lhecking@nmrc.ie>
+
+       Another file from the gettext patch.
+
+       * m4/Attic/lib-ld.m4:
+       file lib-ld.m4 was initially added on branch mutt-1-4-stable.
+
+       * m4/Attic/lib-link.m4:
+       file lib-link.m4 was initially added on branch mutt-1-4-stable.
+
+       * m4/Attic/lib-prefix.m4:
+       file lib-prefix.m4 was initially added on branch mutt-1-4-stable.
+
+       * m4/Attic/lib-ld.m4, m4/Attic/lib-link.m4, m4/Attic/lib-prefix.m4:
+       From: Lars Hecking <lhecking@nmrc.ie>
+
+       Add new m4 files from patch.1.3.28.lh.gettext-0.11.1.
+
+       * m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4:
+       From: Lars Hecking <lhecking@nmrc.ie>
+
+        patch.1.3.28.lh.gettext-0.11.1
+        ==============================
+
+        This one updates the gettext stuff in mutt to gettext-0.11.1. I started
+        doing this in the hope that the new gettext version would simplify the
+        noiconv patch, but unfortunately, this turned out not to be the case
+        (the new iconv m4 macros still don't allow for switching iconv support off).
+
+        However, as a few hours of merging and testing were spent, I'd suggest to
+        adopt it for 1.4. The actual changes to intl/* are part cosmetic, part code
+        reorganisation. Ok, a bit more, I'm no gettext expert :)
+
+        Notes:
+        - after applying the patch, you need to chmod 755 config.rpath
+        - a couple of new files for m4/*, too
+        - I have broken with the tradition of renaming gettext's AM_* macros
+          to MUTT_AM_*! I don't think it's necessary anymore to customise these
+          macros, but you (I really mean "you, tlr" :) want to have a look at
+          the new gettext.m4.  The others should be ok as they are.
+        - previous gettext updates were also updating po/Makefile.in.in, which
+          I didn't; someone who has a clue about gettext should check whether
+          this might be necessary, and also whether any other files in po/ need
+          updating
+
+        I will provide the same patch for the 1.5 branch at some stage, ideally
+        after getting some  F E E D B A C K  for this one.
+
+       * intl/Attic/eval-plural.h:
+       file eval-plural.h was initially added on branch mutt-1-4-stable.
+
+       * intl/Attic/gmo.h:
+       file gmo.h was initially added on branch mutt-1-4-stable.
+
+       * intl/Attic/os2compat.c:
+       file os2compat.c was initially added on branch mutt-1-4-stable.
+
+       * intl/Attic/os2compat.h:
+       file os2compat.h was initially added on branch mutt-1-4-stable.
+
+       * intl/Attic/osdep.c:
+       file osdep.c was initially added on branch mutt-1-4-stable.
+
+       * intl/Attic/plural-exp.c:
+       file plural-exp.c was initially added on branch mutt-1-4-stable.
+
+       * intl/Attic/plural-exp.h:
+       file plural-exp.h was initially added on branch mutt-1-4-stable.
+
+       * intl/Attic/eval-plural.h, intl/Attic/gmo.h, intl/Attic/os2compat.c, intl/Attic/os2compat.h, intl/Attic/osdep.c, intl/Attic/plural-exp.c, intl/Attic/plural-exp.h, intl/bindtextdom.c, intl/ChangeLog, intl/config.charset, intl/dcigettext.c, intl/gettextP.h, intl/hash-string.h, intl/l10nflist.c, intl/libgnuintl.h, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/localealias.c, intl/Makefile.in, intl/plural.c, intl/plural.y, ABOUT-NLS, charset.c, charset.h, configure.in, gnupgparse.c, init.h, rfc2047.c, sendlib.c:
+       From: Lars Hecking <lhecking@nmrc.ie>
+
+        patch.1.3.28.lh.gettext-0.11.1
+        ==============================
+
+        This one updates the gettext stuff in mutt to gettext-0.11.1. I started
+        doing this in the hope that the new gettext version would simplify the
+        noiconv patch, but unfortunately, this turned out not to be the case
+        (the new iconv m4 macros still don't allow for switching iconv support off).
+
+        However, as a few hours of merging and testing were spent, I'd suggest to
+        adopt it for 1.4. The actual changes to intl/* are part cosmetic, part code
+        reorganisation. Ok, a bit more, I'm no gettext expert :)
+
+        Notes:
+        - after applying the patch, you need to chmod 755 config.rpath
+        - a couple of new files for m4/*, too
+        - I have broken with the tradition of renaming gettext's AM_* macros
+          to MUTT_AM_*! I don't think it's necessary anymore to customise these
+          macros, but you (I really mean "you, tlr" :) want to have a look at
+          the new gettext.m4.  The others should be ok as they are.
+        - previous gettext updates were also updating po/Makefile.in.in, which
+          I didn't; someone who has a clue about gettext should check whether
+          this might be necessary, and also whether any other files in po/ need
+          updating
+
+        I will provide the same patch for the 1.5 branch at some stage, ideally
+        after getting some  F E E D B A C K  for this one.
+
+Wed Apr 17 17:05:54 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/fr.po: From: Vincent Lefevre <vincent@vinc17.org>
+
+       Update.
+
+       * m4/gssapi.m4: From: David Champion <dgc@uchicago.edu>
+
+       MIT krb5 1.2.4 has krb5-config, so it's no longer sufficient to say
+       that possession of krb5-config indicates Heimdal. Patch attached. This
+       assumes that Heimdal's "kreb5-config --vendor" begins with "Heimdal".
+       I cannot verify that this is correct, so patch might be wrong on this
+       point.
+
+Sun Apr  7 21:19:57 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/command.c, imap/imap.c, imap/message.c:
+       From: Brendan Cully <brendan@kublai.com>
+
+       The attached patch cleans up some bugs in switching IMAP mailboxes:
+       * free current flags on mailbox close
+       * reset reopen state
+       * don't parse the same untagged SELECT response for multiple options
+       * call mx_update_context after reading the whole mailbox, not after
+         each message
+       * reset new mail flag if mail arrives in the middle of opening the
+         mailbox. This should close 1139
+
+       939 is most likely unaffected. I discovered these problems while
+       investigating 939.
+
+Fri Apr  5 10:42:54 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/ja.po: From: "TAKAHASHI, Tamotsu" <arms405@jade.dti.ne.jp>
+
+       update.
+
+Thu Apr  4 20:49:46 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/ko.po: From: Im Eunjea <eunjea@koru.org>
+
+       Update.
+
+       * po/ja.po: From: "TAKAHASHI, Tamotsu" <arms405@jade.dti.ne.jp>
+
+       Update.
+
+       * pgp.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Fix a typo noted by Tamotsu Takahashi.
+
+Wed Apr  3 15:22:27 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * handler.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Fix printing of format=flowed text parts.
+
+       * commands.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Fix #1144 in stable.
+
+       * commands.c: From: Thomas Roessler <roessler@does-not-exist.org>
+
+       Fix a file descriptor leak in the display filter code.  Noted by
+       Chr. v. Stuckrad.
+
+       fixes: #1144
+
+Tue Apr  2 18:49:37 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * m4/iconv.m4: From: Lars Hecking <lhecking@nmrc.ie>
+       The noiconv patch.
+
+       * charset.c, charset.h, configure.in, gnupgparse.c, init.h, rfc2047.c, sendlib.c:
+       The noiconv patch.
+
+       From: Lars Hecking <lhecking@nmrc.ie>
+
+Sat Mar 30 08:26:31 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/pl.po: update.  From Pawel Dzienkonski.
+
+       * po/fr.po: Update; From Vincent Lefevre.
+
+       * postpone.c, sendlib.c:
+       The attached patch allows the user to override the user-agent field
+       with my_hdr.  It also removes the stripping of the x-mailer field
+       when recalling a postponed message.
+
+Thu Mar 28 13:25:23 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * mx.c, mx.h, mailbox.h, main.c, mbox.c, mh.c:
+       patch-1.3.28-me.emptycheck.1
+
+Wed Mar 27 08:50:42 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * pgp.c: There was some output missing.
+
+       * po/POTFILES.in: update.
+
+       * pgp.c:
+       More fixes.  Note to self:  The code which controls character set
+       selection for attachments is far too complicated.
+
+       * pgp.c:
+       Don't include temporary file names in the Content-Disposition header.
+
+       * pgp.c:
+       Use text/plain; format=... when we are asked to detect inline PGP
+       material in in text/plain body parts.
+
+       * pgp.c, sendlib.c: Fix encoder mode for text/plain; action=pgp-*.
+
+       * pgp.c:
+       Fix "noconv" handling for the message body when we generate inline
+       PGP.
+
+       * charset.c, charset.h, handler.c, muttlib.c, pgp.c:
+       Some hackisch charset handling for text/plain; x-action=pgp-*.  I
+       don't like this stuff, but it's better than nothing.
+
+Tue Mar 26 22:25:48 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * pgp.c: Change x-action values to "pgp-encrypted", "pgp-signed".
+
+       * contrib/gpg.rc, commands.c, compose.c, crypt.c, handler.c, muttlib.c, pgp.c, protos.h, recvattach.c, sendlib.c:
+       More inline PGP changes.
+
+       * pgp.c:
+       Also permit for "action" and "x-action" on the receiving end, just
+       in case we can settle on a joint standard with other MUA developers.
+
+       * commands.c, crypt.c, handler.c, pgp.c, pgpinvoke.c, sendlib.c:
+       OK, I'm giving up: pgp_create_traditional now creates text/plain;
+       x-mutt-action={pgp-encrypt,pgp-sign}.
+
+       * pgpinvoke.c: Fix application/pgp signatures.
+
+       * charset.c, charset.h, gnupgparse.c, handler.c, mbyte.c, rfc2047.c, sendlib.c:
+       Fix iconv warnings; from Edmund Grimley Evans.
+
+       * smime.c:
+       Please use ascii_strcasecmp() if you want to compare ASCII parameter
+       strings.  mutt_strcasecmp() depends on the locale, and detects "i"
+       and "I" as _different_ in Turkish locales.
+
+Mon Mar 25 11:34:40 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * crypt.c:
+       Fix S/MIME signature type.  Noted by Dan Ohnesorg <Dan@ohnesorg.cz>.
+
+       * buffy.c: close 1103; from Brendan Cully
+
+       * doc/manual.sgml.tail: close 1122; from Brendan Cully
+
+       * hdrline.c, muttlib.c: Fix #87s; from Brendan Cully.
+
+       * hdrline.c, muttlib.c: Fix #872, from Brendan Cully.
+
+       * contrib/smime_keys_test.pl, contrib/Makefile.in:
+       Include a test script by Mike Schiraldi.  It's perl > the one I have
+       installed, so I'm just putting it into contrib for now.
+
+Wed Mar 20 09:53:42 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * editmsg.c, mailbox.h, mx.c: Rename M_NEW to M_NEWFOLDER.
+
+       * editmsg.c, mailbox.h, mx.c:
+       Rename the new M_NEW by M_NEWFOLDER.  There was another constant of
+       the same name.  Problem noted by Will Yardley's compiler.
+
+Tue Mar 19 09:54:05 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * browser.c: Fix #1115.
+
+       * editmsg.c, mailbox.h, mx.c:
+       Fix a temporary file race problem when using the edit-message
+       function.  Backported from unstable.
+
+       * po/pl.po: update
+
+Mon Mar 18 18:54:56 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * browser.c: Should fix #1115.  BACKPORT!
+
+Fri Mar 15 09:11:05 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/ja.po: update from oota toshiya.
+
+       * po/ja.po: update, from oota toshiya.
+
+Wed Mar 13 23:43:41 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * attach.c:
+       Undoing the previous patch.  It was junk, and may ruin files.
+
+       * attach.c, editmsg.c, mailbox.h, mx.c:
+       Don't fopen mail folders in append mode where we should safe_fopen()
+       them in write mode.  Debian bug #138200, noted by Colin Philipps
+       <cph@cph.demon.co.uk>.
+
+       NEEDS BACKPORTING.
+
+       * po/uk.po, po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/tr.po, po/pl.po, po/pt_BR.po, po/ru.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/da.po, po/de.po, po/el.po, po/Attic/ChangeLog, po/ca.po, po/cs.po:
+       automatic post-release commit for mutt-1.3.28
+
+       * po/Attic/ChangeLog:
+       file ChangeLog was initially added on branch mutt-1-4-stable.
+
+       * ChangeLog, reldate.h, VERSION:
+       automatic post-release commit for mutt-1.3.28
+
+       * doc/smime-notes.txt, smime.c: Assorted patches from Mike Schiraldi.
+
+Sat Mar  2 12:11:35 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * contrib/smime.rc, compose.c, init.h, mutt.h, sendlib.c, smime.c, smime.h:
+       Introduce smime_default_key.  From Oliver Ehli.
+
+       * contrib/smime.rc, smime.c, smime.h, smime_keys.pl, init.h, mutt.h:
+       smime.c:
+        - the getkeys() function was broken and deleted the last char
+          of the certfilename
+        - it now lets me use more than one key for the same mailbox
+          ie select these.
+        - some display output was garbled when the email didn't match.
+          i posted some fix to mutt-users, but i don't like that sleep()
+          so i dropped the first error message, which basically repeated
+          the from/sender field only. so now there's just the message: they
+          don't match.
+
+       smime_keys:
+        - i modified the add_chain to continue even if no roo-cert
+          is present (david collantes received som chain that got
+          exported from outlook. obiously they don't (always ?)
+          include the root cert) it will now abort if neither root
+          nor intermediate certs are present.
+        - add_cert created index entries with '-' as issuer cert, when
+          it should have been '?'. thus verify would fail. (obviously
+          nobody ever used that command (add_cert, that is) :)
+
+       the feature above obsoletes the hash_cert and fingerprint_cert commands,
+       adds import_cert command and ask_cert_label bool. i modified the output
+       of smime_keys (a little) so it doesn't look too garbled when supplying
+       the label (it is actually interactive :) furthermore, i do a verify
+       after the cert was added and modified the verify routine to make the
+       cerificate trusted in case of success. (we discussed this in another
+       message) that is ok so far, but perhaps this requires some better root
+       certificate handling, ie the trust should be somehow connected to the
+       root certificate, that maybe added (if the user trusts it and its not
+       present already) to the ca-file. i'll think about that some more ... but
+       then, there already is the add_root command. hmmm... (btw, you'll now
+       never get asked to trust a certificate)
+
+       i have not yet deleted the email handling from the import key stuff (in
+       smime.c/crypt.c), for i'm thinking about smime_keys using it as an
+       additional arg. otoh i don't think users would press ^k if verification
+       failed...hmmm... but still, smime_keys does extract the email from the
+       certificate either way and does verify it by itself, so the only thing
+       that would happen is to have some invalid certificates, that mutt'll
+       refuse to use anyways, left in the database....
+
+       (From Oliver Ehli.)
+
+Thu Feb 28 23:28:51 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * sort.c: Turn on incremental threading again.
+
+       * smime_keys.pl:
+       The script will try to pick out the end-user cert and pass that to
+       openssl. The code which tells the difference may not be perfect. It
+       works with all the certs in my collection, though. I won't be at all
+       surprised if someone comes across a cert chain which confuses it,
+       but it should print out an error in that case. Hopefully they will
+       send us the chain so we can adjust our code.
+
+       (From Mike Schiraldi.)
+
+       * init.h, mutt.h, thread.c:
+       Threading enhancements from Daniel Eisenbud.
+
+       * curs_main.c, init.c, init.h, mutt.h, thread.c:
+       $narrow_tree; fater redrawing when changing tree options.  From
+       Daniel Eisenbud.
+
+       * imap/message.c, mbox.c, mx.c, thread.c:
+       A possible work-around for #939.  From Daniel Eisenbud.
+
+       * init.h, mutt.h, thread.c:
+       Threading enhancements from Daniel Eisenbud.
+
+Tue Feb 26 10:58:56 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/ru.po: update
+
+       * init.h: Fix a typo.
+
+       * init.h: Fix a typo.  #1069.
+
+       * imap/browse.c, imap/message.c, configure.in, mutt_sasl.c:
+       Brendan Cully sent a patch.
+
+       * install-sh: Fix a typo.  From Edmund Grimley Evans.
+
+       * po/ru.po: ru.po update.
+
+       * pop_lib.c:
+       CAPA response tags are case-insensitive.  Noted by Michael Vore,
+       patch from Vsevolod Volkov.
+
+Mon Feb 18 14:55:31 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * alias.c, send.c: Fix for #1047.  From Michael Elkins.
+
+Thu Feb 14 11:22:51 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * charset.c, gnupgparse.c, init.h, rfc2047.c:
+       Iconv patch from Lars Hecking.  MAY NEED TO BE BACKPORTED.
+
+Wed Feb 13 12:04:52 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * smime.c: mutt_any_key() shouldn't be used in curses mode.
+
+       * hdrline.c, init.h, parse.c:
+       Change the default format to be more friendly to "0-line messages",
+       and fix optional expansion for %l - it was the wrong way around.
+       Also, add a hack to parse.c so we ignore negative values in Lines
+       headers.
+
+       * hdrline.c, muttlib.c, protos.h: Undo the %l fix.  It broke things.
+
+       * menu.c:
+       Fix mutt_pad_string; from Edmund Grimley Evans.  (MAY NEED TO BE
+       BACKPORTED.)
+
+       * main.c: Report libiconv version.
+
+Tue Feb 12 21:54:41 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * hdrline.c, muttlib.c, protos.h: Improve %l's behaviour.
+
+       * extlib.c, main.c, pattern.c, smime_keys.pl:
+       Mike Schiraldi's daily S/MIME patch.
+
+Mon Feb 11 17:31:53 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * smime.c:
+       This patch gets rid of an ugly static variable in smime.c. (From
+       Mike Schiraldi.)
+
+       * smime_keys.pl:
+       This patch lets smime_keys.pl automagically handle both formats of
+       x509 certificate -- PEM (text) and DER (binary). This lets Outlook
+       users (and probably others) directly import the certs without first
+       converting them manually.  (From Mike Schiraldi.)
+
+       * configure.in:
+       Honor current values of $LIBS and $CPPFLAGS.  From Thomas Dickey.
+
+       * configure.in: Honor $LIBS and $CPPFLAGS.  From Thomas Dickey.
+
+       * init.c: patch-1.3.27.me.initsort.1
+
+Thu Feb  7 21:48:42 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * smime_keys.pl: Another S/MIME patch from Mike Schiraldi.
+
+       * smime_keys.pl: Fix smime_keys.
+
+       * smime.c: S/MIME fixes from Mike Schiraldi.
+
+       * po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/POTFILES.in, Makefile.am:
+       Make S/MIME messages translatable.
+
+Wed Feb  6 19:14:47 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * lib.h: Avoid a warning on some machines.
+
+       * lib.h, smime.c: Make some scanf formats safe.
+
+Tue Feb  5 22:01:06 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * ascii.c: The previous fix was complete nonsense.  What a day. :-(
+
+       * ascii.c: The previous fix was complete nonsense.
+
+       * browser.c, lib.c, lib.h:
+       Use strcoll for the file browser.  From David Champion.
+
+       * hook.c: Fix crypt-hook.  From Dale Woolridge
+       <dale-list-mutt-dev@woolridge.org>.
+
+       * smime_keys.pl: Clean-up from Mike Schiraldi.
+
+       * imap/browse.c: Fix.
+
+       * imap/browse.c: Fix another IMAP browsing bug.
+
+       * po/ru.po, po/fr.po, po/ko.po: update
+
+       * smime.c:
+       Don't put garbage onto the screen when trying to decrypt messages.
+
+       * contrib/smime.rc, init.h, smime.c, smime.h, smime_keys.pl:
+       S/MIME fixes from Oliver Ehli:
+
+       - smime_keys.pl:
+
+         support for multiple email adrresses in cert: will add one entry
+         to {keys, cetrificates}/.index now (for each mailbox)
+
+         support for certificates without intermediate certs (e.g. for
+         people who are their own CA: use root as intermediate, for it
+         probably wouldn't be known to anyone...)
+
+         bugfix in handle_pem: the checks if some type of cert is present;
+         die() could never be reached, as the variables checked wouldn't
+         have been set in that case, so it would break because of undefined
+         value or some such thing.... (so it has to check $iter instead)
+
+       - smime.c (init.h, ....)
+
+         support for importing certificates issued for multiple addresses.
+
+         introduced smime_fingerprint_cert_command, so finally certs can
+         get compared ... (so the above works..)
+
+         cleaned up some error messages, that would mess up the terminal.
+
+         fixed typos (init.h)
+
+       * ascii.c: Fix.
+
+       * ascii.c: Fix ascii_*cmp functions.  Problem noted by Brad Thompson.
+
+Mon Feb  4 09:59:02 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * smime.c, crypt.c: Some S/MIME fixes from Oliver Ehli <elmy@acm.org>.
+
+Sun Feb  3 09:58:45 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.head, doc/muttrc.man.head, init.h:
+       Add unauto_view.  From Jeremy Blosser.
+
+       * Makefile.am, pgplib.h, pgppubring.c:
+       Add a "-f" flag which helps to dump fingerprints.  Contributed by
+       Jason Harris <jharris@widomaker.com>, and not strictly needed for
+       mutt.
+
+       * pgppubring.c:
+       Correctly calculate fingerprints for type 20 ElGamal keys.  Noted by
+       Jason Harris <jharris@widomaker.com>.
+
+       * pgppubring.c:
+       Fix calculation of fingerprints (and key IDs) for type 20 ElGamal
+       keys.  Noted by Jason Harris <jharris@widowmaker.com>.
+
+Sat Feb  2 16:52:27 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/ca.po: update
+
+       * po/ca.po: update.
+
+       * mh.c: Don't forget deletions when a folder is changed.  Ups.
+
+Fri Feb  1 17:23:20 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * smime_keys.pl:
+       Fix some possible leaks of the private key (encrypted, but
+       still...).  (yow_security_holes.patch from Mike Schiraldi.)
+
+Thu Jan 31 22:05:58 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/smime-notes.txt:
+       Document %C, and other updates.  From Mike Schiraldi.
+
+       * smime.c: Remove some unnecessary quotation marks.
+
+       * contrib/smime.rc, init.h, smime.c, smime.h, smime_keys.pl:
+       Use mutt -Q from smime_keys.
+
+       * po/zh_TW.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/ca.po, po/cs.po:
+       update-po
+
+       * main.c: fix a string.
+
+       * doc/mutt.man: Document -Q.
+
+       * init.c, main.c, protos.h:
+       Add a -Q option to query configuration variables.  This is needed to
+       avoid a separate mutt configuration parser in smime_keys.pl.
+
+Wed Jan 30 22:51:12 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * send.c: patch-1.3.27.me.postpone_date.2
+
+       * smime.c: Mike Schiraldi's daily S/MIME patch, as he puts it.
+
+Tue Jan 29 21:08:10 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * smime.c: Improved certificate handling.  Suggested by Oliver Ehli,
+       implemented by Mike Schiraldi.
+
+       * smime.c:
+       Properly handle certain signatures generated by Outlook.  From Mike
+       Schiraldi.
+
+       * parse.c:
+       Fix a segmentation fault in debugging code.  From Daniel Eisenbud.
+
+Mon Jan 28 23:29:05 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * crypt.c, init.h, mutt.h:
+       Add a new crypt_timestamp option.  The timestamps aren't really
+       needed any more.
+
+       * commands.c, menu.c, mutt_curses.h, mutt.h, pattern.c:
+       Add ~V to match successfully verified messages.
+
+       * contrib/smime.rc: Add a comment. From Mike Schiraldi.
+
+       * init.h: Fix list-from documentation.  From Michael Elkins.
+
+       * doc/smime-notes.txt:
+       Add more information on S/MIME.  Adapted from Oliver Ehli's notes by
+       Mike Schiraldi.
+
+       * send.c: Avoid C99 comments.  Noted by Vincent Lefevre.
+
+       * po/ja.po, po/sv.po: updates
+
+       * menu.c: Wide character fix from TAKIZAWA Takashi.
+
+       * hook.c, Makefile.am: S/MIME-related bug fixes from Brendan Cully.
+
+Fri Jan 25 00:08:30 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * smime.c: ups
+
+       * commands.c, recvattach.c, smime.c, smime.h:
+       More decryption key detection fixes.
+
+       * commands.c, smime.c:
+       Make some prompts look nicer, and add sensible selection of the
+       decryption key.
+
+Thu Jan 24 23:53:19 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * commands.c, crypt.c, smime.c, smime.h: More S/MIME nit-picking.
+
+       * mh.c: Fix.
+
+       * mh.c: Still more code clean-up.
+
+       * doc/smime-notes.txt: Update.
+
+       * mx.c: little fix.
+
+       * mh.c: Ups, don't use the wrong check function...
+
+       * mh.c: Clean up the mh code, too.
+
+       * mh.c: indentation
+
+       * mh.c, mx.c, mx.h:
+       Maildir efficiency improvements, from Michael Elkins and Thomas
+       Roessler.
+
+       * crypt.c, curs_lib.c, smime.c: S/MIME nits.
+
+       * Attic/reap.pl: We don't need this any more.
+
+       * imap/message.c, doc/Makefile.in, doc/smime-notes.txt, contrib/ca-bundle.crt, contrib/Makefile.in, contrib/smime.rc, attach.c, commands.c, compose.c, configure.in, copy.c, copy.h, crypt.c, crypt.h, curs_main.c, functions.h, globals.h, handler.c, hdrline.c, headers.c, hook.c, init.c, init.h, keymap.c, keymap.h, main.c, Makefile.am, mutt.h, muttlib.c, mx.c, OPS.CRYPT, OPS.PGP, OPS.SMIME, pager.c, parse.c, pattern.c, pgp.c, pgp.h, pgplib.h, pop.c, postpone.c, protos.h, recvattach.c, send.c, sendlib.c, smime.c, smime.h, smime_keys.pl:
+       S/MIME support.  From Oliver Ehli <elmy@acm.org> and Mike Schiraldi
+       <raldi@research.netsol.com>.
+
+       * po/pt_BR.po: update
+
+       * doc/manual.sgml.head, doc/muttrc.man.head, attach.c, globals.h, init.h, protos.h, rfc1524.c, sendlib.c:
+       Introduce mime_lookup.  From Brian Foley and Ulf Erikson.
+
+       * po/ru.po: update
+
+       * mh.c: Make reading maildirs more efficient.
+
+       * VERSION: Pseudo-revision for mutt-1.5.
+
+       * m4/glibc21.m4, m4/gssapi.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4, m4/funcdecl.m4, m4/gettext.m4, m4/codeset.m4, m4/curslib.m4, m4/README, m4/.cvsignore, m4/Makefile.am.in:
+       version bump
+
+       * po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/pl.po, po/pt_BR.po, po/ru.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/fr.po, po/gl.po, po/hu.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/ca.po, po/cs.po, po/.cvsignore, po/da.po, po/de.po, po/Makefile.in.in, po/POTFILES.in, imap/auth_anon.c, imap/auth.c, imap/auth_cram.c, imap/auth_gss.c, imap/auth.h, imap/auth_login.c, imap/auth_sasl.c, imap/browse.c, imap/BUGS, imap/command.c, imap/.cvsignore, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/Makefile.am, imap/message.c, imap/message.h, imap/README, imap/TODO, imap/utf7.c, imap/util.c:
+       more version bumps.
+
+       * intl/bindtextdom.c, intl/cat-compat.c, intl/ChangeLog, intl/config.charset, intl/COPYING.LIB-2.1, intl/COPYING.LIB-2, intl/.cvsignore, intl/dcgettext.c, intl/dcigettext.c, intl/dcngettext.c, intl/dgettext.c, intl/dngettext.c, intl/explodename.c, intl/finddomain.c, intl/gettext.c, intl/gettext.h, intl/gettextP.h, intl/hash-string.h, intl/intl-compat.c, intl/l10nflist.c, intl/libgettext.h, intl/libgnuintl.h, intl/libintl.glibc, intl/linux-msg.sed, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/locale.alias, intl/localealias.c, intl/Makefile.in, intl/ngettext.c, intl/plural.c, intl/plural.y, intl/po2tbl.sed.in, intl/ref-add.sin, intl/ref-del.sin, intl/textdomain.c, intl/VERSION, intl/xopen-msg.sed:
+       more version number updates.
+
+       * doc/applying-patches.txt, doc/.cvsignore, doc/devel-notes.txt, doc/dotlock.man, doc/instdoc.sh.in, doc/Makefile.in, doc/manual.sgml.head, doc/manual.sgml.tail, doc/mbox.man, doc/muttbug.man, doc/mutt.man, doc/muttrc.man.head, doc/muttrc.man.tail, doc/patch-notes.txt, doc/PGP-Notes.txt:
+       more version number updates
+
+       * contrib/iconv/iconv.aix-3.2.5.rc, contrib/iconv/iconv.aix-4.1.5.rc, contrib/iconv/iconv.aix-4.2.0.rc, contrib/iconv/iconv.aix-4.3.2.rc, contrib/iconv/iconv.freebsd-3.3.rc, contrib/iconv/iconv.glibc-2.1.3.rc, contrib/iconv/iconv.glibc-2.1.90.rc, contrib/iconv/iconv.hpux-10.01.rc, contrib/iconv/iconv.hpux-10.20.rc, contrib/iconv/iconv.hpux-11.00.rc, contrib/iconv/iconv.irix-6.5.rc, contrib/iconv/iconv.osf1-4.0a.rc, contrib/iconv/iconv.osf1-4.0d.rc, contrib/iconv/iconv.solaris-2.4.rc, contrib/iconv/iconv.solaris-2.5.1.rc, contrib/iconv/iconv.solaris-2.6-cjk.rc, contrib/iconv/iconv.solaris-2.6.rc, contrib/iconv/iconv.solaris-2.7.rc, contrib/iconv/make.sh, contrib/iconv/README, contrib/.cvsignore, contrib/gpg.rc, contrib/language50.txt, contrib/language.txt, contrib/Makefile.in, contrib/Mush.rc, contrib/patch.slang-1.2.2.keypad.1, contrib/pgp2.rc, contrib/pgp5.rc, contrib/pgp6.rc, contrib/Pine.rc, contrib/sample.mailcap, contrib/sample.muttrc, contrib/sample.muttrc-tlr, contrib/Tin.rc:
+       Bumping more version numbers.
+
+       * snprintf.c, sort.c, sort.h, stamp-h.in, status.c, strcasecmp.c, strdup.c, system.c, thread.c, url.c, url.h, utf8.c, wcwidth.c, Attic/reap.pl, pgpkey.c, pgplib.c, pgplib.h, pgpmicalg.c, pgppacket.c, pgppacket.h, pgppubring.c, pop_auth.c, pop.c, pop.h, pop_lib.c, postpone.c, prepare, protos.h, query.c, recvattach.c, recvcmd.c, regex.c, reldate.h, remailer.c, remailer.h, resize.c, rfc1524.c, rfc1524.h, rfc2047.c, rfc2047.h, rfc2231.c, rfc2231.h, rfc822.c, rfc822.h, score.c, send.c, sendlib.c, sha1.c, sha1.h, signal.c, md5c.c, md5.h, menu.c, mh.c, mime.h, mime.types, missing, mkinstalldirs, mkjtags.c, muttbug, muttbug.sh.in, mutt_curses.h, mutt.h, muttlib.c, mutt_menu.h, mutt_regex.h, mutt_sasl.c, mutt_sasl.h, mutt_socket.c, mutt_socket.h, mutt_ssl.c, mutt_ssl.h, mutt_ssl_nss.c, mutt_tunnel.c, mutt_tunnel.h, mx.c, mx.h, pager.c, pager.h, parse.c, patchlist.sh, pattern.c, pgp.c, pgpewrap.c, pgp.h, pgpinvoke.c, editmsg.c, enter.c, extlib.c, filter.c, flags.c, from.c, functions.h, gen_defs, getdomain.c, gettext.c, globals.h, gnupgparse.c, handler.c, hash.c, hash.h, hdrline.c, headers.c, help.c, history.c, history.h, hook.c, init.c, init.h, install-sh, keymap.c, keymap.h, lib.c, lib.h, mailbox.h, main.c, makedoc.c, mapping.h, mbox.c, mbyte.c, mbyte.h, attach.c, attach.h, base64.c, browser.c, browser.h, buffy.c, buffy.h, build-release, charset.c, charset.h, check_sec.sh, color.c, commands.c, complete.c, compose.c, config.guess, config.sub, configure.in, copy.c, copy.h, curs_lib.c, curs_main.c, date.c, depcomp, dotlock.c, dotlock.h, edit.c, acconfig.h, account.c, account.h, addrbook.c, alias.c, ascii.c, ascii.h, GPL, INSTALL, Makefile.am, Muttrc.head.in, NEWS, OPS, OPS.MIX, OPS.PGP, PATCHES, README, README.SECURITY, README.SSL, _regex.h, TODO, VERSION, ABOUT-NLS, BEWARE, ChangeLog, COPYRIGHT, .cvsignore:
+       Bumping version numbers to 3.0, for the new unstable branch.
+
+       * send.c: Set default Fcc when resending a message.
+
+       * po/ja.po: update
+
+Wed Jan 23 22:37:12 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/da.po, po/el.po, po/et.po, po/ko.po, po/pl.po: updates
+
+       * po/uk.po, po/id.po: update
+
+       * charset.c: Fix #999.  A single missing comma.
+
+Tue Jan 22 12:12:45 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, ChangeLog, reldate.h, VERSION:
+       automatic post-release commit for mutt-1.3.27
+
+Mon Jan 21 17:43:19 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/it.po: update
+
+       * po/sv.po, po/de.po, po/eo.po: updates
+
+Mon Jan 21 17:43:19 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/it.po: update
+
+       * po/sv.po, po/de.po, po/eo.po: updates
+
+       * mutt_ssl.c: A fix from Ulf Erikson, which he says to fix bug #989.
+
+Fri Jan 18 11:44:54 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/zh_CN.po, po/zh_TW.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, reldate.h, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.3.26
+
+Thu Jan 17 22:41:45 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * configure.in: Use ncurses.h for configure tests, if present.
+
+Thu Jan 17 22:41:45 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * configure.in: Use ncurses.h for configure tests, if present.
+
+Wed Jan 16 20:44:49 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * config.guess, config.sub, missing, mkinstalldirs:
+       Updated auto* files. From Lars Hecking.
+
+       * curs_main.c, protos.h, thread.c: patch-1.3.25-de-new_threads.1
+
+Tue Jan 15 22:08:12 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * acconfig.h, configure.in:
+       Configure and config.h cleanup.  From Lars Hecking.
+
+       * handler.c:
+       Don't hallucinate a '\n' in the end of quoted-printable encoded
+       attachments.
+
+       * po/fr.po: update.
+
+       * flags.c, mh.c, mutt.h, mx.c: patch-1.3.25.tlr.maildir_trash.1
+
+       * po/ko.po: update
+
+       * init.c: Avoid reading past the end of ta string when handling \ or ^
+       sequences.  From Michael Elkins.
+
+       * po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/ca.po, po/cs.po, po/da.po, pgpkey.c:
+       Shorten some messages.  Noted by Jeremy Blosser.  #978.
+
+       * pattern.c: Fix an off-by-one error.
+
+Mon Jan 14 09:03:31 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/imap.c: fix another case-sensitive comparison.
+
+Sun Jan 13 21:19:25 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * ascii.h: Fix the ascii_strncmp() macro.
+
+       * imap/auth_sasl.c, imap/browse.c, imap/command.c, imap/imap.c, imap/message.c, imap/util.c:
+       Parse IMAP responses locale- and case- insensitive.  From Brendan
+       Cully.
+
+       * muttlib.c, pager.c:
+       A different fix for the '\012' issue.  Bug tracked down by Johannes
+       Geiger <geiger@ePost.de>.
+
+Sat Jan 12 11:42:18 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * NEWS: More on ~=.
+
+       * doc/manual.sgml.head, doc/muttrc.man.head, mutt.h, pattern.c:
+       Add a ~= pattern.  From Frederic Duval.
+
+       * doc/manual.sgml.head: Fix a typo, #971.
+
+Wed Jan  9 15:39:28 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * pgp.c: Fix #960.
+
+Tue Jan  8 13:06:21 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * mx.c: Try to fix #943.
+
+       * INSTALL, NEWS: fix libiconv URL.  #959.
+
+Mon Jan  7 19:10:51 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/ko.po: update
+
+       * attach.c: Fix #951.
+
+Fri Jan  4 14:30:29 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * rfc822.c: Terminate the correct buffer.  Noted by Durval Menezes
+       <durval@tmp.com.br>.  (This bug shouldn't have any security
+       implications. ;-)
+
+       * po/et.po, po/fr.po, po/pl.po, po/sv.po: updates.
+
+Thu Jan  3 20:57:20 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * mutt_ssl.c, mutt_ssl.h, mutt_ssl_nss.c, globals.h:
+       Move some globals where they belong.  From Brendan Cully.
+
+Wed Jan  2 16:28:46 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * acconfig.h: Cleanup; from Lars Hecking.
+
+       * mutt_ssl.c: Replace a few strncpy() calls by strfcpy().
+
+       * recvcmd.c: Bug fix.  Problem noted by Vincent Lefevre's compiler.
+
+       * muttlib.c: Fix the \012 bug.
+
+Tue Jan  1 20:18:41 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/zh_TW.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/ca.po, po/cs.po, po/Makefile.in.in, reldate.h, ChangeLog, VERSION:
+       automatic post-release commit for mutt-1.3.25
+
+       * intl/COPYING.LIB-2.1, intl/COPYING.LIB-2:
+       ups, these were missing from the CVS.
+
+       * po/ca.po: update.
+
+       * po/Attic/zh_TW.Big5.po, po/uk.po, po/sk.po, po/sv.po, po/ru.po, po/pl.po, po/pt_BR.po, po/ko.po, po/nl.po, po/it.po, po/gl.po, po/id.po, po/es.po, po/fr.po, po/el.po, po/eo.po, po/de.po, po/cs.po, po/da.po, ChangeLog, rfc822.c, VERSION:
+       post-release commit for mutt-1.2.5.1.
+
+       * rfc822.c: Fix a security problem.
+
+Tue Jan  1 20:07:35 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * intl/COPYING.LIB-2.1, intl/COPYING.LIB-2:
+       ups, these were missing from the CVS.
+
+       * po/ca.po: update.
+
+       * po/Attic/zh_TW.Big5.po, po/uk.po, po/sk.po, po/sv.po, po/ru.po, po/pl.po, po/pt_BR.po, po/ko.po, po/nl.po, po/it.po, po/gl.po, po/id.po, po/es.po, po/fr.po, po/el.po, po/eo.po, po/de.po, po/cs.po, po/da.po, ChangeLog, rfc822.c, VERSION:
+       post-release commit for mutt-1.2.5.1.
+
+       * rfc822.c: Fix a security problem.
+
+Tue Jan  1 20:05:05 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/ca.po: update.
+
+       * po/Attic/zh_TW.Big5.po, po/uk.po, po/sk.po, po/sv.po, po/ru.po, po/pl.po, po/pt_BR.po, po/ko.po, po/nl.po, po/it.po, po/gl.po, po/id.po, po/es.po, po/fr.po, po/el.po, po/eo.po, po/de.po, po/cs.po, po/da.po, ChangeLog, rfc822.c, VERSION:
+       post-release commit for mutt-1.2.5.1.
+
+       * rfc822.c: Fix a security problem.
+
+Tue Jan  1 20:02:10 2002  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/Attic/zh_TW.Big5.po, po/uk.po, po/sk.po, po/sv.po, po/ru.po, po/pl.po, po/pt_BR.po, po/ko.po, po/nl.po, po/it.po, po/gl.po, po/id.po, po/es.po, po/fr.po, po/el.po, po/eo.po, po/de.po, po/cs.po, po/da.po, ChangeLog, rfc822.c, VERSION:
+       post-release commit for mutt-1.2.5.1.
+
+       * rfc822.c: Fix a security problem.
+
+Fri Dec 28 17:19:00 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * protos.h, recvcmd.c, send.c:
+       Make sure References and In-Reply-To headers are generated properly
+       when the user replies to one or more message-type attachments.
+
+Wed Dec 26 19:24:46 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/imap.c: Possible fix for #905.   From Daniel Eisenbud.
+
+Fri Dec 21 00:22:12 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * pager.c: Fix #929.
+
+Tue Dec 18 15:13:18 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/imap.c, imap/imap.h, browser.c:
+       Fix from #918.  From <ntyni+mutt@mappi.helsinki.fi>.
+
+       * po/Makefile.in.in, m4/gettext.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4, ABOUT-NLS, intl/bindtextdom.c, intl/ChangeLog, intl/config.charset, intl/dcgettext.c, intl/dcigettext.c, intl/dcngettext.c, intl/dgettext.c, intl/dngettext.c, intl/explodename.c, intl/finddomain.c, intl/gettext.c, intl/gettext.h, intl/gettextP.h, intl/hash-string.h, intl/intl-compat.c, intl/l10nflist.c, intl/libgettext.h, intl/libgnuintl.h, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/locale.alias, intl/localealias.c, intl/Makefile.in, intl/ngettext.c, intl/plural.c, intl/plural.y, intl/textdomain.c, intl/VERSION:
+       Updating to gettext-0.10.40.
+
+Mon Dec 17 10:08:18 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * edit.c: Fix a memory allocation bug.  #917.
+
+       * thread.c, hdrline.c: Another threading update.
+
+Thu Dec 13 12:10:59 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * menu.c, mutt.h, sort.c, thread.c:
+       Threading updates, from Daniel Eisenbud.
+
+       * pager.c: compile fix.
+
+Tue Dec 11 23:30:59 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/muttrc.man.head: Typo, #911.
+
+       * po/it.po: update
+
+       * contrib/gpg.rc: Remove an unnecessary \-quoting.
+
+       * init.c, pager.c: Add a missing else.
+
+       * contrib/gpg.rc: Use gettext to determine the good signature pattern.
+
+       * init.c: Make "`...`" work as expected.
+
+       * po/it.po: update.
+
+Mon Dec 10 13:12:41 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * query.c: Fix #910.
+
+       * init.h: Change the default for $pgp_replyencrypt to "yes".
+
+       * po/ja.po, po/pl.po: updates.
+
+Sun Dec  9 09:12:08 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/ca.po, configure.in:
+       Add a Catalan translation.  From Ivan Vilata i Balaguer
+       <ivan@selidor.net>.
+
+Tue Dec  4 10:28:22 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/ru.po: update
+
+Mon Dec  3 18:36:09 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/da.po, po/de.po: update.
+
+       * mx.c:
+       Try to detect write() errors by calling fsync() after fflush().  May
+       fix #895.
+
+Thu Nov 29 09:43:41 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/zh_TW.po, po/zh_CN.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, ChangeLog, po/cs.po, po/da.po, po/de.po, po/el.po, reldate.h, VERSION:
+       automatic post-release commit for mutt-1.3.24
+
+Wed Nov 28 10:30:36 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/id.po: update
+
+Wed Nov 28 10:30:36 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/id.po: update
+
+Mon Nov 26 19:16:52 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * PATCHES: PATCHES should be _empty_ in the CVS version.  Ups.
+
+       * mbyte.c, PATCHES:
+       patch-1.3.23.2.tt.wcwidth_ja.1.  Fix wcwidth_ja(), from Takizawa
+       Takashi <taki@luna.email.ne.jp>.
+
+       * handler.c, muttlib.c:
+       patch-1.3.23.2.bj.state_attach_puts.1, from Byrial Jensen.  This
+       patch is supposed to make one message more friendly to translators.
+
+       * po/et.po, po/ja.po, po/pl.po, po/ru.po, po/da.po, po/de.po: updates.
+
+Wed Nov 21 13:58:42 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * handler.c: Use $wrapmargin in the format=flowed handler, too.
+
+       * pager.c, globals.h, init.h:
+       Add a $wrapmargin configuration variable to fine-tune
+
+Mon Nov 19 10:41:32 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * hash.c: Fix #868, #876.  Work-around from Len Lattanzi
+       <len@mss.migration.com>.
+
+       * hdrline.c, protos.h, thread.c:
+       Fix mutt_messages_in_thread().  From Daniel Eisenbud.
+       (patch-1.3.23.2-de-new_threads.2-3.gz).
+
+Thu Nov 15 18:53:23 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * remailer.c:
+       Should be slightly better than a mixmaster patch suggested by Stefan
+       Karrmann <sk@mathematik.uni-ulm.de>.  (UNTESTED!)
+
+Mon Nov 12 09:53:54 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * sort.c, thread.c: patch-1.3.23.2-de-new_threads.2
+
+Sat Nov 10 08:14:52 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/eo.po, po/fr.po: update
+
+Fri Nov  9 09:28:55 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * mh.c: Add some NONULL's (#863)
+
+       * Makefile.am: Distribute patchlist.sh.  Ups.
+
+Thu Nov  8 22:42:45 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/uk.po, po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/tr.po, po/pt_BR.po, po/ru.po, po/nl.po, po/pl.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/gl.po, po/hu.po, po/et.po, po/fr.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, reldate.h, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.3.23.2
+
+       * pager.c, init.h, mutt.h:
+       Add an $allow_ansi option.  Suggested and (mostly) implemented by
+       Mike Schiraldi.
+
+Thu Nov  8 17:35:14 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * pager.c, init.h, mutt.h:
+       Add an $allow_ansi option.  Suggested and (mostly) implemented by
+       Mike Schiraldi.
+
+       * Makefile.am: Don't depend on GNU make.  Noted by Bob Bell.
+
+       * pgp.c:
+       Fix some messages, so the color marker is actually in the beginning
+       of a new line.
+
+       * globals.h, handler.c, init.c, mutt.h, muttlib.c, pager.c, pgp.c:
+       somewhat cleaner in-band-signalling between the handlers and the
+       pager.  In particular, it's more difficult now to get fake PGP and
+       other mutt-generated "[-- " messages colored.
+
+       * commands.c, curs_main.c, init.c, init.h, mutt.h, sort.c, thread.c:
+       patch-1.3.23.1-de-new_threads.3-4
+
+       * handler.c: 2.47 introduced another bug.  I should go to bed now.
+
+       * handler.c:
+       Replace a ridiculous for loop by a proper calculation.  Ahem.
+
+       * handler.c, pager.c:
+       Use a slightly different reset sequence for the format=flowed hack,
+       and don't send any such sequence when we aren't in the internal pager.
+
+       * pager.c: Trying to fix #738.
+
+Wed Nov  7 22:25:09 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * handler.c:
+       Fix #860.  Noted: The format=flowed code is not yet utf-8 aware.
+
+       * addrbook.c: Fix #858.
+
+       * doc/patch-notes.txt, main.c, Makefile.am, muttlib.c, patchlist.sh, protos.h, sendlib.c:
+       Implement the patchlist scheme instead of version number munging.
+
+       * complete.c: Fix 706, 853.
+
+       * commands.c, init.h, mutt.h, thread.c:
+       patch-1.3.23.1-de-new_threads.2-3
+
+Tue Nov  6 20:38:17 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * mutt.h, sort.c, sort.h, thread.c, menu.c:
+       [patch.1.3.23.1.de.new_threads.2]  Daniel Eisenbud's redone
+       threading code, version two.
+
+       * doc/patch-notes.txt: fix a typo.
+
+       * PATCHES: uuups, there was a "test" left over.
+
+       * doc/PGP-Notes.txt:
+       Some part of this documentation was severely outdated.
+
+       * doc/Makefile.in, doc/patch-notes.txt, configure.in, main.c, Makefile.am, muttlib.c, PATCHES, protos.h, sendlib.c:
+       Add and document a new mechanism for displaying patches in running
+       mutts' output.
+
+       * send.c:
+       Indentation fixing while staring at the code affected by #857.  No
+       fix for the crash, though.
+
+       * doc/manual.sgml.head, doc/muttrc.man.head, alias.c, init.c:
+       Fix an addressbook bug, and introduce "unalias *".  From "g.c.w. de
+       bruijn" <geerd.debruijn@nl.thalesgroup.com>.
+
+Mon Nov  5 21:38:18 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/browse.c, imap/imap.c, imap/util.c, mutt_ssl.c, mutt_ssl_nss.c, pop.c, thread.c:
+       Missing gettext calls, noted by Byrial Jensen.
+
+       * commands.c:
+       Make the save-copy prompt more translator-friendly.  from Byrial
+       Jensen.
+
+       * po/da.po, po/de.po, po/eo.po, po/fr.po, po/ja.po, po/pl.po: updates
+
+       * mh.c:
+       Fix a segmentation fault which occurs when mutt's get-mail POP mode
+       is used with a maildir spool folder.  Noted by Frédéric L. W.
+       Meunier <0@pervalidus.net>.
+
+       * mutt_socket.c, pop.c:
+       Vsevolod Volkov's fix for #851, and a related bug.
+
+       * headers.c, muttlib.c, protos.h, send.c:
+       Byrial Jensen's mtime hack is needed at more than one place.  Noted
+       by Manoj Kasichainula.
+
+Wed Oct 31 09:38:07 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, ChangeLog, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, reldate.h, VERSION:
+       automatic post-release commit for mutt-1.3.23.1
+
+       * imap/message.c, commands.c, curs_main.c, flags.c, hdrline.c, init.h, mbox.c, menu.c, mh.c, mutt.h, mx.c, mx.h, parse.c, pop.c, postpone.c, protos.h, sort.c, sort.h, thread.c:
+       Advanced threading, v 5.1.  From Daniel Eisenbud
+       <eisenbud@cs.swarthmore.edu>.
+
+       * pgpewrap.c:
+       Add magic comment so we can use traditional malloc() in this program.
+
+Wed Oct 31 09:20:40 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/message.c, commands.c, curs_main.c, flags.c, hdrline.c, init.h, mbox.c, menu.c, mh.c, mutt.h, mx.c, mx.h, parse.c, pop.c, postpone.c, protos.h, sort.c, sort.h, thread.c:
+       Advanced threading, v 5.1.  From Daniel Eisenbud
+       <eisenbud@cs.swarthmore.edu>.
+
+       * pgpewrap.c:
+       Add magic comment so we can use traditional malloc() in this program.
+
+Tue Oct 30 22:43:23 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * init.h: .mh_sequences fix, from lorenzo@cisco.com.
+
+       * mutt_socket.c, mutt_ssl.c: TLS connection reuse.  From Brendan Cully.
+
+Mon Oct 29 23:21:48 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * pager.c:
+       Fix two places which _may_ look like buffer overflows, but aren't.
+
+       * url.c: Fix #843.
+
+       * doc/manual.sgml.head:
+       Make the documentation of toggle-unlink more precise - someone on
+       comp.mail.mutt got confused by this.
+
+Sun Oct 28 19:46:43 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/browse.c, imap/imap.c: Fix 839
+
+       * po/fr.po: update
+
+       * sendlib.c: Another aesthetic message-id change.
+
+       * sendlib.c: GMT's too clumsy.  Just take G.
+
+       * sendlib.c:
+       Use GMT for message-IDs.  Note: The addition of the constant string
+       "GMT" is so intended to avoid the production of duplicate
+       message-IDs when mutts running in time zones ahead GMT are updated.
+
+       * po/ru.po: update.
+
+       * url.c: Another bug related to #837.
+
+       * imap/util.c:
+       Fix a problem related to #837 (the bug isn't entirely close, though).
+
+Fri Oct 26 23:53:29 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.head:
+       Point to the openProjects.net IRC channel instead of dal.net.
+
+Thu Oct 25 07:54:35 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * pgp.c:
+       Handle clearsigned messages gracefully even when pgp_verify_sig is
+       set and pgp_decode_command is unset.
+
+Wed Oct 24 11:08:22 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * complete.c: Suspected fix for #837.
+
+Mon Oct 22 09:28:26 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/util.c, globals.h, init.h:
+       Make IMAP keepalive configurable.  From Brendan Cully.
+
+Wed Oct 17 17:03:19 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * curs_main.c: Fix #829.
+
+       * sendlib.c:
+       Fix #828: Sendmail is now invoked with stdout and stderr redirected
+       to /dev/null.  Apparently, sendmail 8.12.1 doesn't like to be
+       invoked with stderr and stdout closed.
+
+       * curs_main.c:
+       Fix CURHDR confusion.  Mutt should compile now.  (Sorry for not
+       committing this earlier.)
+
+Tue Oct 16 14:29:27 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * addrbook.c, keymap.c:
+       Address book nit fix from geerd.debruijn@nl.thalesgroup.com.
+
+       * po/ja.po, po/it.po: update
+
+Mon Oct 15 20:18:32 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * rfc2047.c: Close #821.  Fix provided by Edmund.
+
+       * curs_main.c: AIX portability patch.  Suggested by Jan Chrillesen
+       <jan@chrillesen.dk>.
+
+       * doc/manual.sgml.tail: Fixing a nit, From David Ellement.
+
+Fri Oct 12 09:03:26 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/fr.po: update
+
+Thu Oct 11 20:08:44 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/message.c:
+       Small fix from Edmund GRIMLEY EVANS <edmundo@rano.org>.
+
+       * compose.c: Little fix from sroberts@certicom.com.
+
+       * po/eo.po: update
+
+       * pgpewrap.c: Add public domain notice.
+
+       * Attic/pgpewrap, configure.in, Makefile.am, pgpewrap.c:
+       Include C version of pgpewrap, by Wessel Dankers <wsl@fruit.eu.org>.
+
+       * po/da.po: update
+
+       * compose.c, editmsg.c, sendlib.c:
+       Unify "Can't stat" messages.  Suggested by Byrial.
+
+Wed Oct 10 23:37:06 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * mh.c: Fix #560.
+
+       * pager.c:
+       Fix minor snafu in Vsevolod's patch about important flags for POP
+       folders.
+
+       * main.c:
+       Mess around with signal handlers.  Allegedly, this helps to get
+       things working with Solaris 8.  See #455.
+
+       * imap/message.c: Try to fix #302.
+
+       * curs_main.c, pager.c:
+       Don't allow setting the "important" flag when message resides on a
+       POP server.
+
+       * curs_lib.c:
+       Rename pad_char to m_pad_char - AIX curses have a macro called
+       pad_char.  Noted by Jan Chrillesen <jan@chrillesen.dk>.
+
+       * pager.c: Patch from #272 (from acli@mingpaoxpress.com).
+
+       * browser.c: Fix #813.
+
+       * mx.c: Another consistency fix for maildir_trash.
+
+       * mh.c, mx.c:
+       Experimental patch to make maildir_trash handling more consistent.
+
+       * buffy.c:
+       maildir buffy: Don't consider "trashed" new messages new. Fixes #412.
+
+       * main.c: Include platform information with mutt -v output.
+
+       * muttbug.sh.in:
+       Include some information about the compiler and compiler flags used
+       with bug reports.
+
+       * po/pl.po: update
+
+       * po/fr.po, po/de.po: updates.
+
+Tue Oct  9 09:29:55 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * getdomain.c: A different fix for #767.
+
+       * po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/ru.po, po/sk.po, po/sv.po, po/pt_BR.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/cs.po, po/da.po, po/de.po, po/el.po, reldate.h, ChangeLog, VERSION:
+       automatic post-release commit for mutt-1.3.23
+
+Sun Oct  7 06:43:52 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.head: We do update .mh_sequences files now.
+
+Sun Oct  7 06:43:52 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.head: We do update .mh_sequences files now.
+
+Sat Oct  6 09:31:44 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.head:
+       Documentation for check-traditional-pgp and for edit-type when used
+       in read mode.
+
+Tue Oct  2 22:20:03 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * enter.c: Fix #801.
+
+Mon Oct  1 09:58:49 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * mh.c: Create mh_sequences files when they don't exist.  Suggested by
+       TAKIZAWA Takashi <taki@luna.email.ne.jp>.
+
+Fri Sep 28 08:38:44 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * charset.c: More character set aliases, from Ionel Mugurel Ciobica
+       <tgakic@sg10.chem.tue.nl>.
+
+       * pager.c: Color fix from Brandon Long.  Welcome back!
+
+Wed Sep 26 10:56:52 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * mh.c: OK, I couldn't resist. ;-)
+
+       Depending on the user's usage patterns and configuration, there may
+       be a strong bias in maildir files moving either within the new or to
+       the cur subfolder. This patch adds hit counters for each of these
+       directories. Mutt will then look first into the directory
+       encountered more frequently in the past.  This should help to reduce
+       the cost of chasing messages a bit, and isn't too costly itself.
+
+       (Another possibility for optimization may be to actually base the
+       prediction on the configuration and on the message flags as we know
+       them - in particular, the mark_old and move options could have some
+       effect here.  Thinking about message flags, one could even replace
+       the simple heuristic currently implemented by a matrix recording hit
+       counters depending on flags.  But then again, it's all just playing
+       around, since this function will be invoked only rarely. ;-)
+
+       * attach.c, commands.c, copy.c, copy.h, handler.c, mutt.h, recvattach.c:
+       Fix inconsistencies between printing and displaying of
+       message/rfc822 body parts.
+
+       * attach.c: Fix attachment printing.
+
+       * mh.c, mx.c, mx.h:
+       Search for messages which may have been moving under our feet in
+       maildir folders.  Suggested by Bjoern Jacke.
+
+       * contrib/gpg.rc:
+       Remove --comment '' - it breaks pgpewrap and isn't necessary with
+       more recent gpg versions.
+
+Fri Sep 21 09:35:18 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/pl.po: update
+
+Mon Sep 17 10:19:10 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * send.c: fix #737.
+
+Fri Sep 14 08:19:30 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/id.po: update
+
+Tue Sep 11 12:24:32 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * addrbook.c, alias.c, init.c, menu.c, mutt.h, query.c:
+       More addressbook fixes.
+
+       * addrbook.c, attach.h, browser.c, functions.h, init.c, init.h, keymap.c, keymap.h, menu.c, mutt.h, mutt_menu.h, recvattach.c:
+       The addressbook used to crash when someone issued the alias and
+       unalias commands while on that menu.  This patch has a basic fix for
+       this behaviour, and adds delete and undelete functions to this menu.
+       While I'm on it, I've also made sure that "apply-tag" untags
+       everything on all menus.
+
+       The original crash was noted by Oliver Kauss <kauss@gmx.de>.
+
+Sat Sep  8 14:23:05 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * init.c:
+       Thomas Guettler <thomas@thomas-guettler.de> reports a segfault when
+       you search for "~b \\${".
+
+       * po/zh_TW.po: update
+
+Thu Sep  6 12:10:10 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/pl.po: update
+
+       * curs_main.c:
+       Try to fix a boundary condition: Assume that you are in a limited
+       view which includes the folder's last message.  Display that
+       message.  Wait until a new message is added to the current folder
+       which does NOT match the limit pattern. Press tab.  Mutt would get
+       confused.  I think that this patch fixes the problem (but I'm not
+       entirely sure).
+
+Wed Sep  5 12:09:44 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * sendlib.c: BSD/OS portability fix from Edmund Grimley Evans.  #758.
+
+       * imap/imap.c, init.h:
+       patch-1.3.22.1.remove_warnings.awn.1, from Andrew W. Nosenko.
+
+Tue Sep  4 19:12:23 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/da.po: update
+
+       * imap/util.c, muttlib.c, mutt_socket.c, pop.c, url.c, url.h:
+       patch-bac.canonifypath-4.
+
+       The attached patch reverts the IMAP canonification patch I reverted
+       a version ago (sorry for being so wishy-washy). This time I put in
+       some code to preserve IMAP URL passwords in the initial pass, so
+       people who like to use those sorts of URLs still can. That was the
+       only reason I had reverted the patch before.
+
+       (From Brendan Cully.)
+
+       * po/ja.po, po/ru.po, po/uk.po: updates
+
+       * mutt_tunnel.c: patch-bac.tunnelreopen-1 from Brendan Cully.
+
+Mon Sep  3 13:59:37 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * curs_main.c, thread.c:
+       Don't lose track of the current message when collapsing and changing
+       sort modes wildly.  Noted by David T-G.
+
+       * globals.h, init.h, mh.c, NEWS: Make MH sequences variable.
+
+       * po/de.po: update
+
+       * sendlib.c: Don't try to attach non-regular files.  #754.
+
+Fri Aug 31 09:21:55 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * NEWS: Mention mailto URL support.
+
+       * imap/imap.c, imap/util.c, imap/command.c:
+       Fix some memory leaks.  From Pawel Salek, by way of Brendan Cully.
+
+Thu Aug 30 21:30:39 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/pt_BR.po, po/ru.po, po/sk.po, po/lt.po, po/nl.po, po/pl.po, po/it.po, po/ja.po, po/ko.po, po/gl.po, po/hu.po, po/id.po, po/et.po, po/fr.po, po/eo.po, po/es.po, po/el.po, po/da.po, po/de.po, ChangeLog, doc/Makefile.in, po/cs.po, VERSION:
+       automatic post-release commit for mutt-1.3.22.1
+
+       * po/uk.po, po/zh_CN.po, po/sk.po, po/sv.po, po/tr.po, po/pt_BR.po, po/ru.po, po/pl.po, po/lt.po, po/nl.po, po/it.po, po/ja.po, po/ko.po, po/hu.po, po/id.po, po/gl.po, po/et.po, po/fr.po, po/eo.po, po/es.po, po/el.po, po/de.po, po/da.po, ChangeLog, po/cs.po, reldate.h, VERSION:
+       automatic post-release commit for mutt-1.3.22
+
+       * contrib/sample.muttrc-tlr: update
+
+       * build-release: more preparations for stabilizing 1.3.
+
+       * Attic/README.UPGRADE, Makefile.am: README.UPGRADE is quite outdated.
+
+       * doc/muttrc.man.head, NEWS: documentation updates.
+
+Thu Aug 30 21:04:34 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/uk.po, po/zh_CN.po, po/sk.po, po/sv.po, po/tr.po, po/pt_BR.po, po/ru.po, po/pl.po, po/lt.po, po/nl.po, po/it.po, po/ja.po, po/ko.po, po/hu.po, po/id.po, po/gl.po, po/et.po, po/fr.po, po/eo.po, po/es.po, po/el.po, po/de.po, po/da.po, ChangeLog, po/cs.po, reldate.h, VERSION:
+       automatic post-release commit for mutt-1.3.22
+
+Thu Aug 30 21:00:51 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * contrib/sample.muttrc-tlr: update
+
+       * build-release: more preparations for stabilizing 1.3.
+
+       * Attic/README.UPGRADE, Makefile.am: README.UPGRADE is quite outdated.
+
+       * doc/muttrc.man.head, NEWS: documentation updates.
+
+       * doc/mutt.man: mention ~/.mutt/muttrc
+
+       * curs_main.c: Fix #750 / deb#108628.
+
+       * pop_auth.c: patch-20010829.vvv.pop_auth
+
+Tue Aug 28 20:39:04 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * handler.c:
+       Don't do character conversion when we call an external handler for a
+       text type.  Assume that the conversion is done there.
+
+       * po/da.po: update
+
+Fri Aug 24 08:07:42 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * sendlib.c:
+       Don't use the 7bit encoding for non-text MIME types.  This may
+       produce slightly longer messages, but it helps to avoid corruption
+       with binary attachments which look like text, but aren't.
+
+       * po/de.po: update
+
+       * sendlib.c:
+       More liberally apply MIME encodings to non-text body parts when
+       there's a ^From_ line.
+
+Thu Aug 23 19:10:04 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/eo.po, po/sv.po: update
+
+Wed Aug 22 14:41:32 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/et.po, po/fr.po: update
+
+       * pop_auth.c:
+       This should fix the warnings which A. Nosenko found.  (And may
+       introduce new ones about unused variables.)
+
+Tue Aug 21 21:54:33 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/zh_CN.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/pt_BR.po, po/ru.po, po/pl.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/hu.po, po/id.po, po/it.po, po/fr.po, po/gl.po, po/et.po, po/el.po, po/eo.po, po/es.po, po/da.po, po/de.po, po/cs.po, reldate.h, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.3.21
+
+Mon Aug 20 12:11:28 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * mx.c: Check for .mew-cache in MH folders.
+
+Mon Aug 20 12:11:28 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * mx.c: Check for .mew-cache in MH folders.
+
+Thu Aug 16 12:42:30 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * sendlib.c:
+       Mutt's detection of overly long lines would fail with text files
+       when the long line is the last one, and is not finished by a newline
+       character.  This can, for instance, happen when you send out
+       macintosh-generated HTML files.
+
+       (And, apparently, we hit some boundary somewhere in the PGP code
+       with that - I had some truncated attachments today.)
+
+Mon Aug 13 16:12:08 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * pop.c: fix content-length headers.
+
+       * mh.c:
+       Fix treatment of maildir folders.  We partially used mh routines for
+       these, introducing absurdities such as .mh_sequences files.
+
+Sun Aug 12 10:15:15 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * init.c, init.h:
+       Fix the "strange e-mail header" bug.  It was an uninitialized
+       buffer.  Thanks to Brendan Cully for figuring it out.
+
+Sat Aug 11 17:39:13 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * muttlib.c:
+       Undo an earlier change to _mutt_expand_path, which seems to have
+       caused problems.  From Brendan Cully.
+
+       * config.guess, config.sub: Update.  Thanks, Brendan!
+
+Thu Aug  9 11:28:09 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/uk.po, po/ja.po: update
+
+Wed Aug  8 19:27:50 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.tail: Adding someone I forgot.
+
+Tue Aug  7 12:45:51 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.tail:
+       Update credits.  I'm sure I forgot some people.  If you feel you're
+       one of them, please drop me a line!
+
+Mon Aug  6 17:49:06 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * curs_lib.c:
+       Here's a fix to allow (n)curses versions to work with some terminfo
+       entries where (for whatever reason), someone specified cvvis but not
+       cnorm. From a report/discussion with Mario Vanoni
+       <vanonim@dial.eunet.ch>. (From Thomas Dickey.)
+
+       * buffy.c: Another little MH buffy bug.  From Len Lattanzi
+       <Len.Lattanzi@Migration.com>.
+
+Fri Aug  3 16:55:41 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * mh.c: fix an mh_buffy segfault.
+
+       * configure.in:
+       Don't default to "no" when we can't find sendmail.  #713; Brendan
+       Cully.
+
+       * buffy.c, mh.c, mx.h: MH buffy.
+
+Thu Aug  2 22:59:16 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * contrib/gpg.rc: Don't emit a comment armor header at all.
+
+       * mh.c:
+       Update mh_sequences when messages are deleted.  Note: Currently, we
+       only clean up our own sequences, and leave others' sequences alone.
+       Should possibly be fixed.
+
+       * mh.c: Fix #720.
+
+       * imap/browse.c:
+       Namespace fix.  From Pawel Slawek (or Peter Bloomfield?); forwarded
+       by Brendan Cully.
+
+Wed Aug  1 22:40:29 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/eo.po: update
+
+       * po/fr.po, po/ru.po, po/de.po: updates.
+
+       * gnupgparse.c, pgpkey.c:
+       Signed fixes.  Noted by Vincent Lefevre's compiler.
+
+Tue Jul 31 12:28:19 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * mh.c: More MH fixes.
+
+       * mh.c: fix a small typo
+
+       * mailbox.h, mh.c, mx.c: Add mh_sequences support.  I hope this works.
+
+Sun Jul 29 09:48:04 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * contrib/gpg.rc:
+       Fix the comment header, and generally be less verbose.
+
+Thu Jul 26 17:42:48 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/util.c: patch-bac.imapnextword-1. From Brendan Cully.
+
+       * pgpkey.c: Don't confuse validity and trust when it comes to PGP keys.
+
+       * thread.c: O(n log (n)) sorting from Jan Kratochvil <short@ucw.cz>.
+
+Wed Jul 25 19:51:58 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/cs.po:
+       update-po after gettext update.
+
+Tue Jul 24 21:29:47 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/ru.po, po/pl.po, po/pt_BR.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/gl.po, po/hu.po, po/id.po, po/it.po, ChangeLog, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, reldate.h, VERSION:
+       automatic post-release commit for mutt-1.3.20
+
+       * imap/imap.c: Avoid mail loss with IMAP.  From Brendan Cully.
+
+Tue Jul 24 21:26:03 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/imap.c: Avoid mail loss with IMAP.  From Brendan Cully.
+
+       * imap/command.c: patch-bac.capability-20010724.1.  From Brendan Cully.
+
+       * mbox.c:
+       Add a status message, so "Writing messages" doesn't stay on screen
+       forever.
+
+       * imap/imap.c:
+       The attached patch fixes a couple bugs I introduced recently when
+       working around the buggy but firmly entrenched UW-IMAP 4.7 server.
+       These resulted in additional overhead when synchronising mailboxes
+       and occasional problems opening empty mailboxes.
+
+       From: Brendan Cully <brendan@kublai.com>
+
+Thu Jul 19 14:51:14 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * curs_main.c:
+       Redraw when an alias is created - the user may have assigned a
+       different realname.
+
+       * COPYRIGHT: update
+
+Wed Jul 11 07:19:45 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * INSTALL:
+       Replace mutt-dev@cs.hmc.edu by mutt-dev@mutt.org.  Noted by "Mark E.
+       Mallett" <mem@mv.mv.com>.
+
+Mon Jul  9 20:54:34 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * acconfig.h, configure.in, Makefile.am:
+       locale-related fix from Lars Hecking.
+
+Wed Jul  4 07:35:20 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/util.c: Fix a nit.  From "Andrew W. Nosenko" <awn@bcs.zp.ua>
+
+Tue Jul  3 19:32:12 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * m4/iconv.m4, configure.in:
+       Iconv-related cleanup.  From Brendan Cully.
+
+       * init.c, muttlib.c, protos.h:
+       Unified buffer handling, from Brendan Cully.
+
+       * pgppubring.c: Don't sign-extend chars.
+
+       * pgp.c: Fixing a PGP signature reporting bug; adding debugging output.
+
+       * mutt_socket.c: Don't fcntl -1.  From Brendan.
+
+       * imap/imap.c, imap/imap_private.h, imap/message.c, muttlib.c, protos.h:
+       Fix #677.  From Brendan Cully.
+
+Mon Jul  2 20:28:32 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * query.c: Fix a minor nit with the external query interface.
+
+       * doc/manual.sgml.head: documentation from Brendan Cully.
+
+Fri Jun 29 10:06:16 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/imap.c, hook.c, init.h, mutt.h, mutt_socket.c, protos.h:
+       patch-bac-vvvacounthook-20010628.1
+
+Thu Jun 28 20:34:05 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * query.c: Query patch from Olivier Chapuis <olivier.chapuis@free.fr>.
+
+Wed Jun 27 16:08:06 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/ru.po: update.
+
+       * init.h, mutt.h, mx.c: patch-1.3.19i.rs.keep_flagged
+
+Tue Jun 26 10:26:54 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * pgppubring.c: fixes.
+
+       * pgplib.h, pgppubring.c: Fix handling of revocation certificates.
+
+       * pgppubring.c: Also dump revocations.
+
+       * pgplib.c, pgplib.h, pgppubring.c:
+       Add a very simple signature-dumping mode to pgpring.  (Not needed
+       for mutt.)
+
+Tue Jun 19 08:39:17 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/ja.po: update
+
+       * imap/imap.c, imap/message.c:
+       IMAP error checking for bug #662.  From Brendan Cully.
+
+Mon Jun 18 17:29:55 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/Attic/zh_CN.GB2312.po, po/Attic/zh_TW.Big5.po, po/zh_CN.po, po/zh_TW.po, configure.in:
+       Renaming the Chinese translations.
+
+       * po/eo.po: update
+
+       * globals.h, init.h, mutt.h, pop_auth.c, pop.h:
+       The attached patch adds two variables: $pop_authenticators and
+       $pop_auth_try_all.
+
+       From Vsevolod Volkov.
+
+Thu Jun 14 13:29:06 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/pl.po: update
+
+Wed Jun 13 08:29:16 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * m4/gettext.m4, m4/glibc21.m4: Avoid more m4 macro collisions.
+
+       * imap/auth_sasl.c, mutt_sasl.c, mutt_sasl.h, pop_auth.c:
+       An updated version of the previous patch.  From Brendan.
+
+       * pop_auth.c:
+       This patch closes a ridiculous bug where the SASL library could be
+       used without being initialised. I don't understand why lots of people
+       weren't having problems, unless no one who uses SASL uses POP :)
+
+       closes 549
+
+       From Brendan Cully.
+
+       * po/cs.po: update
+
+Tue Jun 12 12:45:29 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * m4/gettext.m4, m4/progtest.m4, configure.in:
+       gettext-related fixes.  Most of this may just be temporary if we
+       decide to get rid of our own gettext.m4.
+
+       * m4/gettext.m4: Fix comments.
+
+       * po/tr.po: update
+
+Mon Jun 11 18:32:05 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/auth.c, imap/imap.c, doc/manual.sgml.head:
+       patch-bac.flags-20010611.1
+
+       * po/es.po, po/da.po: update.
+
+       * doc/manual.sgml.head: Updates from Byrial Jensen.
+
+       * keymap.c: command/function cosmetics from Byrial Jensen.
+
+       * po/de.po, po/et.po, po/sv.po: update.
+
+       * doc/muttbug.man, doc/mutt.man, init.c, init.h:
+       Use the EMAIL environment variable as the default for $from.
+
+       * po/eo.po, po/el.po: update.
+
+Thu Jun  7 23:15:53 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/fr.po, po/id.po: updates for 1.3.19.
+
+       * po/Attic/zh_TW.Big5.po: A fixed version from EGE.
+
+       * build-release: Don't try to upload to sigtrap.guug.de any more.
+
+       * po/Attic/zh_CN.GB2312.po, po/Attic/zh_TW.Big5.po, po/tr.po, po/uk.po, po/ru.po, po/sk.po, po/sv.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/hu.po, po/id.po, po/it.po, po/fr.po, po/gl.po, po/es.po, po/et.po, po/el.po, po/eo.po, po/cs.po, po/da.po, po/de.po, reldate.h, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.3.19
+
+       * check_sec.sh: Don't check in intl/
+
+       * m4/codeset.m4, m4/glibc21.m4, m4/iconv.m4:
+       More from the gettext munster patch from E.G.E.
+
+       * po/Attic/zh_TW.Big5.po, m4/gettext.m4, m4/lcmessage.m4, m4/progtest.m4:
+       Gettext update. (From E.G.E., of course.)
+
+       * intl/bindtextdom.c, intl/cat-compat.c, intl/config.charset, intl/dcgettext.c, intl/dcigettext.c, intl/dcngettext.c, intl/dgettext.c, intl/dngettext.c, intl/explodename.c, intl/finddomain.c, intl/gettext.c, intl/gettext.h, intl/gettextP.h, intl/hash-string.h, intl/intl-compat.c, intl/l10nflist.c, intl/libgettext.h, intl/libgnuintl.h, intl/libintl.glibc, intl/linux-msg.sed, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/locale.alias, intl/localealias.c, intl/Makefile.in, intl/ngettext.c, intl/plural.c, intl/plural.y, intl/po2tbl.sed.in, intl/ref-add.sin, intl/ref-del.sin, intl/textdomain.c, intl/VERSION, intl/xopen-msg.sed, intl/ChangeLog, intl/.cvsignore, acconfig.h, configure.in, gettext.c, lib.h, Makefile.am, mbyte.c:
+       Gettext update.
+
+       * po/ru.po: update.
+
+       * configure.in: ALL_LINGUAS.  I forgot to do this earlier today.
+
+       * NEWS: Documentation update from Brendan Cully.
+
+Thu Jun  7 20:09:54 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * check_sec.sh: Don't check in intl/
+
+       * m4/codeset.m4, m4/glibc21.m4, m4/iconv.m4:
+       More from the gettext munster patch from E.G.E.
+
+       * po/zh_TW.Big5.po, m4/gettext.m4, m4/lcmessage.m4,
+       m4/progtest.m4: Gettext update. (From E.G.E., of course.)
+
+       * intl/bindtextdom.c, intl/cat-compat.c,
+       intl/config.charset, intl/dcgettext.c, intl/dcigettext.c,
+       intl/dcngettext.c, intl/dgettext.c, intl/dngettext.c,
+       intl/explodename.c, intl/finddomain.c, intl/gettext.c,
+       intl/gettext.h, intl/gettextP.h, intl/hash-string.h,
+       intl/intl-compat.c, intl/l10nflist.c, intl/libgettext.h,
+       intl/libgnuintl.h, intl/libintl.glibc, intl/linux-msg.sed,
+       intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c,
+       intl/locale.alias, intl/localealias.c, intl/Makefile.in,
+       intl/ngettext.c, intl/plural.c, intl/plural.y,
+       intl/po2tbl.sed.in, intl/ref-add.sin, intl/ref-del.sin,
+       intl/textdomain.c, intl/VERSION, intl/xopen-msg.sed,
+       intl/ChangeLog, intl/.cvsignore, acconfig.h, configure.in,
+       gettext.c, lib.h, Makefile.am, mbyte.c: Gettext update.
+
+       * po/ru.po: update.
+
+       * configure.in: ALL_LINGUAS.  I forgot to do this earlier today.
+
+       * NEWS: Documentation update from Brendan Cully.
+
+       * po/sv.po, po/tr.po, po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po:
+       Updating the gl translation, another update-po run.
+
+       * po/zh_TW.Big5.po:
+       Changed to utf-8 in order to avoid problems with recent gettext
+       versions.  Thanks to EGE!
+
+       (BTW, the file name is lying now.  Is this a problem?)
+
+       * po/tr.po, po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/sv.po, po/pt_BR.po, po/pl.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/cs.po, po/da.po, po/de.po, po/el.po:
+       update-po; adding an Estonian translation.
+
+       * po/it.po: Fix a small bug.
+
+       * imap/message.c:
+       This patch ensures IMAP FLAGS aren't parsed twice when fetching the
+       full message body. It really only amounts to a cosmetic error, but
+       may cause spurious "Mailbox externally modified" messages.
+
+       From Brendan Cully.
+
+       * INSTALL, README.SSL, rfc2047.c:
+       Documentation updates and a little bug fix.  From Brendan Cully.
+
+       * init.c: Don't add empty strings to lists.  From Thomas Parmelan
+       <tom@proxad.net>.
+
+Tue Jun  5 15:43:41 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * handler.c: Leave slightly more margin with format=flowed.
+
+       * imap/command.c, mutt_socket.c, mutt_ssl.c, mutt_tunnel.c:
+       patch-bac.sockets-20010605.1
+
+       * imap/auth.c, init.h:
+       Change the delimiter for imap_authenticators to a colon.
+
+       * imap/auth_gss.c, imap/auth_login.c, imap/auth_sasl.c, imap/imap.c, imap/auth_anon.c, imap/auth.c, imap/auth_cram.c, imap/auth.h:
+       The attached patch should be the last feature I want to get in
+       before 1.4. It creates a new config variable $imap_authenticators,
+       which is a comma-separated list of authentication methods for mutt
+       to try to use to authenticate to an IMAP server. If it is
+       unspecified you get the old behaviour - any method is tried, the
+       first to succeed or fail ends the auth loop.
+
+       (From Brendan Cully.)
+
+       * globals.h, init.h:
+       The attached patch should be the last feature I want to get in
+       before 1.4. It creates a new config variable $imap_authenticators,
+       which is a comma-separated list of authentication methods for mutt
+       to try to use to authenticate to an IMAP server. If it is
+       unspecified you get the old behaviour - any method is tried, the
+       first to succeed or fail ends the auth loop.
+
+       * attach.c, commands.c, handler.c:
+       Check mutt_create_filter*'s return value  for errors.  This should
+       avoid a bunch of possible crashes.
+
+Mon Jun  4 18:29:33 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.head: Score documentation fix.
+
+       * po/pl.po: Update.
+
+       * doc/.cvsignore, .cvsignore:
+       Ignore some more generated files.  From Andrew Nosenko.
+
+       * Makefile.am:
+       -I$(includedir) is moved from INCLUDES variable to the end of
+       CPPFLAGS.  This allow build Mutt with Bruno's libiconv and
+       --prefix=/usr on glibc-2.1.2 systems.
+
+       From "Andrew W. Nosenko" <awn@bcs.zp.ua>.
+
+       * doc/instdoc.sh.in, doc/Makefile.in, contrib/Makefile.in, configure.in, init.c, INSTALL, main.c, Makefile.am, muttbug.sh.in, sendlib.c:
+       Clean up the sharedir mess.  From Lars Hecking.
+
+Fri Jun  1 08:53:23 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/command.c, imap/imap.c, imap/imap_private.h, imap/message.c, curs_main.c, mailbox.h:
+       More concurrent IMAP modification handling from Brendan Cully.
+
+       * po/fr.po: Update.
+
+Thu May 31 18:04:24 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * mutt_tunnel.c: Tunnel fixes.
+
+       * configure.in: Fix some typos.
+
+       * mutt_curses.h, configure.in:
+       Utf-8 support with ncurses, by Sven Verdoolaege.  Thomas E. Dickey
+       says it looks reasonable, so I include it.
+
+Wed May 30 23:00:51 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/command.c, imap/imap.c, enter.c, Makefile.am, mutt_sasl.c, mutt_sasl.h, mutt_socket.c, mutt_socket.h, mutt_ssl.c, mutt_ssl_nss.c, mutt_tunnel.c:
+       Socket API clean-up from Brendan Cully.
+
+       * send.c: If messages have no References header, fall back to using
+       In-Reply-To when constructing a reply's references header.  This may
+       not be strictly according to the book, but looks like a reasonable
+       suggestion (which came from Vincent Lefebvre).
+
+       * curs_main.c: Check whether any messages are visible.
+
+Tue May 29 20:26:23 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * m4/gssapi.m4, imap/auth.c, imap/auth_gss.c, imap/auth_sasl.c, imap/imap.c, configure.in, globals.h, init.h, Makefile.am, mutt_socket.c, mutt_socket.h, mutt_tunnel.c, mutt_tunnel.h, README:
+       GSSAPI fixes, tunnel driver.  From Brendan Cully.
+
+       * configure.in, md5.h, sha1.h:
+       More type-determination fixes from Lars Hecking.
+
+Mon May 28 19:14:47 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/util.c:
+       Consult /etc/services for imaps port.  From Brendan Cully.
+
+       * imap/Makefile.am, Attic/checktypes.c, configure.in, Makefile.am, md5c.c, md5.h, sha1.c, sha1.h:
+       Improve checking for 32bit integers.  From Brendan Cully and Lars
+       Hecking.
+
+       * muttbug.sh.in: Cosmetics.  From Brendan Cully.
+
+       * imap/command.c, imap/imap.c, imap/imap_private.h:
+       Detect external modifications of IMAP folders.  From Brendan Cully.
+
+       * curs_main.c: Fix attaching messages via IMAP.  From Brendan Cully.
+
+Thu May 24 10:18:30 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/ja.po: update.
+
+       * browser.c: patch-bac.chdir-20010523.2
+
+Wed May 23 14:19:16 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * browser.c: patch-bac.chdir-20010523.1
+
+       * imap/browse.c: patch-bac.createnull-20010522.1
+
+Tue May 22 21:45:52 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.head: Documentation nit from Björn Jacke.
+
+       * configure.in:
+       Let configure --help look prettier.  From Brendan Cully.
+
+       * doc/manual.sgml.head, doc/manual.sgml.tail:
+       Documentation fixes from Brendan Cully.
+
+       * imap/imap.c: Attachment deletion on IMAP servers, take two.
+
+Mon May 21 08:42:07 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/imap.c, imap/message.c, commands.c, mx.c, protos.h:
+       Attachment deletion for IMAP folders.  By Brendan Cully.
+
+Sun May 20 22:35:29 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * handler.c:
+       Fix character set conversion for non-plain text types with 8bit
+       content-transfer-encodings.  Noted by Björn Jacke.
+
+       * imap/message.c: \Seen for FCCs.  From Brendan Cully.
+
+Thu May 17 18:37:21 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * pager.c: patch-1.3.18.bj.segfault.1.
+
+       * handler.c: Fix multibyte encodings with quoted-printable.
+       (patch-1.3.18.tt.decode_quoted.1)
+       From TAKIZAWA Takashi <taki@luna.email.ne.jp>.
+
+Tue May 15 20:41:55 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/browse.c, imap/util.c, mutt_socket.c: patch-bac.notes-20010515.1
+
+       * rfc1524.c:
+       Make tests on an attachment's file name possible.  Patch from Bob
+       Bell <bobbell@zk3.dec.com>.
+
+Sun May 13 15:43:48 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/de.po: Update.
+
+Sat May 12 05:49:31 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * handler.c: Undo one of yesterday's aesthetical changes.
+
+       * muttlib.c: IMAP path canonification hack from Brendan Cully.
+
+       * handler.c:
+       Adding a hack to use format=flowed's quoting information in the
+       pager, using ANSI color sequences to turn off quote coloring.
+
+Fri May 11 22:16:17 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * handler.c:
+       Don't cut off the final part of ttachments with overlong lines.
+
+       * handler.c: Correctly handle extremely long lines.
+
+       * handler.c:
+       Improve handling of indented text when wrapping text/plain;
+       format=flowed.  This is, in particular, important when replying to
+       messages with indented text.  I hope this code does The Right Thing
+       most of the time now.
+
+       (Further note that we still try to avoid wrapping at places where
+       the user didn't do so.)
+
+       * handler.c: Some more esthetical nits.
+
+       * handler.c: More fixes.
+
+       * recvcmd.c: Fix some nits with respect to text/plain; format=flowed.
+
+       * copy.c, handler.c, init.h, mutt.h, send.c:
+       Add experimental support for text/plain; format=flowed.
+
+       * send.c: Fix #590.
+
+       * headers.c: Some code simplifications.
+
+       * headers.c, muttlib.c:
+       Fix a memory leak in mutt_free_envelope(); avoid dangling pointers
+       in header editing.
+
+Thu May 10 13:15:45 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/ja.po: update.
+
+       * hdrline.c: Fix %D.  From Len Lattanzi <Len.Lattanzi@migration.com>.
+
+       * headers.c: Fix header editing and references headers.
+
+       * imap/auth_anon.c, imap/auth_cram.c, imap/auth_gss.c, imap/auth_login.c, imap/auth_sasl.c, imap/browse.c, imap/command.c, imap/imap.c, imap/message.c, imap/util.c, sort.c, copy.c, curs_main.c, globals.h, hook.c, init.h, mbox.c, menu.c, muttlib.c, mutt_socket.c, mutt_ssl.c, mx.c, pgpkey.c, pop_auth.c, pop.c, pop_lib.c, protos.h:
+       A slightly extended version of Dave Ewart's sleeptime patch.
+
+       * po/fr.po, po/id.po, po/sv.po, po/da.po: update.
+
+       * po/hu.po, configure.in:
+       Adding the Hungarian translation from Szabolcs Horvath
+       <horvaths@fi.inf.elte.hu>.
+
+Mon May  7 19:21:41 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * imap/imap.h, imap/README, imap/util.c, muttlib.c:
+       IMAP path canonicalization.  From Brendan Cully.
+
+Wed May  2 20:49:46 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * doc/manual.sgml.tail: Document some missing functions.
+
+       * po/tr.po, po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/cs.po, po/da.po:
+       make update-po.
+
+Tue May  1 21:32:50 2001  Thomas Roessler  <roessler@does-not-exist.org>
+
+       * po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/pl.po, po/pt_BR.po, po/lt.po, po/nl.po, po/gl.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/cs.po, ChangeLog, reldate.h, VERSION:
+       automatic post-release commit for mutt-1.3.18
+
+       * pgp.c: #568:  Out-of-band reporting for traditional signed+encrypted
+       messages.
+
+Tue May  1 21:24:41 2001  Thomas Roessler  <roessler@guug.de>
+
+       * pgp.c: #568:  Out-of-band reporting for traditional signed+encrypted
+       messages.
+
+Thu Apr 26 15:52:34 2001  Thomas Roessler  <roessler@guug.de>
+
+       * configure.in: Replace tabs by spaces.
+
+       * BEWARE, Makefile.am:
+       Add a word of warning concerning the case problems.
+
+       * imap/command.c, imap/imap.c, imap/message.c, imap/util.c, imap/browse.c, parse.c, pattern.c, pgp.c, pgpkey.c, postpone.c, recvattach.c, remailer.c, rfc1524.c, rfc2047.c, send.c, sendlib.c, url.c, account.c, addrbook.c, alias.c, ascii.c, ascii.h, attach.c, charset.c, color.c, commands.c, copy.c, edit.c, handler.c, headers.c, init.c, keymap.c, Makefile.am, mutt.h, muttlib.c, mutt_ssl_nss.c, mx.c:
+       Add ascii_strcasecmp() and ascii_strncasecmp() functions which do
+       locale-independent and case-insensitive string comparisons.  Needed
+       for mutt to work in iso-8859-9 environments, where tolower('I') !=
+       'i'.
+
+Wed Apr 25 22:08:41 2001  Thomas Roessler  <roessler@guug.de>
+
+       * globals.h, init.h, mutt.h, parse.c, protos.h, send.c, sendlib.c, thread.c, url.c:
+       Implement RFC 2822's idea of the In-Reply-To header.  In particular,
+       we have to drop the $in_reply_to configuration variable.  Also, the
+       change in the specification makes some changes to the threading code
+       reasonable.
+
+       * parse.c: Use RFC 2822's interpretation of two-digit years.
+
+       * charset.c: Kluge around some problems with iso-8859-9 locales.
+
+Tue Apr 24 11:21:22 2001  Thomas Roessler  <roessler@guug.de>
+
+       * commands.c:
+       When the character set is changed, ask whether or not mutt should
+       convert.
+
+Thu Apr 19 09:39:49 2001  Thomas Roessler  <roessler@guug.de>
+
+       * compose.c:
+       Don't try to select the secret key from the public key ring.
+
+Wed Apr 18 15:12:50 2001  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c:
+       Fix a segmentation fault.  Bug reported by Björn Jacke and analyzed
+       by Lars Hecking.
+
+Fri Apr 13 23:20:15 2001  Thomas Roessler  <roessler@guug.de>
+
+       * enter.c: Fix KEY_ENTER.  From EGE.
+
+       * build-release, README: Introducing trithemius.gnupg.org.
+
+Wed Apr 11 23:42:59 2001  Thomas Roessler  <roessler@guug.de>
+
+       * hook.c:
+       Avoid excessive unhooking from within hooks.  Problem noted by
+       Eugene Lee <eugene@anime.net> on mutt-users.
+
+       * doc/Makefile.in:
+       Don't rely on GNU make's implicit rules for shell scripts.  Noted by
+       EGE.
+
+Mon Apr  9 16:10:59 2001  Thomas Roessler  <roessler@guug.de>
+
+       * INSTALL: Fix the documentation of --enable-locale-fix.  From EGE.
+
+       * enter.c, keymap.c:
+       Entering multibyte characters.  From Edmund Grimley Evans.
+
+       * send.c: Avoid a crash.  patch-1.3.17.tlr.pgpflags_fault.1.
+
+Thu Apr  5 23:23:37 2001  Thomas Roessler  <roessler@guug.de>
+
+       * po/it.po: update
+
+       * po/tr.po: update.
+
+       * init.h: Fix a minor typo in the documentation.
+
+Wed Apr  4 23:29:29 2001  Thomas Roessler  <roessler@guug.de>
+
+       * send.c:
+       Fix pgp_replyencrypt and friends for group-replies to several tagged
+       messages.  Noted by Werner Koch.
+
+Tue Apr  3 19:26:55 2001  Thomas Roessler  <roessler@guug.de>
+
+       * pgpkey.c: More PGP key selection changes:  Clean up the key selection
+       mechanism.  I'd appreciate if some of you could review the logic.
+
+       * pgpkey.c: Fixes for the previous patch.
+
+       * pgpkey.c:
+       Add an error message in case keys can be found, but none are valid.
+
+       * init.h: Write "mail folder" instead of "folder" in the description of
+       $postponed.  If people believe they understand it better that way,
+       fine with me.  (Debian #89195.)
+
+       * doc/manual.sgml.head: Fix a typo.  Debian #90400.
+
+       * po/sv.po: update.
+
+       * url.c:
+       Permit for passwords which contain '@'.  From Felix von Leitner
+       <leitner@fefe.de>.
+
+       * mutt_socket.c:
+       Set the close on exec bit for IMAP sockets.  From Jason Gunthorpe
+       <jgg@wakko.deltatee.com>.  #536, Debian #92651.
+
+Mon Apr  2 13:02:56 2001  Thomas Roessler  <roessler@guug.de>
+
+       * pop.c:
+       Fix a buffer overrun.  Noted by Gordon Sadler <gbsadler1@lcisp.com>;
+       #530.
+
+       * imap/Makefile.am: Fix dependencies.  From Lars Hecking.
+
+Fri Mar 30 08:53:12 2001  Thomas Roessler  <roessler@guug.de>
+
+       * imap/Makefile.am: Add a rule for ../types.h.
+
+Thu Mar 29 11:23:05 2001  Thomas Roessler  <roessler@guug.de>
+
+       * pgp.c: Adding a dprint statement.
+
+Wed Mar 28 14:59:52 2001  Thomas Roessler  <roessler@guug.de>
+
+       * pgp.c, pgp.h:
+       Add some more PGP good signature checks, so we can detect whether or
+       not an encrypted+signed message is OK.
+
+       * main.c: fix some of the copyright messages.
+
+       * gnupgparse.c, pgpkey.c, pgplib.c, pgplib.h, pgppacket.c:
+       Make mutt compatible with GnuPG's latest features.  As requested by
+       Werner Koch.
+
+       * po/tr.po, po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/sv.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/it.po, po/ja.po, po/ko.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/eo.po, po/el.po, po/de.po, po/da.po, po/cs.po, reldate.h, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.3.17
+
+       * po/pl.po: update.
+
+Wed Mar 28 12:00:38 2001  Thomas Roessler  <roessler@guug.de>
+
+       * po/pl.po: update.
+
+Fri Mar 23 12:30:17 2001  Thomas Roessler  <roessler@guug.de>
+
+       * send.c: handle my_hdr message-id: correctly.
+
+Tue Mar 20 17:28:55 2001  Thomas Roessler  <roessler@guug.de>
+
+       * pgp.c: Fix Content-Disposition of PGP/MIME messages.  The second part
+       should get a file name for convenience, not the first one.
+
+       * po/ja.po: Update from Oota Toshiya <oota@ppd.fc.nec.co.jp>.
+
+       * mbyte.c: Fix a bug in mbrtowc_iconv().  From TAKIZAWA Takashi
+       <taki@luna.email.ne.jp>.
+
+Mon Mar 12 11:54:38 2001  Thomas Roessler  <roessler@guug.de>
+
+       * po/ru.po: update from Vsevolod.
+
+Thu Mar  8 16:48:50 2001  Thomas Roessler  <roessler@guug.de>
+
+       * pager.c:
+       Cosmetic change for OP_PAGER_TOP, suggested by Mike Schiraldi
+       <raldi@research.netsol.com>.
+
+Mon Mar  5 20:52:04 2001  Thomas Roessler  <roessler@guug.de>
+
+       * init.h: Fix use_ipv6.
+
+       * po/ja.po: update.
+
+Sun Mar  4 14:25:07 2001  Thomas Roessler  <roessler@guug.de>
+
+       * po/eo.po: update.
+
+       * pgppacket.c:
+       Fix the interpretation of new-style packet lengths.  This is a
+       really bad bug.
+
+       * init.h, mutt.h, mutt_socket.c:
+       Make it possible to enable ipv6 at run time.
+
+Sat Mar  3 18:17:23 2001  Thomas Roessler  <roessler@guug.de>
+
+       * mutt_ssl.c: Fix a typo concerning OpenSSL version numbers.
+
+Thu Mar  1 10:18:04 2001  Thomas Roessler  <roessler@guug.de>
+
+       * po/fr.po: update.
+
+       * po/de.po, po/id.po: updates.
+
+       * imap/imap.c: Don't engage STARTTLS when already in SSL mode.
+
+Tue Feb 27 16:59:45 2001  Thomas Roessler  <roessler@guug.de>
+
+       * depcomp, Makefile.am, missing:
+       Adding files for users of automake-cvs.  From Lars Hecking.
+
+       * configure.in: Simplifications from Lars Hecking.
+
+       * doc/Makefile.in: Distribute instdoc.sh.in.
+
+       * po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/id.po, po/it.po, po/ja.po, po/es.po, po/fr.po, po/gl.po, po/el.po, po/eo.po, po/da.po, po/de.po, contrib/Makefile.in, po/cs.po, reldate.h, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.3.16
+
+Mon Feb 26 16:35:39 2001  Thomas Roessler  <roessler@guug.de>
+
+       * pgp.c:
+       Fix behaviour with multiple signed blocks inside one application/pgp.
+
+       * pgp.c:
+       Add out-of-band signature status signalling for application/pgp with
+       clearsig.
+
+Mon Feb 26 16:35:39 2001  Thomas Roessler  <roessler@guug.de>
+
+       * pgp.c:
+       Fix behaviour with multiple signed blocks inside one application/pgp.
+
+       * pgp.c:
+       Add out-of-band signature status signalling for application/pgp with
+       clearsig.
+
+Fri Feb 23 09:13:55 2001  Thomas Roessler  <roessler@guug.de>
+
+       * imap/imap.c, mutt_ssl.c, po/ru.po: update.
+
+       * url.h: Ports are unsigned short, not short.
+
+       * po/de.po: Update.
+
+Wed Feb 21 17:02:18 2001  Thomas Roessler  <roessler@guug.de>
+
+       * po/fr.po: update.
+
+       * po/pl.po, po/sv.po: updates.
+
+Tue Feb 20 19:05:17 2001  Thomas Roessler  <roessler@guug.de>
+
+       * imap/auth_gss.c, imap/message.c: More IMAP patches from Brendan.
+
+       * sendlib.c:
+       lookup_mime_type() could overflow.  This is, however, harmless,
+       because it only works on data from local configuration files which
+       are either under the control of the user or under the control of
+       root.
+
+Mon Feb 19 18:21:53 2001  Thomas Roessler  <roessler@guug.de>
+
+       * imap/command.c: Improved error handling.
+
+       * po/de.po: There is no such thing as a "Text Anhang" in German.
+
+       * imap/imap.c, imap/imap.h, hook.c, mailbox.h, mx.c:
+       Brendan Cully's generic access() wrapper which know about IMAP.
+
+       * po/el.po: Update.
+
+Fri Feb 16 00:42:57 2001  Thomas Roessler  <roessler@guug.de>
+
+       * imap/BUGS, imap/message.c: Bugfix.  From B.C.
+
+       * imap/message.c: Fix #378.  From Brendan Cully.
+
+       * imap/imap.c: Support for \HasNoChildren.  From Brendan Cully.
+
+Thu Feb 15 16:37:27 2001  Thomas Roessler  <roessler@guug.de>
+
+       * imap/browse.c, imap/imap.c, imap/imap.h, imap/util.c, acconfig.h, configure.in, globals.h, init.h, mutt.h, muttlib.c, mutt_sasl.c, pop_auth.c, url.c:
+       Brendan Cully's latest STARTTLS patch.
+
+       * po/ja.po, configure.in: Adding ja.po.
+
+       * charset.c:
+       Fix iconv-hook.  It would segfault with x-unknown and other
+       problematic cases.
+
+       * init.h:
+       Fix the documentation of pgp_verify_sig.  It's ask-yes, not ask.
+
+Wed Feb 14 23:58:28 2001  Thomas Roessler  <roessler@guug.de>
+
+       * INSTALL: Add a comment about the sample iconv-hook files.
+
+       * doc/instdoc.sh.in, doc/Makefile.in, doc/manual.sgml.head, doc/muttrc.man.head, doc/muttrc.man.tail, contrib/iconv/iconv.aix-3.2.5.rc, contrib/iconv/iconv.aix-4.1.5.rc, contrib/iconv/iconv.aix-4.2.0.rc, contrib/iconv/iconv.aix-4.3.2.rc, contrib/iconv/iconv.freebsd-3.3.rc, contrib/iconv/iconv.glibc-2.1.3.rc, contrib/iconv/iconv.glibc-2.1.90.rc, contrib/iconv/iconv.hpux-10.01.rc, contrib/iconv/iconv.hpux-10.20.rc, contrib/iconv/iconv.hpux-11.00.rc, contrib/iconv/iconv.irix-6.5.rc, contrib/iconv/iconv.osf1-4.0a.rc, contrib/iconv/iconv.osf1-4.0d.rc, contrib/iconv/iconv.solaris-2.4.rc, contrib/iconv/iconv.solaris-2.5.1.rc, contrib/iconv/iconv.solaris-2.6-cjk.rc, contrib/iconv/iconv.solaris-2.6.rc, contrib/iconv/iconv.solaris-2.7.rc, contrib/iconv/make.sh, contrib/iconv/README, contrib/Makefile.in, mutt.h, protos.h, charset.c, configure.in, hook.c, init.h:
+       iconv-hook.
+
+       * imap/auth.c, imap/imap.c, imap/message.c, acconfig.h, configure.in, mutt_sasl.c, mutt_socket.h, mutt_ssl.c, mutt_ssl.h:
+       STARTTLS patch from Brendan Cully.
+
+       * rfc2047.c, sendlib.c:
+       Minor charset fixes.  Users can now give any character set names in
+
+Tue Feb 13 23:42:29 2001  Thomas Roessler  <roessler@guug.de>
+
+       * charset.c: Some more strange character set aliaes.
+
+       * charset.c: Add more possibly-interesting character set names.
+
+       * charset.c:
+       While I'm on it, fix a warning and remove some weired code by proper
+       use of ctype functions.
+
+       * imap/utf7.c, charset.c, charset.h, gettext.c, gnupgparse.c, handler.c, rfc2047.c, rfc2231.c, sendlib.c:
+       Change charset-hook's behaviour.
+
+       * po/id.po: update.
+
+       * po/de.po: Fix some typos.  From Björn Jacke.
+
+       * recvattach.c:
+       A little fix for those who don't have PGP installed. ;-)
+
+       * commands.c, curs_main.c, functions.h, OPS.PGP, pgp.c, pgp.h, protos.h, recvattach.c:
+       Add a function check-traditional-pgp which can be used to handle
+       old-style PGP messages and/or parts more easily.
+
+       * query.c: Match all fields when searching on the query menu.
+
+       * attach.c:
+       Fix #470:  multipart- and message-type attachments weren't handled
+       correctly.
+
+Mon Feb 12 20:42:40 2001  Thomas Roessler  <roessler@guug.de>
+
+       * curs_lib.c: Fix '?' in the file name dialogue.  Fixes #468, #465.
+
+       * po/sv.po, po/tr.po, po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/lt.po, po/nl.po, po/cs.po, po/da.po, po/de.po, po/el.po, reldate.h, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.3.15
+
+       * NEWS: Tell users about some of the new features.
+
+       * pgppacket.c: Don't free(NULL).
+
+       * mutt.h, pgp.c, pgp.h, pgplib.c, pgplib.h, pgpmicalg.c, pgppacket.c, pgppacket.h, pgppubring.c, postpone.c, protos.h, send.c, sendlib.c, compose.c, configure.in, gnupgparse.c, init.h, Makefile.am:
+       Auto-detect the micalg used with PGP/MIME signatures.
+
+Mon Feb 12 17:48:25 2001  Thomas Roessler  <roessler@guug.de>
+
+       * NEWS: Tell users about some of the new features.
+
+       * pgppacket.c: Don't free(NULL).
+
+       * mutt.h, pgp.c, pgp.h, pgplib.c, pgplib.h, pgpmicalg.c,
+       pgppacket.c, pgppacket.h, pgppubring.c, postpone.c,
+       protos.h, send.c, sendlib.c, compose.c, configure.in,
+       gnupgparse.c, init.h, Makefile.am: Auto-detect the micalg
+       used with PGP/MIME signatures.
+
+       * handler.c:
+       Make mutt_decode_* usable without passing a BODY structure.
+
+       * imap/auth_anon.c, imap/auth_cram.c, imap/auth_gss.c:
+       Fixes so mutt at least compiles with Brendan's new SASL patch.
+
+       * lib.c: Fix mutt_read_line's behaviour when encountering an
+       EOF.  From Aaron Lehmann <aaronl@vitelus.com>.
+
+       * pager.c: Avoid an infinite loop in the pager.  From Edmund
+       Grimley Evans.
+
+       * imap/auth_login.c, imap/auth_sasl.c, imap/browse.c,
+       imap/command.c, imap/imap.c, imap/imap_private.h,
+       imap/message.c, imap/util.c, mutt_sasl.c, mutt_sasl.h,
+       mutt_ssl.c, mutt_ssl.h: Brendan Cully's SASL patch.
+
+Thu Feb  8 15:50:51 2001  Thomas Roessler  <roessler@guug.de>
+
+       * attach.c, commands.c, curs_lib.c, muttlib.c, pgp.c,
+       recvattach.c, remailer.c: Replace various instances of
+       endwin() by mutt_endwin().  This should help to avoid
+       chaotic screen output on the "second" screen.
+
+       * po/da.po: update.
+
+       * doc/manual.sgml.head: Fix a typo.
+
+Tue Feb  6 22:14:01 2001  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.head, doc/muttrc.man.head: Document fuzzy
+       dates.
+
+       * date.c, pattern.c: Fuzzy date matching.  From Eike Rathke
+       <er@erack.de>.
+
+Fri Feb  2 12:36:19 2001  Thomas Roessler  <roessler@guug.de>
+
+       * pgpinvoke.c: Apply more conservative quoting to some PGP
+       invocation.
+
+       * po/sv.po: Update from Jörgen Tegnér.
+
+Thu Feb  1 17:03:44 2001  Thomas Roessler  <roessler@guug.de>
+
+       * po/tr.po: update
+
+Wed Jan 31 18:31:27 2001  Thomas Roessler  <roessler@guug.de>
+
+       * send.c:
+       Don't use group mailboxes with list-reply.  E.g., when you have
+       "ietf" as a list pattern, and a message goes to
+
+               IETF-Announce:;, ietf-openpgp@somewhere.org,
+
+       list-reply will now yield ietf-openpgp and _not_:
+
+               IETF-Announce: ietf-openpgp@...
+
+       * po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po,
+       po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/fr.po,
+       po/gl.po, po/id.po, po/it.po, po/ko.po, po/lt.po, po/nl.po,
+       po/pl.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po,
+       po/es.po: Including the turkish translation from Fatih Demir
+       <kabalak@gmx.net>; make update-po.
+
+       * configure.in: Including the turkish translation from Fatih
+       Demir <kabalak@gmx.net>.
+
+Tue Jan 30 10:24:36 2001  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.head:
+       Stan Ryckman <stanr@sunspot.tiac.net> noted that we are abusing
+       "envelope" where it should be "header".
+
+       * thread.c: Fix sort_aux=received.  From <benno@sesgroup.net>.
+
+       * pager.c:
+       Eric Fischer <eric@eazel.com> sent us this patch as part of bug#441.
+       I'm not entirely sure that it works, but let's try it.
+
+       * po/de.po, po/id.po: update
+
+       * po/fr.po: update.
+
+       * pop_auth.c:
+       Fixing a stupid typo.  bug#445, from Larry Rosenman <ler@lerctr.org>.
+
+Sat Jan 27 13:50:26 2001  Thomas Roessler  <roessler@guug.de>
+
+       * po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/uk.po, po/pt_BR.po, po/ru.po, po/pl.po, po/ko.po, po/lt.po, po/nl.po, po/gl.po, po/id.po, po/it.po, po/es.po, po/fr.po, po/eo.po, po/el.po, po/de.po, po/da.po, po/cs.po, reldate.h, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.3.14
+
+       * recvattach.c: More improvements to the recvattach collapsing.
+
+       * mutt.h, pager.c, pager.h, protos.h, recvattach.c, attach.c, attach.h, compose.c, functions.h, init.h, OPS:
+       Add collapsing to the receive-attach menu, and improve digest
+       handling that way.
+
+Sat Jan 27 13:41:11 2001  Thomas Roessler  <roessler@guug.de>
+
+       * recvattach.c: More improvements to the recvattach collapsing.
+
+       * mutt.h, pager.c, pager.h, protos.h, recvattach.c, attach.c, attach.h, compose.c, functions.h, init.h, OPS:
+       Add collapsing to the receive-attach menu, and improve digest
+       handling that way.
+
+Thu Jan 25 12:04:46 2001  Thomas Roessler  <roessler@guug.de>
+
+       * po/cs.po: Fixes from Björn Jacke <bjacke@suse.de>.
+
+       * contrib/pgp6.rc: A nit from Björn Jacke <bjacke@suse.de>.
+
+Mon Jan 22 11:04:56 2001  Thomas Roessler  <roessler@guug.de>
+
+       * mutt_ssl.c: patch-1.3.13.tk.ssl.connect.1
+
+Thu Jan 18 11:27:56 2001  Thomas Roessler  <roessler@guug.de>
+
+       * complete.c:
+       Completion fix.  From Aaron Schrab <aaron+mutt@schrab.com>.
+
+Wed Jan 17 08:53:12 2001  Thomas Roessler  <roessler@guug.de>
+
+       * rfc822.c:
+       This one-line diff should fix the behaviour of the address parser
+       when encountering loose dots in addresses.
+
+       * imap/auth_sasl.c:
+       Try to catch mysterious failures of the SASL library instead of
+       hanging.  From Brendan Cully.
+
+Mon Jan 15 10:40:50 2001  Thomas Roessler  <roessler@guug.de>
+
+       * copy.c: Some debugging helpers.
+
+       * send.c:
+       Use safe_fclose() where a NULL pointer may be passed to fclose().
+
+       * pattern.c:
+       Make ~m usable in $simple_search.  From <David.Good@stratasource.com>.
+
+Wed Jan 10 19:36:43 2001  Thomas Roessler  <roessler@guug.de>
+
+       * recvcmd.c, send.c:
+       Make some messages about mime-forwarding more comprehensible to
+       normal users.
+
+Mon Jan  8 23:09:32 2001  Thomas Roessler  <roessler@guug.de>
+
+       * imap/auth_sasl.c, imap/utf7.c, imap/util.c, charset.c, charset.h, check_sec.sh, dotlock.c, enter.c, gnupgparse.c, keymap.c, lib.c, mutt_sasl.c, parse.c, pgp.c, pgppubring.c, pop_auth.c, regex.c, rfc2047.c, rfc2231.c, rfc822.c, sendlib.c, strdup.c:
+       Let check_sec.sh check for use of the unsafe malloc, realloc, free,
+       and strdup routines.  While we are on it, plug some memory leaks and
+       make some code understandable.
+
+       * intl/cat-compat.c, imap/auth_cram.c, imap/auth_gss.c, imap/imap.c, imap/imap_private.h, imap/message.c, base64.c, browser.c, check_sec.sh, commands.c, complete.c, copy.c, curs_lib.c, edit.c, handler.c, init.c, lib.c, pager.c, pgp.c, pgpkey.c, pop_lib.c, protos.h, query.c, rfc2231.c, rfc822.c, send.c, sendlib.c, snprintf.c:
+       Fix and/or check more fishy code.
+
+       * intl/cat-compat.c, imap/auth_cram.c, imap/auth_gss.c, browser.c, buffy.c, check_sec.sh, curs_main.c, enter.c, init.c, main.c, makedoc.c, mkjtags.c, mutt_sasl.c, pgp.c, pgpinvoke.c, pgpkey.c, pop.c, protos.h, regex.c, rfc2231.c, sendlib.c:
+       Going through possible security problems with a fine comb.  If you
+       want to help, check out the current source, and run check_sec.sh.
+
+       * attach.c, build-release, check_sec.sh, edit.c, pgpkey.c:
+       Some automated security checks concerning fopen() calls.
+
+Thu Jan  4 05:39:31 2001  Thomas Roessler  <roessler@guug.de>
+
+       * gettext.c: Don't use debugfile unless DEBUG is #defined.
+
+Wed Jan  3 13:39:48 2001  Thomas Roessler  <roessler@guug.de>
+
+       * enter.c, mbyte.c: More wide-char patches from EGE.
+
+       * enter.c: Don't accept '\0' as keyboard input.
+
+       * imap/auth_sasl.c:
+       Set SASL_IP_{LOCAL,REMOTE} properties - needed for krb4 support;
+       from yak@MIT.EDU.
+
+       * enter.c: Try to fix nonprintable character input.
+
+       * enter.c: Extend the editor so it supports unprintable characters.
+
+Tue Jan  2 16:34:26 2001  Thomas Roessler  <roessler@guug.de>
+
+       * enter.c: Make my_wcstombs more robust.  From EGE.
+
+       * main.c: Only show mailboxes with -y.  From devenish@arcme.uwa.edu.au.
+
+       * account.h: Fix password input.  From Vsevolod Volkov.
+
+Sun Dec 31 15:30:52 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/ru.po, pop_lib.c: Missing patches from VVV.
+
+       * imap/imap.c, curs_main.c, functions.h, globals.h, OPS:
+       Experimental patch to add an imap-fetch-mail function.
+
+       * mutt.h, protos.h, browser.c, curs_lib.c, enter.c, main.c:
+       Make browser behaviour more consistent with expectations.
+
+       * po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/uk.po, po/pt_BR.po, po/ru.po, po/lt.po, po/nl.po, po/pl.po, po/it.po, po/ko.po, po/id.po, po/es.po, po/fr.po, po/gl.po, po/eo.po, po/da.po, po/de.po, po/el.po, po/cs.po, reldate.h, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.3.13
+
+Sat Dec 30 10:28:16 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/pl.po: update.
+
+Sat Dec 30 10:28:16 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/pl.po: update.
+
+Fri Dec 22 18:03:34 2000  Thomas Roessler  <roessler@guug.de>
+
+       * configure.in: autoconf consmetics.  From L.H.
+
+       * enter.c, mutt.h: Some more changes to the enter code.
+
+       * enter.c: Fix some ugly bugs in the completion code.  In particular,
+       replace_part() could lead to heap corruption.
+
+       * po/lt.po, configure.in:
+       Lithuanian translation.  From Gediminas Paulauskas <menesis@delfi.lt>.
+
+Thu Dec 21 09:19:41 2000  Thomas Roessler  <roessler@guug.de>
+
+       * flags.c, init.h, mh.c, mutt.h: patch.me.maildir_trash.1
+
+Sun Dec 17 19:54:58 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/sv.po: update.
+
+Thu Dec 14 15:40:30 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.head: Improve hook documentation.  From Lars Hecking.
+
+       * enter.c: More file name completion fixes.
+
+       * enter.c: Fix "tab-tab" at the change-folder prompt.
+
+Sun Dec 10 21:01:35 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/message.c, init.h, mutt.h:
+       Avoid implicit flag updates with IMAP.  From Brendan Cully.
+
+       * configure.in, enter.c, mbyte.c, mbyte.h, mutt.h:
+       More enter.c updates.  From E.G.E..
+
+       * mbyte.h, mutt.h, configure.in, enter.c:
+       More changes to the utf-8 friendly line editor: Implement some
+       missing functions, include some more header files.
+
+Fri Dec  8 10:38:30 2000  Thomas Roessler  <roessler@guug.de>
+
+       * curs_lib.c: Remove an unnecessary ENTER_STATE allocation.
+
+       * curs_lib.c, enter.c, mutt.h, protos.h:
+       Make _mutt_enter_string() re-entrant.
+
+       * curs_lib.c, edit.c, enter.c, protos.h:
+       Make the line editor utf-8 friendly.  First take from Edmund Grimley
+       Evans.
+
+Wed Dec  6 20:31:46 2000  Thomas Roessler  <roessler@guug.de>
+
+       * gnupgparse.c: Fix pgp_ignore_subkeys.
+
+       * mutt_curses.h: Make the BEEP macro a bit safer.  From EGE.
+
+       * imap/imap.c: Fix a memory leak in imap_logout_all.
+
+Mon Dec  4 09:00:08 2000  Thomas Roessler  <roessler@guug.de>
+
+       * mbyte.c:
+       A little fix for the -HAVE_WC_FUNCS +LOCALES_HACK case.  From EGE.
+
+Sun Dec  3 09:34:41 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/PGP-Notes.txt:
+       Document the fact that Courier MTA corrupts PGP/MIME signatures.
+
+Sat Dec  2 09:16:47 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/el.po, po/uk.po: update.
+
+Tue Nov 28 11:19:57 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/da.po, po/de.po, po/fr.po, po/id.po: updates
+
+Mon Nov 27 13:14:28 2000  Thomas Roessler  <roessler@guug.de>
+
+       * attach.h, commands.c, compose.c, curs_main.c, protos.h, recvattach.c:
+       Make sure edit-type works without a segmentation fault from the
+       receive-attach menu.
+
+       * po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/sv.po, po/pl.po, po/pt_BR.po, po/nl.po, po/it.po, po/ko.po, po/fr.po, po/gl.po, po/id.po, po/eo.po, po/es.po, po/el.po, po/cs.po, po/da.po, po/de.po, reldate.h, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.3.12
+
+Thu Nov 23 10:30:49 2000  Thomas Roessler  <roessler@guug.de>
+
+       * contrib/sample.muttrc-tlr:
+       Use display_filter to fix some ugliness people are sending me.
+
+       * commands.c: Don't endwin() before invoking the display_filter.
+
+Thu Nov 23 10:30:49 2000  Thomas Roessler  <roessler@guug.de>
+
+       * contrib/sample.muttrc-tlr:
+       Use display_filter to fix some ugliness people are sending me.
+
+       * commands.c: Don't endwin() before invoking the display_filter.
+
+Tue Nov 21 10:32:34 2000  Thomas Roessler  <roessler@guug.de>
+
+       * protos.h, main.c, curs_lib.c, globals.h:
+       [stable] Introduce mutt_curses_message and mutt_nocurses_message.
+       From Olaf Kirch.
+
+       * globals.h, main.c, protos.h, curs_lib.c:
+       Introduce mutt_curses_message/mutt_nocurses_message.  From Olaf Kirch.
+
+Mon Nov 20 13:20:28 2000  Thomas Roessler  <roessler@guug.de>
+
+       * contrib/gpg.rc: Add a missing --textmode switch.
+
+Sun Nov 19 20:39:49 2000  Thomas Roessler  <roessler@guug.de>
+
+       * NEWS: Mention $print_split.
+
+       * contrib/sample.muttrc-tlr: update
+
+       * mutt.h, pgp.c, protos.h, commands.c, init.h:
+       Introduce a new option named $print_split.  While we are on it,
+       unify the pipe-message and print-message code, and fix the PGP
+       key-extraction code so it doesn't interact with OPTPIPEDECODE in
+       strange manners any more.
+
+Sat Nov 18 19:50:48 2000  Thomas Roessler  <roessler@guug.de>
+
+       * curs_lib.c: Remove an unnecessary include statement.
+
+Fri Nov 17 09:19:41 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/sv.po: Small fix from Jörgen Tegnér <teg@post.netlink.se>.
+
+       * imap/auth_gss.c:
+       [stable] GSSAPI patch from Bill Nottingham <notting@redhat.com>.
+
+       * doc/manual.sgml.tail, curs_main.c, functions.h:
+       Make folder synchronization possible from within the pager.  From
+       Chris Cutler <cutler@bluemug.com>.
+
+Wed Nov 15 20:29:58 2000  Thomas Roessler  <roessler@guug.de>
+
+       * charset.c:
+       Fix langinfo-based character set detection.  From Martin Norbäck
+       <d95mback@dtek.chalmers.se>.
+
+Tue Nov 14 16:57:19 2000  Thomas Roessler  <roessler@guug.de>
+
+       * curs_main.c: another possibly problematic case.
+
+       * curs_main.c:
+       Try fixing a possible segmentation fault.  I'm not entirely sure how
+       I produced it, but it's at least obvious where it happened.
+
+Mon Nov 13 22:19:57 2000  Thomas Roessler  <roessler@guug.de>
+
+       * gnupgparse.c, init.h, mutt.h:
+       Add the pgp_ignore_subkeys option.  Unset it to get the traditional
+       listing with all the subkeys.  (Experimental, may introduce new bugs.)
+
+       * po/ru.po, po/sv.po: update
+
+       * remailer.c: Qualify some more header fields.
+
+Tue Nov  7 10:31:51 2000  Thomas Roessler  <roessler@guug.de>
+
+       * init.h, mutt.h, send.c: Add a sig_on_top option.
+
+       * po/el.po: update
+
+Mon Nov  6 11:27:07 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/zh_TW.Big5.po, po/da.po: update
+
+       * configure.in:
+       Make building mutt without iconv support possible.  From EGE.
+
+Fri Nov  3 10:16:32 2000  Thomas Roessler  <roessler@guug.de>
+
+       * init.h:
+       Change pgp_good_sign's default to 0 instead of UL "".  This should
+       fix the annoying error messages when starting up mutt on some systems.
+
+       * init.c: Make error reporting more verbose.
+
+       * po/de.po, po/fr.po, po/id.po: updates
+
+Wed Nov  1 13:14:18 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/uk.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, ChangeLog, reldate.h, VERSION:
+       automatic post-release commit for mutt-1.3.11
+
+Fri Oct 27 10:51:01 2000  Thomas Roessler  <roessler@guug.de>
+
+       * enter.c: A nicer version of {capitalize,...}-word functions.
+
+       * doc/manual.sgml.head:
+       Document the recent additions to the line editor.
+
+       * enter.c, functions.h, OPS:
+       Add capitalize-word, upcase-word, downcase-word functions to the
+       editor.  Bindings follow the Emacs conventions (i.e., M-c, M-u, M-d).
+
+Fri Oct 27 10:51:01 2000  Thomas Roessler  <roessler@guug.de>
+
+       * enter.c: A nicer version of {capitalize,...}-word functions.
+
+       * doc/manual.sgml.head:
+       Document the recent additions to the line editor.
+
+       * enter.c, functions.h, OPS:
+       Add capitalize-word, upcase-word, downcase-word functions to the
+       editor.  Bindings follow the Emacs conventions (i.e., M-c, M-u, M-d).
+
+Wed Oct 25 18:56:20 2000  Thomas Roessler  <roessler@guug.de>
+
+       * rfc822.c: Fix parsing of route-addrs.
+
+Tue Oct 24 08:59:21 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.tail: Document edit-type.  From Mikko Hänninen.
+
+       * po/el.po: update
+
+Mon Oct 23 16:39:10 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.head: Typo.  From Daniel Roesen <dr@bofh.de>.
+
+       * doc/manual.sgml.head:
+       Fix documentation of uznknown MIME type handling.  From Brian
+       Salter-Duke <b_duke@lacebark.ntu.edu.au>
+
+Wed Oct 18 09:01:56 2000  Thomas Roessler  <roessler@guug.de>
+
+       * recvattach.c: Fix tree formatting in the recvattach menu.
+
+Tue Oct 17 15:10:51 2000  Thomas Roessler  <roessler@guug.de>
+
+       * commands.c, curs_lib.c, hdrline.c, menu.c, protos.h:
+       Fix pager and index display when non-printable space characters are
+       encountered.  From EGE.
+
+       * sendlib.c: Teach mutt to attach files of arbitrary type.
+
+Mon Oct 16 17:29:55 2000  Thomas Roessler  <roessler@guug.de>
+
+       * curs_lib.c:
+       nl_langinfo({YES,NO}EXPR) may return an _extended_ regular
+       expression.  Close #312.
+
+       * po/zh_TW.Big5.po, po/id.po, po/sv.po: update
+
+       * mutt_socket.c:
+       Fix the strange "Can't connect" error messages.  From Brendan Cully.
+
+Thu Oct 12 14:49:58 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/da.po: update
+
+Wed Oct 11 14:17:17 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/de.po: update.
+
+       * po/fr.po: update
+
+       * po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/nl.po, po/pl.po, po/ko.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, ChangeLog, Makefile.am, reldate.h, VERSION:
+       automatic post-release commit for mutt-1.3.10
+
+       * buffy.c: Compilation fix from Emil Sit <sit@cisco.com>.
+
+Wed Oct 11 10:21:57 2000  Thomas Roessler  <roessler@guug.de>
+
+       * buffy.c: Compilation fix from Emil Sit <sit@cisco.com>.
+
+Tue Oct 10 19:22:48 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/POTFILES.in, doc/manual.sgml.head, globals.h, init.c, init.h, mailbox.h, mutt.h, muttlib.c, mx.c, mx.h, pop_auth.c, pop.c, pop.h, pop_lib.c, protos.h, recvattach.c, browser.c, buffy.c, commands.c, compose.c, configure.in, curs_main.c, Makefile.am:
+       Vsevolod Volkov's POP mailbox patch.
+
+       * doc/manual.sgml.head:
+       Mixmaster documentation patch from Brian Salter-Duke.
+
+Mon Oct  9 08:30:35 2000  Thomas Roessler  <roessler@guug.de>
+
+       * main.c: Add an #ifdef for HAVE_GETADDRINFO.
+
+       * mutt_socket.c: Use AF_INET6 only when necessary.
+
+Sat Oct  7 18:06:24 2000  Thomas Roessler  <roessler@guug.de>
+
+       * curs_lib.c, help.c: Display fixes from EGE.
+
+Thu Oct  5 19:12:28 2000  Thomas Roessler  <roessler@guug.de>
+
+       * query.c: Catch some possible NULL pointer deferences.  From
+       chris+usenet@chiappa.net (Chris Chiappa), posted to comp.mail.mutt.
+
+Wed Oct  4 18:50:35 2000  Thomas Roessler  <roessler@guug.de>
+
+       * mutt_ssl_nss.c:
+       Downgrade Michael Elkins' indentation style to the version used
+       throughout mutt. ;-)
+
+       * acconfig.h, configure.in, init.c, init.h, Makefile.am, mutt.h, mutt_socket.c, mutt_ssl_nss.c, pop.c:
+       Adding support for Netscape's (pardon, Mozilla's) SSL
+       implementation.  From Michael Elkins.
+
+       * globals.h, init.h, mutt_socket.c, protos.h, signal.c:
+       patch.me.connect_timeout.1
+
+Tue Oct  3 10:47:20 2000  Thomas Roessler  <roessler@guug.de>
+
+       * NEWS: Document some of the recent user-visible changes.
+
+       * doc/manual.sgml.head:
+       More documentation for the "L" to_char.  Thanks, Byrial!
+
+       * hdrline.c, init.h:
+       Adding a list flag to to_chars,  From Andreas Plesner Jacobsen
+       <apj@wol.dk>.  Note: If you don't like the new behaviour, just set
+       $to_chars to the old " +TCF" value.
+
+       * po/ru.po: update
+
+Mon Oct  2 09:11:52 2000  Thomas Roessler  <roessler@guug.de>
+
+       * configure.in, mutt_socket.c: patch-bac.ipv6-1
+
+       * curs_lib.c: patch-1.3.9.bj.yesno.1
+
+Thu Sep 28 06:53:36 2000  Thomas Roessler  <roessler@guug.de>
+
+       * init.h: Fix a minor typo.  From Byrial.
+
+       * charset.c, charset.h, init.c, INSTALL:
+       Document the --without-wc-funcs switch to configure, and clean up
+       the code to set the character set from nl_langinfo from EGE.
+
+Wed Sep 27 14:28:35 2000  Thomas Roessler  <roessler@guug.de>
+
+       * charset.c:
+       Catch another error condition which may be caused by a broken
+       nl_langinfo() function.
+
+       * COPYRIGHT: We don't need to mention EAY's copyright any more.
+
+       * charset.c: Fix #287.
+
+Tue Sep 26 23:05:46 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/eo.po: update
+
+       * Attic/sha1dgst.c, Attic/sha.h, Attic/sha_locl.h, checktypes.c, main.c, Makefile.am, pgppubring.c, sha1.c, sha1.h:
+       Replace the BSD-licensed sha-1 from SSLeay with a public domain
+       version in order to satisfy GPL license zelots.
+
+Mon Sep 25 13:03:09 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/sv.po: update
+
+       * send.c: patch-1.3.9.bj.f-up-prompt.1
+
+Thu Sep 21 09:37:14 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/sk.po, po/sv.po, po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/ru.po, po/nl.po, po/pl.po, po/pt_BR.po, po/it.po, po/ko.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/el.po, po/eo.po, po/da.po, po/de.po, po/cs.po, ChangeLog, reldate.h, VERSION:
+       automatic post-release commit for mutt-1.3.9
+
+       * rfc2047.c: Make some of the code more readable.  From EGE.
+
+Thu Sep 21 07:56:40 2000  Thomas Roessler  <roessler@guug.de>
+
+       * rfc2047.c: Make some of the code more readable.  From EGE.
+
+Fri Sep 15 09:19:29 2000  Thomas Roessler  <roessler@guug.de>
+
+       * rfc2047.c, rfc2047.h, sendlib.c: Fix some RFC2047 encoding bugs.
+
+Wed Sep 13 21:01:31 2000  Thomas Roessler  <roessler@guug.de>
+
+       * rfc2047.c:
+       Undo part of the character set canonicalization.  EGE pointed out it
+       isn't needed.
+
+       * rfc2231.c: Replace "unknown" by "unknown-8bit".
+
+       * sendlib.c: s/iconv_open/mutt_iconv_open/.  Suggested by EGE.
+
+       * charset.c:
+       Add "646" as an alias for us-ascii.  SunOS 5.8 seems to need it.
+
+       * browser.c:
+       Let the browser handle non-existent directories more gracefully.
+       From Byrial Jensen.
+
+Tue Sep 12 23:18:47 2000  Thomas Roessler  <roessler@guug.de>
+
+       * configure.in: Remove some caching.  From EGE.
+
+Mon Sep 11 10:50:37 2000  Thomas Roessler  <roessler@guug.de>
+
+       * charset.c, copy.c, mbyte.c, rfc2047.c, sendlib.c:
+       Fix some more character set glitches.
+
+Sat Sep  9 07:30:29 2000  Thomas Roessler  <roessler@guug.de>
+
+       * charset.c:
+       sizeof (dest) == 4.  I should have written dlen instead.  Noted by
+       EGE.
+
+Fri Sep  8 21:52:04 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/imap.c:
+       Brendan's version of the last fix.  I put it in since he's most
+       likely the next one to look at or change this. ,-)
+
+       * imap/imap.c:
+       Fix a silly little IMAP bug.  From Daniel Jacobowitz <dan@debian.org>.
+
+       * charset.c, protos.h, rfc2231.c, sendlib.c:
+       Add a character set comparison function.
+
+Thu Sep  7 21:56:00 2000  Thomas Roessler  <roessler@guug.de>
+
+       * charset.c:
+       Add a table of official character set names.  Data taken from
+       www.iana.org.
+
+       * rfc2231.c:
+       Detect pure 7bit data and don't encode them.  This helps a bit in
+       situations where mutt believes it has some really strange us-ascii
+       alias as the character set.
+
+       * po/es.po, po/el.po: update
+
+       * curs_lib.c:
+       Make the use of nl_langinfo(YESEXPR/NOEXPR) more robust.  Problem
+       noted by Wolfgang Baumann <baumann@zib.de>.
+
+Wed Sep  6 08:47:13 2000  Thomas Roessler  <roessler@guug.de>
+
+       * snprintf.c: Fix the MAX fix.  from Byrial Jensen.
+
+Tue Sep  5 22:14:36 2000  Thomas Roessler  <roessler@guug.de>
+
+       * init.c, muttlib.c, pgppubring.c, protos.h, snprintf.c:
+       Clean up some warning messages.  From Bob Bell.
+
+       * hook.c: Fix a segmentation fault in hook parsing.  From Bob Bell.
+
+Mon Sep  4 10:49:48 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/browse.c, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/util.c, account.c, account.h, browser.c, curs_main.c, url.c, url.h:
+       patch-bac.imapurl-4
+
+       * po/ru.po, po/da.po: update
+
+       * po/id.po: update.
+
+       * recvcmd.c: Fix a segmentation fault when replying to multiple
+       message/rfc822-type attachments.  Noted by David Champion.
+
+Fri Sep  1 08:58:39 2000  Thomas Roessler  <roessler@guug.de>
+
+       * init.c:
+       Don't mutt_pretty_mailbox when setting variables, since this may
+       badly interact with non-default settings.  Suggested by Byrial Jensen.
+
+Thu Aug 31 15:14:25 2000  Thomas Roessler  <roessler@guug.de>
+
+       * muttlib.c: patch-1.3.8.bj.pretty_mailbox.1
+
+       * doc/manual.sgml.head: patch-1.3.8.bj.manquote.1
+
+       * imap/command.c, imap/imap.c: patch-bac.command-3
+
+Wed Aug 30 21:34:42 2000  Thomas Roessler  <roessler@guug.de>
+
+       * pager.c: Fix display of backspace sequences.  From EGE.
+
+       * po/fr.po, po/de.po: update
+
+       * po/sk.po, po/sv.po, po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, ChangeLog, VERSION:
+       automatic post-release commit for mutt-1.3.8
+
+       * VERSION: ups
+
+       * po/POTFILES.in, imap/Attic/imap_ssl.c, imap/Attic/imap_ssl.h, imap/Attic/md5c.c, imap/Attic/md5.h, imap/Makefile.am, imap/util.c, ChangeLog, configure.in, curs_main.c, init.c, Makefile.am, md5c.c, md5.h, mutt_socket.c, mutt_ssl.c, mutt_ssl.h, reldate.h, VERSION:
+       SSL unification patch from Vsevolod.
+
+       * imap/command.c, imap/imap.c, imap/message.c, imap/message.h:
+       patch-bac.expunge-2
+
+       * muttlib.c: Fix mutt_prety_mailbox.  From Vsevolod.
+
+Wed Aug 30 10:08:15 2000  Thomas Roessler  <roessler@guug.de>
+
+       * VERSION: ups
+
+       * po/POTFILES.in, imap/Attic/imap_ssl.c, imap/Attic/imap_ssl.h, imap/Attic/md5c.c, imap/Attic/md5.h, imap/Makefile.am, imap/util.c, ChangeLog, configure.in, curs_main.c, init.c, Makefile.am, md5c.c, md5.h, mutt_socket.c, mutt_ssl.c, mutt_ssl.h, reldate.h, VERSION:
+       SSL unification patch from Vsevolod.
+
+       * imap/command.c, imap/imap.c, imap/message.c, imap/message.h:
+       patch-bac.expunge-2
+
+       * muttlib.c: Fix mutt_prety_mailbox.  From Vsevolod.
+
+Wed Aug 30 08:43:12 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/command.c, imap/imap.c, imap/message.c, imap/message.h:
+       patch-bac.expunge-2
+
+       * muttlib.c: Fix mutt_prety_mailbox.  From Vsevolod.
+
+Tue Aug 29 11:36:25 2000  Thomas Roessler  <roessler@guug.de>
+
+       * curs_lib.c:
+       The next version of Byrial Jensen's yesorno patch, this time without
+       a memory leak.
+
+       * acconfig.h, configure.in, curs_lib.c, main.c:
+       Use locale for yes/no expressions.
+
+Mon Aug 28 13:14:55 2000  Thomas Roessler  <roessler@guug.de>
+
+       * rfc2231.c: Little fix from EGE.
+
+       * po/ru.po: Update from Vsevolod.
+
+       * complete.c: From: EGE
+
+       Fix a buffer overrun in complete.c.
+
+       * imap/auth_sasl.c, imap/command.c, imap/imap_private.h, muttlib.c:
+       From: Brendan Cully <brendan@kublai.com>
+
+       The attached small patch adjusts mutt_pretty_mailbox to handle
+       URLs.
+
+       * browser.c, curs_lib.c, hdrline.c, protos.h, recvattach.c:
+       From: Edmund GRIMLEY EVANS <edmundo@rano.org>
+
+       This patch moves hdr_format_s from hdrline.c to curs_lib.c and renames
+       it to mutt_format_s. The function is then used in various places in
+       browser.c and recvattach.c where previously there was "%%%ss".
+
+       * rfc2047.c, rfc2047.h, rfc2231.c, rfc2231.h, sendlib.c:
+       Do character set selection for RFC2231 encodings.  From EGE, but
+       with choose_charset renamed to mutt_choose_charset.
+
+       * mbyte.c, protos.h, utf8.c, wcwidth.c: From: edmundo@rano.org (EGE)
+
+       This is the patch TAKIZAWA Takashi and I came up with in the end.
+
+       When the Charset is euc-jp or shift_jis, iconv is used for mbrtowc
+       and wcrtomb. The worst part is mbrtowc_iconv(), where I attempted to
+       make mbrtowc both restartable (it can process part of multibyte
+       character) and fast in the case where there is nothing left over
+       from a previous character. Also I try to make no assumptions about
+       how those character sets work, which is easy, because I know very
+       little about them ...
+
+       People who don't use one of those two stateless Japanese display
+       charsets shouldn't be affected. People whose systems provide the
+       wchar_t functions should be even less affected, because they don't
+       even get this code in their binary.
+
+Fri Aug 25 06:28:24 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/imap.c, imap/imap_ssl.c, imap/imap_ssl.h, imap/util.c, account.c, account.h, browser.c, mutt_socket.c, mx.c, url.c, url.h:
+       patch-bac.imapurl-2, with small modifications.
+
+Tue Aug 22 22:23:10 2000  Thomas Roessler  <roessler@guug.de>
+
+       * muttlib.c: Fix #251, from Brendan.
+
+       * main.c, Makefile.am, parse.c, protos.h, url.c, url.h:
+       Add an URL parser, and support for mailto URLs.
+
+       * doc/manual.sgml.head: Minor fixes from Will Fiveash.
+
+       * po/ru.po: update
+
+       * hdrline.c: Fix %B in index_format.
+
+Mon Aug 21 19:25:26 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/browse.c, imap/imap.c, muttlib.c, mutt_socket.c:
+       patch-bac.parsepath-2
+
+       * doc/manual.sgml.head, doc/manual.sgml.tail:
+       Documentation patch from Lars Hecking.
+
+       * imap/imap.h, imap/imap_private.h, imap/message.c, imap/util.c, imap/browse.c, imap/command.c, imap/imap.c, doc/manual.sgml.head, browser.c, browser.h, buffy.c, functions.h, globals.h, init.h, OPS:
+       patch-bac.createplus-1
+
+       * imap/auth_anon.c, imap/auth_cram.c, imap/auth_gss.c, imap/auth_login.c, imap/auth_sasl.c, imap/browse.c, imap/command.c, imap/imap.c, imap/imap_private.h, imap/message.c:
+       patch-bac.command-2
+
+Thu Aug 17 06:06:02 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/zh_CN.GB2312.po, configure.in: Adding zh_CN.GB2312 translation.
+
+       * imap/Makefile.am, doc/Makefile.in, mutt_socket.c, mx.c:
+       Random cleanup from Brendan Cully.
+
+       * hdrline.c: Fix justification of number formats.  (EGE)
+
+Tue Aug 15 17:21:19 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/ru.po: update
+
+       * mbyte.c, pager.c, protos.h: Another charset fix from EGE.
+
+Thu Aug 10 15:48:13 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/Makefile.am: Fix from Brendan Cully.
+
+       * doc/mutt.man, doc/muttrc.man.tail: More minor fixes.
+
+       * doc/mutt.man: Document $MAILDIR.
+
+       * init.c:
+       Tell mutt about the MAILDIR environment variable DJB talks about in
+       maildir (5).
+
+       * doc/muttbug.man: Fix a typo.
+
+       * doc/mbox.man: fix some typos.
+
+Wed Aug  9 21:14:35 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/Makefile.in, doc/mbox.man: Install mbox (5), and fix a typo.
+
+       * doc/mbox.man:
+       Document the mbox format in a manual page.  There may be some need
+       for this.
+
+       * configure.in, init.c, main.c, Makefile.am:
+       Minor portability and compilation fixes.
+
+Tue Aug  8 18:17:54 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/POTFILES.in: Some files were missing.  From Vsevolod Volkov.
+
+       * imap/command.c, imap/imap.c, imap/imap_private.h, imap/Makefile.am, imap/message.c, init.c, mutt_socket.c, mx.c:
+       * handles expunged messages better. Previously mutt's state was only
+         updated when syncing the mailbox. This was the reason for Bob Bell's
+         segfault when manipulating mailboxes with multiple simultaneous
+         clients.
+       * makes a small adjustment for Sam's weird Courier server, which
+         returns an OK FETCH completed response even when FETCH fails. I
+         should probably report that behaviour to him as a bug, though.
+       * renames IMAP_REOPEN_PENDING to IMAP_EXPUNGE_PENDING
+       * gets rid of the _("Closing mailbox...") message, which was obscuring
+         the status updates.
+       * clears some spurious mutt_clear_error calls in imap_cmd_finish.
+       * makes socket reads and writes check that they have an open
+         connection. Shouldn't be necessary (and such calls are logged), but
+         can happen currently.
+       * Some SASL vs regular authenticator tweaks in the imap Makefile.
+
+       (From Brendan Cully.)
+
+Mon Aug  7 08:31:36 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/Makefile.in.in, imap/Makefile.am, configure.in, Makefile.am, mapping.h, sort.h:
+       Cross compilation patches from Rüdiger Kuhlmann
+       <ruediger.kuhlmann@stud.uni-karlsruhe.de>.
+
+Sun Aug  6 14:35:15 2000  Thomas Roessler  <roessler@guug.de>
+
+       * curs_lib.c:
+       Return an exit value of 1 if mutt is left via ctrl-c.  From Andre
+       Albsmeier <andre.albsmeier@mchp.siemens.de>.
+
+Sat Aug  5 17:50:03 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/imap.c, imap/imap_private.h, imap/message.c, imap/auth_anon.c, imap/auth_cram.c, imap/auth_gss.c, imap/auth_login.c, imap/auth_sasl.c, imap/browse.c, imap/command.c, imap/Makefile.am, mutt_socket.c:
+       Unified IMAP command code.
+
+       * doc/manual.sgml.head:
+       Fix keyboard binding documentation.  From Thomas Schultz
+       <tststs@gmx.de>.
+
+Fri Aug  4 21:47:11 2000  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c: Fix a character set encoding bug. From EGE.
+
+       * imap/auth_sasl.c, imap/imap_ssl.c, doc/manual.sgml.head, account.c, mutt_sasl.c, mutt_sasl.h, mutt_socket.c, mutt_socket.h:
+       SASL patch from Brendan Cully.
+
+Thu Aug  3 22:08:13 2000  Thomas Roessler  <roessler@guug.de>
+
+       * charset.c: fix a segmentation fault.
+
+       * po/eo.po, po/sv.po: update.
+
+       * po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/fr.po, po/gl.po, po/id.po, po/it.po, imap/Makefile.am, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, reldate.h, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.3.7
+
+       * sendlib.c:
+       Use a correct Envelope from when bouncing with $envelope_from enabled.
+
+       * imap/auth_sasl.c, imap/BUGS, imap/imap.c, imap/imap_ssl.c, mutt_sasl.c:
+       More IMAP fixes from Brendan.
+
+Thu Aug  3 08:24:55 2000  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c:
+       Use a correct Envelope from when bouncing with $envelope_from enabled.
+
+       * imap/auth_sasl.c, imap/BUGS, imap/imap.c, imap/imap_ssl.c, mutt_sasl.c:
+       More IMAP fixes from Brendan.
+
+Thu Aug  3 08:24:55 2000  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c:
+       Use a correct Envelope from when bouncing with $envelope_from enabled.
+
+       * imap/auth_sasl.c, imap/BUGS, imap/imap.c, imap/imap_ssl.c, mutt_sasl.c:
+       More IMAP fixes from Brendan.
+
+Wed Aug  2 18:03:21 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/it.po: update
+
+Tue Aug  1 18:04:42 2000  Thomas Roessler  <roessler@guug.de>
+
+       * mx.c: Fix from BC
+
+       * imap/auth.c, imap/auth_gss.c, imap/auth_sasl.c, imap/message.c:
+       Brendan's latest patches.
+
+Mon Jul 31 10:49:00 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/fr.po: update.
+
+       * m4/gettext.m4, imap/auth_anon.c, imap/auth.c, imap/auth_cram.c, imap/auth_gss.c, imap/auth.h, imap/auth_login.c, imap/auth_sasl.c, imap/command.c, imap/imap.c, imap/imap_private.h, imap/Makefile.am, acconfig.h, account.c, account.h, configure.in, globals.h, init.h, main.c, Makefile.am, mutt_sasl.c, mutt_sasl.h, mutt_socket.c, mutt_socket.h:
+       Brendan Cully's SASL patch.  I hope I didn't miss any files.
+
+Sat Jul 29 16:33:53 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/id.po: update.
+
+       * imap/README: updated readme file.
+
+       * Makefile.am:
+       Make sure checktypes and makedoc don't depend on the intl library.
+
+       * po/de.po: update.
+
+Fri Jul 28 19:00:31 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/cs.po, po/da.po, po/de.po, po/el.po, ChangeLog, reldate.h, VERSION:
+       automatic post-release commit for mutt-1.3.6
+
+       * Makefile.am: parse.h no longer exists, so don't try to distribute it.
+
+       * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/ko.po, po/nl.po, po/pl.po, po/gl.po, po/id.po, po/it.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/cs.po, po/da.po, po/de.po, reldate.h, ChangeLog, VERSION:
+       automatic post-release commit for mutt-1.2.5
+
+       * imap/imap.c, imap/imap_private.h, imap/message.c:
+       Use UIDs instead of sequence numbers in IMAP.  (Brendan)
+
+Fri Jul 28 18:57:31 2000  Thomas Roessler  <roessler@guug.de>
+
+       * Makefile.am: parse.h no longer exists, so don't try to distribute it.
+
+       * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/ko.po, po/nl.po, po/pl.po, po/gl.po, po/id.po, po/it.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/cs.po, po/da.po, po/de.po, reldate.h, ChangeLog, VERSION:
+       automatic post-release commit for mutt-1.2.5
+
+       * imap/imap.c, imap/imap_private.h, imap/message.c:
+       Use UIDs instead of sequence numbers in IMAP.  (Brendan)
+
+Fri Jul 28 18:51:38 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/ko.po, po/nl.po, po/pl.po, po/gl.po, po/id.po, po/it.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/cs.po, po/da.po, po/de.po, reldate.h, ChangeLog, VERSION:
+       automatic post-release commit for mutt-1.2.5
+
+       * imap/imap.c, imap/imap_private.h, imap/message.c:
+       Use UIDs instead of sequence numbers in IMAP.  (Brendan)
+
+       * imap/imap.c, imap/imap_private.h, imap/message.c, imap/message.h, imap/command.c, mutt.h, muttlib.c, mx.c:
+       Handle expunged messages.  From Brendan Cully.
+
+Wed Jul 26 09:30:01 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.head: Nits from Michael Sobolev.
+
+Tue Jul 25 16:35:48 2000  Thomas Roessler  <roessler@guug.de>
+
+       * Makefile.am: Include the muttbug wrapper with the distribution.
+
+       * doc/Makefile.in: Install muttbug.man als flea.1.
+
+       * doc/muttbug.man, doc/mutt.man, main.c, Makefile.am, muttbug:
+       Install muttbug(1) as flea(1), and adjust the documentation
+       accordingly.  Note: Typing muttbug will still work.
+
+       * doc/muttbug.man: More tiny fixes.
+
+       * doc/muttbug.man:
+       Fix some typos.  In particular, it's bug tracking system, not buck
+       tracking system.  Oh well.
+
+       * doc/Makefile.in, doc/muttbug.man, doc/mutt.man:
+       muttbug(1) has a manual page of it's own now.
+
+       * muttbug.sh.in: Fix a little bug concerning version numbers.
+
+       * Makefile.am: The warning about README.UPGRADE can go.
+
+       * doc/mutt.man: Mention the bug tracking system.
+
+       * INSTALL:
+       Mention that mutt needs an iconv implementation, and point users to
+       libiconv.
+
+       * INSTALL: Mention OpenBSD
+
+       * Makefile.am: Remove types.h at "make clean" time.
+
+       * curs_main.c: Fix a segmentation fault in the index.
+
+       * curs_main.c: Try to fix a segmentation fault in the index.
+
+Mon Jul 24 07:48:53 2000  Thomas Roessler  <roessler@guug.de>
+
+       * browser.h:
+       make bit types unsigned.  From albert chin <china@thewrittenword.com>.
+
+       * curs_lib.c, hdrline.c, help.c, mbyte.c, mbyte.h, menu.c:
+       Replace wctomb and mbtowc with wcrtomb and mbrtowc.  From TAKIZAWA
+       Takashi <taki@luna.email.ne.jp>, with small changes from Edmund
+       Grimley Evans.
+
+Sun Jul 23 21:47:01 2000  Thomas Roessler  <roessler@guug.de>
+
+       * menu.c: Fix #108, from Gero Treuner.
+
+       * configure.in, resize.c: sys/ioctl.h vs. ioctl.h.  From Sam Roberts.
+
+       * rfc2231.c:
+       Fix an obvious bug which prevented rfc2231 _encoding_ support from
+       working.
+
+Sat Jul 22 09:01:43 2000  Thomas Roessler  <roessler@guug.de>
+
+       * configure.in, mutt.h: Some more QNX compiling aides.
+
+Fri Jul 21 07:32:12 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/md5.h, checktypes.c, Makefile.am:
+       Try to be smart about integer types.
+
+       * imap/imap.c: Fix imap_passive.  From Brendan Cully.
+
+       * contrib/Makefile.in: Fix #150.  From Brendan Cully.
+
+Thu Jul 20 17:51:52 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/devel-notes.txt: Typo.
+
+       * imap/browse.c, imap/command.c, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/util.c, mutt_socket.c, mutt_socket.h, mx.c, pop.c:
+       Another IMAP patch from Brendan.
+
+       * imap/util.c: quick hack against mx->mbox being NULL.
+
+       * imap/BUGS, imap/imap.c, imap/imap.h, imap/util.c, postpone.c:
+       patch-bac.postpone-2
+
+       * pop.c: Use shared socket code, from Vsevolod Volkov.
+
+Wed Jul 19 10:21:57 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/POTFILES.in, imap/Attic/imap_socket.h, imap/Attic/socket.c, imap/auth.c, imap/auth_gss.c, imap/browse.c, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/imap_ssl.c, imap/imap_ssl.h, imap/Makefile.am, imap/message.c, imap/util.c, acconfig.h, account.c, account.h, browser.c, configure.in, gettext.c, globals.h, init.c, init.h, Makefile.am, mutt_socket.c, mutt_socket.h:
+       IMAP socket moves by Brendan Cully, with a fix from Tommi
+       Komulainen, and most likely based on input from Vsevolod Voykov
+       (sp?).
+
+       * imap/util.c:
+       Fix more possible IMAP memory corruption.  From Brendan Cully.
+
+       * imap/util.c:
+       Fix possible memory corruption in stable.  From Brendan Cully.
+
+       * imap/Attic/socket.c, imap/imap_private.h, imap/message.c, imap/imap.c:
+       Backport various IMAP bug-fixes to stable.  From Brendan Cully.
+
+Tue Jul 18 14:38:13 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/Attic/socket.c, imap/auth.c, imap/auth_gss.c, imap/browse.c, imap/command.c, imap/imap.c, imap/imap_private.h, imap/message.c:
+       More IMAP clean-up from Brendan Cully.
+
+       * imap/Attic/socket.c, imap/imap.c, imap/imap_private.h, imap/message.c, imap/utf7.c:
+       IMAP fixes from Brendan Cully.
+
+       * init.h: Documentation fix.
+
+Mon Jul 17 18:08:27 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/message.c: Fix possible heap corruption.  From Brendan Cully.
+
+       * imap/utf7.c: Name changes left out by EGE's patch.
+
+       * imap/util.c, imap/imap_private.h: imap/UTF7 related fixes from EGE.
+
+       * curs_main.c: Fix #192.
+
+Sun Jul 16 15:35:14 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/browse.c, imap/imap.c, imap/imap_private.h, imap/Makefile.am, imap/message.c, imap/utf7.c, imap/util.c:
+       Support modified UTF-7 in folder names.  From Edmund Grimley Evans,
+       modified by Brendan Cully.
+
+       * handler.c: Another qp fix.
+
+       * handler.c:
+       More qp decoder modifications: We should handle multibyte characters
+       spanning soft line breaks.
+
+       * handler.c:
+       Rewrite the quoted-printable decoder so it properly chops off
+       trailing white space.  Problem noted by Byrial Jensen.
+
+Sat Jul 15 06:51:47 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/Attic/socket.c: Add a message that we are looking up a host.
+
+Fri Jul 14 15:03:43 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/message.c, imap/message.h: Brendan's latest IMAP changes.
+
+       * README.SSL:
+       Tommi Komulainen's entropy gathering patch - documentation.
+
+Wed Jul 12 14:17:46 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/cs.po: update.
+
+       * imap/imap_ssl.c: Entropy gathering fixes.
+
+       * configure.in: Re-apply the iconv patch from vvv.
+
+       * configure.in: undo the enable-external-dotlock patch.
+
+       * handler.c:
+       Initialize a variable in order to avoid a segmentation fault.  From
+       Aaron Schrab.
+
+Tue Jul 11 20:38:49 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/Attic/socket.c, imap/imap.c, imap/imap_private.h:
+       Unify logout stuff in _one_ function.  From Vsevolod Volkov.
+
+       * imap/message.c:
+       Disable a bug work-around which actually breaks things.
+
+       * configure.in: Typo, noted by Brad <brad@comstyle.com>.
+
+Mon Jul 10 19:52:12 2000  Thomas Roessler  <roessler@guug.de>
+
+       * main.c: Typo.
+
+       * po/id.po: update.
+
+       * rfc2047.c:
+       Fix some possible NULL pointer deferences in the RFC2047 code.
+
+       * imap/Attic/socket.c, imap/command.c, imap/imap.c, imap/message.c, browser.c, pgpkey.c, pop.c, query.c, remailer.c:
+       Fix a bunch of cases where format parameters were missing from calls
+       to mutt_message and mutt_error.
+
+       * imap/command.c, imap/imap.c, imap/message.c, browser.c, pgpkey.c, pop.c, query.c, remailer.c:
+       [stable] Fix a bunch of cases where format parameters were missing
+       to calls of mutt_error and mutt_message.
+
+       * po/ru.po, po/de.po, po/da.po: update.
+
+       * po/da.po: Update.
+
+       * acconfig.h, charset.c, configure.in, INSTALL, main.c:
+       Some changes from EGE.
+
+Fri Jul  7 15:12:37 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/fr.po: update
+
+       * attach.c, Attic/parse.h, copy.c, editmsg.c, from.c, mbox.c, parse.c, pgp.c, protos.h:
+       Fix #185:  is_from would return 0 (i.e., error) when parsing Jan 1
+       1970 12:00 - apparently, this point of time occurs on real mail
+       folders.
+
+Thu Jul  6 23:08:39 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/nl.po, po/pl.po, po/it.po, po/ko.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/da.po, po/de.po, po/el.po, po/eo.po, ChangeLog, po/cs.po, VERSION:
+       automatic post-release commit for mutt-1.2.4
+
+       * muttlib.c: ups, this should be fixed in stable.
+
+       * po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/ko.po, po/nl.po, po/pl.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/cs.po, po/da.po, po/de.po, po/el.po, reldate.h, ChangeLog, VERSION:
+       automatic post-release commit for mutt-1.3.5
+
+       * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/ko.po, po/nl.po, po/pl.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/el.po, po/eo.po, po/es.po, po/cs.po, po/da.po, po/de.po, reldate.h, ChangeLog, VERSION:
+       automatic post-release commit for mutt-1.2.3
+
+       * po/fr.po: update.
+
+Thu Jul  6 22:34:55 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/ko.po, po/nl.po, po/pl.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/el.po, po/eo.po, po/es.po, po/cs.po, po/da.po, po/de.po, reldate.h, ChangeLog, VERSION:
+       automatic post-release commit for mutt-1.2.3
+
+       * po/fr.po: update.
+
+       * imap/auth.c, imap/auth_gss.c, imap/browse.c, imap/command.c, imap/imap.c, imap/imap_private.h, imap/imap_socket.h, imap/message.c, imap/socket.c:
+       More IMAP clean-up.
+
+       * imap/imap_private.h, imap/imap_socket.h, imap/message.c, imap/socket.c, imap/util.c, imap/browse.c, imap/command.c, imap/imap.c:
+       More IMAP fixes from Brendan Cully.
+
+Wed Jul  5 14:39:14 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/socket.c: Fix the Fix.  From TK.
+
+       * imap/imap_ssl.c, imap/socket.c:
+       From: Tommi Komulainen <Tommi.Komulainen@iki.fi>
+
+       - imap_logout_all assumed every connection with descriptor value !=
+         0 to be ready for reading/writing. Unfortunately when the
+         descriptor was closed, conn->fd remained untouched. This is why
+         mutt segfaulted if IMAP login was aborted with ^G.
+
+       - ssl_socket_close was called without calling ssl_socket_open first.
+         This caused a segfault because conn->sockdata was NULL. Apparently
+         there was also a memory leak, because conn->sockdata was never
+         free'd :-]
+
+       * imap/auth.c, imap/BUGS, imap/imap.c, imap/socket.c, imap/TODO:
+       IMAP cosmetics from Brendan Cully.
+
+Tue Jul  4 17:59:10 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.head:
+       slight documentation imrpovement from Will Fiveash.
+
+Mon Jul  3 15:26:22 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/de.po: update
+
+       * imap/BUGS, imap/command.c, imap/imap.c, imap/imap.h, imap/imap_socket.h, imap/socket.c, imap/util.c, curs_main.c:
+       IMAP logout patch from Brendan Cully.
+
+       * po/id.po: update
+
+       * po/id.po: update.
+
+       * rfc2047.c: "Where have all the headers gone" fix from EGE.
+
+       * sendlib.c: utf8 -> utf8 fix (From EGE).
+
+       * rfc2047.c: RFC 2047 patch from EGE.
+
+Fri Jun 30 08:28:56 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/pl.po: fix a format.
+
+       * sendlib.c: Character set fix from EGE.
+
+Tue Jun 27 22:28:01 2000  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c: minor change from EGE.
+
+       * main.c, rfc2047.c:
+       Cosmetics.  No, I didn't touch the word-wrap code. ;-)
+
+Mon Jun 26 23:10:26 2000  Thomas Roessler  <roessler@guug.de>
+
+       * muttlib.c:
+       Fix a possible segfault in mutt_expand_folder. Noted by AMK; [stable].
+
+       * muttlib.c:
+       Fix a possible segmentation fault in mutt_expand_path.  Noted by
+       Andreas M. Kirchwitz.
+
+       * doc/Makefile.in, contrib/Makefile.in: "make check" cosmetics.
+
+       * contrib/sample.muttrc-tlr: update.
+
+       * configure.in: Iconv detection patch.  From Lars Hecking.
+
+       * color.c: Fix #173.  From Roland Rosenfeld.
+
+Thu Jun 22 23:18:36 2000  Thomas Roessler  <roessler@guug.de>
+
+       * muttlib.c:
+       Avoid crashing when forwarding message/rfc822-type attachments.
+
+       * Makefile.am, prepare: Lars Hecking's build process patch for stable.
+
+       * rfc822.c: Fix stack corruption in the RFC822 parser.  Noted by Ari
+       Gordon-Schlosberg <ari@heavyware.com>.
+
+       * rfc822.c:
+       Fix stack corruption in the RFC822 parser.  Problem noted by Ari
+       Gordon-Schlosberg <ari@heavyware.com>.
+
+       * recvattach.c:
+       Merge two almost-identical string constants.  From Byrial.
+
+Wed Jun 21 19:23:23 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/auth_gss.c: More debug code which needs #ifdefs.
+
+       * imap/auth_gss.c: More debugging code which needs #ifdefs.
+
+       * po/eo.po: update.
+
+       * Makefile.am, prepare:
+       Work-around for keymap_defs and other dependency problems.  From
+       Lars Hecking.
+
+       * muttlib.c: Fix ~logname expansion for stable.
+
+       * muttlib.c: Fix ~logname expansion.
+
+       * README: Remove explicit list of mirrors, and refer to download.html.
+
+       * mbox.c: Fix another mbox synch problem.
+
+       * mbox.c: Fix another bug in mbox synching.
+
+       * postpone.c: Some more character set cleanup,.
+
+       * commands.c, compose.c, muttlib.c, pgpkey.c, postpone.c, protos.h, recvattach.c, send.c, sendlib.c:
+       More character set clean-up.
+
+       * postpone.c:
+       Improve character set handling when postponing messages.  This patch
+       may lead to information loss under very special circumstances.
+
+       * muttlib.c, protos.h: Remove unused mutt_dup_body () function.
+
+       * compose.c, pgpkey.c, protos.h, recvattach.c, send.c, sendlib.c:
+       Fix character set selection.  Postponing and recalling messages
+       should work again, now.
+
+       * postpone.c, sendlib.c: Fix a file descriptor leak in sendlib.c.
+
+       * main.c:
+       patch-1.3.2.tbm.lastfolder, from Martin Michlmayr <tbm@cyrius.com>.
+
+       * commands.c, hook.c, protos.h, recvattach.c, recvcmd.c, send.c:
+       Apply message-hook to more commands, and make it more useful by
+       permitting the "~h" and "~b" pattern specifiers.  Bad enough, this
+       removes message-hook abilities from the receive-attachment menu.
+
+Tue Jun 20 22:23:37 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/it.po, po/ko.po, po/nl.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/el.po, po/eo.po, po/cs.po, po/da.po, po/de.po, ChangeLog, reldate.h, VERSION:
+       automatic post-release commit for mutt-1.2.2
+
+       * build-release:
+       Add a "make" call, so build-release will also work from a source
+       tree which hasn't been built recently.
+
+       * commands.c: Do some comparisons case-insensitive.
+
+       * po/ru.po: update.
+
+       * doc/muttrc.man.head: s/display-hook/message-hook/
+
+       * po/de.po:
+       Fix a misleading fuzzy translation about PGP signature validity.
+       From Roland Rosenfeld.
+
+       * imap/imap.c: Don't use debuglevel unless DEBUG is defined.  Noted by
+       china@thewrittenword.com.
+
+       * imap/imap.c:
+       Only use debuglevel if DEBUG is defined.  Noted by Albert Chin
+       <china@thewrittenword.com>,
+
+       * po/fr.po: update.
+
+Mon Jun 19 21:13:19 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/devel-notes.txt, doc/manual.sgml.head, init.h, makedoc.c:
+       patch-1.3.3.bj.docref.1
+
+       * build-release: Make sure m4/Makefile is _really_ rebuilt.
+
+       * po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/cs.po, ChangeLog, reldate.h, VERSION:
+       automatic post-release commit for mutt-1.2.1
+
+       * doc/manual.sgml.head: Fix some more mentions of display-hook.
+
+       * po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, ChangeLog, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, reldate.h, VERSION:
+       automatic post-release commit for mutt-1.3.4
+
+       * compose.c: No need to include iconv.h.
+
+       * po/da.po: update.
+
+       * po/ru.po: update
+
+Mon Jun 19 08:56:57 2000  Thomas Roessler  <roessler@guug.de>
+
+       * compose.c: No need to include iconv.h.
+
+       * po/da.po: update.
+
+       * po/ru.po: update
+
+Sat Jun 17 08:07:36 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/imap_ssl.c: Certificate verification fix from Tommi Komulainen.
+
+       * imap/imap_ssl.c: SSL fix.
+
+       * po/ru.po: upate
+
+Fri Jun 16 10:21:34 2000  Thomas Roessler  <roessler@guug.de>
+
+       * OPS, commands.c, compose.c, functions.h, mutt.h, sendlib.c:
+       patch-1.3.3.tlr.change_charset.1
+
+       * po/ru.po: nit.
+
+Thu Jun 15 21:37:07 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.head, doc/muttrc.man.head, commands.c, hook.c, init.h, mutt.h, recvcmd.c, send.c:
+       patch-1.3.3.tlr.message_hook.1
+
+       * mutt.h, sendlib.c: patch-1.3.3.tlr.content_info.1
+
+       * imap/imap.c: shut up the compiler.
+
+       * po/ru.po, commands.c, init.h: nits.
+
+       * commands.c, globals.h, init.h: patch-1.2.bbell.display_filter.2.
+
+       * complete.c:
+       patch-1.3.2.bbell.complete.1 - autocomplete "!", which is helpful
+       in certain IMAP contexts.
+
+       * copy.c, mbox.c, mh.c, mx.c:
+       [stable] Prevent data corruption when the temporary space runs full.
+       Backport from unstable.
+
+       * po/el.po, po/fr.po: updates.
+
+       * po/ru.po: update.
+
+       * rfc2047.c, sendlib.c, copy.c, handler.c:
+       Avoid dumping core when Charset isn't set.
+
+       * init.h: Little documentation fix from Aaron Schrab.
+
+Wed Jun 14 09:23:45 2000  Thomas Roessler  <roessler@guug.de>
+
+       * OPS, charset.c, charset.h, compose.c, functions.h, handler.c:
+       Remove recode-attachment, and the "decoder" API.  (EGE)
+
+       * gettext.c: Make sure --disable-nls works.  (EGE)
+
+Tue Jun 13 20:36:33 2000  Thomas Roessler  <roessler@guug.de>
+
+       * init.h, mutt.h, sendlib.c: EGE's latest send-charset patch.
+
+       * m4/curslib.m4:
+       New file, contains Tom Dickey's CF_CURSES_LIBS macro from lynx.
+
+       * configure.in:
+       Use CF_CURSES_LIBS macro for better detection of platform-specific
+       curses libraries.  From Lars Hecking.
+
+       * main.c: Inform us about ICONV_NOTRANS.  From EGE.
+
+       * configure.in: iconv detection.  From EGE.
+
+       * commands.c:
+       Only display PGP signature verification status if verification was
+       tried.
+
+Mon Jun 12 07:02:42 2000  Thomas Roessler  <roessler@guug.de>
+
+       * configure.in: A new check for working wchar functions.
+
+Sun Jun 11 19:05:12 2000  Thomas Roessler  <roessler@guug.de>
+
+       * mh.c, mx.c:
+       Fix some issues with synching of maildir/mh folders.  Problems noted
+       by Byrial Jensen.
+
+Fri Jun  9 17:42:14 2000  Thomas Roessler  <roessler@guug.de>
+
+       * pattern.c:
+       Force decimal parsing on dates, so 09 is parsed as 9, and not as
+       "invalid".
+
+       * imap/imap_ssl.c: Fix a mix-up.
+
+       * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, VERSION, po/cs.po, po/da.po, ChangeLog, reldate.h:
+       automatic post-release commit for mutt-1.3.3
+
+Fri Jun  9 11:34:26 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po,
+       po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po,
+       po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po,
+       po/pt_BR.po, po/cs.po, reldate.h, ChangeLog: automatic
+       post-release commit for mutt-1.3.3
+
+       * po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po,
+       po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po,
+       po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po,
+       po/pt_BR.po, VERSION, po/cs.po, reldate.h, ChangeLog:
+       automatic post-release commit for mutt-1.3.3
+
+       * charset.c, init.c: Fix some typos in the nl_langinfo stuff.
+
+Fri Jun  9 05:51:33 2000  Thomas Roessler  <roessler@guug.de>
+
+       * charset.c, init.c: Fix some typos in the nl_langinfo stuff.
+
+       * rfc2047.c: Latest patch from EGE.
+
+Thu Jun  8 21:44:14 2000  Thomas Roessler  <roessler@guug.de>
+
+       * copy.c, mbox.c:
+       This patch should fix the mailbox corruption various people observed.
+
+       * charset.c, charset.h, init.c:
+       Fix up the value returned by nl_langinfo(CODESET).
+
+       * mbox.c: Improve error reporting with mbox folders a bit.
+
+       * send.c: patch-1.2.bj.ed_mtime.1
+
+       * Makefile.am, acconfig.h, configure.in, main.c, mbyte.c:
+       Removing the built-in charset support.
+
+       * doc/muttrc.man.head: one-character typo.
+
+       * imap/imap_ssl.c:
+       Fix #157.  From Enrik Berkhan <Enrik.Berkhan@fun.de>.
+
+       * imap/imap_ssl.c:
+       [stable] Fix #157.  From Enrik Berkhan <Enrik.Berkhan@fun.de>.
+
+       * README.SSL, init.h, mutt.h, imap/imap_ssl.c:
+       [stable] patch-1.3.2.tl.sslcerts.1.
+
+       * charset.c:
+       Don't return data on the stack.  Noted by "Andrew W. Nosenko"
+       <awn@bcs.zp.ua>.
+
+       * po/sv.po: update.
+
+Sun Jun  4 18:18:56 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.head: Nits from Mikko Hänninen.
+
+Fri Jun  2 10:05:41 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/imap.h, pgp.c: Fix #152.
+
+Tue May 30 12:52:41 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/pl.po: update
+
+Mon May 29 22:34:12 2000  Thomas Roessler  <roessler@guug.de>
+
+       * rfc2047.c, rfc2047.h, send.c, sendlib.c:
+       Edmund's latest RFC2047 encoding update.
+
+Sun May 28 20:32:05 2000  Thomas Roessler  <roessler@guug.de>
+
+       * commands.c:
+       Don't bother the user with messages about PGP signature verification
+       when there is no PGP stuff about the message.
+
+       * README.SSL, init.h, mutt.h:
+       SSL certificate verification fixes from Tommi Komulainen.
+
+       * imap/imap_ssl.c:
+       SSL certificate verification fix from Tommi Komulainen.
+
+       * imap/command.c:
+       [stable] Handle connection take-down by servers more graciously.
+       From Patrick Caulfield.
+
+       * doc/manual.sgml.head, contrib/pgp2.rc, contrib/pgp5.rc, commands.c, init.h, pgp.c, pgp.h:
+       Modified version of Byrial Jensen's signature verification patch.
+
+Thu May 25 12:21:29 2000  Thomas Roessler  <roessler@guug.de>
+
+       * pgp.c: Use strftime for time indications with PGP verification.
+
+       * curs_lib.c, mbyte.c: Somewhat different sigsegv fix suggested by EGE.
+
+       * mbyte.c: wctomb(0,wc) is needed to work for bounds checking.
+
+       * mutt.h: Include stdlib.h from mutt.h.
+
+       * makedoc.c, init.h: Minor fixes from Byrial.
+
+       * doc/manual.sgml.head: typo.
+
+       * doc/devel-notes.txt, init.h, makedoc.c:
+       Documentation beautification patch from Byrial Jensen.  Thanks!
+
+Wed May 24 19:20:07 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/ru.po: Fixes #143.
+
+       * po/ru.po: Some fixes - #143.
+
+       * charset.c, charset.h, compose.c, gnupgparse.c:
+       Make charset-hook work with an external iconv implementation.
+
+       * imap/command.c:
+       Handle disconnects more gracefully.  From Patrick Caulfield
+       <patrick@sco.com>.
+
+       * config.guess, config.sub:
+       [stable] Latest versions from ftp.gnu.org/pub/gnu/config
+
+       * config.guess, config.sub:
+       Latest versions from ftp.gnu.org/pub/gnu/config.
+
+Tue May 23 17:16:46 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, ChangeLog, VERSION, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, reldate.h:
+       automatic post-release commit for mutt-1.3.2
+
+       * contrib/gpg.rc: Make this work on QNX.
+
+       * contrib/gpg.rc:
+       Change suggested by Sam Roberts <sroberts@uniserve.com> to make this
+       work on QNX.
+
+Tue May 23 08:15:02 2000  Thomas Roessler  <roessler@guug.de>
+
+       * contrib/gpg.rc: Make this work on QNX.
+
+       * contrib/gpg.rc:
+       Change suggested by Sam Roberts <sroberts@uniserve.com> to make this
+       work on QNX.
+
+Mon May 22 16:15:35 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/pl.po: update
+
+       * rfc2047.c: Fix a stupid segmentation fault.
+
+       * lib.c: cosmetics.
+
+       * rfc2047.c: Fix a memory leak.
+
+       * charset.c, lib.c, lib.h, protos.h: Add mutt_str_adjust ().
+
+       * parse.c: Fix a possible cause for heap corruption.
+
+       * po/de.po: update.
+
+       * charset.c, gettext.c: Make mutt_gettext () a bit more compact.
+
+Sun May 21 18:45:15 2000  Thomas Roessler  <roessler@guug.de>
+
+       * mbyte.h: Small fix from EGE.
+
+       * sendlib.c:
+       Some fixes so ISO-2022-JP* works with mutt.  Mostly from TAKIZAWA
+       Takashi <taki@luna.email.ne.jp>.
+
+       * muttlib.c: Comment a bit of code.
+
+Sat May 20 18:16:18 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/fr.po: update.
+
+       * charset.c, charset.h, curs_lib.c, rfc2047.c, rfc2231.c:
+       String conversion patch from EGE.
+
+       * doc/manual.sgml.head, hook.c:
+       Second version of Byrial's display-hook patch.
+
+       * po/uk.po, po/zh_TW.Big5.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, ChangeLog, VERSION, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, reldate.h:
+       automatic post-release commit for mutt-1.3.1
+
+       * doc/muttrc.man.head: Document display-hook in the manual page.
+
+       * commands.c, hook.c, init.h, mutt.h, protos.h, send.c:
+       Add a display-hook command.  From Byrial Jensen.
+
+       * alias.c, browser.c, init.c, lib.c, mutt.h, muttlib.c, protos.h:
+       Add mutt_gecos_name function which centrally handles the GECOS
+       processing.
+
+       * imap/imap.c:
+       Shut up some warnings.  We may have to think about mutt_stristr again.
+
+       * configure.in:
+       Verify that regmatch_t has offsets, and not only pointers.  From Sam
+       Roberts <sroberts@uniserve.com>.
+
+       * configure.in:
+       Don't look for curses in /usr/5lib any more - this broke things for
+       some people.
+
+       * configure.in:
+       Don't look for the curses library in /usr/5lib any more.  This broke
+       things for some people.
+
+       * sendlib.c:
+       Real fix for the pointer problem noted by Heiko Schlichting.
+
+       * sendlib.c:
+       Fix a "string on stack returned" bug found by Heiko Schlichting.
+
+Sat May 20 07:53:50 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/muttrc.man.head: Document display-hook in the manual page.
+
+       * commands.c, hook.c, init.h, mutt.h, protos.h, send.c:
+       Add a display-hook command.  From Byrial Jensen.
+
+       * alias.c, browser.c, init.c, lib.c, mutt.h, muttlib.c, protos.h:
+       Add mutt_gecos_name function which centrally handles the GECOS
+       processing.
+
+       * imap/imap.c:
+       Shut up some warnings.  We may have to think about mutt_stristr again.
+
+       * configure.in:
+       Verify that regmatch_t has offsets, and not only pointers.  From Sam
+       Roberts <sroberts@uniserve.com>.
+
+       * configure.in:
+       Don't look for curses in /usr/5lib any more - this broke things for
+       some people.
+
+       * configure.in:
+       Don't look for the curses library in /usr/5lib any more.  This broke
+       things for some people.
+
+       * sendlib.c:
+       Real fix for the pointer problem noted by Heiko Schlichting.
+
+       * sendlib.c:
+       Fix a "string on stack returned" bug found by Heiko Schlichting.
+
+Fri May 19 07:36:42 2000  Thomas Roessler  <roessler@guug.de>
+
+       * hdrline.c: Fix %. formats.  From EGE.
+
+Thu May 18 17:06:59 2000  Thomas Roessler  <roessler@guug.de>
+
+       * copy.c, parse.c, rfc2047.c, rfc2047.h, rfc2231.c, send.c, sendlib.c:
+       rfc2047_decode change from EGE.
+
+       * charset.c: Catch a segmentation fault in mutt_convert_string ().
+
+       * acconfig.h: Don't enable debugging by default in the stable branch.
+
+       * configure.in, main.c:
+       More debugging output, and a warning in configure.in.
+
+       * main.c:
+       Tell us something about internal iconv and CHARMAPS_DIR from mutt -v.
+
+Wed May 17 12:39:16 2000  Thomas Roessler  <roessler@guug.de>
+
+       * mkjtags.c: handle ^L lines correctly.
+
+       * mkjtags.c: Some beautifications.
+
+       * Makefile.am, mkjtags.c:
+       Add a little tool to help with building tags files my editor groks.
+
+       * handler.c:
+       When displaying a deleted attachment's information, present the file
+       name if it is present.  Suggested by Pete Wenzel <pete@stc.com>.
+
+       * imap/imap_ssl.c: SSL certificate check fix.  From Tommi Komulainen.
+
+       * imap/imap_ssl.c: Certificate check fix, from Tommi Komulainen.
+
+       * OPS, enter.c, functions.h:
+       Add forward-word and backward-word functions to the editor.
+
+       * OPS, enter.c, functions.h:
+       Add a kill-eow function to the line editor.
+
+       * init.c: Small fix to mutt_set_default().
+
+Tue May 16 19:01:50 2000  Thomas Roessler  <roessler@guug.de>
+
+       * Makefile.am:
+       We don't need to build in the charmaps/ directory unless we use the
+       included iconv.
+
+       * compose.c, mutt.h, protos.h, sendlib.c:
+       Some fixes to the size calculation code.
+
+       * compose.c, globals.h, init.h, sendlib.c:
+       A modified version of Will Fiveash's compose format patch.
+
+       * acconfig.h, configure.in, init.c, init.h:
+       Use nl_langinfo's return value as the default for $charset.
+
+       * init.c:
+       More default setting.  This can easily be done much cleaner than the
+       last version of the patch.
+
+       * init.c: Hack: mutt_restore_default() now stores the latest value of a
+       variable as it's default if there was no default before.  The code
+       in question is executed precisely once: when mutt_restore_default() is
+       invoked from mutt_init().
+
+       * hook.c, lib.c, lib.h, muttlib.c, protos.h:
+       Let _mutt_expand_path escape regular expression special characters.
+       For stable.
+
+       * hook.c, lib.c, lib.h, muttlib.c, protos.h:
+       mutt_expand_path is now able to escape special characters for use in
+       regular expressions.  This is needed to make folder-hooks work like
+       intended.
+
+       * muttlib.c: Sanitize file names passed to mutt_adv_mktemp.
+
+       * muttlib.c: Sanitize file name suggestions passed to mutt_adv_mktemp.
+
+       * doc/manual.sgml.tail, OPS, enter.c, functions.h:
+       Add a transpose-character function to the editor.  From Aaron Schrab.
+
+       * configure.in:
+       Improve the wchar_t checks.  From "Andrew W. Nosenko" <awn@bcs.zp.ua>.
+
+Mon May 15 12:00:53 2000  Thomas Roessler  <roessler@guug.de>
+
+       * configure.in, mbyte.c, pager.c: More iconv-related patches from EGE.
+
+Sat May 13 17:39:03 2000  Thomas Roessler  <roessler@guug.de>
+
+       * configure.in:
+       HP/UX vs. ANSI C.  From Lars Hecking and Albert Chin. [stable]
+
+       * configure.in:
+       Configuration for ANSI C / HP/UX.  From albert chin and Lars Hecking.
+
+Fri May 12 13:41:34 2000  Thomas Roessler  <roessler@guug.de>
+
+       * mbyte.c, wcwidth.c: Make things compile. ;-)
+
+       * mbyte.c, mbyte.h, wcwidth.c:
+       Isprint-related changes.  Suggested by Andrew Nosenko, adapted by EGE.
+
+       * gettext.c: Replacing some more free() calls by safe_free().
+
+       * iconv/iconv.c, acconfig.h, configure.in, curs_lib.c, gettext.c, help.c, mbyte.c, mbyte.h, mutt.h, pager.c, wcwidth.c:
+       wide-character related patches.  From Edmund Grimley Evans.
+
+       * configure.in: HP/UX -Ae detection.  From Albert Chin. [stable]
+
+       * configure.in:
+       Improve the HP/UX check for the -Ae command line parameter.  From
+       albert chin (china@thewrittenword.com).
+
+       * gen_defs: Make sure gen_defs returns success.  [stable]
+
+       * gen_defs:
+       Sam Roberts reports that some shells do strange things with exit
+       states.
+
+       * doc/manual.sgml.head:
+       Fix $spool vs. $spoolfile.  From David Ellement.
+
+       * iconv/.cvsignore: Ignore Makefile.in, Makefile, and .deps.
+
+Thu May 11 07:10:32 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/mutt.man: Remove some unnecessary spaces.
+
+       * doc/mutt.man, main.c:
+       Fix usage information.  Noted by Mikko Hänninen.
+
+       * acconfig.h, configure.in, globals.h:
+       Check volatility of sig_atomic_t.
+
+Wed May 10 18:02:31 2000  Thomas Roessler  <roessler@guug.de>
+
+       * configure.in: Support for old Kerberos versions.  From David Champion
+       <dgc@uchicago.edu>.
+
+       * configure.in: Fix support for old Kerberos libraries.
+
+       * hdrline.c, thread.c:
+       updated messages-in-thread (%e) patch from Markus Holmberg.
+
+       * po/pl.po: update.
+
+       * init.h, mutt.h, pop.c:
+       Fix a segmentation fault introduced by the change of pop_delete to a
+       quad option.
+
+       * po/fr.po: Update the French translation.
+
+Tue May  9 20:19:28 2000  Thomas Roessler  <roessler@guug.de>
+
+       * parse.c: more mailtool brain-damage support.
+
+       * acconfig.h, configure.in, parse.c:
+       Sun mailtool message support.  The format is ugly, but the patch is
+       reasonably clean.
+
+       * Makefile.am: include mbyte.h with the distribution.
+
+       * doc/devel-notes.txt: Add a word about format flags.
+
+       * imap/message.c: Make the X-Label patch work over IMAP.
+
+       * po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, reldate.h, ChangeLog, VERSION:
+       automatic post-release commit for mutt-1.3
+
+       * hdrline.c, init.h, protos.h, thread.c:
+       Add a %e option for thread-relative message numbers.  From Markus
+       Holmberg <markush@acc.umu.se>.
+
+       * doc/manual.sgml.head, hdrline.c, init.h, mutt.h, parse.c, pattern.c:
+       X-Label header support from David Champion <dgc@uchicago.edu>.
+
+       * init.h, pop.c: Make pop_delete a quad-option.  From Honza Pazdziora
+       <adelton@informatics.muni.cz>.
+
+       * VERSION:
+       Ups, we should leave the version file on 1.2, so the diff will get
+       built properly when I release 1.3.
+
+       * iconv/Makefile.am, iconv/iconv.c, iconv/iconv.h, lib.h, mbyte.c, mbyte.h, menu.c, muttlib.c, pager.c, pgppubring.c, protos.h, rfc2047.c, rfc2231.c, sendlib.c, utf8.c, wcwidth.c, Makefile.am, VERSION, charset.c, charset.h, commands.c, compose.c, configure.in, curs_lib.c, curs_main.c, enter.c, gettext.c, gnupgparse.c, hdrline.c, help.c, init.c:
+       Edmund Grimley Evans' UTF-8 patch.
+
+       * po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, VERSION, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, reldate.h, ChangeLog:
+       automatic post-release commit for mutt-1.2
+
+       * build-release: unstable branch.
+
+       * build-release: start preparing 1.2.
+
+Tue May  9 15:51:54 2000  Thomas Roessler  <roessler@guug.de>
+
+       * hdrline.c, init.h, protos.h, thread.c:
+       Add a %e option for thread-relative message numbers.  From Markus
+       Holmberg <markush@acc.umu.se>.
+
+       * doc/manual.sgml.head, hdrline.c, init.h, mutt.h, parse.c, pattern.c:
+       X-Label header support from David Champion <dgc@uchicago.edu>.
+
+       * init.h, pop.c: Make pop_delete a quad-option.  From Honza Pazdziora
+       <adelton@informatics.muni.cz>.
+
+       * VERSION:
+       Ups, we should leave the version file on 1.2, so the diff will get
+       built properly when I release 1.3.
+
+       * iconv/Makefile.am, iconv/iconv.c, iconv/iconv.h, lib.h, mbyte.c, mbyte.h, menu.c, muttlib.c, pager.c, pgppubring.c, protos.h, rfc2047.c, rfc2231.c, sendlib.c, utf8.c, wcwidth.c, Makefile.am, VERSION, charset.c, charset.h, commands.c, compose.c, configure.in, curs_lib.c, curs_main.c, enter.c, gettext.c, gnupgparse.c, hdrline.c, help.c, init.c:
+       Edmund Grimley Evans' UTF-8 patch.
+
+       * po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, VERSION, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, reldate.h, ChangeLog:
+       automatic post-release commit for mutt-1.2
+
+       * build-release: unstable branch.
+
+       * build-release: start preparing 1.2.
+
+Wed May  3 07:48:46 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/zh_TW.Big5.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/uk.po, ChangeLog, VERSION, po/cs.po:
+       automatic post-release commit for mutt-1.1.14
+
+       * po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, ChangeLog, VERSION, po/cs.po, reldate.h:
+       automatic post-release commit for mutt-1.1.13
+
+Wed May  3 06:44:22 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/da.po,
+       po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po,
+       po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po,
+       po/pt_BR.po, po/ru.po, ChangeLog, VERSION, po/cs.po,
+       reldate.h: automatic post-release commit for mutt-1.1.13
+
+Sun Apr 30 06:58:21 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/message.c:
+       Catch the case that an IMAP server sends "\n\n" after a mail header.
+       Diagnosed by Brendan.
+
+Sun Apr 30 06:58:21 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/message.c:
+       Catch the case that an IMAP server sends "\n\n" after a mail header.
+       Diagnosed by Brendan.
+
+Sat Apr 29 13:38:05 2000  Thomas Roessler  <roessler@guug.de>
+
+       * query.c:
+       Fix a possible segmentation fault with the external query feature.
+
+       * imap/imap.c:
+       Fix the "empty screen after sync" bug observed with certain versions
+       of the Courier IMAP server.  From Brendan Cully.
+
+Wed Apr 26 17:43:00 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/util.c: Fix the imap_force_ssl option.
+
+       * po/da.po: update.
+
+       * contrib/pgp6.rc:
+       Fix a little typo.  Noted by Steve Brewer <limako@mediaone.net>.
+
+       * imap/imap_ssl.c, imap/imap_ssl.h, imap/util.c, init.h, mutt.h:
+       Add a new option named imap_force_ssl.
+
+Tue Apr 25 18:39:01 2000  Thomas Roessler  <roessler@guug.de>
+
+       * acconfig.h, configure.in: Revised version of Lars' patch.
+
+       * m4/funcdecl.m4:
+       New macros CF_CHECK_FUNCDECL, CF_CHECK_FUNCDECLS, CF_UPPER. These
+       are slightly modified versions of T. E. Dickey's macros from the
+       lynx distribution. (From Lars Hecking.)
+
+       * configure.in:
+       Use new CF_CHECK_FUNCDECLS macro for curses functions. This should
+       catch function declarations and macros alike. Due to a misfeature in
+       autoheader, we have to explicitly AC_DEFINE the curses functions.
+       (From Lars Hecking.)
+
+       * acconfig.h:
+       acconfig.h: Remove duplicate VERSION and unused HAVE_GETOPT_DECL.
+       Remove DEBUGGER (it's AC_SUBST'ed, not AC_DEFINE'd). Add defines for
+       curses functions. (From Lars Hecking.)
+
+       * po/it.po: update.
+
+Mon Apr 24 13:10:11 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/util.c:
+       Fix a segmentation fault with folder completion.  From Brendan.
+
+       * imap/message.c:
+       Fall back to INTERNALDATE when Date header isn't present.  From
+       Brendan.
+
+Sat Apr 22 18:34:29 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, ChangeLog, VERSION, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, reldate.h:
+       automatic post-release commit for mutt-1.1.12
+
+       * doc/manual.sgml.head:
+       Add a link to http://www.mutt.org/download.html.
+
+       * init.c, init.h, thread.c:
+       Handle sort_aux="threads" somewhat different, and probably more
+       safely.  Problem and principle of fix noted by Gero Treuner and
+       Michael Tatge <Michael.Tatge@studserv.uni-stuttgart.de>.
+
+       * lib.c: Coda compatibility.  From Jan Harkes <jaharkes@cs.cmu.edu>.
+
+       * parse.c:
+       Fix message parsing.  This fixes the "Reply-To in body" bug.  From
+       Edmund GRIMLEY EVANS.
+
+       * doc/manual.sgml.tail: Fix the sgmltools URL.  From Martin Michlmayr.
+
+       * charset.c, editmsg.c, extlib.c, gnupgparse.c, lib.c, lib.h, pgpinvoke.c, pgpkey.c, pgplib.c, pgppubring.c, recvcmd.c, remailer.c, rfc2231.c, rfc2231.h:
+       Comment cosmetics.  From Martin Michlmayer.
+
+       * doc/manual.sgml.head:
+       Document the elmish "!!" shortcut for the last folder.  From Martin
+       Michlmayr <tbm@cyrius.com>.
+
+       * curs_main.c, pager.c:
+       Fix various inconsistencies with respect to thread deletion.
+
+Sat Apr 22 09:33:46 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.head:
+       Add a link to http://www.mutt.org/download.html.
+
+       * init.c, init.h, thread.c:
+       Handle sort_aux="threads" somewhat different, and probably more
+       safely.  Problem and principle of fix noted by Gero Treuner and
+       Michael Tatge <Michael.Tatge@studserv.uni-stuttgart.de>.
+
+       * lib.c: Coda compatibility.  From Jan Harkes <jaharkes@cs.cmu.edu>.
+
+       * parse.c:
+       Fix message parsing.  This fixes the "Reply-To in body" bug.  From
+       Edmund GRIMLEY EVANS.
+
+       * doc/manual.sgml.tail: Fix the sgmltools URL.  From Martin Michlmayr.
+
+       * charset.c, editmsg.c, extlib.c, gnupgparse.c, lib.c, lib.h, pgpinvoke.c, pgpkey.c, pgplib.c, pgppubring.c, recvcmd.c, remailer.c, rfc2231.c, rfc2231.h:
+       Comment cosmetics.  From Martin Michlmayer.
+
+       * doc/manual.sgml.head:
+       Document the elmish "!!" shortcut for the last folder.  From Martin
+       Michlmayr <tbm@cyrius.com>.
+
+       * curs_main.c, pager.c:
+       Fix various inconsistencies with respect to thread deletion.
+
+Wed Apr 12 16:32:26 2000  Thomas Roessler  <roessler@guug.de>
+
+       * browser.c: Initialize some more memory.  Noted by Vsevolod Volkov
+       <vvv@lucky.net>.
+
+       * headers.c: Catch some error conditions.
+
+       * main.c: Tell us whether debugging is enabled or not.
+
+Sun Apr  9 13:32:36 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/sv.po: Update.
+
+       * imap/imap_ssl.c: Another file mode change.
+
+       * po/fr.po, po/es.po, po/el.po: update.
+
+       * imap/imap_ssl.c:
+       Save more than one SSL certificate to the certificate file.
+
+       * po/da.po, po/cs.po: update.
+
+       * imap/socket.c: Make host name comparison case-insensitive.
+
+       * doc/manual.sgml.head:
+       Minor typo in the documentation.  Noted by Vsevolod Volkov
+       <vvv@lucky.net>.
+
+       * muttlib.c:
+       The "!!" shortcut had another flaw.  Noted by Martin Michlmayr
+       <tbm@cyrius.com>.
+
+       * imap/BUGS: Documentation patch from Brendan Cully.
+
+       * pattern.c: Fix ^ and ! pattern modifiers.
+
+Fri Mar 31 12:37:21 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/pl.po, po/id.po: update.
+
+Thu Mar 30 15:33:14 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/uk.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/pt_BR.po, po/ru.po, po/nl.po, po/pl.po, po/ko.po, po/it.po, po/fr.po, po/gl.po, po/id.po, po/eo.po, po/es.po, po/el.po, po/da.po, po/de.po, po/cs.po, VERSION, reldate.h, ChangeLog:
+       automatic post-release commit for mutt-1.1.11
+
+       * po/uk.po, po/zh_TW.Big5.po, po/sv.po, po/sk.po, po/pt_BR.po, po/ru.po, po/nl.po, po/pl.po, po/ko.po, po/id.po, po/it.po, po/gl.po, po/fr.po, po/es.po, po/eo.po, po/el.po, po/de.po, po/da.po, po/Makefile.in.in, po/POTFILES.in, po/cs.po:
+       make update-po, and undo most parts of Lars' and Tommi's patch - it
+       broke things here.
+
+Thu Mar 30 15:16:22 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/uk.po, po/zh_TW.Big5.po, po/sv.po, po/sk.po,
+       po/pt_BR.po, po/ru.po, po/nl.po, po/pl.po, po/ko.po,
+       po/id.po, po/it.po, po/gl.po, po/fr.po, po/es.po, po/eo.po,
+       po/el.po, po/de.po, po/da.po, po/Makefile.in.in,
+       po/POTFILES.in, po/cs.po: make update-po, and undo most
+       parts of Lars' and Tommi's patch - it broke things here.
+
+       * imap/imap_ssl.c: Typo, noticed by Vsevolod Volkov <vvv@lucky.net>.
+
+       * po/de.po: update.
+
+       * po/eo.po: fix.
+
+       * contrib/Makefile.in: Distribute pgp6.rc. Ups.
+
+       * po/uk.po: Updated Ukrainian translation.
+
+       * curs_main.c: Cursor cosmetics.  From Byrial.
+
+       * contrib/Makefile.in:
+       Installation process patch from Bill Nottingham <notting@redhat.com>.
+
+       * build-release: Explicitly use scp1.
+
+Wed Mar 29 20:16:36 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/zh_TW.Big5.po, po/sv.po, po/uk.po, po/sk.po, po/pt_BR.po, po/ru.po, po/pl.po, po/ko.po, po/nl.po, po/id.po, po/it.po, po/gl.po, po/fr.po, po/eo.po, po/es.po, po/el.po, po/de.po, po/da.po, po/cs.po, VERSION, reldate.h, ChangeLog:
+       automatic post-release commit for mutt-1.1.10
+
+       * imap/message.c: Fix access to read-only folders via IMAP.
+
+Wed Mar 29 20:03:32 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/message.c: Fix access to read-only folders via IMAP.
+
+       * po/de.po, doc/Makefile.in, doc/manual.sgml.head, init.c, thread.c:
+       Various little patches from Gero Treuner.
+
+       * imap/Makefile.am, Makefile.am: Build diff from Brendan Cully.
+
+Tue Mar 28 10:09:19 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/Makefile.in.in, po/POTFILES.in, Makefile.am:
+       A patch from Tommi Komulainen (and Lars Hecking) for building
+       outside the source directory.
+
+Mon Mar 27 23:56:35 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/auth_gss.c, imap/imap_ssl.c, acconfig.h, configure.in:
+       NetBSD portability patches from Brendan Cully.
+
+Sat Mar 25 18:22:09 2000  Thomas Roessler  <roessler@guug.de>
+
+       * keymap.c:
+       Timeout occasionally in menus, with the notable exception of the
+       editor.  This is needed to avoid some more IMAP timeouts.
+       [patch-1.1.9.tlr.timeout.1]
+
+Thu Mar 23 12:21:10 2000  Thomas Roessler  <roessler@guug.de>
+
+       * remailer.c: Little fix for the remailer menu.
+
+       * configure.in:
+       Fix Kerberos configuration.  From David Champion <dgc@uchicago.edu>.
+
+Wed Mar 22 08:24:45 2000  Thomas Roessler  <roessler@guug.de>
+
+       * mutt.h, sort.c, init.h: Sorting fix from Gero Treuner.
+
+Tue Mar 21 22:01:42 2000  Thomas Roessler  <roessler@guug.de>
+
+       * configure.in:
+       Fix charmap configuration.  This was broken in configure.in,v 2.54.
+
+Mon Mar 20 10:32:18 2000  Thomas Roessler  <roessler@guug.de>
+
+       * muttlib.c:
+       Fix the "!!" shortcut for the last folder.  Noted by Byrial Jensen.
+
+       * po/da.po, po/eo.po: update
+
+       * configure.in, Attic/Muttrc.head, Muttrc.head.in:
+       Put Muttrc.head under autoconf control - we need to substitute
+       @docdir@ for the <f1> macro to work.
+
+Sun Mar 19 09:19:30 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/nl.po: Fix some sloppiness errors.  From Brendan Cully.
+
+Fri Mar 17 08:26:22 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/nl.po: update
+
+       * rfc2047.c, sendlib.c: Don't override iso-2022-jp with us-ascii.
+
+Thu Mar 16 10:01:43 2000  Thomas Roessler  <roessler@guug.de>
+
+       * commands.c, init.h, mutt.h: Add the $print_decode option.
+
+       * po/ru.po, po/sv.po: updates
+
+       * po/it.po: update.
+
+       * editmsg.c:
+       Use Editor with a fall-back to visual when editing messages.
+
+       * muttlib.c: Localization nit from Byrial Jensen.
+
+       * doc/manual.sgml.head, init.h:
+       Documentation fixes from Mikko Hänninen.
+
+Wed Mar 15 23:25:47 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/imap_ssl.c, imap/imap_ssl.h, imap/socket.c, README.SSL, configure.in, init.h:
+       Fix entropy gathering in the IMAP SSL support.  From Tommi Komulainen.
+
+       * Makefile.am: Add a dependency for keymap_defs.h.  Hope it works now.
+
+       * po/da.po: update
+
+Tue Mar 14 21:05:00 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/pl.po, po/cs.po: updates.
+
+       * configure.in: Fix a charmap configuration flaw.  From Gero Treuner.
+
+       * doc/Makefile.in:
+       Install all the documentation.  Problem noted and fix supplied by
+       Gero Treuner.
+
+       * po/es.po: Update from Boris Wesslowski.
+
+       * base64.c: Add the original fetchmail copyright notice.
+
+       * contrib/Makefile.in, contrib/pgp6.rc:
+       More nits: Include a sample configuration file for using mutt with
+       pgp6, and install and actually distribute Tin.rc.
+
+Mon Mar 13 22:36:56 2000  Thomas Roessler  <roessler@guug.de>
+
+       * makedoc.c, send.c, charset.h, init.h:
+       Various nits, noted by Gero Treuner.
+
+       * po/uk.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/pt_BR.po, po/ru.po, po/pl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/gl.po, po/es.po, po/fr.po, po/eo.po, po/el.po, po/da.po, po/de.po, po/cs.po, reldate.h, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.1.9
+
+       * build-release: change code for going on-line.
+
+       * po/uk.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/pl.po, po/pt_BR.po, po/ru.po, po/ko.po, po/nl.po, po/gl.po, po/id.po, po/it.po, po/eo.po, po/es.po, po/fr.po, po/el.po, po/de.po, po/cs.po, po/da.po:
+       make update-po.
+
+       * po/sv.po, po/fr.po: updates.
+
+Mon Mar 13 18:37:17 2000  Thomas Roessler  <roessler@guug.de>
+
+       * build-release: change code for going on-line.
+
+       * po/uk.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/pl.po,
+       po/pt_BR.po, po/ru.po, po/ko.po, po/nl.po, po/gl.po,
+       po/id.po, po/it.po, po/eo.po, po/es.po, po/fr.po, po/el.po,
+       po/de.po, po/cs.po, po/da.po: make update-po.
+
+       * po/sv.po, po/fr.po: updates.
+
+Fri Mar 10 11:38:32 2000  Thomas Roessler  <roessler@guug.de>
+
+       * handler.c:
+       Fix the handling of raw carriage return characters in the base64
+       handler.
+
+Thu Mar  9 11:58:11 2000  Thomas Roessler  <roessler@guug.de>
+
+       * pgpinvoke.c: Bail on empty PGP formats.
+
+       * po/ko.po: update.
+
+Wed Mar  8 18:08:03 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/message.c: Another fix from Brendan Cully.
+
+       * po/pl.po: update.
+
+       * sendlib.c, parse.c:
+       Fix more RFC2047 encoding bugs.  Once again from Gero Treuner
+       <gero@faveve.uni-stuttgart.de>.
+
+Tue Mar  7 19:53:19 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/da.po, configure.in:
+       Adding a Danish translation.  Thanks to Morten Bo Johansen
+       <mojo@image.dk> and the members of the sslug-locale mailing list,
+       see http://www.sslug.dk/emailarkiv/locale/.
+
+       * color.c:
+       The uncolor/unmono commands weren't parsed correctly when not
+       applicable.  This fixes bug#65.
+
+       * makedoc.c: Make gcc happy.
+
+       * TODO: Remove an old item from this list.  From Brendan Cully.
+
+       * sendlib.c, TODO, protos.h, send.c:
+       Correct header encodings when postponing messages.
+
+       * po/de.po: update
+
+       * po/pt_BR.po, po/el.po: updates.
+
+       * curs_main.c: Fix NULL pointer deferences.
+
+Sat Mar  4 12:57:53 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/sv.po,
+       po/pt_BR.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po,
+       po/it.po, po/id.po, po/gl.po, po/fr.po, po/eo.po, po/es.po,
+       po/el.po, po/de.po, po/cs.po, reldate.h, build-release,
+       VERSION, ChangeLog: automatic post-release commit for
+       mutt-1.1.8
+
+       * protos.h, send.c, alias.c, headers.c: Unify alias expansion.
+
+Sat Mar  4 08:40:53 2000  Thomas Roessler  <roessler@guug.de>
+
+       * protos.h, send.c, alias.c, headers.c: Unify alias expansion.
+
+Fri Mar  3 16:52:41 2000  Thomas Roessler  <roessler@guug.de>
+
+       * contrib/gpg.rc:
+       Don't use gpg-2comp by default, but leave the command lines using
+       this one there as comments.
+
+       * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/pl.po, po/pt_BR.po, po/nl.po, po/it.po, po/ko.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/el.po, po/eo.po, po/cs.po, po/de.po, imap/imap_ssl.c, imap/imap_ssl.h, imap/message.c, imap/message.h, imap/socket.c, imap/util.c, imap/auth.c, imap/auth_gss.c, imap/browse.c, imap/command.c, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/imap_socket.h, doc/dotlock.man, doc/manual.sgml.head, doc/mutt.man, doc/muttrc.man.head, rfc822.h, score.c, send.c, sendlib.c, signal.c, sort.c, sort.h, status.c, system.c, thread.c, recvcmd.c, remailer.c, remailer.h, resize.c, rfc1524.c, rfc1524.h, rfc2047.c, rfc2047.h, rfc2231.c, rfc2231.h, rfc822.c, pgpinvoke.c, pgpkey.c, pgplib.c, pgplib.h, pgppubring.c, pop.c, postpone.c, protos.h, query.c, recvattach.c, mx.h, pager.c, pager.h, parse.c, pattern.c, pgp.c, pgp.h, menu.c, mh.c, mime.h, mutt.h, mutt_curses.h, mutt_menu.h, mutt_regex.h, muttbug.sh.in, muttlib.c, mx.c, history.c, history.h, hook.c, init.c, init.h, keymap.c, keymap.h, lib.c, lib.h, mailbox.h, main.c, makedoc.c, mapping.h, mbox.c, dotlock.h, edit.c, editmsg.c, enter.c, extlib.c, filter.c, flags.c, from.c, functions.h, globals.h, gnupgparse.c, handler.c, hash.c, hash.h, hdrline.c, headers.c, help.c, charset.c, charset.h, color.c, commands.c, complete.c, compose.c, copy.c, copy.h, curs_lib.c, curs_main.c, date.c, dotlock.c, COPYRIGHT, addrbook.c, alias.c, attach.c, attach.h, base64.c, browser.c, browser.h, buffy.c, buffy.h:
+       The FSF apparently has moved.
+
+       * po/sv.po: Swedish translation.
+
+       * imap/imap.h, imap/imap.c, commands.c, compose.c, curs_main.c, editmsg.c, mailbox.h, mbox.c, mh.c, mx.c, mx.h, pop.c, postpone.c, send.c, sendlib.c, attach.c:
+       Fix index updates when closing or synching mail folders fails.
+       There were some bug-fixes hidden in that code.
+
+       * imap/message.c: More missing fclose (3) calls.
+
+Thu Mar  2 21:01:27 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/imap_ssl.c, imap/message.c:
+       Fix a bunch of file descriptor leaks.
+
+       * po/de.po: A one-character patch from Gero Treuner.
+
+       * INSTALL, README.SSL:
+       Add some SSL documentation.  From Tommi Komulainen.
+
+       * mh.c, mx.c:
+       Fix incompatible return value checking.  This should fix #29.
+
+       * mutt.h, send.c, init.h:
+       Add $reverse_realname option.  Essentially suggested by ws@rhein.de.
+
+Wed Mar  1 21:27:36 2000  Thomas Roessler  <roessler@guug.de>
+
+       * Muttrc.head: Fix #26: A little typo.
+
+       * contrib/Makefile.in, contrib/sample.muttrc-tlr:
+       Add a commented version of my .muttrc as an example.
+
+       * contrib/sample.muttrc: Fix some mail addresses.
+
+       * README.UPGRADE:
+       Add some more documentation for users who are upgrading.  This is
+       more precise than the NEWS file, but confined to the more notable
+       changes.
+
+       * configure.in: Another fix from Tommi Komulainen.
+
+       * po/eo.po, po/id.po, po/de.po: update.
+
+       * imap/util.c: Don't crash with NULL Context pointers.
+
+       * po/fr.po: Update.
+
+       * doc/dotlock.man, doc/mutt.man:
+       dotlock is called mutt_dotlock for quite some time now.
+
+       * po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/nl.po, po/pl.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/el.po, po/eo.po, po/es.po, po/de.po, po/cs.po, VERSION, reldate.h, ChangeLog:
+       automatic post-release commit for mutt-1.1.7
+
+       * imap/command.c, init.h, mutt.h, README.SECURITY, configure.in:
+       Add $imap_servernoise option to suppress IMAP server messages.  From
+       Brendan Cully.
+
+       * imap/Makefile.am: Include auth_gss.c with the distribution.
+
+Wed Mar  1 00:12:14 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/command.c, init.h, mutt.h, README.SECURITY, configure.in:
+       Add $imap_servernoise option to suppress IMAP server messages.  From
+       Brendan Cully.
+
+       * imap/Makefile.am: Include auth_gss.c with the distribution.
+
+Tue Feb 29 22:40:46 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/uk.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/pt_BR.po, po/ru.po, po/ko.po, po/nl.po, po/pl.po, po/it.po, po/fr.po, po/gl.po, po/id.po, po/eo.po, po/es.po, po/el.po, po/de.po, po/cs.po, reldate.h, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.1.6
+
+       * po/zh_TW.Big5.po, po/sv.po, po/uk.po, po/sk.po, po/ru.po, po/pt_BR.po, po/nl.po, po/pl.po, po/ko.po, po/gl.po, po/id.po, po/it.po, po/es.po, po/fr.po, po/el.po, po/eo.po, po/cs.po, po/de.po:
+       Some updates; make update-po.
+
+       * charset.c:
+       Add error checking to the recode-attachment code.  From "Andrew W.
+       Nosenko" <awn@bcs.zp.ua>.
+
+       * configure.in:
+       Replace --enable-ssl by --with-ssl.  From Tommi Komulainen.
+
+       * imap/imap.c, mx.c, curs_main.c:
+       More IMAP folder update hacks.  Brendan says it works.
+
+Tue Feb 29 22:34:07 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/zh_TW.Big5.po, po/sv.po, po/uk.po, po/sk.po, po/ru.po,
+       po/pt_BR.po, po/nl.po, po/pl.po, po/ko.po, po/gl.po,
+       po/id.po, po/it.po, po/es.po, po/fr.po, po/el.po, po/eo.po,
+       po/cs.po, po/de.po: Some updates; make update-po.
+
+       * charset.c: Add error checking to the recode-attachment
+       code.  From "Andrew W. Nosenko" <awn@bcs.zp.ua>.
+
+       * configure.in:
+       Replace --enable-ssl by --with-ssl.  From Tommi Komulainen.
+
+       * imap/imap.c, mx.c, curs_main.c:
+       More IMAP folder update hacks.  Brendan says it works.
+
+Mon Feb 28 18:06:35 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.head: Martin Michlmayr told me about a typo.
+
+       * imap/imap.h, imap/util.c, menu.c, pager.c:
+       New IMAP keep-alive code.  This should work from all menus, and it
+       should always poll the current folder.
+
+       * menu.c, pager.c: Do IMAP keep-alive polls from all menus.
+
+       * curs_main.c, pager.c:
+       Don't do Context updates from the background, part 2.
+
+       * imap/imap.h, imap/imap_private.h, imap/util.c, imap/command.c, imap/imap.c:
+       Don't do Context updates from the background.
+
+Sun Feb 27 08:49:34 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/POTFILES.in:
+       imap/auth_gss.c was missing.  Noted by "Andrew W. Nosenko"
+       <awn@bcs.zp.ua>.
+
+Sat Feb 26 18:14:24 2000  Thomas Roessler  <roessler@guug.de>
+
+       * Makefile.am:
+       muttbug is a script, not a program.  Tell automake about this.
+
+       * mx.c: Don't use an uninitialized string for error reporting.
+
+       * imap/browse.c: Fix a segmentation fault.  Patch from Brendan Cully.
+
+Fri Feb 25 08:57:05 2000  Thomas Roessler  <roessler@guug.de>
+
+       * .cvsignore: ignore muttbug{,.sh}
+
+       * Makefile.am: Tell users about README.UPGRADE.
+
+Thu Feb 24 21:34:10 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/uk.po, po/ru.po, po/pt_BR.po, po/pl.po, po/ko.po, po/nl.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/es.po, po/cs.po, po/de.po, po/el.po, po/eo.po, reldate.h, ChangeLog, VERSION:
+       automatic post-release commit for mutt-1.1.5
+
+       * main.c: Fix #52, from Mikko.Hanninen@iki.fi.
+
+Thu Feb 24 21:25:49 2000  Thomas Roessler  <roessler@guug.de>
+
+       * main.c: Fix #52, from Mikko.Hanninen@iki.fi.
+
+Wed Feb 23 13:26:03 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/uk.po, po/pl.po,
+       po/pt_BR.po, po/ru.po, po/nl.po, po/id.po, po/it.po,
+       po/ko.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po,
+       po/cs.po, po/de.po: New German translation; make update-po.
+
+       * po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/uk.po,
+       po/pt_BR.po, po/ru.po, po/ko.po, po/nl.po, po/pl.po,
+       po/fr.po, po/gl.po, po/id.po, po/it.po, po/eo.po, po/es.po,
+       po/Makefile.in.in, po/cs.po, po/de.po, po/el.po: Fix some
+       dependency, and do update-po again.  Also, Edmund Evans
+       submitted a new Esperanto translation.
+
+       * mx.c: safe_fclose() doesn't like FILE pointers.
+
+       * mx.h, mx.c: Don't core dump when locking a folder fails.
+
+Tue Feb 22 19:22:29 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/sk.po, po/ru.po,
+       po/pl.po, po/pt_BR.po, po/ko.po, po/nl.po, po/id.po,
+       po/it.po, po/fr.po, po/gl.po, po/el.po, po/eo.po, po/es.po,
+       po/de.po, po/cs.po: update-po.
+
+       * po/ko.po: New Korean translation from <redhands@linux.sarang.net>.
+
+       * muttbug.sh.in: Fix bug#42: A missing "'".
+
+       * main.c: Cosmetic fix from Marco d'Itri.
+
+       * imap/browse.c, browser.c, doc/manual.sgml.head:
+       Brendan Cully's latest IMAP browser fixes.
+
+Fri Feb 18 10:56:24 2000  Thomas Roessler  <roessler@guug.de>
+
+       * muttlib.c:
+       In mutt_copy_body(), we also need to strdup() the content-description.
+
+       * imap/command.c:
+       Reasonably handle suerfluous EXIST messages from IMAP servers.  From
+       Brendan Cully.
+
+Thu Feb 17 18:22:27 2000  Thomas Roessler  <roessler@guug.de>
+
+       * send.c:
+       Fix content-description encoding - it was done after signing, not
+       before signing.
+
+       * sendlib.c, attach.c, mx.c, pop.c:
+       Do more error checking when writing messages to folders.
+
+Wed Feb 16 17:29:33 2000  Thomas Roessler  <roessler@guug.de>
+
+       * send.c: Fix mail-followup-to generation.
+
+       * sendlib.c:
+       Don't output empty header fields.  This is made necessary by the
+       addition of possibly empty my_hdr commands.
+
+       * init.c: Permit empty my_hdrs.  Suggested by Edmund Grimley Evans.
+
+       * po/cs.po: update.
+
+       * pattern.c, protos.h, send.c:
+       Generate mail-followup-to headers which contain the user's mail
+       address when sending messages to _known_ mailing lists.
+
+       * po/de.po: update.
+
+Tue Feb 15 22:26:39 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/fr.po: update.
+
+       * po/eo.po: New translation from Edmund Grimley.
+
+       * OPS: Fix a typo.
+
+       * globals.h: Increase the size of ErrorBuf.
+
+       * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pl.po, po/ru.po, po/sk.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/cs.po, po/de.po, po/el.po, VERSION, reldate.h, ChangeLog:
+       automatic post-release commit for mutt-1.1.4
+
+       * doc/manual.sgml.head:
+       Add improved documentation for the "push" command, and macros.  From
+       Byrial Jensen, based on a patch by Mikko Hanninen.
+
+       * functions.h: Fix the <exit> function on the pager.
+
+       * doc/manual.sgml.head, doc/muttrc.man.head, hook.c, init.c, init.h, protos.h:
+       Byrial Jensen's unhook command patch.
+
+       * doc/Makefile.in:
+       Remove superfluous empty lines from the text version of the manual.
+
+       * OPS:
+       Change the documentation string for OP_MAIN_PREV_UNDELETED - it may
+       be confusing.
+
+       * functions.h, keymap.c: More OP_EXIT fixes.
+
+       * OPS, functions.h, keymap.c, pager.c:
+       Remove the OP_PAGER_EXIT opcode, and change it to OP_EXIT.
+
+       * doc/manual.sgml.head: Add more documentation for subscribe and lists.
+
+Tue Feb 15 08:59:41 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.head:
+       Add improved documentation for the "push" command, and macros.  From
+       Byrial Jensen, based on a patch by Mikko Hanninen.
+
+       * functions.h: Fix the <exit> function on the pager.
+
+       * doc/manual.sgml.head, doc/muttrc.man.head, hook.c, init.c, init.h, protos.h:
+       Byrial Jensen's unhook command patch.
+
+       * doc/Makefile.in:
+       Remove superfluous empty lines from the text version of the manual.
+
+       * OPS:
+       Change the documentation string for OP_MAIN_PREV_UNDELETED - it may
+       be confusing.
+
+       * functions.h, keymap.c: More OP_EXIT fixes.
+
+       * OPS, functions.h, keymap.c, pager.c:
+       Remove the OP_PAGER_EXIT opcode, and change it to OP_EXIT.
+
+       * doc/manual.sgml.head: Add more documentation for subscribe and lists.
+
+Mon Feb 14 20:51:37 2000  Thomas Roessler  <roessler@guug.de>
+
+       * init.h: Fix documentation for $followup_to.
+
+       * po/de.po:
+       Fix the fixes.  Folks, when submitting changes to the .po files,
+       please try a "make" in the po subdirectory afterwards.
+
+       * po/it.po: New Italian translation from Marco d'Itri.
+
+       * imap/imap.c, imap/Makefile.am, imap/auth.c, imap/auth_gss.c, imap/browse.c, doc/manual.sgml.head, mx.c, .cvsignore, Makefile.am, browser.c, browser.h, configure.in:
+       Brendan Cully's patch from <20000212185021.A7365@xanadu.kublai.com>.
+
+       * po/de.po: Fixes from Roland Rosenfeld.
+
+       * attach.c, compose.c:
+       Fix a couple of random perror() calls and related problems.
+
+       * sendlib.c: Fix encoding for text/* attachments with long lines.
+
+Fri Feb 11 09:04:22 2000  Thomas Roessler  <roessler@guug.de>
+
+       * contrib/Pine.rc: Fix bug #23.
+
+       * init.h, makedoc.c:
+       Fix minor documentation problems noted by Marius Gedminas
+       <mgedmin@takas.lt>.
+
+Thu Feb 10 19:46:13 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/message.c, pager.c, parse.c, pattern.c, pgp.c, pgp.h, pgpkey.c, pgplib.h, postpone.c, protos.h, recvattach.c, send.c, sendlib.c, sort.h, functions.h, globals.h, handler.c, hdrline.c, headers.c, hook.c, init.c, init.h, keymap.c, keymap.h, main.c, mutt.h, muttlib.c, mx.c, Makefile.am, acconfig.h, attach.c, commands.c, compose.c, configure.in, copy.c, copy.h, curs_main.c:
+       PGP-cleanup patch from Roland Rosenfeld.  Thanks!
+
+       * muttbug.sh.in:
+       ${prefix} should be defined, as it may be used by autoconf.
+
+Wed Feb  9 18:28:45 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.head: Fix a minor typo.  From Mikko Hänninen.
+
+       * muttbug.sh.in: Mostly Debian-related fixes from Roland Rosenfeld.
+
+       * main.c: Small translation-related fix from Roland.
+
+       * po/fr.po: Update from Vincent Lefevre.
+
+       * pgpewrap:
+       Portability patch to make pgpewrap work under HP/UX.  From David
+       Ellement <ellement@sdd.hp.com>.
+
+       * doc/Makefile.in, doc/manual.sgml.head, doc/manual.sgml.tail, init.h:
+       Documentation changes from Roland Rosenfeld.
+
+Tue Feb  8 20:55:33 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/uk.po, po/ru.po, po/ko.po, po/nl.po, po/pl.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/de.po, po/el.po, po/eo.po, po/es.po, build-release, po/cs.po, reldate.h, Makefile.am, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.1.3
+
+       * build-release:
+       Don't build US releases.  RedHat and Caldera don't object, Debian
+       uses the international version anyways, and SuSE (1) sits in Germany
+       and (2) doesn't react.
+
+Tue Feb  8 20:34:51 2000  Thomas Roessler  <roessler@guug.de>
+
+       * build-release:
+       Don't build US releases.  RedHat and Caldera don't object, Debian
+       uses the international version anyways, and SuSE (1) sits in Germany
+       and (2) doesn't react.
+
+Tue Feb  8 20:34:51 2000  Thomas Roessler  <roessler@guug.de>
+
+       * build-release:
+       Don't build US releases.  RedHat and Caldera don't object, Debian
+       uses the international version anyways, and SuSE (1) sits in Germany
+       and (2) doesn't react.
+
+       * contrib/pgp2.rc: add a comment concerning +encrypttoself.
+
+       * pager.c, keymap.c: Avoid IMAP timeouts when viewing messages.  From
+       Tommi.Komulainen@iki.fi.
+
+       * po/eo.po: Small fix from Edmund.
+
+Mon Feb  7 19:16:41 2000  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.head: Add a note on my_hdr when used from send-hook.
+
+       * muttbug.sh.in:
+       Remove another Debian reference from the severity level descriptions.
+
+       * muttbug.sh.in: More fixes.
+
+       * muttlib.c, protos.h, rfc2047.c, rfc2231.c: Fix bug#22.
+
+       * muttbug.sh.in: Various fixes from Roland Rosenfeld.
+
+       * buffy.c: Fix a NULL pointer deference.
+
+Thu Feb  3 13:41:38 2000  Thomas Roessler  <roessler@guug.de>
+
+       * acconfig.h, configure.in, muttbug.sh.in:
+       Add debugger support to muttbug.
+
+       * init.c: Add a comment concerning muttbug.sh.
+
+       * muttbug.sh.in:
+       More changes to the bug report script.  Most of them were suggest by
+       Roland Rosenfeld.
+
+       * po/de.po: Minor fixes from Roland Rosenfeld.
+
+       * muttbug.sh.in: Add some Debian specifics.
+
+       * muttbug.sh.in: Strip comments from included configuration files.
+
+       * muttbug.sh.in: another minor fix.
+
+       * muttbug.sh.in: Minor fixes.
+
+       * Makefile.am, configure.in, main.c, muttbug.sh.in:
+       Add muttbug, the bug reporting utility.  (Yes, we are about to get a
+       real bug-tracking system, see http://bugs.guug.de/.)
+
+       * doc/manual.sgml.head: Documentation fix.
+
+Wed Feb  2 10:53:28 2000  Thomas Roessler  <roessler@guug.de>
+
+       * init.c: Make the parsing of integers more
+
+       * lib.c: Use O_NOFOLLOW when it's there, and needed.
+
+Tue Feb  1 18:47:49 2000  Thomas Roessler  <roessler@guug.de>
+
+       * main.c: Cosmetics.
+
+       * doc/mutt.man, doc/muttrc.man.head:
+       Cosmetics.  Additionally, remove the y2k compliance notice from the
+       manual page.
+
+       * makedoc.c:
+       Change the font used for typesetting "tables", so we get usable
+       output when roffing the muttrc (5) manual page for a postscript
+       printer.
+
+       * po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/uk.po, po/pl.po, po/ru.po, po/ko.po, po/nl.po, po/gl.po, po/id.po, po/it.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/cs.po, po/de.po:
+       Include various po-file updaes, and make update-po.
+
+       * po/Makefile.in.in, po/POTFILES.in, Makefile.am:
+       Build fix for the po/ subdirectory, from Edmund G. Evans.
+
+       * po/eo.po: New Esperanto translation.
+
+       * init.h: Add a bit more documentation on $recall.
+
+Sun Jan 30 13:35:22 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/nl.po, po/pl.po, po/id.po, po/it.po, po/ko.po, po/es.po, po/fr.po, po/gl.po, po/eo.po, po/POTFILES.in, po/cs.po, po/de.po, po/el.po, po/Makefile.in.in, configure.in:
+       Try to fix the build process in the po/ subdirectory.
+
+       * configure.in: Add some languages to ALL_LINGUAS.
+
+       * po/gl.po, po/sv.po: Adding translations from stable to unstable.
+
+       * po/ru.po, po/zh_TW.Big5.po, po/fr.po, po/id.po, po/ko.po, po/pl.po, po/de.po, po/el.po, po/eo.po:
+       make update-po; including new revisions submitted so far.
+
+Sat Jan 29 08:03:48 2000  Thomas Roessler  <roessler@guug.de>
+
+       * init.h: Another change to attach_format.
+
+       * pgp.c, recvattach.c, send.c, sendlib.c, OPS, compose.c, functions.h, init.h, mutt.h, parse.c:
+       Michael Elkins' content-disposition patch, with some small changes.
+
+Fri Jan 28 21:32:47 2000  Thomas Roessler  <roessler@guug.de>
+
+       * init.h:
+       Make the documentation for rfc2047_parameters comprehensible to the
+       end user.
+
+       * init.h: Documentation fix.
+
+       * rfc2231.c: RFC2231 support should understand utf-8.
+
+Thu Jan 27 09:57:09 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/imap_ssl.c, README.SSL, init.h, mutt.h:
+       Add options to disallow individual SSL protocols.  From Jeremy Katz
+       <katzj@linuxpower.org>.
+
+Tue Jan 25 21:21:10 2000  Thomas Roessler  <roessler@guug.de>
+
+       * imap/BUGS, imap/README, imap/TODO, imap/command.c, imap/imap.c, imap/message.c:
+       Brendan Cully's latest changes:
+
+          Here is a patch to add some support for read-only IMAP folders.
+          This is most useful if you have multiple copies of mutt open, but
+          it also allows you to open a folder read-only and not have to
+          worry about flags getting changed. Toggling read-only still
+          doesn't work correctly - you may lose your 'N' flags if you open
+          a folder normally and switch to read-only.
+
+         I've also decided to try using UID FETCH, although I'm not sure if
+         older IMAP servers support it, but then again I'm not sure if
+         anyone's using any really old IMAP servers. The main advantage is
+         in the case of multiple clients, where one client is deleting
+         messages and the other isn't getting notification. I'm
+         experiencing that on my UW-IMAP 4.6 server. On the other hand,
+         this server seems to have all sorts of terrible problems with this
+         scenario, so I'm not sure how well the code functions. It's a
+         two-line change so far, it's experimental, and it's the only IMAP
+         code in an #if 0 block...
+
+       * doc/Makefile.in:
+       Make the build process work when sgmltools aren't present.  From
+       Lawrence Greenfield <leg+@andrew.cmu.edu>.
+
+       * imap/auth.c:
+       Fix GSSAPI support.  From Lawrence Greenfield <leg+@andrew.cmu.edu>.
+
+Mon Jan 24 13:17:17 2000  Thomas Roessler  <roessler@guug.de>
+
+       * dotlock.h, mx.c, dotlock.c: Locking fix.
+
+       * enter.c: patch-1.1.2.mg.autocomplete.1 - from Marius Gedminas
+       <mgedmin@pub.osf.lt>.
+
+       * Makefile.am: small build process fix.
+
+       * m4/Makefile.am.in:
+       Patch from Lars Hecking in order to build mutt cleanly under Solaris
+       2.6.
+
+       * doc/manual.sgml.head:
+       More list-reply documentation from Mikko.Hanninen@iki.fi.
+
+       * init.h, mutt.h, rfc822.c:
+       Removing rewrite_uucp.  There were too many objections against it.
+
+       * init.h, mutt.h, rfc822.c: Adding the $rewrite_uucp option.
+
+       * po/ru.po: update.
+
+       * po/eo.po, configure.in:
+       Adding the Esperanto translation to unstable.  From Edmund GRIMLEY
+       EVANS <edmundo@rano.org>.
+
+Fri Jan 21 09:28:56 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/el.po: New greek translation.
+
+       * po/id.po: updated translation.
+
+Thu Jan 20 17:35:41 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/pl.po: Updated polish translation.
+
+       * contrib/Makefile.in, Makefile.am:
+       "make distclean" fixes from Marco d'Itri.
+
+       * compose.c: Typo noted by edmundo@rano.org.
+
+       * po/ko.po: Update.
+
+       * send.c: Honor mail-followup-to when doing a list-reply.  From
+       Mikko.Hanninen@iki.fi.
+
+Wed Jan 19 14:59:01 2000  Thomas Roessler  <roessler@guug.de>
+
+       * commands.c:
+       Don't move the index cursor after a failed attempt to save a
+       message.  From Joe Orton <joe@orton.demon.co.uk>.
+
+       * po/de.po: New German translation for unstable, from Roland Rosenfeld.
+
+       * pgp.c: Fiksing a speling mysdeik nodet by Michael Sobolev. ;-)
+
+       * NEWS: Add a notice on display-toggle-weed.
+
+       * doc/manual.sgml.head, doc/manual.sgml.tail, OPS, functions.h:
+       Rename display-headers to display-toggle-weed.
+
+Tue Jan 18 22:46:18 2000  Thomas Roessler  <roessler@guug.de>
+
+       * mx.c: mx_open_mailbox_append: Add an error message and remove a file
+       descriptor leak when we can open, but can't lock an MMDF or MBOX
+       folder.
+
+       * po/zh_TW.Big5.po, po/uk.po, po/sv.po, po/sk.po, po/ru.po, po/pt_BR.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/gl.po, po/id.po, po/fr.po, po/eo.po, po/es.po, po/el.po, po/de.po, po/cs.po, reldate.h, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.0.1
+
+       * contrib/Makefile.in:
+       Respect $DESTDIR in contrib/Makefile.  From Hao Li
+       <hli@rainfinity.com>.
+
+       * imap/imap.c, imap/message.c:
+       Fix use of confirmcreate with IMAP.  A patch for this was suggested
+       by Brian R. Gaeke.
+
+       * init.h, alias.c:
+       Documentation fix about gecos_mask.  From Will Fiveash.
+
+Sun Jan 16 14:44:12 2000  Thomas Roessler  <roessler@guug.de>
+
+       * po/eo.po: new esperanto translation from edmundo@rano.org.
+
+       * editmsg.c:
+       Use Visual, not Editor, for editing messages.  Noted by Marius
+       Gedminas <mgedmin@pub.osf.lt>.
+
+       * rfc822.c:
+       quote-related fix to the RFC822 parser.  From Edmund Grimley Evans.
+
+Wed Jan 12 09:20:34 2000  Thomas Roessler  <roessler@guug.de>
+
+       * init.c:
+       It was impossible to unset a string.  If you did "unset realname" it
+       would just print out the value of the string.  Attached is the fix.
+
+Mon Jan 10 21:34:06 2000  Thomas Roessler  <roessler@guug.de>
+
+       * reap.pl: Handle #ifndef in reap.pl.
+
+       * configure.in:
+       Recognize differently-named gccs as such, and enable warnings.  From
+       "Andrew W. Nosenko" <awn@bcs.zp.ua>.
+
+       * pgp.c:
+       To compile on SunOs 4.1.4, the order of two includes needs to be
+       switched (<sys/resource.h> contains a struct timeval.)
+
+       From Mark Seiden <mis@seiden.com>.
+
+       * doc/manual.sgml.head, pgplib.h, postpone.c, recvattach.c, recvcmd.c, remailer.c, remailer.h, rfc2231.c, rfc2231.h, attach.c, charset.c, charset.h, dotlock.h, editmsg.c, extlib.c, gnupgparse.c, lib.c, lib.h, makedoc.c, mh.c, muttlib.c, mx.c, mx.h, pgp.h:
+       More copyright cosmetics - noted by Martin Michlmayr <tbm@cyrius.com>.
+
+       * lib.c: Use safe_free() instead of free() with mutt_str_replace -
+       equivalent, but nicer.
+
+       * parse.c, pgpkey.c, postpone.c, protos.h, recvattach.c, rfc1524.c, rfc2047.c, send.c, sendlib.c, attach.c, browser.c, compose.c, curs_main.c, edit.c, history.c, init.c, lib.c, main.c, menu.c, mh.c, muttlib.c:
+       Add (and use) a function mutt_str_replace, which essentially
+       replaces the sequence:
+
+               safe_free (&s);
+               s = safe_strdup (t);
+
+       * build-release, gnupgparse.c:
+       Fix PGP uid parsing.  Noted by Edmund GRIMLEY EVANS
+       <edmundo@rano.demon.co.uk>.
+
+Sat Jan  8 10:31:28 2000  Thomas Roessler  <roessler@guug.de>
+
+       * VERSION, reldate.h, ChangeLog:
+       automatic post-release commit for mutt-1.1.2
+
+       * keymap.c:
+       Fix a macro-related segmentation fault in stable.   From Byrial
+       Jensen.
+
+       * keymap.c:
+       Fix a macro-related segmentation fault.  From Byrial Jensen.
+
+       * OPS, commands.c, compose.c, curs_main.c, functions.h, protos.h, recvattach.c:
+       Unified edit-type function for the index, compose, and
+       receive-attachment menus.  Mostly by Michael Elkins.
+
+       * curs_lib.c: patch-1.1.1.me.endwin.1, from Michael Elkins.
+
+       * mutt.h, parse.c, init.h: Undo Michaels "pgpsearchext" patch.
+
+Sat Jan  8 09:40:02 2000  Thomas Roessler  <roessler@guug.de>
+
+       * keymap.c:
+       Fix a macro-related segmentation fault in stable.   From Byrial
+       Jensen.
+
+       * keymap.c:
+       Fix a macro-related segmentation fault.  From Byrial Jensen.
+
+       * OPS, commands.c, compose.c, curs_main.c, functions.h, protos.h, recvattach.c:
+       Unified edit-type function for the index, compose, and
+       receive-attachment menus.  Mostly by Michael Elkins.
+
+       * curs_lib.c: patch-1.1.1.me.endwin.1, from Michael Elkins.
+
+       * mutt.h, parse.c, init.h: Undo Michaels "pgpsearchext" patch.
+
+Thu Jan  6 12:00:50 2000  Thomas Roessler  <roessler@guug.de>
+
+       * rfc2231.c, rfc2231.h, rfc822.c, rfc822.h, score.c, send.c,
+       sendlib.c, signal.c, sort.c, sort.h, status.c, system.c,
+       thread.c, pgplib.c, pgplib.h, pgppubring.c, pop.c,
+       postpone.c, protos.h, query.c, recvattach.c, recvcmd.c,
+       remailer.c, remailer.h, resize.c, rfc1524.c, rfc1524.h,
+       rfc2047.c, rfc2047.h, mh.c, mime.h, mutt.h, mutt_curses.h,
+       mutt_menu.h, mutt_regex.h, muttlib.c, mx.c, mx.h, pager.c,
+       pager.h, parse.c, pattern.c, pgp.h, pgpinvoke.c, keymap.c,
+       keymap.h, lib.c, lib.h, mailbox.h, main.c, makedoc.c,
+       mapping.h, mbox.c, menu.c, init.h, hash.h, hdrline.c,
+       headers.c, help.c, history.c, history.h, hook.c, init.c,
+       copy.h, curs_lib.c, curs_main.c, date.c, dotlock.c,
+       dotlock.h, edit.c, editmsg.c, enter.c, extlib.c, filter.c,
+       flags.c, from.c, functions.h, globals.h, gnupgparse.c,
+       handler.c, hash.c, attach.c, attach.h, browser.c, browser.h,
+       buffy.c, buffy.h, charset.c, charset.h, color.c, commands.c,
+       complete.c, compose.c, copy.c, addrbook.c, alias.c: Update
+       copyright notices for unstable.
+
+       * Attic/socket.c, signal.c, sort.c, sort.h, status.c,
+       system.c, thread.c, query.c, recvattach.c, resize.c,
+       rfc1524.c, rfc1524.h, rfc2047.c, rfc2047.h, rfc822.c,
+       rfc822.h, score.c, send.c, sendlib.c, pattern.c, pgp.c,
+       pgpinvoke.c, pgpkey.c, pgppubring.c, pop.c, postpone.c,
+       protos.h, pager.h, parse.c, Attic/mutt_socket.h, menu.c,
+       mh.c, mime.h, mutt.h, mutt_curses.h, mutt_menu.h,
+       mutt_regex.h, mx.c, mx.h, pager.c, Attic/imap.h, init.c,
+       init.h, keymap.c, keymap.h, lib.c, mailbox.h, main.c,
+       mapping.h, mbox.c, Attic/imap.c, hash.c, hash.h, hdrline.c,
+       headers.c, help.c, history.c, history.h, hook.c,
+       curs_main.c, date.c, dotlock.c, dotlock.h, edit.c, enter.c,
+       filter.c, flags.c, from.c, functions.h, globals.h,
+       gnupgparse.c, handler.c, buffy.c, buffy.h, charset.c,
+       charset.h, color.c, commands.c, complete.c, compose.c,
+       copy.c, copy.h, curs_lib.c, addrbook.c, alias.c, attach.c,
+       attach.h, browser.c: Updat copyright notices in stable.
+
+Wed Jan  5 09:40:52 2000  Thomas Roessler  <roessler@guug.de>
+
+       * init.h, mutt.h, parse.c:
+       patch-1.1.1.me.pgpsearchtext.1.  From Michael Elkins.
+
+Mon Jan  3 10:15:54 2000  Thomas Roessler  <roessler@guug.de>
+
+       * strcasecmp.c: New str*casecmp replacements for stable.
+
+       * strcasecmp.c:
+       Fix strncasecmp and strcasecmp replacement functions.  Problem noted
+       by Stu Heiss <stu@jpusa1.chi.il.us>.
+
+Sat Jan  1 17:59:51 2000  Thomas Roessler  <roessler@guug.de>
+
+       * parse.c: y2k fix for 1.0.
+
+       * parse.c: A y2k fix for those who still use two-digit year numbers as
+       originally specified in RFC 822.
+
+Wed Dec 29 18:38:07 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/zh_TW.Big5.po:
+       New Chinese translation; from Anthnoy Wong <ypwong@debian.org>; Dec
+       21 1999.
+
+       * sort.c: Fix a minor threading bug.  From Edmund GRIMLEY EVANS
+       <edmundo@rano.demon.co.uk>, Dec 14 1999.
+
+       * browser.c:
+       Fix the use of link_is_dir() in the file browser.  This should fix
+       the bug reported by John Yates <yates@flatiron.com> on Dec 07 1999.
+       (Details noted by Byrial Jensen <byrial@image.dk> on Dec 09 1999.)
+
+       * send.c:
+       Don't use IMAP folders for FCCs when sending messages in batch mode.
+       This is _not_ Brendan's patch, which may be included later.
+
+Tue Dec 14 10:29:25 1999  Thomas Roessler  <roessler@guug.de>
+
+       * INSTALL:
+       Add a short note that EXACT_ADDRESS is broken.  In order to fix it,
+       we'd need a RFC 2047 implementation which knows about RFC 822
+       syntax.  (This would also help with In-Reply-To headers, BTW, but
+       would be considerably more complex.)
+
+Mon Dec 13 11:36:01 1999  Thomas Roessler  <roessler@guug.de>
+
+       * init.h, mutt.h, protos.h, send.c, sendlib.c:
+       Adding the envelope_from option.
+
+Thu Dec  9 11:17:35 1999  Thomas Roessler  <roessler@guug.de>
+
+       * imap/README, imap/auth.c, imap/browse.c, imap/imap.c,
+       imap/imap.h, imap/imap_private.h, imap/imap_socket.h,
+       imap/imap_ssl.c, imap/message.c, imap/socket.c, imap/util.c,
+       doc/manual.sgml.head, init.c, browser.c: Tommi Komulainen's
+       multiple IMAP usernames patch.
+
+Mon Dec  6 09:59:28 1999  Thomas Roessler  <roessler@guug.de>
+
+       * mbox.c:
+       Cosmetic improvement for reading mmdf folders.  From John Hawkinson
+       <jhawk@bbnplanet.com>.
+
+Sat Dec  4 15:42:07 1999  Thomas Roessler  <roessler@guug.de>
+
+       * mx.c: Check for the presence of .overview files when testing whether
+       some directory is an MH folder.  This way, you can at least read
+       Usenet news from the spool using Mutt. ;-)
+
+       * alias.c, init.h, mutt_regex.h: William Feavish's GECOS regexp patch.
+
+Fri Dec  3 16:54:03 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.head:
+       Fix the documentation on how to join the mutt lists.  Noted by
+       Marius Gedminas <mgedmin@takas.lt>.
+
+       * init.h: Fix a small bug in the documentation for $hidden_host.
+
+       * configure.in: Fix the handling of --disable configure switches.
+
+       * configure.in:
+       patch-1.0.rr.autoconf-disable.1: --disable-pop shouldn't enable pop.
+
+       * rfc2047.c:
+       Properly tag quoted-printable encoded RFC 2047 strings with
+       $send_charset, not with $charset.
+
+       * Makefile.am, README, README.UPGRADE:
+       Adding one more readme file.  This one is intended to serve as some
+       kind of "howto" for the most notable incompatible configuration
+       changes.
+
+Thu Dec  2 16:29:26 1999  Thomas Roessler  <roessler@guug.de>
+
+       * pgpkey.c: Fix the PGP key selection menu's title.
+
+       * imap/imap_ssl.c: SSL fixes from Tommi Kommulainen.
+
+       * NEWS: Announce edit-message and resend-message, and the changes in
+       recvcmd.c.
+
+       * doc/manual.sgml.head:
+       Clarify the documentation of lists/unlists/subscribe/unsubscribe a
+       bit.
+
+Wed Dec  1 12:06:31 1999  Thomas Roessler  <roessler@guug.de>
+
+       * imap/util.c: Now, I should have got the signal handling right.
+
+       * imap/util.c:
+       another alarm (0) was missing.  (However, this one didn't crash mutt.)
+
+       * imap/util.c:
+       imap_keepalive: cancel pending alarms.  Otherwise, mutt will die
+       frequently.
+
+       * imap/util.c:
+       Re-set the list of blocked signals after the imap_keepalive stuff.
+
+       * imap/imap.h, imap/util.c, curs_lib.c, mutt.h, system.c:
+       A modified version of Tommi Kommulainen's imap keepalive patch.
+
+Fri Nov 26 09:19:03 1999  Thomas Roessler  <roessler@guug.de>
+
+       * imap/message.c: Fix the lines header.
+
+Thu Nov 25 15:18:02 1999  Thomas Roessler  <roessler@guug.de>
+
+       * imap/imap.h, imap/util.c, curs_lib.c, mutt.h, system.c:
+       Undo the IMAP keepalive patch.  It has just bitten me while mutt was
+       trying to dotlock a folder.  Seems that there needs some more work
+       to be done.
+
+       * imap/imap.h, imap/util.c, mutt.h, system.c, curs_lib.c:
+       A modified version of Tommi Komulainen's imap keepalive patch.
+
+Wed Nov 24 16:29:58 1999  Thomas Roessler  <roessler@guug.de>
+
+       * NEWS:
+       Change some headlines: Instead of "major changes since <unstable
+       version>", it's "major changes since 1.0" now.  In addition, I
+       changed the note concerning the lists/subscribe change to be more
+       explicit than the old one.
+
+       * imap/message.c: IMAP line count fix from Tommi.Komulainen@iki.fi.
+
+Tue Nov 23 23:43:51 1999  Thomas Roessler  <roessler@guug.de>
+
+       * postpone.c:
+       mutt_prepare_template() didn't work with PGP-encrypted messages due
+       to an - errm - interesting typo.
+
+       * doc/manual.sgml.head:
+       Document the fact that users can enter a mail-followup-to header in
+       the editor.  There seems to have been some confusion about this.
+
+       * doc/PGP-Notes.txt, acconfig.h, configure.in, pgp.c:
+       Disable core dumps before we ask the user for a pass phrase.
+       Suggested by <Stefan.Alfredsson@kau.se>.
+
+       * doc/PGP-Notes.txt: Include the maildrop recipe Mark Weinem
+       <mark.weinem@unidui.uni-duisburg.de> sent me some weeks ago.
+
+       * muttlib.c: Permit !! for the last folder.  Elm compatibility.
+
+       * NEWS: Tell our users that fcc_clear exists.
+
+       * init.h, mutt.h, send.c:
+       Adding an fcc_clear option for unencrypted and unsigned FCCs.
+
+       * imap/Makefile.am: Include the SSL-related code with "make dist".
+
+Mon Nov 22 16:01:42 1999  Thomas Roessler  <roessler@guug.de>
+
+       * imap/imap.c, imap/imap.h, imap/imap_private.h, imap/message.c, imap/util.c, imap/BUGS, imap/README, imap/TODO, OPS, browser.c, functions.h, pgppubring.c:
+       IMAP folder creation and deletion.  From Brendan Cully.
+
+       * po/de.po:
+       Der Versuch, "Diskussionsfaden" durch etwas Verständlicheres zu
+       ersetzen. ;-)
+
+Thu Nov 18 16:19:35 1999  Thomas Roessler  <roessler@guug.de>
+
+       * init.h: Include SSL documentation in the manual.
+
+       * dotlock.c: indentation noise.
+
+       * imap/socket.c: Small code clean-up.
+
+       * mx.c:
+       Detect .mew_cache files in MH folders.  Suggested by Kawaguti Ginga
+       <ginga@amalthea.phys.s.u-tokyo.ac.jp>.
+
+       * doc/manual.sgml.head: Documentation nit from Byrial Jensen.
+
+       * lib.c:
+       patch-1.0.bj.lastline.1: Handle last lines in configuration files
+       nicely, even when they are not terminated by a \n character.
+
+       * parse.c, rfc2231.c: Some rather cosmetic changes.
+
+Wed Nov 17 22:47:59 1999  Thomas Roessler  <roessler@guug.de>
+
+       * menu.c: some reorganizations of the dialog menu code.
+
+       * alias.c:
+       Fix the address sanitizer.  You should now be able to auto-create an
+       alias for someone like "Jon K. Hellan" <hellan@acm.org>.
+
+       * imap/Makefile.am, imap/browse.c, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/imap_socket.h, imap/imap_ssl.c, imap/imap_ssl.h, imap/message.c, imap/socket.c, imap/util.c, doc/manual.sgml.head, Makefile.am, NEWS, README.SSL, acconfig.h, configure.in, init.c, init.h, main.c, mutt.h:
+       Tommi Komulainen's IMAP/SSL support patches.
+
+       * menu.c, mutt_menu.h: Tommi Komulainen's menu/dialog patch.
+
+Mon Nov 15 17:44:15 1999  Thomas Roessler  <roessler@guug.de>
+
+       * pgp.c: Fix the pgp-hook logic.
+
+       * color.c: Small color fix from T. E. Dickey.
+
+       * color.c: A small patch from TE Dickey.
+
+Thu Nov 11 18:30:25 1999  Thomas Roessler  <roessler@guug.de>
+
+       * rfc822.c: ups, the previous patch included a small buffer overflow.
+
+       * po/Attic/gl.po:
+       Roberto Suarez Soto <robe@ceu.fi.udc.es> sent us a new translation.
+
+       * rfc822.c: Fix a header quoting bug.
+
+       * doc/Makefile.in: Another build process patch from Brendan Cully.
+
+Wed Nov 10 21:35:33 1999  Thomas Roessler  <roessler@guug.de>
+
+       * rfc2231.c: Ignore empty MIME parameters.
+
+Tue Nov  9 12:40:14 1999  Thomas Roessler  <roessler@guug.de>
+
+       * mbox.c, parse.c: Add some more sanity checks about content-length.
+
+       * curs_lib.c:
+       Fix an SLang-related compilation problem.  Originally from Jon Kåre
+       Hellan.
+
+       * postpone.c:
+       Simplify mutt_prepare_template ().  Instead of copying around all
+       kinds of data, we re-parse the postponed message's structure.
+
+       * postpone.c:
+       Make sure mutt doesn't forget MIME structure when the user resends a
+       message/rfc822 body from the recvattach menu.  Note, however, that
+       this is more of a temporary solution - I think there is some more
+       space for improvements in mutt_prepare_template().
+
+       * imap/Makefile.am, doc/Makefile.in, contrib/Makefile.in, configure.in, Makefile.am:
+       Build process fixes from Brendan Cully.
+
+       * pager.c: Add a missing redraw after resend-message.
+
+Mon Nov  8 22:10:49 1999  Thomas Roessler  <roessler@guug.de>
+
+       * VERSION:
+       Undo changes which are due to release-building tests.  After all, we
+       want the _right_ diff next time.
+
+       * build-release: Finalize the new build-release script.
+
+       * ChangeLog, VERSION, build-release:
+       automatic post-release commit for mutt-1.1.1.2
+
+       * Attic/LAST_TAG, Attic/OVERSION, Makefile.am, VERSION, build-release, ChangeLog:
+       automatic post-release commit for mutt-1.1.1.1
+
+       * Attic/LAST_TAG, Attic/OVERSION, Makefile.am:
+       Preparing some improvements to the build process.
+
+Mon Nov  8 21:56:29 1999  Thomas Roessler  <roessler@guug.de>
+
+       * Attic/LAST_TAG, Attic/OVERSION, Makefile.am, VERSION,
+       build-release, ChangeLog: automatic post-release commit for
+       mutt-1.1.1.1
+
+       * Attic/LAST_TAG, Attic/OVERSION, Makefile.am:
+       Preparing some improvements to the build process.
+
+       NOTICE: You'll find a version 1.1.1.1 in the logs, and in
+       the CVS tags.  This version is identical to 1.1.1, and
+       exculsively serves the purpose to test some improvements to
+       the release build process.
+
+       * LAST_TAG, Makefile.am, OVERSION:
+       Preparing some improvements to the build process.
+
+       * po/de.po, reldate.h, VERSION, ChangeLog:
+       automatic post-release commit for mutt-1.1.1
+
+Sun Nov  7 22:52:40 1999  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c:
+       short-cut utf-7 as a 7bit character set.  Currently, utf-7 may be
+       overridden by us-ascii.
+
+       * protos.h, recvattach.c, recvcmd.c, rfc1524.c, rfc1524.h, send.c, sendlib.c, attach.c, attach.h, browser.c, commands.c, compose.c, curs_main.c, functions.h, init.h, mutt.h, muttlib.c, pager.c, pager.h, postpone.c, Makefile.am:
+       Rewriting lots of the recvattach code.
+
+       * po/Attic/eo.po: Esperanto translation from Edmund GRIMLEY EVANS
+       <edmundo@rano.demon.co.uk>.
+
+       * po/Attic/eo.po:
+       file eo.po was initially added on branch mutt-1-0-stable.
+
+       * configure.in: Esperanto translation from Edmund GRIMLEY EVANS
+       <edmundo@rano.demon.co.uk>.
+
+Fri Nov  5 07:28:11 1999  Thomas Roessler  <roessler@guug.de>
+
+       * pgppubring.c: preprocess out some unused strings.
+
+Thu Nov  4 21:35:32 1999  Thomas Roessler  <roessler@guug.de>
+
+       * rfc2231.c:
+       Catch a segmenatation fault.  Note that this is not the real fix for
+       the problem...
+
+       * menu.c: Change a short to an int where it should have been one.
+
+       * po/Attic/gl.po: New version.
+
+       * protos.h, send.c, status.c, buffy.c, globals.h, postpone.c:
+       IMAP postpone changes from Byrial Jensen.
+
+Wed Nov  3 20:30:19 1999  Thomas Roessler  <roessler@guug.de>
+
+       * recvattach.c:
+       Adding a comment which describes some ideas on how the attachment
+       menu should work.
+
+Tue Nov  2 15:51:07 1999  Thomas Roessler  <roessler@guug.de>
+
+       * imap/BUGS, imap/command.c, imap/imap.c, imap/imap_private.h, imap/message.c, imap/util.c, buffy.c:
+       Various IMAP-related fixes from Brendan Cully.
+
+Sun Oct 31 17:12:55 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/it.po: [stable] Small fix from Marco d'Itri.
+
+       * m4/.cvsignore, intl/.cvsignore, imap/BUGS, imap/message.c, contrib/.cvsignore, charmaps/.cvsignore:
+       From Brendan Cully: IMAP updates should work properly again.
+
+Fri Oct 29 05:43:40 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/.cvsignore: Cosmetics.
+
+       * imap/BUGS: Update the documentation.
+
+       * doc/.cvsignore: Cosmetics.
+
+       * buffy.c, globals.h, postpone.c, send.c, status.c:
+       Don't check the number of postponed messages every time the status
+       line is updated - this gets quite slow when used with slow IMAP
+       connections.
+
+Thu Oct 28 17:42:07 1999  Thomas Roessler  <roessler@guug.de>
+
+       * README: Fix the version number in the README file.
+
+       * pop.c: Cosmetic POP fixes from Evan DiBiase <evand@telerama.com>.
+
+       * pop.c: Cosmetic fixes from Evan DiBiase <evand@telerama.com>.
+
+       * imap/imap_socket.h, imap/socket.c, init.h, globals.h:
+       Adding imap_preconnect.  This way, you can let mutt start an ssh
+       tunnel before it tries to connect to an IMAP server.
+
+       From: <Jon.K.Hellan@item.ntnu.no>
+
+Wed Oct 27 12:17:34 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/Attic/gl.po: Adding a Galician translation.
+
+       * po/Attic/gl.po:
+       file gl.po was initially added on branch mutt-1-0-stable.
+
+       * configure.in: Adding a Galician translation.
+
+Tue Oct 26 15:14:01 1999  Thomas Roessler  <roessler@guug.de>
+
+       * curs_lib.c, main.c: Some display-related fixes from Andrej Gritsenko.
+
+       * editmsg.c:
+       Fix a small bug in the new edit-message feature.  From Andrej
+       Gritsenko.
+
+       * imap/imap.c, imap/imap_private.h, imap/util.c, imap/auth.c, imap/browse.c, imap/command.c:
+       * stops mutt from logging CRAM secrets in debug mode.
+       * should fix mutt segfaulting when trying to open {}
+       * helps with the problem of mutt detecting new mail in the wrong
+         folder. Now, IMAP commands from the SELECTED state should call
+         imap_cmd_finish after they've executed commands. I've only put
+         this is imap_buffy_check for now - in my opinion the command
+         execution path is still not stable, and rewrites may obviate the
+         need for this...
+
+       (From: Brendan Cully <brendan@kublai.com>)
+
+Mon Oct 25 20:05:14 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/Attic/sv.po: Adding the Swedish translation to stable.
+
+       * po/Attic/sv.po:
+       file sv.po was initially added on branch mutt-1-0-stable.
+
+       * configure.in: Adding the Swedish translation to stable.
+
+       * po/de.po: Updated German translation from Roland Rosenfeld.
+
+       * imap/imap.h, imap/imap_private.h, imap/message.c, imap/util.c, imap/.cvsignore, imap/BUGS, imap/Makefile.am, imap/browse.c, imap/command.c, imap/imap.c, init.h:
+       Brendan Cully's IMAP code movements patch.
+
+Fri Oct 22 08:49:30 1999  Thomas Roessler  <roessler@guug.de>
+
+       * Makefile.am, VERSION, reldate.h, ChangeLog:
+       automatic post-release commit for mutt-1.1
+
+       * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/pt_BR.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/el.po, po/de.po, po/cs.po, NEWS, VERSION, reldate.h, ChangeLog:
+       post-release commit for one dot zero.  (yes, really.)
+
+Fri Oct 22 07:52:22 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/pt_BR.po,
+       po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po,
+       po/fr.po, po/es.po, po/el.po, po/de.po, po/cs.po, NEWS,
+       VERSION, reldate.h, ChangeLog: post-release commit for one
+       dot zero.  (yes, really.)
+
+Thu Oct 21 08:07:22 1999  Thomas Roessler  <roessler@guug.de>
+
+       * compose.c: Another sprintf-vs-null issue.
+
+Wed Oct 20 14:51:57 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/id.po: new indonesian translation.
+
+       * imap/message.c:
+       Flags should only be modified using mutt_set_flag().  Everything
+       else leads to neglected side effects.  In this case, index colors,
+       searches and possibly other side effects were ignored when a message
+       which resides on an IMAP folder was read.
+
+       * imap/auth.c: Let the user skip CRAM-MD5 by entering an empty secret.
+
+       * po/id.po, po/el.po: translation updates.
+
+       * configure.in: Don't use GNU grep specific options.
+
+Tue Oct 19 15:34:04 1999  Thomas Roessler  <roessler@guug.de>
+
+       * imap/auth.c: Fix some sloppiness-induced, but harmless, nonsense.
+
+       * imap/imap_private.h, imap/auth.c, imap/imap.c:
+       Add AUTHENTICATE=ANONYMOUS support to the IMAP authentication
+       methods.  This is, for instance, needed to access the cyrus-related
+       mailing lists' archives at CMU.
+
+       * po/el.po: New greek translation.
+
+Mon Oct 18 09:13:42 1999  Thomas Roessler  <roessler@guug.de>
+
+       * pgp.c: Handle Ctrl-G on the pgp-hook prompt correctly.
+
+Sat Oct 16 15:19:29 1999  Thomas Roessler  <roessler@guug.de>
+
+       * Makefile.am: doc/PGP-Notes.txt vs. doc/PGP-Notes.
+
+       * Makefile.am: [stable] doc/PGP-Notes.txt has an extension. ups.
+
+       * send.c: [stable] Fix Debian bug #47408.
+
+       * send.c:
+       Fix Debian bug #47408: When the postponed folder is a maildir,
+       messages should only be written to the _new_ subdirectory.
+
+       * po/nl.po: New nl translation from Johan van Selst <johans@stack.nl>.
+
+       * po/cs.po:
+       New cs translation from Jiri Pavlovsky <pavlovsk@ff.cuni.cz>.
+
+       * po/zh_TW.Big5.po:
+       [stable] chinese translation fixes from Anthony Wong
+       <ypwong@debian.org>.
+
+       * init.h: scoring documentation fix.
+
+       * globals.h, init.h, mutt.h, mx.c, protos.h, score.c, sort.c:
+       Scoring improvements.
+
+Thu Oct 14 16:09:10 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/ru.po: New Russian tranlation for stable.
+
+       * contrib/gpg.rc: New gpg.rc from Roland Rosenfeld.
+
+       * po/fr.po: [stable] New french translation.
+
+       * po/de.po: [stable] Fixes to the German translation.
+
+       * pattern.c:
+       [stable] Fix a segmentation fault when attempting to search
+       pgp-encrypted messages.
+
+       * pattern.c:
+       Fix a segmentation fault when search PGP-encrypted messages.
+
+Mon Oct 11 20:26:41 1999  Thomas Roessler  <roessler@guug.de>
+
+       * VERSION, po/es.po, reldate.h, ChangeLog:
+       automatic post-release commit for mutt-0.96.8
+
+       * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/el.po, po/de.po, po/cs.po, VERSION, reldate.h, ChangeLog:
+       post-release commit for 1.0pre4.
+
+       * po/zh_TW.Big5.po: New Chinese Translation.
+
+       * dotlock.c: [stable] Use dotlock.c from unstable.
+
+Mon Oct 11 19:16:13 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/zh_TW.Big5.po: New Chinese Translation.
+
+       * dotlock.c: [stable] Use dotlock.c from unstable.
+
+Wed Oct  6 20:20:54 1999  Thomas Roessler  <roessler@guug.de>
+
+       * Makefile.am: Makefile.am fix for unstable.
+
+       * Makefile.am:
+       [stable] Check for mutt_dotlock in $(DESTDIR)$(bindir), not in
+       $(bindir). This should fix some Debian build problems.
+
+       * init.h: fix the $from documentation.  Noted by David DeSimone.
+
+Tue Oct  5 06:50:34 1999  Thomas Roessler  <roessler@guug.de>
+
+       * compose.c, mutt.h, recvattach.c: small fixes from Gero Treuner.
+
+       * mutt.h, recvattach.c, compose.c:
+       [stable] small fixes from Gero Treuner.
+
+Mon Oct  4 10:05:26 1999  Thomas Roessler  <roessler@guug.de>
+
+       * configure.in: [stable] add pt_BR to ALL_LINGUAS.
+
+       * configure.in: add pt_BR to ALL_LINGUAS.
+
+       * po/pt_BR.po: Brasilian translation.
+
+       * po/pt_BR.po:
+       file pt_BR.po was initially added on branch mutt-1-0-stable.
+
+       * imap/BUGS, imap/Makefile.am, imap/README, imap/auth.c, imap/imap.c, imap/util.c, .cvsignore, mx.c:
+       Some fixes from Brendan Cully.
+
+       * pgpewrap: pgpewrap spits out ugly error messages when used with ash.
+
+       * configure.in:
+       AM_C_PROTOTYPES seems to be too recent for the installed
+       automake/autoconf base.
+
+       * postpone.c: Remove some nonsense from the resend-message patches.
+
+       * postpone.c: Fix a memory leak.
+
+Thu Sep 30 22:05:28 1999  Thomas Roessler  <roessler@guug.de>
+
+       * imap/message.c, send.c, sendlib.c, OPS, buffy.c, curs_main.c, functions.h, headers.c, main.c, mbox.c, mh.c, mutt.h, parse.c, parse.h, postpone.c, protos.h, recvattach.c:
+       Add a resend-message function (similar to the _old_ edit-message),
+       and redo large parts of mutt_prepare_edit_message (now
+       mutt_prepare_template).
+
+       * main.c: unstable cosmetics.
+
+       * main.c: [stable] cosmetic change suggested by marco d'itri.
+
+       * po/es.po: New spanish translation from Boris Wesslowsky.
+
+       * imap/Makefile.am, makedoc.c: Build fixes from Lars Hecking.
+
+       * doc/Attic/manual.sgml.in, Attic/Muttrc.in, NEWS, globals.h, init.h, send.c:
+       [stable] Re-add in_reply_to, this time with the right default value.
+
+       * sendlib.c: [unstable] fix the duplicate x-mailer/uesr-agent problem.
+
+       * send.c, globals.h, init.h:
+       [unstable] Re-add in-reply-to.  This time with a suitable default. #-\
+
+Wed Sep 29 17:47:33 1999  Thomas Roessler  <roessler@guug.de>
+
+       * configure.in: More fixes from Lars Hecking.
+
+       * configure.in: Adding AC_PREREQ to configure.in.
+
+       * configure.in:
+       make sure the right software is used for building mutt. Patch
+       suggested by Lars Hecking and Will Fiveash.
+
+       * pgpinvoke.c:
+       don't leak /dev/null file descriptors.  From Roland Rosenfeld.
+
+       * curs_main.c: fix^2 for stable.
+
+       * curs_main.c: Fixing the fix - missing brackets.
+
+       * curs_main.c, parse.c:
+       [stable] Fix some memory leaks noted by purify running on behalf of
+       Daniel Eisenbud.
+
+       * curs_main.c, parse.c:
+       Fix some memory leaks noted by purify running on behalf of Daniel
+       Eisenbud.
+
+Tue Sep 28 18:55:31 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/ru.po:
+       Here goes an update for version 1.0-pre3i.  The main feature of this
+       translation is that one-letter answers to multiple choice questions are not
+       localized (Thomas, could you please add this as comment to the update in CVS?)
+
+       (From: Michael Sobolev.)
+
+       * sendlib.c: [stable] Include SPACE and HT with MIME specials.
+
+       * sendlib.c: [unstable] Include SPACE and HT with MimeSpecials.
+
+       * Makefile.am: Better solution for the makedoc build using automake.
+
+       * Makefile.am:
+       Some makes apparently have to be told about how to build makedoc.
+
+Mon Sep 27 17:55:14 1999  Thomas Roessler  <roessler@guug.de>
+
+       * copy.c:
+       A back-port from unstable had missed some parts which could lead to
+       message corruption with mh mail folders.
+
+       * po/it.po: new Italian translation from Marco d'Itri.
+
+       * po/pl.po: New polish translation.
+
+       * po/de.po: Translation fix from Roland Rosenfeld.
+
+       * doc/Attic/manual.sgml.in: Documentation fix from Roland Rosenfeld.
+
+Sat Sep 25 07:37:51 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/el.po, po/de.po, po/cs.po:
+       post-release commit for 1.0pre3.
+
+       * VERSION, reldate.h, ChangeLog: pre-release commit for 1.0pre3.
+
+Fri Sep 24 17:51:55 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/uk.po, po/zh_TW.Big5.po, po/sk.po, po/pl.po, po/ru.po, po/it.po, po/ko.po, po/nl.po, po/fr.po, po/id.po, po/el.po, po/es.po, po/cs.po, po/de.po, ChangeLog, VERSION, reldate.h:
+       automatic post-release commit for mutt-0.96.7
+
+Thu Sep 23 21:13:55 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/el.po: New Greek tranlsation from Fanis <madf@geocities.com>.
+
+       * browser.c: [stable] Solaris snprintf vs. NULL pointers.
+
+       * browser.c:
+       Try not to pass NULL pointers to snprintf - the Solaris version
+       doesn't like them.  (Noted by Thomas.Parmelan@efrei.fr.)
+
+       * imap/imap_private.h, imap/socket.c, imap/util.c, imap/BUGS, imap/imap.c, buffy.c:
+       Brendan Cully's latest changes:
+
+       * includes all of my last patch, since it hasn't been committed yet.
+       * catches a couple segfault problems if Context is NULL.
+       * works harder to avoid sending null STORE FLAGS commands. May not
+         be perfect yet, but also has extra debugging code.
+       * has the beginnings of a more interactive IMAP error handler.
+         Doesn't do anything yet, I'm just including it because I want to
+         get the rest of the patch out.
+
+       * doc/Makefile.in, Makefile.am:
+       Use $(MAKE) instead of make.  Noted by Ryan Murray
+       <rmurray@cyberhqz.com>.
+
+       * doc/Makefile.in, Makefile.am, configure.in, init.h:
+       A small portability fix related to makedoc.
+
+       * po/es.po: [stable] new spanish translation from Boris Wesslowski
+       <Boris.Wesslowski@StudBox.Uni-Stuttgart.DE>.
+
+       * alias.c: increase this limit for stable as well.
+
+       * handler.c:
+       [stable] Fix a buffer overflow and a bug helping with exploiting this
+       overflow in the text/enriched handler.
+
+       * handler.c:
+       Fix a buffer overflow and a bug helping with exploiting this
+       overflow in the text/enriched handler.
+
+       * imap/browse.c, doc/manual.sgml.head, curs_main.c: This small patch:
+
+       * catches a possible null-pointer dereference in mx_close_mailbox when
+         logging out of the server.
+       * fixes IMAP tab-completion cosmetics (slightly broken with last
+         Cyrus-compatibility updates)
+       * adds a bit to the IMAP part of the manual.
+
+       Brendan Cully <brendan@kublai.com>
+
+       * alias.c:
+       Increase a buffer to make larger group aliases possible.  The
+       current STRING buffer was far too small.
+
+Thu Sep 23 21:13:55 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/el.po: New Greek tranlsation from Fanis <madf@geocities.com>.
+
+       * browser.c: [stable] Solaris snprintf vs. NULL pointers.
+
+       * browser.c:
+       Try not to pass NULL pointers to snprintf - the Solaris version
+       doesn't like them.  (Noted by Thomas.Parmelan@efrei.fr.)
+
+       * imap/imap_private.h, imap/socket.c, imap/util.c, imap/BUGS, imap/imap.c, buffy.c:
+       Brendan Cully's latest changes:
+
+       * includes all of my last patch, since it hasn't been committed yet.
+       * catches a couple segfault problems if Context is NULL.
+       * works harder to avoid sending null STORE FLAGS commands. May not
+         be perfect yet, but also has extra debugging code.
+       * has the beginnings of a more interactive IMAP error handler.
+         Doesn't do anything yet, I'm just including it because I want to
+         get the rest of the patch out.
+
+       * doc/Makefile.in, Makefile.am:
+       Use $(MAKE) instead of make.  Noted by Ryan Murray
+       <rmurray@cyberhqz.com>.
+
+       * doc/Makefile.in, Makefile.am, configure.in, init.h:
+       A small portability fix related to makedoc.
+
+       * po/es.po: [stable] new spanish translation from Boris Wesslowski
+       <Boris.Wesslowski@StudBox.Uni-Stuttgart.DE>.
+
+       * alias.c: increase this limit for stable as well.
+
+       * handler.c:
+       [stable] Fix a buffer overflow and a bug helping with exploiting this
+       overflow in the text/enriched handler.
+
+       * handler.c:
+       Fix a buffer overflow and a bug helping with exploiting this
+       overflow in the text/enriched handler.
+
+       * imap/browse.c, doc/manual.sgml.head, curs_main.c: This small patch:
+
+       * catches a possible null-pointer dereference in mx_close_mailbox when
+         logging out of the server.
+       * fixes IMAP tab-completion cosmetics (slightly broken with last
+         Cyrus-compatibility updates)
+       * adds a bit to the IMAP part of the manual.
+
+       Brendan Cully <brendan@kublai.com>
+
+       * alias.c:
+       Increase a buffer to make larger group aliases possible.  The
+       current STRING buffer was far too small.
+
+Sun Sep 12 19:39:10 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/es.po: [stable] Updated spanish translation from Boris Wesslowski.
+
+       * po/es.po:
+       [stable] Fixes for the Spanish translation.  From Nicolás Lichtmaier
+       <nick@debian.org>.
+
+       * imap/BUGS, imap/Makefile.am, imap/TODO, imap/auth.c, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/message.c, imap/util.c, buffy.c, commands.c, globals.h, init.h:
+       The attached patch (imap-turbocharge.diff):
+
+       * changes mutt_buffy_check to only poll the selected folder when it
+         is opened, not all mailboxes (unless the timeout has expired).
+         This is a noticeable win if you have a few IMAP mailboxes.
+
+       * sets the default checkinterval to 60 seconds from 0. Things are
+         much much slower with 0.
+
+       * makes some cosmetic renames
+
+       * moves lots of generic imap stuff into a separate file, imap/util.c
+
+       * abstracts the process of sending a command to an IMAP server a bit
+         better (lots more to do here, though).
+
+       * moves the message-set creation code used by the new fastdelete
+         code into its own function, since it is generally useful.
+
+       * implements server-side copy of messages. Tagged messages are
+         copied in one command, thanks to the message-set function. Speedy!
+
+       (From: Brendan Cully; modifications by tlr.)
+
+Sat Sep 11 17:04:12 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/pl.po: [stable] new polish translation from Pawel Dienkonski.
+
+       * po/es.po: [stable] New Spanish translation from Boris Wesslowski.
+
+       * configure.in: [stable] Hurd portability patch from Marcus Brinkmann.
+
+       * configure.in: Hurd portability patch from Marcus Brinkmann.
+
+       * imap/browse.c, imap/imap.c: Fix IMAP fast deletion.  From Brendan.
+
+       * Attic/Muttrc.in: typos fixed by Telsa.
+
+       * doc/Attic/manual.sgml.in:
+       Small manual fix for stable.  Noted by Telsa
+       <hobbit@aloss.ukuu.org.uk>.
+
+Wed Sep  8 06:05:54 1999  Thomas Roessler  <roessler@guug.de>
+
+       * imap/imap.c, imap/imap.h, imap/imap_private.h, mx.c, curs_main.c:
+       The attached patch:
+
+       * gets Mutt to properly log off the IMAP server when quitting. Clients
+         don't care, but it's polite and proper.
+       * further updates the flags changes from yesterday
+       * uses CLOSE instead of EXPUNGE when closing a mailbox and purging
+         messages, for some slight speed gain.
+       * purges all messages marked for deletion in one command (if purging),
+         making for very cool speed gains switching mailboxes if you're on,
+         say, a few high volume mailing lists. Yeah, baby! (I personally love
+         this one).
+
+       (From Brendan Cully <brendan@kublai.com>)
+
+Tue Sep  7 17:01:28 1999  Thomas Roessler  <roessler@guug.de>
+
+       * Makefile.am: Bail out if the chmod of mutt_dotlock fails.
+
+       * pgpkey.c: Fix a strtok NULL pointer problem.
+
+       * doc/Attic/manual.sgml.in: notes on how to produce secure mailcaps.
+
+       * gnupgparse.c, pgpinvoke.c: GPG-related fix from Gero Treuner.
+
+       * imap/BUGS, imap/Makefile.am, imap/TODO, imap/imap.c, imap/imap_private.h, imap/message.c, imap/message.h, mutt.h, muttlib.c, mx.c, status.c, complete.c, flags.c:
+       * redoes the folder update optimisation I did yesterday. It's somewhat
+         cleaner and less invasive, and I'm not so worried about memory leaks
+         now.
+
+       * Fixes the bug where mutt would append a '/' to $folder even if it
+         was only {mailhost}, causing mutt to browse the root directory
+         instead of the home directory.
+
+       * includes a first stab at preserving the D flag on the IMAP server.
+         Now if you answer no to 'Purge deleted', the server still stores
+         the messages as deleted, but doesn't expunge them on exit.
+
+         NOTE: this is a first attempt. Play around, but don't mark things
+         as deleted that you'd be sorry to see disappear.
+
+       (From: Brendan Cully <brendan@kublai.com>)
+
+       * doc/manual.sgml.head: Adding notes from README.SECURITY.
+
+Mon Sep  6 09:16:53 1999  Thomas Roessler  <roessler@guug.de>
+
+       * imap/Makefile.am, imap/TODO, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/message.c, imap/message.h, mutt.h, muttlib.c:
+       * Small imap/Makefile.am tweak for make dist
+
+       * Hold on to mailbox flags, message flags, do update in one pass
+         instead of two, halving traffic on mailbox sync.
+
+       * Update message flags at fetch as well as header download, if the
+         server thinks they've changed. Saves some unneeded updates on
+         sync.
+
+       * Move some structures out of imap_private.h into message.h, since
+         they are local now.
+
+       (From: Brendan Cully <brendan@kublai.com>)
+
+Sun Sep  5 08:42:23 1999  Thomas Roessler  <roessler@guug.de>
+
+       * contrib/Tin.rc: add a sample of tin/lynx-like key bindings.
+
+       * imap/Makefile.am: include message.c with the IMAP library.
+
+       * init.c: [stable] Fixing "unignore *".
+
+       * init.c: Fix "unignore *": We must not add "*" to the unignore list.
+
+       * init.h: Documentation nit, from Liviu.
+
+Sat Sep  4 04:55:58 1999  Thomas Roessler  <roessler@guug.de>
+
+       * imap/BUGS, imap/browse.c, imap/imap.c, imap/imap_private.h, imap/message.c:
+       Fix some more IMAP problems.  From Brendan Cully.
+
+Fri Sep  3 21:42:16 1999  Thomas Roessler  <roessler@guug.de>
+
+       * contrib/sample.muttrc:
+       fix mailing list addresses.  Noted by David Benfell
+       <benfell@greybeard95a.com>.
+
+       * browser.c:
+       - If the name of the folder returned by an IMAP server is empty, Mutt
+         could segfault in the browser window attempting to display it.
+       - add_folder in browser.c looks like it got corrupted in some CVS
+         update. A small patch makes things work again for
+         examine_mailboxes.
+       (From: Brendan Cully <brendan@kublai.com>)
+
+       * strdup.c, configure.in: strdup for unstable.
+
+       * configure.in, strdup.c:
+       [stable] Some systems may not have strdup.  Substitute it.
+
+       * strdup.c:
+       file strdup.c was initially added on branch mutt-1-0-stable.
+
+       * browser.c: [stable] cosmetic fix from Brendan Cully.
+
+Thu Sep  2 18:50:46 1999  Thomas Roessler  <roessler@guug.de>
+
+       * editmsg.c:
+       Don't copy the Status header to the user's edit buffer - we destroy
+       it later when copying the message back.
+
+       * acconfig.h, configure.in, init.c, init.h, main.c:
+       [stable] Improved pgp 6.5.1 support.  From Jochen Schmitt
+       <Jochen@herr-schmitt.de>.
+
+       * doc/manual.sgml.head, Makefile.am, OPS, compose.c, curs_main.c, editmsg.c, mutt.h, protos.h, send.c, sendlib.c:
+       A new edit-message feature, giving the raw message in an editor.
+
+       * imap/auth.c: Fix a tiny signedness warning.
+
+       * dotlock.c: Remove a superfluous label.
+
+       * dotlock.c: [stable] remove a superfluous label.
+
+       * po/cs.po:
+       New czech translation.  From Jiri Pavlovsky <pavlovsk@ff.cuni.cz>.
+
+       * doc/Attic/manual.sgml.in:
+       [stable] It's www.sgmltools.org, not www.sgml-tools.org.  Noted by
+       Heiko Schlichting.
+
+Wed Sep  1 21:41:19 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/Makefile.in, Makefile.am:
+       A couple of build process and portability fixes concerning the
+       automatically generated documentation.
+
+       * mutt.h, init.c:
+       [stable] Fix ignore/unignore.  This is a back-port from the unstable
+       branch.
+
+       * po/ko.po: New Korean translation.  From Byeong-Chan Kim
+       <redhands@linux.sarang.net>.
+
+       * curs_lib.c, edit.c, hdrline.c, sendlib.c:
+       Fix a couple of possible compilation warnings.  (Noted by "John C.
+       Place" <placej@ctcdist.com>.)
+
+       * hdrline.c, sendlib.c, curs_lib.c, edit.c:
+       [stable] Fix a couple of small warnings.  Noted by "John C. Place"
+       <placej@ctcdist.com>.
+
+       * ChangeLog: check-point commit.
+
+       * mx.c: Don't clear the error line whenever dotlocking a file.
+
+       * mx.h: adding a prototype.
+
+       * curs_main.c, mailbox.h, mx.c:
+       When the user synchronizes a mail folder, do a thorough check.
+
+Wed Sep  1 07:47:40 1999  Thomas Roessler  <roessler@guug.de>
+
+       * mx.c: Don't clear the error line whenever dotlocking a file.
+
+       * mx.h: adding a prototype.
+
+       * curs_main.c, mailbox.h, mx.c:
+       When the user synchronizes a mail folder, do a thorough check.
+
+Tue Aug 31 20:26:33 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/uk.po, po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/ko.po, po/nl.po, po/pl.po, po/id.po, po/it.po, po/es.po, po/fr.po, VERSION, po/cs.po, po/de.po, po/el.po, reldate.h, Makefile.am, ChangeLog:
+       automatic post-release commit for mutt-0.96.6
+
+       * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/el.po, po/de.po, po/cs.po, VERSION, reldate.h, ChangeLog:
+       post-release commit for 1.0pre2.
+
+       * doc/manual.sgml.tail, doc/manual.sgml.head, protos.h, thread.c, OPS, curs_main.c, functions.h:
+       Adding a <parent-message> function. From Roland Rosenfeld
+       <roland@spinnaker.rhein.de>.
+
+Tue Aug 31 19:51:34 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/el.po, po/de.po, po/cs.po, VERSION, reldate.h, ChangeLog:
+       post-release commit for 1.0pre2.
+
+       * doc/manual.sgml.tail, doc/manual.sgml.head, protos.h, thread.c, OPS, curs_main.c, functions.h:
+       Adding a <parent-message> function. From Roland Rosenfeld
+       <roland@spinnaker.rhein.de>.
+
+Tue Aug 31 19:11:57 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.tail, doc/manual.sgml.head, protos.h, thread.c, OPS, curs_main.c, functions.h:
+       Adding a <parent-message> function. From Roland Rosenfeld
+       <roland@spinnaker.rhein.de>.
+
+       * curs_lib.c:
+       Fix possible signedness problem with localized y/n responses.
+
+       * po/ru.po:
+       New russian translation.  From Michael Sobolev <mss@transas.com>.
+
+       * Attic/imap.c: [stable] fix IMAP caching.
+
+Mon Aug 30 16:10:45 1999  Thomas Roessler  <roessler@guug.de>
+
+       * configure.in, imap/imap.c, main.c: Properly handle IMAP cache files.
+
+       * mh.c: cosmetics.
+
+       * mh.c: [stable] Back-port various fixes from unstable.
+
+       * mh.c: Avoid a memory and temporary file leak.
+
+       * mx.c, Attic/imap.c, buffy.c, configure.in:
+       [stable] back-port of various IMAP-related fixes.  From Brendan
+       Cully <brendan@kublai.com>.
+
+Fri Aug 27 07:41:44 1999  Thomas Roessler  <roessler@guug.de>
+
+       * TODO: some notes on generic limiting.
+
+Thu Aug 26 20:26:56 1999  Thomas Roessler  <roessler@guug.de>
+
+       * keymap.c:
+       Change alias menu key bindings to something more reasonable.
+
+       * imap/TODO: Adding a TODO list.
+
+       * doc/manual.sgml.tail:
+       Fix the sgml-tools url.  Noted by Heiko Schlichting.
+
+       * doc/Attic/manual.sgml.in:
+       Fix the URL to the sgml-tools package.  Noted by Heiko Schlichting.
+
+       * mh.c: Fixing a somewhat hypothetical error condition.
+
+       * curs_main.c, keymap.c, pager.c, recvattach.c: IRIX fixes.
+
+       * keymap.c, main.c, pager.c, recvattach.c, curs_main.c, edit.c:
+       Various fixes to make mutt compile on IRIX.  Additionally, we
+       introduce default bindings for the <enter> key which is used by xwsh
+       for "return".  Suggested by Heiko Schlichting
+       <heiko@cis.fu-berlin.de>.
+
+Wed Aug 25 06:33:37 1999  Thomas Roessler  <roessler@guug.de>
+
+       * configure.in: We need ranlib even when we don't use IMAP.
+
+       * compose.c:
+       Trivial patch to make attach-message work for IMAP folders.
+
+Tue Aug 24 21:27:20 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/de.po: Updates from Roland Rosenfeld.
+
+       * Makefile.am: Automake clean-up.  From Lars Hecking.
+
+       * po/id.po: Updates.
+
+       * doc/Makefile.in: build muttrc.man before installing it.
+
+       * reldate.h, Makefile.am, VERSION, ChangeLog:
+       automatic post-release commit for mutt-0.96.5
+
+       * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/el.po, po/de.po, po/cs.po, NEWS, VERSION, reldate.h, ChangeLog:
+       release-commit 1.0pre1.
+
+       * Makefile.am: Still more bugs in the release-building process.
+
+       * Makefile.am: *grrrr*  typos.
+
+       * po/sk.po, po/uk.po, po/zh_TW.Big5.po, po/ru.po, po/nl.po, po/pl.po, po/fr.po, po/id.po, po/it.po, po/ko.po, po/cs.po, po/de.po, po/el.po, po/es.po, ChangeLog:
+       translation update.
+
+       * Makefile.am: Some of the targets were broken.
+
+       * Makefile.am: Another tidbit.
+
+       * Makefile.am:
+       Still more build-process stuff. Let's see whether this automatically
+       builds 0.96.5.
+
+       * doc/Attic/manual.sgml, doc/Attic/muttrc.man, Attic/Muttrc:
+       Remove some auto-built files from the repository.
+
+       * Makefile.am: Further distribution process fixes.
+
+       * po/POTFILES.in:
+       Make translations fit together with actual source tree.
+
+       * doc/Makefile.in, Attic/Muttrc, ChangeLog, Makefile.am:
+       More fixes to the distribution-building process; check-point commit
+       for documentation and ChangeLog.
+
+       * doc/Attic/manual.sgml, doc/Attic/muttrc.man, doc/Makefile.in:
+       Various experimental changes to automate the distribution-building
+       process; documentation update.
+
+       * Makefile.am:
+       Various experimental changes to automate the distribution-building
+       process.
+
+Tue Aug 24 16:20:55 1999  Thomas Roessler  <roessler@guug.de>
+
+       * Makefile.am: Still more bugs in the release-building process.
+
+       * Makefile.am: *grrrr*  typos.
+
+       * po/sk.po, po/uk.po, po/zh_TW.Big5.po, po/ru.po, po/nl.po, po/pl.po, po/fr.po, po/id.po, po/it.po, po/ko.po, po/cs.po, po/de.po, po/el.po, po/es.po, ChangeLog:
+       translation update.
+
+       * Makefile.am: Some of the targets were broken.
+
+       * Makefile.am: Another tidbit.
+
+       * Makefile.am:
+       Still more build-process stuff. Let's see whether this automatically
+       builds 0.96.5.
+
+       * doc/Attic/manual.sgml, doc/Attic/muttrc.man, Attic/Muttrc:
+       Remove some auto-built files from the repository.
+
+       * Makefile.am: Further distribution process fixes.
+
+       * po/POTFILES.in:
+       Make translations fit together with actual source tree.
+
+       * doc/Makefile.in, Attic/Muttrc, ChangeLog, Makefile.am:
+       More fixes to the distribution-building process; check-point commit
+       for documentation and ChangeLog.
+
+       * doc/Attic/manual.sgml, doc/Attic/muttrc.man, doc/Makefile.in:
+       Various experimental changes to automate the distribution-building
+       process; documentation update.
+
+       * Makefile.am:
+       Various experimental changes to automate the distribution-building
+       process.
+
+Tue Aug 24 16:12:23 1999  Thomas Roessler  <roessler@guug.de>
+
+       * Makefile.am: *grrrr*  typos.
+
+       * po/sk.po, po/uk.po, po/zh_TW.Big5.po, po/ru.po, po/nl.po, po/pl.po, po/fr.po, po/id.po, po/it.po, po/ko.po, po/cs.po, po/de.po, po/el.po, po/es.po, ChangeLog:
+       translation update.
+
+       * Makefile.am: Some of the targets were broken.
+
+       * Makefile.am: Another tidbit.
+
+       * Makefile.am:
+       Still more build-process stuff. Let's see whether this automatically
+       builds 0.96.5.
+
+       * doc/Attic/manual.sgml, doc/Attic/muttrc.man, Attic/Muttrc:
+       Remove some auto-built files from the repository.
+
+       * Makefile.am: Further distribution process fixes.
+
+       * po/POTFILES.in:
+       Make translations fit together with actual source tree.
+
+       * doc/Makefile.in, Attic/Muttrc, ChangeLog, Makefile.am:
+       More fixes to the distribution-building process; check-point commit
+       for documentation and ChangeLog.
+
+       * doc/Attic/manual.sgml, doc/Attic/muttrc.man, doc/Makefile.in:
+       Various experimental changes to automate the distribution-building
+       process; documentation update.
+
+       * Makefile.am:
+       Various experimental changes to automate the distribution-building
+       process.
+
+Tue Aug 24 15:51:56 1999  Thomas Roessler  <roessler@guug.de>
+
+       * Makefile.am: Some of the targets were broken.
+
+       * Makefile.am: Another tidbit.
+
+       * Makefile.am:
+       Still more build-process stuff. Let's see whether this automatically
+       builds 0.96.5.
+
+       * doc/Attic/manual.sgml, doc/Attic/muttrc.man, Attic/Muttrc:
+       Remove some auto-built files from the repository.
+
+       * Makefile.am: Further distribution process fixes.
+
+       * po/POTFILES.in:
+       Make translations fit together with actual source tree.
+
+       * doc/Makefile.in, Attic/Muttrc, ChangeLog, Makefile.am:
+       More fixes to the distribution-building process; check-point commit
+       for documentation and ChangeLog.
+
+       * doc/Attic/manual.sgml, doc/Attic/muttrc.man, doc/Makefile.in:
+       Various experimental changes to automate the distribution-building
+       process; documentation update.
+
+       * Makefile.am:
+       Various experimental changes to automate the distribution-building
+       process.
+
+Tue Aug 24 15:10:48 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/Makefile.in, doc/manual.sgml, doc/muttrc.man:
+       Various experimental changes to automate the distribution-building
+       process; documentation update.
+
+       * Makefile.am:
+       Various experimental changes to automate the distribution-building
+       process.
+
+Mon Aug 23 22:12:09 1999  Thomas Roessler  <roessler@guug.de>
+
+       * charmaps/Makefile.am, configure.in:
+       Fix charmaps part of the build process.
+
+       * copy.c: Fix an off-by-one error which lead to a segmentation fault.
+
+       * charset.c:
+       Don't delete symbol -> character code mappings.  Character sets may
+       define multiple symbols. :-(
+
+       * imap/auth.c, imap/browse.c, imap/imap.c, imap/imap.h, imap/imap_private.h, browser.c, configure.in, Makefile.am, acconfig.h:
+       Inclue GSS authentization for IMAP.
+
+       * dotlock.c, mx.c:
+       Remove a couple of NFS-related hacks which seem to be unnecessary.
+
+       * main.c: Fix a small typo affecting mutt -v's output.
+
+Fri Aug 20 08:24:13 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/fr.po: Fixed french translation.
+
+       * imap/Makefile.am, imap/auth.c, imap/browse.c, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/imap_socket.h, imap/md5.h, imap/md5c.c, imap/socket.c, Attic/socket.c, Attic/imap.c, Attic/imap.h, Attic/mutt_socket.h, globals.h, init.h, lib.h, mime.h, prepare, protos.h, rfc2047.c, sendlib.c, Makefile.am, base64.c, configure.in, copy.c:
+       Brendan Cully's latest IMAP clean-up.
+
+       * doc/Attic/manual.sgml.in, NEWS, copy.c, init.h, mutt.h, sendlib.c:
+       Back-port $bounce_delivered from unstable.
+
+       * po/fr.po: [stable] Small fixes.
+
+Thu Aug 19 10:04:28 1999  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c: [stable] Fix a back-porting bug.
+
+       * configure.in:
+       [stable] Albert Chin-A-Young <china@thewrittenword.com> suggests a
+       different check for -lnsl and -lsocket.
+
+       * configure.in:
+       Albert Chin-A-Young suggests a slightly different check for
+       libsocket and libnsl.
+
+       * doc/Attic/manual.sgml.in: [stable] fix the urlview url.
+
+       * doc/manual.sgml.head: fix the urlview url.
+
+       * main.c: copyright message cosmetics.
+
+       * Makefile.am, configure.in, prepare:
+       Remove the $output.in hack, and create a fake charmaps directory
+       instead.
+
+       * acconfig.h, configure.in:
+       [stable] check signal.h for sig_atomic_t.  This should help to build
+       this version of mutt on systems such as SunOS 4.1.
+
+       * sendlib.c:
+       [stable] Force quotes around the boundary parameter's value.
+
+       * sendlib.c:
+       Force quotes around the boundary parameter.  Another courtesy
+       towards Outlook.
+
+       * pgp.c:
+       [stable] Make sure the boundary MIME parameter is the last one on
+       multipart/signed.  Otherwise, Outlook will fail.  Pointed out by Ian
+       Bell, Turnpike.
+
+       * muttlib.c, pgp.c:
+       Ian Bell (turnpike) reports that Outlook Express expects the
+       boundary parameter to be the _last_ MIME parameter on a multipart/*
+       body part, and otherwise displays messages as empty.
+
+Wed Aug 18 06:54:13 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/muttrc.man, doc/muttrc.man.head, doc/manual.sgml, NEWS:
+       documentation fixes.
+
+       * commands.c:
+       Fetch senders' keys also when decrypting a message.  There may be a
+       signature.
+
+       * main.c: Don't try to create $maildir if it's an IMAP folder.
+
+Tue Aug 17 20:04:07 1999  Thomas Roessler  <roessler@guug.de>
+
+       * reldate.h: :-(
+
+       * reldate.h: *grmbls*
+
+       * po/de.po, ChangeLog, VERSION: post-release commit for 0.96.4.
+
+       * po/de.po, VERSION, ChangeLog: post-release commit for 0.95.7.
+
+       * doc/manual.sgml, doc/muttrc.man, Muttrc: ispell's default path.
+
+Tue Aug 17 17:53:40 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml, doc/muttrc.man, Muttrc: ispell's default path.
+
+       * postpone.c: Fixing a mutt -p segfault.
+
+       * doc/mutt.man, main.c:
+       cosmetics; mention warranties in the manual page.
+
+Sun Aug 15 19:59:09 1999  Thomas Roessler  <roessler@guug.de>
+
+       * compose.c: Make attach-message work with IMAP folders.
+
+       * po/cs.po: New CS translation.
+
+       * doc/Makefile.in, doc/manual.sgml, doc/muttrc.man, mutt.h, mx.c, pgp.c, pgp.h, pgpinvoke.c, prepare, send.c, Makefile.am, Muttrc, NEWS, README.SECURITY, browser.c, browser.h, commands.c, copy.c, curs_main.c, globals.h, init.c, init.h, main.c:
+       Various changes added over the last week:
+
+       - $delete_untag
+       - creation of "application/pgp" messages
+       - an attempt to fix prepare.
+       - Browser format changes
+
+       * dotlock.h: cosmetics.
+
+       * dotlock.c: [stable] take dotlock.c from unstable.
+
+       * dotlock.c: Commit remaining changes.
+
+       * copy.c, mh.c, mutt.h: Remove ugly mh-synching kludge.
+
+       * dotlock.c, dotlock.h:
+       Really fix $save_empty, even when the dotlocking code is compiled
+       into mutt.
+
+       * dotlock.c, dotlock.h:
+       [stable] Fix $save_empty even when the dotlocking code is linked
+       into mutt.
+
+Mon Aug  9 19:03:12 1999  Thomas Roessler  <roessler@guug.de>
+
+       * ChangeLog: check-point commit.
+
+       * po/sk.po, po/uk.po, po/zh_TW.Big5.po, po/ko.po, po/nl.po, po/pl.po, po/ru.po, po/de.po, po/el.po, po/es.po, po/fr.po, po/id.po, po/it.po, po/cs.po:
+       update-po.
+
+       * po/zh_TW.Big5.po:
+       [stable] Fixing a small typo in the Chinese translation.
+
+       * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/el.po, po/es.po, po/de.po, po/cs.po:
+       [stable] Adding the new polish translation; general "make update-po".
+
+       * Muttrc, doc/muttrc.man, doc/muttrc.man.head, main.c, po/zh_TW.Big5.po:
+       Various fixes.  Additionally, mutt will now create the $folder
+       directory when started in curses mode and if it doesn't exist.
+
+Mon Aug  9 19:01:42 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/sk.po, po/uk.po, po/zh_TW.Big5.po, po/ko.po, po/nl.po, po/pl.po, po/ru.po, po/de.po, po/el.po, po/es.po, po/fr.po, po/id.po, po/it.po, po/cs.po:
+       update-po.
+
+       * po/zh_TW.Big5.po:
+       [stable] Fixing a small typo in the Chinese translation.
+
+       * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/el.po, po/es.po, po/de.po, po/cs.po:
+       [stable] Adding the new polish translation; general "make update-po".
+
+       * Muttrc, doc/muttrc.man, doc/muttrc.man.head, main.c, po/zh_TW.Big5.po:
+       Various fixes.  Additionally, mutt will now create the $folder
+       directory when started in curses mode and if it doesn't exist.
+
+Sun Aug  8 14:57:13 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/zh_TW.Big5.po: new chinese translation.
+
+       * po/zh_TW.Big5.po: New chinese translation.
+
+       * Makefile.am: Fix order of some dependencies.
+
+       * Makefile.am: Fix keymap_defs.h dependency.
+
+       * po/it.po: Fix a translation string in it.po.
+
+       * po/it.po: Fixing a message.  From Marco.
+
+       * doc/muttrc.man, init.h:
+       Include complete documentation regardless of actual features.
+
+       * doc/Attic/manual.sgml.in, doc/Attic/mutt.man.in, doc/manual.sgml.tail, doc/mutt.man, doc/muttrc.man, doc/muttrc.man.head, doc/muttrc.man.tail, contrib/Makefile.in, contrib/gpg.rc, doc/Attic/dotlock.man.in, doc/Makefile.in, doc/devel-notes.txt, doc/dotlock.man, doc/manual.sgml, doc/manual.sgml.head, Attic/Muttrc.in, Makefile.am, Muttrc.head, NEWS, configure.in, init.h, makedoc.c:
+       Documentation updates; autogeneration of documentation from init.h.
+
+Wed Aug  4 19:58:13 1999  Thomas Roessler  <roessler@guug.de>
+
+       * NEWS: documentation to prepare the next release.
+
+       * doc/Attic/dotlock.man.in, dotlock.c, dotlock.h, mbox.c, mx.c, mx.h:
+       [stable] Fix $save_empty.
+
+       * ChangeLog: ChangeLog.
+
+       * NEWS, protos.h, send.c: Various fixes; documentation.
+
+       * doc/Attic/dotlock.man.in: Document the -d option.
+
+       * dotlock.h, mbox.c, mx.c, mx.h, dotlock.c: Fix $save_empty.
+
+Wed Aug  4 19:49:28 1999  Thomas Roessler  <roessler@guug.de>
+
+       * NEWS, protos.h, send.c: Various fixes; documentation.
+
+       * doc/dotlock.man.in: Document the -d option.
+
+       * dotlock.h, mbox.c, mx.c, mx.h, dotlock.c: Fix $save_empty.
+
+Thu Jul 29 09:17:29 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.in:
+       Remove references to the old PGP configuration interface.  Noted by
+       Hanno Wagner <wagner@fitug.de>.
+
+       * browser.c, complete.c, enter.c, imap.c, imap.h, main.c, protos.h:
+       Brendan Cully's latest IMAP patches.
+
+Wed Jul 28 20:40:49 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.in:
+       Fix "lists" documentation.  From Jeremy Blosser <jblosser@firinn.org>.
+
+       * doc/manual.sgml.in:
+       Fix the description of the lists command.  Patch provided by Jeremy
+       Blosser <jblosser@firinn.org>.
+
+       * doc/PGP-Notes.txt, pgp.h, pgpinvoke.c, init.c, init.h, pgp.c:
+       PGP 6 support.
+
+       * charsets/Attic/Makefile.in:
+       Portability patch for MiNT, from Guido Flohr
+       <gufl0000@stud.uni-sb.de>.
+
+       * doc/manual.sgml.in, doc/mutt.man.in:
+       Documentation fixes from Jeremy Blosser.
+
+       * mh.c: Replarse mh message' headers when updating them.
+
+       * mh.c:
+       Re-parse mh messages when committing them to disk.  The structure
+       may have changed.
+
+       * rfc822.h, commands.c, init.h, pgp.c, pgp.h, pgpinvoke.c:
+       Add a hook which enables us to fetch PGP keys from servers on
+       demand.  Look out for pkspxy. :-)
+
+       * hdrline.c: Enable the use of %F in conditionals.  From Aaron Schrab
+       <aaron+mutt@schrab.com>.
+
+Mon Jul 26 21:04:53 1999  Thomas Roessler  <roessler@guug.de>
+
+       * dotlock.c: impose a hard limit on the number of locking attempts.
+
+       * dotlock.c: Impose a hard limit on dotlock attempts.
+
+       * recvattach.c, gnupgparse.c, pgpinvoke.c:
+       Fix an error message.  Also, close Debian bug #37394 for stable.
+
+       * acconfig.h, configure.in: Check for gpgm.
+
+       * recvattach.c:
+       Make an error message ready for translation.  From Gero Treuner.
+
+       * Makefile.am:
+       Add missing dependencies for pgpring.  Fix from David Ellement
+       <ellement@sdd.hp.com>
+
+       * Makefile.am:
+       Create keymap_defs.h when it isn't present.  Fix from Lars Hecking
+       <lhecking@nmrc.ucc.ie>.
+
+       * Makefile.am:
+       Generate keymap_defs.h when it isn't present.  Fix proposed by Lars
+       Hecking <lhecking@nmrc.ucc.ie>.
+
+       * doc/manual.sgml.in, handler.c, init.h, mutt.h, parse.c:
+       Undo the content-disposition changes.  They don't merge well with
+       operations such as printing, and need some more thought.
+
+       * doc/manual.sgml.in, init.h, mutt.h, parse.c, handler.c:
+       When an attachment's content-disposition is different from "inline",
+       and if the user sets the use_cdisp option, don't auto_view this
+       part.
+
+       * ChangeLog: checkpointing.
+
+       * flags.c, protos.h, recvattach.c:
+       When replying to message/rfc822 type attachments, Context statistics
+       would go out of order.  Problem noted by Johan van Selst
+       <johans@stack.nl>.
+
+       * flags.c, protos.h, recvattach.c:
+       When replying to a message/rfc822 attachment, the Context statistics
+       would get out of order.  Problem noted by Johan van Selst
+       <johans@stack.nl>.
+
+       * curs_lib.c:
+       Dynamically allocate the unget buffer.  Fixes Debian bug #41042.
+       From Gero Treuner.
+
+       * curs_lib.c:
+       Dynamically allocate the unget buffer.  Fixes Debian bug #41042.
+       From Gero Treuner <gero@faveve.uni-stuttgart.de>.
+
+       * curs_main.c: Fix read_only in folder-hooks.
+
+       * curs_main.c, ChangeLog: The following:
+
+               folder-hook !asdf unset read_only
+               folder-hook asdf set read_only
+
+       wouldn't work.  Fix from Gero Treuner <gero@faveve.uni-stuttgart.de>.
+
+       * browser.h, imap.c, imap.h, mx.c, postpone.c, browser.c:
+       Assorted IMAP fixes.  From Brendan Cully <brendan@kublai.com>,
+       message <19990725150346.A19750@xanadu.kublai.com>.
+
+Mon Jul 26 14:53:01 1999  Thomas Roessler  <roessler@guug.de>
+
+       * flags.c, protos.h, recvattach.c:
+       When replying to message/rfc822 type attachments, Context statistics
+       would go out of order.  Problem noted by Johan van Selst
+       <johans@stack.nl>.
+
+       * flags.c, protos.h, recvattach.c:
+       When replying to a message/rfc822 attachment, the Context statistics
+       would get out of order.  Problem noted by Johan van Selst
+       <johans@stack.nl>.
+
+       * curs_lib.c:
+       Dynamically allocate the unget buffer.  Fixes Debian bug #41042.
+       From Gero Treuner.
+
+       * curs_lib.c:
+       Dynamically allocate the unget buffer.  Fixes Debian bug #41042.
+       From Gero Treuner <gero@faveve.uni-stuttgart.de>.
+
+       * curs_main.c: Fix read_only in folder-hooks.
+
+       * curs_main.c, ChangeLog: The following:
+
+               folder-hook !asdf unset read_only
+               folder-hook asdf set read_only
+
+       wouldn't work.  Fix from Gero Treuner <gero@faveve.uni-stuttgart.de>.
+
+       * browser.h, imap.c, imap.h, mx.c, postpone.c, browser.c:
+       Assorted IMAP fixes.  From Brendan Cully <brendan@kublai.com>,
+       message <19990725150346.A19750@xanadu.kublai.com>.
+
+       * parse.c, rfc2047.c, rfc2231.c, rfc2231.h, sendlib.c, Makefile.am, TODO, copy.c, init.h, mutt.h:
+       Implement RFC 2231.
+
+Mon Jul 26 13:57:58 1999  Thomas Roessler  <roessler@guug.de>
+
+       * browser.h, imap.c, imap.h, mx.c, postpone.c, browser.c:
+       Assorted IMAP fixes.  From Brendan Cully <brendan@kublai.com>,
+       message <19990725150346.A19750@xanadu.kublai.com>.
+
+       * parse.c, rfc2047.c, rfc2231.c, rfc2231.h, sendlib.c, Makefile.am, TODO, copy.c, init.h, mutt.h:
+       Implement RFC 2231.
+
+       * ChangeLog: *** empty log message ***
+
+       * commands.c:
+       Fix a missing #ifdef. From Matt Armstrong <matt@lickey.com>.
+
+       * doc/devel-notes.txt:
+       Add some notes.  From Matt Armstrong <matt@lickey.com>.
+
+Mon Jul 26 10:13:38 1999  Thomas Roessler  <roessler@guug.de>
+
+       * commands.c:
+       Fix a missing #ifdef. From Matt Armstrong <matt@lickey.com>.
+
+       * doc/devel-notes.txt:
+       Add some notes.  From Matt Armstrong <matt@lickey.com>.
+
+Sat Jul 24 14:55:45 1999  Thomas Roessler  <roessler@guug.de>
+
+       * rfc2047.c: Add some sanity checks to the RFC 2047 decoder.
+       From "Alexander V. Lukyanov" <lav@yars.free.net>.
+
+Fri Jul 23 06:31:09 1999  Thomas Roessler  <roessler@guug.de>
+
+       * parse.c: There was some code missing about TYPEMODEL.
+       Noted by Brian Salter-Duke <b_duke@lacebark.ntu.edu.au>.
+
+Thu Jul 22 14:56:44 1999  Thomas Roessler  <roessler@guug.de>
+
+       * mutt.h: Fix content-type's widths.
+
+Wed Jul 21 13:02:12 1999  Thomas Roessler  <roessler@guug.de>
+
+       * recvattach.c: When forwarding or replying to attachments,
+       use the proper time stamp for From_ lines of Fccs.  Note:
+       This code may need some clean-up, it's horribly slow.
+
+       * buffy.c: Fix compilation problem for non-imap systems.
+
+       * compose.c: *grr* avoid a warning about /* in a comment.
+
+       * compose.c: call mutt_update_encoding() after changing an
+       attachment's content type.
+
+Tue Jul 20 20:09:13 1999  Thomas Roessler  <roessler@guug.de>
+
+       * send.c, sendlib.c, protos.h:
+       Use $from for resent-from headers when bouncing messages.
+
+       * imap.c: Fix from Gero Treuner.
+
+       * init.c:
+       Fix value completion for DT_ADDR variables.  While we are on it,
+       proper quoting is added.
+
+       * init.h, send.c, alias.c, globals.h, init.c:
+       As Aaron Schrab noted, patch-0.95.6.tlr.reverse_name.1 broke the use
+       of my_hdr from send-hooks.  This patch introduces a new variable
+       $from which can be used to use a default sender address; to make
+       this possible, a new variable class DT_ADDR is defined.
+
+       We now have the following algorithm for determining the from
+       address:
+
+       - $from is used as the default from address, if defined.  Otherwise,
+         the local user name and (if the user wishes so) the local domain
+         are used.
+       - This address can be overridden by $reverse_name, if set.
+       - Now, send-hooks are evaluated.
+       - Afterwards, user headers are evaluated.  In this step, the from
+         header can be overridden using my_hdr From:.
+       - When there is no real name, $realname is used for it.  Note that,
+         when the default from header is used and $from defines a real
+         name, it takes precedence over $realname.
+
+       * buffy.c, complete.c, imap.c, imap.h: Bugs fixed
+       * Mutt sometimes forgets that IMAP folders with new mail have new
+         mail.
+       * On some common IMAP servers, Mutt erroneously insists that the
+         current folder has new mail.
+       * Mutt constantly polls the server for new messages,
+         disregarding the imap_checkinterval option.
+
+       New features
+       * tab-completion of IMAP folders. Not yet namespace aware, though it
+         will work within an alternate namespace (eg won't complete #ft ->
+         #ftp, but will complete #ftp/pu -> #ftp/pub). Some tweaking of the
+         browser was necessary to get it to cooperate with completion.
+         Some remains to be done.
+
+       (From: From: Brendan Cully <brendan@kublai.com>)
+
+       * doc/manual.sgml.in, globals.h, init.h, send.c, Muttrc.in:
+       Remove the $in_reply_to configuration variable.
+
+       * doc/manual.sgml.in, globals.h, init.h, send.c, Muttrc.in:
+       Remove the $in_reply_to configuration variable and always use the
+       message-ID for that header.
+
+       * pgp.c: patch-0.95.6.pgperror.1
+
+       * po/de.po, curs_main.c, pager.c:
+       patch-0.95.6.gettext.1.gz, from Gero Treuner.
+
+       * pager.c: patch-0.95.6.search_in_help.1, from Gero Treuner.
+
+       * po/sk.po: New sk translation.
+
+       * alias.c, enter.c: patch-0.95.6.alias_compl.1.gz, from Gero Treuner
+
+Mon Jul 19 19:18:05 1999  Thomas Roessler  <roessler@guug.de>
+
+       * configure.in, pgppubring.c:
+       Fix compilation problems with SunOS 4.  From Lars Hecking.
+
+       * po/sk.po: new sk translation.
+
+       * buffy.c:
+       Consider empty folders to be non-existent for buffy's purposes.
+
+Tue Jul  6 22:57:08 1999  Thomas Roessler  <roessler@guug.de>
+
+       * send.c, sendlib.c, signal.c, system.c, curs_lib.c, curs_main.c, globals.h, menu.c, mutt.h, pager.c, pattern.c, protos.h, attach.c, commands.c, compose.c:
+       Applying Liviu Daia's signal handling patches.  They work fine with
+       unstable for months now, so we may wish to use them with stable.
+
+       * po/zh_TW.Big5.po, po/el.po, configure.in:
+       Greek and Chinese translations for unstable.
+
+       * po/zh_TW.Big5.po: Chinese translation for stable.
+
+       * po/zh_TW.Big5.po:
+       file zh_TW.Big5.po was initially added on branch mutt-1-0-stable.
+
+       * configure.in: Adding chinese (big5) translation.
+
+       * po/el.po: Adding greek translation from Fanis <madf@geocities.com>.
+
+       * po/el.po: file el.po was initially added on branch mutt-1-0-stable.
+
+       * configure.in:
+       Adding greek translation from Fanis <madf@geocities.com>.
+
+       * mx.c, mx.h, parse.c, pop.c, postpone.c, protos.h, recvattach.c, sendlib.c, attach.c, buffy.c, copy.c, lib.c, mailbox.h, mh.c:
+       New mh and maildir folder writing code.  Back-port from unstable.
+
+       * color.c: Fix color problem noted by Todd Larson.  From unstable.
+
+       * color.c: Fixing a string buffer problem noted by Todd Larason
+       <jtl@molehill.org>.
+
+       * imap.c: Try creating an IMAP folder before writing to it.  Hack from
+       "Neulinger, Nathan R." <nneul@umr.edu>.
+
+       * contrib/pgp5.rc, contrib/pgp2.rc: Fix various bugs.
+
+Thu Jul  1 11:22:22 1999  Thomas Roessler  <roessler@guug.de>
+
+       * contrib/gpg.rc: Fix gpg invocation.  Noted by Werner Koch.
+
+       * mx.c: Fix a small imap-related bug.
+
+       * recvattach.c, sendlib.c, buffy.c, copy.c, curs_lib.c, globals.h, gnupgparse.c, hdrline.c, init.c, init.h, lib.c, lib.h, mailbox.h, mh.c, mutt.h, mx.c, mx.h, parse.c, pattern.c, pgpkey.c, pgppubring.c, pop.c, postpone.c, protos.h, attach.c:
+       Various patches from last week, including:
+
+       - new mh/maildir access code.
+       - subscribe/unsubscribe
+       - various fixes.
+
+Mon Jun 14 21:20:42 1999  Thomas Roessler  <roessler@guug.de>
+
+       * mutt.h, parse.c, sendlib.c:
+       - Handle CRLF properly in non-text MIME parts.
+       - Correctly parse attachments with CRLF line endings, but without a
+         trailing CRLF.
+
+       * alias.c, enter.c:
+       Completion fixes from Gero Treuner <gero@faveve.uni-stuttgart.de>.
+
+Thu Jun 10 09:30:39 1999  Thomas Roessler  <roessler@guug.de>
+
+       * alias.c, commands.c, curs_main.c, pager.c, protos.h:
+       Use the same address with take-alias and display-address.
+
+Wed Jun  9 17:17:53 1999  Thomas Roessler  <roessler@guug.de>
+
+       * recvattach.c: Fix the fix.  Most of it was wrong.
+
+       * recvattach.c: There was bogus bug-fixing in the last fix.
+
+       * recvattach.c: Fix attachment forwading.  Same problem as in unstable.
+
+       * recvattach.c:
+       Fix attachment forwarding.  The leading newline for certain MIME
+       boundaries was missing.  *grrrr*
+
+       * send.c: Give reverse_name precedence over my_hdr From:
+
+Tue Jun  8 18:30:42 1999  Thomas Roessler  <roessler@guug.de>
+
+       * acconfig.h, configure.in, pgppubring.c, protos.h:
+       Portability patches for SunOS 4.1.  From Lars Hecking.
+
+       * curs_main.c: Fix "Tab" behaviour when returning from the pager.
+
+       * mutt.h, pattern.c, send.c, sendlib.c, commands.c, copy.c, copy.h, handler.c, imap.c, attach.c:
+       Don't do charset conversions when they aren't necessary.
+
+       Back-port from unstable.
+
+       * pgp.c, pgpinvoke.c, pgpkey.c, pgplib.h, pgppubring.c, recvattach.c, Makefile.am, commands.c, compose.c, configure.in, hdrline.c, init.c, init.h, mutt.h:
+       - Add a $weed option.
+       - Add out-of-band reporting of signature status.
+
+Thu Jun  3 21:48:24 1999  Thomas Roessler  <roessler@guug.de>
+
+       * curs_main.c: Another header weeding change.  Experimental.
+
+       * commands.c, init.h, mutt.h, send.c:
+       Experimental: Use OPTWEED for _all_ header weeding throughout mutt.
+
+       * contrib/Makefile.in, Makefile.am, NEWS, VERSION, reldate.h, ChangeLog:
+       post-release commit 0.96.3.
+
+       * po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/de.po, po/cs.po, gnupgparse.c, reldate.h, NEWS, VERSION, ChangeLog:
+       release commit 0.95.6.
+
+       * po/pl.po, po/ko.po, po/fr.po, po/de.po, po/cs.po: Latest chagnes.
+
+       * doc/PGP-Notes.txt, contrib/pgp2.rc, contrib/pgp5.rc, pgppubring.c:
+       Hardwire some mechanisms for finding secret and public key-rings.
+       This way, we need to hard-wire less stuff in the various
+       configuration files, making the use of PGP with mutt a bit simpler
+       again.
+
+Thu Jun  3 20:13:22 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/pl.po, po/ko.po, po/fr.po, po/de.po, po/cs.po: Latest chagnes.
+
+       * doc/PGP-Notes.txt, contrib/pgp2.rc, contrib/pgp5.rc, pgppubring.c:
+       Hardwire some mechanisms for finding secret and public key-rings.
+       This way, we need to hard-wire less stuff in the various
+       configuration files, making the use of PGP with mutt a bit simpler
+       again.
+
+       * contrib/pgp2.rc: Another little fix.
+
+       * contrib/pgp2.rc:
+       ups, wrong order of arguments when verifying signatures.
+
+       * doc/PGP-Notes.txt: Document the new PGP configuration interface.
+
+       * contrib/gpg.rc, contrib/pgp2.rc, contrib/pgp5.rc, pgp.c, pgp.h, pgpewrap, pgpinvoke.c, pgpkey.c, pgplib.c, pgplib.h, pgppubring.c, Makefile.am, compose.c, configure.in, gnupgparse.c, init.c, init.h, mutt.h:
+       Experimental: New PGP invocation interface. The invocations are done
+       through formats, so all this should fit more cleanly into mutt now.
+
+Wed Jun  2 18:52:19 1999  Thomas Roessler  <roessler@guug.de>
+
+       * Makefile.am, extlib.c, init.c, lib.c, lib.h, mutt.h, muttlib.c, protos.h:
+       Major cutting & pasting: We now have a "real" library in lib.c which
+       can be linked against external programs without much effort.
+
+       * po/ko.po, po/pl.po, po/es.po, po/it.po, po/de.po: various updates.
+
+Tue Jun  1 14:52:09 1999  Thomas Roessler  <roessler@guug.de>
+
+       * flags.c, mh.c, curs_main.c:
+       Back-porting the maildir fixes from 0.96.2.
+
+Mon May 31 16:11:32 1999  Thomas Roessler  <roessler@guug.de>
+
+       * VERSION: Preparing pre-release for 0.95.6.
+
+       * po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/de.po, po/cs.po:
+       translation updates
+
+       * hook.c, pattern.c, pgp.c, send.c: Backporting fixes from unstable.
+
+       * pattern.c, pgp.c, send.c, hook.c: Minor bug-fixes.
+
+Fri May 21 15:55:27 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/ko.po: Adding the Korean translation.
+
+       * configure.in, po/ko.po: Korean translation.
+
+Tue May 18 19:22:55 1999  Thomas Roessler  <roessler@guug.de>
+
+       * imap.c: Latest IMAP fixes from Brandon.
+
+       * imap.c:
+       The current code wasn't asking for the capabilities of the server in
+       the case where the user is using PREAUTH.
+
+       * imap.c:
+       The current IMAP code wasn't asking for the capabilities of the
+       server in the case where the user is using PREAUTH.
+
+Sun May 16 06:26:11 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/it.po: New IT translation.
+
+       * pgpkey.c:
+       Add a couple of token delimiters when constructing hints.  This way,
+       addresses like "Chr. xyz" <xyz@foo.bar.baz> will match key IDs like
+       xyz <xyz@bar>.
+
+       * handler.c: Fix base64 decoding.
+
+Thu May  6 08:29:17 1999  Thomas Roessler  <roessler@guug.de>
+
+       * curs_main.c, flags.c, mh.c: Fixing more maildir cursor problems.
+
+Wed May  5 20:33:57 1999  Thomas Roessler  <roessler@guug.de>
+
+       * imap.c: The latest IMAP fixes.
+
+       * imap.c: Fixing imap_check_mailbox().  From Brandon Long.
+
+       * imap.c: Mutt would lose user-set "N" flags.
+
+Mon May  3 16:17:29 1999  Thomas Roessler  <roessler@guug.de>
+
+       * gnupgparse.c: gnupg gives reasonable trust values now.
+
+       * po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/de.po, po/cs.po, keymap.c, menu.c, send.c:
+       Various fixes from last week.
+
+       * keymap.c, menu.c, pgpkey.c, send.c: Various fixes.
+
+Fri Apr 23 09:01:42 1999  Thomas Roessler  <roessler@guug.de>
+
+       * reldate.h: ups, this should also be updated for 0.95.5 final.
+
+       * ChangeLog: preparing the final 0.95.5.
+
+       * po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/de.po, po/cs.po:
+       New translations and typo fixes.
+
+       * OPS: Fix a documentation typo.
+
+       * po/de.po: translation fixes from Roland and Gero.
+
+Thu Apr 22 10:21:41 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.in: Document %_.
+
+       * menu.c: Fix redraws.  Back-port from unstable.
+
+       * lib.c: Add "_" as an expando option.
+
+       * imap.h, init.h, mutt.h, mutt_socket.h, socket.c, imap.c:
+       IMAP update from Brandon Long.
+
+       * send.c: Fix FCC-related SNAFU in the ci_send_message() spaghetti.
+
+Tue Apr 20 19:26:28 1999  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c: [stable] fix timezone snafu.
+
+       * sendlib.c: Fix a time zone snafu.
+
+       * po/ru.po, po/sk.po, po/uk.po, po/fr.po, po/id.po, po/it.po, po/nl.po, po/pl.po, po/cs.po, po/de.po, po/es.po, VERSION, reldate.h, ChangeLog:
+       Preparing 0.96.2.
+
+       * po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/id.po, po/it.po, po/fr.po, po/es.po, po/de.po, po/cs.po, VERSION, reldate.h, ChangeLog:
+       preparing 0.95.5
+
+Mon Apr 12 21:02:35 1999  Thomas Roessler  <roessler@guug.de>
+
+       * recvattach.c: more multipart/alternative handling.
+
+       * recvattach.c: Change multipart handling when receiving messages.
+
+       * compose.c: Clean-up, from Vikas.
+
+Mon Apr 12 21:02:35 1999  Thomas Roessler  <roessler@guug.de>
+
+       * recvattach.c: more multipart/alternative handling.
+
+       * recvattach.c: Change multipart handling when receiving messages.
+
+       * compose.c: Clean-up, from Vikas.
+
+Mon Apr 12 21:02:35 1999  Thomas Roessler  <roessler@guug.de>
+
+       * recvattach.c: more multipart/alternative handling.
+
+       * recvattach.c: Change multipart handling when receiving messages.
+
+       * compose.c: Clean-up, from Vikas.
+
+       * parse.c: typo.
+
+       * parse.c:
+       us-ascii is the default character set for text attachments we receive.
+
+       * compose.c, sendlib.c:
+       Fix default character set setting when attaching text files.
+
+       * imap.c:
+       Fix an IMAP quoting problem.  Essentially from Randall Nortman
+       <rnortman@computer.org>.
+
+       * po/sk.po, po/id.po, configure.in: new languages: id, sk.
+
+       * po/id.po, po/sk.po, configure.in: New translations: id, sk.
+
+Wed Mar 31 06:35:03 1999  Thomas Roessler  <roessler@guug.de>
+
+       * charset.c: Stupid error.
+
+       * charset.c, charset.h: Another small charset optimization.
+
+       * charset.h, handler.c, charset.c:
+       A couple of optimizations, most notably for the special case of a
+       non-prefix state.
+
+Tue Mar 30 23:50:33 1999  Thomas Roessler  <roessler@guug.de>
+
+       * charset.c, charset.h, handler.c:
+       This patch removes at least some of the horrible utf-8 kluges in
+       charset.c.  The new DECODER framework is currently only used in
+       handler.c, and there in a horribly inefficient manner.  We should
+       use greater blocks of data, which would be much more efficient than
+       what we are currently doing.
+
+       Most of the other charset-related code still uses the old
+       mutt_display_char() &friends interface, which is actually ok as long
+       as you don't try to handle multibyte character sets.
+
+       The most notable change should be the one to mutt_get_translation():
+       It will delay the loading and parsing of character set information
+       files until it's really needed, catching a huge amount of standard
+       cases.  As a side effect, this will make "iso tagged as ascii"
+       "work" again, as long as both sides use the same iso character set.
+
+       * send.c:
+       resort headers when forward-decoding them with weed switched on.
+
+       * pager.c: Fix a pager failure for long messages. From Liviu.
+
+       * pager.c:
+       Fix pager failure for long messages, changing two shorts to ints.
+       From Liviu Daia.
+
+       * recvattach.c:
+       Add some user feedback to attachment forwarding.  From Vikas.
+
+Thu Mar 25 19:46:52 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.in, init.h, pgpkey.c, sort.h, Muttrc.in, init.c:
+       Roland's sort_keys patch.
+
+Wed Mar 24 20:35:38 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.in, Muttrc.in, recvattach.c:
+       Vikas' latest version of attachment forwarding.
+
+       * recvattach.c: patch-0.96.1.vikas.forward_attachment.2
+
+       * main.c:
+       Only exit with "no recipients specified", when $auto_edit is set.
+
+Tue Mar 23 20:21:50 1999  Thomas Roessler  <roessler@guug.de>
+
+       * postpone.c, recvattach.c, init.h, mutt.h:
+       Vikas' forward_attachment patch.
+
+Mon Mar 22 16:00:39 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.in, pgppubring.c, gnupgparse.c, pgp.h, pgpkey.c:
+       PGP key creation time fix by Roland Rosenfeld.
+
+Wed Mar 17 14:45:10 1999  Thomas Roessler  <roessler@guug.de>
+
+       * recvattach.c: Vikas' attach_tag patch.
+
+Tue Mar 16 21:42:06 1999  Thomas Roessler  <roessler@guug.de>
+
+       * thread.c, configure.in: bug fixes.
+
+       * thread.c: Detect thread loops.
+
+Mon Mar 15 15:32:19 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.in, copy.c, init.h, mutt.h, sendlib.c:
+       Add $bounce_delivered.
+
+       * edit.c: another digital unix compile problem.
+
+       * main.c: _Fix_ the compile problems, don't install new ones.
+
+       * send.c: Cleanly handle fcc when the user unsets it and the message is
+       postponed.
+
+       * main.c: Fix compilation problems under digital unix.
+
+       * configure.in: Fix sendmail autodetection.
+
+       * color.c: Fix colorN, N > 7 for Slang's curses emulation. From Vikas.
+
+Tue Mar  9 13:34:52 1999  Thomas Roessler  <roessler@guug.de>
+
+       * menu.c: another menu.c fix from Kim DeVaughn.
+
+       * send.c, menu.c, handler.c: Fixes.
+
+       * send.c, menu.c, handler.c:
+       handler.c: Properly handle message/external-body expiry.
+       menu.c: Small fix from Liviu.
+       send.c: Honor confirm_create for FCCs.
+       cvs: ----------------------------------------------------------------------
+
+Thu Mar  4 08:00:38 1999  Thomas Roessler  <roessler@guug.de>
+
+       * Makefile.am: post-postrelease commit.
+
+Wed Mar  3 20:06:33 1999  Thomas Roessler  <roessler@guug.de>
+
+       * rfc2047.c: ups.
+
+       * po/uk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/fr.po, po/es.po, po/de.po, po/cs.po, ChangeLog:
+       releasing 0.95.4.
+
+       * sendlib.c, rfc2047.c, reldate.h, curs_main.c, VERSION, ChangeLog:
+       releasing 0.96.1.
+
+       * reldate.h, regex.c, VERSION, Makefile.am, ChangeLog:
+       release preparations; back-port a couple of things from unstable.
+
+       * curs_main.c: Vikas' resort_index.3.
+
+       * sendlib.c, imap.c, from.c, curs_main.c:
+       from.c: Backport from unstable.
+       others: latest imap related patches.
+
+Wed Mar  3 19:44:24 1999  Thomas Roessler  <roessler@guug.de>
+
+       * reldate.h, regex.c, VERSION, Makefile.am, ChangeLog:
+       release preparations; back-port a couple of things from unstable.
+
+       * curs_main.c: Vikas' resort_index.3.
+
+       * sendlib.c, imap.c, from.c, curs_main.c:
+       from.c: Backport from unstable.
+       others: latest imap related patches.
+
+Tue Mar  2 22:13:30 1999  Thomas Roessler  <roessler@guug.de>
+
+       * curs_main.c, charset.c: Some small fixes from Vikas.
+
+       * parse.c, init.h, imap.c, globals.h:
+       Brandon Long's latest  IMAP fixes.
+
+       * parse.c: Latest IMAP-related fix from Brandon Long.
+
+       * thread.c:
+       Correctly handle messages which have themselves in their references
+       header.
+
+       * thread.c:
+       Properly handle messages which have themselves in "References".
+
+Sun Feb 28 08:30:19 1999  Thomas Roessler  <roessler@guug.de>
+
+       * rfc822.c: Fix a memory leak.  From Liviu.
+
+       * rfc822.c: Fix a memory leak. From Liviu.
+
+       * rfc1524.c, mutt.h, lib.c, attach.c:
+       Fix the $TMPDIR raace noted by Hamish Moffat.
+
+       * rfc1524.c, mutt.h, lib.c, attach.c: Fix a $TMPDIR race condition.
+
+       * po/uk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/fr.po, po/es.po, po/de.po, po/cs.po:
+       post-snapshot commit.
+
+Fri Feb 26 15:42:07 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.in, send.c, regex.c, mutt.h, init.h:
+       Adding pgp_replyencrypt.
+
+Thu Feb 25 06:58:01 1999  Thomas Roessler  <roessler@guug.de>
+
+       * from.c:
+       parse some more from_ lines.  Before, there were problems with cases
+       like this:
+
+       >From <@x400host:"/G=Bob/S=Allinson/CN=Has embedded spaces/OU=X400HOST/
+       >OU=xxxx/O=xxx/PRMD=xxxxx/ADMD=XXXXXX/C=GB/"@x400host>
+       >Tue Feb 23 09:44:52 1999
+
+       Problem noted by johnm@sirius3.demon.co.uk
+
+Tue Feb 23 20:38:49 1999  Thomas Roessler  <roessler@guug.de>
+
+       * imap.c: fix a segfault. From Brandon.
+
+Mon Feb 22 12:37:43 1999  Thomas Roessler  <roessler@guug.de>
+
+       * curs_main.c: Vikas' latest collapse fix.
+
+       * curs_main.c: collapse fix from Vikas.
+
+       * mbox.c, imap.c:
+       Avoid reading past actual headers when reopening mailboxes.  From
+       Daniel Eisenbud.
+
+       * mbox.c, imap.c:
+       Avoid reading past the end of actual headers when reopening folders.
+       From Daniel Eisenbud.
+
+       * pgp.c: Don't override base64 by quoted-printable.
+
+       * menu.c: replace clear() by clrtobot().
+
+       * pgp.c:
+       Currently, PGP signing messages will force quoted-printable encoding
+       even if we should use base64.
+
+Fri Feb 19 07:38:17 1999  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c: Don't qp-encode multiparts. ugh.
+
+       * sendlib.c: ... message and multipart, not just message.
+
+       * sendlib.c, mutt.h, init.h:
+       Add $encode_from: This option causes mutt to trigger
+       quoted-printable encoding for any non-multipart attachments which
+       have ^From at the beginning of a line.  Note that we don't trigger
+       on ^From_ since either procmail or sendmail is >-escaping on ^From,
+       and note that this won't help against sites where sendmail has the
+       '9' flag set on the local mailer, as these sites will inevitably
+       transform to 8bit (sic!).
+
+Thu Feb 18 23:14:36 1999  Thomas Roessler  <roessler@guug.de>
+
+       * pgp.c, mutt.h, init.h:
+       Add retainable signatures.  This should work nicely with encrypted
+       mailing lists.
+
+       * mx.c, init.h, globals.h, configure.in, acconfig.h, Makefile.am:
+       Introduce $dotlock_program: This makes the mutt_dotlock program's
+       location a run-time configuration variable.
+
+       * send.c, mutt.h, init.h:
+       Introduce $honor_followup_to.  The user will now be asked whether he
+       wants to honor mail-followup-to or not.
+
+       * curs_main.c:
+       properly handle OP_FLAG_MESSAGE when applied to tagged messages.
+
+       * po/uk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/fr.po, po/es.po, po/de.po, po/cs.po:
+       Updated translations.
+
+       * contrib/sample.mailcap: Fix the text/html entry.
+
+       * regex.c, headers.c, copy.h, configure.in:
+       copy.h: Some flags were used with multiple meanings. bad.
+       configure.in, regex.c: Make regex autoconfiguration work.
+       headers.c: expand aliases on the from header.
+
+       * headers.c: Expand aliases on the From header.
+
+Wed Feb 17 15:48:05 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/mutt.man.in: Fix the URL.
+
+       * sendlib.c, init.h: User-Agent, not X-Mailer.
+
+       * po/fr.po: update.
+
+       * copy.h:
+       Some of the M_CM flags erroneously had been defined to have the same
+       value.  _Very_ bad.
+
+       * contrib/sample.mailcap: Correct the netscape text/html entry.
+
+       * po/uk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/fr.po, po/es.po, po/de.po, po/cs.po, po/Makefile.in.in, sendlib.c, send.c, regex.c, pager.c, mutt.h, init.h, configure.in, acconfig.h, Muttrc.in, Makefile.am:
+       - Makefile.am: Fix the dist target to include all necessary files.
+       - po/fr.po: New French translation.  (-> stable!)
+       - Add the new options to Muttrc.in.
+       - regex.c, configure.in: include config.h from regex.c, and handle
+         alloca in a more intelligent way than before. (Currently, we just
+         mis-handle it.)
+         Port this to stable and test it!
+       - po/cs.po: update cs.po.
+       - po/de.po, po/nl.po: updated versions from Roland and Boris.
+       - pager.c: Vikas' grok_ansi fix.
+       - po/Makefile.in.in: keymap_defs is always in po/..  - from Lars
+         Hecking.
+
+Fri Feb 12 11:23:17 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/uk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/fr.po, po/es.po, po/de.po, po/cs.po, reldate.h, ChangeLog:
+       post-release commit for 0.95.3.
+
+       * po/nl.po, reldate.h, ChangeLog: post-release commit for 0.96.
+
+Thu Feb 11 22:52:03 1999  Thomas Roessler  <roessler@guug.de>
+
+       * imap.c, VERSION: another imap-related fix.
+
+       * pattern.c: another signal fix from liviu.
+
+Thu Feb 11 22:52:03 1999  Thomas Roessler  <roessler@guug.de>
+
+       * imap.c, VERSION: another imap-related fix.
+
+       * pattern.c: another signal fix from liviu.
+
+       * imap.c: Remove a superfluous if statement.
+
+       * imap.c: ups, that one was bad.
+
+       * imap.c:
+       The HEADER structure doesn't have a mailcap component any more.
+
+       * imap.c:
+       The HEADER structure doesn't have a mailcap component any more.
+       Noted by Johan van Selst <johans@stack.nl>.
+
+       * signal.c, sendlib.c, pattern.c, pager.c, mutt.h, menu.c, globals.h, curs_main.c, curs_lib.c:
+       patch.mutt-0.95.1i.ld.signals.1-2.gz
+
+       * po/nl.po: new nl translation.
+
+       * pattern.c, curs_main.c: pattern.c: Collapse patch from Vikas.
+
+       * po/nl.po: New nl translation.
+
+       * pattern.c, curs_main.c:
+       curs_main.c: Check whether the user pressed a number before putting
+       it back onto the stack.  (OP_JUMP)
+       pattern.c: Vikas' latest fix.
+
+       * po/uk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/fr.po, po/es.po, po/de.po, po/cs.po:
+       Updating the po files.
+
+       * doc/manual.sgml.in, doc/Makefile.in:
+       Install README.SECURITY in the doc directory, document
+       mailcap_sanitize.
+
+       * reldate.h, prepare, configure.in, VERSION, Makefile.am, Attic/$output.in:
+       Preparing for 0.96: $output.in was real fun in the dist target.
+       *argh*
+
+       * po/uk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/fr.po, po/es.po, po/de.po, po/cs.po, doc/manual.sgml.in, doc/Makefile.in, reldate.h, VERSION, NEWS, Makefile.am, ChangeLog:
+       [stable] post-release commit for 0.95.2.
+
+       * README.SECURITY: Add a note on how to write mailcap files.
+
+       * README.SECURITY: Add a note on how to write mailcaps.
+
+Wed Feb 10 23:12:27 1999  Thomas Roessler  <roessler@guug.de>
+
+       * browser.c: Ups, this one needed a #ifdef USE_IMAP.
+
+       * imap.c, browser.c:
+       Some patches Brandon Long posted to comp.mail.mutt.
+
+       * rfc1524.c, protos.h, lib.c, handler.c, attach.c:
+       Fix the security fix.
+
+       * rfc1524.c, mutt.h, lib.c, init.h: [stable] $mailcap_sanitize
+
+       * rfc1524.c, mutt.h, lib.c, init.h: [unstable] $mailcap_sanitize.
+
+       * system.c, signal.c, sendlib.c, send.c, protos.h, mutt.h, globals.h, curs_lib.c, compose.c, commands.c, attach.c, TODO:
+       patch.mutt-0.95.1i.ld.signals.1: A major redesign of how child
+       processes are invoked.  From Liviu.
+
+Tue Feb  9 23:54:03 1999  Thomas Roessler  <roessler@guug.de>
+
+       * sort.c, mx.c, mutt.h, mh.c, mbox.c, curs_main.c, ChangeLog:
+       Vikas' latest collapse fix.
+
+       * prepare: Small prepare bug noted by vikas.
+
+       * pgppubring.c, pgpkey.c, pgp.h, main.c, gnupgparse.c, browser.h:
+       browser.h: re-insert the "tagged" component.
+       pgp support: fix handling of PGP 5 subkeys, algorithm 20.
+
+       * pgppubring.c: [stable] Alg. 16 is encrypt-only, el-gamal.
+
+       * commands.c:
+       honor hdr_order when decode-piping a message.  From Vikas.
+
+       * po/cs.po: New czech translation.
+
+       * commands.c: Reorder headers when decode-piping.
+
+       * po/cs.po, doc/manual.sgml.in, socket.c, mx.c, mutt_socket.h, mutt.h, menu.c, init.h, imap.h, imap.c, functions.h, complete.c, browser.h, browser.c, OPS:
+       Brandon's IMAP clean-up; new czech translation.
+
+Thu Feb  4 12:00:10 1999  Thomas Roessler  <roessler@guug.de>
+
+       * rfc1524.c, protos.h, pgpinvoke.c, mx.c, lib.c:
+       [unstable] Change the way mutt_quote_filename() worked.  It's not
+       too reasonable to allocate memory dynamically whenever we quote a
+       file name.  (I guess I should add "vim" to pgpinvoke.c's copyright
+       notice. :-)
+
+       * mx.c:
+       [unstable] Check for write errors when moving messages to $mbox.
+
+       * mx.c: Check for write errors when moving messages to $mbox.
+
+Wed Feb  3 22:14:18 1999  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c, recvattach.c, postpone.c, main.c, hash.c, functions.h, compose.c, charset.h, charset.c, OPS:
+       [unstable] Produce some reasonable character set support when
+       postponing messages.
+
+       Additionally, this patch fixes a nasty pointer leak in
+       load_charset() [noted with electric fence], and a completely
+       mis-lead attempt to use bsearch().  Apparently, nobody ever tested
+       the utf8 decoder for quite some time.
+
+Tue Feb  2 21:57:44 1999  Thomas Roessler  <roessler@guug.de>
+
+       * pattern.c: merge ~v patch into unstable.
+
+       * pattern.c: small nit-fix from vikas to the ~v pattern.
+
+       * pgp.c: Thou shall not use dangling pointers.
+
+       * attach.c:
+       [unstable] Fix mutt_decode_save_attachment's handling of character
+       set conversions.
+
+       * sendlib.c, send.c, rfc2047.c, recvattach.c, protos.h, pgp.c, pattern.c, mutt.h, init.h, handler.c, globals.h, functions.h, copy.h, copy.c, compose.c, commands.c, charset.h, charset.c, attach.c, OPS:
+       Merging the external character set patch into unstable.
+       Additionally, this change introduces a M_CHARCONV state flag which
+       gives us some more control about when character set conversions are
+       actually done.  Current versions of mutt would happily apply
+       character set conversions when, e.g., saving a text/plain attachment
+       to a file.  (We had at least one corrupt russing translation file
+       due to this mis-feature.)
+
+       Additionally, we clean up some of the character set related code in
+       handler.c.  Most of that is now done by the decoder functions in
+       charset.c.
+
+       * imap.c: Brandon's imap_create patch.
+
+       * pgpkey.c:
+       [unstable] clear the message line before letting people select
+       public keys.
+
+       * imap.c, copy.c: [unstable] merging Brandon's imap fixes.
+
+       * copy.c, imap.c: A couple of IMAP fixes from Brandon Long.
+
+Sat Jan 30 17:07:30 1999  Thomas Roessler  <roessler@guug.de>
+
+       * pgpkey.c:
+       really fix the weak associations problem.  it was worse than i
+       thought.
+
+       * pgpkey.c:
+       Handle expired keys correclty, even when they are the only and exact
+       match when searching for keys by address.
+
+Fri Jan 29 11:15:15 1999  Thomas Roessler  <roessler@guug.de>
+
+       * init.h: [unstable] Change some default formats.
+
+       * remailer.c, pgpkey.c, menu.c, addrbook.c: Add generic menu searching.
+
+       * remailer.h, remailer.c, init.h, globals.h:
+       Use a user-definable format for the mixmaster menu.
+
+       * pgpkey.c, pgp.h, init.h: [unstable] add $pgp_entry_format.
+
+Thu Jan 28 09:08:47 1999  Thomas Roessler  <roessler@guug.de>
+
+       * gnupgparse.c:
+       gnupg's trust model is currently unusable.  As a work-around, we
+       don't present the user with _any_ trust information if he uses
+       gnupg.
+
+Wed Jan 27 19:53:46 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.in, pgpkey.c, mutt.h, init.h, gnupgparse.c:
+       Add $pgp_show_unusable.
+
+Tue Jan 26 21:24:56 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.in: [unstable] document ~v.
+
+       * doc/manual.sgml.in: [stable] document ~v.
+
+       * thread.c, pattern.c, mutt.h:
+       [unstable] Add the ~v pattern.  From Vikas.
+
+       * thread.c, pattern.c, mutt.h: [stable] Add the ~v pattern.
+
+       * doc/manual.sgml.in, ChangeLog:
+       ChangeLog, documentation for implicit_autoview.
+
+       * doc/manual.sgml.in: Document $implicit_autoview.
+
+Tue Jan 26 09:51:53 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.in: Document $implicit_autoview.
+
+       * compose.c:
+       Fix a segfault when users change attachment content types, and let
+       toggle-unlink honor the $resolv variable.
+
+       * compose.c:
+       $resolve should be honored when doing toggle-unlink on the compose
+       menu.
+
+Mon Jan 25 22:16:46 1999  Thomas Roessler  <roessler@guug.de>
+
+       * compose.c:
+       This may fix a core dump under certain circumstances.  Can't check
+       this out since I don't get the segfault.
+
+       * pgpkey.c: Fix a redraw problem when the key menu is invoked.
+
+       * po/ru.po, po/cs.po, configure.in: Russian and czech translations.
+
+       * po/cs.po: Adding a czech translation, and fixing the russian.
+
+       * po/cs.po: file cs.po was initially added on branch mutt-1-0-stable.
+
+       * configure.in: Adding a czech translation, and fixing the russian.
+
+       * po/ru.po: ru.po was badly distorted.
+
+Sat Jan 23 17:00:43 1999  Thomas Roessler  <roessler@guug.de>
+
+       * prepare:
+       when f is .../Makefile.am, `basename $f .am` is Makefile.  So I
+       should just write that. :-)
+
+       * prepare: Add the default predicate.
+
+       * from.c: A slightly optimized version of DE's y2k patch.
+
+       * prepare: Apparently, automake doesn't like our AC_OUTPUT($output)
+       construction...
+
+       * gnupgparse.c, from.c:
+       DE's patch to work around other software's possible y2k bugs.
+
+       * from.c: Try to avoid other programs' possible y2k bugs.
+
+       * enter.c: Fix the attach-multi patch.
+
+Fri Jan 22 22:12:10 1999  Thomas Roessler  <roessler@guug.de>
+
+       * lib.c: Fix a memory leak, noted by Roland Rosenfeld.
+
+       * lib.c: Fix a memory leak.  Noted by Roland Rosenfeld.
+
+       * recvattach.c, query.c, protos.h, menu.c, enter.c, curs_lib.c, compose.c, browser.c, addrbook.c:
+       Enable tagging in the file browser.
+
+       * protos.h, pgppubring.c, pgpkey.c, pgp.h, pgp.c, lib.c, handler.c, gnupgparse.c, compose.c:
+       Heavy hacking on mutt's pgp support.  We no longer read the complete
+       key ring into memory.  For gpg, performance is heavily improved due
+       to the fact that we are passing a couple of key hints to the key
+       ring parsing back-end.
+
+Thu Jan 21 05:19:42 1999  Thomas Roessler  <roessler@guug.de>
+
+       * hook.c: Fix _mutt_string_hook.
+
+Wed Jan 20 13:52:59 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/pl.po: New polish translation.
+
+       * pgppubring.c, pgpkey.c, configure.in:
+       Add heavily improved debugging capabilities to the PGP code.
+       Anyway, the problem I observed wasn't a bug in mutt, but an expired
+       key. *sigh*
+
+       * rfc1524.c: Don't segfault when MailcapPath is unset.
+
+       * rfc1524.c:
+       Fix a segmentation fault when no MailcapPath has been defined.
+
+Tue Jan 19 23:38:26 1999  Thomas Roessler  <roessler@guug.de>
+
+       * protos.h, mutt.h, init.h, hook.c, charset.c, Makefile.am:
+       Add the charset-hook command.
+
+       * configure.in, charset.c, acconfig.h, Makefile.am, $output.in, INSTALL:
+       Properly handle character set definition file installation.
+
+       * mx.c: Remove a confusing error message.
+
+       * mx.c: Remove confusing error message.
+
+       * keymap.c, curs_lib.c: patch-0.95.1.vikas.macro_function.1
+
+       * m4/Makefile.am.in: HP/UX portability patch from Lars Hecking.
+
+Mon Jan 18 09:45:29 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/ru.po:
+       New Russian translation from Michael Sobolev <mss@transas.com>.
+
+       * po/ru.po:
+       New russian translation from Michael Sobolev <mss@transas.com>.
+
+Thu Jan 14 13:08:46 1999  Thomas Roessler  <roessler@guug.de>
+
+       * compose.c: Mixmaster user interface beautification.
+
+       * mx.c, curs_lib.c:
+       Fix a couple of segfaults related to using curses when it isn't there.
+
+       * mx.c: dotlocking plus curses...
+
+Wed Jan 13 23:56:39 1999  Thomas Roessler  <roessler@guug.de>
+
+       * send.c, mutt.h, mbox.c, handler.c, copy.h, copy.c:
+       patch-0.95.1i.tlr.weed.1, patch-0.95.1i.tlr.dotlock.1 - These have
+       been tested with unstable so far, seem to work fine.
+
+       * mx.c: Don't use curses when we don't have it.
+
+       * mx.c: Don't try to do mutt_yesorno if we don't have curses.
+
+       * remailer.h:
+       Mixmaster has 20 address slots, that makes _19_ remailers.
+
+       * remailer.c: Fix the "append" function.
+
+       * sendlib.c: Don't leak message dates when sending via mixmaster.
+
+       * remailer.c:
+       Add search code to the remailer chain selecting menu.  [This is
+       pretty generic - should we add that code to menu.c?]
+
+       * postpone.c: Fix postponing of PGP messages.
+
+       * send.c, remailer.c, compose.c:
+       Qualify addresses before passing them to mixmaster.
+
+       * send.c, remailer.h, protos.h, mutt.h:
+       Clean up dependencies: remailer.h is no longer included by mutt.h,
+       and the mix_* prototypes can once again go to remailer.h.
+
+       * sendlib.c, remailer.c, remailer.h, send.c, protos.h, postpone.c, mutt.h, lib.c, keymap.h, keymap.c, init.h, headers.c, globals.h, functions.h, configure.in, compose.c, OPS.MIX, acconfig.h, Makefile.am:
+       A first take at adding a mixmaster front-end to mutt.  Don't worry,
+       it's optional. ;-)
+
+Tue Jan 12 22:01:11 1999  Thomas Roessler  <roessler@guug.de>
+
+       * mbox.c: Open folders in read-only mode if mutt can't lock them.
+
+Mon Jan 11 18:12:49 1999  Thomas Roessler  <roessler@guug.de>
+
+       * send.c, mutt.h, handler.c, copy.h, copy.c:
+       When decode-forwarding messages with message/Rfc822 attachments,
+       mutt should weed the attachments' headers according to the setting
+       of $forward_weed.
+
+Sun Jan 10 09:11:36 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.in, hdrline.c: Byrial's %D time format patch.
+
+Sat Jan  9 17:53:02 1999  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.in, recvattach.c, protos.h, lib.c:
+       Byrial's latest changes to stable.
+
+       * recvattach.c, protos.h, lib.c:
+       Ask the user whether to overwrite a file or append to it.  From
+       Byrial Jensen.
+
+       * doc/manual.sgml.in: Fix a documentation problem.
+
+Fri Jan  8 23:29:05 1999  Thomas Roessler  <roessler@guug.de>
+
+       * charset.c:
+       When doing a binary search, we may as well use bsearch (3).
+
+       * parse.c: Optimized time-zone parsing.
+
+       * parse.c: Optimize time zone parsing.  By Byrial Jensen.
+
+       * history.c:
+       Don't clear the history when the user issues a "set history=..."
+       command which doesn't change anything.
+
+       * history.c:
+       Don't clear the history when "set history=..." doesn't change the
+       buffer size.
+
+       * thread.c, curs_main.c: Threading fix from Daniel Eisenbud.
+
+Thu Jan  7 19:01:30 1999  Thomas Roessler  <roessler@guug.de>
+
+       * init.c: Vikas' set_boolean patch.
+
+       * protos.h, handler.c, attach.c:
+       Updated implicit autoview handling from stable.
+
+       * protos.h, handler.c, attach.c:
+       Only use "implicit" autoviews (implicit_autoview or MM_NOASK) when
+       mutt is unable to handle a content type internally.  This saves us
+       parsing the mailcap files for every attachment we handle.
+
+       * mx.c, mutt.h, init.h, hdrline.c, commands.c, attach.c:
+       Merge in the mailcap patch from stable.
+
+       * thread.c, system.c, strcasecmp.c, status.c, sort.h, sort.c, socket.c, snprintf.c, signal.c, sha_locl.h, sha1dgst.c, sha.h, sendlib.c, send.c, score.c, rfc822.h, rfc822.c, rfc2047.h, rfc2047.c, rfc1524.h, rfc1524.c, resize.c, recvattach.c, query.c, protos.h, postpone.c, pop.c, pgppubring.c, pgpkey.c, pgpinvoke.c, pgp.h, pgp.c, pattern.c, parse.h, parse.c, pager.h, pager.c, mx.h, mx.c, mutt_socket.h, mutt_regex.h, mutt_menu.h, mutt_curses.h, mutt.h, mime.h, mh.c, menu.c, mbox.c, mapping.h, main.c, mailbox.h, lib.c, keymap.h, keymap.c, init.h, init.c, imap.h, imap.c, hook.c, history.h, history.c, help.c, headers.c, hdrline.c, hash.h, hash.c, handler.c, gnupgparse.c, globals.h, getdomain.c, functions.h, from.c, flags.c, filter.c, enter.c, edit.c, dotlock.h, dotlock.c, date.c, curs_main.c, curs_lib.c, copy.h, copy.c, compose.c, complete.c, commands.c, color.c, charset.h, charset.c, buffy.h, buffy.c, browser.c, attach.h, attach.c, alias.c, addrbook.c, acconfig.h:
+       Get rid of RCS ids in source files.  They are getting in our way
+       when merging changes.
+
+       * mx.c, mutt.h, init.h, hdrline.c, commands.c, attach.c:
+       Remove the use_mailcap variable. Instead, we introduce
+       implicit_autoview which triggers autoview for every content type
+       it's applicable to.
+
+       * thread.c, system.c, strcasecmp.c, status.c, sort.h, sort.c, socket.c, snprintf.c, signal.c, sha_locl.h, sha1dgst.c, sha.h, sendlib.c, send.c, score.c, rfc822.h, rfc822.c, rfc2047.h, rfc2047.c, rfc1524.h, rfc1524.c, resize.c, recvattach.c, query.c, protos.h, postpone.c, pop.c, pgppubring.c, pgpkey.c, pgpinvoke.c, pgp.h, pgp.c, pattern.c, parse.h, parse.c, pager.h, pager.c, mx.h, mx.c, mutt_socket.h, mutt_regex.h, mutt_menu.h, mutt_curses.h, mutt.h, mime.h, mh.c, menu.c, mbox.c, mapping.h, main.c, mailbox.h, lib.c, keymap.h, keymap.c, init.h, init.c, imap.h, imap.c, hook.c, history.h, history.c, help.c, headers.c, hdrline.c, hash.h, hash.c, handler.c, gnupgparse.c, globals.h, getdomain.c, functions.h, from.c, flags.c, filter.c, enter.c, edit.c, dotlock.h, dotlock.c, date.c, curs_main.c, curs_lib.c, copy.h, copy.c, compose.c, complete.c, commands.c, color.c, charset.h, charset.c, buffy.h, buffy.c, browser.c, attach.h, attach.c, alias.c, addrbook.c, acconfig.h:
+       Get rid of the rcsid fields.  They are getting in the way whenever I
+       merge changes into unstable.
+
+       * po/nl.po, init.h, configure.in: Merging changes from stable.
+
+       * configure.in:
+       Don't add regex.c, but regex.o to the LIBOBJS variable when needed.
+
+       * init.h: Fix default settings for use_mailcap and mime_forward.
+
+Wed Jan  6 10:13:32 1999  Thomas Roessler  <roessler@guug.de>
+
+       * po/fr.po, po/de.po, sendlib.c, regex.c, protos.h, parse.c, mutt_regex.h, mbox.c, main.c, hdrline.c, from.c, date.c, configure.in, acconfig.h, _regex.h, Makefile.am, INSTALL:
+       [unstable] Merge changes from stable: rx -> regex, Byrial's timezone
+       patch, translation updates.
+
+       * sendlib.c, protos.h, parse.c, mbox.c, from.c, date.c:
+       Byrial's timezone patch, without the absurd optimizations.
+
+       * regex.c:
+       Use gnu regex instead of gnu rx.  This library is said to behave
+       better.  Additionally, it supports \<...\> patterns.  The files
+       _regex.h and regex.c included with this distribution correspond to
+       posix/regex.[ch] from the glibc 2.0.7t source tree.
+
+       * regex.c: file regex.c was initially added on branch mutt-1-0-stable.
+
+       * mutt_regex.h, main.c, configure.in, acconfig.h, _regex.h:
+       Use gnu regex instead of gnu rx.  This library is said to behave
+       better.  Additionally, it supports \<...\> patterns.  The files
+       _regex.h and regex.c included with this distribution correspond to
+       posix/regex.[ch] from the glibc 2.0.7t source tree.
+
+       * _regex.h:
+       file _regex.h was initially added on branch mutt-1-0-stable.
+
+       * Makefile.am, INSTALL:
+       Use gnu regex instead of gnu rx.  This library is said to behave
+       better.  Additionally, it supports \<...\> patterns.  The files
+       _regex.h and regex.c included with this distribution correspond to
+       posix/regex.[ch] from the glibc 2.0.7t source tree.
+
+       * po/nl.po, po/fr.po:
+       Various fixes to the NL translation; new French messages.
+
+Tue Jan  5 14:35:18 1999  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c, mutt.h, main.c, configure.in, charset.h, charset.c, Makefile.am:
+       [unstable] Adding experimental new character set conversion code.
+
+       * po/de.po: Merging from stable.
+
+       * po/de.po: Fix a typo in de.po.
+
+       * po/de.po: [unstable] Merging changes from stable.
+
+       * po/nl.po, hdrline.c, curs_main.c, configure.in:
+       [unstable] merging changes from stable.
+
+       * hdrline.c: Conditionally display score and number of lines.
+
+       * po/nl.po:
+       [stable] Adding the NL translation; correcting some bugs in the DE
+       translation.
+
+       * po/nl.po: file nl.po was initially added on branch mutt-1-0-stable.
+
+       * po/de.po, configure.in:
+       [stable] Adding the NL translation; correcting some bugs in the DE
+       translation.
+
+Mon Jan  4 19:15:10 1999  Thomas Roessler  <roessler@guug.de>
+
+       * curs_main.c: [unstable] fix next-unread plus collapsing.
+
+       * curs_main.c: [stable] Fix next-unread when collapsing threads.
+
+       * curs_main.c: [unstable] merging changes from stable.
+
+       * curs_main.c: [stable] fix a bogus type cast.
+
+       * reldate.h, curs_main.c: [unstable] merging in changes from stable.
+
+       * curs_main.c:
+       [stable] Don't use the index elements of header structures when
+       new messages arrived on the index.
+
+       * reldate.h: 0.95.1 should have a proper release date.
+
+       * send.c, pgp.c, handler.c, configure.in:
+       Make the experimental branch the main trunk.
+
+       * po/uk.po, po/ru.po, po/pl.po, po/it.po, po/fr.po, po/es.po, po/de.po:
+       0.95.1 post-release commit.
+
+       * configure.in: [unstable] Create suitable version strings.
+
+       * VERSION, ChangeLog: [stable] Preparing 0.95.1.
+
+       * send.c: [unstable] commit changes from the stable tree.
+
+       * send.c:
+       [stable] When sending a message in batch mode failed, mutt would
+       dump core.  Patch from Byrial Jensen.
+
+       * pgp.c, handler.c: [unstable] Add multiple signature support.
+
+Mon Jan  4 12:57:55 1999  Thomas Roessler  <roessler@guug.de>
+
+       * send.c: When sending a message in batch mode failed, mutt
+       would dump core.  Patch from Byrial Jensen.
+
+Sat Jan  2 17:23:24 1999  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c, ChangeLog: I shouldn't accept patches on New
+       Year's day.  Not even new-year related patches.
+
+       * po/it.po: Fixing a typo.
+
+       * protos.h, parse.c, handler.c: mutt_parse_date () shouldn't
+       modify its argument.  Problem noted by Byrial Jensen.
+
+       * lib.c: Fix safe_symlink to correctly handle relative paths.
+
+Sat Jan  2 09:35:09 1999  Thomas Roessler  <roessler@guug.de>
+
+       * protos.h, parse.c, handler.c: mutt_parse_date () shouldn't
+         modify its argument.  Problem noted by Byrial Jensen.
+
+       * lib.c: Fix safe_symlink to correctly handle relative paths.
+
+Fri Jan  1 09:43:15 1999  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c: New Year's time zone handling patch from Manish
+         Singh <yosh@gimp.org>.
+
+Thu Dec 31 09:45:46 1998  Thomas Roessler  <roessler@guug.de>
+
+       * curs_main.c: The attached patch moves code for sorting the
+         index and restoring the current message from
+         mutt_index_menu() to a new function. It saves code
+         duplication.
+
+Wed Dec 30 07:58:40 1998  Thomas Roessler  <roessler@guug.de>
+
+       * pgp.c, main.c: Localize some more messages.  From Michael Sobolev.
+
+Tue Dec 29 16:29:03 1998  Thomas Roessler  <roessler@guug.de>
+
+       * mbox.c, ChangeLog: Use sizeof instead of strlen for some
+         fixed strings.
+
+       * mh.c: Take setting the index_hint out of the main loop of
+         mh_check_mailbox().
+
+Mon Dec 28 14:59:04 1998  Thomas Roessler  <roessler@guug.de>
+
+       * attach.c: Fix a segmentation fault when viewing
+         message/rfc822 attachments from the compose screen.
+
+Wed Dec 23 15:57:00 1998  Thomas Roessler  <roessler@guug.de>
+
+       * pattern.c: A slightly modified version of Vikas'
+         pattern_match patch.  This changes the semantics of the
+         pattern-something functions so they only apply to
+         _visible_ messages.  (With the exception of limit: In this
+         case, the user can add another pattern if he wants to
+         limit further, or he can give an entirely new pattern.)
+
+Tue Dec 22 18:07:19 1998  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c: Fix MIME forwarding.  From Vikas.
+
+Mon Dec 21 12:38:57 1998  Thomas Roessler  <roessler@guug.de>
+
+       * mx.c, mh.c, mbox.c, imap.c, charset.c: Adjust some
+         hash-related parameters.
+
+       * mx.c, mh.c, mbox.c: Mail folder synchronization-related fixes:
+
+       - Another situation under which mutt would lose track of the current
+         message when maildir folders changed has been removed.
+
+       - While synchronizing mbox-type folders, a write error when
+         constructing the draft version of the new mail folder would leave
+         behind a copy ofthe file containing the draft.  This is most
+         annoying if the write error is due to lack of disk space.
+
+       * po/pl.po: Small \n fixes.
+
+       * parse.c, from.c, lib.c: mutt_strlen() optimizations from
+       Byrial Jensen.
+
+       * po/pl.po: Add the polish translation.
+
+       * configure.in: Register the polish translation.
+
+       * doc/manual.sgml.in: Fixes to the forwarding chapter.  From
+         O'Shaughnessy Evans <shaug@gstis.net>.
+
+       * m4/README, m4/Makefile.am.in: Here is a small patch to
+         simplify m4/Makefile.am.in. This came out of a suggestion
+         I made to Jim Meyering (maintainer of GNU fileutils, where
+         I snarfed the code from :).  (From: Lars Hecking
+         <lhecking@nmrc.ucc.ie>)
+
+Fri Dec 18 10:22:59 1998  Thomas Roessler  <roessler@guug.de>
+
+       * mh.c: Catch an error condition when synchronizing mh
+         messages.
+
+       * po/de.po: Fix a format which had %s instead of %d.
+
+Thu Dec 17 18:39:48 1998  Thomas Roessler  <roessler@guug.de>
+
+       * INSTALL: I've been told that the FreeBSD shell has been
+         fixed meanwhile. Additionally, add the note from Vikas on
+         patching Solaris to get mutt work properly on that system.
+
+       * mh.c: Fix attachment deletion for maildir/mh folders. This
+         may fix other mh-related problems, too.
+
+       * charsets/Makefile.in: Some installs aren't able to cope
+         with multiple files at once.
+
+       * curs_lib.c: Don't even try to clear the status line when
+         not in curses mode.
+
+Wed Dec 16 13:23:06 1998  Thomas Roessler  <roessler@guug.de>
+
+       * imap.c: Two lines were in reverse order.  Noted by Daniel
+       Eisenbud.
+
+       * thread.c: Give Daniel Eisenbud a "lock" on this file.
+
+       * pager.c: Fix "$resolve" behaviour for OP_TAG and
+       OP_TOGGLE_NEW from the pager.
+
+       * curs_lib.c: SLang-related fixes to mutt_endwin().
+
+       * compose.c: Permit the user to set the typical MIME
+       parameters used with application/pgp messages.
+
+       * color.c: Fix a segfault noted by Stephan Hack.  (Fix noted
+       by Vikas.)
+
+       * configure.in: Make the sendmail check compatible with
+       newer autoconf versions. Noted by Lars Hecking.
+
+Sun Dec 13 08:10:13 1998  Thomas Roessler  <roessler@guug.de>
+
+       * mx.c, curs_main.c: Don't dump core when closing a NULL
+       context.  Fixes the "exit from no-mailbox mode" bug.
+
+Sat Dec 12 10:14:43 1998  Thomas Roessler  <roessler@guug.de>
+
+       * po/uk.po, po/ru.po, po/it.po, po/fr.po, po/es.po, po/de.po:
+       Post-release commit.
+
+       * hook.c, curs_main.c: More _PGPPATH and us dist related fixes.
+
+       * mutt.h: Don't define M_PGPHOOK unless _PGPPATH has been defined.
+
+       * pager.c: Another reap.pl-related fix.
+
+       * Makefile.am: The us-dist target was screwed.
+
+       * charsets/parse_i18n.c, charsets/gen_charsets,
+       charsets/Makefile.in, thread.c, system.c, strcasecmp.c,
+       status.c, stamp-h.in, sort.h, sort.c, socket.c, snprintf.c,
+       signal.c, sha_locl.h, sha1dgst.c, sha.h, sendlib.c, send.c,
+       score.c, rfc822.h, rfc822.c, rfc2047.h, rfc2047.c,
+       rfc1524.h, rfc1524.c, resize.c, reldate.h, recvattach.c,
+       reap.pl, query.c, protos.h, prepare, postpone.c, pop.c,
+       pgppubring.c, pgpkey.c, pgpinvoke.c, pgp.h, pgp.c,
+       pattern.c, parse.h, parse.c, pager.h, pager.c, mx.h, mx.c,
+       mutt_socket.h, mutt_regex.h, mutt_menu.h, mutt_curses.h,
+       mutt.h, mkinstalldirs, missing, mime.types, mime.h, mh.c,
+       menu.c, mbox.c, mapping.h, main.c, mailbox.h, lib.c,
+       keymap.h, keymap.c, install-sh, init.h, init.c, imap.h,
+       imap.c, hook.c, history.h, history.c, help.c, headers.c,
+       hdrline.c, hash.h, hash.c, handler.c, gnupgparse.c,
+       globals.h, getdomain.c, gen_defs, functions.h, from.c,
+       flags.c, filter.c, enter.c, edit.c, dotlock.h, dotlock.c,
+       date.c, curs_main.c, curs_lib.c, copy.h, copy.c,
+       configure.in, config.sub, config.guess, compose.c,
+       complete.c, commands.c, color.c, charset.h, charset.c,
+       buffy.h, buffy.c, browser.c, attach.h, attach.c, alias.c,
+       addrbook.c, acconfig.h, VERSION, TODO, README, OPS.PGP, OPS,
+       NEWS, Muttrc.in, Makefile.am, INSTALL, GPL, ChangeLog,
+       COPYRIGHT, ABOUT-NLS: *** empty log message ***
+
+       * po/uk.po, po/ru.po, po/it.po, po/fr.po, po/es.po,
+       po/de.po, reldate.h, VERSION, ChangeLog: Release-commit for
+       0.95i.
+
+       * hash.c: Use a better hash function.  Contributed by Stefan Langerman
+       <lfalse@paul.rutgers.edu> to mutt-users.
+
+Fri Dec 11 20:48:14 1998  Thomas Roessler  <roessler@guug.de>
+
+       * reldate.h, VERSION, ChangeLog: 0.94.999 pre-release commit.
+
+       * Makefile.am: The distdir target creates hard links for the
+       source files.  This has the consequence that the us-dist
+       hook will demolish files in the main source tree.  We have
+       to un-link the various instances of the source code.
+
+       * INSTALL: Warn about regexp-related problems under Solaris 2.6.
+
+       * po/uk.po, po/ru.po, po/it.po, po/fr.po, po/es.po, po/de.po:
+       Various last-minute changes and automatic updates.
+
+       * main.c: Go into no-mailbox mode if the initial folder was
+       given explicitly (-f) and can't be opened.
+
+       * mh.c: Undoing the mh_speed patch.
+
+       * po/it.po, po/fr.po: l10n fixes.
+
+       * curs_main.c: Start a new reply and postpone it. Then type
+       m (mail), and recall and send the postponed reply. The
+       replied message is _not_ flagged replied.
+
+       (From Byrial Jensen.)
+
+       * po/fr.po: Bug-fixed french l10n.
+
+       * parse.c: Multipart parser fixes from Byrial.  Finally.
+
+       * po/it.po: Small fix.
+
+Thu Dec 10 22:48:56 1998  Thomas Roessler  <roessler@guug.de>
+
+       * po/fr.po, configure.in: Add the french l10n.
+
+       * po/uk.po, po/ru.po, po/it.po, po/es.po, po/de.po, reldate.h:
+       post-release commit 0.94.99.
+
+       * VERSION, README, ChangeLog: Pre-release commit for 0.94.99.
+
+       * menu.c: Fix tag-prefix.
+
+Thu Dec 10 11:06:25 1998  Thomas Roessler  <roessler@guug.de>
+
+       * menu.c: Fix tag-prefix.
+
+       * compose.c:
+       Redraw fix after the content type was changed on the compose menu.
+
+Tue Dec  8 23:09:53 1998  Thomas Roessler  <roessler@guug.de>
+
+       * help.c: Help screen resizing nit.  From Gero Treuner.
+
+       * doc/manual.sgml.in: Typo.
+
+       * sendlib.c:
+       Work around sendmail 8.9.1a invalidating PGP/MIME signatures by
+       re-ordering MIME headers in the way sendmail does.
+
+       * mh.c:
+       Keep track of file name changes for files wandering around between
+       the subfolders of a maildir.
+
+       * mh.c:
+       More fixes to the maildir resynchronization code.  This should now
+       also smoothly handle the case of messages _vanishing_ from maildir's
+       new/ subdirectory.
+
+       * init.c: Make the debug file access unbuffered.  Important if we are
+       debugging crashes.
+
+Mon Dec  7 21:13:44 1998  Thomas Roessler  <roessler@guug.de>
+
+       * mx.c, mh.c:
+       Fix a couple of flag-related bugs in the maildir folder update code.
+
+       * imap.c: Fix a completely ugly comment formatting.
+
+       * mutt.h: Adjust '#' to the first column.
+
+       * rfc2047.c: Don't tag us-ascii headers as $Charset or unknown-8bit.
+
+Thu Dec  3 23:29:37 1998  Thomas Roessler  <roessler@guug.de>
+
+       * po/uk.po, po/ru.po, po/it.po, po/es.po, po/de.po,
+       reldate.h, VERSION, ChangeLog: release-commit 0.94.18.
+
+Wed Dec  2 20:12:35 1998  Thomas Roessler  <roessler@guug.de>
+
+       * contrib/Pine.rc, contrib/Mush.rc:
+       Bring the sample rc files better in synch with the actual code.
+
+Wed Dec  2 20:12:35 1998  Thomas Roessler  <roessler@guug.de>
+
+       * contrib/Pine.rc, contrib/Mush.rc: Bring the sample rc
+       files better in synch with the actual code.
+
+       * recvattach.c: Remove a warning which comes from code
+       actually belonging to the send_charset patch.
+
+       * rfc2047.c: Encode- and decode the "val" field when using
+       mutt with EXACT_ADDRESS enabled.
+
+       * charsets/Makefile.in, Makefile.am: Small fixes to the
+       build process. From Lars Hecking.
+
+       * compose.c: The attached patch fixes yet another redraw
+       related bug. When I call OP_SAVE from the Compose menu and
+       use the file-browser and 'q' out of the file-browser, the
+       screen still shows the browser, but the control is really in
+       the Compose menu. A Ctrl-L verifies this. Basically, a
+       screen redraw is missing. (From Vikas.)
+
+       * mutt_menu.h, menu.c, compose.c: From the Compose menu,
+       invoke attach-message. Tag a whole bunch of messages. Say,
+       for example, 100. When you exit the folder, the Compose
+       menu's status line has disappeared. (From Vikas.)
+
+       * browser.c: patch-0.94.17.vikas.browser_redraw.1
+
+Mon Nov 23 21:10:12 1998  Thomas Roessler  <roessler@guug.de>
+
+       * protos.h, lib.c:
+       Change safe_malloc's size parameter from (unsigned int) to size_t.
+
+       * send.c, protos.h, pattern.c, alias.c: From Byrial:
+
+       I don't think that the match-all pattern modifier works as can be
+       expected from a logical point of view.
+
+       The attached patch will make it work as I expect it to work:
+
+         - It works on all patterns which explicit or implicit use address
+           lists: ~c, ~C, ~e, ~f, ~l, ~L, ~p, ~P, and ~t. (It didn't work
+           with ~l before).
+
+         - It works such that a modified pattern always match, unless there
+           is at least one address in at least one of the referenced lists
+           that it doesn't match.
+
+       * doc/manual.sgml.in, send.c, mutt.h, mh.c, init.h, Muttrc.in:
+       Introduce a new option $reply_self.  From Vikas.
+
+Fri Nov 20 00:27:03 1998  Thomas Roessler  <roessler@guug.de>
+
+       * po/it.po: New it.po from Mario.
+
+       * doc/mutt.man.in: Fix a small typo.
+
+Thu Nov 19 23:57:03 1998  Thomas Roessler  <roessler@guug.de>
+
+       * contrib/Pine.rc: Fix some ancient syntax.
+
+       * po/uk.po, po/ru.po, po/it.po, po/es.po, po/de.po, send.c:
+       Hack around problems with multi-valued Reply-To headers.  From
+       Roland Rosenfeld.
+
+       * rfc2047.c:
+       Properly encode '_' characters in words which are qp-encoded.
+
+       * sendlib.c:
+       Use mutt_is_message_type() in the message transformation code.
+
+       * po/Makefile.in.in, doc/Makefile.in, charsets/Makefile.in, Makefile.am:
+       Fix all Makefiles.  make DESTDIR=/path/to/something install should
+       work now.
+
+Wed Nov 18 23:09:46 1998  Thomas Roessler  <roessler@guug.de>
+
+       * po/uk.po, po/ru.po, po/it.po, po/es.po, po/de.po, reldate.h, VERSION, ChangeLog:
+       Release-commit for 0.94.17.
+
+       * sendlib.c, protos.h, pgp.c, parse.c, lib.c, compose.c:
+       This patch simplifies the generation of content type parameters
+       significantly by introducing a funciton mutt_set_parameter().
+       Additionally, we re-use code from parse.c for parsing user-input
+       content type headers on the compose screen.
+
+       * compose.c: Remove some uuencode-related debris.
+
+       * recvattach.c:
+       Remove some code which crept in from the external character set patch.
+
+       * recvattach.c:
+       Make optional formats work while processing $attach_format.
+
+Wed Nov 18 22:57:03 1998  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c, protos.h, pgp.c, parse.c, lib.c, compose.c:
+       This patch simplifies the generation of content type parameters
+       significantly by introducing a funciton mutt_set_parameter().
+       Additionally, we re-use code from parse.c for parsing user-input
+       content type headers on the compose screen.
+
+       * compose.c: Remove some uuencode-related debris.
+
+       * recvattach.c:
+       Remove some code which crept in from the external character set patch.
+
+       * recvattach.c:
+       Make optional formats work while processing $attach_format.
+
+       * mh.c: Remove bogus re-sorting code from the maildir check routine.
+
+       * mutt.h:
+       Include <unistd.h>, so SEEK_SET is defined on some systems which
+       don't do so in <stdlib.h>.
+
+Tue Nov 17 13:23:26 1998  Thomas Roessler  <roessler@guug.de>
+
+       * po/uk.po, po/ru.po, po/it.po, po/es.po:
+       Checkpoint commit, containing quite a few fuzzy translations.
+
+       * po/de.po: Update some messages.
+
+       * m4/Makefile.am.in, m4/README, m4/gettext.m4, m4/lcmessage.m4, m4/progtest.m4, prepare, configure.in, Makefile.am:
+       Configuration fixes from Lars Hecking, with some more fixes and
+       modifications from myself.  With some luck, you don't need a gettext
+       installation any more.
+
+       * sendlib.c:
+       Fix the base64 encoder.  The current code would produce slightly
+       unpredictible output which leads to bad signatures.
+
+       * postpone.c, pgp.c, parse.c, pager.c:
+       Fix a search coloring related bug.
+
+Mon Nov 16 11:44:42 1998  Thomas Roessler  <roessler@guug.de>
+
+       * protos.h: Drop ci_attach - it doesn't exist.  Noted by Byrial Jensen.
+
+Sun Nov 15 09:53:23 1998  Thomas Roessler  <roessler@guug.de>
+
+       * parse.c: Stupid typo.
+
+       * protos.h, parse.c, attach.c: My version of Byrial's parse_part patch.
+
+       * recvattach.c, protos.h, mutt.h, copy.c, compose.c:
+       I can elaborate a little more on the last paragraph. It is deletion
+       of the top level part direct under a message/rfc822 part which
+       gives problems because the headers of the message/rfc822 part have
+       to be changed in this case. It is hard to tell exactly how many
+       bytes and lines will be removed and added in this case.
+
+       If we can refrain from deletion of such parts and thus only allow
+       deletion of parts direct under a multipart part, then it is
+       relative easy always to make correct Content-Length: and Lines:
+       headers in the copy. (The correctness of the Lines count is
+       dependent of the correctness of the initial value, though).
+
+       (From: Byrial Jensen)
+
+       * doc/manual.sgml.in:
+       Correcting Vikas' E-Mail address in the credits section.
+
+Sat Nov 14 08:24:56 1998  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.in: Update Byrial's e-mail address.
+
+       * copy.c:
+       Simplify the new attachment deletion code not to require an extra
+       temporary file.  (From: Byrial Jensen <byrial@image.dk>)
+
+       * help.c, handler.c: Type cast nit from Gero Treuner.
+
+Fri Nov 13 18:31:06 1998  Thomas Roessler  <roessler@guug.de>
+
+       * imap.c:
+       Currently, Mutt won't use a default folder if just the IMAP server is
+       specified.  In fact, if the folder isn't specified, it will core-dump.
+
+       The attached patch will use INBOX as the IMAP folder name if none is
+       specified, eliminating the core-dump.
+
+       (From: Aaron Schrab <aaron+mutt@schrab.com>)
+
+Thu Nov 12 21:52:01 1998  Thomas Roessler  <roessler@guug.de>
+
+       * mutt.h, copy.c: Byrial's latest attachment deletion patch.
+
+       * mutt.h, lib.c, handler.c: Introduce a state_printf() function.
+
+Wed Nov 11 21:18:08 1998  Thomas Roessler  <roessler@guug.de>
+
+       * po/it.po: New it.po from Marco.
+
+       * snprintf.c: Don't use the mutt_str* functions in this module.
+
+       * strcasecmp.c:
+       the s/str.*cmp/mutt_str.*cmp/ replacement should not have taken
+       place here.
+
+Tue Nov 10 22:21:51 1998  Thomas Roessler  <roessler@guug.de>
+
+       * dotlock.c: Don't use mutt_strsomething in the dotlocking code.
+
+       * send.c: Fix the $metoo option's behaviour.
+
+       * thread.c, strcasecmp.c, status.c, sort.c, socket.c,
+       snprintf.c, sendlib.c, send.c, score.c, rfc822.c, rfc2047.c,
+       rfc1524.c, recvattach.c, query.c, protos.h, postpone.c,
+       pop.c, pgppubring.c, pgpkey.c, pgpinvoke.c, pgp.c,
+       pattern.c, parse.c, pager.c, mx.c, mh.c, menu.c, mbox.c,
+       main.c, lib.c, keymap.c, init.c, imap.c, hook.c, history.c,
+       help.c, headers.c, hdrline.c, hash.c, handler.c,
+       gnupgparse.c, getdomain.c, from.c, enter.c, edit.c,
+       dotlock.c, curs_lib.c, copy.c, compose.c, complete.c,
+       commands.c, color.c, charset.c, buffy.c, browser.c,
+       attach.c, alias.c, addrbook.c: Introduce or rewrite
+       mutt_{str*cmp,strlen} and use them all over the place.  If
+       there are still segmentation faults due to missing NONULLs
+       over, they are gone now.
+
+       * main.c: Add a "pseudo-credit" to the extended copyright notice.
+
+       * po/uk.po, po/ru.po, po/it.po, po/es.po, po/de.po, reldate.h, VERSION, ChangeLog:
+       Releasing 0.94.16.
+
+       * sendlib.c, mx.h, mx.c, mbox.c, init.c, copy.c, commands.c, buffy.c, attach.c:
+       Experimental support for the so-called "kendra" mail folder format.
+       This seems to be used on OS/2 and is, actually, a slibhtly modified
+       version of the MMDF format.
+
+       * parse.c:
+       Do some sanity checking when reading attachment.  This fix should
+       catch bad attachments.
+
+       * edit.c:
+       Fix a possible buffer overflow.  (This seems to be the one noticed
+       by Pavel Gulchouck <gul@lucky.net>.)
+
+       * compose.c: Wrong fix from Vikas.  Undo it.  (Noted by Byrial.)
+
+Tue Nov 10 21:02:27 1998  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c, mx.h, mx.c, mbox.c, init.c, copy.c, commands.c, buffy.c, attach.c:
+       Experimental support for the so-called "kendra" mail folder format.
+       This seems to be used on OS/2 and is, actually, a slibhtly modified
+       version of the MMDF format.
+
+       * parse.c:
+       Do some sanity checking when reading attachment.  This fix should
+       catch bad attachments.
+
+       * edit.c:
+       Fix a possible buffer overflow.  (This seems to be the one noticed
+       by Pavel Gulchouck <gul@lucky.net>.)
+
+       * compose.c: Wrong fix from Vikas.  Undo it.  (Noted by Byrial.)
+
+       * curs_lib.c, compose.c: Fix a multi_choice related bug.  From Vikas.
+
+       * buffy.c:
+       Skip empty mailbox parameters.  This fixes a segmentation fault
+       noted by Marco d'Itri.
+
+Mon Nov  9 19:28:42 1998  Thomas Roessler  <roessler@guug.de>
+
+       * from.c: Catch possible bad memory access.
+
+       * doc/manual.sgml.in, sendlib.c, protos.h, init.h, globals.h, copy.c, Muttrc.in:
+       Rewrite copy_delete_attach().
+
+       * sort.c, score.c, protos.h, curs_main.c, color.c:
+       Fix an efficiency problem with the color index features.
+
+       * doc/mutt.man.in: Replace @sharedir@ by @sysconfdir@.
+
+       * doc/manual.sgml.in:
+       Make the default_hook documentation match the code.
+
+       * main.c, curs_main.c:
+       Avoid duplicate mx_close_mailbox() when OP_QUIT is called.
+
+       * browser.c:
+       The attached patch fixes a potential problem in folder_format_str()
+       where a fixed buffer might not be null terminated.  From Vikas.
+
+       * init.c:
+       The attached patch fixes a bug in :set variable=<TAB> where variables
+       of type DT_SORT were not getting expanded (only 4 of them, but a bug
+       nevertheless).  From Vikas.
+
+       * browser.c: patch-0.94.15.vikas.browser_sort.3
+
+       * doc/manual.sgml.in:
+       Add a forwarding chapter to the manual.  From Gero Treuner.
+
+       * po/de.po: Revert de.po to the traditional German spelling rules.
+
+       * po/de.po, pop.c: L10 fixes from Gero Treuner.
+
+       * parse.c, handler.c:
+       A message/external-body handler.  From Byrial Jensen.
+
+       * protos.h, parse.c:
+        - remove the static declaration from parse_date() in parse.c,
+        - rename it to mutt_parse_date()
+        - fix a minor bug: the timezone information in an expires-header
+          was used to set the timezone of the send time.
+
+       (From Byrial Jensen <byrial@post3.tele.dk>.)
+
+       * Muttrc.in: Fix some spelling errors noted by Boris Wesslowski
+       <Boris.Wesslowski@StudBox.Uni-Stuttgart.DE>.
+
+       * handler.c:
+       Byrial Jensen's alternative_handler patches.  This may lead to
+       non-desirable effects with attachment deletion; these effects will
+       go when the new attachment deletion code is implemented.
+
+       * parse.c:
+       SeokChan LEE <bofh@nuri.net> says KST has a nine hour offset from GMT.
+
+       * pager.c, help.c: Fix the display of DEL in the pager.
+
+       * send.c: Fix a group reply problem.
+
+Fri Oct 30 13:00:10 1998  Thomas Roessler  <roessler@guug.de>
+
+       * po/uk.po, po/ru.po, po/it.po, po/es.po, po/de.po:
+       Some recent changes.
+
+Thu Oct 29 09:46:45 1998  Thomas Roessler  <roessler@guug.de>
+
+       * mbox.c:
+       Mbox robustness patch from Johnny Tevessen <j.tevessen@gmx.net>.
+
+       * po/de.po: Fixing a typo.
+
+       * imap.c:
+       This patch should cause mutt to ask for your IMAP login/password
+       again if its wrong.  From Brandon Long.
+
+Wed Oct 28 21:48:36 1998  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml.in, reldate.h, VERSION, NEWS, ChangeLog:
+       0.94.15 release commit.
+
+       * po/uk.po, po/ru.po, po/it.po, po/es.po, po/de.po:
+       pre-release commit, take 1.
+
+       * curs_lib.c:
+       Add an IsPrint check to mutt_message() and mutt_curses_error(). This
+       will prevent _some_ advert effects from l10ns which don't fit
+       together with the terminal's abilities.  There are still quite a few
+       raw printw() etc. - we may wish to introduce our own, locale-safe
+       versions of these.
+
+       * po/POTFILES.in: reldate contais really _no_ i18n-related data.
+
+       * send.c:
+       Don't try to recall a postponed message when we are given a template.
+
+       * copy.c:
+       Fix a possible segmentation fault when deleting nested attachments.
+
+Wed Oct 28 21:43:27 1998  Thomas Roessler  <roessler@guug.de>
+
+       * curs_lib.c:
+       Add an IsPrint check to mutt_message() and mutt_curses_error(). This
+       will prevent _some_ advert effects from l10ns which don't fit
+       together with the terminal's abilities.  There are still quite a few
+       raw printw() etc. - we may wish to introduce our own, locale-safe
+       versions of these.
+
+       * po/POTFILES.in: reldate contais really _no_ i18n-related data.
+
+       * send.c:
+       Don't try to recall a postponed message when we are given a template.
+
+       * copy.c:
+       Fix a possible segmentation fault when deleting nested attachments.
+
+       * doc/manual.sgml.in, send.c, mutt.h, init.h:
+       Add a $forward_weed option which controls header weeding when
+       decode-forwarding messages.
+
+       * po/ru.po, po/it.po, po/es.po, po/de.po:
+       German translation fixes from Gero plus checkpoint commit.
+
+       * doc/manual.sgml.in, pager.h, pager.c, mutt_menu.h, keymap.c, help.c, curs_main.c, commands.c, attach.c, OPS:
+       Gero Treuner's help-wrap patch.
+
+       * po/ru.po, po/it.po, po/es.po, po/de.po:
+       Adding a current spanish translation.
+
+       * send.c:
+       if reply-to points to the address on the from header, use the from
+       header's value for composing a reply's recipient list, not the
+       reply-to header.
+
+       * configure.in: add the ukrainian l10n.
+
+Tue Oct 27 19:02:45 1998  Thomas Roessler  <roessler@guug.de>
+
+       * Attic/configure:
+       Configure is generated automatically and should thus _not_ be part
+       of the CVS repository.
+
+       * configure.in, Attic/configure, README, INSTALL:
+       Try to detect Solaris 2.4's broken regcomp().
+
+       * send.c: Move some code around.
+
+       * doc/manual.sgml.in: Some documentation nits.
+
+       * dotlock.c:
+       include config.h _before_ checking for HAVE_GETOPT.  Noted by Scott
+       Perlman <perlman@linguist.dartmouth.edu>.
+
+       * Muttrc.in: Add a macro for viewing the manual.
+
+       * pgp.c, configure.in, Attic/configure: i18n fixes.
+
+       * po/ru.po, po/es.po, po/it.po, po/de.po:
+       A couple of i18n fixes, plus a partial spanish translation from
+       Boris Wesslowski <Boris.Wesslowski@StudBox.Uni-Stuttgart.DE>.
+
+       * configure.in, Attic/configure:
+       Handle systems which have neither pgp2 nor pgp5, but gpg correctly.
+
+       * compose.c: - snd_entry() is marked static
+       - You will only get a full redraw of the screen after invoking
+         pgp_send_menu if you selected "sign as".
+       - draw_envelope() and edit_address_list() use the same array of
+         strings for titles/prompts. This saves both string data and code
+         in both functions which have been a lot smaller.
+
+       * sendlib.c, send.c, protos.h, postpone.c, compose.c:
+       Preserve FCC headers when postponing.  From Vikas.
+
+       * mx.c, mutt.h, imap.c:
+       Prevent mutt from re-reading IMAP folders before quitting.
+
+Thu Oct 22 13:53:47 1998  Thomas Roessler  <roessler@guug.de>
+
+       * send.c: Undo some superfluous changes.  Pointed out by V.A.
+
+       * send.c, protos.h, postpone.c:
+       - Preserve certain headers' values when recallling a postponed
+         message.  TBD:  Fcc.
+
+       - Rename mutt_edit_message() to mutt_prepare_edit_message() since
+         that's what that function actually does.
+
+       * mx.h, mx.c, lib.c, flags.c:
+       Make _all_ IMAP-related code conditionally defined.  From Byrial
+       Jensen.
+
+Wed Oct 21 22:46:16 1998  Thomas Roessler  <roessler@guug.de>
+
+       * protos.h, pattern.c, hdrline.c:
+       Fix match-all for the ~p, ~P modifiers.
+
+       * compose.c: Vikas' write_fcc patch.
+
+       * doc/manual.sgml.in: Documentation nits from Byrial.
+
+       * curs_lib.c:
+       Also accept numbers as input in mutt_multi_choice().  From Byrial.
+
+       * prepare: Fix the documentation reference in prepare.
+
+       * doc/devel-notes.txt:
+       Add a gettext automake macro patch which is needed for proper
+       building of mutt.
+
+       * prepare, Attic/config.h.in, Attic/aclocal.m4, README, INSTALL:
+       Remove some automatically generated files from the CVS repository,
+       and add a script which generates them.
+
+       * Makefile.am: Don't overwrite $(sysconfdir)/Muttrc if present.
+
+       * po/ru.po, po/it.po, po/de.po, protos.h, curs_lib.c, compose.c, commands.c, browser.c:
+       Byrial Jensen's mutt_multi_choice() patch plus some German
+       translations.
+
+       * pgpinvoke.c, gnupgparse.c:
+       Make gpg's output look a little bit cleaner.
+
+       * po/ru.po, po/it.po, po/de.po, reldate.h: Release commit.
+
+       * VERSION, ChangeLog: Preparing 0.94.14.
+
+Tue Oct 20 22:02:58 1998  Thomas Roessler  <roessler@guug.de>
+
+       * po/ru.po, po/it.po, po/de.po: Checkpoint commit.
+
+       * Attic/config.h.in, Makefile.am:
+       Include VERSION with the distribution.
+
+       * configure.in, Attic/configure, Attic/config.h.in, VERSION:
+       Don't hard-wire the program's version in configure.in, but use the
+       VERSION file instead.  Stolen from gnupg.
+
+       * ChangeLog: Checkpoint commit.
+
+       * doc/manual.sgml.in, keymap.c, functions.h, NEWS:
+       Another macro-function fix from Vikas.
+
+Tue Oct 20 22:02:58 1998  Thomas Roessler  <roessler@guug.de>
+
+       * po/ru.po, po/it.po, po/de.po: Checkpoint commit.
+
+       * config.h.in, Makefile.am: Include VERSION with the distribution.
+
+       * configure.in, configure, VERSION, config.h.in:
+       Don't hard-wire the program's version in configure.in, but use the
+       VERSION file instead.  Stolen from gnupg.
+
+       * ChangeLog: Checkpoint commit.
+
+       * socket.c, mutt_socket.h: Fix the multiple connection code.
+       From Brandon Long.
+
+Mon Oct 19 20:08:10 1998  Thomas Roessler  <roessler@guug.de>
+
+       * postpone.c: fix a typo.
+
+       * Makefile.am: Fix dotlock's installation when DOTLOCK_GROUP is empty.
+
+       * po/it.po: Ups, this was missing from the repository.
+
+       * po/ru.po, po/de.po: Adding some new and improved German
+       translations.
+
+       * init.c: handle domain == "@" properly.
+
+       * postpone.c: Fix the behaviour when recalling postponed
+       messages: Content types would not be restored.
+
+Fri Oct 16 12:09:37 1998  Thomas Roessler  <roessler@guug.de>
+
+       * lib.c: Harden mutt_free_header() against NULL pointers.
+
+       * keymap.c, handler.c: Nits from Vikas.
+
+       * send.c: Fix a segmentation fault when OPT_RECALL is ask-something.
+
+       * commands.c: Don't write out bad content-length and lines headers when
+       decode-saving a message.
+
+Thu Oct 15 23:09:30 1998  Thomas Roessler  <roessler@guug.de>
+
+       * rx/rxunfa.c, rx/rxsuper.c, rx/rxstr.c, rx/rxspencer.c, rx/rxsimp.c, rx/rxposix.c, rx/rxnode.c, rx/rxnfa.c, rx/rxhash.c, rx/rxgnucomp.c, rx/rxcset.c, rx/rxbitset.c, rx/rxbasic.c, rx/rxanal.c, rx/rx.c, rx/hashrexp.c, intl/textdomain.c, intl/localealias.c, intl/loadmsgcat.c, intl/l10nflist.c, intl/intl-compat.c, intl/gettext.c, intl/finddomain.c, intl/explodename.c, intl/dgettext.c, intl/dcgettext.c, intl/cat-compat.c, intl/bindtextdom.c, charsets/parse_i18n.c, thread.c, system.c, strcasecmp.c, status.c, sort.c, socket.c, snprintf.c, signal.c, sha1dgst.c, sendlib.c, send.c, score.c, rfc822.c, rfc2047.c, rfc1524.c, resize.c, recvattach.c, query.c, postpone.c, pop.c, pgppubring.c, pgpkey.c, pgpinvoke.c, pgp.c, pattern.c, parse.c, pager.c, mx.c, mh.c, menu.c, mbox.c, main.c, lib.c, keymap.c, init.c, imap.c, hook.c, history.c, help.c, headers.c, hdrline.c, hash.c, handler.c, gnupgparse.c, getdomain.c, from.c, flags.c, filter.c, enter.c, edit.c, dotlock.c, date.c, curs_main.c, curs_lib.c, copy.c, config.h.in, compose.c, complete.c, commands.c, color.c, charset.c, buffy.c, browser.c, attach.c, alias.c, addrbook.c, ChangeLog:
+       Change "static char rcsid[]" to "static const char rcsid[]" to make
+       gcc shut up about this.
+
+       * rx/Makefile.in, po/Attic/stamp-cat-id, po/ru.po, po/Attic/mutt.pot, po/de.po, po/Attic/cat-id-tbl.c, reldate.h, configure.in, configure, config.h.in, Attic/Makefile.in, ChangeLog:
+       Random pre-release clean-up.
+
+       * po/Attic/mutt.pot, doc/manual.sgml.in, pattern.c, mutt.h:
+       This patch introduces the ~k pattern for messages containing
+       pgp key material.
+
+Thu Oct 15 20:15:46 1998  Thomas Roessler  <roessler@guug.de>
+
+       * rx/Makefile.in, po/Attic/stamp-cat-id, po/ru.po,
+       po/Attic/mutt.pot, po/de.po, po/Attic/cat-id-tbl.c,
+       reldate.h, configure.in, configure, config.h.in,
+       Attic/Makefile.in, ChangeLog: Random pre-release clean-up.
+
+       * po/mutt.pot, doc/manual.sgml.in, pattern.c, mutt.h:
+       This patch introduces the ~k pattern for messages containing pgp key
+       material.
+
+       * doc/manual.sgml.in: Add some missing key definitions.
+
+       * mutt_curses.h:
+       There seem to be systems which don't know about KEY_ENTER.
+
+       * po/mutt.pot, po/cat-id-tbl.c: Check-point commit, again.
+
+       * sendlib.c:
+       Put #ifdefs around a variable which is only used for generating
+       uuencoded messages.
+
+       * ChangeLog: Update.
+
+       * po/ru.po, po/mutt.pot, po/cat-id-tbl.c, sendlib.c,
+       compose.c: Don't ever permit the user to generate uuencoded
+       messages with mutt.
+
+       * keymap.c: A slightly modified version of Vikas'
+       help_unbound patch.
+
+       * po/mutt.pot, sendlib.c, protos.h, postpone.c, parse.h,
+       parse.c, mh.c, mbox.c, main.c, imap.c, headers.c, buffy.c:
+       Fixing a memory hog which was introduced by the edit-message
+       patch.
+
+Wed Oct 14 22:58:04 1998  Thomas Roessler  <roessler@guug.de>
+
+       * po/ru.po, po/mutt.pot, po/de.po, po/cat-id-tbl.c, compose.c:
+       Warn the user before sending out uuencoded attachments.
+
+       * handler.c: Fix prefix and utf8 issues in the uudecoder.
+
+       * sendlib.c, parse.c, mime.h, handler.c, globals.h, config.h.in:
+       Thinking about this once again, ok folks, here comes x-uuencode
+       support.
+
+       * handler.c: typo.
+
+       * handler.c:
+       When Charset is utf-8 (not recommended!), don't active utf8
+       translation in the various handler routines.
+
+       * Makefile.in, Makefile.am:
+       Add -I$(includedir) to the C preprocessor flags.  Per request of
+       Clint Olsen.
+
+       * po/ru.po, po/de.po, charsets/parse_i18n.c, charsets/Makefile.in, configure.in, configure, config.h.in, Makefile.in, Makefile.am:
+       More build process clean-up.
+
+       * po/mutt.pot, po/Makefile.in.in, charsets/Makefile.in, config.h.in, Makefile.in:
+       Removing some instances of gnu-make specific command line parameters.
+
+       * doc/manual.sgml.in: Document the match-all feature.
+
+       * po/mutt.pot, main.c, dotlock.c, configure.in, configure, config.h.in, Makefile.in, Makefile.am:
+       Various build fixes.
+
+       * color.c: Adding some necessary ifdefs to color.c, From
+       Irving_Wolfe@wolfe.net.
+
+Tue Oct 13 23:37:05 1998  Thomas Roessler  <roessler@guug.de>
+
+       * po/ru.po, po/de.po: Checkpoint commit.  This gets boring.
+
+       * NEWS: Merging Vikas' NEWS file into the distributed one.
+
+       * po/mutt.pot, config.h.in, Makefile.in, ChangeLog: Preparing 0.94.12.
+
+       * po/ru.po, po/mutt.pot, po/de.po, po/cat-id-tbl.c,
+       reldate.h, recvattach.c, configure.in, configure,
+       config.h.in, commands.c, README, NEWS, Makefile.in,
+       Makefile.am, INSTALL: random pre-release clean-up.
+
+       * po/ru.po, po/mutt.pot, po/de.po, po/cat-id-tbl.c,
+       po/POTFILES.in, reap.pl, gen_defs, configure.in, configure,
+       config.h.in, NEWS, Makefile.in, Makefile.am: Introducing a
+       us-dist target to create a USG-friendly version of mutt.
+       Additionally, the NEWS file is prepared for 0.95.
+
+       * doc/devel-notes.txt: Add a short note on compiler warnings.
+
+       * po/ru.po, po/de.po, po/POTFILES.in, po/Makefile.in.in,
+       charsets/gen_charsets, charsets/Makefile.in, missing,
+       mime.types: More $Id: ChangeLog.old,v 3.1 2002/12/07 14:14:59 roessler Exp $ strings.
+
+       * Add RCS $Id: ChangeLog.old,v 3.1 2002/12/07 14:14:59 roessler Exp $ strings to (hopefully) all source files.
+
+       * enter.c: Type Ctrl-V Ctrl-G in any input field.
+
+       * curs_main.c:
+       Bumping some dprint statements' debug levels.  From Vikas.
+
+       * po/ru.po, po/mutt.pot, po/de.po:
+       Including the new ru.po file from "Andrej N. Gritsenko"
+       <andrej@lucky.net>; check-point commit.
+
+Mon Oct 12 19:53:49 1998  Thomas Roessler  <roessler@guug.de>
+
+       * recvattach.c, query.c, postpone.c, pgpkey.c, curs_main.c,
+       compose.c, browser.c, addrbook.c: The attached patch removes
+       some redundant code related to the macro function stuff.
+       Since each menu calls km_dokey() to get the 'op' number to
+       execute, the 'menu' argument to km_dokey() _is_ the
+       CurrentMenu. Hence, there is no need to explicitly
+       save/restore the CurrentMenu all over the code. The only
+       places it is being captured now is just before
+       mutt_enter_comamnd() is called. This is to help the 'exec'
+       command completion code so that it knows which menu to try
+       and complete the function name from. (From: Vikas Agnihotri
+       <VikasA@att.com>)
+
+       * doc/manual.sgml.in, doc/Attic/manual.sgml,
+       doc/Makefile.in, sendlib.c, main.c, init.c, configure.in,
+       configure, config.h.in, acconfig.h, Makefile.in,
+       Makefile.am: Mutt now correctly uses the sysconfdir as
+       determined by configure.
+
+       * po/ru.po, po/mutt.pot, po/de.po: Checkpoint commit.
+
+       * po/ru.po, po/mutt.pot, po/de.po, reldate.h, configure.in,
+       configure, ChangeLog: Check-point commit before 0.94.11 is
+       released.
+
+Sun Oct 11 22:11:00 1998  Thomas Roessler  <roessler@guug.de>
+
+       * doc/Makefile.in, contrib/Makefile.in:
+       Makefile clean-up as suggested by Marco d'Itri.
+
+       * doc/dotlock.man.in, doc/Makefile.in:
+       Install dotlock's manual page under the correct name.
+
+Sun Oct 11 22:11:00 1998  Thomas Roessler  <roessler@guug.de>
+
+       * doc/Makefile.in, contrib/Makefile.in:
+       Makefile clean-up as suggested by Marco d'Itri.
+
+       * doc/dotlock.man.in, doc/Makefile.in:
+       Install dotlock's manual page under the correct name.
+
+Thu Oct  8 13:22:16 1998  Thomas Roessler  <roessler@guug.de>
+
+       * README: Reference some of the new doc files.
+
+       * doc/Makefile.in: Some more changes to the installation process.
+
+       * doc/Makefile.in:
+       Fix the uninstall target; add some magic to build and install the
+       HTML version of the manual if we can.
+
+       * doc/applying-patches.txt, doc/devel-notes.txt,
+       doc/PGP-Notes.txt, doc/Makefile.in: Some more documentation;
+       install the html version of the manual if it's there.
+
+       * doc/manual.sgml:
+       The manual was wrong on the default binding for extract-keys.
+
+Wed Oct  7 22:19:27 1998  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml, pop.c, mutt.h, init.h, Muttrc.in:
+       POP3 LAST support.  From Jason Lavoie <jason@mint.net> by way of
+       Michael Elkins.
+
+       * po/mutt.pot, po/cat-id-tbl.c: Clean-up commit.
+
+       * gnupgparse.c:
+       Redirect stdin and stderr to /dev/null when invoking gpgm for
+       listing key IDs.
+
+       * socket.c, mutt_socket.h, imap.c:
+       First fix of the IMAP expunge handling.  From Brandon Long.
+
+       * keymap.c, curs_lib.c: Fix macro functions for the pager menu.
+
+       * keymap.c:
+       The attached patch fixes a minor inconsistency between the display
+       of special key-names in the help screen and their actual usage. The
+       help screen now shows the special keys exactly as you
+       would/could/should use them in the muttrc/command-line. (From: Vikas
+       Agnihotri <VikasA@att.com>)
+
+       * keymap.c: Fix the error message for unbound keys.  From Vikas.
+
+       * charsets/Makefile.in: s/make/$(MAKE)/
+
+       * charsets/Makefile.in:
+       UnixWare needs our own version of strcasecmp/strncasecmp.
+
+       * browser.c:
+       Clean up behind an aborted sort-by prompt on the file browser.  From
+       Vikas.
+
+       * hdrline.c:
+       The attached patch fixes a minor bug in $index_format's %B and %b
+       where they didnt respect the given prefix. In addition, the manual
+       says that %B is supposed to fall back to %b if the message is not
+       sent to a known mailing list. The code was not doing that.  (From:
+       Vikas Agnihotri <VikasA@att.com>, noted on comp.mail.mutt by
+       unny@rz114s0.rz.uni-karlsruhe.de (Vladimir Klebanov)).
+
+       * doc/PGP-Notes.txt:
+       pgp_language is obsolete.  Noted by Heiko Schlichting.
+
+Tue Oct  6 15:10:53 1998  Thomas Roessler  <roessler@guug.de>
+
+       * keymap.c: Macro function fixes.
+
+       * curs_lib.c: With slang, ERR != -1.
+
+       * po/mutt.pot, po/de.po: Message fix.
+
+       * attach.c: Fix another pipe-related hang in mutt_view_attachment().
+
+Mon Oct  5 21:37:15 1998  Thomas Roessler  <roessler@guug.de>
+
+       * configure, aclocal.m4: Another fix to libintl detection.
+
+       * keymap.c, curs_lib.c: macro_function.2-3, from Vikas.
+
+       * handler.c: File descriptor leak alert.
+
+       * handler.c:
+       Avoid a hang due to blocking pipe writes in the auto view code.
+
+       * keymap.c, curs_main.c, curs_lib.c:
+       Make exec grok >= 1 parameters; fix double ops problem in
+       index_menu().
+
+       * po/ru.po, po/mutt.pot, po/de.po, po/cat-id-tbl.c:
+       L10n changes corresponding to the macro-function patch.
+
+       * flags.c, compose.c: Some fixes to the macro-function patch.
+
+       * po/ru.po: Adding the Russian Localization.
+
+       * recvattach.c, query.c, protos.h, postpone.c, pgpkey.c, pager.c, mutt_curses.h, mutt.h, menu.c, keymap.c, init.h, init.c, globals.h, flags.c, enter.c, curs_main.c, curs_lib.c, configure.in, configure, compose.c, commands.c, browser.c, addrbook.c, aclocal.m4:
+       Vikas' macro_function patch.
+
+       * charsets/gen_charsets:
+       I'm told that some systems don't like "#!/bin/sh" at the beginning
+       of a script, but need "#! /bin/sh".
+
+Sun Oct  4 15:02:32 1998  Thomas Roessler  <roessler@guug.de>
+
+       * charsets/gen_charsets, configure.in, configure:
+       Fixing some make-related problems noted by Petri Kaukasoina
+       <kaukasoi-mutt@elektroni.ee.tut.fi>.
+
+       * po/mutt.pot, send.c: Fix group-reply's behaviour.
+
+       * doc/Attic/style-guide, doc/devel-notes.txt:
+       Replace style-guide by some more general notes on mutt development.
+
+       * Makefile.in: Propagate fixes from Makefile.am.
+
+       * ChangeLog: Preparing 0.94.10.
+
+       * rx/Makefile.in: subdir=rx was missing here.
+
+       * po/mutt.pot, po/de.po: Noise.
+
+       * configure.in, configure, Makefile.am:
+       More fixes to the build process.  This version was tested to build
+       cleanly under SuSE Linux and IRIX.
+
+Sun Oct  4 09:26:36 1998  Thomas Roessler  <roessler@guug.de>
+
+       * rx/Makefile.in: subdir=rx was missing here.
+
+       * po/mutt.pot, po/de.po: Noise.
+
+       * configure.in, configure, Makefile.am:
+       More fixes to the build process.  This version was tested to build
+       cleanly under SuSE Linux and IRIX.
+
+Sat Oct  3 22:08:09 1998  Thomas Roessler  <roessler@guug.de>
+
+       * doc/Attic/manual.txt:
+       manual.txt can be rebuilt when making the dist - no need to keep
+       this in the repository.
+
+       * ChangeLog: Preparing ChangeLog for 0.94.10.
+
+       * contrib/Makefile.in: Ups.
+
+       * rx/Makefile.in, po/mutt.pot, po/de.po, po/cat-id-tbl.c, po/Makefile.in.in, doc/Attic/language50.txt, doc/Attic/language.txt, contrib/patch.slang-1.2.2.keypad.1, contrib/sample.mailcap, contrib/sample.muttrc, doc/Makefile.in, contrib/Mush.rc, contrib/Pine.rc, contrib/language.txt, contrib/language50.txt, charsets/gen_charsets, charsets/Makefile.in, Attic/sample.muttrc, Attic/sample.mailcap, Attic/reap.pl, pop.c, Attic/patch.slang-1.2.2.keypad.1, Attic/depend.awk, configure.in, configure, Attic/Pine.rc, Attic/Mush.rc, Makefile.in, Makefile.am, ChangeLog:
+       Source tree and make process changes.  make dist and make
+       maintainer-clean should now work as they are supposed to.
+
+Sat Oct  3 22:06:19 1998  Thomas Roessler  <roessler@guug.de>
+
+       * contrib/Makefile.in: Ups.  This one was missing from the
+       last commit.
+
+       * rx/Makefile.in, po/mutt.pot, po/de.po, po/cat-id-tbl.c,
+       po/Makefile.in.in, doc/Attic/language50.txt,
+       doc/Attic/language.txt, contrib/patch.slang-1.2.2.keypad.1,
+       contrib/sample.mailcap, contrib/sample.muttrc,
+       doc/Makefile.in, contrib/Mush.rc, contrib/Pine.rc,
+       contrib/language.txt, contrib/language50.txt,
+       charsets/gen_charsets, charsets/Makefile.in,
+       Attic/sample.muttrc, Attic/sample.mailcap, Attic/reap.pl,
+       pop.c, Attic/patch.slang-1.2.2.keypad.1, Attic/depend.awk,
+       configure.in, configure, Attic/Pine.rc, Attic/Mush.rc,
+       Makefile.in, Makefile.am, ChangeLog: Source tree and make
+       process changes.  make dist and make maintainer-clean should
+       now work as they are supposed to.
+
+       * help.c: Remove an unprotected gettext() call.
+
+       * missing: *** empty log message ***
+
+       * missing: Persuade CVS to get the file modes right.
+
+       * INSTALL:
+       Adding a note on SparcLinux problems when gcc is called with the
+       -pedantic flag.
+
+Fri Oct  2 17:39:47 1998  Thomas Roessler  <roessler@guug.de>
+
+       * po/mutt.pot, po/de.po:
+       A small fix to get autoview messages properly colored.
+
+       * pattern.c, mutt.h, Makefile.in: patch-0.92.8.sec.match_all.1
+
+       * rx/Attic/Makefile:
+       The Makefile here is supposed to be generated by autoconf.
+
+       * rx/Makefile.in, rx/Attic/Makefile, po/mutt.pot, configure.in, configure, Makefile.in, Makefile.am:
+       Fixing some build-related problems, and preparing 0.94.9p1.
+
+       * doc/manual.txt, doc/manual.sgml, hdrline.c:
+       Roland Rosenfeld's first name patch.
+
+       * mutt.h, compose.c: More () fixes.
+
+       * mutt.h, edit.c, curs_lib.c, browser.c:
+       With SLang, addstr() is a macro.  This means we should put
+       additional braces around _()-style arguments.
+
+Thu Oct  1 20:16:56 1998  Thomas Roessler  <roessler@guug.de>
+
+       * po/mutt.pot, po/de.po, po/cat-id-tbl.c, po/POTFILES.in, doc/Makefile.in:
+       Translate help strings.
+
+       * charsets/Makefile.in, postpone.c, pager.c, help.c, compose.c, Makefile.in:
+       Translate help strigns.
+
+       * intl/VERSION, intl/Attic/libintl.h, intl/Attic/libintl.glibc, intl/Attic/intlh.inst.in, intl/Attic/COPYING, intl/Attic/BUGS, intl/Attic/AUTHORS:
+       *** empty log message ***
+
+       * po/mutt.pot, po/de.po, po/cat-id-tbl.c, po/POTFILES.in, recvattach.c, query.c, pager.c, curs_main.c, compose.c, browser.c, addrbook.c:
+       Translate the various help lines.
+
+       * mutt.h, lib.c, handler.c: Gero Treuner's reply_quote patch.
+
+       * po/mutt.pot, po/de.po, po/cat-id-tbl.c, po/POTFILES.in:
+       Add l10n for handler.c.
+
+       * po/mutt.pot, po/de.po, po/cat-id-tbl.c, curs_lib.c:
+       Make mutt_yesorno() language sensitive.
+
+       * po/de.po: Various German-language related fixes.
+
+       * reldate.h, configure.in, configure, TODO, Makefile.in, ChangeLog:
+       Preparing 0.94.9i.
+
+       * po/de.po: German l10n, first take.
+
+       * intl/Attic/AUTHORS, intl/Attic/BUGS, intl/Attic/COPYING:
+       Adding legalese.
+
+       * po/mutt.pot, po/de.po, po/cat-id-tbl.c, main.c: More i18n fixes.
+
+       * po/mutt.pot, po/de.po, po/cat-id-tbl.c:
+       Adapting the catalog files to 0.94.8.
+
+       * charsets/Makefile.in, configure.in, configure, Makefile.in, Makefile.am:
+       Various automake and installation fixes.
+
+       * po/Makefile.in.in, po/POTFILES.in, po/cat-id-tbl.c, po/de.po, po/mutt.pot, po/stamp-cat-id, intl/Attic/intlh.inst.in, intl/Attic/libintl.glibc, intl/Attic/libintl.h, intl/ChangeLog, intl/Makefile.in, intl/bindtextdom.c, intl/cat-compat.c, intl/dcgettext.c, intl/dgettext.c, intl/explodename.c, intl/finddomain.c, intl/gettext.c, intl/gettext.h, intl/gettextP.h, intl/hash-string.h, intl/intl-compat.c, intl/l10nflist.c, intl/libgettext.h, intl/linux-msg.sed, intl/loadinfo.h, intl/loadmsgcat.c, intl/localealias.c, intl/po2tbl.sed.in, intl/textdomain.c, intl/xopen-msg.sed, doc/Makefile.in, thread.c, stamp-h.in, status.c, sort.c, signal.c, sendlib.c, send.c, score.c, rfc1524.c, recvattach.c, query.c, postpone.c, pop.c, pgppubring.c, pgpkey.c, pgp.c, pattern.c, parse.c, pager.c, mx.c, missing, mutt.h, mh.c, menu.c, mbox.c, main.c, lib.c, keymap.c, init.c, imap.c, hook.c, help.c, headers.c, handler.c, gen_defs, flags.c, edit.c, date.c, curs_main.c, curs_lib.c, copy.c, configure.in, configure, config.h.in, compose.c, commands.c, color.c, buffy.c, browser.c, attach.c, alias.c, aclocal.m4, addrbook.c, acconfig.h, ABOUT-NLS, Makefile.am, Makefile.in:
+       Adding gettext support, based on the patch by Marco d'Itri.
+
+       * TODO: add a note about the currently-missing mh_sequences support.
+
+Thu Oct  1 11:22:51 1998  Thomas Roessler  <roessler@guug.de>
+
+       * po/de.po: German l10n, first take.
+
+       * intl/AUTHORS, intl/BUGS, intl/COPYING: Adding legalese.
+
+       * po/mutt.pot, po/de.po, po/cat-id-tbl.c, main.c: More i18n fixes.
+
+       * po/mutt.pot, po/de.po, po/cat-id-tbl.c:
+       Adapting the catalog files to 0.94.8.
+
+       * charsets/Makefile.in, configure.in, configure, Makefile.in, Makefile.am:
+       Various automake and installation fixes.
+
+       * po/Makefile.in.in, po/POTFILES.in, po/cat-id-tbl.c,
+       po/de.po, po/mutt.pot, po/stamp-cat-id, intl/ChangeLog,
+       intl/Makefile.in, intl/bindtextdom.c, intl/cat-compat.c,
+       intl/dcgettext.c, intl/dgettext.c, intl/explodename.c,
+       intl/finddomain.c, intl/gettext.c, intl/gettext.h,
+       intl/gettextP.h, intl/hash-string.h, intl/intl-compat.c,
+       intl/intlh.inst.in, intl/l10nflist.c, intl/libgettext.h,
+       intl/libintl.glibc, intl/libintl.h, intl/linux-msg.sed,
+       intl/loadinfo.h, intl/loadmsgcat.c, intl/localealias.c,
+       intl/po2tbl.sed.in, intl/textdomain.c, intl/xopen-msg.sed,
+       doc/Makefile.in, thread.c, stamp-h.in, status.c, sort.c,
+       signal.c, sendlib.c, send.c, score.c, rfc1524.c,
+       recvattach.c, query.c, postpone.c, pop.c, pgppubring.c,
+       pgpkey.c, pgp.c, pattern.c, parse.c, pager.c, mx.c, missing,
+       mutt.h, mh.c, menu.c, mbox.c, main.c, lib.c, keymap.c,
+       init.c, imap.c, hook.c, help.c, headers.c, handler.c,
+       gen_defs, flags.c, edit.c, date.c, curs_main.c, curs_lib.c,
+       copy.c, configure.in, configure, config.h.in, compose.c,
+       commands.c, color.c, buffy.c, browser.c, attach.c, alias.c,
+       aclocal.m4, addrbook.c, acconfig.h, ABOUT-NLS, Makefile.am,
+       Makefile.in: Adding gettext support, based on the patch by
+       Marco d'Itri.
+
+       * TODO: add a note about the currently-missing mh_sequences support.
+
+       * send.c:
+       Fix the PgpSignMicalg vanishing when recalling postponed messages.
+       Bug squashed by Bjørn Fischer.
+
+Wed Sep 30 13:56:24 1998  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.txt, doc/manual.sgml: SGML fix.
+
+       * postpone.c, headers.c:
+       Don't generate a NULL micalg parameter when getting postponed
+       messages.
+
+       * functions.h:
+       Removing some superfluous key bindings from functions.h.  (From:
+       Gero Treuner <gero@faveve.uni-stuttgart.de>)
+
+       * doc/manual.sgml, init.c:
+       Add some more support for version-dependant configuration files.
+
+       * copy.c:
+       When forwarding a mail (nomime_forw) and you have forw_quote set,
+       mutt inserts a blank line between header and body of the forwarded
+       message.
+
+       * compose.c:
+       Tell the user how to attach messages when using the attach-message
+       feature.
+
+       * doc/manual.sgml, pattern.c, mutt.h:
+       Add ~g and ~G patterns for PGP signed and encrypted messages.
+
+       * doc/manual.sgml: Documentation for Vikas' latest features.
+
+Tue Sep 29 15:40:01 1998  Thomas Roessler  <roessler@guug.de>
+
+       * status.c:
+       _Really_ fix an unset or too short StChars varialbe.  (From Vikas.)
+
+       * rfc822.c: Fix a segmentation fault occuring with certain badly-formed
+       RFC822-like addresses.
+
+       * hdrline.c: Make status characters work again.
+
+       * doc/manual.txt, doc/manual.sgml: Documenting some more variables.
+
+       * Muttrc.in: Add newly added variables to the default system muttrc.
+
+       * status.c: Catch short StChars values.
+
+       * mutt.h, init.c, hdrline.c: Add caching for a message's flags.
+
+       * charsets/parse_i18n.c, charsets/gen_charsets, charsets/Makefile.in, Makefile.in:
+       patch-0.94.7i.rr.charsets_fix.1, from Roland Rosenfeld.
+
+       * doc/manual.txt, doc/manual.sgml, configure.in, configure:
+       Some nits from Gero Treuner.
+
+Mon Sep 28 17:40:47 1998  Thomas Roessler  <roessler@guug.de>
+
+       * pager.c, curs_main.c: Vikas' pipe-redraw fix.
+
+       * doc/manual.txt, doc/manual.sgml, doc/Makefile.in, GPL, main.c, COPYRIGHT, Attic/COPYING:
+       A first take at bringing copyright notices and credits into synch
+       with reality.
+
+       * reldate.h, configure.in, configure, TODO, Makefile.in, ChangeLog:
+       Preparing 0.94.8i.
+
+Sat Sep 26 10:13:39 1998  Thomas Roessler  <roessler@guug.de>
+
+       * mh.c: Changing the index_hint handling for mh folders once again.
+
+       * mh.c:
+       Resort the incoming folder from mh_sync_mailbox() also when new mail
+       arrived.
+
+Sat Sep 26 10:13:39 1998  Thomas Roessler  <roessler@guug.de>
+
+       * mh.c: Changing the index_hint handling for mh folders once again.
+
+       * mh.c:
+       Resort the incoming folder from mh_sync_mailbox() also when new mail
+       arrived.
+
+Fri Sep 25 06:56:35 1998  Thomas Roessler  <roessler@guug.de>
+
+       * pager.c: patch.mutt-0.94.5i.ld.quote_levels.3-4
+
+Thu Sep 24 23:19:50 1998  Thomas Roessler  <roessler@guug.de>
+
+       * pager.c: A new quote_levels patch from liviu.
+
+       * sendlib.c:
+       Rewrite the base64-encoder used for messages.  This should be
+       unified with the encoder in rfc2047.c at some point.
+
+       * pager.c: Undoing Livius quote-levels patch for now.
+
+       * sendlib.c, mutt.h, charset.h, charset.c:
+       [patch-0.94.7i.gt.charset-send.1.gz] With the new charset support in
+       mutt there are better chances to say whether a mail to send consists
+       of characters of the ASCII set only (the charset should be
+       "us-ascii" then) or of other characters from the given charset (this
+       charset should be given then): ASCII characters have the unicode
+       values from 0 to 127.
+
+       * init.c: Fix a segmentation fault with mismatched backticks.
+
+       * init.c: Vikas' merged completion patch, level 3.
+
+Wed Sep 23 20:01:06 1998  Thomas Roessler  <roessler@guug.de>
+
+       * pager.c, mutt_regex.h, init.h: Liviu Daia's smiley patch.
+
+       * status.c, sendlib.c, recvattach.c, protos.h, pager.h, pager.c, mutt.h, main.c, init.h, curs_main.c, curs_lib.c, compose.c, commands.c:
+       Disable recursive invocations of the attach-message function.
+
+       * mh.c: Really fix the index hints.
+
+       * mh.c: Correct the index_hint handling in mh_check_mailbox().
+
+       * sendlib.c: RFC2047-encode the mail-followup-to header.
+
+       * TODO: Remove the maildir/mh resynch entry.
+
+       * pager.c:
+       There is a long-standing problem in Mutt, related to coloring the
+       various levels of quoting: if the attributions are missing, like
+       this:
+               >>> blah blah from A
+               >> blah blah from B
+               > blah blah from C
+
+       then the "quoted" color object is associated with ">>>", "quoted1"
+       with ">>" and "quoted2" with ">" --- which is not what most people
+       expect. The reason is Mutt doesn't count the quote characters (since
+       there is no way to distinguish between a single quote ">> " and a
+       ">" followed by a "> "), and it allocates colors as it finds new
+       types of quote prefixes. The attached patch fixes this problem still
+       without counting the quote characters.
+
+Tue Sep 22 22:54:52 1998  Thomas Roessler  <roessler@guug.de>
+
+       * mx.h, mx.c, mutt.h, mh.c, mbox.c, buffy.c:
+       A first take at corrected mh/maildir support.
+
+       * mx.c, mh.c: Some fixes and code clean-ups.
+
+       * mutt.h, mh.c, init.h: Introduce the $mh_purge option.
+
+       * sendlib.c: Produce "undisclosed-recipients:;" instead of
+       ""undisclosed-recipients:;":;" when the user gives no To-Header.
+
+       * mx.c: When generating new messages in MH folders, the initial number
+       should be "1", not "2".  Fix from Gero Treuner.
+
+       * init.c: patch-0.94.7i.vikas.jmy.misc_complete.2
+
+Mon Sep 21 12:49:50 1998  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c: Avoid a dangling pointer in mutt_message_to_7bit().
+
+Sun Sep 20 12:05:39 1998  Thomas Roessler  <roessler@guug.de>
+
+       * pager.c: Byrial Jensen's bold-underline patch.
+
+       * charsets/parse_i18n.c: parse_i18n.c doesn't really need snprintf.
+
+Fri Sep 18 05:45:56 1998  Thomas Roessler  <roessler@guug.de>
+
+       * reldate.h, configure.in, configure, ChangeLog: Preparing 0.94.7i.
+
+       * protos.h, init.c, enter.c:
+       Applying the third generation of command completion patches.
+
+Fri Sep 18 05:40:24 1998  Thomas Roessler  <roessler@guug.de>
+
+       * protos.h, init.c, enter.c:
+       Applying the third generation of command completion patches.
+
+Wed Sep 16 20:08:25 1998  Thomas Roessler  <roessler@guug.de>
+
+       * curs_lib.c:
+       Attached is a minor fix to mutt_getch in curs_lib.c - as of 0.93.2i,
+       if +'metakey' and 'timeout' were both set, mutt_getch was returning
+       an ESC rather than -1, which resulted in 'key not bound' messages
+       every 'timeout' seconds.  (From: Tim Walberg <walberg@cig.mot.com>)
+
+       * copy.c:
+       [patch-0.94.6i.oe.dprint2.1] Fix a segmentation fault when running
+       in -d2 mode.
+
+       * keymap.c: Use <fN> for function keys as well as for other special
+       keys.  Additionally, this patch makes it possible to use
+       all special keys inside a key _sequence_.
+
+       * sendlib.c, mutt.h, curs_main.c, compose.c:
+       Introduce the OPTUSEHEADERDATE pseudo-option to control
+       mutt_write_rfc822_header()'s behaviour for the purposes of
+       the edit_message feature.
+
+       * init.c: When parsing aliases, don't consider ';' a token
+       delimiter.
+
+Tue Sep 15 21:41:51 1998  Thomas Roessler  <roessler@guug.de>
+
+       * init.c: Undoing Vikas' complete patch and applying
+       patch-0.94.6i.jmy.cycle_complete.1 instead.
+
+       * handler.c: _Really_ fix CRLF handling.
+
+       * charset.c: Fix the crlf handling.
+
+       * pgppubring.c: UTF8-decode PGP user ID packets.
+
+       * rfc2047.c, mutt.h, lib.c, handler.c, charset.h, charset.c:
+       Adding basic UTF-8 support.
+
+       * copy.c: When using mutt_copy_header with CH_TXTPLAIN, generate a
+       content-type _with_ a character set parameter.
+
+       * Makefile.in: Correcting a typo in the clean target.
+
+       * charsets/parse_i18n.c, charsets/gen_charsets, charsets/Makefile.in, handler.c, charset.h, charset.c:
+       Add charset alias support and fix various errors in the
+       character set code.
+
+       * charset.c: Fix mutt_display_char to map '\0' to itself regardless of
+       the translation table we use.
+
+       * charsets/Makefile.in, charsets/gen_charsets, charsets/parse_i18n.c, Attic/gen-charset.c, configure.in, configure, charset.h, charset.c, Makefile.in:
+       Generate the character set tables from i18n files.
+
+       * imap.c: Finally fix imap_quote_string().
+
+       * compose.c: [patch-0.94.6i.gt.arrow.1] Add M_ARROWCURSOR on the
+       compose menu.
+
+Mon Sep 14 21:33:34 1998  Thomas Roessler  <roessler@guug.de>
+
+       * imap.c: Fix IMAP quoting.
+
+       * Muttrc.in: Speling corection for Muttrc.in.
+
+       * init.c: [patch-0.94.6.vikas.complete.1] Fix a completion-related
+       buffer overflow.
+
+Sun Sep 13 15:29:54 1998  Thomas Roessler  <roessler@guug.de>
+
+       * reldate.h, configure.in, configure, ChangeLog: Preparing 0.94.6i.
+
+       * sendlib.c, rfc2047.c, recvattach.c, hash.h, Attic/gen-charset.c, handler.c, configure.in, configure, commands.c, charset.h, charset.c, Makefile.in:
+       This patch adds on-demand loading of character set tables,
+       changes the default location of $SHAREDIR, and fixes some
+       compilation problems occuring on machines without PGP
+       installed.
+
+Sun Sep 13 15:27:03 1998  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c, rfc2047.c, recvattach.c, hash.h,
+       gen-charset.c, handler.c, configure.in, configure,
+       commands.c, charset.h, charset.c, Makefile.in:
+       This patch adds on-demand loading of character set
+       tables, changes the default location of $SHAREDIR,
+       and fixes some compilation problems occuring on
+       machines without PGP installed.
+
+Sat Sep 12 19:58:56 1998  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c: Fixing a silly typo in the edit-message code.
+
+       * rfc2047.c, charset.c, charset.h, handler.c, Makefile.in:
+       [patch-0.93.2i.ru.mmultiple_charsets.gz] This patch adds
+       support for international character sets.  Currently, mutt
+       knows about the following character sets and is able to
+       convert between them:
+
+       iso-8859-1, ..., iso-8859-9, koi8-r, windows-1251, x-cp866.
+
+       (From: Ruslan Ermilov <ru@ucb.crimea.ua>)
+
+       * recvattach.c, protos.h, pattern.c, mutt.h,
+       init.c, history.h, enter.c, commands.c: When
+       entering a 'set' command on the command-line,
+       pressing TAB after string_var= will insert the
+       current value of that variable. Note that this
+       works only for variables of type 'string'.
+
+       Also fixes the following buglets in command-completion:
+
+        1. doesnt work if you started the command-line with
+        whitespace
+
+        2. Seems to think that 'Set', 'ReSeT', etc are valid
+        commands (since it checks for 'strcasecmp' instead of
+        'strcmp' when completing the variable names Also fixes
+        the following buglets in command-completion:
+
+       (From: Vikas Agnihotri <VikasA@att.com>)
+
+       * enter.c: Use the proper history class when
+       entering mutt commands.
+
+       * imap.c: [patch-0.94.5i.jmy.imap_quote.1]
+
+       * sendlib.c, send.c, protos.h, postpone.c,
+       parse.c, mutt.h, lib.c, functions.h, curs_main.c,
+       compose.c, OPS: Adding the edit-message feature.
+
+       * hdrline.c: [patch-0.94.5.vikas.collapse_format.2] - introduce %M for
+       the number of messages which is hidden in a thread.
+
+Tue Sep  8 19:32:57 1998  Thomas Roessler  <roessler@guug.de>
+
+       * TODO: Bogus bug.  Actually, by setting use_mailcap=no, it _is_
+       possible to view the header of a single-part message with
+       a non-autoview body type.
+
+       * recvattach.c: This patch makes the view attachment menu show all
+       message/rfc822 parts as a new level, not only the
+       multipart messages. This makes it possible to display a
+       message/rfc822 part which includes only a image/jpeg part
+       or something else which cant be viewed in the pager.
+       (From: Jimmy Mäkelä <jmy@flashback.net>)
+
+       * recvattach.c, pgp.c, copy.c:
+       Change the interface of pgp_decrypt_mime() to enable this
+       function to do some sanity checks.
+
+Mon Sep  7 20:47:25 1998  Thomas Roessler  <roessler@guug.de>
+
+       * recvattach.c:
+       Don't descend into multipart/encrypted on the recvattach
+       menu.
+
+       * sendlib.c, recvattach.c, pgp.h, pgp.c, lib.c, handler.c, commands.c:
+       [patch-0.94.5i.tlr.pgp_fixes.1] This patch fixes various
+       pgp-related issues.  In particular, mutt won't segfault
+       when trying to decrypt-save messages from the index, and
+       the presence of a PGP-encrypted body part on the
+       attachment menu will no longer confuse the MIME parser.
+
+       * curs_lib.c: Clear the "Exit Mutt" prompt.
+
+       * doc/manual.txt, doc/manual.sgml: SGML typo.
+
+       * rfc822.c: Some testing.
+
+       * enter.c: Yet another fix to the alias and query completion stuff:
+       Skip leading white space when constructing the addresses.
+
+       * enter.c: Don't use <space> as an address delimiter when using
+       query-complete and alias-complete.
+
+       * rfc1524.c: Quote MIME parameters when doing %{MIME-parameter}
+       substitution.
+
+       * sendlib.c, recvattach.c, protos.h, pgp.h, pgp.c, pager.c, mutt.h, init.h, handler.c, functions.h, curs_main.c, copy.h, copy.c, commands.c, OPS.PGP:
+       Introducing decrypt-save, decrypt-copy, and
+       $forw{ard,}-decrypt.  Based on work by Emil Laurentiu.
+
+       * mbox.c: [patch-0.94.4i.matthewf.writingmessages-fix.1] Fix the
+       display when synchronizing mbox mail folders.
+
+       * query.c, protos.h, pattern.c, lib.c, curs_lib.c: Fix simple patterns.
+
+       * protos.h, mx.c, browser.c: Put the S_ISLNK definition into protos.h.
+
+       * pgp.c: Fixing convert_to_7bit().  From Liviu Daia.
+
+Sun Sep  6 11:35:34 1998  Thomas Roessler  <roessler@guug.de>
+
+       * lib.c: Fixing the quoting of shell specials in mutt_expand_fmt().
+
+       * query.c: Change snprintf to mutt_expand_fmt when expanding the
+       query command.
+
+       * protos.h, lib.c, attach.c, TODO:
+       [patch-0.94.5i.tlr.safe_symlink.1] Introduce
+       safe_symlink() for /tmp-safe symlinking in the
+       nametemplate code.
+
+       * reldate.h, configure.in, configure, TODO, ChangeLog:
+       Preparing 0.94.5i.
+
+Fri Sep  4 15:53:27 1998  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c: Catch MIME parameters with p->value == NULL.
+
+       * sendlib.c: Fixing a memory leak in mutt_prepare_envelope().
+
+Fri Sep  4 15:53:27 1998  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c: Catch MIME parameters with p->value
+       == NULL.
+
+       * sendlib.c: Fixing a memory leak in
+       mutt_prepare_envelope().
+
+Tue Sep  1 06:54:53 1998  Thomas Roessler  <roessler@guug.de>
+
+       * imap.c: IMAP fixes from Nathan Neulinger.
+       (<19980831170941.A7327@umr.edu> on mutt-dev.)
+
+Mon Aug 31 16:46:29 1998  Thomas Roessler  <roessler@guug.de>
+
+       * send.c: Fix a small problem with Liviu's
+       attach_fcc patch.
+
+       * compose.c: Updating to
+       patch-0.94.4.vikas.attach_message.3.
+
+       * thread.c, protos.h, mutt.h, init.h, hdrline.c,
+       curs_main.c: Updating to
+       patch-0.94.4.vikas.collapse.3.
+
+Sat Aug 29 08:27:02 1998  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.txt, doc/manual.sgml: Correct an
+       editor key binding example.
+
+Fri Aug 28 19:09:24 1998  Thomas Roessler  <roessler@guug.de>
+
+       * send.c, pgp.h, pgp.c: Cleaning up the fcc_attach
+       hack.  From Liviu.
+
+       * functions.h, browser.c, OPS:
+       [patch-0.94.4i.tlr.display_filename.1] Introduce a
+       new function "display-filename" which displays the
+       currently selected file's name on the message
+       line.
+
+       * attach.c: [patch-0.94.4i.tlr.get_attachment.1-2]
+       Get the attachment time stamping business right.
+
+       * protos.h, functions.h, compose.c, attach.c, OPS:
+       [patch-0.94.4i.tlr.get_attachment.1] Create a new
+       "get-attachment" function on the compose menu
+       which will copy an attachment to a temporary file.
+
+       * compose.c: [patch-0.94.4.vikas.attach_message.1]
+       Cleaning up some of the attach-message code.
+
+       * thread.c: removing superfluous include
+       statements.
+
+Thu Aug 27 23:51:58 1998  Thomas Roessler  <roessler@guug.de>
+
+       * curs_main.c: code cosmetics.
+
+       * thread.c, sort.c, protos.h, pattern.c, mx.c,
+       mutt.h, mbox.c, init.h, hdrline.c, functions.h,
+       curs_main.c, OPS: [patch-0.94.4.vikas.collapse.2]
+       Vikas' collapse-thread patch.
+
+       * recvattach.c, postpone.c, mutt.h, lib.c,
+       curs_main.c, browser.c, addrbook.c:
+       [patch-0.94.4i.gt.arrowcursor.1] Padding to the
+       end of line/right jusitifying does not work in
+       menus when $arrow_cursor is set, because the extra
+       space needed for the arrow is not taken into
+       account. (From Gero Treuner
+       <gero@faveve.uni-stuttgart.de>)
+
+       * Attic/testmsg, rfc1524.c:
+       [patch-0.94.4i.tlr.shell_quote.1-2] Fix a
+       brain-dead segmentation fault when freeing
+       non-allocated memory.
+
+       * doc/Attic/mutt.sgml: Mh. This seems to have
+       shown up again while cleaning up the CVS branches.
+
+       * sendlib.c, send.c, protos.h, pgp.h, pgp.c: Make
+       $fcc_attach work correctly when sending
+       PGP-encrypted messages.  Hack by Liviu.
+
+       * doc/manual.txt, doc/manual.sgml: Document
+       attach_format. (From: Gero Treuner
+       <gero@faveve.uni-stuttgart.de>)
+
+       * rfc1524.c, protos.h, pgpinvoke.c, mx.c, lib.c,
+       curs_lib.c: [patch-0.94.4i.tlr.shell_quote.1] Try
+       to quote file name arguments and the like for
+       shell commands.
+
+       * pgpkey.c: Minor nit: if you enter the wrong key
+       ID at Mutt's prompt, Mutt should erase the old
+       value --- otherwise people might think it has just
+       hung there. (From Liviu Daia.)
+
+Wed Aug 26 21:12:23 1998  Thomas Roessler  <roessler@guug.de>
+
+       * rfc822.c: Another possible memory leak in
+       rfc822_parse_adrlist.  The problem and the patch
+       are pretty much the same as with the last fix
+       applied to this file - it's just ',' instaed of
+       ';' this time.
+
+       * rfc822.c, TODO:
+       [patch-0.94.4i.tlr.rfc822_leak.1] Fixing a memory leak in
+       the rfc822_parse_adrlist().
+
+       Some explanations seem to be in order here.  Let's look at
+       the code:
+
+          386      else if (*s == ';')
+          387      {
+          388        if (phraselen)
+          389        {
+          390          phrase[phraselen] = 0;
+          391          add_addrspec (&top, &last, phrase, comment, &commentlen, sizeof (comment) - 1);
+          392        }
+          393        else if (commentlen && !last->personal)
+          394        {
+          395          comment[commentlen] = 0;
+          396          last->personal = safe_strdup (comment);
+          397        }
+          398  #ifdef EXACT_ADDRESS
+          399        if (last && !last->val)
+
+       Line 399 contains the change; previously, it looked like
+       this:
+
+          399'       if (last)
+
+          400          last->val = mutt_substrdup (begin, s);
+          401  #endif
+          402
+          403        /* add group terminator */
+          404        cur = rfc822_new_address ();
+          405        if (last)
+          406        {
+          407          last->next = cur;
+          408          last = cur;
+          409        }
+          410
+          411        phraselen = 0;
+          412        commentlen = 0;
+          413        s++;
+          414        begin = s;
+          415        SKIPWS (begin);
+          416      }
+
+       OK, what happens? There are essentially two situations here:
+
+       -> We have already parsed a complete address specification
+          and know about this fact, but there was no new address
+          information.  This is the case if we are parsing
+          through addresses like
+
+               undisclosed-recipients:;
+
+          or
+
+               recipients: a, b, c,;
+
+          (Note the extra ',' before the ';'!)
+
+          In this case, some of the other code in rfc822.c has
+          already filled in last->val, and we really shouldn't
+          overwrite that with a NULL pointer.
+
+       -> The ';' finishes an address spec, like in
+
+               recipients: a;
+
+          In this case, last is either set by add_addrspec(), or
+          it has already been set by some of the previous code
+          (comment handling, ...).  Anyway, last->val is still
+          NULL, so it is correct to write the complete addr spec
+          to last->val.
+
+       * imap.c: Error message cosmetics.
+
+Tue Aug 25 22:34:58 1998  Thomas Roessler  <roessler@guug.de>
+
+       * rfc1524.c, attach.c, TODO:
+       [patch-0.94.4i.tlr.nametemplate.1] Fix
+       nametemplate support: We should not move the
+       user's files around just to make them match
+       mailcap's idea of their file name. This patch uses
+       symbolic links instead.
+
+       * curs_main.c: [patch-0.94.4i.tlr.synch_fault.1]
+       Start up two mutts. Delete the last message in
+       both of them.  Synchronize the mailbox in both of
+       them. Segmentation fault.
+
+       * TODO: adding a few notes.
+
+       * commands.c: If you issue "decode-save" on an
+       encrypted message without reading it first, Mutt
+       won't prompt you for a passphrase, and it will
+       happily write an empty message, deleting the
+       original.  (From an unnamed colleague of Liviu
+       Daia.)
+
+       * imap.c: [patch-0.94.4i.tlr.imap_newline.2] Use
+       cr nl instead of single nl when uploading a
+       message to an imap server.
+
+       * sendlib.c, protos.h, postpone.c, compose.c:
+       [patch-0.94.4i.tlr.encoding.1] Fix
+       content-transfer-encoding updates when renaming
+       files from the compose menu and when recalling
+       postponed messages.
+
+       * imap.c: s/free/FREE/
+
+Mon Aug 24 19:40:35 1998  Thomas Roessler  <roessler@guug.de>
+
+       * TODO, Attic/BUGS: Compile BUGS and TODO into a
+       comprehensive issue list.
+
+       * Attic/BUGS: Clean up the bug list.
+
+       * reldate.h, configure.in, configure, ChangeLog:
+       0.94.4i.
+
+       * doc/manual.txt, doc/manual.sgml: Documenting
+       $hidden_host.
+
+       * thread.c, curs_main.c: Fix "previous-subthread"
+       in reverse-threads mode, allow next-(sub)thread
+       and previous-(sub)thread to work in limited mode.
+       (From: Liviu Daia)
+
+       * doc/manual.txt, doc/manual.sgml: Documenting $hidden_host.
+
+       * thread.c, curs_main.c: Fix "previous-subthread"
+       in reverse-threads mode, allow next-(sub)thread
+       and previous-(sub)thread to work in limited mode.
+       (From: Liviu Daia)
+
+Sun Aug 23 10:05:41 1998  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c, send.c, protos.h, mutt.h, main.c,
+       init.h, init.c, configure.in, configure,
+       config.h.in, alias.c, acconfig.h, INSTALL:
+       [patch-0.94.3i.tlr.hidden_host.1] Replace the
+       --enable-hidden-host configure switch by a
+       configuration variable $hidden_host which can be
+       changed at run-time. This variable will _not_
+       affect the generation of message-IDs since we'll
+       get into uniqueness problems if we just use the
+       domain here.
+
+       Needs to be documented.
+
+       * doc/manual.txt: Committing the latest manual
+       changes.
+
+       * Attic/socket.c, imap.c:
+       [patch-0.94.3.bl.imap_buffy.1-2] Fixing the
+       buffered read stuff.
+
+       * Attic/mutt_socket.h: Ups, this one was missing
+       from Brandon's IMAP patch.
+
+Sat Aug 22 14:24:18 1998  Thomas Roessler  <roessler@guug.de>
+
+       * help.c: [patch-0.94.3i.gt.beautify_help.1.gz]
+       General help beautification.  From Gero Treuner.
+
+       * doc/manual.sgml, keymap.h, keymap.c, help.c,
+       Muttrc.in: [patch-0.94.3i.gt.description.1]
+       Introduce macro descriptions.
+
+       * doc/manual.sgml, init.h, init.c, browser.c: Add
+       a negation operator "!" to $mask's syntax (as in
+       the *-hooks).  From Liviu.
+
+       * recvattach.c: Make Vikas' attach_split and
+       Brandon's other_type patches fit together.
+
+       * recvattach.c, mutt.h, init.h, globals.h,
+       compose.c: [patch-0.94.3.vikas.attach_split.3]
+       Re-introduce attach_split.
+
+       * Attic/socket.c: [patch-0.94.3.bl.imap_buffy.1]
+       Adding Brandon's IMAP buffy support.
+
+       * mx.c, mutt.h, mailbox.h, imap.h, imap.c,
+       curs_lib.c, configure.in, configure, buffy.c,
+       browser.c, Attic/BUGS:
+       [patch-0.94.3.bl.imap_buffy.1] Adding Brandon's
+       IMAP buffy support.
+
+Fri Aug 21 08:17:09 1998  Thomas Roessler  <roessler@guug.de>
+
+       * browser.c: Enter the file browser, type a mask
+       which doesn't match any file in the current
+       directory, clean the mask. Segfault.  Fix from
+       Liviu Daia.
+
+Thu Aug 20 22:32:46 1998  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c, recvattach.c, parse.c, mutt.h,
+       mime.h, lib.c, handler.c, globals.h, compose.c,
+       commands.c, attach.c, Attic/BUGS:
+       [patch-0.94.3.bl.other_types.1] This patch adds
+       support for the model MIME type.  Additionally,
+       along the lines of "strict in what you generate,
+       accepting in what you receive", this patch will
+       keep the name of major mime types it doesn't
+       recognize (instead of using x-unknown).
+
+       * compose.c, Attic/BUGS:
+       [patch-0.94.3i.jmy.attachmessage-fix.1] This patch
+       fixes a bug in the allocation of space for new
+       pointers to the attachments, it would make mutt
+       seg-fault when attaching 5 or more messages at the
+       same time. (From: Jimmy Mäkelä
+       <jmy@flashback.net>)
+
+       * handler.c: [SECURITY] mutt_sanitize_filename()
+       should be called when creating temporary files for
+       autoview.  (From: Liviu Daia.)
+
+       * sendlib.c, send.c, attach.c: Try this: set
+       $mime_forward, forward a PGP-encrypted message,
+       then in the "compose" menu try to view the
+       forwarded message. If you didn't enter a
+       passphrase before, Mutt won't ask for it either.
+       (From: Liviu Daia)
+
+       * sendlib.c, attach.c: When you forward a message
+       with $mime_forward set, or when you attach a
+       message with the "attach-message" command from the
+       "compose" menu, there is a memory leak.  The real
+       reason for this leak is that multipart attachments
+       are not supported in the "compose" menu, so you
+       need to go through quite a few contortions in
+       order to handle message/rfc822 attachments.
+       Consequently, the patch below is just an ugly
+       hack.  (From: Liviu Daia)
+
+Sun Aug 16 06:22:51 1998  Thomas Roessler  <roessler@guug.de>
+
+       * rfc822.c: Bringing 128-byte strings to "STRING".
+
+       * sendlib.c: Use add_option, not add_arg, for
+       strings such as "--".
+
+       * sendlib.c: Pass an "--" argument to sendmail
+       before the address arguments, so addresses with a
+       leading dash don't lead to problems. (From Liviu.)
+
+       * sendlib.c, rfc822.c, rfc1524.c, parse.c, mx.c,
+       main.c, lib.c, keymap.c, hash.c, handler.c,
+       edit.c, curs_lib.c, alias.c: Replacing a bunch of
+       free() and malloc() calls by safe_free() and
+       safe_malloc().  (From Liviu.)
+
+Sat Aug 15 18:27:45 1998  Thomas Roessler  <roessler@guug.de>
+
+       * imap.c: read() can't read buffers larger than
+       SSIZE_MAX.
+
+       * hook.c: [patch-0.94.3i.tlr.empty_hook.1] Ignore
+       empty hooks instead of segfaulting.
+
+       * protos.h, init.c, Attic/history.h:
+       [patch-0.94.3i.tlr.history.1] Adding history class
+       support.
+
+       * Attic/history.c: [patch-0.94.3i.tlr.history.1]
+       Adding history class support.
+
+       * enter.c, TODO, Makefile.in:
+       [patch-0.94.3i.tlr.history.1] Adding history class
+       support.
+
+       * sendlib.c:
+       [patch-0.94.3i.tlr.attach_msg_fmt.1-2] When
+       generating a message/rfc822 type attachment, parse
+       its header so that the attachment format routines
+       can properly display the default description.
+
+       * init.h: Change attach_format's default to limit
+       the attachment description's length.
+
+Thu Aug 13 22:09:16 1998  Thomas Roessler  <roessler@guug.de>
+
+       * pgppubring.c: Fixing another memory leak in the
+       pubring parser.
+
+       * recvattach.c, Attic/BUGS:
+       [patch-0.94.3i.tlr.attach_msg_fmt.1] When parsing
+       the "%d" format option in the attachment format,
+       use the message format as a fall-back if no
+       explicit description is provided.  This fixes the
+       following bug:
+
+         set mime_forward. Forward any mesage. The
+         compose menu will show the description as
+         "Forwarded message from ...." which is fine.
+         Pressing 'd' to edit the description brings up
+         the above string for editing.
+
+         Now hit Enter on the message/rfc822 attachment
+         to view it. Quit out of the pager.
+
+         The description field has now changed to the
+         Subject: of the forwarded message. Pressing 'd'
+         still brings up the 'Forwarded message from....'
+         string.
+
+       (Noted by Vikas.)
+
+       * doc/manual.txt, doc/manual.sgml, sendlib.c,
+       mutt.h, init.h: [patch-0.94.3i.tlr.write_bcc.1]
+       This patch adds an option $write_bcc which
+       controls whether the Bcc header is written out or
+       not.  This can be used to work around broken MTA's
+       (Exim seems to leave Bcc headers in).
+
+       The problem was noted independently by Peter
+       Radcliffe <pir@pir.net> and by Dave Holland
+       <dave@zenda.demon.co.uk> (Debian Bug #25687).
+
+       * pgppubring.c: [patch-0.94.3i.tlr.pubring_leak.1]
+       Fixing a memory leak. Bug noted by Liviu Daia.
+
+       * reldate.h: 0.94.3i.
+
+       * configure.in, configure, ChangeLog: Preparing
+       0.94.3i.
+
+       * compose.c: indentation cosmetics.
+
+       * compose.c: Update menu->data when OP_COMPOSE_EDIT_HDRS is called.
+       From Vikas.
+
+       * compose.c: Update the encoding after using ispell from the compose
+       menu.  From Vikas.
+
+       * sendlib.c, send.c, protos.h, pgppubring.c,
+       pattern.c, lib.c, curs_main.c, compose.c,
+       attach.c: Various nits from Liviu; encoding fixes.
+
+       * rfc822.c: Fixing a buffer overflow in rfc822_cat().  tmplen could
+       underflow.
+
+Wed Aug 12 11:50:59 1998  Thomas Roessler  <roessler@guug.de>
+
+       * init.c: Yet another memory leak fix from Liviu.
+
+       * rfc2047.c: Fixing a stupid buffer overflow plus some flawed logic.
+
+       * functions.h, compose.c, OPS:
+       Adding an update-encoding function to the compose menu.
+       This is useful if the user has externally modified an
+       attachment and _wants_ to adjust the encoding afterwards.
+       Also, this patch fixes some redraw-related problems in the
+       compose menu.
+
+       * sendlib.c, mutt.h, compose.c, Attic/BUGS:
+       When changing or deleting attachments, the compose menu
+       now notices this and complains or asks accordingly.
+       Partially from Vikas.
+
+Tue Aug 11 08:14:38 1998  Thomas Roessler  <roessler@guug.de>
+
+       * Attic/BUGS: Yet another outstanding bug.
+
+       * doc/manual.txt: This now contains the latest changes to manual.sgml.
+
+       * sendlib.c, rfc2047.c, rfc1524.c, pgppubring.c, pager.c, hdrline.c:
+       Fixing various nits noted by Liviu and his colleagues.
+
+Mon Aug 10 15:30:02 1998  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c: This patches makes the message-id persistant when
+       postponing messages.  (From: Janos Farkas)
+
+       * doc/manual.sgml, sample.muttrc, lib.c, init.h:
+       This patch introduces "unhdr_order" to reset the hdr_order
+       command's effect.  (From: Janos Farkas)
+
+       * color.c: Drop the free_rx parameter from muitt_free_color_line(),
+       as it's always 1.
+
+       * color.c: Adding mutt_free_color_line() and replacing varous
+       "manual" free()s of color lines by calls to this function.
+
+       * bind.c: Removing bind.c.  Pointed out by Gero Treuner
+       <gero@faveve.uni-stuttgart.de>.
+
+Sun Aug  9 18:43:45 1998  Thomas Roessler  <roessler@guug.de>
+
+       * color.c: With SLang, init_pair is (void), so we must not check its
+       return value.
+
+       * color.c: Restructuring color.c.  This patch fixes the "default"
+       problem from 0.94.2i and makes the code more
+       comprehensible than that version and more consie than
+       0.94.1i.
+
+Sat Aug  8 21:40:12 1998  Thomas Roessler  <roessler@guug.de>
+
+       * rfc2047.c: Fixing the "=?" detection in rfc2047_encode_string().  Bug
+       noted by David Jeske <jeske@home.chat.net>.
+
+       * compose.c: If you press t to add a recipient in the compose menu,
+       then press tab, q, and aborts with ctrl-g, mutt won't
+       redraw the menu.  Noted by Jimmy Mäkelä
+       <jmy@flashback.net>.
+
+       * alias.c: Entering an un-parsable address when creating an alias
+       would make mutt segfault.  Noted by brian moore
+       <bem@cmc.net>.
+
+       * browser.c: If you press tab in the file-browser to see the inboxes
+       and the current row is greater than the inbox-screens
+       max-rows then the screen gets garbled.
+       (From: Jimmy Mäkelä <jmy@flashback.net>)
+
+       * doc/manual.txt, doc/manual.sgml: I made the manual more up to date:
+
+       * new version
+       * new mailing list and home page addresses
+       * made the terminology a bit more consistent regarding
+         'pattern' and 'regular expression'
+       * added a note about expanding UNIX environments
+       * added a note about <, >, in range patterns like ~m
+       * added a note about the urlview program
+       * changed tables to not use tabs, because it doesn't work
+         right in my favourite web browsers lynx and netscape
+
+       (From: Gero Treuner <gero@faveve.uni-stuttgart.de>)
+
+       * pattern.c: This patch makes pattern ranges more logical. Before '~m
+       <5' would show message 1-5, with this patch it shows 1-4.
+       Inclusive ranges is still avaible if you use '~m -5'.
+       (From: Jimmy Mäkelä <jmy@flashback.net>)
+
+       * init.c: Various improvements to the mutt_command_complete
+       function.  From Stephen Hack <shack@rsn.hp.com>.
+
+       * browser.c: If you specify 'mailboxes ""' mutt will seg-fault. (From:
+       Jimmy Mäkelä <jmy@flashback.net>)
+
+       * color.c: Fixing a memory leak.  Thanks, Liviu.
+
+       * commands.c: When printing a message, headers are now sorted according
+       to hdr_order.  From Liviu.
+
+       * browser.c: Fixing an off-by-one buffer overflow in browser.c.  Noted
+       by Liviu.
+
+       * lib.c, attach.c: This patch adds some more "safe" characters to
+       mutt_sanitize_filename and fixes its usage in
+       mutt_view_attachment().  (From: Liviu Daia
+       <daia@stoilow.imar.ro>)
+
+       * status.c, sort.h, sendlib.c, send.c, query.c, protos.h, postpone.c, pager.h, pager.c, mutt_menu.h, menu.c, main.c, init.c, headers.c, functions.h, curs_main.c, curs_lib.c, compose.c, commands.c, browser.c, addrbook.c, OPS:
+       Adding the attach message patch.  From Vikas Agnihotri
+       <VikasA@att.com>.
+
+       * Makefile.in: There is no "compile" rule for dotlock in the Makefile.
+       (From: Dan Nelson <dnelson@emsphone.com>)
+
+       * imap.c: Thispatch to imap.c allows the user to specify a port
+       number in the folder name in the general form
+       {hostname:portnum}foldername. (From: Andy Sloane
+       <andude@guildsoftware.com>)
+
+       * imap.c: imap_close_connection() was being called even though the
+       client was using mulitple mailboxes over the same
+       connection.  (From: Brandon Long <blong@fiction.net>)
+
+
+Fri Jul 31 08:17:50 1998  Thomas Roessler  <roessler@guug.de>
+
+       * rfc1524.c: Changing an sprintf to an snprintf (which it was meant to
+       be.)
+
+       * protos.h: mutt_sanitize_filename takes char *, not const char *.
+
+       * protos.h, lib.c, attach.c:
+       Introducing mutt_sanitize_filename().  The code is similar
+       to patch-0.91.1i.tlr.rfc1524_sanitize.1 and to Peter
+       Holzer's patch against 0.91.
+
+       * rfc1524.h, rfc1524.c, postpone.c, attach.c:
+       Avoid possible buffer overflows in mutt_adv_mktemp().
+
+       * sendlib.c: Interpret sysexits-style exit values from sendmail.
+
+       * configure.in, configure, config.h.in, acconfig.h:
+       Check for sysexits.h.
+
+Thu Jul 30 09:30:38 1998  Thomas Roessler  <roessler@guug.de>
+
+       * edit.c: When reading in files, be_snarf_file() wouldn't recognize
+       '~' as the user's home directory.
+
+Wed Jul 29 10:54:09 1998  Thomas Roessler  <roessler@guug.de>
+
+       * README, Changes: Finalizing 0.93.2i.
+
+       * configure.in, configure: Bumping to 0.93.2(i).
+
+       * parse.c: Fixing a buffer overflow in parse.c which presented a
+       serious security thread.  Noted by Paul Boehm
+       <paul@boehm.org>.
+
+Tue Jul 28 08:21:49 1998  Thomas Roessler  <roessler@guug.de>
+
+       * Attic/patch.slang-1.2.2.keypad.1: Adding a patch for a SLang bug.
+
+       * INSTALL: Adding a patch for a SLang bug.
+
+       * mx.c: Doing 'mutt -f NoSuchFile' just flickers the screen and
+       silently exits. Earlier (0.92.14 at least), it used to
+       spit out the error 'NoSuchFile: no such file or directory
+       (errno = 2)'.  (Noted and tracked down by Vikas Agnihotri
+       <VikasA@att.com>)
+
+       * color.c: The index cache should be updated even without color
+       support.
+
+Mon Jul 27 13:39:39 1998  Thomas Roessler  <roessler@guug.de>
+
+       * Attic/BUGS: Adding a notice about some more nits.
+
+       * main.c: Change the error reporting mail address from
+       <mutt-dev@cs.hmc.edu> to <mutt-dev@mutt.org>.
+
+       * protos.h, init.h, color.c:
+       This patch fixes index "color" patterns when using a
+       non-color capable curses library.  While working on color
+       support, I've thrown together the mutt_parse_color() and
+       mutt_parse_mono() functions as they are sharing most of
+       their code.  Additionally, a new directive called "unmono"
+       is introduced.  The implementation consists in adding a
+       flag and very few lines of code (plus ifdefs) to
+       mutt_parse_uncolor().
+
+       * snprintf.c, rfc1524.h, rfc1524.c, date.c:
+       Fixing some minor nits: missing #includes in date.c and
+       snprintf.c, and a not-so-nice declaration of
+       rfc1524_new_entry().  Noted by Digital cc and gcc.
+
+Fri Jul 24 08:12:46 1998  Thomas Roessler  <roessler@guug.de>
+
+       * copy.c, attach.c:
+       Fiddling around with message/rfc822 attachments once again.
+
+Thu Jul 23 20:57:50 1998  Thomas Roessler  <roessler@guug.de>
+
+       * status.c, sendlib.c, send.c, rfc2047.c, pop.c, pager.c, mx.c, mh.c, mbox.c, lib.c, init.c, imap.c, edit.c, curs_lib.c, compose.c, commands.c, color.c, browser.c, attach.c, alias.c:
+       Guard lots of global (char *) variable deferences against
+       NULL pointers.
+
+       * copy.c, attach.c:
+       Yet another patch about saving message/rfc822 attachments.
+
+       * main.c, send.c: Fixing potential NULL pointer deferences.
+
+Wed Jul 22 22:47:57 1998  Thomas Roessler  <roessler@guug.de>
+
+       * recvattach.c: Another fix from Liviu.
+
+       * recvattach.c, from.c, attach.c:
+       Another patch from liviu to fix the message/rfc822
+       behaviour.
+
+       * recvattach.c, mx.c, attach.c:
+       This patch fixes the saving of message/rfc822 attachments
+       to mail folders.  Additionally, it fixes an outstanding
+       bug with From_ lines being written to MH folders.
+
+       (From: Liviu Daia <daia@stoilow.imar.ro>)
+
+       * menu.c, functions.h, browser.c, OPS:
+       1. When I hit 'c' (change dir) in browser, it gives me the
+          directory, but without the final '/', so I have to add
+          '/' to add a subdirectory name. This patch fixes it.
+
+       2. check-new now will recheck mailbox folders for new
+          mail.
+
+       3. added a function toggle-mailboxes which toggles in
+          browser between mailboxes view and directory view.
+          (bound to TAB by default).
+
+       (From: "Michael S. Tsirkin" <mtsirkin@iil.intel.com>)
+
+       * send.c: Correct an error message in send.c.
+       (From: Byrial Jensen <byrial@post3.tele.dk>)
+
+       * sendlib.c, recvattach.c, protos.h, postpone.c,
+       pager.c, mx.c, mutt.h, lib.c, keymap.c, handler.c,
+       compose.c, commands.c, attach.h, attach.c:
+
+       These changes fix some of the bugs which were
+       recently reported to mutt-dev.  To be more specific,
+       message-type attachments are saved to mail folders
+       from the receive attachment menu, some of the
+       sending code has been made more robust against
+       disappearing attachments, and "tag" is rebound to
+       "T" on the compose menu.
+
+       (Some part of this patch comes from Vikas Agnihotri
+       <VikasA@att.com>.)
+
+       * send.c: Avoid a potential segmentation fault when
+       trying to postpone, but Postponed equals NULL.
+
+       * Attic/BUGS: This file is intended to contain known
+       bugs which still have to be fixed.
+
+       * doc/manual.txt:
+       Committing the changes previously made to manual.sgml.
+
+       * imap.c: Include Message-ID and Reply-To headers
+       when fetching a message's headers from an IMAP
+       server. (From: Andy Sloane <andude@incarnate.net>)
+
+Tue Jul 21 07:54:03 1998  Thomas Roessler  <roessler@guug.de>
+
+       * recvattach.c:
+       The old behaviour of the %d (for description) specifier is
+       recreated by this patch.
+       (From: Byrial Jensen <byrial@post3.tele.dk>)
+
+       * protos.h, lib.c, attach.c:
+       You should never _ever_ do something like this:
+
+              [process A]  ---[piped write until EOF]---> [process B]
+              [process A]  <---[piped read until EOF]--- [process B]
+
+       Basically, what happens is something like this: A
+       feeds data to B; B processes the data, and feeds it
+       to the pipe until the pipe buffer is full; at this
+       point, A writes to its pipe until its buffer is full
+       too, and if it still has more data to write, that's
+       it, it never gets to the read part to flush B's
+       buffer --- both processes are blocked on write.
+
+       This patch fixes such a situation in the compose menu.
+
+       (From: Liviu Daia <daia@stoilow.imar.ro>)
+
+Mon Jul 20 21:01:05 1998  Thomas Roessler  <roessler@guug.de>
+
+       * reap.pl: Perl lies in /usr/bin on my machines.
+
+       * pop.c: It seems that if you don't enter any
+       password at all when prompted for the POP password,
+       Mutt will die with a segmentation fault also. (Bug
+       reported by Steve Mayer <smayer@rtd.com> via the
+       Debian bug tracking system, fix from Thomas
+       Roessler.)
+
+       * postpone.c: When you send a message which have
+       been postponed before sending, then all its
+       attachments (if there are more than one) will have a
+       content-disposition header which includes a
+       filename, even if there isn't a real filename but
+       only random choosen temporary one. (From: Byrial
+       Jensen <byrial@post3.tele.dk>)
+
+Sat Jul 18 09:18:31 1998  Thomas Roessler  <roessler@guug.de>
+
+       * recvattach.c: "Set mime_forward, and forward a
+       message --- Mutt will segfault." The obvious fix for
+       this is to check for aptr->content->hdr in
+       mutt_attach_fmt() before invoking
+       _mutt_make_string().  Anyway, I suspect that the
+       real fix may involve something like parsing the
+       rfc822 attachment in question.
+
+       * sendlib.c: Postponing messages behaves funny when the $postponed
+       folder is in Maildir format; I traced this down to the
+       fact that postponed messages are saved in "cur" while
+       mutt_num_postponed() is looking at "new".
+       (From: Liviu Daia <daia@stoilow.imar.ro>)
+
+Fri Jul 17 08:37:02 1998  Thomas Roessler  <roessler@guug.de>
+
+       * compose.c: Removing the old snd_entry() code.
+
+       * doc/manual.sgml, protos.h, pgp.c, mutt.h, init.h, hook.c:
+       When sending encrypted messages, it may arrive that Mutt
+       can't determine the PGP key of the recipient (presumably
+       because her address has changed, but she hasn't updated
+       her PGP key yet). In this situation it's convenient to be
+       able to associate a keyID with an address automatically.
+       The attached patch is an attempt to implement this idea
+       using a "pgp-hook". (From: Liviu Daia <daia@stoilow.imar.ro>).
+
+       * recvattach.c: Removing the old attach_entry() code.
+
+       * recvattach.c, protos.h, mutt.h, init.h, globals.h, compose.c:
+       This patch adds a string variable $attach_format which
+       controls the look of the compose and attach menus.
+       Unfortunately, I was not able to make things so that it
+       would look exactly the same as the hardcoded versions, so
+       the default format is a bit different, but I think it is
+       quite usable.  (From Michael Elkins <me@cs.hmc.edu>).
+
+       * functions.h, browser.c, OPS:
+       This patch allows you to view files from the browser
+       window, useful if you are searching for a file to attach
+       to your message. It uses the standard mailcap stuff (and
+       the lookup mime types) to use the correct "viewer" for the
+       file.  (From Brandon Long <blong@fiction.net>)
+
+       * doc/Attic/dotlock.man.in, doc/Makefile.in, configure.in, configure, Makefile.in:
+       Dotlock-related changes: We call it mutt.dotlock to avoid
+       conflicts with certain NFS versions' dotlocking utilities
+       (pointed out by Liviu Daia).  Additionally, we need to
+       compile it as an external utility on systems which don't
+       have an fchdir(2) system call.
+
+Thu Jul 16 16:39:53 1998  Thomas Roessler  <roessler@guug.de>
+
+       * mx.c: Fixing a small typographic error.
+
+       * mx.c: Mutt doesn't retry locking if it doesn't succeed at once.
+       The code in mx_lock_file is supposed to retry but it
+       doesn't work because of a mistake in operator precedence.
+       (From: Petri Kaukasoina <kaukasoi@elektroni.ee.tut.fi>)
+
+       * Attic/dotlock.c:
+       The dotlock.c file tries to include <posix1_lim.h> if
+       _POSIX_PATH_MAX isn't defined but it doesn't include
+       <limits.h>, where this symbol should be defined.  (From
+       Marc.Baudoin@solsoft.com)
+
+       * send.c: When several messages are tagged and the user applies
+       reply, group-reply, or list-reply to these messages, the
+       reply's references and in-reply-to headers are constructed
+       from the tagged message which comes last in the current
+       index.  This patch constructs the references header from
+       _all_ messages' message-id and references headers. (tlr)
+
+       * reldate.h, configure.in, configure, Changes, ChangeLog:
+       Preparing mutt 0.94.
+
+       * imap.c: "My two remaining issues are the speed at which it
+       downloads the headers, and support of PREAUTH. I'm
+       enclosing a patch (to stock mutt-0.92.13i) which addresses
+       these issues." (From Brian Marcotte
+       <marcotte@panix7.panix.com>)
+
+       * color.c: This patch fixes two problems reported on mutt-users.
+
+       (1) the error message about "default colors not supported"
+       when not using a color xterm should not be printed.  The
+       existing code did not check the value of has_colors() in
+       conjunction with use_default_colors()
+
+       (2) mutt would crash when sending mail in batch mode
+       because use_default_colors() could be used without doing
+       an initscr()
+
+       (From Michael Elkins.)
+
+Wed Jul 15 17:15:46 1998  Thomas Roessler  <roessler@guug.de>
+
+       * mx.h, mx.c, main.c, Attic/dotlock.h,
+       Attic/dotlock.c, configure.in, configure,
+       Makefile.in: Finalizing the external dotlock
+       support: If group mail privileges are needed, the
+       dotlock is compiled as a separate program.  If
+       there is no need for privileges, it remains a
+       module which is compiled into mutt. Also, there is
+       no more need for the SLang buffer overflow
+       work-around in main().  We drop it, but let mutt
+       bail out instead if it's installed setgid
+       something.
+
+       * doc/Attic/dotlock.man.in, Attic/dotlock.c:
+       Fix the race condition in dotlock.c.
+
+       * doc/Attic/mutt.man.in:
+       Putting the manual page under autoconf control.
+
+       * doc/Attic/mutt.man.in:
+       file mutt.man.in was initially added on branch mutt-0-94.
+
+       * doc/mutt.man: Putting the manual page under autoconf control.
+
+       * doc/Attic/dotlock.man.in:
+       Adding external dotlocking.  For bugs, see the manual page
+       and the comments in dotlock.c.
+
+       * doc/Attic/dotlock.man.in:
+       file dotlock.man.in was initially added on branch mutt-0-94.
+
+       * doc/Makefile.in, protos.h, mx.c, mbox.c, main.c, globals.h, Attic/dotlock.h:
+       Adding external dotlocking.  For bugs, see the manual page
+       and the comments in dotlock.c.
+
+       * Attic/dotlock.h:
+       file dotlock.h was initially added on branch mutt-0-94.
+
+       * Attic/dotlock.c:
+       Adding external dotlocking.  For bugs, see the manual page
+       and the comments in dotlock.c.
+
+       * Attic/dotlock.c:
+       file dotlock.c was initially added on branch mutt-0-94.
+
+       * configure.in, configure, Makefile.in:
+       Adding external dotlocking.  For bugs, see the manual page
+       and the comments in dotlock.c.
+
+       * doc/mutt.man: More roff fixes.
+
+       * doc/mutt.man: More groff fixes.
+
+Tue Jul 14 16:01:07 1998  Thomas Roessler  <roessler@guug.de>
+
+       * reldate.h, configure.in, configure, Changes, ChangeLog:
+       Preparing mutt 0.93.1i.
+
+       * rfc2047.c, mime.h, handler.c: More unsigned fixes.
+
+       * pattern.c, parse.c:
+       Changing (int) casts in is* arguments to (unsigned char).
+
+       * rfc2047.c: Removing a superfluous (unsigned char) cast in an IsPrint
+       argument.
+
+Mon Jul 13 10:50:39 1998  Thomas Roessler  <roessler@guug.de>
+
+       * doc/mutt.sgml, doc/mutt.man, doc/Makefile.in:
+       Since manual page generation seems to be broken in the
+       SGML-tools package, we remove the SGML version of mutt.man
+       and make the troff source the master copy.  Suggested by
+       Roland Rosenfeld <roland@luv.rhein.de> who also provided
+       the corrected mutt.man file.
+
+Sun Jul 12 13:15:31 1998  Thomas Roessler  <roessler@guug.de>
+
+       * protos.h: Replace calloc by safe_calloc in new_pattern.
+
+Sat Jul 11 05:10:29 1998  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.txt, doc/manual.sgml: Key bindings documentation.
+
+Fri Jul 10 17:58:26 1998  Thomas Roessler  <roessler@guug.de>
+
+       * NEWS: s/fwd_decode/forward_decode/ (Noted by Lars Hecking)
+
+       * pop.c: tmp[] wasn't initialized when asking for the POP password.
+
+       * buffy.c: On SunOS 4.1, one must include unistd.h in order to
+       declare SEEK_END.  (Fabrice Noilhan)
+
+       * mutt.h: include <posix1_lim.h> if limits.h doesn't defile
+       _POSIX_PATH_MAX.
+
+       * Changes, ChangeLog: *** empty log message ***
+
+       * doc/PGP-Notes.txt: Adding a notice about core dumps.
+
+       * reldate.h, README, INSTALL: Preparing 0.93i.
+
+       * handler.c: Fix text/enriched decoding: if there's a tag mismatch in
+       the last paragraph in the attachment, the whole paragraph
+       wouldn't be displayed.
+
+Thu Jul  9 19:51:36 1998  Thomas Roessler  <roessler@guug.de>
+
+       * configure.in, configure, Attic/config.sub:
+       Use CC -Ae -D_HPUX_SOURCE on HP/UX.
+
+       * Attic/config.sub:
+       file config.sub was initially added on branch mutt-0-93.
+
+       * Attic/config.guess: Use CC -Ae -D_HPUX_SOURCE on HP/UX.
+
+       * Attic/config.guess:
+       file config.guess was initially added on branch mutt-0-93.
+
+       * INSTALL: Use CC -Ae -D_HPUX_SOURCE on HP/UX.
+
+Wed Jul  8 21:59:43 1998  Thomas Roessler  <roessler@guug.de>
+
+       * snprintf.c, pattern.c, parse.c, mx.c, mh.c, lib.c, keymap.c, init.c, from.c, edit.c, curs_main.c:
+       Changing (int) casts in is* arguments to (unsigned char)
+       casts to avoid mis-casting of signed chars.  (From Michael
+       Elkins.)
+
+Tue Jul  7 09:22:40 1998  Thomas Roessler  <roessler@guug.de>
+
+       * rfc822.c: Change one int to size_t in rfc822.c.
+
+       * rfc822.c: Fix the parsing of route addresses a la RFC 822.  Patch
+       from Michael Elkins.
+
+       * snprintf.c, sendlib.c, pattern.c, parse.c, mx.c, mh.c, lib.c, keymap.c, init.c, from.c, edit.c, curs_main.c:
+       Cast the arguments of the is* functions to int.  Patch
+       from Michael Elkins.
+
+Thu Jul  2 21:15:18 1998  Thomas Roessler  <roessler@guug.de>
+
+       * hdrline.c:
+       Using the correct version of O'Shaughnessy Evans' %O patch.
+
+       * configure.in, configure, Changes, ChangeLog: Preparig 0.92.14i
+
+       * doc/manual.txt, doc/manual.sgml: s/&setmn;/&bsol;/
+
+       * hdrline.c: Adding the %O expansion.
+
+       * doc/manual.sgml: Applying the various manual_nits patches.
+
+Wed Jul  1 17:01:50 1998  Thomas Roessler  <roessler@guug.de>
+
+       * curs_main.c: Fixing a reverse-threading problem.
+
+       * imap.c: Fixing an imap-related segmentation fault.
+
+Tue Jun 30 06:38:02 1998  Thomas Roessler  <roessler@guug.de>
+
+       * reldate.h, Changes, ChangeLog:
+       These are the last tiny bits of preparing 0.92.13i.
+
+       * configure.in, configure, TODO, README, NEWS:
+       Updating some of the documentation for 0.93.
+
+       * doc/Attic/NEWS: *** empty log message ***
+
+       * doc/Attic/NEWS: file NEWS was initially added on branch mutt-0-93.
+
+       * doc/manual.txt: Incorporate the recent changes to manual.sgml.
+
+       * main.c: Work around a buffer overflow in SLang.  (This is the same
+       bug which is fixed by 0.91.2i.)
+
+Fri Jun 26 10:31:28 1998  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.sgml, send.c, init.h, globals.h, Muttrc.in:
+       Removing $empty_to.
+
+Thu Jun 25 22:31:46 1998  Thomas Roessler  <roessler@guug.de>
+
+       * hdrline.c: Moved a break statement where it belongs.
+
+       * mx.c: Fix an imap-related typo.
+
+       * handler.c: Don't generate non-terminated last lines when quoting
+       8bit-"encoded" text-plain body parts.
+
+       * Makefile.in: Don't use GNU make specific features.
+
+Sun Jun 21 07:13:03 1998  Thomas Roessler  <roessler@guug.de>
+
+       * doc/mutt.man, doc/Makefile.in, reldate.h, configure.in, configure, Changes, ChangeLog:
+       Bumping the release to 0.92.12i.
+
+Sat Jun 20 06:12:38 1998  Thomas Roessler  <roessler@guug.de>
+
+       * doc/manual.txt: *** empty log message ***
+
+       * handler.c: Fixing the quoted-printable decoder.
+
+       * handler.c, copy.c: Make mutt handle messages containing null bytes.
+
+       * doc/manual.sgml: documenting alias-path
+
+Fri Jun 19 12:52:16 1998  Thomas Roessler  <roessler@guug.de>
+
+       * sendlib.c, send.c, protos.h, postpone.c, pattern.c, menu.c, main.c, headers.c, functions.h, curs_main.c, compose.c, OPS:
+       Removing the Attach-Menu feature for the next release
+       version.
+
+Thu Jun 18 20:37:59 1998  Thomas Roessler  <roessler@guug.de>
+
+       * protos.h, lib.c, alias.c:
+       Bradon long's alias_path patch, for the sake of Elm
+       compatibility.
+
+Tue Jun 16 20:59:20 1998  Thomas Roessler  <roessler@guug.de>
+
+       * mx.c: Avoid pointless error messages from mx_get_magic() when
+       called from an mx_open_mailbox_append() on a non-existing
+       mailbox.
+
+       * doc/manual.txt, doc/Makefile.in, configure.in, configure, Makefile.in:
+       Have "make install" install manual.txt as well.
+
+       * doc/Attic/makefile, doc/Makefile.in:
+       Putting Makefile under autoconf control.
+
+       * main.c: Switch the error reporting address from mutt-users to
+       mutt-dev.
+
+       * reldate.h, configure.in, configure, Changes, ChangeLog:
+       Bump the version to 0.92.11i.
+
+       * imap.h: Check in a proper version of imap.h.
+
+       * color.c: Fix the "unknown color" bug reported by Vikas.
+
+       * mx.c: Remove a spurious #include "imap.h" from mx.c.
+
+       * doc/style-guide: Add a note about the global Muttrc to style-guide.
+
+       * configure.in, Muttrc.in, configure, Attic/Muttrc, Makefile.in:
+       The global Muttrc contains a list of default settings
+       which can be used as a starting-point for the user's own
+       configuration.
+
+       * pgppubring.c, pgp.h, gnupgparse.c:
+       Removing some duplicate code from gnupgparse.c and
+       pgppubring.c.
+
+       * pgpinvoke.c, gnupgparse.c:
+       Include part of Werner Koch's latest GPG patches.
+
+       * Changes: *** empty log message ***
+
+       * configure.in, configure, Changes, ChangeLog: Preparing 0.92.10i.
+
+       * doc/PGP-Notes.txt: Including Roland's new procmail recipe.
+
+       * protos.h, pattern.c, menu.c, curs_main.c, compose.c, addrbook.c:
+       Including Vikas' search code for the "attach message" menu.
+
+Mon Jun 15 15:19:49 1998  Thomas Roessler  <roessler@guug.de>
+
+       * mx.c, main.c, mailbox.h, imap.c, commands.c: Brandon's IMAP patch.
+
diff --git a/GPL b/GPL
new file mode 100644 (file)
index 0000000..febb8a6
--- /dev/null
+++ b/GPL
@@ -0,0 +1,341 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    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-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+$Id: GPL,v 3.0 2002/01/24 12:10:47 roessler Exp $
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..6558cc3
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,300 @@
+Supported platforms
+===================
+
+Mutt has been reported to compile and run under the following Unix operating
+systems:
+
+       AIX
+       BSDI
+       Convex
+       Data General Unix (DG/UX)
+       Digital Unix (OSF/1)
+       DYNIX/ptx
+       FreeBSD
+       HP-UX
+       IRIX
+       Linux
+       Atari MiNT
+       MkLinux
+       NetBSD
+       OpenBSD
+       QNX
+       SCO Unix 3.2v4/5
+       Solaris
+       SunOS
+       Ultrix
+       UnixWare
+
+- An ANSI C compiler (such as gcc) is required.
+
+- You must also have a SysV compatible curses library, or you must
+  install either
+
+       GNU ncurses, ftp://prep.ai.mit.edu/pub/gnu/
+
+  or
+
+       S-Lang, ftp://space.mit.edu/pub/davis/slang/
+
+- Mutt needs an implementation of the iconv API for character set
+  conversions.  A free one can be found under the following URL:
+
+       http://www.gnu.org/software/libiconv/
+
+
+
+Installation
+============
+
+Installing Mutt is rather painless through the use of the GNU
+autoconf package.  Simply untar the Mutt distribution, and run the
+``configure'' script.  If you have obtained the distribution from
+the CVS repository, run the ``prepare'' script with the same command
+line parameters you would pass to configure.  It will set up mutt's
+build environment and add the files which are present in the tar
+balls, but not in the CVS repository.
+
+In most cases, configure will automatically determine everything it
+needs to know in order to compile.  However, there are a few options
+to ``configure'' to help it out, or change the default behavior:
+
+--prefix=DIR
+       install Mutt in DIR instead of /usr/local
+
+--with-curses=DIR
+       use the curses lib in DIR/lib.  If you have ncurses, ``configure''
+       will automatically look in /usr/include/ncurses for the include
+       files.
+
+--with-slang[=DIR]
+       use the S-Lang library instead of ncurses.  This library seems to
+       work better for some people because it is less picky about proper
+       termcap entries than ncurses.  It is recommended that you use at
+       *least* version 0.99-38 with Mutt.
+
+--with-mailpath=DIR
+       specify where the spool mailboxes are located on your system
+
+--with-homespool[=FILE]
+       treat file in the user's home directory as the spool mailbox.  Note
+       that this is *not* the full pathname, but relative to the user's
+       home directory.  Defaults to "mailbox" if FILE is not specified.
+
+--enable-pop
+       enable POP3 support
+
+--enable-imap
+       enable IMAP support
+
+--with-gss[=PFX]
+       Enable GSSAPI authentication to IMAP servers. This should work with
+       both MIT and Heimdal GSSAPI implementations - others haven't been
+       tested. Note that the Cyrus SASL library also supports GSSAPI,
+       and may be able to encrypt your session with it - you should use
+       SASL instead if you can.
+
+--with-ssl[=PFX]
+       enable SSL support with IMAP and POP. SSL support requires you to
+       have OpenSSL headers and libraries properly installed before
+       compiling.  If the OpenSSL headers and libraries are not in the
+       default system pats you can use the optional PFX argument to
+       define the root directory of your installation.  The libraries
+       are then expected to be found in PFX/lib and headers in
+       PFX/include/openssl.
+
+--with-sasl[=PFX]
+       Use the Cyrus SASL library for IMAP or POP authentication. This
+       library provides generic support for several authentication methods,
+       and more may be added by the system administrator without recompiling
+       mutt. SASL may also be able to encrypt your mail session even if
+       SSL is not available.
+
+--disable-nls
+       This switch disables mutt's native language support.
+
+--with-included-gettext 
+       Mutt will be built using the GNU gettext library included in
+       the intl/ sub-directory.  You may need to use this switch if
+       your machine has something which looks like gettext to the
+       configure script, but isn't able to cope with mutt's catalog
+       files.
+
+--with-regex
+       use GNU regex instead of local regexp routines.  Many systems
+       don't have the POSIX compliant regcomp/regexec/regfree
+       routines, so this provides a way to support them.
+
+--enable-flock
+       use flock() to lock files.  
+
+--disable-fcntl
+       by default, Mutt uses fcntl() to lock files.  Over NFS this can
+       result in poor performance on read/write.  Note that using this
+       option could be dangerous if dotlocking is also disabled.
+       
+--enable-nfs-fix
+       some implementations of NFS do not always write the
+       atime/mtime of small files.  This means that Mutt's ``mailboxes''
+       feature does not always work properly, as it uses these
+       attributes to work out whether the file has new mail.  This
+       option enables a workaround to this bug.
+
+--enable-locales-fix
+       on some systems, the result of isprint() can't be used reliably
+       to decide which characters are printable, even if you set the
+       LANG environment variable.  If you set this option, Mutt will
+       assume all characters in the ISO-8859-* range are printable.  If
+       you leave it unset, Mutt will attempt to use isprint() if either
+       of the environment variables LANG, LC_ALL or LC_CTYPE is set,
+       and will revert to the ISO-8859-* range if they aren't.
+       If you need --enable-locales-fix then you will probably need
+       --without-wc-funcs too. However, on a correctly configured
+       modern system you shouldn't need either (try setting LANG,
+       LC_ALL or LC_CTYPE instead).
+
+--without-wc-funcs
+       by default Mutt uses the functions mbrtowc(), wctomb() and
+       wcwidth() provided by the system, when they are available.
+       With this option Mutt will use its own version of those
+       functions, which should work with 8-bit display charsets, UTF-8,
+       euc-jp or shift_jis, even if the system doesn't normally support
+       those multibyte charsets.
+
+       If you find Mutt is displaying non-ascii characters as octal
+       escape sequences (e.g. \243), even though you have set LANG and
+       LC_CTYPE correctly, then you might find you can solve the problem
+       with either or both of --enable-locales-fix and --without-wc-funcs.
+
+--with-exec-shell=SHELL
+       on some versions of unix, /bin/sh has a bug that makes using emacs
+       with mutt very difficult.  If you have the problem that whenever
+       you press control-G in emacs, mutt and emacs become very confused,
+       you may want to try using a Bourne-derived shell other than
+       /bin/sh here.  Some shells that may work are bash, zsh, and ksh.
+       C shells such as csh and tcsh will amost certainly not work right.
+       Note that this option is unrelated to what shell mutt gives you
+       when you press '!'.  Only use this option to solve the above problem,
+       and only specify one of the above shells as its argument.
+
+       (If you encounter this problem with your platform's native
+       Bourne shell, please send a short report to mutt-dev@mutt.org,
+       so a short note on this topic can be added to the Platform notes
+       section below.)
+
+--enable-exact-address
+       By default, Mutt will rewrite all addresses in the form
+               Personal Name <user@host.domain>
+       regardless of the input.  By enabling this option, Mutt will write
+       addresses in the same form they are parsed.  NOTE: this requires
+       significantly more memory.
+
+       WARNING: DO NOT USE THIS OPTION, IT IS BROKEN.
+
+
+Once ``configure'' has completed, simply type ``make install.''
+
+Mutt should compile cleanly (without errors) and you should end up with a
+binary called ``mutt.''  If you get errors about undefined symbols like
+A_NORMAL or KEY_MIN, then you probably don't have a SysV compliant curses
+library.  You should install either ncurses or S-Lang (see above), and then
+run the ``configure'' script again.
+
+Please note that "VPATH" builds currently do _not_ work.
+
+
+
+Character set support
+=====================
+
+Mutt no longer contains functions for doing character set conversion.
+Instead, it expects the iconv functions (iconv_open, iconv,
+iconv_close) to be provided. Most up-to-date systems provide these
+functions, often as part of the C library. If you are installing Mutt
+on a system which does not have them, it is recommended that you
+install Bruno Haible's portable libiconv library, which you can obtain
+from:
+
+              ftp://ftp.ilog.fr/pub/Users/haible/gnu/
+
+Even if your system does provide the iconv functions, you might want
+to install libiconv, as some systems provide only a very limited
+version of iconv.
+
+
+If you decide to use your system's iconv implementation, you may
+need to tell mutt about implementation-defined names for some
+character sets.  Sample configuration files for various systems can
+be found in the directory contrib/iconv/ in this source
+distribution, and will be installed in the samples/iconv directory
+as part of mutt's documentation.
+
+In order to use these sample configuration files, just put a line
+like
+
+     source /usr/local/doc/mutt/samples/iconv/iconv.osf1-4.0d.rc
+
+into your system's global Muttrc, which normally resides in /etc or
+/usr/local/etc.
+
+
+If you really want to, you can configure Mutt --disable-iconv, but
+there will then be no character set conversion.
+
+
+Platform Notes
+==============
+
+All platforms
+
+       There is a bug in most (if not all) S-Lang versions which
+       prevents the Meta key from working with mutt.  A patch can
+       be found in the file contrib/patch.slang-1.2.2.keypad.1 in
+       this mutt distribution.
+
+
+Solaris 2.4
+
+       The system regcomp() and regexec() routines are very badly
+       broken.  This should be automatically detected by the
+       configure script.  If not, use the --with-regex switch when
+       configuring mutt.
+
+       We are also hearing reports that Solaris 2.4's NLS libraries
+       dump core with mutt when using a locale different from "C".
+       Use the --with-included-gettext configuration switch if you
+       experience this problem.
+
+       Color does not work right with Solaris curses.  You will
+       have to compile with either ncurses or slang to get working
+       color support.
+
+Solaris 2.6
+
+       There are reports that mutt behaves strangely when linked with
+       the system regexp library.  Please use the --with-regex switch
+       when configuring on this platform.
+
+       For the real fix, applying Sun patches # 105490-05 (linker
+       patch) and # 105210-17 (libc and malloc patch) from
+       sunsolve.sun.com has been reported to stop these problems
+       from occuring.
+
+Linux
+
+       On recent Linux systems, flock() and fcntl() locks don't mix.  If
+       you use the --enable-flock switch on such systems, be sure to
+       give the --disable-fcntl argument as well.
+
+Sparc Linux
+
+       Redhat 4.2 Sparc users reported problems with some system
+       include files when building mutt.  Configuring mutt with the
+       --disable-warnings switch is said to help against this problem.
+
+
+Digital Unix (OSF/1)
+
+       The system curses library is said to be badly broken.  Use GNU
+       ncurses or SLang instead.
+
+$Id: INSTALL,v 3.1 2002/11/25 14:16:46 roessler Exp $
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..cc33370
--- /dev/null
@@ -0,0 +1,198 @@
+## Process this file with automake to produce Makefile.in
+## Use aclocal -I m4; automake --foreign
+
+AUTOMAKE_OPTIONS = foreign
+EXTRA_PROGRAMS = mutt_dotlock pgpring makedoc
+
+if BUILD_IMAP
+IMAP_SUBDIR = imap
+IMAP_INCLUDES = -I$(top_srcdir)/imap
+endif
+
+SUBDIRS = m4 po intl doc contrib $(IMAP_SUBDIR)
+
+bin_SCRIPTS = muttbug flea
+
+BUILT_SOURCES = keymap_defs.h patchlist.c
+
+bin_PROGRAMS = mutt @DOTLOCK_TARGET@ @PGPAUX_TARGET@ @SMIMEAUX_TARGET@
+mutt_SOURCES = $(BUILT_SOURCES) \
+       addrbook.c alias.c attach.c base64.c browser.c buffy.c color.c \
+        crypt.c cryptglue.c \
+       commands.c complete.c compose.c copy.c curs_lib.c curs_main.c date.c \
+       edit.c enter.c flags.c init.c filter.c from.c getdomain.c \
+       handler.c hash.c hdrline.c headers.c help.c hook.c keymap.c \
+       main.c mbox.c menu.c mh.c mx.c pager.c parse.c pattern.c \
+       postpone.c query.c recvattach.c recvcmd.c \
+       rfc822.c rfc1524.c rfc2047.c rfc2231.c \
+       score.c send.c sendlib.c signal.c sort.c \
+       status.c system.c thread.c charset.c history.c lib.c \
+       muttlib.c editmsg.c utf8.c mbyte.c wcwidth.c \
+       url.c ascii.c mutt_idna.c
+
+mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(MUTTLIBS) \
+       $(INTLLIBS) $(LIBICONV)
+
+mutt_DEPENDENCIES = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAPDEPS) \
+       $(INTLDEPS)
+
+makedoc_SOURCES = makedoc.c
+makedoc_LDADD =
+makedoc_DEPENDENCIES = 
+
+# $(makedoc_OBJECTS): $(makedoc_SOURCES)
+#      $(HOST_CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) -c $<
+
+# makedoc: $(makedoc_OBJECTS) $(makedoc_DEPENDENCIES)
+#      @rm -rf makedoc
+#      $(HOST_CC) $(AM_CFLAGS) $(LDFLAGS) $(makedoc_LDFLAGS) $(makedoc_OBJECTS) $(makedoc_LDADD) -o makedoc
+
+CPP=@CPP@
+
+DEFS=-DPKGDATADIR=\"$(pkgdatadir)\" -DSYSCONFDIR=\"$(sysconfdir)\" \
+       -DBINDIR=\"$(bindir)\" -DMUTTLOCALEDIR=\"$(datadir)/locale\" \
+       -DHAVE_CONFIG_H=1
+
+INCLUDES=-I. -I$(top_srcdir) $(IMAP_INCLUDES) -Iintl
+
+CPPFLAGS=@CPPFLAGS@ -I$(includedir)
+
+
+EXTRA_mutt_SOURCES = account.c md5c.c mutt_sasl.c mutt_socket.c mutt_ssl.c \
+       mutt_tunnel.c pop.c pop_auth.c pop_lib.c smime.c pgp.c pgpinvoke.c pgpkey.c \
+       pgplib.c sha1.c pgpmicalg.c gnupgparse.c resize.c dotlock.c remailer.c \
+       browser.h mbyte.h remailer.h url.h mutt_ssl_nss.c \
+       pgppacket.c mutt_idna.h \
+       nntp.c newsrc.c mutt_libesmtp.c
+
+EXTRA_DIST = COPYRIGHT GPL OPS OPS.PGP OPS.CRYPT OPS.SMIME TODO \
+       configure acconfig.h account.h \
+       attach.h buffy.h charset.h copy.h dotlock.h functions.h gen_defs \
+       globals.h hash.h history.h init.h keymap.h mutt_crypt.h \
+       mailbox.h mapping.h md5.h mime.h mutt.h mutt_curses.h mutt_menu.h \
+       mutt_regex.h mutt_sasl.h mutt_socket.h mutt_ssl.h mutt_tunnel.h \
+       mx.h pager.h pgp.h pop.h protos.h reldate.h rfc1524.h rfc2047.h \
+       rfc2231.h rfc822.h sha1.h sort.h mime.types VERSION prepare \
+       nntp.h ChangeLog.nntp \
+       _regex.h OPS.MIX README.SECURITY remailer.c remailer.h browser.h \
+       mbyte.h lib.h extlib.c pgpewrap.c smime_keys.pl pgplib.h Muttrc.head Muttrc \
+       makedoc.c stamp-doc-rc README.SSL smime.h\
+       muttbug pgppacket.h depcomp ascii.h BEWARE PATCHES patchlist.sh \
+       ChangeLog.old mkchangelog.sh cvslog2changelog.pl mutt_idna.h \
+       snprintf.c regex.c mutt_libesmtp.h
+
+mutt_dotlock_SOURCES = mutt_dotlock.c
+mutt_dotlock_LDADD = @LIBOBJS@
+mutt_dotlock_DEPENDENCIES = @LIBOBJS@
+
+pgpring_SOURCES = pgppubring.c pgplib.c lib.c extlib.c sha1.c md5c.c pgppacket.c ascii.c
+pgpring_LDADD = @LIBOBJS@ $(INTLLIBS) 
+pgpring_DEPENDENCIES = @LIBOBJS@ $(INTLDEPS)
+
+mutt_dotlock.c: dotlock.c
+       cp $(srcdir)/dotlock.c mutt_dotlock.c
+
+CLEANFILES = mutt_dotlock.c stamp-doc-rc makedoc \
+       keymap_alldefs.h keymap_defs.h patchlist.c
+
+ACLOCAL_AMFLAGS = -I m4
+
+LDADD = @LIBOBJS@ @INTLLIBS@
+
+OPS=@OPS@
+
+flea:  muttbug.sh
+       cp muttbug.sh flea
+       chmod +x flea
+
+smime_keys: $(srcdir)/smime_keys.pl
+       cp $(srcdir)/smime_keys.pl smime_keys
+       chmod +x smime_keys
+
+Makefile: $(BUILT_SOURCES)
+
+keymap_defs.h: $(OPS) $(srcdir)/gen_defs
+       $(srcdir)/gen_defs $(OPS) > keymap_defs.h
+
+keymap_alldefs.h: $(srcdir)/OPS $(srcdir)/OPS.PGP $(srcdir)/OPS.MIX $(srcdir)/OPS.CRYPT $(srcdir)/OPS.SMIME $(srcdir)/gen_defs
+       $(srcdir)/gen_defs $(srcdir)/OPS $(srcdir)/OPS.PGP \
+               $(srcdir)/OPS.MIX $(srcdir)/OPS.CRYPT $(srcdir)/OPS.SMIME \
+                       > keymap_alldefs.h
+
+reldate:
+       echo 'const char *ReleaseDate = "'`date +%Y-%m-%d`'";' > $(srcdir)/reldate.h
+
+patchlist.c: $(srcdir)/PATCHES $(srcdir)/patchlist.sh
+       $(srcdir)/patchlist.sh < $(srcdir)/PATCHES > patchlist.c
+
+install-exec-local:
+       if test -f $(DESTDIR)$(bindir)/mutt.dotlock && test -f $(DESTDIR)$(bindir)/mutt_dotlock ; then  \
+               rm -f $(DESTDIR)$(bindir)/mutt.dotlock ;                \
+               ln -sf $(DESTDIR)$(bindir)/mutt_dotlock $(DESTDIR)$(bindir)/mutt.dotlock ; \
+       fi
+       if test -f $(DESTDIR)$(bindir)/mutt_dotlock && test x@DOTLOCK_GROUP@ != x ; then \
+               chgrp @DOTLOCK_GROUP@ $(DESTDIR)$(bindir)/mutt_dotlock && \
+               chmod @DOTLOCK_PERMISSION@ $(DESTDIR)$(bindir)/mutt_dotlock || \
+               { echo "Can't fix mutt_dotlock's permissions!" >&2 ; exit 1 ; } \
+       fi
+
+install-data-local: Muttrc
+       $(srcdir)/mkinstalldirs $(DESTDIR)$(sysconfdir)
+       -if [ -f $(DESTDIR)$(pkgdatadir)/Muttrc ] ; then \
+               mv $(DESTDIR)$(pkgdatadir)/Muttrc* $(DESTDIR)$(sysconfdir) ; \
+       elif [ -f $(DESTDIR)$(pkgdatadir)/../Muttrc ] ; then \
+               mv $(DESTDIR)$(pkgdatadir)/../Muttrc* $(DESTDIR)$(sysconfdir) ; \
+       elif [ ! -f $(DESTDIR)$(sysconfdir)/Muttrc ] ; then \
+               $(INSTALL) -m 644 $(srcdir)/Muttrc $(DESTDIR)$(sysconfdir) ; \
+       fi
+       -if [ ! -f $(DESTDIR)$(sysconfdir)/mime.types ]; then \
+               $(INSTALL) -m 644 $(srcdir)/mime.types $(DESTDIR)$(sysconfdir); \
+       fi
+
+
+# Don't make this one ChangeLog - it's intended to be
+# used manually.
+
+pclean:
+       cat /dev/null > PATCHES
+
+check-security:
+       ./check_sec.sh
+
+commit-real:
+       cvs commit
+
+commit-changelog:
+       cvs commit -m "# changelog commit" ChangeLog
+
+commit: pclean check-security commit-real changelog commit-changelog
+
+changelog:
+       cvs update ChangeLog
+       sh ./mkchangelog.sh | fmt -c | cat  - ChangeLog > ChangeLog.$$$$ && mv ChangeLog.$$$$ ChangeLog
+       $${VISUAL:-vi} ChangeLog
+
+ChangeLog: changelog
+
+# kluge around automake problems.
+
+dist-hook:
+       -for file in $(BUILT_SOURCES) ; do rm -f $(distdir)/$$file ; done
+
+mutt-dist:
+       (cd $(srcdir) && ./build-release )
+
+update-doc: stamp-doc-rc
+       (cd doc && $(MAKE) update-doc)
+
+Muttrc: stamp-doc-rc
+
+stamp-doc-rc: $(srcdir)/init.h makedoc Muttrc.head
+       -rm -f Muttrc stamp-doc-rc
+       $(CPP) $(INCLUDES) $(DEFS) $(CPPFLAGS) -D_MAKEDOC -C \
+               $(srcdir)/init.h | ./makedoc -c | cat Muttrc.head - > Muttrc
+       touch stamp-doc-rc
+
+
+.PHONY: commit pclean check-security commit-real commit-changelog
+.PHONY: changelog ChangeLog
diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..32880ab
--- /dev/null
@@ -0,0 +1,687 @@
+# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = .
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
+AR = @AR@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+DATADIRNAME = @DATADIRNAME@
+DBX = @DBX@
+DEBUGGER = @DEBUGGER@
+DOTLOCK_GROUP = @DOTLOCK_GROUP@
+DOTLOCK_PERMISSION = @DOTLOCK_PERMISSION@
+DOTLOCK_TARGET = @DOTLOCK_TARGET@
+GDB = @GDB@
+GENCAT = @GENCAT@
+GLIBC21 = @GLIBC21@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+HAVE_LIB = @HAVE_LIB@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+ISPELL = @ISPELL@
+KRB5CFGPATH = @KRB5CFGPATH@
+LIB = @LIB@
+LIBICONV = @LIBICONV@
+LIBIMAP = @LIBIMAP@
+LIBIMAPDEPS = @LIBIMAPDEPS@
+LTLIB = @LTLIB@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MUTTLIBS = @MUTTLIBS@
+MUTT_LIB_OBJECTS = @MUTT_LIB_OBJECTS@
+PACKAGE = @PACKAGE@
+PGPAUX_TARGET = @PGPAUX_TARGET@
+POFILES = @POFILES@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SDB = @SDB@
+SENDMAIL = @SENDMAIL@
+SMIMEAUX_TARGET = @SMIMEAUX_TARGET@
+SUBVERSION = @SUBVERSION@
+U = @U@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+docdir = @docdir@
+mutt_libesmtp_config_path = @mutt_libesmtp_config_path@
+
+AUTOMAKE_OPTIONS = foreign
+EXTRA_PROGRAMS = mutt_dotlock pgpring makedoc
+
+@BUILD_IMAP_TRUE@IMAP_SUBDIR = imap
+@BUILD_IMAP_TRUE@IMAP_INCLUDES = -I$(top_srcdir)/imap
+
+SUBDIRS = m4 po intl doc contrib $(IMAP_SUBDIR)
+
+bin_SCRIPTS = muttbug flea
+
+BUILT_SOURCES = keymap_defs.h patchlist.c
+
+bin_PROGRAMS = mutt @DOTLOCK_TARGET@ @PGPAUX_TARGET@ @SMIMEAUX_TARGET@
+mutt_SOURCES = $(BUILT_SOURCES)        addrbook.c alias.c attach.c base64.c browser.c buffy.c color.c         crypt.c cryptglue.c      commands.c complete.c compose.c copy.c curs_lib.c curs_main.c date.c    edit.c enter.c flags.c init.c filter.c from.c getdomain.c       handler.c hash.c hdrline.c headers.c help.c hook.c keymap.c     main.c mbox.c menu.c mh.c mx.c pager.c parse.c pattern.c        postpone.c query.c recvattach.c recvcmd.c       rfc822.c rfc1524.c rfc2047.c rfc2231.c  score.c send.c sendlib.c signal.c sort.c        status.c system.c thread.c charset.c history.c lib.c    muttlib.c editmsg.c utf8.c mbyte.c wcwidth.c    url.c ascii.c mutt_idna.c
+
+
+mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(MUTTLIBS)       $(INTLLIBS) $(LIBICONV)
+
+
+mutt_DEPENDENCIES = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAPDEPS)        $(INTLDEPS)
+
+
+makedoc_SOURCES = makedoc.c
+makedoc_LDADD = 
+makedoc_DEPENDENCIES = 
+
+# $(makedoc_OBJECTS): $(makedoc_SOURCES)
+#      $(HOST_CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) -c $<
+
+# makedoc: $(makedoc_OBJECTS) $(makedoc_DEPENDENCIES)
+#      @rm -rf makedoc
+#      $(HOST_CC) $(AM_CFLAGS) $(LDFLAGS) $(makedoc_LDFLAGS) $(makedoc_OBJECTS) $(makedoc_LDADD) -o makedoc
+
+CPP = @CPP@
+
+DEFS = -DPKGDATADIR=\"$(pkgdatadir)\" -DSYSCONFDIR=\"$(sysconfdir)\"   -DBINDIR=\"$(bindir)\" -DMUTTLOCALEDIR=\"$(datadir)/locale\"    -DHAVE_CONFIG_H=1
+
+
+INCLUDES = -I. -I$(top_srcdir) $(IMAP_INCLUDES) -Iintl
+
+CPPFLAGS = @CPPFLAGS@ -I$(includedir)
+
+EXTRA_mutt_SOURCES = account.c md5c.c mutt_sasl.c mutt_socket.c mutt_ssl.c     mutt_tunnel.c pop.c pop_auth.c pop_lib.c smime.c pgp.c pgpinvoke.c pgpkey.c     pgplib.c sha1.c pgpmicalg.c gnupgparse.c resize.c dotlock.c remailer.c  browser.h mbyte.h remailer.h url.h mutt_ssl_nss.c       pgppacket.c mutt_idna.h         nntp.c newsrc.c mutt_libesmtp.c
+
+
+EXTRA_DIST = COPYRIGHT GPL OPS OPS.PGP OPS.CRYPT OPS.SMIME TODO        configure acconfig.h account.h  attach.h buffy.h charset.h copy.h dotlock.h functions.h gen_defs        globals.h hash.h history.h init.h keymap.h mutt_crypt.h         mailbox.h mapping.h md5.h mime.h mutt.h mutt_curses.h mutt_menu.h       mutt_regex.h mutt_sasl.h mutt_socket.h mutt_ssl.h mutt_tunnel.h         mx.h pager.h pgp.h pop.h protos.h reldate.h rfc1524.h rfc2047.h         rfc2231.h rfc822.h sha1.h sort.h mime.types VERSION prepare     nntp.h ChangeLog.nntp   _regex.h OPS.MIX README.SECURITY remailer.c remailer.h browser.h        mbyte.h lib.h extlib.c pgpewrap.c smime_keys.pl pgplib.h Muttrc.head Muttrc     makedoc.c stamp-doc-rc README.SSL smime.h       muttbug pgppacket.h depcomp ascii.h BEWARE PATCHES patchlist.sh         ChangeLog.old mkchangelog.sh cvslog2changelog.pl mutt_idna.h    snprintf.c regex.c mutt_libesmtp.h
+
+
+mutt_dotlock_SOURCES = mutt_dotlock.c
+mutt_dotlock_LDADD = @LIBOBJS@
+mutt_dotlock_DEPENDENCIES = @LIBOBJS@
+
+pgpring_SOURCES = pgppubring.c pgplib.c lib.c extlib.c sha1.c md5c.c pgppacket.c ascii.c
+pgpring_LDADD = @LIBOBJS@ $(INTLLIBS) 
+pgpring_DEPENDENCIES = @LIBOBJS@ $(INTLDEPS)
+
+CLEANFILES = mutt_dotlock.c stamp-doc-rc makedoc       keymap_alldefs.h keymap_defs.h patchlist.c
+
+
+ACLOCAL_AMFLAGS = -I m4
+
+LDADD = @LIBOBJS@ @INTLLIBS@
+
+OPS = @OPS@
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =  muttbug.sh Muttrc.head
+PROGRAMS =  $(bin_PROGRAMS)
+
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+mutt_dotlock_OBJECTS =  mutt_dotlock.o
+mutt_dotlock_LDFLAGS = 
+pgpring_OBJECTS =  pgppubring.o pgplib.o lib.o extlib.o sha1.o md5c.o \
+pgppacket.o ascii.o
+pgpring_LDFLAGS = 
+makedoc_OBJECTS =  makedoc.o
+makedoc_LDFLAGS = 
+mutt_OBJECTS =  patchlist.o addrbook.o alias.o attach.o base64.o \
+browser.o buffy.o color.o crypt.o cryptglue.o commands.o complete.o \
+compose.o copy.o curs_lib.o curs_main.o date.o edit.o enter.o flags.o \
+init.o filter.o from.o getdomain.o handler.o hash.o hdrline.o headers.o \
+help.o hook.o keymap.o main.o mbox.o menu.o mh.o mx.o pager.o parse.o \
+pattern.o postpone.o query.o recvattach.o recvcmd.o rfc822.o rfc1524.o \
+rfc2047.o rfc2231.o score.o send.o sendlib.o signal.o sort.o status.o \
+system.o thread.o charset.o history.o lib.o muttlib.o editmsg.o utf8.o \
+mbyte.o wcwidth.o url.o ascii.o mutt_idna.o
+mutt_LDFLAGS = 
+SCRIPTS =  $(bin_SCRIPTS)
+
+CFLAGS = @CFLAGS@
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+DIST_COMMON =  README ./stamp-h.in ABOUT-NLS ChangeLog INSTALL \
+Makefile.am Makefile.in Muttrc.head.in NEWS TODO acconfig.h aclocal.m4 \
+config.guess config.h.in config.sub configure configure.in install-sh \
+missing mkinstalldirs muttbug.sh.in strcasecmp.c strdup.c
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+DIST_SUBDIRS =  m4 po intl doc contrib imap
+SOURCES = $(mutt_dotlock_SOURCES) $(pgpring_SOURCES) $(makedoc_SOURCES) $(mutt_SOURCES) $(EXTRA_mutt_SOURCES)
+OBJECTS = $(mutt_dotlock_OBJECTS) $(pgpring_OBJECTS) $(makedoc_OBJECTS) $(mutt_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .o .s
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
+       cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps Makefile
+
+Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
+       cd $(top_builddir) \
+         && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+$(ACLOCAL_M4):  configure.in  m4/codeset.m4 m4/curslib.m4 m4/funcdecl.m4 \
+               m4/gettext.m4 m4/glibc21.m4 m4/gssapi.m4 m4/iconv.m4 \
+               m4/lcmessage.m4 m4/libesmtp.m4 m4/progtest.m4
+       cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config.status: $(srcdir)/configure.in $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
+       cd $(srcdir) && $(AUTOCONF)
+
+config.h: stamp-h
+       @if test ! -f $@; then \
+               rm -f stamp-h; \
+               $(MAKE) stamp-h; \
+       else :; fi
+stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
+       cd $(top_builddir) \
+         && CONFIG_FILES= CONFIG_HEADERS=config.h \
+            $(SHELL) ./config.status
+       @echo timestamp > stamp-h 2> /dev/null
+$(srcdir)/config.h.in: $(srcdir)/stamp-h.in
+       @if test ! -f $@; then \
+               rm -f $(srcdir)/stamp-h.in; \
+               $(MAKE) $(srcdir)/stamp-h.in; \
+       else :; fi
+$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h
+       cd $(top_srcdir) && $(AUTOHEADER)
+       @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null
+
+mostlyclean-hdr:
+
+clean-hdr:
+
+distclean-hdr:
+       -rm -f config.h
+
+maintainer-clean-hdr:
+muttbug.sh: $(top_builddir)/config.status muttbug.sh.in
+       cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+Muttrc.head: $(top_builddir)/config.status Muttrc.head.in
+       cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+mostlyclean-binPROGRAMS:
+
+clean-binPROGRAMS:
+       -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+distclean-binPROGRAMS:
+
+maintainer-clean-binPROGRAMS:
+
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       $(mkinstalldirs) $(DESTDIR)$(bindir)
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         if test -f $$p; then \
+           echo "  $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+            $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+         else :; fi; \
+       done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       list='$(bin_PROGRAMS)'; for p in $$list; do \
+         rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+       done
+
+.c.o:
+       $(COMPILE) -c $<
+
+.s.o:
+       $(COMPILE) -c $<
+
+.S.o:
+       $(COMPILE) -c $<
+
+mostlyclean-compile:
+       -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+       -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+mutt_dotlock: $(mutt_dotlock_OBJECTS) $(mutt_dotlock_DEPENDENCIES)
+       @rm -f mutt_dotlock
+       $(LINK) $(mutt_dotlock_LDFLAGS) $(mutt_dotlock_OBJECTS) $(mutt_dotlock_LDADD) $(LIBS)
+
+pgpring: $(pgpring_OBJECTS) $(pgpring_DEPENDENCIES)
+       @rm -f pgpring
+       $(LINK) $(pgpring_LDFLAGS) $(pgpring_OBJECTS) $(pgpring_LDADD) $(LIBS)
+
+makedoc: $(makedoc_OBJECTS) $(makedoc_DEPENDENCIES)
+       @rm -f makedoc
+       $(LINK) $(makedoc_LDFLAGS) $(makedoc_OBJECTS) $(makedoc_LDADD) $(LIBS)
+
+mutt: $(mutt_OBJECTS) $(mutt_DEPENDENCIES)
+       @rm -f mutt
+       $(LINK) $(mutt_LDFLAGS) $(mutt_OBJECTS) $(mutt_LDADD) $(LIBS)
+
+install-binSCRIPTS: $(bin_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       $(mkinstalldirs) $(DESTDIR)$(bindir)
+       @list='$(bin_SCRIPTS)'; for p in $$list; do \
+         if test -f $$p; then \
+           echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \
+           $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
+         else if test -f $(srcdir)/$$p; then \
+           echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \
+           $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
+         else :; fi; fi; \
+       done
+
+uninstall-binSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       list='$(bin_SCRIPTS)'; for p in $$list; do \
+         rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
+       done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+
+@SET_MAKE@
+
+all-recursive install-data-recursive install-exec-recursive \
+installdirs-recursive install-recursive uninstall-recursive  \
+check-recursive installcheck-recursive info-recursive dvi-recursive:
+       @set fnord $(MAKEFLAGS); amf=$$2; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+          || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+       @set fnord $(MAKEFLAGS); amf=$$2; \
+       dot_seen=no; \
+       rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
+         rev="$$subdir $$rev"; \
+         test "$$subdir" = "." && dot_seen=yes; \
+       done; \
+       test "$$dot_seen" = "no" && rev=". $$rev"; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+          || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+       list='$(SOURCES) $(HEADERS)'; \
+       unique=`for i in $$list; do echo $$i; done | \
+         awk '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       here=`pwd` && cd $(srcdir) \
+         && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+   if test "$$subdir" = .; then :; else \
+           test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
+   fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)'; \
+       unique=`for i in $$list; do echo $$i; done | \
+         awk '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
+         || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+       -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       -rm -rf $(distdir)
+       GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
+       mkdir $(distdir)/=build
+       mkdir $(distdir)/=inst
+       dc_install_base=`cd $(distdir)/=inst && pwd`; \
+       cd $(distdir)/=build \
+         && ../configure --with-included-gettext --srcdir=.. --prefix=$$dc_install_base \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) dist
+       -rm -rf $(distdir)
+       @banner="$(distdir).tar.gz is ready for distribution"; \
+       dashes=`echo "$$banner" | sed s/./=/g`; \
+       echo "$$dashes"; \
+       echo "$$banner"; \
+       echo "$$dashes"
+dist: distdir
+       -chmod -R a+r $(distdir)
+       GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+       -rm -rf $(distdir)
+dist-all: distdir
+       -chmod -R a+r $(distdir)
+       GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+       -rm -rf $(distdir)
+distdir: $(DISTFILES)
+       -rm -rf $(distdir)
+       mkdir $(distdir)
+       -chmod 777 $(distdir)
+       @for file in $(DISTFILES); do \
+         d=$(srcdir); \
+         if test -d $$d/$$file; then \
+           cp -pr $$d/$$file $(distdir)/$$file; \
+         else \
+           test -f $(distdir)/$$file \
+           || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+           || cp -p $$d/$$file $(distdir)/$$file || :; \
+         fi; \
+       done
+       for subdir in $(DIST_SUBDIRS); do \
+         if test "$$subdir" = .; then :; else \
+           test -d $(distdir)/$$subdir \
+           || mkdir $(distdir)/$$subdir \
+           || exit 1; \
+           chmod 777 $(distdir)/$$subdir; \
+           (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
+             || exit 1; \
+         fi; \
+       done
+       $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook
+info-am:
+info: info-recursive
+dvi-am:
+dvi: dvi-recursive
+check-am: all-am
+check: check-recursive
+installcheck-am:
+installcheck: installcheck-recursive
+all-recursive-am: config.h
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+install-exec-am: install-binPROGRAMS install-binSCRIPTS \
+               install-exec-local
+install-exec: install-exec-recursive
+
+install-data-am: install-data-local
+install-data: install-data-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-recursive
+uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS
+uninstall: uninstall-recursive
+all-am: Makefile $(PROGRAMS) $(SCRIPTS) config.h
+all-redirect: all-recursive-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs: installdirs-recursive
+installdirs-am:
+       $(mkinstalldirs)  $(DESTDIR)$(bindir) $(DESTDIR)$(bindir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -rm -f Makefile $(CONFIG_CLEAN_FILES)
+       -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+mostlyclean-am:  mostlyclean-hdr mostlyclean-binPROGRAMS \
+               mostlyclean-compile mostlyclean-tags \
+               mostlyclean-generic
+
+mostlyclean: mostlyclean-recursive
+
+clean-am:  clean-hdr clean-binPROGRAMS clean-compile clean-tags \
+               clean-generic mostlyclean-am
+
+clean: clean-recursive
+
+distclean-am:  distclean-hdr distclean-binPROGRAMS distclean-compile \
+               distclean-tags distclean-generic clean-am
+
+distclean: distclean-recursive
+       -rm -f config.status
+
+maintainer-clean-am:  maintainer-clean-hdr maintainer-clean-binPROGRAMS \
+               maintainer-clean-compile maintainer-clean-tags \
+               maintainer-clean-generic distclean-am
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f config.status
+
+.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
+mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
+maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
+mostlyclean-compile distclean-compile clean-compile \
+maintainer-clean-compile uninstall-binSCRIPTS install-binSCRIPTS \
+install-data-recursive uninstall-data-recursive install-exec-recursive \
+uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
+all-recursive check-recursive installcheck-recursive info-recursive \
+dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
+maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
+distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
+dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \
+install-exec-local install-exec-am install-exec install-data-local \
+install-data-am install-data install-am install uninstall-am uninstall \
+all-redirect all-am all installdirs-am installdirs mostlyclean-generic \
+distclean-generic clean-generic maintainer-clean-generic clean \
+mostlyclean distclean maintainer-clean
+
+
+mutt_dotlock.c: dotlock.c
+       cp $(srcdir)/dotlock.c mutt_dotlock.c
+
+flea:  muttbug.sh
+       cp muttbug.sh flea
+       chmod +x flea
+
+smime_keys: $(srcdir)/smime_keys.pl
+       cp $(srcdir)/smime_keys.pl smime_keys
+       chmod +x smime_keys
+
+Makefile: $(BUILT_SOURCES)
+
+keymap_defs.h: $(OPS) $(srcdir)/gen_defs
+       $(srcdir)/gen_defs $(OPS) > keymap_defs.h
+
+keymap_alldefs.h: $(srcdir)/OPS $(srcdir)/OPS.PGP $(srcdir)/OPS.MIX $(srcdir)/OPS.CRYPT $(srcdir)/OPS.SMIME $(srcdir)/gen_defs
+       $(srcdir)/gen_defs $(srcdir)/OPS $(srcdir)/OPS.PGP \
+               $(srcdir)/OPS.MIX $(srcdir)/OPS.CRYPT $(srcdir)/OPS.SMIME \
+                       > keymap_alldefs.h
+
+reldate:
+       echo 'const char *ReleaseDate = "'`date +%Y-%m-%d`'";' > $(srcdir)/reldate.h
+
+patchlist.c: $(srcdir)/PATCHES $(srcdir)/patchlist.sh
+       $(srcdir)/patchlist.sh < $(srcdir)/PATCHES > patchlist.c
+
+install-exec-local:
+       if test -f $(DESTDIR)$(bindir)/mutt.dotlock && test -f $(DESTDIR)$(bindir)/mutt_dotlock ; then  \
+               rm -f $(DESTDIR)$(bindir)/mutt.dotlock ;                \
+               ln -sf $(DESTDIR)$(bindir)/mutt_dotlock $(DESTDIR)$(bindir)/mutt.dotlock ; \
+       fi
+       if test -f $(DESTDIR)$(bindir)/mutt_dotlock && test x@DOTLOCK_GROUP@ != x ; then \
+               chgrp @DOTLOCK_GROUP@ $(DESTDIR)$(bindir)/mutt_dotlock && \
+               chmod @DOTLOCK_PERMISSION@ $(DESTDIR)$(bindir)/mutt_dotlock || \
+               { echo "Can't fix mutt_dotlock's permissions!" >&2 ; exit 1 ; } \
+       fi
+
+install-data-local: Muttrc
+       $(srcdir)/mkinstalldirs $(DESTDIR)$(sysconfdir)
+       -if [ -f $(DESTDIR)$(pkgdatadir)/Muttrc ] ; then \
+               mv $(DESTDIR)$(pkgdatadir)/Muttrc* $(DESTDIR)$(sysconfdir) ; \
+       elif [ -f $(DESTDIR)$(pkgdatadir)/../Muttrc ] ; then \
+               mv $(DESTDIR)$(pkgdatadir)/../Muttrc* $(DESTDIR)$(sysconfdir) ; \
+       elif [ ! -f $(DESTDIR)$(sysconfdir)/Muttrc ] ; then \
+               $(INSTALL) -m 644 $(srcdir)/Muttrc $(DESTDIR)$(sysconfdir) ; \
+       fi
+       -if [ ! -f $(DESTDIR)$(sysconfdir)/mime.types ]; then \
+               $(INSTALL) -m 644 $(srcdir)/mime.types $(DESTDIR)$(sysconfdir); \
+       fi
+
+# Don't make this one ChangeLog - it's intended to be
+# used manually.
+
+pclean:
+       cat /dev/null > PATCHES
+
+check-security:
+       ./check_sec.sh
+
+commit-real:
+       cvs commit
+
+commit-changelog:
+       cvs commit -m "# changelog commit" ChangeLog
+
+commit: pclean check-security commit-real changelog commit-changelog
+
+changelog:
+       cvs update ChangeLog
+       sh ./mkchangelog.sh | fmt -c | cat  - ChangeLog > ChangeLog.$$$$ && mv ChangeLog.$$$$ ChangeLog
+       $${VISUAL:-vi} ChangeLog
+
+ChangeLog: changelog
+
+# kluge around automake problems.
+
+dist-hook:
+       -for file in $(BUILT_SOURCES) ; do rm -f $(distdir)/$$file ; done
+
+mutt-dist:
+       (cd $(srcdir) && ./build-release )
+
+update-doc: stamp-doc-rc
+       (cd doc && $(MAKE) update-doc)
+
+Muttrc: stamp-doc-rc
+
+stamp-doc-rc: $(srcdir)/init.h makedoc Muttrc.head
+       -rm -f Muttrc stamp-doc-rc
+       $(CPP) $(INCLUDES) $(DEFS) $(CPPFLAGS) -D_MAKEDOC -C \
+               $(srcdir)/init.h | ./makedoc -c | cat Muttrc.head - > Muttrc
+       touch stamp-doc-rc
+
+.PHONY: commit pclean check-security commit-real commit-changelog
+.PHONY: changelog ChangeLog
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/Muttrc b/Muttrc
new file mode 100644 (file)
index 0000000..73ee36c
--- /dev/null
+++ b/Muttrc
@@ -0,0 +1,4116 @@
+#
+# System configuration file for Mutt
+#
+
+# default list of header fields to weed when displaying
+#
+ignore "from " received content- mime-version status x-status message-id
+ignore sender references return-path lines
+
+# imitate the old search-body function
+macro index \eb '/~b ' 'search in message bodies'
+
+# simulate the old url menu
+macro index \cb |urlview\n 'call urlview to extract URLs out of a message'
+macro pager \cb |urlview\n 'call urlview to extract URLs out of a message'
+
+# Show documentation when pressing F1
+macro generic <f1> "!less /usr/local/doc/mutt/manual.txt\n" "Show Mutt documentation"
+macro index   <f1> "!less /usr/local/doc/mutt/manual.txt\n" "Show Mutt documentation"
+macro pager   <f1> "!less /usr/local/doc/mutt/manual.txt\n" "Show Mutt documentation"
+
+# If Mutt is unable to determine your site's domain name correctly, you can
+# set the default here.
+#
+# set hostname=cs.hmc.edu
+
+# If your sendmail supports the -B8BITMIME flag, enable the following
+#
+# set use_8bitmime
+
+##
+## More settings
+##
+
+
+# set abort_nosubject=ask-yes
+#
+# Name: abort_nosubject
+# Type: quadoption
+# Default: ask-yes
+# 
+# 
+# If set to yes, when composing messages and no subject is given
+# at the subject prompt, composition will be aborted.  If set to
+# no, composing messages with no subject given at the subject
+# prompt will never be aborted.
+# 
+# 
+# set abort_unmodified=yes
+#
+# Name: abort_unmodified
+# Type: quadoption
+# Default: yes
+# 
+# 
+# If set to yes, composition will automatically abort after
+# editing the message body if no changes are made to the file (this
+# check only happens after the first edit of the file).  When set
+# to no, composition will never be aborted.
+# 
+# 
+# set alias_file="~/.muttrc"
+#
+# Name: alias_file
+# Type: path
+# Default: "~/.muttrc"
+# 
+# 
+# The default file in which to save aliases created by the 
+# ``create-alias'' function.
+# 
+# Note: Mutt will not automatically source this file; you must
+# explicitly use the ``source'' command for it to be executed.
+# 
+# 
+# set alias_format="%4n %2f %t %-10a   %r"
+#
+# Name: alias_format
+# Type: string
+# Default: "%4n %2f %t %-10a   %r"
+# 
+# 
+# Specifies the format of the data displayed for the `alias' menu.  The
+# following printf(3)-style sequences are available:
+# 
+# %a      alias name
+# %f      flags - currently, a "d" for an alias marked for deletion
+# %n      index number
+# %r      address which alias expands to
+# %t      character which indicates if the alias is tagged for inclusion
+# 
+# 
+# set allow_8bit=yes
+#
+# Name: allow_8bit
+# Type: boolean
+# Default: yes
+# 
+# 
+# Controls whether 8-bit data is converted to 7-bit using either Quoted-
+# Printable or Base64 encoding when sending mail.
+# 
+# 
+# set allow_ansi=no
+#
+# Name: allow_ansi
+# Type: boolean
+# Default: no
+# 
+# 
+# Controls whether ANSI color codes in messages (and color tags in 
+# rich text messages) are to be interpreted.
+# Messages containing these codes are rare, but if this option is set,
+# their text will be colored accordingly. Note that this may override
+# your color choices, and even present a security problem, since a
+# message could include a line like "[-- PGP output follows ..." and
+# give it the same color as your attachment color.
+# 
+# 
+# set arrow_cursor=no
+#
+# Name: arrow_cursor
+# Type: boolean
+# Default: no
+# 
+# 
+# When set, an arrow (``->'') will be used to indicate the current entry
+# in menus instead of highlighting the whole line.  On slow network or modem
+# links this will make response faster because there is less that has to
+# be redrawn on the screen when moving to the next or previous entries
+# in the menu.
+# 
+# 
+# set ascii_chars=no
+#
+# Name: ascii_chars
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, Mutt will use plain ASCII characters when displaying thread
+# and attachment trees, instead of the default ACS characters.
+# 
+# 
+# set askbcc=no
+#
+# Name: askbcc
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, Mutt will prompt you for blind-carbon-copy (Bcc) recipients
+# before editing an outgoing message.
+# 
+# 
+# set askcc=no
+#
+# Name: askcc
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, Mutt will prompt you for carbon-copy (Cc) recipients before
+# editing the body of an outgoing message.
+# 
+# 
+# set ask_follow_up=no
+#
+# Name: ask_follow_up
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, Mutt will prompt you for follow-up groups before editing
+# the body of an outgoing message.
+# 
+# 
+# set ask_x_comment_to=no
+#
+# Name: ask_x_comment_to
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, Mutt will prompt you for x-comment-to field before editing
+# the body of an outgoing message.
+# 
+# 
+# set attach_format="%u%D%I %t%4n %T%.40d%> [%.7m/%.10M, %.6e%?C?, %C?, %s] "
+#
+# Name: attach_format
+# Type: string
+# Default: "%u%D%I %t%4n %T%.40d%> [%.7m/%.10M, %.6e%?C?, %C?, %s] "
+# 
+# 
+# This variable describes the format of the `attachment' menu.  The
+# following printf-style sequences are understood:
+# 
+# %C      charset
+# %c      reqiures charset conversion (n or c)
+# %D      deleted flag
+# %d      description
+# %e      MIME content-transfer-encoding
+# %f      filename
+# %I      disposition (I=inline, A=attachment)
+# %m      major MIME type
+# %M      MIME subtype
+# %n      attachment number
+# %s      size
+# %t      tagged flag
+# %T      graphic tree characters
+# %u      unlink (=to delete) flag
+# %>X     right justify the rest of the string and pad with character "X"
+# %|X     pad to the end of the line with character "X"
+# 
+# 
+# set attach_sep="\n"
+#
+# Name: attach_sep
+# Type: string
+# Default: "\n"
+# 
+# 
+# The separator to add between attachments when operating (saving,
+# printing, piping, etc) on a list of tagged attachments.
+# 
+# 
+# set attach_split=yes
+#
+# Name: attach_split
+# Type: boolean
+# Default: yes
+# 
+# 
+# If this variable is unset, when operating (saving, printing, piping,
+# etc) on a list of tagged attachments, Mutt will concatenate the
+# attachments and will operate on them as a single attachment. The
+# ``$attach_sep'' separator is added after each attachment. When set,
+# Mutt will operate on the attachments one by one.
+# 
+# 
+# set attribution="On %d, %n wrote:"
+#
+# Name: attribution
+# Type: string
+# Default: "On %d, %n wrote:"
+# 
+# 
+# This is the string that will precede a message which has been included
+# in a reply.  For a full listing of defined printf()-like sequences see
+# the section on ``$index_format''.
+# 
+# 
+# set autoedit=no
+#
+# Name: autoedit
+# Type: boolean
+# Default: no
+# 
+# 
+# When set along with ``$edit_headers'', Mutt will skip the initial
+# send-menu and allow you to immediately begin editing the body of your
+# message.  The send-menu may still be accessed once you have finished
+# editing the body of your message.
+# 
+# Also see ``$fast_reply''.
+# 
+# 
+# set auto_tag=no
+#
+# Name: auto_tag
+# Type: boolean
+# Default: no
+# 
+# 
+# When set, functions in the index menu which affect a message
+# will be applied to all tagged messages (if there are any).  When
+# unset, you must first use the tag-prefix function (default: ";") to
+# make the next function apply to all tagged messages.
+# 
+# 
+# set beep=yes
+#
+# Name: beep
+# Type: boolean
+# Default: yes
+# 
+# 
+# When this variable is set, mutt will beep when an error occurs.
+# 
+# 
+# set beep_new=no
+#
+# Name: beep_new
+# Type: boolean
+# Default: no
+# 
+# 
+# When this variable is set, mutt will beep whenever it prints a message
+# notifying you of new mail.  This is independent of the setting of the
+# ``$beep'' variable.
+# 
+# 
+# set bounce=ask-yes
+#
+# Name: bounce
+# Type: quadoption
+# Default: ask-yes
+# 
+# 
+# Controls whether you will be asked to confirm bouncing messages.
+# If set to yes you don't get asked if you want to bounce a
+# message. Setting this variable to no is not generally useful,
+# and thus not recommended, because you are unable to bounce messages.
+# 
+# 
+# set bounce_delivered=yes
+#
+# Name: bounce_delivered
+# Type: boolean
+# Default: yes
+# 
+# 
+# When this variable is set, mutt will include Delivered-To headers when
+# bouncing messages.  Postfix users may wish to unset this variable.
+# 
+# 
+# set catchup_newsgroup=ask-yes
+#
+# Name: catchup_newsgroup
+# Type: quadoption
+# Default: ask-yes
+# 
+# 
+# If this variable is set, Mutt will mark all articles in newsgroup
+# as read when you quit the newsgroup (catchup newsgroup).
+# 
+# 
+# set charset=""
+#
+# Name: charset
+# Type: string
+# Default: ""
+# 
+# 
+# Character set your terminal uses to display and enter textual data.
+# 
+# 
+# set check_new=yes
+#
+# Name: check_new
+# Type: boolean
+# Default: yes
+# 
+# 
+# Note: this option only affects maildir and MH style
+# mailboxes.
+# 
+# When set, Mutt will check for new mail delivered while the
+# mailbox is open.  Especially with MH mailboxes, this operation can
+# take quite some time since it involves scanning the directory and
+# checking each file to see if it has already been looked at.  If
+# check_new is unset, no check for new mail is performed
+# while the mailbox is open.
+# 
+# 
+# set collapse_unread=yes
+#
+# Name: collapse_unread
+# Type: boolean
+# Default: yes
+# 
+# 
+# When unset, Mutt will not collapse a thread if it contains any
+# unread messages.
+# 
+# 
+# set uncollapse_jump=no
+#
+# Name: uncollapse_jump
+# Type: boolean
+# Default: no
+# 
+# 
+# When set, Mutt will jump to the next unread message, if any,
+# when the current thread is uncollapsed.
+# 
+# 
+# set compose_format="-- Mutt: Compose  [Approx. msg size: %l   Atts: %a]%>-"
+#
+# Name: compose_format
+# Type: string
+# Default: "-- Mutt: Compose  [Approx. msg size: %l   Atts: %a]%>-"
+# 
+# 
+# Controls the format of the status line displayed in the \fCompose
+# menu.  This string is similar to ``$status_format'', but has its own
+# set of printf()-like sequences:
+# 
+# %a      total number of attachments 
+# %h      local hostname
+# %l      approximate size (in bytes) of the current message
+# %v      Mutt version string
+# 
+# 
+# See the text describing the ``$status_format'' option for more 
+# information on how to set ``$compose_format''.
+# 
+# 
+# set confirmappend=yes
+#
+# Name: confirmappend
+# Type: boolean
+# Default: yes
+# 
+# 
+# When set, Mutt will prompt for confirmation when appending messages to
+# an existing mailbox.
+# 
+# 
+# set confirmcreate=yes
+#
+# Name: confirmcreate
+# Type: boolean
+# Default: yes
+# 
+# 
+# When set, Mutt will prompt for confirmation when saving messages to a
+# mailbox which does not yet exist before creating it.
+# 
+# 
+# set connect_timeout=30
+#
+# Name: connect_timeout
+# Type: number
+# Default: 30
+# 
+# 
+# Causes Mutt to timeout a network connection (for IMAP or POP) after this
+# many seconds if the connection is not able to be established.  A negative
+# value causes Mutt to wait indefinitely for the connection to succeed.
+# 
+# 
+# set content_type="text/plain"
+#
+# Name: content_type
+# Type: string
+# Default: "text/plain"
+# 
+# 
+# Sets the default Content-Type for the body of newly composed messages.
+# 
+# 
+# set copy=yes
+#
+# Name: copy
+# Type: quadoption
+# Default: yes
+# 
+# 
+# This variable controls whether or not copies of your outgoing messages
+# will be saved for later references.  Also see ``$record'',
+# ``$save_name'', ``$force_name'' and ``fcc-hook''.
+# 
+# 
+# set crypt_autopgp=yes
+#
+# Name: crypt_autopgp
+# Type: boolean
+# Default: yes
+# 
+# 
+# This variable controls whether or not mutt may automatically enable
+# PGP encryption/signing for messages.  See also ``$crypt_autoencrypt'',
+# ``$crypt_replyencrypt'',
+# ``$crypt_autosign'', ``$crypt_replysign'' and ``$smime_is_default''.
+# 
+# 
+# set crypt_autosmime=yes
+#
+# Name: crypt_autosmime
+# Type: boolean
+# Default: yes
+# 
+# 
+# This variable controls whether or not mutt may automatically enable
+# S/MIME encryption/signing for messages. See also ``$crypt_autoencrypt'',
+# ``$crypt_replyencrypt'',
+# ``$crypt_autosign'', ``$crypt_replysign'' and ``$smime_is_default''.
+# 
+# 
+# set date_format="!%a, %b %d, %Y at %I:%M:%S%p %Z"
+#
+# Name: date_format
+# Type: string
+# Default: "!%a, %b %d, %Y at %I:%M:%S%p %Z"
+# 
+# 
+# This variable controls the format of the date printed by the ``%d''
+# sequence in ``$index_format''.  This is passed to the strftime
+# call to process the date. See the man page for strftime(3) for
+# the proper syntax.
+# 
+# Unless the first character in the string is a bang (``!''), the month
+# and week day names are expanded according to the locale specified in
+# the variable ``$locale''. If the first character in the string is a
+# bang, the bang is discarded, and the month and week day names in the
+# rest of the string are expanded in the C locale (that is in US
+# English).
+# 
+# 
+# set default_hook="~f %s !~P | (~P ~C %s)"
+#
+# Name: default_hook
+# Type: string
+# Default: "~f %s !~P | (~P ~C %s)"
+# 
+# 
+# This variable controls how send-hooks, message-hooks, save-hooks,
+# and fcc-hooks will
+# be interpreted if they are specified with only a simple regexp,
+# instead of a matching pattern.  The hooks are expanded when they are
+# declared, so a hook will be interpreted according to the value of this
+# variable at the time the hook is declared.  The default value matches
+# if the message is either from a user matching the regular expression
+# given, or if it is from you (if the from address matches
+# ``alternates'') and is to or cc'ed to a user matching the given
+# regular expression.
+# 
+# 
+# set delete=ask-yes
+#
+# Name: delete
+# Type: quadoption
+# Default: ask-yes
+# 
+# 
+# Controls whether or not messages are really deleted when closing or
+# synchronizing a mailbox.  If set to yes, messages marked for
+# deleting will automatically be purged without prompting.  If set to
+# no, messages marked for deletion will be kept in the mailbox.
+# 
+# 
+# set delete_untag=yes
+#
+# Name: delete_untag
+# Type: boolean
+# Default: yes
+# 
+# 
+# If this option is set, mutt will untag messages when marking them
+# for deletion.  This applies when you either explicitly delete a message,
+# or when you save it to another folder.
+# 
+# 
+# set digest_collapse=yes
+#
+# Name: digest_collapse
+# Type: boolean
+# Default: yes
+# 
+# 
+# If this option is set, mutt's revattach menu will not show the subparts of
+# individual messages in a digest.  To see these subparts, press 'v' on that menu.
+# 
+# 
+# set display_filter=""
+#
+# Name: display_filter
+# Type: path
+# Default: ""
+# 
+# 
+# When set, specifies a command used to filter messages.  When a message
+# is viewed it is passed as standard input to $display_filter, and the
+# filtered message is read from the standard output.
+# 
+# 
+# set dotlock_program="/usr/local/bin/mutt_dotlock"
+#
+# Name: dotlock_program
+# Type: path
+# Default: "/usr/local/bin/mutt_dotlock"
+# 
+# 
+# Contains the path of the mutt_dotlock (8) binary to be used by
+# mutt.
+# 
+# 
+# set dsn_notify=""
+#
+# Name: dsn_notify
+# Type: string
+# Default: ""
+# 
+# 
+# Note: you should not enable this unless you are using Sendmail
+# 8.8.x or greater.
+# 
+# This variable sets the request for when notification is returned.  The
+# string consists of a comma separated list (no spaces!) of one or more
+# of the following: never, to never request notification,
+# failure, to request notification on transmission failure,
+# delay, to be notified of message delays, success, to be
+# notified of successful transmission.
+# 
+# Example: set dsn_notify="failure,delay"
+# 
+# 
+# set dsn_return=""
+#
+# Name: dsn_return
+# Type: string
+# Default: ""
+# 
+# 
+# Note: you should not enable this unless you are using Sendmail
+# 8.8.x or greater.
+# 
+# This variable controls how much of your message is returned in DSN
+# messages.  It may be set to either hdrs to return just the
+# message header, or full to return the full message.
+# 
+# Example: set dsn_return=hdrs
+# 
+# 
+# set duplicate_threads=yes
+#
+# Name: duplicate_threads
+# Type: boolean
+# Default: yes
+# 
+# 
+# This variable controls whether mutt, when sorting by threads, threads
+# messages with the same message-id together.  If it is set, it will indicate
+# that it thinks they are duplicates of each other with an equals sign
+# in the thread diagram.
+# 
+# 
+# set edit_headers=no
+#
+# Name: edit_headers
+# Type: boolean
+# Default: no
+# 
+# 
+# This option allows you to edit the header of your outgoing messages
+# along with the body of your message.
+# 
+# 
+# set editor=""
+#
+# Name: editor
+# Type: path
+# Default: ""
+# 
+# 
+# This variable specifies which editor is used by mutt.
+# It defaults to the value of the VISUAL, or EDITOR, environment
+# variable, or to the string "vi" if neither of those are set.
+# 
+# 
+# set encode_from=no
+#
+# Name: encode_from
+# Type: boolean
+# Default: no
+# 
+# 
+# When set, mutt will quoted-printable encode messages when
+# they contain the string "From " in the beginning of a line.
+# Useful to avoid the tampering certain mail delivery and transport
+# agents tend to do with messages.
+# 
+# 
+# set envelope_from=no
+#
+# Name: envelope_from
+# Type: boolean
+# Default: no
+# 
+# 
+# When set, mutt will try to derive the message's envelope
+# sender from the "From:" header.  Note that this information is passed 
+# to sendmail command using the "-f" command line switch, so don't set this
+# option if you are using that switch in $sendmail yourself,
+# or if the sendmail on your machine doesn't support that command
+# line switch.
+# 
+# 
+# set escape="~"
+#
+# Name: escape
+# Type: string
+# Default: "~"
+# 
+# 
+# Escape character to use for functions in the builtin editor.
+# 
+# 
+# set fast_reply=no
+#
+# Name: fast_reply
+# Type: boolean
+# Default: no
+# 
+# 
+# When set, the initial prompt for recipients and subject are skipped
+# when replying to messages, and the initial prompt for subject is
+# skipped when forwarding messages.
+# 
+# Note: this variable has no effect when the ``$autoedit''
+# variable is set.
+# 
+# 
+# set fcc_attach=yes
+#
+# Name: fcc_attach
+# Type: boolean
+# Default: yes
+# 
+# 
+# This variable controls whether or not attachments on outgoing messages
+# are saved along with the main body of your message.
+# 
+# 
+# set fcc_clear=no
+#
+# Name: fcc_clear
+# Type: boolean
+# Default: no
+# 
+# 
+# When this variable is set, FCCs will be stored unencrypted and
+# unsigned, even when the actual message is encrypted and/or
+# signed.
+# (PGP only)
+# 
+# 
+# set folder="~/Mail"
+#
+# Name: folder
+# Type: path
+# Default: "~/Mail"
+# 
+# 
+# Specifies the default location of your mailboxes.  A `+' or `=' at the
+# beginning of a pathname will be expanded to the value of this
+# variable.  Note that if you change this variable from the default
+# value you need to make sure that the assignment occurs before
+# you use `+' or `=' for any other variables since expansion takes place
+# during the `set' command.
+# 
+# 
+# set folder_format="%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f"
+#
+# Name: folder_format
+# Type: string
+# Default: "%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f"
+# 
+# 
+# This variable allows you to customize the file browser display to your
+# personal taste.  This string is similar to ``$index_format'', but has
+# its own set of printf()-like sequences:
+# 
+# %C      current file number
+# %d      date/time folder was last modified
+# %f      filename
+# %F      file permissions
+# %g      group name (or numeric gid, if missing)
+# %l      number of hard links
+# %N      N if folder has new mail, blank otherwise
+# %s      size in bytes
+# %t      * if the file is tagged, blank otherwise
+# %u      owner name (or numeric uid, if missing)
+# %>X     right justify the rest of the string and pad with character "X"
+# %|X     pad to the end of the line with character "X"
+# 
+# 
+# set followup_to=yes
+#
+# Name: followup_to
+# Type: boolean
+# Default: yes
+# 
+# 
+# Controls whether or not the Mail-Followup-To header field is
+# generated when sending mail.  When set, Mutt will generate this
+# field when you are replying to a known mailing list, specified with
+# the ``subscribe'' or ``lists'' commands.
+# 
+# This field has two purposes.  First, preventing you from
+# receiving duplicate copies of replies to messages which you send
+# to mailing lists, and second, ensuring that you do get a reply
+# separately for any messages sent to known lists to which you are
+# not subscribed.  The header will contain only the list's address
+# for subscribed lists, and both the list address and your own
+# email address for unsubscribed lists.  Without this header, a
+# group reply to your message sent to a subscribed list will be
+# sent to both the list and your address, resulting in two copies
+# of the same email for you.
+# 
+# 
+# set followup_to_poster=ask-yes
+#
+# Name: followup_to_poster
+# Type: quadoption
+# Default: ask-yes
+# 
+# 
+# If this variable is set and the keyword "poster" is present in
+# Followup-To header, follow-up to newsgroup function is not
+# permitted.  The message will be mailed to the submitter of the
+# message via mail.
+# 
+# 
+# set force_name=no
+#
+# Name: force_name
+# Type: boolean
+# Default: no
+# 
+# 
+# This variable is similar to ``$save_name'', except that Mutt will
+# store a copy of your outgoing message by the username of the address
+# you are sending to even if that mailbox does not exist.
+# 
+# Also see the ``$record'' variable.
+# 
+# 
+# set forward_decode=yes
+#
+# Name: forward_decode
+# Type: boolean
+# Default: yes
+# 
+# 
+# Controls the decoding of complex MIME messages into text/plain when
+# forwarding a message.  The message header is also RFC2047 decoded.
+# This variable is only used, if ``$mime_forward'' is unset,
+# otherwise ``$mime_forward_decode'' is used instead.
+# 
+# 
+# set forward_edit=yes
+#
+# Name: forward_edit
+# Type: quadoption
+# Default: yes
+# 
+# 
+# This quadoption controls whether or not the user is automatically
+# placed in the editor when forwarding messages.  For those who always want
+# to forward with no modification, use a setting of ``no''.
+# 
+# 
+# set forward_format="[%a: %s]"
+#
+# Name: forward_format
+# Type: string
+# Default: "[%a: %s]"
+# 
+# 
+# This variable controls the default subject when forwarding a message.
+# It uses the same format sequences as the ``$index_format'' variable.
+# 
+# 
+# set forward_quote=no
+#
+# Name: forward_quote
+# Type: boolean
+# Default: no
+# 
+# 
+# When set forwarded messages included in the main body of the
+# message (when ``$mime_forward'' is unset) will be quoted using
+# ``$indent_string''.
+# 
+# 
+# set from=""
+#
+# Name: from
+# Type: e-mail address
+# Default: ""
+# 
+# 
+# When set, this variable contains a default from address.  It
+# can be overridden using my_hdr (including from send-hooks) and
+# ``$reverse_name''.  This variable is ignored if ``$use_from''
+# is unset.
+# 
+# Defaults to the contents of the environment variable EMAIL.
+# 
+# 
+# set gecos_mask="^[^,]*"
+#
+# Name: gecos_mask
+# Type: regular expression
+# Default: "^[^,]*"
+# 
+# 
+# A regular expression used by mutt to parse the GECOS field of a password
+# entry when expanding the alias.  By default the regular expression is set
+# to "^[^,]*" which will return the string up to the first "," encountered.
+# If the GECOS field contains a string like "lastname, firstname" then you
+# should set the gecos_mask=".*".
+# 
+# This can be useful if you see the following behavior: you address a e-mail
+# to user ID stevef whose full name is Steve Franklin.  If mutt expands 
+# stevef to "Franklin" stevef@foo.bar then you should set the gecos_mask to
+# a regular expression that will match the whole name so mutt will expand
+# "Franklin" to "Franklin, Steve".
+# 
+# 
+# set group_index_format="%4C %M%N %5s  %-45.45f %d"
+#
+# Name: group_index_format
+# Type: string
+# Default: "%4C %M%N %5s  %-45.45f %d"
+# 
+# 
+# This variable allows you to customize the newsgroup browser display to
+# your personal taste.  This string is similar to ``index_format'', but
+# has its own set of printf()-like sequences:
+# 
+# %C      current newsgroup number
+# %d      description of newsgroup (becomes from server)
+# %f      newsgroup name
+# %M      - if newsgroup not allowed for direct post (moderated for example)
+# %N      N if newsgroup is new, u if unsubscribed, blank otherwise
+# %n      number of new articles in newsgroup
+# %s      number of unread articles in newsgroup
+# %>X     right justify the rest of the string and pad with character "X"
+# %|X     pad to the end of the line with character "X"
+# 
+# 
+# set hdrs=yes
+#
+# Name: hdrs
+# Type: boolean
+# Default: yes
+# 
+# 
+# When unset, the header fields normally added by the ``my_hdr''
+# command are not created.  This variable must be unset before
+# composing a new message or replying in order to take effect.  If set,
+# the user defined header fields are added to every new message.
+# 
+# 
+# set header=no
+#
+# Name: header
+# Type: boolean
+# Default: no
+# 
+# 
+# When set, this variable causes Mutt to include the header
+# of the message you are replying to into the edit buffer.
+# The ``$weed'' setting applies.
+# 
+# 
+# set help=yes
+#
+# Name: help
+# Type: boolean
+# Default: yes
+# 
+# 
+# When set, help lines describing the bindings for the major functions
+# provided by each menu are displayed on the first line of the screen.
+# 
+# Note: The binding will not be displayed correctly if the
+# function is bound to a sequence rather than a single keystroke.  Also,
+# the help line may not be updated if a binding is changed while Mutt is
+# running.  Since this variable is primarily aimed at new users, neither
+# of these should present a major problem.
+# 
+# 
+# set hidden_host=no
+#
+# Name: hidden_host
+# Type: boolean
+# Default: no
+# 
+# 
+# When set, mutt will skip the host name part of ``$hostname'' variable
+# when adding the domain part to addresses.  This variable does not
+# affect the generation of Message-IDs, and it will not lead to the 
+# cut-off of first-level domains.
+# 
+# 
+# set hide_limited=no
+#
+# Name: hide_limited
+# Type: boolean
+# Default: no
+# 
+# 
+# When set, mutt will not show the presence of messages that are hidden
+# by limiting, in the thread tree.
+# 
+# 
+# set hide_missing=yes
+#
+# Name: hide_missing
+# Type: boolean
+# Default: yes
+# 
+# 
+# When set, mutt will not show the presence of missing messages in the
+# thread tree.
+# 
+# 
+# set hide_top_limited=no
+#
+# Name: hide_top_limited
+# Type: boolean
+# Default: no
+# 
+# 
+# When set, mutt will not show the presence of messages that are hidden
+# by limiting, at the top of threads in the thread tree.  Note that when
+# $hide_missing is set, this option will have no effect.
+# 
+# 
+# set hide_top_missing=yes
+#
+# Name: hide_top_missing
+# Type: boolean
+# Default: yes
+# 
+# 
+# When set, mutt will not show the presence of missing messages at the
+# top of threads in the thread tree.  Note that when $hide_limited is
+# set, this option will have no effect.
+# 
+# 
+# set history=10
+#
+# Name: history
+# Type: number
+# Default: 10
+# 
+# 
+# This variable controls the size (in number of strings remembered) of
+# the string history buffer. The buffer is cleared each time the
+# variable is set.
+# 
+# 
+# set honor_followup_to=yes
+#
+# Name: honor_followup_to
+# Type: quadoption
+# Default: yes
+# 
+# 
+# This variable controls whether or not a Mail-Followup-To header is
+# honored when group-replying to a message.
+# 
+# 
+# set hostname=""
+#
+# Name: hostname
+# Type: string
+# Default: ""
+# 
+# 
+# Specifies the hostname to use after the ``@'' in local e-mail
+# addresses.  This overrides the compile time definition obtained from
+# /etc/resolv.conf.
+# 
+# 
+# set ignore_list_reply_to=no
+#
+# Name: ignore_list_reply_to
+# Type: boolean
+# Default: no
+# 
+# 
+# Affects the behaviour of the reply function when replying to
+# messages from mailing lists.  When set, if the ``Reply-To:'' field is
+# set to the same value as the ``To:'' field, Mutt assumes that the
+# ``Reply-To:'' field was set by the mailing list to automate responses
+# to the list, and will ignore this field.  To direct a response to the
+# mailing list when this option is set, use the list-reply
+# function; group-reply will reply to both the sender and the
+# list.
+# 
+# 
+# set imap_authenticators=""
+#
+# Name: imap_authenticators
+# Type: string
+# Default: ""
+# 
+# 
+# This is a colon-delimited list of authentication methods mutt may
+# attempt to use to log in to an IMAP server, in the order mutt should
+# try them.  Authentication methods are either 'login' or the right
+# side of an IMAP 'AUTH=xxx' capability string, eg 'digest-md5',
+# 'gssapi' or 'cram-md5'. This parameter is case-insensitive. If this
+# parameter is unset (the default) mutt will try all available methods,
+# in order from most-secure to least-secure.
+# 
+# Example: set imap_authenticators="gssapi:cram-md5:login"
+# 
+# Note: Mutt will only fall back to other authentication methods if
+# the previous methods are unavailable. If a method is available but
+# authentication fails, mutt will not connect to the IMAP server.
+# 
+# 
+# set imap_delim_chars="/."
+#
+# Name: imap_delim_chars
+# Type: string
+# Default: "/."
+# 
+# 
+# This contains the list of characters which you would like to treat
+# as folder separators for displaying IMAP paths. In particular it
+# helps in using the '=' shortcut for your folder variable.
+# 
+# 
+# set imap_force_ssl=no
+#
+# Name: imap_force_ssl
+# Type: boolean
+# Default: no
+# 
+# 
+# If this variable is set, Mutt will always use SSL when
+# connecting to IMAP servers.
+# 
+# 
+# set imap_home_namespace=""
+#
+# Name: imap_home_namespace
+# Type: string
+# Default: ""
+# 
+# 
+# You normally want to see your personal folders alongside
+# your INBOX in the IMAP browser. If you see something else, you may set
+# this variable to the IMAP path to your folders.
+# 
+# 
+# set imap_keepalive=900
+#
+# Name: imap_keepalive
+# Type: number
+# Default: 900
+# 
+# 
+# This variable specifies the maximum amount of time in seconds that mutt
+# will wait before polling open IMAP connections, to prevent the server
+# from closing them before mutt has finished with them. The default is
+# well within the RFC-specified minimum amount of time (30 minutes) before
+# a server is allowed to do this, but in practice the RFC does get
+# violated every now and then. Reduce this number if you find yourself
+# getting disconnected from your IMAP server due to inactivity.
+# 
+# 
+# set imap_list_subscribed=no
+#
+# Name: imap_list_subscribed
+# Type: boolean
+# Default: no
+# 
+# 
+# This variable configures whether IMAP folder browsing will look for
+# only subscribed folders or all folders.  This can be toggled in the
+# IMAP browser with the toggle-subscribed function.
+# 
+# 
+# set imap_pass=""
+#
+# Name: imap_pass
+# Type: string
+# Default: ""
+# 
+# 
+# Specifies the password for your IMAP account.  If unset, Mutt will
+# prompt you for your password when you invoke the fetch-mail function.
+# Warning: you should only use this option when you are on a
+# fairly secure machine, because the superuser can read your muttrc even
+# if you are the only one who can read the file.
+# 
+# 
+# set imap_passive=yes
+#
+# Name: imap_passive
+# Type: boolean
+# Default: yes
+# 
+# 
+# When set, mutt will not open new IMAP connections to check for new
+# mail.  Mutt will only check for new mail over existing IMAP
+# connections.  This is useful if you don't want to be prompted to
+# user/password pairs on mutt invocation, or if opening the connection
+# is slow.
+# 
+# 
+# set imap_peek=yes
+#
+# Name: imap_peek
+# Type: boolean
+# Default: yes
+# 
+# 
+# If set, mutt will avoid implicitly marking your mail as read whenever
+# you fetch a message from the server. This is generally a good thing,
+# but can make closing an IMAP folder somewhat slower. This option
+# exists to appease speed freaks.
+# 
+# 
+# set imap_servernoise=yes
+#
+# Name: imap_servernoise
+# Type: boolean
+# Default: yes
+# 
+# 
+# When set, mutt will display warning messages from the IMAP
+# server as error messages. Since these messages are often
+# harmless, or generated due to configuration problems on the
+# server which are out of the users' hands, you may wish to suppress
+# them at some point.
+# 
+# 
+# set imap_user=""
+#
+# Name: imap_user
+# Type: string
+# Default: ""
+# 
+# 
+# Your login name on the IMAP server.
+# 
+# This variable defaults to your user name on the local machine.
+# 
+# 
+# set implicit_autoview=no
+#
+# Name: implicit_autoview
+# Type: boolean
+# Default: no
+# 
+# 
+# If set to ``yes'', mutt will look for a mailcap entry with the
+# copiousoutput flag set for every MIME attachment it doesn't have
+# an internal viewer defined for.  If such an entry is found, mutt will
+# use the viewer defined in that entry to convert the body part to text
+# form.
+# 
+# 
+# set include=ask-yes
+#
+# Name: include
+# Type: quadoption
+# Default: ask-yes
+# 
+# 
+# Controls whether or not a copy of the message(s) you are replying to
+# is included in your reply.
+# 
+# 
+# set indent_string="> "
+#
+# Name: indent_string
+# Type: string
+# Default: "> "
+# 
+# 
+# Specifies the string to prepend to each line of text quoted in a
+# message to which you are replying.  You are strongly encouraged not to
+# change this value, as it tends to agitate the more fanatical netizens.
+# 
+# 
+# set index_format="%4C %Z %{%b %d} %-15.15L (%?l?%4l&%4c?) %s"
+#
+# Name: index_format
+# Type: string
+# Default: "%4C %Z %{%b %d} %-15.15L (%?l?%4l&%4c?) %s"
+# 
+# 
+# This variable allows you to customize the message index display to
+# your personal taste.
+# 
+# ``Format strings'' are similar to the strings used in the ``C''
+# function printf to format output (see the man page for more detail).
+# The following sequences are defined in Mutt:
+# 
+# %a      address of the author
+# %A      reply-to address (if present; otherwise: address of author)
+# %b      filename of the original message folder (think mailBox)
+# %B      the list to which the letter was sent, or else the folder name (%b).
+# %c      number of characters (bytes) in the message
+# %C      current message number
+# %d      date and time of the message in the format specified by
+#         ``date_format'' converted to sender's time zone
+# %D      date and time of the message in the format specified by
+#         ``date_format'' converted to the local time zone
+# %e      current message number in thread
+# %E      number of messages in current thread
+# %f      entire From: line (address + real name)
+# %F      author name, or recipient name if the message is from you
+# %g      newsgroup name (if compiled with nntp support)
+# %i      message-id of the current message
+# %l      number of lines in the message (does not work with maildir,
+#         mh, and possibly IMAP folders)
+# %L      If an address in the To or CC header field matches an address
+#         defined by the users ``subscribe'' command, this displays
+#         "To <list-name>", otherwise the same as %F.
+# %m      total number of message in the mailbox
+# %M      number of hidden messages if the thread is collapsed.
+# %N      message score
+# %n      author's real name (or address if missing)
+# %O      (_O_riginal save folder)  Where mutt would formerly have
+#         stashed the message: list name or recipient name if no list
+# %s      subject of the message
+# %S      status of the message (N/D/d/!/r/*)
+# %t      `to:' field (recipients)
+# %T      the appropriate character from the $to_chars string
+# %u      user (login) name of the author
+# %v      first name of the author, or the recipient if the message is from you
+# %W      name of organization of author (`organization:' field)
+# %y      `x-label:' field, if present
+# %Y      `x-label' field, if present, and (1) not at part of a thread tree,
+#         (2) at the top of a thread, or (3) `x-label' is different from
+#         preceding message's `x-label'.
+# %Z      message status flags
+# %{fmt}  the date and time of the message is converted to sender's
+#         time zone, and ``fmt'' is expanded by the library function
+#         ``strftime''; a leading bang disables locales
+# %[fmt]  the date and time of the message is converted to the local
+#         time zone, and ``fmt'' is expanded by the library function
+#         ``strftime''; a leading bang disables locales
+# %(fmt)  the local date and time when the message was received.
+#         ``fmt'' is expanded by the library function ``strftime'';
+#         a leading bang disables locales
+# %<fmt>  the current local time. ``fmt'' is expanded by the library
+#         function ``strftime''; a leading bang disables locales.
+# %>X     right justify the rest of the string and pad with character "X"
+# %|X     pad to the end of the line with character "X"
+# 
+# 
+# See also: ``$to_chars''.
+# 
+# 
+# set inews=""
+#
+# Name: inews
+# Type: path
+# Default: ""
+# 
+# 
+# If set, specifies the program and arguments used to deliver news posted
+# by Mutt.  Otherwise, mutt posts article using current connection to
+# news server.  The following printf-style sequence is understood:
+# 
+# %s      newsserver name
+# 
+# Example: set inews="/usr/local/bin/inews -hS"
+# 
+# 
+# set ispell="/usr/bin/ispell"
+#
+# Name: ispell
+# Type: path
+# Default: "/usr/bin/ispell"
+# 
+# 
+# How to invoke ispell (GNU's spell-checking software).
+# 
+# 
+# set keep_flagged=no
+#
+# Name: keep_flagged
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, read messages marked as flagged will not be moved
+# from your spool mailbox to your ``$mbox'' mailbox, or as a result of
+# a ``mbox-hook'' command.
+# 
+# 
+# set locale="C"
+#
+# Name: locale
+# Type: string
+# Default: "C"
+# 
+# 
+# The locale used by strftime(3) to format dates. Legal values are
+# the strings your system accepts for the locale variable LC_TIME.
+# 
+# 
+# set mail_check=5
+#
+# Name: mail_check
+# Type: number
+# Default: 5
+# 
+# 
+# This variable configures how often (in seconds) mutt should look for
+# new mail.
+# 
+# 
+# set mailcap_path=""
+#
+# Name: mailcap_path
+# Type: string
+# Default: ""
+# 
+# 
+# This variable specifies which files to consult when attempting to
+# display MIME bodies not directly supported by Mutt.
+# 
+# 
+# set mailcap_sanitize=yes
+#
+# Name: mailcap_sanitize
+# Type: boolean
+# Default: yes
+# 
+# 
+# If set, mutt will restrict possible characters in mailcap % expandos
+# to a well-defined set of safe characters.  This is the safe setting,
+# but we are not sure it doesn't break some more advanced MIME stuff.
+# 
+# DON'T CHANGE THIS SETTING UNLESS YOU ARE REALLY SURE WHAT YOU ARE
+# DOING!
+# 
+# 
+# set maildir_trash=no
+#
+# Name: maildir_trash
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, messages marked as deleted will be saved with the maildir
+# (T)rashed flag instead of unlinked.  NOTE: this only applies
+# to maildir-style mailboxes.  Setting it will have no effect on other
+# mailbox types.
+# 
+# 
+# set mark_old=yes
+#
+# Name: mark_old
+# Type: boolean
+# Default: yes
+# 
+# 
+# Controls whether or not mutt marks new unread
+# messages as old if you exit a mailbox without reading them.
+# With this option set, the next time you start mutt, the messages
+# will show up with an "O" next to them in the index menu,
+# indicating that they are old.
+# 
+# 
+# set markers=yes
+#
+# Name: markers
+# Type: boolean
+# Default: yes
+# 
+# 
+# Controls the display of wrapped lines in the internal pager. If set, a
+# ``+'' marker is displayed at the beginning of wrapped lines. Also see
+# the ``$smart_wrap'' variable.
+# 
+# 
+# set mask="!^\\.[^.]"
+#
+# Name: mask
+# Type: regular expression
+# Default: "!^\\.[^.]"
+# 
+# 
+# A regular expression used in the file browser, optionally preceded by
+# the not operator ``!''.  Only files whose names match this mask
+# will be shown. The match is always case-sensitive.
+# 
+# 
+# set mbox="~/mbox"
+#
+# Name: mbox
+# Type: path
+# Default: "~/mbox"
+# 
+# 
+# This specifies the folder into which read mail in your ``$spoolfile''
+# folder will be appended.
+# 
+# 
+# set mbox_type=mbox
+#
+# Name: mbox_type
+# Type: folder magic
+# Default: mbox
+# 
+# 
+# The default mailbox type used when creating new folders. May be any of
+# mbox, MMDF, MH and Maildir.
+# 
+# 
+# set metoo=no
+#
+# Name: metoo
+# Type: boolean
+# Default: no
+# 
+# 
+# If unset, Mutt will remove your address (see the ``alternates''
+# command) from the list of recipients when replying to a message.
+# 
+# 
+# set menu_scroll=no
+#
+# Name: menu_scroll
+# Type: boolean
+# Default: no
+# 
+# 
+# When set, menus will be scrolled up or down one line when you
+# attempt to move across a screen boundary.  If unset, the screen
+# is cleared and the next or previous page of the menu is displayed
+# (useful for slow links to avoid many redraws).
+# 
+# 
+# set meta_key=no
+#
+# Name: meta_key
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, forces Mutt to interpret keystrokes with the high bit (bit 8)
+# set as if the user had pressed the ESC key and whatever key remains
+# after having the high bit removed.  For example, if the key pressed
+# has an ASCII value of 0xf4, then this is treated as if the user had
+# pressed ESC then ``x''.  This is because the result of removing the
+# high bit from ``0xf4'' is ``0x74'', which is the ASCII character
+# ``x''.
+# 
+# 
+# set mh_purge=no
+#
+# Name: mh_purge
+# Type: boolean
+# Default: no
+# 
+# 
+# When unset, mutt will mimic mh's behaviour and rename deleted messages
+# to ,<old file name> in mh folders instead of really deleting
+# them.  If the variable is set, the message files will simply be
+# deleted.
+# 
+# 
+# set mh_seq_flagged="flagged"
+#
+# Name: mh_seq_flagged
+# Type: string
+# Default: "flagged"
+# 
+# 
+# The name of the MH sequence used for flagged messages.
+# 
+# 
+# set mh_seq_replied="replied"
+#
+# Name: mh_seq_replied
+# Type: string
+# Default: "replied"
+# 
+# 
+# The name of the MH sequence used to tag replied messages.
+# 
+# 
+# set mh_seq_unseen="unseen"
+#
+# Name: mh_seq_unseen
+# Type: string
+# Default: "unseen"
+# 
+# 
+# The name of the MH sequence used for unseen messages.
+# 
+# 
+# set mime_forward=no
+#
+# Name: mime_forward
+# Type: quadoption
+# Default: no
+# 
+# 
+# When set, the message you are forwarding will be attached as a
+# separate MIME part instead of included in the main body of the
+# message.  This is useful for forwarding MIME messages so the receiver
+# can properly view the message as it was delivered to you. If you like
+# to switch between MIME and not MIME from mail to mail, set this
+# variable to ask-no or ask-yes.
+# 
+# Also see ``$forward_decode'' and ``$mime_forward_decode''.
+# 
+# 
+# set mime_forward_decode=no
+#
+# Name: mime_forward_decode
+# Type: boolean
+# Default: no
+# 
+# 
+# Controls the decoding of complex MIME messages into text/plain when
+# forwarding a message while ``$mime_forward'' is set. Otherwise
+# ``$forward_decode'' is used instead.
+# 
+# 
+# set mime_forward_rest=yes
+#
+# Name: mime_forward_rest
+# Type: quadoption
+# Default: yes
+# 
+# 
+# When forwarding multiple attachments of a MIME message from the recvattach
+# menu, attachments which cannot be decoded in a reasonable manner will
+# be attached to the newly composed message if this option is set.
+# 
+# 
+# set mime_subject=yes
+#
+# Name: mime_subject
+# Type: boolean
+# Default: yes
+# 
+# 
+# If unset, 8-bit ``subject:'' line in article header will not be
+# encoded according to RFC2047 to base64.  This is useful when message
+# is Usenet article, because MIME for news is nonstandard feature.
+# 
+# 
+# set mix_entry_format="%4n %c %-16s %a"
+#
+# Name: mix_entry_format
+# Type: string
+# Default: "%4n %c %-16s %a"
+# 
+# 
+# This variable describes the format of a remailer line on the mixmaster
+# chain selection screen.  The following printf-like sequences are 
+# supported:
+# 
+# %n      The running number on the menu.
+# %c      Remailer capabilities.
+# %s      The remailer's short name.
+# %a      The remailer's e-mail address.
+# 
+# 
+# set mixmaster="mixmaster"
+#
+# Name: mixmaster
+# Type: path
+# Default: "mixmaster"
+# 
+# 
+# This variable contains the path to the Mixmaster binary on your
+# system.  It is used with various sets of parameters to gather the
+# list of known remailers, and to finally send a message through the
+# mixmaster chain.
+# 
+# 
+# set move=ask-no
+#
+# Name: move
+# Type: quadoption
+# Default: ask-no
+# 
+# 
+# Controls whether you will be asked to confirm moving read messages
+# from your spool mailbox to your ``$mbox'' mailbox, or as a result of
+# a ``mbox-hook'' command.
+# 
+# 
+# set message_format="%s"
+#
+# Name: message_format
+# Type: string
+# Default: "%s"
+# 
+# 
+# This is the string displayed in the ``attachment'' menu for
+# attachments of type message/rfc822.  For a full listing of defined
+# printf()-like sequences see the section on ``$index_format''.
+# 
+# 
+# set narrow_tree=no
+#
+# Name: narrow_tree
+# Type: boolean
+# Default: no
+# 
+# 
+# This variable, when set, makes the thread tree narrower, allowing
+# deeper threads to fit on the screen.
+# 
+# 
+# set news_cache_dir="~/.mutt"
+#
+# Name: news_cache_dir
+# Type: path
+# Default: "~/.mutt"
+# 
+# 
+# This variable pointing to directory where Mutt will save cached news
+# articles headers in. If unset, headers will not be saved at all
+# and will be reloaded each time when you enter to newsgroup.
+# 
+# 
+# set news_server=""
+#
+# Name: news_server
+# Type: string
+# Default: ""
+# 
+# 
+# This variable specifies domain name or address of NNTP server. It
+# defaults to the newsserver specified in the environment variable
+# $NNTPSERVER or contained in the file /etc/nntpserver.  You can also
+# specify username and an alternative port for each newsserver, ie:
+# 
+# [nntp[s]://][username[:password]@]newsserver[:port]
+# 
+# 
+# set newsrc="~/.newsrc"
+#
+# Name: newsrc
+# Type: path
+# Default: "~/.newsrc"
+# 
+# 
+# The file, containing info about subscribed newsgroups - names and
+# indexes of read articles.  The following printf-style sequence
+# is understood:
+# 
+# %s      newsserver name
+# 
+# 
+# set nntp_context=1000
+#
+# Name: nntp_context
+# Type: number
+# Default: 1000
+# 
+# 
+# This variable defines number of articles which will be in index when
+# newsgroup entered.  If active newsgroup have more articles than this
+# number, oldest articles will be ignored.  Also controls how many
+# articles headers will be saved in cache when you quit newsgroup.
+# 
+# 
+# set nntp_load_description=yes
+#
+# Name: nntp_load_description
+# Type: boolean
+# Default: yes
+# 
+# 
+# This variable controls whether or not descriptions for each newsgroup
+# must be loaded when newsgroup is added to list (first time list
+# loading or new newsgroup adding).
+# 
+# 
+# set nntp_user=""
+#
+# Name: nntp_user
+# Type: string
+# Default: ""
+# 
+# 
+# Your login name on the NNTP server.  If unset and NNTP server requires
+# authentification, Mutt will prompt you for your account name when you
+# connect to newsserver.
+# 
+# 
+# set nntp_pass=""
+#
+# Name: nntp_pass
+# Type: string
+# Default: ""
+# 
+# 
+# Your password for NNTP account.
+# 
+# 
+# set nntp_poll=60
+#
+# Name: nntp_poll
+# Type: number
+# Default: 60
+# 
+# 
+# The time in seconds until any operations on newsgroup except post new
+# article will cause recheck for new news.  If set to 0, Mutt will
+# recheck newsgroup on each operation in index (stepping, read article,
+# etc.).
+# 
+# 
+# set nntp_reconnect=ask-yes
+#
+# Name: nntp_reconnect
+# Type: quadoption
+# Default: ask-yes
+# 
+# 
+# Controls whether or not Mutt will try to reconnect to newsserver when
+# connection lost.
+# 
+# 
+# set pager="builtin"
+#
+# Name: pager
+# Type: path
+# Default: "builtin"
+# 
+# 
+# This variable specifies which pager you would like to use to view
+# messages.  builtin means to use the builtin pager, otherwise this
+# variable should specify the pathname of the external pager you would
+# like to use.
+# 
+# Using an external pager may have some disadvantages: Additional
+# keystrokes are necessary because you can't call mutt functions
+# directly from the pager, and screen resizes cause lines longer than
+# the screen width to be badly formatted in the help menu.
+# 
+# 
+# set pager_context=0
+#
+# Name: pager_context
+# Type: number
+# Default: 0
+# 
+# 
+# This variable controls the number of lines of context that are given
+# when displaying the next or previous page in the internal pager.  By
+# default, Mutt will display the line after the last one on the screen
+# at the top of the next page (0 lines of context).
+# 
+# 
+# set pager_format="-%Z- %C/%m: %-20.20n   %s"
+#
+# Name: pager_format
+# Type: string
+# Default: "-%Z- %C/%m: %-20.20n   %s"
+# 
+# 
+# This variable controls the format of the one-line message ``status''
+# displayed before each message in either the internal or an external
+# pager.  The valid sequences are listed in the ``$index_format''
+# section.
+# 
+# 
+# set pager_index_lines=0
+#
+# Name: pager_index_lines
+# Type: number
+# Default: 0
+# 
+# 
+# Determines the number of lines of a mini-index which is shown when in
+# the pager.  The current message, unless near the top or bottom of the
+# folder, will be roughly one third of the way down this mini-index,
+# giving the reader the context of a few messages before and after the
+# message.  This is useful, for example, to determine how many messages
+# remain to be read in the current thread.  One of the lines is reserved
+# for the status bar from the index, so a pager_index_lines of 6
+# will only show 5 lines of the actual index.  A value of 0 results in
+# no index being shown.  If the number of messages in the current folder
+# is less than pager_index_lines, then the index will only use as
+# many lines as it needs.
+# 
+# 
+# set pager_stop=no
+#
+# Name: pager_stop
+# Type: boolean
+# Default: no
+# 
+# 
+# When set, the internal-pager will not move to the next message
+# when you are at the end of a message and invoke the next-page
+# function.
+# 
+# 
+# set crypt_autosign=no
+#
+# Name: crypt_autosign
+# Type: boolean
+# Default: no
+# 
+# 
+# Setting this variable will cause Mutt to always attempt to
+# cryptographically sign outgoing messages.  This can be overridden
+# by use of the pgp-menu, when signing is not required or
+# encryption is requested as well. If ``$smime_is_default'' is set,
+# then OpenSSL is used instead to create S/MIME messages and settings can
+# be overridden by use of the smime-menu.
+# (Crypto only)
+# 
+# 
+# set crypt_autoencrypt=no
+#
+# Name: crypt_autoencrypt
+# Type: boolean
+# Default: no
+# 
+# 
+# Setting this variable will cause Mutt to always attempt to PGP
+# encrypt outgoing messages.  This is probably only useful in
+# connection to the send-hook command.  It can be overridden
+# by use of the pgp-menu, when encryption is not required or
+# signing is requested as well.  IF ``$smime_is_default'' is set,
+# then OpenSSL is used instead to create S/MIME messages and
+# settings can be overridden by use of the smime-menu.
+# (Crypto only)
+# 
+# 
+# set pgp_ignore_subkeys=yes
+#
+# Name: pgp_ignore_subkeys
+# Type: boolean
+# Default: yes
+# 
+# 
+# Setting this variable will cause Mutt to ignore OpenPGP subkeys. Instead,
+# the principal key will inherit the subkeys' capabilities.  Unset this
+# if you want to play interesting key selection games.
+# (PGP only)
+# 
+# 
+# set crypt_replyencrypt=yes
+#
+# Name: crypt_replyencrypt
+# Type: boolean
+# Default: yes
+# 
+# 
+# If set, automatically PGP or OpenSSL encrypt replies to messages which are
+# encrypted.
+# (Crypto only)
+# 
+# 
+# set crypt_replysign=no
+#
+# Name: crypt_replysign
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, automatically PGP or OpenSSL sign replies to messages which are
+# signed.
+# 
+# Note: this does not work on messages that are encrypted
+# and signed!
+# (Crypto only)
+# 
+# 
+# set crypt_replysignencrypted=no
+#
+# Name: crypt_replysignencrypted
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, automatically PGP or OpenSSL sign replies to messages
+# which are encrypted. This makes sense in combination with
+# ``$crypt_replyencrypt'', because it allows you to sign all
+# messages which are automatically encrypted.  This works around
+# the problem noted in ``$crypt_replysign'', that mutt is not able
+# to find out whether an encrypted message is also signed.
+# (Crypto only)
+# 
+# 
+# set crypt_timestamp=yes
+#
+# Name: crypt_timestamp
+# Type: boolean
+# Default: yes
+# 
+# 
+# If set, mutt will include a time stamp in the lines surrounding
+# PGP or S/MIME output, so spoofing such lines is more difficult.
+# If you are using colors to mark these lines, and rely on these,
+# you may unset this setting.
+# (Crypto only)
+# 
+# 
+# set pgp_use_gpg_agent=no
+#
+# Name: pgp_use_gpg_agent
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, mutt will use a possibly-running gpg-agent process.
+# (PGP only)
+# 
+# 
+# set crypt_verify_sig=yes
+#
+# Name: crypt_verify_sig
+# Type: quadoption
+# Default: yes
+# 
+# 
+# If ``yes'', always attempt to verify PGP or S/MIME signatures.
+# If ``ask'', ask whether or not to verify the signature. 
+# If ``no'', never attempt to verify cryptographic signatures.
+# (Crypto only)
+# 
+# 
+# set smime_is_default=no
+#
+# Name: smime_is_default
+# Type: boolean
+# Default: no
+# 
+# 
+# The default behaviour of mutt is to use PGP on all auto-sign/encryption
+# operations. To override and to use OpenSSL instead this must be set.
+# However, this has no effect while replying, since mutt will automatically 
+# select the same application that was used to sign/encrypt the original
+# message.  (Note that this variable can be overridden by unsetting $crypt_autosmime.)
+# (S/MIME only)
+# 
+# 
+# set smime_ask_cert_label=yes
+#
+# Name: smime_ask_cert_label
+# Type: boolean
+# Default: yes
+# 
+# 
+# This flag controls whether you want to be asked to enter a label
+# for a certificate about to be added to the database or not. It is
+# set by default.
+# (S/MIME only)
+# 
+# 
+# set smime_decrypt_use_default_key=yes
+#
+# Name: smime_decrypt_use_default_key
+# Type: boolean
+# Default: yes
+# 
+# 
+# If set (default) this tells mutt to use the default key for decryption. Otherwise,
+# if manage multiple certificate-key-pairs, mutt will try to use the mailbox-address
+# to determine the key to use. It will ask you to supply a key, if it can't find one.
+# (S/MIME only)
+# 
+# 
+# set pgp_entry_format="%4n %t%f %4l/0x%k %-4a %2c %u"
+#
+# Name: pgp_entry_format
+# Type: string
+# Default: "%4n %t%f %4l/0x%k %-4a %2c %u"
+# 
+# 
+# This variable allows you to customize the PGP key selection menu to
+# your personal taste. This string is similar to ``$index_format'', but
+# has its own set of printf()-like sequences:
+# 
+# %n      number
+# %k      key id
+# %u      user id
+# %a      algorithm
+# %l      key length
+# %f      flags
+# %c      capabilities
+# %t      trust/validity of the key-uid association
+# %[<s>]  date of the key where <s> is an strftime(3) expression
+# 
+# 
+# (PGP only)
+# 
+# 
+# set pgp_good_sign=""
+#
+# Name: pgp_good_sign
+# Type: regular expression
+# Default: ""
+# 
+# 
+# If you assign a text to this variable, then a PGP signature is only
+# considered verified if the output from $pgp_verify_command contains
+# the text. Use this variable if the exit code from the command is 0
+# even for bad signatures.
+# (PGP only)
+# 
+# 
+# set pgp_check_exit=yes
+#
+# Name: pgp_check_exit
+# Type: boolean
+# Default: yes
+# 
+# 
+# If set, mutt will check the exit code of the PGP subprocess when
+# signing or encrypting.  A non-zero exit code means that the
+# subprocess failed.
+# (PGP only)
+# 
+# 
+# set pgp_long_ids=no
+#
+# Name: pgp_long_ids
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, use 64 bit PGP key IDs. Unset uses the normal 32 bit Key IDs.
+# (PGP only)
+# 
+# 
+# set pgp_retainable_sigs=no
+#
+# Name: pgp_retainable_sigs
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, signed and encrypted messages will consist of nested
+# multipart/signed and multipart/encrypted body parts.
+# 
+# This is useful for applications like encrypted and signed mailing
+# lists, where the outer layer (multipart/encrypted) can be easily
+# removed, while the inner multipart/signed part is retained.
+# (PGP only)
+# 
+# 
+# set pgp_show_unusable=yes
+#
+# Name: pgp_show_unusable
+# Type: boolean
+# Default: yes
+# 
+# 
+# If set, mutt will display non-usable keys on the PGP key selection
+# menu.  This includes keys which have been revoked, have expired, or
+# have been marked as ``disabled'' by the user.
+# (PGP only)
+# 
+# 
+# set pgp_sign_as=""
+#
+# Name: pgp_sign_as
+# Type: string
+# Default: ""
+# 
+# 
+# If you have more than one key pair, this option allows you to specify
+# which of your private keys to use.  It is recommended that you use the
+# keyid form to specify your key (e.g., ``0x00112233'').
+# (PGP only)
+# 
+# 
+# set pgp_strict_enc=yes
+#
+# Name: pgp_strict_enc
+# Type: boolean
+# Default: yes
+# 
+# 
+# If set, Mutt will automatically encode PGP/MIME signed messages as
+# quoted-printable.  Please note that unsetting this variable may
+# lead to problems with non-verifyable PGP signatures, so only change
+# this if you know what you are doing.
+# (PGP only)
+# 
+# 
+# set pgp_timeout=300
+#
+# Name: pgp_timeout
+# Type: number
+# Default: 300
+# 
+# 
+# The number of seconds after which a cached passphrase will expire if
+# not used.
+# (PGP only)
+# 
+# 
+# set pgp_sort_keys=address
+#
+# Name: pgp_sort_keys
+# Type: sort order
+# Default: address
+# 
+# 
+# Specifies how the entries in the `pgp keys' menu are sorted. The
+# following are legal values:
+# 
+# address sort alphabetically by user id
+# keyid   sort alphabetically by key id
+# date    sort by key creation date
+# trust   sort by the trust of the key
+# 
+# 
+# If you prefer reverse order of the above values, prefix it with
+# `reverse-'.
+# (PGP only)
+# 
+# 
+# set pgp_create_traditional=no
+#
+# Name: pgp_create_traditional
+# Type: quadoption
+# Default: no
+# 
+# 
+# This option controls whether Mutt generates old-style inline PGP
+# encrypted or signed messages.
+# 
+# Note that PGP/MIME will be used automatically for messages which have
+# a character set different from us-ascii, or which consist of more than
+# a single MIME part.
+# 
+# Also note that using the old-style PGP message format is strongly
+# deprecated.
+# (PGP only)
+# 
+# 
+# set pgp_auto_traditional=no
+#
+# Name: pgp_auto_traditional
+# Type: boolean
+# Default: no
+# 
+# 
+# This option causes Mutt to generate an old-style inline PGP
+# encrypted or signed message when replying to an old-style
+# message, and a PGP/MIME message when replying to a PGP/MIME
+# message.  Note that this option is only meaningful when using
+# ``$crypt_replyencrypt'', ``$crypt_replysign'', or
+# ``$crypt_replysignencrypted''.
+# 
+# Also note that PGP/MIME will be used automatically for messages
+# which have a character set different from us-ascii, or which
+# consist of more than a single MIME part.
+# 
+# This option overrides ``$pgp_create_traditional''
+# (PGP only)
+# 
+# 
+# set pgp_decode_command=""
+#
+# Name: pgp_decode_command
+# Type: string
+# Default: ""
+# 
+# 
+# This format strings specifies a command which is used to decode 
+# application/pgp attachments.
+# 
+# The PGP command formats have their own set of printf-like sequences:
+# 
+# %p      Expands to PGPPASSFD=0 when a pass phrase is needed, to an empty
+#         string otherwise. Note: This may be used with a %? construct.
+# %f      Expands to the name of a file containing a message.
+# %s      Expands to the name of a file containing the signature part
+#                    of a multipart/signed attachment when verifying it.
+# %a      The value of $pgp_sign_as.
+# %r      One or more key IDs.
+# 
+# 
+# For examples on how to configure these formats for the various versions
+# of PGP which are floating around, see the pgp*.rc and gpg.rc files in
+# the samples/ subdirectory which has been installed on your system
+# alongside the documentation.
+# (PGP only)
+# 
+# 
+# set pgp_getkeys_command=""
+#
+# Name: pgp_getkeys_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is invoked whenever mutt will need public key information.
+# %r is the only printf-like sequence used with this format.
+# (PGP only)
+# 
+# 
+# set pgp_verify_command=""
+#
+# Name: pgp_verify_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to verify PGP signatures.
+# (PGP only)
+# 
+# 
+# set pgp_decrypt_command=""
+#
+# Name: pgp_decrypt_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to decrypt a PGP encrypted message.
+# (PGP only)
+# 
+# 
+# set pgp_clearsign_command=""
+#
+# Name: pgp_clearsign_command
+# Type: string
+# Default: ""
+# 
+# 
+# This format is used to create a old-style "clearsigned" PGP
+# message.  Note that the use of this format is strongly
+# deprecated.
+# (PGP only)
+# 
+# 
+# set pgp_sign_command=""
+#
+# Name: pgp_sign_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to create the detached PGP signature for a 
+# multipart/signed PGP/MIME body part.
+# (PGP only)
+# 
+# 
+# set pgp_encrypt_sign_command=""
+#
+# Name: pgp_encrypt_sign_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to both sign and encrypt a body part.
+# (PGP only)
+# 
+# 
+# set pgp_encrypt_only_command=""
+#
+# Name: pgp_encrypt_only_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to encrypt a body part without signing it.
+# (PGP only)
+# 
+# 
+# set pgp_import_command=""
+#
+# Name: pgp_import_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to import a key from a message into 
+# the user's public key ring.
+# (PGP only)
+# 
+# 
+# set pgp_export_command=""
+#
+# Name: pgp_export_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to export a public key from the user's
+# key ring.
+# (PGP only)
+# 
+# 
+# set pgp_verify_key_command=""
+#
+# Name: pgp_verify_key_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to verify key information from the key selection
+# menu.
+# (PGP only)
+# 
+# 
+# set pgp_list_secring_command=""
+#
+# Name: pgp_list_secring_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to list the secret key ring's contents.  The
+# output format must be analogous to the one used by 
+# gpg --list-keys --with-colons.
+# 
+# This format is also generated by the pgpring utility which comes 
+# with mutt.
+# (PGP only)
+# 
+# 
+# set pgp_list_pubring_command=""
+#
+# Name: pgp_list_pubring_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to list the public key ring's contents.  The
+# output format must be analogous to the one used by 
+# gpg --list-keys --with-colons.
+# 
+# This format is also generated by the pgpring utility which comes 
+# with mutt.
+# (PGP only)
+# 
+# 
+# set forward_decrypt=yes
+#
+# Name: forward_decrypt
+# Type: boolean
+# Default: yes
+# 
+# 
+# Controls the handling of encrypted messages when forwarding a message.
+# When set, the outer layer of encryption is stripped off.  This
+# variable is only used if ``$mime_forward'' is set and
+# ``$mime_forward_decode'' is unset.
+# (PGP only)
+# 
+# 
+# set smime_timeout=300
+#
+# Name: smime_timeout
+# Type: number
+# Default: 300
+# 
+# 
+# The number of seconds after which a cached passphrase will expire if
+# not used.
+# (S/MIME only)
+# 
+# 
+# set smime_encrypt_with=""
+#
+# Name: smime_encrypt_with
+# Type: string
+# Default: ""
+# 
+# 
+# This sets the algorithm that should be used for encryption.
+# Valid choices are "des", "des3", "rc2-40", "rc2-64", "rc2-128".
+# If unset "3des" (TripleDES) is used.
+# (S/MIME only)
+# 
+# 
+# set smime_keys=""
+#
+# Name: smime_keys
+# Type: path
+# Default: ""
+# 
+# 
+# Since there is no pubring/secring as with PGP, mutt has to handle
+# storage ad retrieval of keys/certs by itself. This is very basic right now,
+# and stores keys and certificates in two different directories, both
+# named as the hash-value retrieved from OpenSSL. There is an index file
+# which contains mailbox-address keyid pair, and which can be manually
+# edited. This one points to the location of the private keys.
+# (S/MIME only)
+# 
+# 
+# set smime_ca_location=""
+#
+# Name: smime_ca_location
+# Type: path
+# Default: ""
+# 
+# 
+# This variable contains the name of either a directory, or a file which
+# contains trusted certificates for use with OpenSSL.
+# (S/MIME only)
+# 
+# 
+# set smime_certificates=""
+#
+# Name: smime_certificates
+# Type: path
+# Default: ""
+# 
+# 
+# Since there is no pubring/secring as with PGP, mutt has to handle
+# storage and retrieval of keys by itself. This is very basic right
+# now, and keys and certificates are stored in two different
+# directories, both named as the hash-value retrieved from
+# OpenSSL. There is an index file which contains mailbox-address
+# keyid pairs, and which can be manually edited. This one points to
+# the location of the certificates.
+# (S/MIME only)
+# 
+# 
+# set smime_decrypt_command=""
+#
+# Name: smime_decrypt_command
+# Type: string
+# Default: ""
+# 
+# 
+# This format string specifies a command which is used to decrypt
+# application/x-pkcs7-mime attachments.
+# 
+# The OpenSSL command formats have their own set of printf-like sequences
+# similar to PGP's:
+# 
+# %f      Expands to the name of a file containing a message.
+# %s      Expands to the name of a file containing the signature part
+#                    of a multipart/signed attachment when verifying it.
+# %k      The key-pair specified with $smime_default_key
+# %c      One or more certificate IDs.
+# %a      The algorithm used for encryption.
+# %C      CA location:  Depending on whether $smime_ca_location
+#                    points to a directory or file, this expands to 
+#                    "-CApath $smime_ca_location" or "-CAfile $smime_ca_location".
+# 
+# 
+# For examples on how to configure these formats, see the smime.rc in
+# the samples/ subdirectory which has been installed on your system
+# alongside the documentation.
+# (S/MIME only)
+# 
+# 
+# set smime_verify_command=""
+#
+# Name: smime_verify_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to verify S/MIME signatures of type multipart/signed.
+# (S/MIME only)
+# 
+# 
+# set smime_verify_opaque_command=""
+#
+# Name: smime_verify_opaque_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to verify S/MIME signatures of type
+# application/x-pkcs7-mime.
+# (S/MIME only)
+# 
+# 
+# set smime_sign_command=""
+#
+# Name: smime_sign_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to created S/MIME signatures of type
+# multipart/signed, which can be read by all mail clients.
+# (S/MIME only)
+# 
+# 
+# set smime_sign_opaque_command=""
+#
+# Name: smime_sign_opaque_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to created S/MIME signatures of type
+# application/x-pkcs7-signature, which can only be handled by mail
+# clients supporting the S/MIME extension.
+# (S/MIME only)
+# 
+# 
+# set smime_encrypt_command=""
+#
+# Name: smime_encrypt_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to create encrypted S/MIME messages.
+# (S/MIME only)
+# 
+# 
+# set smime_pk7out_command=""
+#
+# Name: smime_pk7out_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to extract PKCS7 structures of S/MIME signatures,
+# in order to extract the public X509 certificate(s).
+# (S/MIME only)
+# 
+# 
+# set smime_get_cert_command=""
+#
+# Name: smime_get_cert_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to extract X509 certificates from a PKCS7 structure.
+# (S/MIME only)
+# 
+# 
+# set smime_get_signer_cert_command=""
+#
+# Name: smime_get_signer_cert_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to extract only the signers X509 certificate from a S/MIME
+# signature, so that the certificate's owner may get compared to the email's 
+# 'From'-field.
+# (S/MIME only)
+# 
+# 
+# set smime_import_cert_command=""
+#
+# Name: smime_import_cert_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to import a certificate via smime_keys.
+# (S/MIME only)
+# 
+# 
+# set smime_get_cert_email_command=""
+#
+# Name: smime_get_cert_email_command
+# Type: string
+# Default: ""
+# 
+# 
+# This command is used to extract the mail address(es) used for storing
+# X509 certificates, and for verification purposes (to check whether the
+# certificate was issued for the sender's mailbox).
+# (S/MIME only)
+# 
+# 
+# set smime_default_key=""
+#
+# Name: smime_default_key
+# Type: string
+# Default: ""
+# 
+# 
+# This is the default key-pair to use for signing. This must be set to the
+# keyid (the hash-value that OpenSSL generates) to work properly
+# (S/MIME only)
+# 
+# 
+# set ssl_starttls=yes
+#
+# Name: ssl_starttls
+# Type: quadoption
+# Default: yes
+# 
+# 
+# If set (the default), mutt will attempt to use STARTTLS on servers
+# advertising the capability. When unset, mutt will not attempt to
+# use STARTTLS regardless of the server's capabilities.
+# 
+# 
+# set certificate_file=""
+#
+# Name: certificate_file
+# Type: path
+# Default: ""
+# 
+# 
+# This variable specifies the file where the certificates you trust
+# are saved. When an unknown certificate is encountered, you are asked
+# if you accept it or not. If you accept it, the certificate can also 
+# be saved in this file and further connections are automatically 
+# accepted.
+# 
+# You can also manually add CA certificates in this file. Any server
+# certificate that is signed with one of these CA certificates are 
+# also automatically accepted.
+# 
+# Example: set certificate_file=~/.mutt/certificates
+# 
+# 
+# set ssl_usesystemcerts=yes
+#
+# Name: ssl_usesystemcerts
+# Type: boolean
+# Default: yes
+# 
+# 
+# If set to yes, mutt will use CA certificates in the
+# system-wide certificate store when checking if server certificate 
+# is signed by a trusted CA.
+# 
+# 
+# set entropy_file=""
+#
+# Name: entropy_file
+# Type: path
+# Default: ""
+# 
+# 
+# The file which includes random data that is used to initialize SSL
+# library functions.
+# 
+# 
+# set ssl_use_sslv2=yes
+#
+# Name: ssl_use_sslv2
+# Type: boolean
+# Default: yes
+# 
+# 
+# This variables specifies whether to attempt to use SSLv2 in the
+# SSL authentication process.
+# 
+# 
+# set ssl_use_sslv3=yes
+#
+# Name: ssl_use_sslv3
+# Type: boolean
+# Default: yes
+# 
+# 
+# This variables specifies whether to attempt to use SSLv3 in the
+# SSL authentication process.
+# 
+# 
+# set ssl_use_tlsv1=yes
+#
+# Name: ssl_use_tlsv1
+# Type: boolean
+# Default: yes
+# 
+# 
+# This variables specifies whether to attempt to use TLSv1 in the
+# SSL authentication process.
+# 
+# 
+# set pipe_split=no
+#
+# Name: pipe_split
+# Type: boolean
+# Default: no
+# 
+# 
+# Used in connection with the pipe-message command and the ``tag-
+# prefix'' operator.  If this variable is unset, when piping a list of
+# tagged messages Mutt will concatenate the messages and will pipe them
+# as a single folder.  When set, Mutt will pipe the messages one by one.
+# In both cases the messages are piped in the current sorted order,
+# and the ``$pipe_sep'' separator is added after each message.
+# 
+# 
+# set pipe_decode=no
+#
+# Name: pipe_decode
+# Type: boolean
+# Default: no
+# 
+# 
+# Used in connection with the pipe-message command.  When unset,
+# Mutt will pipe the messages without any preprocessing. When set, Mutt
+# will weed headers and will attempt to PGP/MIME decode the messages
+# first.
+# 
+# 
+# set pipe_sep="\n"
+#
+# Name: pipe_sep
+# Type: string
+# Default: "\n"
+# 
+# 
+# The separator to add between messages when piping a list of tagged
+# messages to an external Unix command.
+# 
+# 
+# set pop_authenticators=""
+#
+# Name: pop_authenticators
+# Type: string
+# Default: ""
+# 
+# 
+# This is a colon-delimited list of authentication methods mutt may
+# attempt to use to log in to an POP server, in the order mutt should
+# try them.  Authentication methods are either 'user', 'apop' or any
+# SASL mechanism, eg 'digest-md5', 'gssapi' or 'cram-md5'.
+# This parameter is case-insensitive. If this parameter is unset
+# (the default) mutt will try all available methods, in order from
+# most-secure to least-secure.
+# 
+# Example: set pop_authenticators="digest-md5:apop:user"
+# 
+# 
+# set pop_auth_try_all=yes
+#
+# Name: pop_auth_try_all
+# Type: boolean
+# Default: yes
+# 
+# 
+# If set, Mutt will try all available methods. When unset, Mutt will
+# only fall back to other authentication methods if the previous
+# methods are unavailable. If a method is available but authentication
+# fails, Mutt will not connect to the POP server.
+# 
+# 
+# set pop_checkinterval=60
+#
+# Name: pop_checkinterval
+# Type: number
+# Default: 60
+# 
+# 
+# This variable configures how often (in seconds) POP should look for
+# new mail.
+# 
+# 
+# set pop_delete=ask-no
+#
+# Name: pop_delete
+# Type: quadoption
+# Default: ask-no
+# 
+# 
+# If set, Mutt will delete successfully downloaded messages from the POP
+# server when using the fetch-mail function.  When unset, Mutt will
+# download messages but also leave them on the POP server.
+# 
+# 
+# set pop_host=""
+#
+# Name: pop_host
+# Type: string
+# Default: ""
+# 
+# 
+# The name of your POP server for the fetch-mail function.  You
+# can also specify an alternative port, username and password, ie:
+# 
+# [pop[s]://][username[:password]@]popserver[:port]
+# 
+# 
+# set pop_last=no
+#
+# Name: pop_last
+# Type: boolean
+# Default: no
+# 
+# 
+# If this variable is set, mutt will try to use the "LAST" POP command
+# for retrieving only unread messages from the POP server when using
+# the fetch-mail function.
+# 
+# 
+# set pop_reconnect=ask-yes
+#
+# Name: pop_reconnect
+# Type: quadoption
+# Default: ask-yes
+# 
+# 
+# Controls whether or not Mutt will try to reconnect to POP server when
+# connection lost.
+# 
+# 
+# set pop_user=""
+#
+# Name: pop_user
+# Type: string
+# Default: ""
+# 
+# 
+# Your login name on the POP server.
+# 
+# This variable defaults to your user name on the local machine.
+# 
+# 
+# set pop_pass=""
+#
+# Name: pop_pass
+# Type: string
+# Default: ""
+# 
+# 
+# Specifies the password for your POP account.  If unset, Mutt will
+# prompt you for your password when you open POP mailbox.
+# Warning: you should only use this option when you are on a
+# fairly secure machine, because the superuser can read your muttrc
+# even if you are the only one who can read the file.
+# 
+# 
+# set post_indent_string=""
+#
+# Name: post_indent_string
+# Type: string
+# Default: ""
+# 
+# 
+# Similar to the ``$attribution'' variable, Mutt will append this
+# string after the inclusion of a message which is being replied to.
+# 
+# 
+# set post_moderated=ask-yes
+#
+# Name: post_moderated
+# Type: quadoption
+# Default: ask-yes
+# 
+# 
+# If set to yes, Mutt will post article to newsgroup that have
+# not permissions to posting (e.g. moderated).  Note: if newsserver
+# does not support posting to that newsgroup or totally read-only, that
+# posting will not have an effect.
+# 
+# 
+# set postpone=ask-yes
+#
+# Name: postpone
+# Type: quadoption
+# Default: ask-yes
+# 
+# 
+# Controls whether or not messages are saved in the ``$postponed''
+# mailbox when you elect not to send immediately.
+# 
+# 
+# set postponed="~/postponed"
+#
+# Name: postponed
+# Type: path
+# Default: "~/postponed"
+# 
+# 
+# Mutt allows you to indefinitely ``postpone sending a message'' which
+# you are editing.  When you choose to postpone a message, Mutt saves it
+# in the mailbox specified by this variable.  Also see the ``$postpone''
+# variable.
+# 
+# 
+# set preconnect=""
+#
+# Name: preconnect
+# Type: string
+# Default: ""
+# 
+# 
+# If set, a shell command to be executed if mutt fails to establish
+# a connection to the server. This is useful for setting up secure
+# connections, e.g. with ssh(1). If the command returns a  nonzero
+# status, mutt gives up opening the server. Example:
+# 
+# preconnect="ssh -f -q -L 1234:mailhost.net:143 mailhost.net
+# sleep 20 < /dev/null > /dev/null"
+# 
+# Mailbox 'foo' on mailhost.net can now be reached
+# as '{localhost:1234}foo'.
+# 
+# NOTE: For this example to work, you must be able to log in to the
+# remote machine without having to enter a password.
+# 
+# 
+# set print=ask-no
+#
+# Name: print
+# Type: quadoption
+# Default: ask-no
+# 
+# 
+# Controls whether or not Mutt asks for confirmation before printing.
+# This is useful for people (like me) who accidentally hit ``p'' often.
+# 
+# 
+# set print_command="lpr"
+#
+# Name: print_command
+# Type: path
+# Default: "lpr"
+# 
+# 
+# This specifies the command pipe that should be used to print messages.
+# 
+# 
+# set print_decode=yes
+#
+# Name: print_decode
+# Type: boolean
+# Default: yes
+# 
+# 
+# Used in connection with the print-message command.  If this
+# option is set, the message is decoded before it is passed to the
+# external command specified by $print_command.  If this option
+# is unset, no processing will be applied to the message when
+# printing it.  The latter setting may be useful if you are using
+# some advanced printer filter which is able to properly format
+# e-mail messages for printing.
+# 
+# 
+# set print_split=no
+#
+# Name: print_split
+# Type: boolean
+# Default: no
+# 
+# 
+# Used in connection with the print-message command.  If this option
+# is set, the command specified by $print_command is executed once for
+# each message which is to be printed.  If this option is unset, 
+# the command specified by $print_command is executed only once, and
+# all the messages are concatenated, with a form feed as the message
+# separator.
+# 
+# Those who use the enscript(1) program's mail-printing mode will
+# most likely want to set this option.
+# 
+# 
+# set prompt_after=yes
+#
+# Name: prompt_after
+# Type: boolean
+# Default: yes
+# 
+# 
+# If you use an external ``$pager'', setting this variable will
+# cause Mutt to prompt you for a command when the pager exits rather
+# than returning to the index menu.  If unset, Mutt will return to the
+# index menu when the external pager exits.
+# 
+# 
+# set query_command=""
+#
+# Name: query_command
+# Type: path
+# Default: ""
+# 
+# 
+# This specifies the command that mutt will use to make external address
+# queries.  The string should contain a %s, which will be substituted
+# with the query string the user types.  See ``query'' for more
+# information.
+# 
+# 
+# set quit=yes
+#
+# Name: quit
+# Type: quadoption
+# Default: yes
+# 
+# 
+# This variable controls whether ``quit'' and ``exit'' actually quit
+# from mutt.  If it set to yes, they do quit, if it is set to no, they
+# have no effect, and if it is set to ask-yes or ask-no, you are
+# prompted for confirmation when you try to quit.
+# 
+# 
+# set quote_regexp="^([ \t]*[|>:}#])+"
+#
+# Name: quote_regexp
+# Type: regular expression
+# Default: "^([ \t]*[|>:}#])+"
+# 
+# 
+# A regular expression used in the internal-pager to determine quoted
+# sections of text in the body of a message.
+# 
+# Note: In order to use the quotedx patterns in the
+# internal pager, you need to set this to a regular expression that
+# matches exactly the quote characters at the beginning of quoted
+# lines.
+# 
+# 
+# set read_inc=10
+#
+# Name: read_inc
+# Type: number
+# Default: 10
+# 
+# 
+# If set to a value greater than 0, Mutt will display which message it
+# is currently on when reading a mailbox.  The message is printed after
+# read_inc messages have been read (e.g., if set to 25, Mutt will
+# print a message when it reads message 25, and then again when it gets
+# to message 50).  This variable is meant to indicate progress when
+# reading large mailboxes which may take some time.
+# When set to 0, only a single message will appear before the reading
+# the mailbox.
+# 
+# Also see the ``$write_inc'' variable.
+# 
+# 
+# set read_only=no
+#
+# Name: read_only
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, all folders are opened in read-only mode.
+# 
+# 
+# set realname=""
+#
+# Name: realname
+# Type: string
+# Default: ""
+# 
+# 
+# This variable specifies what "real" or "personal" name should be used
+# when sending messages.
+# 
+# By default, this is the GECOS field from /etc/passwd.  Note that this
+# variable will not be used when the user has set a real name
+# in the $from variable.
+# 
+# 
+# set recall=ask-yes
+#
+# Name: recall
+# Type: quadoption
+# Default: ask-yes
+# 
+# 
+# Controls whether or not you are prompted to recall postponed messages
+# when composing a new message.  Also see ``$postponed''.
+# 
+# Setting this variable to ``yes'' is not generally useful, and thus not
+# recommended.
+# 
+# 
+# set record=""
+#
+# Name: record
+# Type: path
+# Default: ""
+# 
+# 
+# This specifies the file into which your outgoing messages should be
+# appended.  (This is meant as the primary method for saving a copy of
+# your messages, but another way to do this is using the ``my_hdr''
+# command to create a Bcc: field with your email address in it.)
+# 
+# The value of $record is overridden by the ``$force_name'' and
+# ``$save_name'' variables, and the ``fcc-hook'' command.
+# 
+# 
+# set reply_regexp="^(re([\\[0-9\\]+])*|aw):[ \t]*"
+#
+# Name: reply_regexp
+# Type: regular expression
+# Default: "^(re([\\[0-9\\]+])*|aw):[ \t]*"
+# 
+# 
+# A regular expression used to recognize reply messages when threading
+# and replying. The default value corresponds to the English "Re:" and
+# the German "Aw:".
+# 
+# 
+# set reply_self=no
+#
+# Name: reply_self
+# Type: boolean
+# Default: no
+# 
+# 
+# If unset and you are replying to a message sent by you, Mutt will
+# assume that you want to reply to the recipients of that message rather
+# than to yourself.
+# 
+# 
+# set reply_to=ask-yes
+#
+# Name: reply_to
+# Type: quadoption
+# Default: ask-yes
+# 
+# 
+# If set, Mutt will ask you if you want to use the address listed in the
+# Reply-To: header field when replying to a message.  If you answer no,
+# it will use the address in the From: header field instead.  This
+# option is useful for reading a mailing list that sets the Reply-To:
+# header field to the list address and you want to send a private
+# message to the author of a message.
+# 
+# 
+# set resolve=yes
+#
+# Name: resolve
+# Type: boolean
+# Default: yes
+# 
+# 
+# When set, the cursor will be automatically advanced to the next
+# (possibly undeleted) message whenever a command that modifies the
+# current message is executed.
+# 
+# 
+# set reverse_alias=no
+#
+# Name: reverse_alias
+# Type: boolean
+# Default: no
+# 
+# 
+# This variable controls whether or not Mutt will display the "personal"
+# name from your aliases in the index menu if it finds an alias that
+# matches the message's sender.  For example, if you have the following
+# alias:
+# 
+# alias juser abd30425@somewhere.net (Joe User)
+# 
+# and then you receive mail which contains the following header:
+# 
+# From: abd30425@somewhere.net
+# 
+# It would be displayed in the index menu as ``Joe User'' instead of
+# ``abd30425@somewhere.net.''  This is useful when the person's e-mail
+# address is not human friendly (like CompuServe addresses).
+# 
+# 
+# set reverse_name=no
+#
+# Name: reverse_name
+# Type: boolean
+# Default: no
+# 
+# 
+# It may sometimes arrive that you receive mail to a certain machine,
+# move the messages to another machine, and reply to some the messages
+# from there.  If this variable is set, the default From: line of
+# the reply messages is built using the address where you received the
+# messages you are replying to.  If the variable is unset, the
+# From: line will use your address on the current machine.
+# 
+# 
+# set reverse_realname=yes
+#
+# Name: reverse_realname
+# Type: boolean
+# Default: yes
+# 
+# 
+# This variable fine-tunes the behaviour of the reverse_name feature.
+# When it is set, mutt will use the address from incoming messages as-is,
+# possibly including eventual real names.  When it is unset, mutt will
+# override any such real names with the setting of the realname variable.
+# 
+# 
+# set rfc2047_parameters=no
+#
+# Name: rfc2047_parameters
+# Type: boolean
+# Default: no
+# 
+# 
+# When this variable is set, Mutt will decode RFC-2047-encoded MIME 
+# parameters. You want to set this variable when mutt suggests you
+# to save attachments to files named like this: 
+# =?iso-8859-1?Q?file=5F=E4=5F991116=2Ezip?=
+# 
+# When this variable is set interactively, the change doesn't have
+# the desired effect before you have changed folders.
+# 
+# Note that this use of RFC 2047's encoding is explicitly,
+# prohibited by the standard, but nevertheless encountered in the
+# wild.
+# Also note that setting this parameter will not have the effect 
+# that mutt generates this kind of encoding.  Instead, mutt will
+# unconditionally use the encoding specified in RFC 2231.
+# 
+# 
+# set save_address=no
+#
+# Name: save_address
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, mutt will take the sender's full address when choosing a
+# default folder for saving a mail. If ``$save_name'' or ``$force_name''
+# is set too, the selection of the fcc folder will be changed as well.
+# 
+# 
+# set save_empty=yes
+#
+# Name: save_empty
+# Type: boolean
+# Default: yes
+# 
+# 
+# When unset, mailboxes which contain no saved messages will be removed
+# when closed (the exception is ``$spoolfile'' which is never removed).
+# If set, mailboxes are never removed.
+# 
+# Note: This only applies to mbox and MMDF folders, Mutt does not
+# delete MH and Maildir directories.
+# 
+# 
+# set save_name=no
+#
+# Name: save_name
+# Type: boolean
+# Default: no
+# 
+# 
+# This variable controls how copies of outgoing messages are saved.
+# When set, a check is made to see if a mailbox specified by the
+# recipient address exists (this is done by searching for a mailbox in
+# the ``$folder'' directory with the username part of the
+# recipient address).  If the mailbox exists, the outgoing message will
+# be saved to that mailbox, otherwise the message is saved to the
+# ``$record'' mailbox.
+# 
+# Also see the ``$force_name'' variable.
+# 
+# 
+# set score=yes
+#
+# Name: score
+# Type: boolean
+# Default: yes
+# 
+# 
+# When this variable is unset, scoring is turned off.  This can
+# be useful to selectively disable scoring for certain folders when the
+# ``$score_threshold_delete'' variable and friends are used.
+# 
+# 
+# set score_threshold_delete=-1
+#
+# Name: score_threshold_delete
+# Type: number
+# Default: -1
+# 
+# 
+# Messages which have been assigned a score equal to or lower than the value
+# of this variable are automatically marked for deletion by mutt.  Since
+# mutt scores are always greater than or equal to zero, the default setting
+# of this variable will never mark a message for deletion.
+# 
+# 
+# set score_threshold_flag=9999
+#
+# Name: score_threshold_flag
+# Type: number
+# Default: 9999
+# 
+# 
+# Messages which have been assigned a score greater than or equal to this 
+# variable's value are automatically marked "flagged".
+# 
+# 
+# set score_threshold_read=-1
+#
+# Name: score_threshold_read
+# Type: number
+# Default: -1
+# 
+# 
+# Messages which have been assigned a score equal to or lower than the value
+# of this variable are automatically marked as read by mutt.  Since
+# mutt scores are always greater than or equal to zero, the default setting
+# of this variable will never mark a message read.
+# 
+# 
+# set send_charset="us-ascii:iso-8859-1:utf-8"
+#
+# Name: send_charset
+# Type: string
+# Default: "us-ascii:iso-8859-1:utf-8"
+# 
+# 
+# A list of character sets for outgoing messages. Mutt will use the
+# first character set into which the text can be converted exactly.
+# If your ``$charset'' is not iso-8859-1 and recipients may not
+# understand UTF-8, it is advisable to include in the list an
+# appropriate widely used standard character set (such as
+# iso-8859-2, koi8-r or iso-2022-jp) either instead of or after
+# "iso-8859-1".
+# 
+# 
+# set sendmail="/usr/sbin/sendmail -oem -oi"
+#
+# Name: sendmail
+# Type: path
+# Default: "/usr/sbin/sendmail -oem -oi"
+# 
+# 
+# Specifies the program and arguments used to deliver mail sent by Mutt.
+# Mutt expects that the specified program interprets additional
+# arguments as recipient addresses.
+# 
+# 
+# set sendmail_wait=0
+#
+# Name: sendmail_wait
+# Type: number
+# Default: 0
+# 
+# 
+# Specifies the number of seconds to wait for the ``$sendmail'' process
+# to finish before giving up and putting delivery in the background.
+# 
+# Mutt interprets the value of this variable as follows:
+# >0      number of seconds to wait for sendmail to finish before continuing
+# 0       wait forever for sendmail to finish
+# <0      always put sendmail in the background without waiting
+# 
+# 
+# Note that if you specify a value other than 0, the output of the child
+# process will be put in a temporary file.  If there is some error, you
+# will be informed as to where to find the output.
+# 
+# 
+# set shell=""
+#
+# Name: shell
+# Type: path
+# Default: ""
+# 
+# 
+# Command to use when spawning a subshell.  By default, the user's login
+# shell from /etc/passwd is used.
+# 
+# 
+# set save_unsubscribed=no
+#
+# Name: save_unsubscribed
+# Type: boolean
+# Default: no
+# 
+# 
+# When set, info about unsubscribed newsgroups will be saved into
+# ``newsrc'' file and into cache.
+# 
+# 
+# set show_new_news=yes
+#
+# Name: show_new_news
+# Type: boolean
+# Default: yes
+# 
+# 
+# If set, newsserver will be asked for new newsgroups on entering
+# the browser.  Otherwise, it will be done only once for a newsserver.
+# Also controls whether or not number of new articles of subscribed
+# newsgroups will be then checked.
+# 
+# 
+# set show_only_unread=no
+#
+# Name: show_only_unread
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, only subscribed newsgroups that contain unread articles
+# will be displayed in browser.
+# 
+# 
+# set sig_dashes=yes
+#
+# Name: sig_dashes
+# Type: boolean
+# Default: yes
+# 
+# 
+# If set, a line containing ``-- '' will be inserted before your
+# ``$signature''.  It is strongly recommended that you not unset
+# this variable unless your ``signature'' contains just your name.  The
+# reason for this is because many software packages use ``-- \n'' to
+# detect your signature.  For example, Mutt has the ability to highlight
+# the signature in a different color in the builtin pager.
+# 
+# 
+# set sig_on_top=no
+#
+# Name: sig_on_top
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, the signature will be included before any quoted or forwarded
+# text.  It is strongly recommended that you do not set this variable
+# unless you really know what you are doing, and are prepared to take
+# some heat from netiquette guardians.
+# 
+# 
+# set signature="~/.signature"
+#
+# Name: signature
+# Type: path
+# Default: "~/.signature"
+# 
+# 
+# Specifies the filename of your signature, which is appended to all
+# outgoing messages.   If the filename ends with a pipe (``|''), it is
+# assumed that filename is a shell command and input should be read from
+# its stdout.
+# 
+# 
+# set simple_search="~f %s | ~s %s"
+#
+# Name: simple_search
+# Type: string
+# Default: "~f %s | ~s %s"
+# 
+# 
+# Specifies how Mutt should expand a simple search into a real search
+# pattern.  A simple search is one that does not contain any of the ~
+# operators.  See ``patterns'' for more information on search patterns.
+# 
+# For example, if you simply type joe at a search or limit prompt, Mutt
+# will automatically expand it to the value specified by this variable.
+# For the default value it would be:
+# 
+# ~f joe | ~s joe
+# 
+# 
+# set smart_wrap=yes
+#
+# Name: smart_wrap
+# Type: boolean
+# Default: yes
+# 
+# 
+# Controls the display of lines longer than the screen width in the
+# internal pager. If set, long lines are wrapped at a word boundary.  If
+# unset, lines are simply wrapped at the screen edge. Also see the
+# ``$markers'' variable.
+# 
+# 
+# set smileys="(>From )|(:[-^]?[][)(><}{|/DP])"
+#
+# Name: smileys
+# Type: regular expression
+# Default: "(>From )|(:[-^]?[][)(><}{|/DP])"
+# 
+# 
+# The pager uses this variable to catch some common false
+# positives of ``$quote_regexp'', most notably smileys in the beginning
+# of a line
+# 
+# 
+# set sleep_time=1
+#
+# Name: sleep_time
+# Type: number
+# Default: 1
+# 
+# 
+# Specifies time, in seconds, to pause while displaying certain informational
+# messages, while moving from folder to folder and after expunging
+# messages from the current folder.  The default is to pause one second, so 
+# a value of zero for this option suppresses the pause.
+# 
+# 
+# set sort=date
+#
+# Name: sort
+# Type: sort order
+# Default: date
+# 
+# 
+# Specifies how to sort messages in the index menu.  Valid values
+# are:
+# 
+#    date or date-sent
+#    date-received
+#    from
+#    mailbox-order (unsorted)
+#    score
+#    size
+#    subject
+#    threads
+#    to
+# 
+# You may optionally use the reverse- prefix to specify reverse sorting
+# order (example: set sort=reverse-date-sent).
+# 
+# 
+# set sort_alias=alias
+#
+# Name: sort_alias
+# Type: sort order
+# Default: alias
+# 
+# 
+# Specifies how the entries in the `alias' menu are sorted.  The
+# following are legal values:
+# 
+#    address (sort alphabetically by email address)
+#    alias (sort alphabetically by alias name)
+#    unsorted (leave in order specified in .muttrc)
+# 
+# 
+# set sort_aux=date
+#
+# Name: sort_aux
+# Type: sort order
+# Default: date
+# 
+# 
+# When sorting by threads, this variable controls how threads are sorted
+# in relation to other threads, and how the branches of the thread trees
+# are sorted.  This can be set to any value that ``$sort'' can, except
+# threads (in that case, mutt will just use date-sent).  You can also
+# specify the last- prefix in addition to the reverse- prefix, but last-
+# must come after reverse-.  The last- prefix causes messages to be
+# sorted against its siblings by which has the last descendant, using
+# the rest of sort_aux as an ordering.  For instance, set sort_aux=last-
+# date-received would mean that if a new message is received in a
+# thread, that thread becomes the last one displayed (or the first, if
+# you have set sort=reverse-threads.) Note: For reversed ``$sort''
+# order $sort_aux is reversed again (which is not the right thing to do,
+# but kept to not break any existing configuration setting).
+# 
+# 
+# set sort_browser=subject
+#
+# Name: sort_browser
+# Type: sort order
+# Default: subject
+# 
+# 
+# Specifies how to sort entries in the file browser.  By default, the
+# entries are sorted alphabetically.  Valid values:
+# 
+#    alpha (alphabetically)
+#    date
+#    size
+#    unsorted
+# 
+# You may optionally use the reverse- prefix to specify reverse sorting
+# order (example: set sort_browser=reverse-date).
+# 
+# 
+# set sort_re=yes
+#
+# Name: sort_re
+# Type: boolean
+# Default: yes
+# 
+# 
+# This variable is only useful when sorting by threads with
+# ``$strict_threads'' unset.  In that case, it changes the heuristic
+# mutt uses to thread messages by subject.  With sort_re set, mutt will
+# only attach a message as the child of another message by subject if
+# the subject of the child message starts with a substring matching the
+# setting of ``$reply_regexp''.  With sort_re unset, mutt will attach
+# the message whether or not this is the case, as long as the
+# non-``$reply_regexp'' parts of both messages are identical.
+# 
+# 
+# set spoolfile=""
+#
+# Name: spoolfile
+# Type: path
+# Default: ""
+# 
+# 
+# If your spool mailbox is in a non-default place where Mutt cannot find
+# it, you can specify its location with this variable.  Mutt will
+# automatically set this variable to the value of the environment
+# variable $MAIL if it is not set.
+# 
+# 
+# set status_chars="-*%A"
+#
+# Name: status_chars
+# Type: string
+# Default: "-*%A"
+# 
+# 
+# Controls the characters used by the "%r" indicator in
+# ``$status_format''. The first character is used when the mailbox is
+# unchanged. The second is used when the mailbox has been changed, and
+# it needs to be resynchronized. The third is used if the mailbox is in
+# read-only mode, or if the mailbox will not be written when exiting
+# that mailbox (You can toggle whether to write changes to a mailbox
+# with the toggle-write operation, bound by default to "%"). The fourth
+# is used to indicate that the current folder has been opened in attach-
+# message mode (Certain operations like composing a new mail, replying,
+# forwarding, etc. are not permitted in this mode).
+# 
+# 
+# set status_format="-%r-Mutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---"
+#
+# Name: status_format
+# Type: string
+# Default: "-%r-Mutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---"
+# 
+# 
+# Controls the format of the status line displayed in the index
+# menu.  This string is similar to ``$index_format'', but has its own
+# set of printf()-like sequences:
+# 
+# %b      number of mailboxes with new mail *
+# %d      number of deleted messages *
+# %f      the full pathname of the current mailbox
+# %F      number of flagged messages *
+# %h      local hostname
+# %l      size (in bytes) of the current mailbox *
+# %L      size (in bytes) of the messages shown 
+#         (i.e., which match the current limit) *
+# %m      the number of messages in the mailbox *
+# %M      the number of messages shown (i.e., which match the current limit) *
+# %n      number of new messages in the mailbox *
+# %o      number of old unread messages
+# %p      number of postponed messages *
+# %P      percentage of the way through the index
+# %r      modified/read-only/won't-write/attach-message indicator,
+#         according to $status_chars
+# %s      current sorting mode ($sort)
+# %S      current aux sorting method ($sort_aux)
+# %t      number of tagged messages *
+# %u      number of unread messages *
+# %v      Mutt version string
+# %V      currently active limit pattern, if any *
+# %>X     right justify the rest of the string and pad with "X"
+# %|X     pad to the end of the line with "X"
+# 
+# 
+# * = can be optionally printed if nonzero
+# 
+# Some of the above sequences can be used to optionally print a string
+# if their value is nonzero.  For example, you may only want to see the
+# number of flagged messages if such messages exist, since zero is not
+# particularly meaningful.  To optionally print a string based upon one
+# of the above sequences, the following construct is used
+# 
+# %?<sequence_char>?<optional_string>?
+# 
+# where sequence_char is a character from the table above, and
+# optional_string is the string you would like printed if
+# status_char is nonzero.  optional_string may contain
+# other sequence as well as normal text, but you may not nest
+# optional strings.
+# 
+# Here is an example illustrating how to optionally print the number of
+# new messages in a mailbox:
+# %?n?%n new messages.?
+# 
+# Additionally you can switch between two strings, the first one, if a
+# value is zero, the second one, if the value is nonzero, by using the
+# following construct:
+# %?<sequence_char>?<if_string>&<else_string>?
+# 
+# You can additionally force the result of any printf-like sequence to
+# be lowercase by prefixing the sequence character with an underscore
+# (_) sign.  For example, if you want to display the local hostname in
+# lowercase, you would use:
+# %_h
+# 
+# If you prefix the sequence character with a colon (:) character, mutt
+# will replace any dots in the expansion by underscores. This might be helpful 
+# with IMAP folders that don't like dots in folder names.
+# 
+# 
+# set status_on_top=no
+#
+# Name: status_on_top
+# Type: boolean
+# Default: no
+# 
+# 
+# Setting this variable causes the ``status bar'' to be displayed on
+# the first line of the screen rather than near the bottom.
+# 
+# 
+# set strict_threads=no
+#
+# Name: strict_threads
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, threading will only make use of the ``In-Reply-To'' and
+# ``References'' fields when you ``$sort'' by message threads.  By
+# default, messages with the same subject are grouped together in
+# ``pseudo threads.''  This may not always be desirable, such as in a
+# personal mailbox where you might have several unrelated messages with
+# the subject ``hi'' which will get grouped together.
+# 
+# 
+# set suspend=yes
+#
+# Name: suspend
+# Type: boolean
+# Default: yes
+# 
+# 
+# When unset, mutt won't stop when the user presses the terminal's
+# susp key, usually ``control-Z''. This is useful if you run mutt
+# inside an xterm using a command like xterm -e mutt.
+# 
+# 
+# set text_flowed=no
+#
+# Name: text_flowed
+# Type: boolean
+# Default: no
+# 
+# 
+# When set, mutt will generate text/plain; format=flowed attachments.
+# This format is easier to handle for some mailing software, and generally
+# just looks like ordinary text.  To actually make use of this format's 
+# features, you'll need support in your editor.
+# 
+# Note that $indent_string is ignored when this option is set.
+# 
+# 
+# set thread_received=no
+#
+# Name: thread_received
+# Type: boolean
+# Default: no
+# 
+# 
+# When set, mutt uses the date received rather than the date sent
+# to thread messages by subject.
+# 
+# 
+# set thorough_search=no
+#
+# Name: thorough_search
+# Type: boolean
+# Default: no
+# 
+# 
+# Affects the ~b and ~h search operations described in
+# section ``patterns'' above.  If set, the headers and attachments of
+# messages to be searched are decoded before searching.  If unset,
+# messages are searched as they appear in the folder.
+# 
+# 
+# set tilde=no
+#
+# Name: tilde
+# Type: boolean
+# Default: no
+# 
+# 
+# When set, the internal-pager will pad blank lines to the bottom of the
+# screen with a tilde (~).
+# 
+# 
+# set timeout=600
+#
+# Name: timeout
+# Type: number
+# Default: 600
+# 
+# 
+# This variable controls the number of seconds Mutt will wait
+# for a key to be pressed in the main menu before timing out and
+# checking for new mail.  A value of zero or less will cause Mutt
+# to never time out.
+# 
+# 
+# set tmpdir=""
+#
+# Name: tmpdir
+# Type: path
+# Default: ""
+# 
+# 
+# This variable allows you to specify where Mutt will place its
+# temporary files needed for displaying and composing messages.  If
+# this variable is not set, the environment variable TMPDIR is
+# used.  If TMPDIR is not set then "/tmp" is used.
+# 
+# 
+# set to_chars=" +TCFL"
+#
+# Name: to_chars
+# Type: string
+# Default: " +TCFL"
+# 
+# 
+# Controls the character used to indicate mail addressed to you.  The
+# first character is the one used when the mail is NOT addressed to your
+# address (default: space).  The second is used when you are the only
+# recipient of the message (default: +).  The third is when your address
+# appears in the TO header field, but you are not the only recipient of
+# the message (default: T).  The fourth character is used when your
+# address is specified in the CC header field, but you are not the only
+# recipient.  The fifth character is used to indicate mail that was sent
+# by you.  The sixth character is used to indicate when a mail
+# was sent to a mailing-list you subscribe to (default: L).
+# 
+# 
+# set tunnel=""
+#
+# Name: tunnel
+# Type: string
+# Default: ""
+# 
+# 
+# Setting this variable will cause mutt to open a pipe to a command
+# instead of a raw socket. You may be able to use this to set up
+# preauthenticated connections to your IMAP/POP3 server. Example:
+# 
+# tunnel="ssh -q mailhost.net /usr/local/libexec/imapd"
+# 
+# NOTE: For this example to work you must be able to log in to the remote
+# machine without having to enter a password.
+# 
+# 
+# set use_8bitmime=no
+#
+# Name: use_8bitmime
+# Type: boolean
+# Default: no
+# 
+# 
+# Warning: do not set this variable unless you are using a version
+# of sendmail which supports the -B8BITMIME flag (such as sendmail
+# 8.8.x) or you may not be able to send mail.
+# 
+# When set, Mutt will invoke ``$sendmail'' with the -B8BITMIME
+# flag when sending 8-bit messages to enable ESMTP negotiation.
+# 
+# 
+# set use_domain=yes
+#
+# Name: use_domain
+# Type: boolean
+# Default: yes
+# 
+# 
+# When set, Mutt will qualify all local addresses (ones without the
+# @host portion) with the value of ``$hostname''.  If unset, no
+# addresses will be qualified.
+# 
+# 
+# set use_from=yes
+#
+# Name: use_from
+# Type: boolean
+# Default: yes
+# 
+# 
+# When set, Mutt will generate the `From:' header field when
+# sending messages.  If unset, no `From:' header field will be
+# generated unless the user explicitly sets one using the ``my_hdr''
+# command.
+# 
+# 
+# set use_ipv6=yes
+#
+# Name: use_ipv6
+# Type: boolean
+# Default: yes
+# 
+# 
+# When set, Mutt will look for IPv6 addresses of hosts it tries to
+# contact.  If this option is unset, Mutt will restrict itself to IPv4 addresses.
+# Normally, the default should work.
+# 
+# 
+# set use_ipv6=yes
+#
+# Name: use_ipv6
+# Type: boolean
+# Default: yes
+# 
+# 
+# When set, Mutt will look for IPv6 addresses of hosts it tries to
+# contact.  If this option is unset, Mutt will restrict itself to IPv4 addresses.
+# Normally, the default should work.
+# 
+# 
+# set user_agent=yes
+#
+# Name: user_agent
+# Type: boolean
+# Default: yes
+# 
+# 
+# When set, mutt will add a "User-Agent" header to outgoing
+# messages, indicating which version of mutt was used for composing
+# them.
+# 
+# 
+# set visual=""
+#
+# Name: visual
+# Type: path
+# Default: ""
+# 
+# 
+# Specifies the visual editor to invoke when the ~v command is
+# given in the builtin editor.
+# 
+# 
+# set wait_key=yes
+#
+# Name: wait_key
+# Type: boolean
+# Default: yes
+# 
+# 
+# Controls whether Mutt will ask you to press a key after shell-
+# escape, pipe-message, pipe-entry, print-message,
+# and print-entry commands.
+# 
+# It is also used when viewing attachments with ``auto_view'', provided
+# that the corresponding mailcap entry has a needsterminal flag,
+# and the external program is interactive.
+# 
+# When set, Mutt will always ask for a key. When unset, Mutt will wait
+# for a key only if the external command returned a non-zero status.
+# 
+# 
+# set weed=yes
+#
+# Name: weed
+# Type: boolean
+# Default: yes
+# 
+# 
+# When set, mutt will weed headers when when displaying, forwarding,
+# printing, or replying to messages.
+# 
+# 
+# set wrap_search=yes
+#
+# Name: wrap_search
+# Type: boolean
+# Default: yes
+# 
+# 
+# Controls whether searches wrap around the end of the mailbox.
+# 
+# When set, searches will wrap around the first (or last) message. When
+# unset, searches will not wrap.
+# 
+# 
+# set wrapmargin=0
+#
+# Name: wrapmargin
+# Type: number
+# Default: 0
+# 
+# 
+# Controls the size of the margin remaining at the right side of
+# the terminal when mutt's pager does smart wrapping.
+# 
+# 
+# set write_inc=10
+#
+# Name: write_inc
+# Type: number
+# Default: 10
+# 
+# 
+# When writing a mailbox, a message will be printed every
+# write_inc messages to indicate progress.  If set to 0, only a
+# single message will be displayed before writing a mailbox.
+# 
+# Also see the ``$read_inc'' variable.
+# 
+# 
+# set write_bcc=yes
+#
+# Name: write_bcc
+# Type: boolean
+# Default: yes
+# 
+# 
+# Controls whether mutt writes out the Bcc header when preparing
+# messages to be sent.  Exim users may wish to use this.
+# 
+# 
+# set x_comment_to=no
+#
+# Name: x_comment_to
+# Type: boolean
+# Default: no
+# 
+# 
+# If set, Mutt will add ``X-Comment-To:'' field (that contains full
+# name of original article author) to article that followuped to newsgroup.
+# 
+# 
diff --git a/Muttrc.head.in b/Muttrc.head.in
new file mode 100644 (file)
index 0000000..081daf5
--- /dev/null
@@ -0,0 +1,34 @@
+#
+# System configuration file for Mutt
+#
+
+# default list of header fields to weed when displaying
+#
+ignore "from " received content- mime-version status x-status message-id
+ignore sender references return-path lines
+
+# imitate the old search-body function
+macro index \eb '/~b ' 'search in message bodies'
+
+# simulate the old url menu
+macro index \cb |urlview\n 'call urlview to extract URLs out of a message'
+macro pager \cb |urlview\n 'call urlview to extract URLs out of a message'
+
+# Show documentation when pressing F1
+macro generic <f1> "!less @docdir@/manual.txt\n" "Show Mutt documentation"
+macro index   <f1> "!less @docdir@/manual.txt\n" "Show Mutt documentation"
+macro pager   <f1> "!less @docdir@/manual.txt\n" "Show Mutt documentation"
+
+# If Mutt is unable to determine your site's domain name correctly, you can
+# set the default here.
+#
+# set hostname=cs.hmc.edu
+
+# If your sendmail supports the -B8BITMIME flag, enable the following
+#
+# set use_8bitmime
+
+##
+## More settings
+##
+
diff --git a/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..b463914
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,159 @@
+                  Visible changes since Mutt 1.2
+                  ==============================
+
+
+Folder formats and folder access
+--------------------------------
+
+- Better mh support: Mutt now supports .mh_sequences files.
+  Currently, the "unseen", "flagged", and "replied" sequences are
+  used to store mutt flags (the names are configurable using the
+  $mh_seq_unseen, $mh_seq_flagged, and $mh_seq_replied configuration
+  variables). As a side effect, messages in MH folders are no longer
+  rewritten upon status changes.
+
+- The "trashed" flag is supported for maildir folders.  See
+  $maildir_trash.
+
+- POP folder support.  You can now access a POP mailbox just like an
+  IMAP folder (with obvious restrictions due to the protocol).
+
+- URL syntax for remote folders.  You can pass things like
+  pop://account@host and imap://account@host/folder as arguments for
+  the -f command line flag.
+
+- STARTTLS support.  If $ssl_starttls is set (the default), mutt
+  will attempt to use STARTTLS on servers advertising that
+  capability.
+
+- $preconnect.  If set, a shell command to be executed if mutt fails
+  to establish a connection to the server.  This is useful for
+  setting up secure connections; see the muttrc(5) for details.
+
+- $tunnel.  Use a pipe to a command instead of a raw socket.  See
+  muttrc(5) for details.  (Basically, it's another way for setting
+  up secure connections.)
+
+- More new IMAP/POP-related variables (see muttrc(5) for details):
+  $connect_timeout, $imap_authenticators, $imap_delim_chars,
+  $imap_peek, $pop_authenticators, $pop_auth_try_all,
+  $pop_checkinterval, $pop_delete, $pop_reconnect, $use_ipv6.
+
+- The following IMAP/POP-related variables are gone:
+  $imap_checkinterval, $imap_cramkey, $pop_port.
+
+- There's a new imap-fetch-mail function, which forces a check for
+  new messages on an IMAP server.
+
+- The new-mailbox function was renamed to create-mailbox, and is
+  bound to C instead of n by default.
+
+Character set support
+---------------------
+
+- Mutt now uses the iconv interface for character set conversions.
+  This means that you need either a very modern libc, or Bruno
+  Haible's libiconv, which is available from
+  <http://www.gnu.org/software/libiconv/>.
+
+- With sufficiently recent versions of ncurses and slang, mutt works
+  properly in utf-8 locales.
+
+- On sufficiently modern systems, the $charset variable's value is
+  automatically derived from the locale you use.  (Note, however,
+  that manually setting it to a value which is compatible with your
+  locale doesn't do any harm.)
+
+- $send_charset is a colon-separated list of character sets now,
+  defaulting to us-ascii:iso-8859-1:utf-8.
+
+- charset-hook defines aliases for character sets encountered in
+  messages (say, someone tags his messages with latin15 when he
+  means iso-8859-15), iconv-hook defines local names for character
+  sets (for systems which don't know about MIME names; see
+  contrib/iconv for sample configuration snippets).
+
+- The change-charset function is gone.  Use edit-type (C-e on the
+  compose menu) instead.
+
+- The recode-attachment function is gone.
+
+Other changes
+-------------
+
+- There's a new variable $compose_format for the compose screen's
+  status line.  You can now include the message's approximate
+  on-the-wire size.
+
+- The attachment menu knows about collapsing now: Using
+  collapse-parts (bound to "v" by default), you can collapse and
+  uncollapse parts of the attachment tree.  This function is also
+  available from the pager when invoked from the attachment tree.
+
+  Normally, the recvattach menu will start uncollapsed.  However,
+  with the new $digest_collapse option (which is set by default),
+  the individual messages contained in digests will be displayed
+  collapsed.  (That is, there's one line per message.)
+
+- Using $display_filter, you can specify a command which filters
+  messages before they are displayed.
+
+- Using message-hook, you can execute mutt configuration commands
+  before a message is displayed (or formatted before replying).
+
+- If you don't want that mutt moves flagged messages to your mbox,
+  set $keep_flagged.
+
+- Setting the $pgp_ignore_subkeys variable will cause mutt to ignore
+  OpenPGP.  This option is set by default, and it's suggested that
+  you leave it.
+
+- $pgp_sign_micalg has gone.  Mutt now automatically determines what
+  MIC algorithm was used for a particular signature.
+
+- If $pgp_good_sign is set, then a PGP signature is only considered
+  verified if the output from $pgp_verify_command matches this
+  regular expression.  It's suggested that you set this variable to
+  the typical text message output by PGP (or GPG, or whatever)
+  produces when it encounters a good signature.  
+
+- There's a new function, check-traditional-pgp, which is bound to
+  esc-P by default.  It'll check whether a text parts of a message
+  contain PGP encrypted or signed material, and possibly adjust
+  content types.
+
+- $print_split.  If this option is set, $print_command run
+  separately for each message you print.  Useful with enscript(1)'s
+  mail printing mode.
+
+- $sig_on_top.  Include the signature before any quoted or forwarded
+  text.  WARNING: use of this option may provoke flames.
+
+- $text_flowed.  When set, mutt will generate text/plain attachments
+  with the format=flowed parameter.  In order to properly produce
+  such messages, you'll need an appropriate editor mode.  Note that
+  the $indent_string option is ignored with flowed text.
+
+- $to_chars has grown:  Mailing list messages are now tagged with an
+  L in the index. If you want the old behaviour back, add this to
+  your .muttrc: set to_chars=" +TCF "
+
+- New emacs-like functions in the line editor: backward-word (M-b),
+  capitalize-word (M-c), downcase-word (M-l), upcase-word (M-u),
+  forward-word (M-f), kill-eow (M-d), tranpose-chars (unbound).
+
+  transpose-chars is unbound by default because external query
+  occupies C-t.  Suggested alternative binding:
+
+       bind    editor  "\e\t"          complete-query
+       bind    editor  "\Ct"           transpose-chars
+
+- mailto URL support:  You can pass a mailto URL to mutt on the
+  command line.
+
+- If $duplicate_threads is set, mutt's new threading code will
+  thread messages with the same message-id together.  Duplication
+  will be indicated with an equals sign in the thread diagram.
+
+  You can also limit your view to the duplicates (or exclude
+  duplicates from view) by using the "~=" pattern.
diff --git a/OPS b/OPS
new file mode 100644 (file)
index 0000000..193daee
--- /dev/null
+++ b/OPS
@@ -0,0 +1,196 @@
+OP_NULL "null operation"
+OP_END_COND "end of conditional execution (noop)"
+OP_ATTACH_VIEW_MAILCAP "force viewing of attachment using mailcap"
+OP_ATTACH_VIEW_TEXT "view attachment as text"
+OP_ATTACH_COLLAPSE "Toggle display of subparts"
+OP_BOTTOM_PAGE "move to the bottom of the page"
+OP_BOUNCE_MESSAGE "remail a message to another user"
+OP_BROWSER_NEW_FILE "select a new file in this directory"
+OP_BROWSER_VIEW_FILE "view file"
+OP_BROWSER_TELL "display the currently selected file's name"
+OP_BROWSER_SUBSCRIBE "subscribe to current (IMAP/NNTP only)"
+OP_BROWSER_UNSUBSCRIBE "unsubscribe to current (IMAP/NNTP only)"
+OP_BROWSER_TOGGLE_LSUB "toggle view all/subscribed mailboxes (IMAP only)"
+OP_BUFFY_LIST "list mailboxes with new mail"
+OP_CATCHUP "mark all articles in newsgroup as read"
+OP_CHANGE_DIRECTORY "change directories"
+OP_CHECK_NEW "check mailboxes for new mail"
+OP_COMPOSE_ATTACH_FILE "attach a file(s) to this message"
+OP_COMPOSE_ATTACH_MESSAGE "attach message(s) to this message"
+OP_COMPOSE_ATTACH_NEWS_MESSAGE "attach newsmessage(s) to this message"
+OP_COMPOSE_EDIT_BCC "edit the BCC list"
+OP_COMPOSE_EDIT_CC "edit the CC list"
+OP_COMPOSE_EDIT_DESCRIPTION "edit attachment description"
+OP_COMPOSE_EDIT_ENCODING "edit attachment transfer-encoding"
+OP_COMPOSE_EDIT_FCC "enter a file to save a copy of this message in"
+OP_COMPOSE_EDIT_FILE "edit the file to be attached"
+OP_COMPOSE_EDIT_FROM "edit the from field"
+OP_COMPOSE_EDIT_HEADERS "edit the message with headers"
+OP_COMPOSE_EDIT_MESSAGE "edit the message"
+OP_COMPOSE_EDIT_MIME "edit attachment using mailcap entry"
+OP_COMPOSE_EDIT_NEWSGROUPS "edit the newsgroups list"
+OP_COMPOSE_EDIT_REPLY_TO "edit the Reply-To field"
+OP_COMPOSE_EDIT_FOLLOWUP_TO "edit the Followup-To field"
+OP_COMPOSE_EDIT_X_COMMENT_TO "edit the X-Comment-To field"
+OP_COMPOSE_EDIT_SUBJECT "edit the subject of this message"
+OP_COMPOSE_EDIT_TO "edit the TO list"
+OP_CREATE_MAILBOX "create a new mailbox (IMAP only)"
+OP_EDIT_TYPE "edit attachment content type"
+OP_COMPOSE_GET_ATTACHMENT "get a temporary copy of an attachment"
+OP_COMPOSE_ISPELL "run ispell on the message"
+OP_COMPOSE_NEW_MIME "compose new attachment using mailcap entry"
+OP_COMPOSE_TOGGLE_RECODE "toggle recoding of this attachment"
+OP_COMPOSE_POSTPONE_MESSAGE "save this message to send later"
+OP_COMPOSE_RENAME_FILE "rename/move an attached file"
+OP_COMPOSE_SEND_MESSAGE "send the message"
+OP_COMPOSE_TOGGLE_DISPOSITION "toggle disposition between inline/attachment"
+OP_COMPOSE_TOGGLE_UNLINK "toggle whether to delete file after sending it"
+OP_COMPOSE_UPDATE_ENCODING "update an attachment's encoding info"
+OP_COMPOSE_WRITE_MESSAGE "write the message to a folder"
+OP_COPY_MESSAGE "copy a message to a file/mailbox"
+OP_CREATE_ALIAS "create an alias from a message sender"
+OP_CURRENT_BOTTOM "move entry to bottom of screen"
+OP_CURRENT_MIDDLE "move entry to middle of screen"
+OP_CURRENT_TOP "move entry to top of screen"
+OP_DECODE_COPY "make decoded (text/plain) copy"
+OP_DECODE_SAVE "make decoded copy (text/plain) and delete"
+OP_DELETE "delete the current entry"
+OP_DELETE_MAILBOX "delete the current mailbox (IMAP only)"
+OP_DELETE_SUBTHREAD "delete all messages in subthread"
+OP_DELETE_THREAD "delete all messages in thread"
+OP_DISPLAY_ADDRESS "display full address of sender"
+OP_DISPLAY_HEADERS "display message and toggle header weeding"
+OP_DISPLAY_MESSAGE "display a message"
+OP_EDIT_MESSAGE "edit the raw message"
+OP_EDITOR_BACKSPACE "delete the char in front of the cursor"
+OP_EDITOR_BACKWARD_CHAR "move the cursor one character to the left"
+OP_EDITOR_BACKWARD_WORD "move the cursor to the beginning of the word"
+OP_EDITOR_BOL "jump to the beginning of the line"
+OP_EDITOR_BUFFY_CYCLE "cycle among incoming mailboxes"
+OP_EDITOR_COMPLETE "complete filename or alias"
+OP_EDITOR_COMPLETE_QUERY "complete address with query"
+OP_EDITOR_DELETE_CHAR "delete the char under the cursor"
+OP_EDITOR_EOL "jump to the end of the line"
+OP_EDITOR_FORWARD_CHAR "move the cursor one character to the right"
+OP_EDITOR_FORWARD_WORD "move the cursor to the end of the word"
+OP_EDITOR_HISTORY_DOWN "scroll down through the history list"
+OP_EDITOR_HISTORY_UP "scroll up through the history list"
+OP_EDITOR_KILL_EOL "delete chars from cursor to end of line"
+OP_EDITOR_KILL_EOW "delete chars from the cursor to the end of the word"
+OP_EDITOR_KILL_LINE "delete all chars on the line"
+OP_EDITOR_KILL_WORD "delete the word in front of the cursor"
+OP_EDITOR_QUOTE_CHAR "quote the next typed key"
+OP_EDITOR_TRANSPOSE_CHARS "transpose character under cursor with previous"
+OP_EDITOR_CAPITALIZE_WORD "capitalize the word"
+OP_EDITOR_DOWNCASE_WORD "convert the word to lower case"
+OP_EDITOR_UPCASE_WORD "convert the word to upper case"
+OP_ENTER_COMMAND "enter a muttrc command"
+OP_ENTER_MASK "enter a file mask"
+OP_EXIT "exit this menu"
+OP_FILTER "filter attachment through a shell command"
+OP_FIRST_ENTRY "move to the first entry"
+OP_FLAG_MESSAGE "toggle a message's 'important' flag"
+OP_FOLLOWUP "followup to newsgroup"
+OP_FORWARD_TO_GROUP "forward to newsgroup"
+OP_FORWARD_MESSAGE "forward a message with comments"
+OP_GENERIC_SELECT_ENTRY "select the current entry"
+OP_GET_CHILDREN "get all children of the current message"
+OP_GET_MESSAGE "get message with Message-Id"
+OP_GET_PARENT "get parent of the current message"
+OP_GROUP_REPLY "reply to all recipients"
+OP_HALF_DOWN "scroll down 1/2 page"
+OP_HALF_UP "scroll up 1/2 page"
+OP_HELP "this screen"
+OP_JUMP "jump to an index number"
+OP_LAST_ENTRY "move to the last entry"
+OP_LIST_REPLY "reply to specified mailing list"
+OP_LOAD_ACTIVE "load active file from NNTP server"
+OP_MACRO "execute a macro"
+OP_MAIL "compose a new mail message"
+OP_MAIN_CHANGE_FOLDER "open a different folder"
+OP_MAIN_CHANGE_FOLDER_READONLY "open a different folder in read only mode"
+OP_MAIN_CHANGE_GROUP "open a different newsgroup"
+OP_MAIN_CHANGE_GROUP_READONLY "open a different newsgroup in read only mode"
+OP_MAIN_CLEAR_FLAG "clear a status flag from a message"
+OP_MAIN_DELETE_PATTERN "delete messages matching a pattern"
+OP_RECONSTRUCT_THREAD "reconstruct thread containing current message"
+OP_MAIN_IMAP_FETCH "force retrieval of mail from IMAP server"
+OP_MAIN_FETCH_MAIL "retrieve mail from POP server"
+OP_MAIN_FIRST_MESSAGE "move to the first message"
+OP_MAIN_LAST_MESSAGE "move to the last message"
+OP_MAIN_LIMIT "show only messages matching a pattern"
+OP_MAIN_NEXT_NEW "jump to the next new message"
+OP_MAIN_NEXT_NEW_THEN_UNREAD "jump to the next new or unread message"
+OP_MAIN_NEXT_SUBTHREAD "jump to the next subthread"
+OP_MAIN_NEXT_THREAD "jump to the next thread"
+OP_MAIN_NEXT_UNDELETED "move to the next undeleted message"
+OP_MAIN_NEXT_UNREAD "jump to the next unread message"
+OP_MAIN_PARENT_MESSAGE "jump to parent message in thread"
+OP_MAIN_PREV_THREAD "jump to previous thread"
+OP_MAIN_PREV_SUBTHREAD "jump to previous subthread"
+OP_MAIN_PREV_UNDELETED "move to the previous undeleted message"
+OP_MAIN_PREV_NEW "jump to the previous new message"
+OP_MAIN_PREV_NEW_THEN_UNREAD "jump to the previous new or unread message"
+OP_MAIN_PREV_UNREAD "jump to the previous unread message"
+OP_MAIN_READ_THREAD "mark the current thread as read"
+OP_MAIN_READ_SUBTHREAD "mark the current subthread as read"
+OP_MAIN_SET_FLAG "set a status flag on a message"
+OP_MAIN_SYNC_FOLDER "save changes to mailbox"
+OP_MAIN_TAG_PATTERN "tag messages matching a pattern"
+OP_MAIN_UNDELETE_PATTERN "undelete messages matching a pattern"
+OP_MAIN_UNTAG_PATTERN "untag messages matching a pattern"
+OP_MIDDLE_PAGE "move to the middle of the page"
+OP_NEXT_ENTRY "move to the next entry"
+OP_NEXT_LINE "scroll down one line"
+OP_NEXT_PAGE "move to the next page"
+OP_PAGER_BOTTOM "jump to the bottom of the message"
+OP_PAGER_HIDE_QUOTED "toggle display of quoted text"
+OP_PAGER_SKIP_QUOTED "skip beyond quoted text"
+OP_PAGER_TOP "jump to the top of the message"
+OP_PIPE "pipe message/attachment to a shell command"
+OP_POST "post message to newsgroup"
+OP_PREV_ENTRY "move to the previous entry"
+OP_PREV_LINE "scroll up one line"
+OP_PREV_PAGE "move to the previous page"
+OP_PRINT "print the current entry"
+OP_PURGE_MESSAGE "really delete the current entry, bypassing the trash folder"
+OP_QUERY "query external program for addresses"
+OP_QUERY_APPEND "append new query results to current results"
+OP_QUIT "save changes to mailbox and quit"
+OP_RECALL_MESSAGE "recall a postponed message"
+OP_REDRAW "clear and redraw the screen"
+OP_REFORMAT_WINCH "{internal}"
+OP_REPLY "reply to a message"
+OP_RESEND "use the current message as a template for a new one"
+OP_SAVE "save message/attachment to a file"
+OP_SEARCH "search for a regular expression"
+OP_SEARCH_REVERSE "search backwards for a regular expression"
+OP_SEARCH_NEXT "search for next match"
+OP_SEARCH_OPPOSITE "search for next match in opposite direction"
+OP_SEARCH_TOGGLE "toggle search pattern coloring"
+OP_SHELL_ESCAPE "invoke a command in a subshell"
+OP_SORT "sort messages"
+OP_SORT_REVERSE "sort messages in reverse order"
+OP_SUBSCRIBE_PATTERN "subscribe to newsgroups matching a pattern"
+OP_TAG "tag the current entry"
+OP_TAG_PREFIX "apply next function to tagged messages"
+OP_TAG_PREFIX_COND "apply next function ONLY to tagged messages"
+OP_TAG_SUBTHREAD "tag the current subthread"
+OP_TAG_THREAD "tag the current thread"
+OP_TOGGLE_NEW "toggle a message's 'new' flag"
+OP_TOGGLE_READ "toggle view of read messages"
+OP_TOGGLE_WRITE "toggle whether the mailbox will be rewritten"
+OP_TOGGLE_MAILBOXES "toggle whether to browse mailboxes or all files"
+OP_TOP_PAGE "move to the top of the page"
+OP_UNCATCHUP "mark all articles in newsgroup as unread"
+OP_UNDELETE "undelete the current entry"
+OP_UNDELETE_THREAD "undelete all messages in thread"
+OP_UNDELETE_SUBTHREAD "undelete all messages in subthread"
+OP_UNSUBSCRIBE_PATTERN "unsubscribe from newsgroups matching a pattern"
+OP_VERSION "show the Mutt version number and date"
+OP_VIEW_ATTACH "view attachment using mailcap entry if necessary"
+OP_VIEW_ATTACHMENTS "show MIME attachments"
+OP_WHAT_KEY "display the keycode for a key press"
+OP_MAIN_SHOW_LIMIT "show currently active limit pattern"
+OP_MAIN_COLLAPSE_THREAD "collapse/uncollapse current thread"
+OP_MAIN_COLLAPSE_ALL "collapse/uncollapse all threads"
diff --git a/OPS.CRYPT b/OPS.CRYPT
new file mode 100644 (file)
index 0000000..0f5664c
--- /dev/null
+++ b/OPS.CRYPT
@@ -0,0 +1,4 @@
+OP_DECRYPT_SAVE "make decrypted copy and delete"
+OP_DECRYPT_COPY "make decrypted copy"
+OP_FORGET_PASSPHRASE "wipe passphrase(s) from memory"
+OP_EXTRACT_KEYS "extract supported public keys"
diff --git a/OPS.MIX b/OPS.MIX
new file mode 100644 (file)
index 0000000..4988333
--- /dev/null
+++ b/OPS.MIX
@@ -0,0 +1,7 @@
+OP_MIX_USE "Accept the chain constructed"
+OP_MIX_APPEND "Append a remailer to the chain"
+OP_MIX_INSERT "Insert a remailer into the chain"
+OP_MIX_DELETE "Delete a remailer from the chain"
+OP_MIX_CHAIN_PREV "Select the previous element of the chain"
+OP_MIX_CHAIN_NEXT "Select the next element of the chain"
+OP_COMPOSE_MIX "send the message through a mixmaster remailer chain"
diff --git a/OPS.PGP b/OPS.PGP
new file mode 100644 (file)
index 0000000..8ab7eb1
--- /dev/null
+++ b/OPS.PGP
@@ -0,0 +1,6 @@
+OP_COMPOSE_ATTACH_KEY "attach a PGP public key"
+OP_COMPOSE_PGP_MENU "show PGP options"
+OP_MAIL_KEY "mail a PGP public key"
+OP_VERIFY_KEY "verify a PGP public key"
+OP_VIEW_ID "view the key's user id"
+OP_CHECK_TRADITIONAL "check for classic pgp"
diff --git a/OPS.SMIME b/OPS.SMIME
new file mode 100644 (file)
index 0000000..1161ff9
--- /dev/null
+++ b/OPS.SMIME
@@ -0,0 +1 @@
+OP_COMPOSE_SMIME_MENU "show S/MIME options"
diff --git a/PATCHES b/PATCHES
new file mode 100644 (file)
index 0000000..022db6a
--- /dev/null
+++ b/PATCHES
@@ -0,0 +1,7 @@
+patch-1.5.4.aw.listreply.1
+patch-1.5.4.cd.source_multiple.2
+vvv.initials
+patch-1.5.5.1.cd.purge_message.3.4
+patch-1.5.5.1.cd.trash_folder.3.4
+vvv.quote
+vvv.nntp
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..b6cf136
--- /dev/null
+++ b/README
@@ -0,0 +1,38 @@
+README for mutt-1.5
+===================
+
+If you got the mutt source code from the public CVS repository (CVS
+root: :pserver:anonymous@cvs.mutt.org:/home/roessler/cvs, password
+anonymous), please read doc/devel-notes.txt to make sure that you
+have a complete development environment.
+
+NOTE: The CVS repository now resides on a machine which is different
+from ftp.mutt.org.  Anonymous CVS from ftp.mutt.org does not work
+any more.
+
+Installation instructions are detailed in ``INSTALL''.
+
+The user manual is in doc/manual.txt.  A list of major changes since
+the last public version can be found under NEWS.
+
+PGP users should read doc/PGP-Notes.txt.
+
+Those who upgrade from a version of mutt prior to 1.1 should read
+the README.UPGRADE file.
+
+Before you start hacking on mutt, read doc/devel-notes.txt.  Before
+applying patches to mutt, read doc/applying-patches.txt.  Please,
+read these files, as they will save you from asking FAQs.
+
+For more information, see the Mutt home page:
+
+ http://www.mutt.org/
+
+The primary distribution points for Mutt is:
+
+ ftp://ftp.mutt.org/pub/mutt
+
+A list of mirror sites can be found under
+<http://www.mutt.org/download.html>.
+
+$Id: README,v 3.1 2002/11/12 08:41:18 roessler Exp $
diff --git a/README.SECURITY b/README.SECURITY
new file mode 100644 (file)
index 0000000..359f44a
--- /dev/null
@@ -0,0 +1,60 @@
+$Id: README.SECURITY,v 3.0 2002/01/24 12:10:47 roessler Exp $
+
+Recently, there have been reports on security problems induced by
+the interpretation of shell meta-characters embedded in MIME
+parameters.  These reports were referring to Pine, but the problem
+also applied when using mutt.
+
+More precisely, a mailcap entry like this one would lead to
+problems:
+
+> text/test-mailcap-bug; cat %s; copiousoutput; \
+>      test=test "`echo %{charset} | tr '[A-Z]' '[a-z]'`" != iso-8859-1
+
+When expanded with a charset parameter of ``touch${IFS}ME``, a file
+named "ME" would be created in the current directory.
+
+While we don't completely agree that this is an actual MUA problem
+(see below), we have implemented a couple of fixes for this:
+
+- Backticks are handled specially when preparing % expandos for
+  mailcap entries.  This fix will keep the current problem from
+  occuring, but we are sure there are other possible mailcap entries
+  where this doesn't help.
+
+- We have added a configuration variable named $mailcap_sanitize,
+  which is set by default.  If set, mutt will restrict possible
+  characters in mailcap % expandos to a well-defined set of safe
+  characters.  This is the safe setting, but we are not sure it
+  doesn't break some more advanced MIME stuff.
+
+>>>  DON'T UNSET THIS OPTION UNLESS YOU KNOW WHAT YOU ARE DOING.
+
+
+Anyway, this problem is not necessarily a problem which should be
+solved inside the MUA, as it's difficult (maybe impossible) to solve
+there.  Additionally, there is more than one program which parses
+mailcap.  So writing secure mailcap statements is generally a good
+idea.  We encourage you to do this.
+
+The most basic rule is this one:
+
+>>>         KEEP THE %-EXPANDOS AWAY FROM SHELL QUOTING.
+
+Don't quote them with single or double quotes.  Mutt does this for
+you, the right way, as should any other program which interprets
+mailcap.  Don't put them into backtick expansions - as you have seen
+above, this is a recipe for disaster.  Be highly careful with eval
+statements, and avoid them if possible at all.
+
+If you have to use the %-expandos' values in context where you need
+quoting or backtick expansions, put that value into a shell variable
+and reference the shell variable where necessary (possibly with the
+proper quoting put around it, like in "$charset").
+
+For example, a safe version of the mailcap statement above could
+look like this:
+
+> text/test-mailcap-bug; cat %s; copiousoutput; test=charset=%{charset} \
+>         && test "`echo \"$charset\" | tr '[A-Z]' '[a-z]'`" != iso-8859-1
+
diff --git a/README.SSL b/README.SSL
new file mode 100644 (file)
index 0000000..579e13f
--- /dev/null
@@ -0,0 +1,110 @@
+IMAP/SSL in mutt 
+================
+
+Compilation
+-----------
+If you want to have SSL support in mutt, you need to install OpenSSL
+(http://www.openssl.org) libraries and headers before compiling.
+OpenSSL versions 0.9.3 through 0.9.6a have been tested.
+
+For SSL support to be enabled, you need to run the ``configure''
+script with ``--enable-imap --with-ssl[=PFX]'' parameters.  If the
+OpenSSL headers and libraries are not in the default system search
+paths (usually /usr/include and /usr/lib) you can use the optional PFX
+argument to define the root directory of your installation.  The
+libraries are then expected to be found in PFX/lib and headers in
+PFX/include/openssl.
+
+
+Usage
+-----
+IMAP/SSL folders can be accessed just like normal IMAP folders, but you
+will also have to add '/ssl' before the closing curly brace. Or you can
+use IMAP url notation, where the methods is called imaps.
+
+For example:
+       mailboxes {localhost/ssl}inbox
+       mailboxes {localhost:994/ssl}inbox
+or
+       mailboxes imaps://localhost/inbox
+       mailboxes imaps://localhost:994/inbox
+
+If you get errors about lack of entropy, it means that Mutt was unable
+to find a source of random data to initialize SSL library with. Should
+this happen, you need to generate the data yourself and save it in a
+file pointed by $entropy_file or $RANDFILE (environment) variables or
+in ~/.rnd.
+
+One way to generate random data would be to run a command which
+generates unpredictable output, for example 'ps aluxww' in Linux, and
+calculating the MD5-sum from the output and saving it in a file.
+
+** Note: The contents of the file pointed by $RANDFILE environment
+** variable (or ~/.rnd if unset) will be overwritten every time Mutt 
+** is run so don't put anything you can't afford to lose in that file.
+
+The files Mutt will try to use to initialize SSL library with are files
+pointed by $entropy_file and $RANDFILE (or ~/.rnd if unset.) If your
+OpenSSL is version 0.9.5 or later, the previous files can also be EGD
+sockets (see http://www.lothar.com/tech/crypto/ for more information
+about Entropy Gathering Daemon) and in addition sockets in the following
+places are tried: socket pointed by $EGDSOCKET environment variable,
+~/.entropy and /tmp/entropy.
+
+All the files and sockets mentioned above must be owned by the user and
+have permissions of 600.
+
+
+Certificates
+------------
+Each time a server is contacted, its certificate is checked against
+known valid certificates. When an unknown certificate is encountered,
+you are asked to verify it. If you reject the certificate, the
+connection will be terminated immediately. If you accept the
+certificate, the connection will be established. Accepted certificates
+can also be saved so that further connections to the server are
+automatically accepted. 
+
+If your organization has several equivalent IMAP-servers, each of them
+should have a unique certificate which is signed with a common
+certificate.  If you want to use all of those servers, you don't need to
+save each server certificate on the first connect.  Instead, you can get
+the signer certificate and save it instead.  That way, mutt will
+automatically accept all certificates signed with the saved certificate.
+
+System-wide certificates are by default considered trusted when checking
+certificates by signer.  This allows system administrators to setup
+trusted certificates for all users.  How to install certificates
+system-wide, depends on the OpenSSL installation.  Use of system-wide
+certificates can be disabled by unsetting $ssl_usesystemcerts variable.
+
+Certificates will be saved in the file specified by $certificate_file
+variable.  It is empty as default, so if you don't want to verify
+certificates each time you connect to a server, you have set this
+variable to some reasonable value.
+
+For example:
+       set certificate_file=~/.mutt/certificates
+
+
+Troubleshooting
+---------------
+If after doing the above, you are unable to successfully connect, it
+is likely that your IMAP server does not support one of the SSL protocols.
+There exist three different protocols, TLSv1, SSLv2, and SSLv3.  To check
+each of these, you use the following:
+    openssl s_client -host <imap server> -port <port> -verify -debug -no_tls1
+    openssl s_client -host <imap server> -port <port> -verify -debug -no_ssl2
+    openssl s_client -host <imap server> -port <port> -verify -debug -no_ssl3
+
+You can also combine the options until you get a successfull connect.  Once
+you know which options do not work, you can set the variables for non-working
+protocols to know.  The variables for the protocols are ssl_use_tlsv1, 
+ssl_use_sslv2, and ssl_use_sslv3.
+
+-- 
+Tommi Komulainen
+Tommi.Komulainen@iki.fi
+
+Updated by Jeremy Katz
+katzj@linuxpower.org
diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..0d74bdd
--- /dev/null
+++ b/TODO
@@ -0,0 +1,68 @@
+Problems are listed in approximate order of priority.
+
+- character set support: We should have a global cache of
+  character to file name mappings.
+
+- When displaying MIME headers, rfc 2047 decoding is applied (which
+  should not happen), and rfc 2231 decoding is not applied (which
+  should happen).
+
+- Help formatting could be revamped a bit.
+
+- re-add support for .mh_sequences files
+
+- In the "attachment" menu, assume this:
+
+       1 [text/plain, 7bit, 1.1K]           <no description>
+       2 [message/rfc822, 7bit, 6.1K]       A test message
+       3 [text/plain, 7bit, 0.1K]           |-><no description>
+       4 [message/rfc822, base64, 2.5K]     |-><no description>
+       5 [message/rfc822, base64, 2.7K]     `-><no description>
+
+  (please note the "message/rfc822" attachments encoded as
+  Base64; that's illegal, but Sun's Mailtool sends that
+  kind of messages); then go to, say, attachment "4",
+  delete it, and go to the main menu; you won't be able to
+  quit the mailbox (ok, 'x' works, but 'q' doesn't).
+
+  The problem here lies in the fact that mutt uses mailbox
+  handling functions to access message/rfc822 type
+  attachments.  We'd need to perform an additional
+  decoding step before using these functions to fix this
+  bug.
+
+  Please note that mutt's just assuming RFC-compliant mail
+  here.  Fixing this stuff may become a PITA.
+
+
+
+
+- BODY struct should probably have a pointer to its
+  corresponding HEADER struct.  this is needed for
+  mh/maildir mailboxes so the correct pathname can be
+  found.  Or perhaps all we need is a .hdr member of the
+  STATE struct so that all of the MIME handlers can look
+  up the corresponding HEADERs if need be?
+
+- option to not include attachments in replies
+
+- handle message/external-body in some fashion
+
+- handle message/partial reconstruction
+
+- make patterns generic (I have patches for this -tlr), and
+  introduce generic menu limiting, menu pattern searching, and the
+  like.  
+
+  Note: This still requires some thought, since we'd have to store
+  per-entry data in the menu structure.  As an alternative, we could
+  extend the tag method to do something to more general flags. The
+  latter approach would make the implementation of propper
+  tag-prefix behaviour more simple: Functions should only be applied
+  when a message is tagged and visible.  Additionally, we must not
+  access a menu's max field directly any more: Adding an entry to a
+  menu will require re-allocating and possibly updating the v2r
+  array.  How do we handle "in-the-middle additions" properly?  Do
+  they happen at all?
+
+$Id: TODO,v 3.0 2002/01/24 12:10:47 roessler Exp $
diff --git a/VERSION b/VERSION
new file mode 100644 (file)
index 0000000..eac1e0a
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+1.5.6
diff --git a/_regex.h b/_regex.h
new file mode 100644 (file)
index 0000000..8e2bd8f
--- /dev/null
+++ b/_regex.h
@@ -0,0 +1,535 @@
+/* Definitions for data structures and routines for the regular
+   expression library, version 0.12.
+   Copyright (C) 1985,89,90,91,92,93,95,96,97 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.  Its master source is NOT part of
+   the C library, however.  The master source lives in /gd/gnu/lib.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef __REGEXP_LIBRARY_H__
+#define __REGEXP_LIBRARY_H__
+
+/* Allow the use in C++ code.  */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* POSIX says that <sys/types.h> must be included (by the caller) before
+   <regex.h>.  */
+
+#if !defined (_POSIX_C_SOURCE) && !defined (_POSIX_SOURCE) && defined (VMS)
+/* VMS doesn't have `size_t' in <sys/types.h>, even though POSIX says it
+   should be there.  */
+#include <stddef.h>
+#endif
+
+/* The following two types have to be signed and unsigned integer type
+   wide enough to hold a value of a pointer.  For most ANSI compilers
+   ptrdiff_t and size_t should be likely OK.  Still size of these two
+   types is 2 for Microsoft C.  Ugh... */
+typedef long int s_reg_t;
+typedef unsigned long int active_reg_t;
+
+/* The following bits are used to determine the regexp syntax we
+   recognize.  The set/not-set meanings are chosen so that Emacs syntax
+   remains the value 0.  The bits are given in alphabetical order, and
+   the definitions shifted by one from the previous bit; thus, when we
+   add or remove a bit, only one other definition need change.  */
+typedef unsigned long int reg_syntax_t;
+
+/* If this bit is not set, then \ inside a bracket expression is literal.
+   If set, then such a \ quotes the following character.  */
+#define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1)
+
+/* If this bit is not set, then + and ? are operators, and \+ and \? are
+     literals.
+   If set, then \+ and \? are operators and + and ? are literals.  */
+#define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
+
+/* If this bit is set, then character classes are supported.  They are:
+     [:alpha:], [:upper:], [:lower:],  [:digit:], [:alnum:], [:xdigit:],
+     [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
+   If not set, then character classes are not supported.  */
+#define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
+
+/* If this bit is set, then ^ and $ are always anchors (outside bracket
+     expressions, of course).
+   If this bit is not set, then it depends:
+        ^  is an anchor if it is at the beginning of a regular
+           expression or after an open-group or an alternation operator;
+        $  is an anchor if it is at the end of a regular expression, or
+           before a close-group or an alternation operator.
+
+   This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
+   POSIX draft 11.2 says that * etc. in leading positions is undefined.
+   We already implemented a previous draft which made those constructs
+   invalid, though, so we haven't changed the code back.  */
+#define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
+
+/* If this bit is set, then special characters are always special
+     regardless of where they are in the pattern.
+   If this bit is not set, then special characters are special only in
+     some contexts; otherwise they are ordinary.  Specifically,
+     * + ? and intervals are only special when not after the beginning,
+     open-group, or alternation operator.  */
+#define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
+
+/* If this bit is set, then *, +, ?, and { cannot be first in an re or
+     immediately after an alternation or begin-group operator.  */
+#define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
+
+/* If this bit is set, then . matches newline.
+   If not set, then it doesn't.  */
+#define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
+
+/* If this bit is set, then . doesn't match NUL.
+   If not set, then it does.  */
+#define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
+
+/* If this bit is set, nonmatching lists [^...] do not match newline.
+   If not set, they do.  */
+#define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
+
+/* If this bit is set, either \{...\} or {...} defines an
+     interval, depending on RE_NO_BK_BRACES.
+   If not set, \{, \}, {, and } are literals.  */
+#define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
+
+/* If this bit is set, +, ? and | aren't recognized as operators.
+   If not set, they are.  */
+#define RE_LIMITED_OPS (RE_INTERVALS << 1)
+
+/* If this bit is set, newline is an alternation operator.
+   If not set, newline is literal.  */
+#define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
+
+/* If this bit is set, then `{...}' defines an interval, and \{ and \}
+     are literals.
+  If not set, then `\{...\}' defines an interval.  */
+#define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
+
+/* If this bit is set, (...) defines a group, and \( and \) are literals.
+   If not set, \(...\) defines a group, and ( and ) are literals.  */
+#define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
+
+/* If this bit is set, then \<digit> matches <digit>.
+   If not set, then \<digit> is a back-reference.  */
+#define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
+
+/* If this bit is set, then | is an alternation operator, and \| is literal.
+   If not set, then \| is an alternation operator, and | is literal.  */
+#define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
+
+/* If this bit is set, then an ending range point collating higher
+     than the starting range point, as in [z-a], is invalid.
+   If not set, then when ending range point collates higher than the
+     starting range point, the range is ignored.  */
+#define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
+
+/* If this bit is set, then an unmatched ) is ordinary.
+   If not set, then an unmatched ) is invalid.  */
+#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
+
+/* If this bit is set, succeed as soon as we match the whole pattern,
+   without further backtracking.  */
+#define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
+
+/* If this bit is set, do not process the GNU regex operators.
+   If not set, then the GNU regex operators are recognized. */
+#define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1)
+
+/* If this bit is set, turn on internal regex debugging.
+   If not set, and debugging was on, turn it off.
+   This only works if regex.c is compiled -DDEBUG.
+   We define this bit always, so that all that's needed to turn on
+   debugging is to recompile regex.c; the calling code can always have
+   this bit set, and it won't affect anything in the normal case. */
+#define RE_DEBUG (RE_NO_GNU_OPS << 1)
+
+/* This global variable defines the particular regexp syntax to use (for
+   some interfaces).  When a regexp is compiled, the syntax used is
+   stored in the pattern buffer, so changing this does not affect
+   already-compiled regexps.  */
+extern reg_syntax_t re_syntax_options;
+\f
+/* Define combinations of the above bits for the standard possibilities.
+   (The [[[ comments delimit what gets put into the Texinfo file, so
+   don't delete them!)  */
+/* [[[begin syntaxes]]] */
+#define RE_SYNTAX_EMACS 0
+
+#define RE_SYNTAX_AWK                                                  \
+  (RE_BACKSLASH_ESCAPE_IN_LISTS   | RE_DOT_NOT_NULL                    \
+   | RE_NO_BK_PARENS              | RE_NO_BK_REFS                      \
+   | RE_NO_BK_VBAR                | RE_NO_EMPTY_RANGES                 \
+   | RE_DOT_NEWLINE              | RE_CONTEXT_INDEP_ANCHORS            \
+   | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS)
+
+#define RE_SYNTAX_GNU_AWK                                              \
+  ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG)        \
+   & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS))
+
+#define RE_SYNTAX_POSIX_AWK                                            \
+  (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS             \
+   | RE_INTERVALS          | RE_NO_GNU_OPS)
+
+#define RE_SYNTAX_GREP                                                 \
+  (RE_BK_PLUS_QM              | RE_CHAR_CLASSES                                \
+   | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS                           \
+   | RE_NEWLINE_ALT)
+
+#define RE_SYNTAX_EGREP                                                        \
+  (RE_CHAR_CLASSES        | RE_CONTEXT_INDEP_ANCHORS                   \
+   | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE                   \
+   | RE_NEWLINE_ALT       | RE_NO_BK_PARENS                            \
+   | RE_NO_BK_VBAR)
+
+#define RE_SYNTAX_POSIX_EGREP                                          \
+  (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES)
+
+/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff.  */
+#define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
+
+#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
+
+/* Syntax bits common to both basic and extended POSIX regex syntax.  */
+#define _RE_SYNTAX_POSIX_COMMON                                                \
+  (RE_CHAR_CLASSES | RE_DOT_NEWLINE      | RE_DOT_NOT_NULL             \
+   | RE_INTERVALS  | RE_NO_EMPTY_RANGES)
+
+#define RE_SYNTAX_POSIX_BASIC                                          \
+  (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM)
+
+/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
+   RE_LIMITED_OPS, i.e., \? \+ \| are not recognized.  Actually, this
+   isn't minimal, since other operators, such as \`, aren't disabled.  */
+#define RE_SYNTAX_POSIX_MINIMAL_BASIC                                  \
+  (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
+
+#define RE_SYNTAX_POSIX_EXTENDED                                       \
+  (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS                  \
+   | RE_CONTEXT_INDEP_OPS  | RE_NO_BK_BRACES                           \
+   | RE_NO_BK_PARENS       | RE_NO_BK_VBAR                             \
+   | RE_UNMATCHED_RIGHT_PAREN_ORD)
+
+/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS
+   replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added.  */
+#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED                               \
+  (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS                 \
+   | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES                          \
+   | RE_NO_BK_PARENS        | RE_NO_BK_REFS                            \
+   | RE_NO_BK_VBAR         | RE_UNMATCHED_RIGHT_PAREN_ORD)
+/* [[[end syntaxes]]] */
+\f
+/* Maximum number of duplicates an interval can allow.  Some systems
+   (erroneously) define this in other header files, but we want our
+   value, so remove any previous define.  */
+#ifdef RE_DUP_MAX
+#undef RE_DUP_MAX
+#endif
+/* If sizeof(int) == 2, then ((1 << 15) - 1) overflows.  */
+#define RE_DUP_MAX (0x7fff)
+
+
+/* POSIX `cflags' bits (i.e., information for `regcomp').  */
+
+/* If this bit is set, then use extended regular expression syntax.
+   If not set, then use basic regular expression syntax.  */
+#define REG_EXTENDED 1
+
+/* If this bit is set, then ignore case when matching.
+   If not set, then case is significant.  */
+#define REG_ICASE (REG_EXTENDED << 1)
+
+/* If this bit is set, then anchors do not match at newline
+     characters in the string.
+   If not set, then anchors do match at newlines.  */
+#define REG_NEWLINE (REG_ICASE << 1)
+
+/* If this bit is set, then report only success or fail in regexec.
+   If not set, then returns differ between not matching and errors.  */
+#define REG_NOSUB (REG_NEWLINE << 1)
+
+
+/* POSIX `eflags' bits (i.e., information for regexec).  */
+
+/* If this bit is set, then the beginning-of-line operator doesn't match
+     the beginning of the string (presumably because it's not the
+     beginning of a line).
+   If not set, then the beginning-of-line operator does match the
+     beginning of the string.  */
+#define REG_NOTBOL 1
+
+/* Like REG_NOTBOL, except for the end-of-line.  */
+#define REG_NOTEOL (1 << 1)
+
+
+/* If any error codes are removed, changed, or added, update the
+   `re_error_msg' table in regex.c.  */
+typedef enum
+{
+  REG_NOERROR = 0,     /* Success.  */
+  REG_NOMATCH,         /* Didn't find a match (for regexec).  */
+
+  /* POSIX regcomp return error codes.  (In the order listed in the
+     standard.)  */
+  REG_BADPAT,          /* Invalid pattern.  */
+  REG_ECOLLATE,                /* Not implemented.  */
+  REG_ECTYPE,          /* Invalid character class name.  */
+  REG_EESCAPE,         /* Trailing backslash.  */
+  REG_ESUBREG,         /* Invalid back reference.  */
+  REG_EBRACK,          /* Unmatched left bracket.  */
+  REG_EPAREN,          /* Parenthesis imbalance.  */
+  REG_EBRACE,          /* Unmatched \{.  */
+  REG_BADBR,           /* Invalid contents of \{\}.  */
+  REG_ERANGE,          /* Invalid range end.  */
+  REG_ESPACE,          /* Ran out of memory.  */
+  REG_BADRPT,          /* No preceding re for repetition op.  */
+
+  /* Error codes we've added.  */
+  REG_EEND,            /* Premature end.  */
+  REG_ESIZE,           /* Compiled pattern bigger than 2^16 bytes.  */
+  REG_ERPAREN          /* Unmatched ) or \); not returned from regcomp.  */
+} reg_errcode_t;
+\f
+/* This data structure represents a compiled pattern.  Before calling
+   the pattern compiler, the fields `buffer', `allocated', `fastmap',
+   `translate', and `no_sub' can be set.  After the pattern has been
+   compiled, the `re_nsub' field is available.  All other fields are
+   private to the regex routines.  */
+
+#ifndef RE_TRANSLATE_TYPE
+#define RE_TRANSLATE_TYPE char *
+#endif
+
+struct re_pattern_buffer
+{
+/* [[[begin pattern_buffer]]] */
+       /* Space that holds the compiled pattern.  It is declared as
+          `unsigned char *' because its elements are
+           sometimes used as array indexes.  */
+  unsigned char *buffer;
+
+       /* Number of bytes to which `buffer' points.  */
+  unsigned long int allocated;
+
+       /* Number of bytes actually used in `buffer'.  */
+  unsigned long int used;
+
+        /* Syntax setting with which the pattern was compiled.  */
+  reg_syntax_t syntax;
+
+        /* Pointer to a fastmap, if any, otherwise zero.  re_search uses
+           the fastmap, if there is one, to skip over impossible
+           starting points for matches.  */
+  char *fastmap;
+
+        /* Either a translate table to apply to all characters before
+           comparing them, or zero for no translation.  The translation
+           is applied to a pattern when it is compiled and to a string
+           when it is matched.  */
+  RE_TRANSLATE_TYPE translate;
+
+       /* Number of subexpressions found by the compiler.  */
+  size_t re_nsub;
+
+        /* Zero if this pattern cannot match the empty string, one else.
+           Well, in truth it's used only in `re_search_2', to see
+           whether or not we should use the fastmap, so we don't set
+           this absolutely perfectly; see `re_compile_fastmap' (the
+           `duplicate' case).  */
+  unsigned can_be_null : 1;
+
+        /* If REGS_UNALLOCATED, allocate space in the `regs' structure
+             for `max (RE_NREGS, re_nsub + 1)' groups.
+           If REGS_REALLOCATE, reallocate space if necessary.
+           If REGS_FIXED, use what's there.  */
+#define REGS_UNALLOCATED 0
+#define REGS_REALLOCATE 1
+#define REGS_FIXED 2
+  unsigned regs_allocated : 2;
+
+        /* Set to zero when `regex_compile' compiles a pattern; set to one
+           by `re_compile_fastmap' if it updates the fastmap.  */
+  unsigned fastmap_accurate : 1;
+
+        /* If set, `re_match_2' does not return information about
+           subexpressions.  */
+  unsigned no_sub : 1;
+
+        /* If set, a beginning-of-line anchor doesn't match at the
+           beginning of the string.  */
+  unsigned not_bol : 1;
+
+        /* Similarly for an end-of-line anchor.  */
+  unsigned not_eol : 1;
+
+        /* If true, an anchor at a newline matches.  */
+  unsigned newline_anchor : 1;
+
+/* [[[end pattern_buffer]]] */
+};
+
+typedef struct re_pattern_buffer regex_t;
+\f
+/* Type for byte offsets within the string.  POSIX mandates this.  */
+typedef int regoff_t;
+
+
+/* This is the structure we store register match data in.  See
+   regex.texinfo for a full description of what registers match.  */
+struct re_registers
+{
+  unsigned num_regs;
+  regoff_t *start;
+  regoff_t *end;
+};
+
+
+/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
+   `re_match_2' returns information about at least this many registers
+   the first time a `regs' structure is passed.  */
+#ifndef RE_NREGS
+#define RE_NREGS 30
+#endif
+
+
+/* POSIX specification for registers.  Aside from the different names than
+   `re_registers', POSIX uses an array of structures, instead of a
+   structure of arrays.  */
+typedef struct
+{
+  regoff_t rm_so;  /* Byte offset from string's start to substring's start.  */
+  regoff_t rm_eo;  /* Byte offset from string's start to substring's end.  */
+} regmatch_t;
+\f
+/* Declarations for routines.  */
+
+/* To avoid duplicating every routine declaration -- once with a
+   prototype (if we are ANSI), and once without (if we aren't) -- we
+   use the following macro to declare argument types.  This
+   unfortunately clutters up the declarations a bit, but I think it's
+   worth it.  */
+
+#if __STDC__
+
+#define _RE_ARGS(args) args
+
+#else /* not __STDC__ */
+
+#define _RE_ARGS(args) ()
+
+#endif /* not __STDC__ */
+
+/* Sets the current default syntax to SYNTAX, and return the old syntax.
+   You can also simply assign to the `re_syntax_options' variable.  */
+extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax));
+
+/* Compile the regular expression PATTERN, with length LENGTH
+   and syntax given by the global `re_syntax_options', into the buffer
+   BUFFER.  Return NULL if successful, and an error string if not.  */
+extern const char *re_compile_pattern
+  _RE_ARGS ((const char *pattern, size_t length,
+             struct re_pattern_buffer *buffer));
+
+
+/* Compile a fastmap for the compiled pattern in BUFFER; used to
+   accelerate searches.  Return 0 if successful and -2 if was an
+   internal error.  */
+extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
+
+
+/* Search in the string STRING (with length LENGTH) for the pattern
+   compiled into BUFFER.  Start searching at position START, for RANGE
+   characters.  Return the starting position of the match, -1 for no
+   match, or -2 for an internal error.  Also return register
+   information in REGS (if REGS and BUFFER->no_sub are nonzero).  */
+extern int re_search
+  _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
+            int length, int start, int range, struct re_registers *regs));
+
+
+/* Like `re_search', but search in the concatenation of STRING1 and
+   STRING2.  Also, stop searching at index START + STOP.  */
+extern int re_search_2
+  _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
+             int length1, const char *string2, int length2,
+             int start, int range, struct re_registers *regs, int stop));
+
+
+/* Like `re_search', but return how many characters in STRING the regexp
+   in BUFFER matched, starting at position START.  */
+extern int re_match
+  _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
+             int length, int start, struct re_registers *regs));
+
+
+/* Relates to `re_match' as `re_search_2' relates to `re_search'.  */
+extern int re_match_2
+  _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
+             int length1, const char *string2, int length2,
+             int start, struct re_registers *regs, int stop));
+
+
+/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
+   ENDS.  Subsequent matches using BUFFER and REGS will use this memory
+   for recording register information.  STARTS and ENDS must be
+   allocated with malloc, and must each be at least `NUM_REGS * sizeof
+   (regoff_t)' bytes long.
+
+   If NUM_REGS == 0, then subsequent matches should allocate their own
+   register data.
+
+   Unless this function is called, the first search or match using
+   PATTERN_BUFFER will allocate its own register data, without
+   freeing the old data.  */
+extern void re_set_registers
+  _RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs,
+             unsigned num_regs, regoff_t *starts, regoff_t *ends));
+
+#ifdef _REGEX_RE_COMP
+#ifndef _CRAY
+/* 4.2 bsd compatibility.  */
+extern char *re_comp _RE_ARGS ((const char *));
+extern int re_exec _RE_ARGS ((const char *));
+#endif
+#endif
+
+/* POSIX compatibility.  */
+extern int regcomp _RE_ARGS ((regex_t *preg, const char *pattern, int cflags));
+extern int regexec
+  _RE_ARGS ((const regex_t *preg, const char *string, size_t nmatch,
+             regmatch_t pmatch[], int eflags));
+extern size_t regerror
+  _RE_ARGS ((int errcode, const regex_t *preg, char *errbuf,
+             size_t errbuf_size));
+extern void regfree _RE_ARGS ((regex_t *preg));
+
+
+#ifdef __cplusplus
+}
+#endif /* C++ */
+
+#endif /* not __REGEXP_LIBRARY_H__ */
+\f
+/*
+Local variables:
+make-backup-files: t
+version-control: t
+trim-versions-without-asking: nil
+End:
+*/
diff --git a/acconfig.h b/acconfig.h
new file mode 100644 (file)
index 0000000..38f7fc5
--- /dev/null
@@ -0,0 +1,41 @@
+
+/* Compiling with newsreading support with NNTP */
+#undef USE_NNTP
+
+/* program to use for shell commands */
+#define EXECSHELL "/bin/sh"
+
+/* Define to `int' if <signal.h> doesn't define.  */
+#undef sig_atomic_t
+
+@BOTTOM@
+/* Define if you have start_color, as a function or macro.  */
+#undef HAVE_START_COLOR
+
+/* Define if you have typeahead, as a function or macro.  */
+#undef HAVE_TYPEAHEAD
+
+/* Define if you have bkgdset, as a function or macro.  */
+#undef HAVE_BKGDSET
+
+/* Define if you have curs_set, as a function or macro.  */
+#undef HAVE_CURS_SET
+
+/* Define if you have meta, as a function or macro.  */
+#undef HAVE_META
+
+/* Define if you have use_default_colors, as a function or macro.  */
+#undef HAVE_USE_DEFAULT_COLORS
+
+/* Define if you have resizeterm, as a function or macro.  */
+#undef HAVE_RESIZETERM
+
+/* Some systems declare sig_atomic_t as volatile, some others -- no.
+ * This define will have value `sig_atomic_t' or `volatile sig_atomic_t'
+ * accordingly. */
+#undef SIG_ATOMIC_VOLATILE_T
+
+/* Define as 1 if iconv() only converts exactly and we should treat
+ * all return values other than (size_t)(-1) as equivalent. */
+#undef ICONV_NONTRANS
+
diff --git a/account.c b/account.c
new file mode 100644 (file)
index 0000000..2ea4bc5
--- /dev/null
+++ b/account.c
@@ -0,0 +1,210 @@
+/*
+ * Copyright (C) 2000-3 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+/* remote host account manipulation (POP/IMAP) */
+
+#include "mutt.h"
+#include "account.h"
+#include "url.h"
+
+/* mutt_account_match: compare account info (host/port/user) */
+int mutt_account_match (const ACCOUNT* a1, const ACCOUNT* a2)
+{
+  const char* user = NONULL (Username);
+
+  if (a1->type != a2->type)
+    return 0;
+  if (ascii_strcasecmp (a1->host, a2->host))
+    return 0;
+  if (a1->port != a2->port)
+    return 0;
+
+#ifdef USE_IMAP
+  if (a1->type == M_ACCT_TYPE_IMAP && ImapUser)
+    user = ImapUser;
+#endif
+
+#ifdef USE_POP
+  if (a1->type == M_ACCT_TYPE_POP && PopUser)
+    user = PopUser;
+#endif
+  
+#ifdef USE_NNTP
+  if (a1->type == M_ACCT_TYPE_NNTP && NntpUser)
+    user = NntpUser;
+#endif
+
+  if (a1->flags & a2->flags & M_ACCT_USER)
+    return (!strcmp (a1->user, a2->user));
+  if (a1->flags & M_ACCT_USER)
+    return (!strcmp (a1->user, user));
+  if (a2->flags & M_ACCT_USER)
+    return (!strcmp (a2->user, user));
+
+  return 1;
+}
+
+/* mutt_account_fromurl: fill account with information from url. */
+int mutt_account_fromurl (ACCOUNT* account, ciss_url_t* url)
+{
+  /* must be present */
+  if (url->host)
+    strfcpy (account->host, url->host, sizeof (account->host));
+  else
+    return -1;
+
+  if (url->user)
+  {
+    strfcpy (account->user, url->user, sizeof (account->user));
+    account->flags |= M_ACCT_USER;
+  }
+  if (url->pass)
+  {
+    strfcpy (account->pass, url->pass, sizeof (account->pass));
+    account->flags |= M_ACCT_PASS;
+  }
+  if (url->port)
+  {
+    account->port = url->port;
+    account->flags |= M_ACCT_PORT;
+  }
+
+  return 0;
+}
+
+/* mutt_account_tourl: fill URL with info from account. The URL information
+ *   is a set of pointers into account - don't free or edit account until
+ *   you've finished with url (make a copy of account if you need it for
+ *   a while). */
+void mutt_account_tourl (ACCOUNT* account, ciss_url_t* url)
+{
+  url->scheme = U_UNKNOWN;
+  url->user = NULL;
+  url->pass = NULL;
+  url->port = 0;
+
+#ifdef USE_IMAP
+  if (account->type == M_ACCT_TYPE_IMAP)
+  {
+    if (account->flags & M_ACCT_SSL)
+      url->scheme = U_IMAPS;
+    else
+      url->scheme = U_IMAP;
+  }
+#endif
+
+#ifdef USE_POP
+  if (account->type == M_ACCT_TYPE_POP)
+  {
+    if (account->flags & M_ACCT_SSL)
+      url->scheme = U_POPS;
+    else
+      url->scheme = U_POP;
+  }
+#endif
+
+#ifdef USE_NNTP
+  if (account->type == M_ACCT_TYPE_NNTP)
+  {
+    if (account->flags & M_ACCT_SSL)
+      url->scheme = U_NNTPS;
+    else
+      url->scheme = U_NNTP;
+  }
+#endif
+
+  url->host = account->host;
+  if (account->flags & M_ACCT_PORT)
+    url->port = account->port;
+  if (account->flags & M_ACCT_USER)
+    url->user = account->user;
+  if (account->flags & M_ACCT_PASS)
+    url->pass = account->pass;
+}
+
+/* mutt_account_getuser: retrieve username into ACCOUNT, if neccessary */
+int mutt_account_getuser (ACCOUNT* account)
+{
+  char prompt[SHORT_STRING];
+
+  /* already set */
+  if (account->flags & M_ACCT_USER)
+    return 0;
+#ifdef USE_IMAP
+  else if ((account->type == M_ACCT_TYPE_IMAP) && ImapUser)
+    strfcpy (account->user, ImapUser, sizeof (account->user));
+#endif
+#ifdef USE_POP
+  else if ((account->type == M_ACCT_TYPE_POP) && PopUser)
+    strfcpy (account->user, PopUser, sizeof (account->user));
+#endif
+#ifdef USE_NNTP
+  else if ((account->type == M_ACCT_TYPE_NNTP) && NntpUser)
+    strfcpy (account->user, NntpUser, sizeof (account->user));
+#endif
+  /* prompt (defaults to unix username), copy into account->user */
+  else
+  {
+    snprintf (prompt, sizeof (prompt), _("Username at %s: "), account->host);
+    strfcpy (account->user, NONULL (Username), sizeof (account->user));
+    if (mutt_get_field (prompt, account->user, sizeof (account->user), 0))
+      return -1;
+  }
+
+  account->flags |= M_ACCT_USER;
+
+  return 0;
+}
+
+/* mutt_account_getpass: fetch password into ACCOUNT, if neccessary */
+int mutt_account_getpass (ACCOUNT* account)
+{
+  char prompt[SHORT_STRING];
+
+  if (account->flags & M_ACCT_PASS)
+    return 0;
+#ifdef USE_IMAP
+  else if ((account->type == M_ACCT_TYPE_IMAP) && ImapPass)
+    strfcpy (account->pass, ImapPass, sizeof (account->pass));
+#endif
+#ifdef USE_POP
+  else if ((account->type == M_ACCT_TYPE_POP) && PopPass)
+    strfcpy (account->pass, PopPass, sizeof (account->pass));
+#endif
+#ifdef USE_NNTP
+  else if ((account->type == M_ACCT_TYPE_NNTP) && NntpPass)
+    strfcpy (account->pass, NntpPass, sizeof (account->pass));
+#endif
+  else
+  {
+    snprintf (prompt, sizeof (prompt), _("Password for %s@%s: "),
+      account->user, account->host);
+    account->pass[0] = '\0';
+    if (mutt_get_password (prompt, account->pass, sizeof (account->pass)))
+      return -1;
+  }
+
+  account->flags |= M_ACCT_PASS;
+
+  return 0;
+}
+
+void mutt_account_unsetpass (ACCOUNT* account)
+{
+  account->flags &= !M_ACCT_PASS;
+}
diff --git a/account.h b/account.h
new file mode 100644 (file)
index 0000000..a2aa59e
--- /dev/null
+++ b/account.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2000-3 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+/* remote host account manipulation (POP/IMAP) */
+
+#ifndef _MUTT_ACCOUNT_H_
+#define _MUTT_ACCOUNT_H_ 1
+
+#include "url.h"
+
+/* account types */
+enum
+{
+  M_ACCT_TYPE_NONE = 0,
+  M_ACCT_TYPE_IMAP,
+  M_ACCT_TYPE_NNTP,
+  M_ACCT_TYPE_POP
+};
+
+/* account flags */
+#define M_ACCT_PORT (1<<0)
+#define M_ACCT_USER (1<<1)
+#define M_ACCT_PASS (1<<2)
+#define M_ACCT_SSL  (1<<3)
+
+typedef struct
+{
+  char user[64];
+  char pass[64];
+  char host[128];
+  unsigned short port;
+  unsigned char type;
+  unsigned char flags;
+} ACCOUNT;
+
+int mutt_account_match (const ACCOUNT* a1, const ACCOUNT* m2);
+int mutt_account_fromurl (ACCOUNT* account, ciss_url_t* url);
+void mutt_account_tourl (ACCOUNT* account, ciss_url_t* url);
+int mutt_account_getuser (ACCOUNT* account);
+int mutt_account_getpass (ACCOUNT* account);
+void mutt_account_unsetpass (ACCOUNT* account);
+
+#endif /* _MUTT_ACCOUNT_H_ */
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644 (file)
index 0000000..0068dc6
--- /dev/null
@@ -0,0 +1,1989 @@
+dnl aclocal.m4 generated automatically by aclocal 1.4-p4
+
+dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+
+# lib-prefix.m4 serial 3 (gettext-0.13)
+dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib-prefix],
+[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+  --without-lib-prefix    don't search for libraries in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/lib"
+      fi
+    fi
+])
+  if test $use_additional = yes; then
+    dnl Potentially add $additional_includedir to $CPPFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/include,
+    dnl   2. if it's already present in $CPPFLAGS,
+    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_includedir" != "X/usr/include"; then
+      haveit=
+      for x in $CPPFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-I$additional_includedir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_includedir" = "X/usr/local/include"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux*) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_includedir"; then
+            dnl Really add $additional_includedir to $CPPFLAGS.
+            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+          fi
+        fi
+      fi
+    fi
+    dnl Potentially add $additional_libdir to $LDFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/lib,
+    dnl   2. if it's already present in $LDFLAGS,
+    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_libdir" != "X/usr/lib"; then
+      haveit=
+      for x in $LDFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-L$additional_libdir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_libdir" = "X/usr/local/lib"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux*) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_libdir"; then
+            dnl Really add $additional_libdir to $LDFLAGS.
+            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+          fi
+        fi
+      fi
+    fi
+  fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+  dnl Unfortunately, prefix and exec_prefix get only finally determined
+  dnl at the end of configure.
+  if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  $1
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+])
+
+# lib-link.m4 serial 4 (gettext-0.12)
+dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+    AC_LIB_LINKFLAGS_BODY([$1], [$2])
+    ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+    ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+    ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+  ])
+  LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+  INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+  dnl results of this search when this library appears as a dependency.
+  HAVE_LIB[]NAME=yes
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. If found, it
+dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
+dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed lib[]Name and not disabled its use
+  dnl via --without-lib[]Name-prefix, he wants to use it.
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+    ac_save_LIBS="$LIBS"
+    LIBS="$LIBS $LIB[]NAME"
+    AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
+    LIBS="$ac_save_LIBS"
+  ])
+  if test "$ac_cv_lib[]Name" = yes; then
+    HAVE_LIB[]NAME=yes
+    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
+    AC_MSG_CHECKING([how to link with lib[]$1])
+    AC_MSG_RESULT([$LIB[]NAME])
+  else
+    HAVE_LIB[]NAME=no
+    dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+    dnl $INC[]NAME either.
+    CPPFLAGS="$ac_save_CPPFLAGS"
+    LIB[]NAME=
+    LTLIB[]NAME=
+  fi
+  AC_SUBST([HAVE_LIB]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
+dnl hardcode_direct, hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
+  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
+  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
+  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+  AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+  ])
+  wl="$acl_cv_wl"
+  libext="$acl_cv_libext"
+  shlibext="$acl_cv_shlibext"
+  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  hardcode_direct="$acl_cv_hardcode_direct"
+  hardcode_minus_L="$acl_cv_hardcode_minus_L"
+  dnl Determine whether the user wants rpath handling at all.
+  AC_ARG_ENABLE(rpath,
+    [  --disable-rpath         do not hardcode runtime library paths],
+    :, enable_rpath=yes)
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib$1-prefix],
+[  --with-lib$1-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib
+  --without-lib$1-prefix     don't search for lib$1 in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/lib"
+      fi
+    fi
+])
+  dnl Search the library and its dependencies in $additional_libdir and
+  dnl $LDFLAGS. Using breadth-first-seach.
+  LIB[]NAME=
+  LTLIB[]NAME=
+  INC[]NAME=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='$1 $2'
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+        dnl or AC_LIB_HAVE_LINKFLAGS call.
+        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+          else
+            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+            dnl that this library doesn't exist. So just drop it.
+            :
+          fi
+        else
+          dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+          dnl and the already constructed $LIBNAME/$LTLIBNAME.
+          found_dir=
+          found_la=
+          found_so=
+          found_a=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+              found_dir="$additional_libdir"
+              found_so="$additional_libdir/lib$name.$shlibext"
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            else
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIB[]NAME; do
+              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+                    found_dir="$dir"
+                    found_so="$dir/lib$name.$shlibext"
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  else
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+            dnl Found the library.
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+              dnl Linking with a shared library. We attempt to hardcode its
+              dnl directory into the executable's runpath, unless it's the
+              dnl standard /usr/lib.
+              if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+                dnl No hardcoding is needed.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+              else
+                dnl Use an explicit option to hardcode DIR into the resulting
+                dnl binary.
+                dnl Potentially add DIR to ltrpathdirs.
+                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                dnl The hardcoding into $LIBNAME is system dependent.
+                if test "$hardcode_direct" = yes; then
+                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+                  dnl resulting binary.
+                  LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                    dnl Use an explicit option to hardcode DIR into the resulting
+                    dnl binary.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    dnl Potentially add DIR to rpathdirs.
+                    dnl The rpathdirs will be appended to $LIBNAME at the end.
+                    haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                    dnl Rely on "-L$found_dir".
+                    dnl But don't add it if it's already contained in the LDFLAGS
+                    dnl or the already constructed $LIBNAME
+                    haveit=
+                    for x in $LDFLAGS $LIB[]NAME; do
+                      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+                    fi
+                    if test "$hardcode_minus_L" != no; then
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    else
+                      dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
+                      dnl here, because this doesn't fit in flags passed to the
+                      dnl compiler. So give up. No hardcoding. This affects only
+                      dnl very old systems.
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                dnl Linking with a static library.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+              else
+                dnl We shouldn't come here, but anyway it's good to have a
+                dnl fallback.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+              fi
+            fi
+            dnl Assume the include files are nearby.
+            additional_includedir=
+            case "$found_dir" in
+              */lib | */lib/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+              dnl Potentially add $additional_includedir to $INCNAME.
+              dnl But don't add it
+              dnl   1. if it's the standard /usr/include,
+              dnl   2. if it's /usr/local/include and we are using GCC on Linux,
+              dnl   3. if it's already present in $CPPFLAGS or the already
+              dnl      constructed $INCNAME,
+              dnl   4. if it doesn't exist as a directory.
+              if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux*) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INC[]NAME; do
+                    AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                      dnl Really add $additional_includedir to $INCNAME.
+                      INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+            dnl Look for dependencies.
+            if test -n "$found_la"; then
+              dnl Read the .la file. It defines the variables
+              dnl dlname, library_names, old_library, dependency_libs, current,
+              dnl age, revision, installed, dlopen, dlpreopen, libdir.
+              save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+              dnl We use only dependency_libs.
+              for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+                    dnl But don't add it
+                    dnl   1. if it's the standard /usr/lib,
+                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
+                    dnl   3. if it's already present in $LDFLAGS or the already
+                    dnl      constructed $LIBNAME,
+                    dnl   4. if it doesn't exist as a directory.
+                    if test "X$additional_libdir" != "X/usr/lib"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/lib"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux*) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LIBNAME.
+                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LTLIBNAME.
+                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                      dnl Potentially add DIR to rpathdirs.
+                      dnl The rpathdirs will be appended to $LIBNAME at the end.
+                      haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                      dnl Potentially add DIR to ltrpathdirs.
+                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                      haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                    dnl Handle this in the next round.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                    dnl Handle this in the next round. Throw away the .la's
+                    dnl directory; it is already contained in a preceding -L
+                    dnl option.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                    dnl Most likely an immediate library name.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+                    LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+            dnl Didn't find the library; assume it is in the system directories
+            dnl known to the linker and runtime loader. (All the system
+            dnl directories known to the linker should also be known to the
+            dnl runtime loader, otherwise the system is severely misconfigured.)
+            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$hardcode_libdir_separator"; then
+      dnl Weird platform: only the last -rpath option counts, the user must
+      dnl pass all path elements in one option. We can arrange that for a
+      dnl single library, but not when more than one $LIBNAMEs are used.
+      alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+      done
+      dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
+      acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+    else
+      dnl The -rpath options are cumulative.
+      for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+    dnl When using libtool, the option that works for both libraries and
+    dnl executables is -R. The -R options are cumulative.
+    for found_dir in $ltrpathdirs; do
+      LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+    done
+  fi
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+  for element in [$2]; do
+    haveit=
+    for x in $[$1]; do
+      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      [$1]="${[$1]}${[$1]:+ }$element"
+    fi
+  done
+])
+
+# lib-ld.m4 serial 3 (gettext-0.13)
+dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH(gnu-ld,
+[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by GCC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]* | [A-Za-z]:[\\/]*)]
+      [re_direlt='/[^/][^/]*/\.\./']
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(acl_cv_path_LD,
+[if test -z "$LD"; then
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break ;;
+      *)
+       test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
+
+# Like AC_CONFIG_HEADER, but automatically create stamp file.
+
+AC_DEFUN(AM_CONFIG_HEADER,
+[AC_PREREQ([2.12])
+AC_CONFIG_HEADER([$1])
+dnl When config.status generates a header, we must update the stamp-h file.
+dnl This file resides in the same directory as the config header
+dnl that is generated.  We must strip everything past the first ":",
+dnl and everything past the last "/".
+AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
+ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
+<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
+<<am_indx=1
+for am_file in <<$1>>; do
+  case " <<$>>CONFIG_HEADERS " in
+  *" <<$>>am_file "*<<)>>
+    echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
+    ;;
+  esac
+  am_indx=`expr "<<$>>am_indx" + 1`
+done<<>>dnl>>)
+changequote([,]))])
+
+# Do all the work for Automake.  This macro actually does too much --
+# some checks are only needed if your package does certain things.
+# But this isn't really a big deal.
+
+# serial 1
+
+dnl Usage:
+dnl AM_INIT_AUTOMAKE(package,version, [no-define])
+
+AC_DEFUN(AM_INIT_AUTOMAKE,
+[AC_REQUIRE([AC_PROG_INSTALL])
+PACKAGE=[$1]
+AC_SUBST(PACKAGE)
+VERSION=[$2]
+AC_SUBST(VERSION)
+dnl test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+ifelse([$3],,
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
+AC_REQUIRE([AM_SANITY_CHECK])
+AC_REQUIRE([AC_ARG_PROGRAM])
+dnl FIXME This is truly gross.
+missing_dir=`cd $ac_aux_dir && pwd`
+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
+AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
+AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
+AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
+AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
+AC_REQUIRE([AC_PROG_MAKE_SET])])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+AC_DEFUN(AM_SANITY_CHECK,
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+   if test "[$]*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftestfile`
+   fi
+   if test "[$]*" != "X $srcdir/configure conftestfile" \
+      && test "[$]*" != "X conftestfile $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "[$]2" = conftestfile
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+rm -f conftest*
+AC_MSG_RESULT(yes)])
+
+dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
+dnl The program must properly implement --version.
+AC_DEFUN(AM_MISSING_PROG,
+[AC_MSG_CHECKING(for working $2)
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if ($2 --version) < /dev/null > /dev/null 2>&1; then
+   $1=$2
+   AC_MSG_RESULT(found)
+else
+   $1="$3/missing $2"
+   AC_MSG_RESULT(missing)
+fi
+AC_SUBST($1)])
+
+# isc-posix.m4 serial 2 (gettext-0.11.2)
+dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+# This file is not needed with autoconf-2.53 and newer.  Remove it in 2005.
+
+# This test replaces the one in autoconf.
+# Currently this macro should have the same name as the autoconf macro
+# because gettext's gettext.m4 (distributed in the automake package)
+# still uses it.  Otherwise, the use in gettext.m4 makes autoheader
+# give these diagnostics:
+#   configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
+#   configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
+
+undefine([AC_ISC_POSIX])
+
+AC_DEFUN([AC_ISC_POSIX],
+  [
+    dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
+    AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"])
+  ]
+)
+
+
+# serial 1
+
+AC_DEFUN(AM_C_PROTOTYPES,
+[AC_REQUIRE([AM_PROG_CC_STDC])
+AC_REQUIRE([AC_PROG_CPP])
+AC_MSG_CHECKING([for function prototypes])
+if test "$am_cv_prog_cc_stdc" != no; then
+  AC_MSG_RESULT(yes)
+  AC_DEFINE(PROTOTYPES,1,[Define if compiler has function prototypes])
+  U= ANSI2KNR=
+else
+  AC_MSG_RESULT(no)
+  U=_ ANSI2KNR=./ansi2knr
+  # Ensure some checks needed by ansi2knr itself.
+  AC_HEADER_STDC
+  AC_CHECK_HEADERS(string.h)
+fi
+AC_SUBST(U)dnl
+AC_SUBST(ANSI2KNR)dnl
+])
+
+
+# serial 1
+
+# @defmac AC_PROG_CC_STDC
+# @maindex PROG_CC_STDC
+# @ovindex CC
+# If the C compiler in not in ANSI C mode by default, try to add an option
+# to output variable @code{CC} to make it so.  This macro tries various
+# options that select ANSI C on some system or another.  It considers the
+# compiler to be in ANSI C mode if it handles function prototypes correctly.
+#
+# If you use this macro, you should check after calling it whether the C
+# compiler has been set to accept ANSI C; if not, the shell variable
+# @code{am_cv_prog_cc_stdc} is set to @samp{no}.  If you wrote your source
+# code in ANSI C, you can make an un-ANSIfied copy of it by using the
+# program @code{ansi2knr}, which comes with Ghostscript.
+# @end defmac
+
+AC_DEFUN(AM_PROG_CC_STDC,
+[AC_REQUIRE([AC_PROG_CC])
+AC_BEFORE([$0], [AC_C_INLINE])
+AC_BEFORE([$0], [AC_C_CONST])
+dnl Force this before AC_PROG_CPP.  Some cpp's, eg on HPUX, require
+dnl a magic option to avoid problems with ANSI preprocessor commands
+dnl like #elif.
+dnl FIXME: can't do this because then AC_AIX won't work due to a
+dnl circular dependency.
+dnl AC_BEFORE([$0], [AC_PROG_CPP])
+AC_MSG_CHECKING(for ${CC-cc} option to accept ANSI C)
+AC_CACHE_VAL(am_cv_prog_cc_stdc,
+[am_cv_prog_cc_stdc=no
+ac_save_CC="$CC"
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX                  -qlanglvl=ansi
+# Ultrix and OSF/1     -std1
+# HP-UX                        -Aa -D_HPUX_SOURCE
+# SVR4                 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  AC_TRY_COMPILE(
+[#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+], [
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+],
+[am_cv_prog_cc_stdc="$ac_arg"; break])
+done
+CC="$ac_save_CC"
+])
+if test -z "$am_cv_prog_cc_stdc"; then
+  AC_MSG_RESULT([none needed])
+else
+  AC_MSG_RESULT($am_cv_prog_cc_stdc)
+fi
+case "x$am_cv_prog_cc_stdc" in
+  x|xno) ;;
+  *) CC="$CC $am_cv_prog_cc_stdc" ;;
+esac
+])
+
+dnl ---------------------------------------------------------------------------
+dnl Look for the curses libraries.  Older curses implementations may require
+dnl termcap/termlib to be linked as well.
+AC_DEFUN([CF_CURSES_LIBS],[
+AC_CHECK_FUNC(initscr,,[
+case $host_os in #(vi
+freebsd*) #(vi
+       AC_CHECK_LIB(mytinfo,tgoto,[LIBS="-lmytinfo $LIBS"])
+       ;;
+hpux10.*|hpux11.*)
+       AC_CHECK_LIB(cur_colr,initscr,[
+               LIBS="-lcur_colr $LIBS"
+               CFLAGS="-I/usr/include/curses_colr $CFLAGS"
+               ac_cv_func_initscr=yes
+               ],[
+       AC_CHECK_LIB(Hcurses,initscr,[
+               # HP's header uses __HP_CURSES, but user claims _HP_CURSES.
+               LIBS="-lHcurses $LIBS"
+               CFLAGS="-D__HP_CURSES -D_HP_CURSES $CFLAGS"
+               ac_cv_func_initscr=yes
+               ])])
+       ;;
+linux*) # Suse Linux does not follow /usr/lib convention
+       LIBS="$LIBS -L/lib"
+       ;;
+esac
+
+if test ".$With5lib" != ".no" ; then
+if test -d /usr/5lib ; then
+       # SunOS 3.x or 4.x
+       CPPFLAGS="$CPPFLAGS -I/usr/5include"
+       LIBS="$LIBS -L/usr/5lib"
+fi
+fi
+
+if test ".$ac_cv_func_initscr" != .yes ; then
+       cf_save_LIBS="$LIBS"
+       cf_term_lib=""
+       cf_curs_lib=""
+
+       # Check for library containing tgoto.  Do this before curses library
+       # because it may be needed to link the test-case for initscr.
+       AC_CHECK_FUNC(tgoto,[cf_term_lib=predefined],[
+               for cf_term_lib in termcap termlib unknown
+               do
+                       AC_CHECK_LIB($cf_term_lib,tgoto,[break])
+               done
+       ])
+
+       # Check for library containing initscr
+       test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS"
+       for cf_curs_lib in cursesX curses ncurses xcurses jcurses unknown
+       do
+               AC_CHECK_LIB($cf_curs_lib,initscr,[break])
+       done
+       test $cf_curs_lib = unknown && AC_ERROR(no curses library found)
+
+       LIBS="-l$cf_curs_lib $cf_save_LIBS"
+       if test "$cf_term_lib" = unknown ; then
+               AC_MSG_CHECKING(if we can link with $cf_curs_lib library)
+               AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>],
+                       [initscr()],
+                       [cf_result=yes],
+                       [cf_result=no])
+               AC_MSG_RESULT($cf_result)
+               test $cf_result = no && AC_ERROR(Cannot link curses library)
+       elif test "$cf_term_lib" != predefined ; then
+               AC_MSG_CHECKING(if we need both $cf_curs_lib and $cf_term_lib libraries)
+               AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>],
+                       [initscr(); tgoto((char *)0, 0, 0);],
+                       [cf_result=no],
+                       [
+                       LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS"
+                       AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>],
+                               [initscr()],
+                               [cf_result=yes],
+                               [cf_result=error])
+                       ])
+               AC_MSG_RESULT($cf_result)
+       fi
+fi
+
+])])
+
+dnl ---------------------------------------------------------------------------
+dnl Check if a function is declared by including a set of include files.
+dnl Invoke the corresponding actions according to whether it is found or not.
+dnl
+dnl Gcc (unlike other compilers) will only warn about the miscast assignment
+dnl in the first test, but most compilers will oblige with an error in the
+dnl second test.
+dnl
+dnl CF_CHECK_FUNCDECL(INCLUDES, FUNCTION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+AC_DEFUN([CF_CHECK_FUNCDECL],
+[
+AC_MSG_CHECKING([for $2 declaration])
+AC_CACHE_VAL(ac_cv_func_decl_$2,
+[AC_TRY_COMPILE([$1],
+[#ifndef ${ac_func}
+extern int     ${ac_func}();
+#endif],[
+AC_TRY_COMPILE([$1],
+[#ifndef ${ac_func}
+int    (*p)() = ${ac_func};
+#endif],[
+eval "ac_cv_func_decl_$2=yes"],[
+eval "ac_cv_func_decl_$2=no"])],[
+eval "ac_cv_func_decl_$2=yes"])])
+if eval "test \"`echo '$ac_cv_func_'decl_$2`\" = yes"; then
+  AC_MSG_RESULT(yes)
+  ifelse([$3], , :, [$3])
+else
+  AC_MSG_RESULT(no)
+ifelse([$4], , , [$4
+])dnl
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Check if functions are declared by including a set of include files.
+dnl and define DECL_XXX if not.
+dnl
+dnl CF_CHECK_FUNCDECLS(INCLUDES, FUNCTION... [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+AC_DEFUN([CF_CHECK_FUNCDECLS],
+[for ac_func in $2
+do
+CF_CHECK_FUNCDECL([$1], $ac_func,
+[
+  CF_UPPER(ac_tr_func,HAVE_$ac_func)
+  AC_DEFINE_UNQUOTED($ac_tr_func) $3],
+[$4])dnl
+dnl [$3],
+dnl [
+dnl   CF_UPPER(ac_tr_func,DECL_$ac_func)
+dnl   AC_DEFINE_UNQUOTED($ac_tr_func) $4])dnl
+done
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Make an uppercase version of a variable
+dnl $1=uppercase($2)
+AC_DEFUN([CF_UPPER],
+[
+changequote(,)dnl
+$1=`echo $2 | tr '[a-z]' '[A-Z]'`
+changequote([,])dnl
+])dnl
+dnl ---------------------------------------------------------------------------
+
+# Define a conditional.
+
+AC_DEFUN(AM_CONDITIONAL,
+[AC_SUBST($1_TRUE)
+AC_SUBST($1_FALSE)
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi])
+
+# gssapi.m4: Find GSSAPI libraries in either Heimdal or MIT implementations
+# Brendan Cully <brendan@kublai.com> 20010529
+
+dnl MUTT_AM_PATH_GSSAPI(PREFIX)
+dnl Search for a GSSAPI implementation in the standard locations plus PREFIX,
+dnl if it is set and not "yes".
+dnl Defines GSSAPI_CFLAGS and GSSAPI_LIBS if found.
+dnl Defines GSSAPI_IMPL to "Heimdal", "MIT", or "OldMIT", or "none" if not found
+AC_DEFUN([MUTT_AM_PATH_GSSAPI],
+[
+  GSSAPI_PREFIX=[$]$1
+  GSSAPI_IMPL="none"
+  saved_CPPFLAGS="$CPPFLAGS"
+  saved_LDFLAGS="$LDFLAGS"
+  saved_LIBS="$LIBS"
+  dnl First try krb5-config
+  if test "$GSSAPI_PREFIX" != "yes"
+  then
+    krb5_path="$GSSAPI_PREFIX/bin"
+  else
+    krb5_path="$PATH"
+  fi
+  AC_PATH_PROG(KRB5CFGPATH, krb5-config, none, $krb5_path)
+  if test "$KRB5CFGPATH" != "none"
+  then
+    GSSAPI_CFLAGS="$CPPFLAGS `$KRB5CFGPATH --cflags gssapi`"
+    GSSAPI_LIBS="$MUTTLIBS `$KRB5CFGPATH --libs gssapi`"
+    case "`$KRB5CFGPATH --version`" in
+      "Kerberos 5 "*)  GSSAPI_IMPL="MIT";;
+      ?eimdal*)                GSSAPI_IMPL="Heimdal";;
+      *)               GSSAPI_IMPL="Unknown";;
+   esac
+  else
+    dnl No krb5-config, run the old code
+    if test "$GSSAPI_PREFIX" != "yes"
+    then
+      GSSAPI_CFLAGS="-I$GSSAPI_PREFIX/include"
+      GSSAPI_LDFLAGS="-L$GSSAPI_PREFIX/lib"
+      CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS"
+      LDFLAGS="$LDFLAGS $GSSAPI_LDFLAGS"
+    fi
+
+    dnl New MIT kerberos V support
+    AC_CHECK_LIB(gssapi_krb5, gss_init_sec_context, [
+      GSSAPI_IMPL="MIT",
+      GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err"
+      ],, -lkrb5 -lk5crypto -lcom_err)
+
+    dnl Heimdal kerberos V support
+    if test "$GSSAPI_IMPL" = "none"
+    then
+      AC_CHECK_LIB(gssapi, gss_init_sec_context, [
+          GSSAPI_IMPL="Heimdal"
+          GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi -lkrb5 -ldes -lasn1 -lroken"
+          GSSAPI_LIBS="$GSSAPI_LIBS -lcrypt -lcom_err"
+          ],, -lkrb5 -ldes -lasn1 -lroken -lcrypt -lcom_err)
+    fi
+
+    dnl Old MIT Kerberos V
+    dnl Note: older krb5 distributions use -lcrypto instead of
+    dnl -lk5crypto, which collides with OpenSSL.  One way of dealing
+    dnl with that is to extract all objects from krb5's libcrypto
+    dnl and from openssl's libcrypto into the same directory, then
+    dnl to create a new libcrypto from these.
+    if test "$GSSAPI_IMPL" = "none"
+    then
+      AC_CHECK_LIB(gssapi_krb5, g_order_init, [
+        GSSAPI_IMPL="OldMIT",
+        GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lcrypto -lcom_err"
+        ],, -lkrb5 -lcrypto -lcom_err)
+    fi
+  fi
+
+  CPPFLAGS="$saved_CPPFLAGS"
+  LDFLAGS="$saved_LDFLAGS"
+  LIBS="$saved_LIBS"
+])
+
+# Macro to add for using GNU gettext.
+# Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+#
+# Slightly modified by Thomas Roessler <roessler@does-not-exist.org>
+# Updated to gettext-0.10.38 by Edmund Grimley Evans <edmundo@rano.org>
+# Updated to gettext-0.10.40 by Andrew W. Nosenko <awn@bcs.zp.ua>
+#
+
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public
+# License or the GNU Library General Public License but which still want
+# to provide support for the GNU gettext functionality.
+# Please note that the actual code of the GNU gettext library is covered
+# by the GNU Library General Public License, and the rest of the GNU
+# gettext package package is covered by the GNU General Public License.
+# They are *not* in the public domain.
+
+# serial 10
+
+dnl Usage: MUTT_AM_WITH_NLS([TOOLSYMBOL], [NEEDSYMBOL], [LIBDIR]).
+dnl If TOOLSYMBOL is specified and is 'use-libtool', then a libtool library
+dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl    depending on --{enable,disable}-{shared,static} and on the presence of
+dnl    AM-DISABLE-SHARED). Otherwise, a static library
+dnl    $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl    implementations (in libc or libintl) without the ngettext() function
+dnl    will be ignored.
+dnl LIBDIR is used to find the intl libraries.  If empty,
+dnl    the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl    and used.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl    Catalog format: none
+dnl    Catalog extension: none
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([MUTT_AM_WITH_NLS],
+  [AC_MSG_CHECKING([whether NLS is requested])
+    dnl Default is enabled NLS
+    AC_ARG_ENABLE(nls,
+      [  --disable-nls              Do not use Native Language Support],
+      USE_NLS=$enableval, USE_NLS=yes)
+    AC_MSG_RESULT($USE_NLS)
+    AC_SUBST(USE_NLS)
+
+    BUILD_INCLUDED_LIBINTL=no
+    USE_INCLUDED_LIBINTL=no
+    INTLLIBS=
+
+    dnl If we use NLS figure out what method
+    if test "$USE_NLS" = "yes"; then
+      AC_DEFINE(ENABLE_NLS, 1,
+        [Define to 1 if translation of program messages to the user's native language
+   is requested.])
+      AC_MSG_CHECKING([whether included gettext is requested])
+      AC_ARG_WITH(included-gettext,
+        [  --with-included-gettext    Use the GNU gettext library included here],
+        nls_cv_force_use_gnu_gettext=$withval,
+        nls_cv_force_use_gnu_gettext=no)
+      AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
+
+      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+        dnl User does not insist on using GNU NLS library.  Figure out what
+        dnl to use.  If GNU gettext is available we use this.  Else we have
+        dnl to fall back to GNU NLS library.
+       CATOBJEXT=NONE
+
+        dnl Add a version number to the cache macros.
+        define(gt_cv_func_gnugettext_libc, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libc])
+        define(gt_cv_func_gnugettext_libintl, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libintl])
+
+       AC_CHECK_HEADER(libintl.h,
+         [AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
+           [AC_TRY_LINK([#include <libintl.h>
+extern int _nl_msg_cat_cntr;],
+              [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
+              gt_cv_func_gnugettext_libc=yes,
+              gt_cv_func_gnugettext_libc=no)])
+
+          if test "$gt_cv_func_gnugettext_libc" != "yes"; then
+            AC_CACHE_CHECK([for GNU gettext in libintl],
+              gt_cv_func_gnugettext_libintl,
+              [gt_save_LIBS="$LIBS"
+               LIBS="$LIBS -lintl $LIBICONV"
+               AC_TRY_LINK([#include <libintl.h>
+extern int _nl_msg_cat_cntr;],
+                 [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
+                 gt_cv_func_gnugettext_libintl=yes,
+                 gt_cv_func_gnugettext_libintl=no)
+               LIBS="$gt_save_LIBS"])
+          fi
+
+          dnl If an already present or preinstalled GNU gettext() is found,
+          dnl use it.  But if this macro is used in GNU gettext, and GNU
+          dnl gettext is already preinstalled in libintl, we update this
+          dnl libintl.  (Cf. the install rule in intl/Makefile.in.)
+          if test "$gt_cv_func_gnugettext_libc" = "yes" \
+             || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
+                  && test "$PACKAGE" != gettext; }; then
+            AC_DEFINE(HAVE_GETTEXT, 1,
+               [Define if the GNU gettext() function is already present or preinstalled.])
+
+            if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
+              dnl If iconv() is in a separate libiconv library, then anyone
+              dnl linking with libintl{.a,.so} also needs to link with
+              dnl libiconv.
+              INTLLIBS="-lintl $LIBICONV"
+            fi
+
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $INTLLIBS"
+            AC_CHECK_FUNCS(dcgettext)
+            LIBS="$gt_save_LIBS"
+
+            dnl Search for GNU msgfmt in the PATH.
+            MUTT_AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+              [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
+            AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+
+            dnl Search for GNU xgettext in the PATH.
+            MUTT_AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+              [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
+
+            CATOBJEXT=.gmo
+          fi
+       ])
+
+        if test "$CATOBJEXT" = "NONE"; then
+         dnl GNU gettext is not found in the C library.
+         dnl Fall back on GNU gettext library.
+         nls_cv_use_gnu_gettext=yes
+        fi
+      fi
+
+      if test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions used to generate GNU NLS library.
+        INTLOBJS="\$(GETTOBJS)"
+        MUTT_AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+         [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
+        AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+        MUTT_AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+         [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
+        AC_SUBST(MSGFMT)
+       BUILD_INCLUDED_LIBINTL=yes
+       USE_INCLUDED_LIBINTL=yes
+        CATOBJEXT=.gmo
+       INTLLIBS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a $LIBICONV"
+       LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+      fi
+
+      dnl This could go away some day; the MUTT_PATH_PROG_WITH_TEST already does it.
+      dnl Test whether we really found GNU msgfmt.
+      if test "$GMSGFMT" != ":"; then
+       dnl If it is no GNU msgfmt we define it as : so that the
+       dnl Makefiles still can work.
+       if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then
+         : ;
+       else
+         AC_MSG_RESULT(
+           [found msgfmt program is not GNU msgfmt; ignore it])
+         GMSGFMT=":"
+       fi
+      fi
+
+      dnl This could go away some day; the MUTT_PATH_PROG_WITH_TEST already does it.
+      dnl Test whether we really found GNU xgettext.
+      if test "$XGETTEXT" != ":"; then
+       dnl If it is no GNU xgettext we define it as : so that the
+       dnl Makefiles still can work.
+       if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then
+         : ;
+       else
+         AC_MSG_RESULT(
+           [found xgettext program is not GNU xgettext; ignore it])
+         XGETTEXT=":"
+       fi
+      fi
+
+      dnl We need to process the po/ directory.
+      POSUB=po
+    fi
+    AC_OUTPUT_COMMANDS(
+     [for ac_file in $CONFIG_FILES; do
+        # Support "outfile[:infile[:infile...]]"
+        case "$ac_file" in
+          *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+        esac
+        # PO directories have a Makefile.in generated from Makefile.in.in.
+        case "$ac_file" in */Makefile.in)
+          # Adjust a relative srcdir.
+          ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+          ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+          ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+          # In autoconf-2.13 it is called $ac_given_srcdir.
+          # In autoconf-2.50 it is called $srcdir.
+          test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+          case "$ac_given_srcdir" in
+            .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+            /*) top_srcdir="$ac_given_srcdir" ;;
+            *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+          esac
+          if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+            rm -f "$ac_dir/POTFILES"
+            test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+            sed -e "/^#/d" -e "/^[     ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES"
+            test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+            sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          fi
+          ;;
+        esac
+      done])
+
+
+    dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+    dnl to 'yes' because some of the testsuite requires it.
+    if test "$PACKAGE" = gettext; then
+      BUILD_INCLUDED_LIBINTL=yes
+    fi
+
+    dnl intl/plural.c is generated from intl/plural.y. It requires bison,
+    dnl because plural.y uses bison specific features. It requires at least
+    dnl bison-1.26 because earlier versions generate a plural.c that doesn't
+    dnl compile.
+    dnl bison is only needed for the maintainer (who touches plural.y). But in
+    dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
+    dnl the rule in general Makefile. Now, some people carelessly touch the
+    dnl files or have a broken "make" program, hence the plural.c rule will
+    dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
+    dnl present or too old.
+    AC_CHECK_PROGS([INTLBISON], [bison])
+    if test -z "$INTLBISON"; then
+      ac_verc_fail=yes
+    else
+      dnl Found it, now check the version.
+      AC_MSG_CHECKING([version of bison])
+changequote(<<,>>)dnl
+      ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+      case $ac_prog_version in
+        '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+        1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+changequote([,])dnl
+           ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+        *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+      esac
+      AC_MSG_RESULT([$ac_prog_version])
+    fi
+    if test $ac_verc_fail = yes; then
+      INTLBISON=:
+    fi
+
+    dnl These rules are solely for the distribution goal.  While doing this
+    dnl we only have to keep exactly one list of the available catalogs
+    dnl in configure.in.
+    for lang in $ALL_LINGUAS; do
+      GMOFILES="$GMOFILES $lang.gmo"
+      POFILES="$POFILES $lang.po"
+    done
+
+    dnl Make all variables we use known to autoconf.
+    AC_SUBST(BUILD_INCLUDED_LIBINTL)
+    AC_SUBST(USE_INCLUDED_LIBINTL)
+    AC_SUBST(CATALOGS)
+    AC_SUBST(CATOBJEXT)
+    AC_SUBST(GMOFILES)
+    AC_SUBST(INTLLIBS)
+    AC_SUBST(INTLOBJS)
+    AC_SUBST(POFILES)
+    AC_SUBST(POSUB)
+
+    dnl For backward compatibility. Some configure.ins may be using this.
+    nls_cv_header_intl=
+    nls_cv_header_libgt=
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    DATADIRNAME=share
+    AC_SUBST(DATADIRNAME)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    INSTOBJEXT=.mo
+    AC_SUBST(INSTOBJEXT)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    GENCAT=gencat
+    AC_SUBST(GENCAT)
+  ])
+
+dnl Usage: Just like MUTT_AM_WITH_NLS, which see.
+AC_DEFUN([MUTT_AM_GNU_GETTEXT],
+  [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+   AC_REQUIRE([AC_PROG_CC])dnl
+   AC_REQUIRE([AC_CANONICAL_HOST])dnl
+   AC_REQUIRE([AC_PROG_RANLIB])dnl
+   AC_REQUIRE([AC_ISC_POSIX])dnl
+   AC_REQUIRE([AC_HEADER_STDC])dnl
+   AC_REQUIRE([AC_C_CONST])dnl
+   AC_REQUIRE([AC_C_INLINE])dnl
+   AC_REQUIRE([AC_TYPE_OFF_T])dnl
+   AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+   AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+   AC_REQUIRE([AC_FUNC_MMAP])dnl
+   AC_REQUIRE([MUTT_jm_GLIBC21])dnl
+
+   AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+stdlib.h string.h unistd.h sys/param.h])
+   AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getcwd getegid geteuid \
+getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \
+strdup strtoul tsearch __argz_count __argz_stringify __argz_next])
+
+   MUTT_AM_ICONV
+   MUTT_AM_LANGINFO_CODESET
+   MUTT_AM_LC_MESSAGES
+   MUTT_AM_WITH_NLS([$1],[$2],[$3])
+
+   if test "x$CATOBJEXT" != "x"; then
+     if test "x$ALL_LINGUAS" = "x"; then
+       LINGUAS=
+     else
+       AC_MSG_CHECKING(for catalogs to be installed)
+       NEW_LINGUAS=
+       for presentlang in $ALL_LINGUAS; do
+         useit=no
+         for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do
+           # Use the presentlang catalog if desiredlang is
+           #   a. equal to presentlang, or
+           #   b. a variant of presentlang (because in this case,
+           #      presentlang can be used as a fallback for messages
+           #      which are not translated in the desiredlang catalog).
+           case "$desiredlang" in
+             "$presentlang"*) useit=yes;;
+           esac
+         done
+         if test $useit = yes; then
+           NEW_LINGUAS="$NEW_LINGUAS $presentlang"
+         fi
+       done
+       LINGUAS=$NEW_LINGUAS
+       AC_MSG_RESULT($LINGUAS)
+     fi
+
+     dnl Construct list of names of catalog files to be constructed.
+     if test -n "$LINGUAS"; then
+       for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+     fi
+   fi
+
+   dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
+   dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
+   dnl Try to locate is.
+   MKINSTALLDIRS=
+   if test -n "$ac_aux_dir"; then
+     MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
+   fi
+   if test -z "$MKINSTALLDIRS"; then
+     MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+   fi
+   AC_SUBST(MKINSTALLDIRS)
+
+   dnl Enable libtool support if the surrounding package wishes it.
+   INTL_LIBTOOL_SUFFIX_PREFIX=ifelse([$1], use-libtool, [l], [])
+   AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
+  ])
+
+# Search path for a program which passes the given test.
+# Ulrich Drepper <drepper@cygnus.com>, 1996.
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public
+# License or the GNU Library General Public License but which still want
+# to provide support for the GNU gettext functionality.
+# Please note that the actual code of the GNU gettext library is covered
+# by the GNU Library General Public License, and the rest of the GNU
+# gettext package package is covered by the GNU General Public License.
+# They are *not* in the public domain.
+
+# serial 2
+
+dnl MUTT_AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([MUTT_AM_PATH_PROG_WITH_TEST],
+[# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+  /*)
+  ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in ifelse([$5], , $PATH, [$5]); do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if [$3]; then
+       ac_cv_path_$1="$ac_dir/$ac_word"
+       break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+  ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+  AC_MSG_RESULT([$]$1)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
+
+# glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40)
+dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+# Test for the GNU C Library, version 2.1 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([jm_GLIBC21],
+  [
+    AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
+      ac_cv_gnu_library_2_1,
+      [AC_EGREP_CPP([Lucky GNU user],
+       [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+       ],
+       ac_cv_gnu_library_2_1=yes,
+       ac_cv_gnu_library_2_1=no)
+      ]
+    )
+    AC_SUBST(GLIBC21)
+    GLIBC21="$ac_cv_gnu_library_2_1"
+  ]
+)
+
+#serial AM2
+
+dnl From Bruno Haible.
+
+AC_DEFUN([MUTT_AM_ICONV],
+[
+  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+  dnl those with the standalone portable GNU libiconv installed).
+
+  AC_ARG_WITH([libiconv-prefix],
+[  --with-libiconv-prefix=DIR Search for libiconv in DIR/include and DIR/lib], [
+    for dir in `echo "$withval" | tr : ' '`; do
+      if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
+      if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi
+    done
+   ])
+
+  AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+      [iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);],
+      am_cv_func_iconv=yes)
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS -liconv"
+      AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+        [iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);],
+        am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes)
+      LIBS="$am_save_LIBS"
+    fi
+  ])
+  if test "$am_cv_func_iconv" = yes; then
+    AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+    AC_MSG_CHECKING([for iconv declaration])
+    AC_CACHE_VAL(am_cv_proto_iconv, [
+      AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    AC_MSG_RESULT([$]{ac_t:-
+         }[$]am_cv_proto_iconv)
+    AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
+      [Define as const if the declaration of iconv() needs const.])
+  fi
+  LIBICONV=
+  if test "$am_cv_lib_iconv" = yes; then
+    LIBICONV="-liconv"
+  fi
+  AC_SUBST(LIBICONV)
+])
+
+#serial AM1
+
+dnl From Bruno Haible.
+
+AC_DEFUN([MUTT_AM_LANGINFO_CODESET],
+[
+  AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
+    [AC_TRY_LINK([#include <langinfo.h>],
+      [char* cs = nl_langinfo(CODESET);],
+      am_cv_langinfo_codeset=yes,
+      am_cv_langinfo_codeset=no)
+    ])
+  if test $am_cv_langinfo_codeset = yes; then
+    AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
+      [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
+  fi
+])
+
+# Check whether LC_MESSAGES is available in <locale.h>.
+# Ulrich Drepper <drepper@cygnus.com>, 1995.
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public
+# License or the GNU Library General Public License but which still want
+# to provide support for the GNU gettext functionality.
+# Please note that the actual code of the GNU gettext library is covered
+# by the GNU Library General Public License, and the rest of the GNU
+# gettext package package is covered by the GNU General Public License.
+# They are *not* in the public domain.
+
+# serial 2
+
+AC_DEFUN([MUTT_AM_LC_MESSAGES],
+  [if test $ac_cv_header_locale_h = yes; then
+    AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+      [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+       am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+    if test $am_cv_val_LC_MESSAGES = yes; then
+      AC_DEFINE(HAVE_LC_MESSAGES, 1,
+        [Define if your <locale.h> file defines LC_MESSAGES.])
+    fi
+  fi])
+
+#serial 2
+
+# Test for the GNU C Library, version 2.1 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([MUTT_jm_GLIBC21],
+  [
+    AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
+      ac_cv_gnu_library_2_1,
+      [AC_EGREP_CPP([Lucky GNU user],
+       [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+       ],
+       ac_cv_gnu_library_2_1=yes,
+       ac_cv_gnu_library_2_1=no)
+      ]
+    )
+    AC_SUBST(GLIBC21)
+    GLIBC21="$ac_cv_gnu_library_2_1"
+  ]
+)
+
+dnl vim:ft=config:
+
+dnl Search for libesmtp, by Steven Engelhardt <sengelha@yahoo.com>
+dnl
+dnl libesmtp often requires linking against -lpthread or -lc_r (BSD).
+dnl This macro attempts to centralize this code.
+
+AC_DEFUN([MUTT_AM_LIBESMTP],
+[
+  AC_ARG_WITH(
+    [libesmtp],
+    [  --with-libesmtp=DIR      Compile in support for libesmtp for the MTA],
+    [ if test "$with_libesmtp" != "no"
+      then
+        mutt_libesmtp_check_path="$PATH"
+
+        if test "$with_libesmtp" != "yes"
+        then
+          mutt_libesmtp_check_path="$tmp_path:$withval/bin"
+        fi
+
+        dnl 1. Find libesmtp-config
+        AC_PATH_PROG([mutt_libesmtp_config_path],
+                     [libesmtp-config],
+                     [no],
+                     [$mutt_libesmtp_check_path])
+
+        if test "$mutt_libesmtp_config_path" = "no"
+        then
+          AC_MSG_ERROR([libesmtp-config binary not found.])
+        fi
+
+        dnl 2. Get CFLAGS and LIBS from libesmtp-config
+        mutt_libesmtp_cflags=`$mutt_libesmtp_config_path --cflags`
+        mutt_libesmtp_libs=`$mutt_libesmtp_config_path --libs`
+
+        dnl 3. Verify libesmtp.h can be found with these settings
+        temp_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $mutt_libesmtp_cflags"
+        AC_CHECK_HEADER([libesmtp.h],
+                        [],
+                        AC_MSG_ERROR([Could not find libesmtp.h]))
+        CFLAGS="$temp_CFLAGS"
+
+        dnl 4. Verify the libesmtp library can be linked in
+        temp_CFLAGS="$CFLAGS"
+        temp_LIBS="$LIBS"
+        CFLAGS="$CFLAGS $mutt_libesmtp_cflags"
+        LIBS="$LIBS $mutt_libesmtp_libs"
+        AC_CHECK_LIB([esmtp],
+                     [smtp_create_session],
+                     [],
+                     AC_MSG_ERROR([Could not find libesmtp]))
+        CFLAGS="$temp_CFLAGS"
+        LIBS="$temp_LIBS"
+
+        dnl 5. Export use_libesmtp variable so configure.in can
+        dnl    act accordingly.
+        use_libesmtp=yes
+      fi
+    ]
+  )
+])
+
diff --git a/addrbook.c b/addrbook.c
new file mode 100644 (file)
index 0000000..08bed17
--- /dev/null
@@ -0,0 +1,242 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_menu.h"
+#include "mapping.h"
+#include "sort.h"
+
+#include "mutt_idna.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#define RSORT(x) (SortAlias & SORT_REVERSE) ? -x : x
+
+static struct mapping_t AliasHelp[] = {
+  { N_("Exit"),   OP_EXIT },
+  { N_("Del"),    OP_DELETE },
+  { N_("Undel"),  OP_UNDELETE },
+  { N_("Select"), OP_GENERIC_SELECT_ENTRY },
+  { N_("Help"),   OP_HELP },
+  { NULL }
+};
+
+static const char *
+alias_format_str (char *dest, size_t destlen, char op, const char *src,
+                 const char *fmt, const char *ifstring, const char *elsestring,
+                 unsigned long data, format_flag flags)
+{
+  char tmp[SHORT_STRING], adr[SHORT_STRING];
+  ALIAS *alias = (ALIAS *) data;
+
+  switch (op)
+  {
+    case 'f':
+      snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
+      snprintf (dest, destlen, tmp, alias->del ? "D" : " ");
+      break;
+    case 'a':
+      mutt_format_s (dest, destlen, fmt, alias->name);
+      break;
+    case 'r':
+      adr[0] = 0;
+      rfc822_write_address (adr, sizeof (adr), alias->addr, 1);
+      snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
+      snprintf (dest, destlen, tmp, adr);
+      break;
+    case 'n':
+      snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+      snprintf (dest, destlen, tmp, alias->num + 1);
+      break;
+    case 't':
+      dest[0] = alias->tagged ? '*' : ' ';
+      dest[1] = 0;
+      break;
+  }
+
+  return (src);
+}
+
+void alias_entry (char *s, size_t slen, MUTTMENU *m, int num)
+{
+  mutt_FormatString (s, slen, NONULL (AliasFmt), alias_format_str, (unsigned long) ((ALIAS **) m->data)[num], M_FORMAT_ARROWCURSOR);
+}
+
+int alias_tag (MUTTMENU *menu, int n, int m)
+{
+  ALIAS *cur = ((ALIAS **) menu->data)[n];
+  int ot = cur->tagged;
+  
+  cur->tagged = (m >= 0 ? m : !cur->tagged);
+  
+  return cur->tagged - ot;
+}
+
+static int alias_SortAlias (const void *a, const void *b)
+{
+  ALIAS *pa = *(ALIAS **) a;
+  ALIAS *pb = *(ALIAS **) b;
+  int r = mutt_strcasecmp (pa->name, pb->name);
+
+  return (RSORT (r));
+}
+
+static int alias_SortAddress (const void *a, const void *b)
+{
+  ADDRESS *pa = (*(ALIAS **) a)->addr;
+  ADDRESS *pb = (*(ALIAS **) b)->addr;
+  int r;
+
+  if (pa == pb)
+    r = 0;
+  else if (pa == NULL)
+    r = -1;
+  else if (pb == NULL)
+    r = 1;
+  else if (pa->personal)
+  { 
+    if (pb->personal)
+      r = mutt_strcasecmp (pa->personal, pb->personal);
+    else
+      r = 1;
+  }
+  else if (pb->personal)
+    r = -1;
+  else
+    r = ascii_strcasecmp (pa->mailbox, pb->mailbox);
+  return (RSORT (r));
+}
+
+void mutt_alias_menu (char *buf, size_t buflen, ALIAS *aliases)
+{
+  ALIAS *aliasp;
+  MUTTMENU *menu;
+  ALIAS **AliasTable = NULL;
+  int t = -1;
+  int i, done = 0;
+  int op;
+  char helpstr[SHORT_STRING];
+
+  int omax;
+  
+  if (!aliases)
+  {
+    mutt_error _("You have no aliases!");
+    return;
+  }
+  
+  /* tell whoever called me to redraw the screen when I return */
+  set_option (OPTNEEDREDRAW);
+  
+  menu = mutt_new_menu ();
+  menu->make_entry = alias_entry;
+  menu->tag = alias_tag;
+  menu->menu = MENU_ALIAS;
+  menu->title = _("Aliases");
+  menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_ALIAS, AliasHelp);
+
+new_aliases:
+
+  omax = menu->max;
+  
+  /* count the number of aliases */
+  for (aliasp = aliases; aliasp; aliasp = aliasp->next)
+  {
+    aliasp->self->del    = 0;
+    aliasp->self->tagged = 0;
+    menu->max++;
+  }
+
+  safe_realloc (&AliasTable, menu->max * sizeof (ALIAS *));
+  menu->data = AliasTable;
+
+  for (i = omax, aliasp = aliases; aliasp; aliasp = aliasp->next, i++)
+  {
+    AliasTable[i] = aliasp->self;
+    aliases       = aliasp;
+  }
+
+  if ((SortAlias & SORT_MASK) != SORT_ORDER)
+  {
+    qsort (AliasTable, i, sizeof (ALIAS *),
+        (SortAlias & SORT_MASK) == SORT_ADDRESS ? alias_SortAddress : alias_SortAlias);
+  }
+
+  for (i=0; i<menu->max; i++) AliasTable[i]->num = i;
+
+  while (!done)
+  {
+    if (aliases->next)
+    {
+      menu->redraw |= REDRAW_FULL;
+      aliases       = aliases->next;
+      goto new_aliases;
+    }
+    
+    switch ((op = mutt_menuLoop (menu)))
+    {
+      case OP_DELETE:
+      case OP_UNDELETE:
+        if (menu->tagprefix)
+        {
+         for (i = 0; i < menu->max; i++)
+           if (AliasTable[i]->tagged)
+             AliasTable[i]->del = (op == OP_DELETE) ? 1 : 0;
+         menu->redraw |= REDRAW_INDEX;
+       }
+        else
+        {
+         AliasTable[menu->current]->self->del = (op == OP_DELETE) ? 1 : 0;
+         menu->redraw |= REDRAW_CURRENT;
+         if (option (OPTRESOLVE) && menu->current < menu->max - 1)
+         {
+           menu->current++;
+           menu->redraw |= REDRAW_INDEX;
+         }
+       }
+        break;
+      case OP_GENERIC_SELECT_ENTRY:
+        t = menu->current;
+      case OP_EXIT:
+       done = 1;
+       break;
+    }
+  }
+
+  for (i = 0; i < menu->max; i++)
+  {
+    if (AliasTable[i]->tagged)
+    {
+      mutt_addrlist_to_local (AliasTable[i]->addr);
+      rfc822_write_address (buf, buflen, AliasTable[i]->addr, 0);
+      t = -1;
+    }
+  }
+
+  if(t != -1)
+  {
+      mutt_addrlist_to_local (AliasTable[t]->addr);
+    rfc822_write_address (buf, buflen, AliasTable[t]->addr, 0);
+  }
+
+  mutt_menuDestroy (&menu);
+  FREE (&AliasTable);
+  
+}
diff --git a/alias.c b/alias.c
new file mode 100644 (file)
index 0000000..508e24b
--- /dev/null
+++ b/alias.c
@@ -0,0 +1,577 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_regex.h"
+#include "mutt_curses.h"
+#include "mutt_idna.h"
+
+#include <string.h>
+#include <ctype.h>
+
+ADDRESS *mutt_lookup_alias (const char *s)
+{
+  ALIAS *t = Aliases;
+
+  for (; t; t = t->next)
+    if (!mutt_strcasecmp (s, t->name))
+      return (t->addr);
+  return (NULL);   /* no such alias */
+}
+
+static ADDRESS *mutt_expand_aliases_r (ADDRESS *a, LIST **expn)
+{
+  ADDRESS *head = NULL, *last = NULL, *t, *w;
+  LIST *u;
+  char i;
+  const char *fqdn;
+  
+  while (a)
+  {
+    if (!a->group && !a->personal && a->mailbox && strchr (a->mailbox, '@') == NULL)
+    {
+      t = mutt_lookup_alias (a->mailbox);
+
+      if (t)
+      {        
+        i = 0;
+        for (u = *expn; u; u = u->next)
+       {
+         if (mutt_strcmp (a->mailbox, u->data) == 0) /* alias already found */
+         {
+           dprint (1, (debugfile, "mutt_expand_aliases_r(): loop in alias found for '%s'\n", a->mailbox));
+           i = 1;
+           break;
+         }
+       }
+
+        if (!i)
+       {
+          u = safe_malloc (sizeof (LIST));
+          u->data = safe_strdup (a->mailbox);
+          u->next = *expn;
+          *expn = u;
+         w = rfc822_cpy_adr (t);
+         w = mutt_expand_aliases_r (w, expn);
+         if (head)
+           last->next = w;
+         else
+           head = last = w;
+         while (last && last->next)
+           last = last->next;
+        }
+       t = a;
+       a = a->next;
+       t->next = NULL;
+       rfc822_free_address (&t);
+       continue;
+      }
+      else
+      {
+       struct passwd *pw = getpwnam (a->mailbox);
+
+       if (pw)
+       {
+         char namebuf[STRING];
+         
+         mutt_gecos_name (namebuf, sizeof (namebuf), pw);
+         mutt_str_replace (&a->personal, namebuf);
+         
+#ifdef EXACT_ADDRESS
+         FREE (&a->val);
+#endif
+       }
+      }
+    }
+
+    if (head)
+    {
+      last->next = a;
+      last = last->next;
+    }
+    else
+      head = last = a;
+    a = a->next;
+    last->next = NULL;
+  }
+
+  if (option (OPTUSEDOMAIN) && (fqdn = mutt_fqdn(1)))
+  {
+    /* now qualify all local addresses */
+    rfc822_qualify (head, fqdn);
+  }
+
+  return (head);
+}
+
+ADDRESS *mutt_expand_aliases (ADDRESS *a)
+{
+  ADDRESS *t;
+  LIST *expn = NULL; /* previously expanded aliases to avoid loops */
+
+  t = mutt_expand_aliases_r (a, &expn);
+  mutt_free_list (&expn);
+  return (mutt_remove_duplicates (t));
+}
+
+void mutt_expand_aliases_env (ENVELOPE *env)
+{
+  env->from = mutt_expand_aliases (env->from);
+  env->to = mutt_expand_aliases (env->to);
+  env->cc = mutt_expand_aliases (env->cc);
+  env->bcc = mutt_expand_aliases (env->bcc);
+  env->reply_to = mutt_expand_aliases (env->reply_to);
+  env->mail_followup_to = mutt_expand_aliases (env->mail_followup_to);
+}
+
+
+/* 
+ * if someone has an address like
+ *     From: Michael `/bin/rm -f ~` Elkins <me@mutt.org>
+ * and the user creates an alias for this, Mutt could wind up executing
+ * the backtics because it writes aliases like
+ *     alias me Michael `/bin/rm -f ~` Elkins <me@mutt.org>
+ * To avoid this problem, use a backslash (\) to quote any backtics.  We also
+ * need to quote backslashes as well, since you could defeat the above by
+ * doing
+ *     From: Michael \`/bin/rm -f ~\` Elkins <me@mutt.org>
+ * since that would get aliased as
+ *     alias me Michael \\`/bin/rm -f ~\\` Elkins <me@mutt.org>
+ * which still gets evaluated because the double backslash is not a quote.
+ * 
+ * Additionally, we need to quote ' and " characters - otherwise, mutt will
+ * interpret them on the wrong parsing step.
+ * 
+ * $ wants to be quoted since it may indicate the start of an environment
+ * variable.
+ */
+
+static void write_safe_address (FILE *fp, char *s)
+{
+  while (*s)
+  {
+    if (*s == '\\' || *s == '`' || *s == '\'' || *s == '"'
+       || *s == '$')
+      fputc ('\\', fp);
+    fputc (*s, fp);
+    s++;
+  }
+}
+
+ADDRESS *mutt_get_address (ENVELOPE *env, char **pfxp)
+{
+  ADDRESS *adr;
+  char *pfx = NULL;
+
+  if (mutt_addr_is_user (env->from))
+  {
+    if (env->to && !mutt_is_mail_list (env->to))
+    {
+      pfx = "To";
+      adr = env->to;
+    }
+    else
+    {
+      pfx = "Cc";
+      adr = env->cc;
+    }
+  }
+  else if (env->reply_to && !mutt_is_mail_list (env->reply_to))
+  {
+    pfx = "Reply-To";
+    adr = env->reply_to;
+  }
+  else
+  {
+    adr = env->from;
+    pfx = "From";
+  }
+
+  if (pfxp) *pfxp = pfx;
+
+  return adr;
+}
+
+void mutt_create_alias (ENVELOPE *cur, ADDRESS *iadr)
+{
+  ALIAS *new, *t;
+  char buf[LONG_STRING], prompt[SHORT_STRING], *pc;
+  char *err = NULL;
+  char fixed[LONG_STRING];
+  FILE *rc;
+  ADDRESS *adr = NULL;
+
+  if (cur)
+  {
+    adr = mutt_get_address (cur, NULL);
+  }
+  else if (iadr)
+  {
+    adr = iadr;
+  }
+
+  if (adr && adr->mailbox)
+  {
+    strfcpy (buf, adr->mailbox, sizeof (buf));
+    if ((pc = strchr (buf, '@')))
+      *pc = 0;
+  }
+  else
+    buf[0] = '\0';
+
+  /* Don't suggest a bad alias name in the event of a strange local part. */
+  mutt_check_alias_name (buf, buf);
+  
+retry_name:
+  /* add a new alias */
+  if (mutt_get_field (_("Alias as: "), buf, sizeof (buf), 0) != 0 || !buf[0])
+    return;
+
+  /* check to see if the user already has an alias defined */
+  if (mutt_lookup_alias (buf))
+  {
+    mutt_error _("You already have an alias defined with that name!");
+    return;
+  }
+  
+  if (mutt_check_alias_name (buf, fixed))
+  {
+    switch (mutt_yesorno (_("Warning: This alias name may not work.  Fix it?"), M_YES))
+    {
+      case M_YES:
+       strfcpy (buf, fixed, sizeof (buf));
+       goto retry_name;
+      case -1: 
+       return;
+    }
+  }
+  
+  new       = safe_calloc (1, sizeof (ALIAS));
+  new->self = new;
+  new->name = safe_strdup (buf);
+
+  mutt_addrlist_to_local (adr);
+  
+  if (adr)
+    strfcpy (buf, adr->mailbox, sizeof (buf));
+  else
+    buf[0] = 0;
+
+  mutt_addrlist_to_idna (adr, NULL);
+  
+  do
+  {
+    if (mutt_get_field (_("Address: "), buf, sizeof (buf), 0) != 0 || !buf[0])
+    {
+      mutt_free_alias (&new);
+      return;
+    }
+    
+    if((new->addr = rfc822_parse_adrlist (new->addr, buf)) == NULL)
+      BEEP ();
+    if (mutt_addrlist_to_idna (new->addr, &err))
+    {
+      mutt_error (_("Error: '%s' is a bad IDN."), err);
+      mutt_sleep (2);
+      continue;
+    }
+  }
+  while(new->addr == NULL);
+  
+  if (adr && adr->personal && !mutt_is_mail_list (adr))
+    strfcpy (buf, adr->personal, sizeof (buf));
+  else
+    buf[0] = 0;
+
+  if (mutt_get_field (_("Personal name: "), buf, sizeof (buf), 0) != 0)
+  {
+    mutt_free_alias (&new);
+    return;
+  }
+  new->addr->personal = safe_strdup (buf);
+
+  buf[0] = 0;
+  rfc822_write_address (buf, sizeof (buf), new->addr, 1);
+  snprintf (prompt, sizeof (prompt), _("[%s = %s] Accept?"), new->name, buf);
+  if (mutt_yesorno (prompt, M_YES) != M_YES)
+  {
+    mutt_free_alias (&new);
+    return;
+  }
+
+  if ((t = Aliases))
+  {
+    while (t->next)
+      t = t->next;
+    t->next = new;
+  }
+  else
+    Aliases = new;
+
+  strfcpy (buf, NONULL (AliasFile), sizeof (buf));
+  if (mutt_get_field (_("Save to file: "), buf, sizeof (buf), M_FILE) != 0)
+    return;
+  mutt_expand_path (buf, sizeof (buf));
+  if ((rc = fopen (buf, "a")))
+  {
+    if (mutt_check_alias_name (new->name, NULL))
+      mutt_quote_filename (buf, sizeof (buf), new->name);
+    else
+      strfcpy (buf, new->name, sizeof (buf));
+    fprintf (rc, "alias %s ", buf);
+    buf[0] = 0;
+    rfc822_write_address (buf, sizeof (buf), new->addr, 0);
+    write_safe_address (rc, buf);
+    fputc ('\n', rc);
+    fclose (rc);
+    mutt_message _("Alias added.");
+  }
+  else
+    mutt_perror (buf);
+}
+
+/* 
+ * Sanity-check an alias name:  Only characters which are non-special to both
+ * the RFC 822 and the mutt configuration parser are permitted.
+ */
+
+static int check_alias_name_char (char c)
+{
+  return (c == '-' || c == '_' || c == '+' || c == '=' || c == '.' ||
+         isalnum ((unsigned char) c));
+}
+
+int mutt_check_alias_name (const char *s, char *d)
+{
+  int rv = 0;
+  for (; *s; s++) 
+  {
+    if (!check_alias_name_char (*s))
+    {
+      if (!d)
+       return -1;
+      else
+      {
+       *d++ = '_';
+       rv = -1;
+      }
+    }
+    else if (d)
+      *d++ = *s;
+  }
+  if (d)
+    *d++ = *s;
+  return rv;
+}
+
+/*
+ * This routine looks to see if the user has an alias defined for the given
+ * address.
+ */
+ADDRESS *alias_reverse_lookup (ADDRESS *a)
+{
+  ALIAS *t = Aliases;
+  ADDRESS *ap;
+
+  if (!a || !a->mailbox)
+    return NULL;
+
+  for (; t; t = t->next)
+  {
+    /* cycle through all addresses if this is a group alias */
+    for (ap = t->addr; ap; ap = ap->next)
+    {
+      if (!ap->group && ap->mailbox &&
+         ascii_strcasecmp (ap->mailbox, a->mailbox) == 0)
+       return ap;
+    }
+  }
+  return 0;
+}
+
+/* alias_complete() -- alias completion routine
+ *
+ * given a partial alias, this routine attempts to fill in the alias
+ * from the alias list as much as possible. if given empty search string
+ * or found nothing, present all aliases
+ */
+int mutt_alias_complete (char *s, size_t buflen)
+{
+  ALIAS *a = Aliases;
+  ALIAS *a_list = NULL, *a_cur = NULL;
+  char bestname[HUGE_STRING];
+  int i;
+
+#define min(a,b)        ((a<b)?a:b)
+
+  if (s[0] != 0) /* avoid empty string as strstr argument */
+  {
+    memset (bestname, 0, sizeof (bestname));
+
+    while (a)
+    {
+      if (a->name && strstr (a->name, s) == a->name)
+      {
+       if (!bestname[0]) /* init */
+         strfcpy (bestname, a->name,
+                  min (mutt_strlen (a->name) + 1, sizeof (bestname)));
+       else
+       {
+         for (i = 0 ; a->name[i] && a->name[i] == bestname[i] ; i++)
+           ;
+         bestname[i] = 0;
+       }
+      }
+      a = a->next;
+    }
+
+    if (bestname[0] != 0)
+    {
+      if (mutt_strcmp (bestname, s) != 0)
+      {
+       /* we are adding something to the completion */
+       strfcpy (s, bestname, mutt_strlen (bestname) + 1);
+       return 1;
+      }
+
+      /* build alias list and show it */
+
+      a = Aliases;
+      while (a)
+      {
+       if (a->name && (strstr (a->name, s) == a->name))
+       {
+         if (!a_list)  /* init */
+           a_cur = a_list = (ALIAS *) safe_malloc (sizeof (ALIAS));
+         else
+         {
+           a_cur->next = (ALIAS *) safe_malloc (sizeof (ALIAS));
+           a_cur = a_cur->next;
+         }
+         memcpy (a_cur, a, sizeof (ALIAS));
+         a_cur->next = NULL;
+       }
+       a = a->next;
+      }
+    }
+  }
+
+  bestname[0] = 0;
+  mutt_alias_menu (bestname, sizeof(bestname), a_list ? a_list : Aliases);
+  if (bestname[0] != 0)
+    strfcpy (s, bestname, buflen);
+
+  /* free the alias list */
+  while (a_list)
+  {
+    a_cur = a_list;
+    a_list = a_list->next;
+    FREE (&a_cur);
+  }
+
+  /* remove any aliases marked for deletion */
+  a_list = NULL;
+  for (a_cur = Aliases; a_cur;)
+  {
+    if (a_cur->del)
+    {
+      if (a_list)
+       a_list->next = a_cur->next;
+      else
+       Aliases = a_cur->next;
+      
+      a_cur->next = NULL;
+      mutt_free_alias (&a_cur);
+      
+      if (a_list)
+       a_cur = a_list;
+      else
+       a_cur = Aliases;
+    }
+    else
+    {
+      a_list = a_cur;
+      a_cur  = a_cur->next;
+    }
+  }
+  
+  return 0;
+}
+
+static int string_is_address(const char *str, const char *u, const char *d)
+{
+  char buf[LONG_STRING];
+  
+  snprintf(buf, sizeof(buf), "%s@%s", NONULL(u), NONULL(d));
+  if (ascii_strcasecmp(str, buf) == 0)
+    return 1;
+  
+  return 0;
+}
+
+/* returns TRUE if the given address belongs to the user. */
+int mutt_addr_is_user (ADDRESS *addr)
+{
+  /* NULL address is assumed to be the user. */
+  if (!addr)
+  {
+    dprint (5, (debugfile, "mail_addr_is_user: yes, NULL address\n"));
+    return 1;
+  }
+  if (!addr->mailbox)
+  {
+    dprint (5, (debugfile, "mail_addr_is_user: no, no mailbox\n"));
+    return 0;
+  }
+
+  if (ascii_strcasecmp (addr->mailbox, Username) == 0)
+  {
+    dprint (5, (debugfile, "mail_addr_is_user: yes, %s = %s\n", addr->mailbox, Username));
+    return 1;
+  }
+  if (string_is_address(addr->mailbox, Username, Hostname))
+  {
+    dprint (5, (debugfile, "mail_addr_is_user: yes, %s = %s @ %s \n", addr->mailbox, Username, Hostname));
+    return 1;
+  }
+  if (string_is_address(addr->mailbox, Username, mutt_fqdn(0)))
+  {
+    dprint (5, (debugfile, "mail_addr_is_user: yes, %s = %s @ %s \n", addr->mailbox, Username, mutt_fqdn (0)));
+    return 1;
+  }
+  if (string_is_address(addr->mailbox, Username, mutt_fqdn(1)))
+  {
+    dprint (5, (debugfile, "mail_addr_is_user: yes, %s = %s @ %s \n", addr->mailbox, Username, mutt_fqdn (1)));
+    return 1;
+  }
+
+  if (From && !ascii_strcasecmp (From->mailbox, addr->mailbox))
+  {
+    dprint (5, (debugfile, "mail_addr_is_user: yes, %s = %s\n", addr->mailbox, From->mailbox));
+    return 1;
+  }
+
+  if (mutt_match_rx_list (addr->mailbox, Alternates))
+  {
+    dprint (5, (debugfile, "mail_addr_is_user: yes, %s matched by alternates.\n", addr->mailbox));
+    return 1;
+  }
+  
+  dprint (5, (debugfile, "mail_addr_is_user: no, all failed.\n"));
+  return 0;
+}
diff --git a/ascii.c b/ascii.c
new file mode 100644 (file)
index 0000000..d4553f6
--- /dev/null
+++ b/ascii.c
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2001 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ * 
+ */
+
+
+/* 
+ * Versions of the string comparison functions which are
+ * locale-insensitive.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "ascii.h"
+
+int ascii_isupper (int c)
+{
+  return (c >= 'A') && (c <= 'Z');
+}
+
+int ascii_islower (int c)
+{
+  return (c >= 'a') && (c <= 'z');
+}
+
+int ascii_toupper (int c)
+{
+  if (ascii_islower (c))
+    return c & ~32;
+  
+  return c;
+}
+
+int ascii_tolower (int c)
+{
+  if (ascii_isupper (c))
+    return c | 32;
+  
+  return c;
+}
+
+int ascii_strcasecmp (const char *a, const char *b)
+{
+  int i;
+  
+  if (a == b)
+    return 0;
+  if (a == NULL && b)
+    return -1;
+  if (b == NULL && a)
+    return 1;
+  
+  for (; *a || *b; a++, b++)
+  {
+    if ((i = ascii_tolower (*a) - ascii_tolower (*b)))
+      return i;
+  }
+  
+  return 0;
+}
+
+int ascii_strncasecmp (const char *a, const char *b, int n)
+{
+  int i, j;
+  
+  if (a == b)
+    return 0;
+  if (a == NULL && b)
+    return -1;
+  if (b == NULL && a)
+    return 1;
+  
+  for (j = 0; (*a || *b) && j < n; a++, b++, j++)
+  {
+    if ((i = ascii_tolower (*a) - ascii_tolower (*b)))
+      return i;
+  }
+  
+  return 0;
+}
diff --git a/ascii.h b/ascii.h
new file mode 100644 (file)
index 0000000..a6c1d2c
--- /dev/null
+++ b/ascii.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2001 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ * 
+ */
+
+
+/* 
+ * Versions of the string comparison functions which are
+ * locale-insensitive.
+ */
+
+#ifndef _ASCII_H
+# define _ASCII_H
+
+int ascii_isupper (int c);
+int ascii_islower (int c);
+int ascii_toupper (int c);
+int ascii_tolower (int c);
+int ascii_strcasecmp (const char *a, const char *b);
+int ascii_strncasecmp (const char *a, const char *b, int n);
+
+#define ascii_strcmp(a,b) mutt_strcmp(a,b)
+#define ascii_strncmp(a,b,c) mutt_strncmp(a,b,c)
+
+#endif
diff --git a/attach.c b/attach.c
new file mode 100644 (file)
index 0000000..06dc12b
--- /dev/null
+++ b/attach.c
@@ -0,0 +1,1069 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_menu.h"
+#include "mutt_curses.h"
+#include "keymap.h"
+#include "rfc1524.h"
+#include "mime.h"
+#include "pager.h"
+#include "mailbox.h"
+#include "copy.h"
+#include "mx.h"
+#include "mutt_crypt.h"
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/wait.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <string.h>
+#include <errno.h>
+
+int mutt_get_tmp_attachment (BODY *a)
+{
+  char type[STRING];
+  char tempfile[_POSIX_PATH_MAX];
+  rfc1524_entry *entry = rfc1524_new_entry();
+  FILE *fpin = NULL, *fpout = NULL;
+  struct stat st;
+  
+  if(a->unlink)
+    return 0;
+
+  snprintf(type, sizeof(type), "%s/%s", TYPE(a), a->subtype);
+  rfc1524_mailcap_lookup(a, type, entry, 0);
+  rfc1524_expand_filename(entry->nametemplate, a->filename, 
+                         tempfile, sizeof(tempfile));
+  
+  rfc1524_free_entry(&entry);
+
+  if(stat(a->filename, &st) == -1)
+    return -1;
+
+  if((fpin = fopen(a->filename, "r")) && (fpout = safe_fopen(tempfile, "w")))  /* __FOPEN_CHECKED__ */
+  {
+    mutt_copy_stream (fpin, fpout);
+    mutt_str_replace (&a->filename, tempfile);
+    a->unlink = 1;
+
+    if(a->stamp >= st.st_mtime)
+      mutt_stamp_attachment(a);
+  }
+  else
+    mutt_perror(fpin ? tempfile : a->filename);
+  
+  if(fpin)  fclose(fpin);
+  if(fpout) fclose(fpout);
+  
+  return a->unlink ? 0 : -1;
+}
+
+
+/* return 1 if require full screen redraw, 0 otherwise */
+int mutt_compose_attachment (BODY *a)
+{
+  char type[STRING];
+  char command[STRING];
+  char newfile[_POSIX_PATH_MAX] = "";
+  rfc1524_entry *entry = rfc1524_new_entry ();
+  short unlink_newfile = 0;
+  int rc = 0;
+  
+  snprintf (type, sizeof (type), "%s/%s", TYPE (a), a->subtype);
+  if (rfc1524_mailcap_lookup (a, type, entry, M_COMPOSE))
+  {
+    if (entry->composecommand || entry->composetypecommand)
+    {
+
+      if (entry->composetypecommand)
+       strfcpy (command, entry->composetypecommand, sizeof (command));
+      else 
+       strfcpy (command, entry->composecommand, sizeof (command));
+      if (rfc1524_expand_filename (entry->nametemplate,
+                                     a->filename, newfile, sizeof (newfile)))
+      {
+       dprint(1, (debugfile, "oldfile: %s\t newfile: %s\n",
+                                 a->filename, newfile));
+       if (safe_symlink (a->filename, newfile) == -1)
+       {
+         if (mutt_yesorno (_("Can't match nametemplate, continue?"), M_YES) != M_YES)
+           goto bailout;
+       }
+       unlink_newfile = 1;
+      }
+      else
+       strfcpy(newfile, a->filename, sizeof(newfile));
+      
+      if (rfc1524_expand_command (a, newfile, type,
+                                     command, sizeof (command)))
+      {
+       /* For now, editing requires a file, no piping */
+       mutt_error _("Mailcap compose entry requires %%s");
+      }
+      else
+      {
+       int r;
+
+       mutt_endwin (NULL);
+       if ((r = mutt_system (command)) == -1)
+         mutt_error (_("Error running \"%s\"!"), command);
+       
+       if (r != -1 && entry->composetypecommand)
+       {
+         BODY *b;
+         FILE *fp, *tfp;
+         char tempfile[_POSIX_PATH_MAX];
+
+         if ((fp = safe_fopen (a->filename, "r")) == NULL)
+         {
+           mutt_perror _("Failure to open file to parse headers.");
+           goto bailout;
+         }
+
+         b = mutt_read_mime_header (fp, 0);
+         if (b)
+         {
+           if (b->parameter)
+           {
+             mutt_free_parameter (&a->parameter);
+             a->parameter = b->parameter;
+             b->parameter = NULL;
+           }
+           if (b->description) {
+             FREE (&a->description);
+             a->description = b->description;
+             b->description = NULL;
+           }
+           if (b->form_name)
+           {
+             FREE (&a->form_name);
+             a->form_name = b->form_name;
+             b->form_name = NULL;
+           }
+
+           /* Remove headers by copying out data to another file, then 
+            * copying the file back */
+           fseek (fp, b->offset, 0);
+           mutt_mktemp (tempfile);
+           if ((tfp = safe_fopen (tempfile, "w")) == NULL)
+           {
+             mutt_perror _("Failure to open file to strip headers.");
+             goto bailout;
+           }
+           mutt_copy_stream (fp, tfp);
+           fclose (fp);
+           fclose (tfp);
+           mutt_unlink (a->filename);  
+           mutt_rename_file (tempfile, a->filename); 
+
+           mutt_free_body (&b);
+         }
+       }
+      }
+    }
+  }
+  else
+  {
+    rfc1524_free_entry (&entry);
+    mutt_message (_("No mailcap compose entry for %s, creating empty file."),
+                  type);
+    return 1;
+  }
+
+  rc = 1;
+  
+  bailout:
+  
+  if(unlink_newfile)
+    unlink(newfile);
+
+  rfc1524_free_entry (&entry);
+  return rc;
+}
+
+/* 
+ * Currently, this only works for send mode, as it assumes that the 
+ * BODY->filename actually contains the information.  I'm not sure
+ * we want to deal with editing attachments we've already received,
+ * so this should be ok.
+ *
+ * Returns 1 if editor found, 0 if not (useful to tell calling menu to
+ * redraw)
+ */
+int mutt_edit_attachment (BODY *a)
+{
+  char type[STRING];
+  char command[STRING];
+  char newfile[_POSIX_PATH_MAX] = "";
+  rfc1524_entry *entry = rfc1524_new_entry ();
+  short unlink_newfile = 0;
+  int rc = 0;
+  
+  snprintf (type, sizeof (type), "%s/%s", TYPE (a), a->subtype);
+  if (rfc1524_mailcap_lookup (a, type, entry, M_EDIT))
+  {
+    if (entry->editcommand)
+    {
+
+      strfcpy (command, entry->editcommand, sizeof (command));
+      if (rfc1524_expand_filename (entry->nametemplate,
+                                     a->filename, newfile, sizeof (newfile)))
+      {
+       dprint(1, (debugfile, "oldfile: %s\t newfile: %s\n",
+                                 a->filename, newfile));
+       if (safe_symlink (a->filename, newfile) == -1)
+       {
+         if (mutt_yesorno (_("Can't match nametemplate, continue?"), M_YES) != M_YES)
+           goto bailout;
+       }
+       unlink_newfile = 1;
+      }
+      else
+       strfcpy(newfile, a->filename, sizeof(newfile));
+
+      if (rfc1524_expand_command (a, newfile, type,
+                                     command, sizeof (command)))
+      {
+       /* For now, editing requires a file, no piping */
+       mutt_error _("Mailcap Edit entry requires %%s");
+      }
+      else
+      {
+       mutt_endwin (NULL);
+       if (mutt_system (command) == -1)
+         mutt_error (_("Error running \"%s\"!"), command);
+      }
+    }
+  }
+  else if (a->type == TYPETEXT)
+  {
+    /* On text, default to editor */
+    mutt_edit_file (NONULL (Editor), newfile);
+  }
+  else
+  {
+    rfc1524_free_entry (&entry);
+    mutt_error (_("No mailcap edit entry for %s"),type);
+    return 0;
+  }
+
+  rc = 1;
+  
+  bailout:
+  
+  if(unlink_newfile)
+    unlink(newfile);
+  
+  rfc1524_free_entry (&entry);
+  return rc;
+}
+
+
+/* for compatibility with metamail */
+static int is_mmnoask (const char *buf)
+{
+  char tmp[LONG_STRING], *p, *q;
+  int lng;
+
+  if ((p = getenv ("MM_NOASK")) != NULL && *p)
+  {
+    if (mutt_strcmp (p, "1") == 0)
+      return (1);
+
+    strfcpy (tmp, p, sizeof (tmp));
+    p = tmp;
+
+    while ((p = strtok (p, ",")) != NULL)
+    {
+      if ((q = strrchr (p, '/')) != NULL)
+      {
+       if (*(q+1) == '*')
+       {
+         if (ascii_strncasecmp (buf, p, q-p) == 0)
+           return (1);
+       }
+       else
+       {
+         if (ascii_strcasecmp (buf, p) == 0)
+           return (1);
+       }
+      }
+      else
+      {
+       lng = mutt_strlen (p);
+       if (buf[lng] == '/' && mutt_strncasecmp (buf, p, lng) == 0)
+         return (1);
+      }
+
+      p = NULL;
+    }
+  }
+
+  return (0);
+}
+
+void mutt_check_lookup_list (BODY *b, char *type, int len)
+{
+  LIST *t = MimeLookupList;
+  int i;
+
+  for (; t; t = t->next) {
+    i = mutt_strlen (t->data) - 1;
+    if ((i > 0 && t->data[i-1] == '/' && t->data[i] == '*' && 
+        ascii_strncasecmp (type, t->data, i) == 0) ||
+       ascii_strcasecmp (type, t->data) == 0) {
+
+    BODY tmp = {0};
+    int n;
+    if ((n = mutt_lookup_mime_type (&tmp, b->filename)) != TYPEOTHER) {
+      snprintf (type, len, "%s/%s",
+                n == TYPEAUDIO ? "audio" :
+                n == TYPEAPPLICATION ? "application" :
+                n == TYPEIMAGE ? "image" :
+                n == TYPEMESSAGE ? "message" :
+                n == TYPEMODEL ? "model" :
+                n == TYPEMULTIPART ? "multipart" :
+                n == TYPETEXT ? "text" :
+                n == TYPEVIDEO ? "video" : "other",
+                tmp.subtype);
+      dprint(1, (debugfile, "mutt_check_lookup_list: \"%s\" -> %s\n", 
+        b->filename, type));
+    }
+    if (tmp.subtype) 
+      FREE (&tmp.subtype);
+    if (tmp.xtype) 
+      FREE (&tmp.xtype);
+    }
+  }
+}
+
+int mutt_is_autoview (BODY *b, const char *type)
+{
+  LIST *t = AutoViewList;
+  char _type[SHORT_STRING];
+  int i;
+
+  if (!type)
+    snprintf (_type, sizeof (_type), "%s/%s", TYPE (b), b->subtype);
+  else
+    strncpy (_type, type, sizeof(_type));
+
+  mutt_check_lookup_list (b, _type, sizeof(_type));
+  type = _type;
+
+  if (mutt_needs_mailcap (b))
+  {
+    if (option (OPTIMPLICITAUTOVIEW))
+      return 1;
+    
+    if (is_mmnoask (type))
+      return 1;
+  }
+
+  for (; t; t = t->next) {
+    i = mutt_strlen (t->data) - 1;
+    if ((i > 0 && t->data[i-1] == '/' && t->data[i] == '*' && 
+        ascii_strncasecmp (type, t->data, i) == 0) ||
+       ascii_strcasecmp (type, t->data) == 0)
+      return 1;
+  }
+
+  return 0;
+}
+
+/* returns -1 on error, 0 or the return code from mutt_do_pager() on success */
+int mutt_view_attachment (FILE *fp, BODY *a, int flag, HEADER *hdr,
+                         ATTACHPTR **idx, short idxlen)
+{
+  char tempfile[_POSIX_PATH_MAX] = "";
+  char pagerfile[_POSIX_PATH_MAX] = "";
+  int is_message;
+  int use_mailcap;
+  int use_pipe = 0;
+  int use_pager = 1;
+  char type[STRING];
+  char command[STRING];
+  char descrip[STRING];
+  char *fname;
+  rfc1524_entry *entry = NULL;
+  int rc = -1;
+  int unlink_tempfile = 0;
+  
+  is_message = mutt_is_message_type(a->type, a->subtype);
+  if (WithCrypto && is_message && a->hdr && (a->hdr->security & ENCRYPT) &&
+      !crypt_valid_passphrase(a->hdr->security))
+    return (rc);
+  use_mailcap = (flag == M_MAILCAP ||
+               (flag == M_REGULAR && mutt_needs_mailcap (a)));
+  snprintf (type, sizeof (type), "%s/%s", TYPE (a), a->subtype);
+  
+  if (use_mailcap)
+  {
+    entry = rfc1524_new_entry (); 
+    if (!rfc1524_mailcap_lookup (a, type, entry, 0))
+    {
+      if (flag == M_REGULAR)
+      {
+       /* fallback to view as text */
+       rfc1524_free_entry (&entry);
+       mutt_error _("No matching mailcap entry found.  Viewing as text.");
+       flag = M_AS_TEXT;
+       use_mailcap = 0;
+      }
+      else
+       goto return_error;
+    }
+  }
+  
+  if (use_mailcap)
+  {
+    if (!entry->command)
+    {
+      mutt_error _("MIME type not defined.  Cannot view attachment.");
+      goto return_error;
+    }
+    strfcpy (command, entry->command, sizeof (command));
+    
+    if (fp)
+    {
+      fname = safe_strdup (a->filename);
+      mutt_sanitize_filename (fname, 1);
+    }
+    else
+      fname = a->filename;
+
+    if (rfc1524_expand_filename (entry->nametemplate, fname,
+                                tempfile, sizeof (tempfile)))
+    {
+      if (fp == NULL && mutt_strcmp(tempfile, a->filename))
+      {
+       /* send case: the file is already there */
+       if (safe_symlink (a->filename, tempfile) == -1)
+       {
+         if (mutt_yesorno (_("Can't match nametemplate, continue?"), M_YES) == M_YES)
+           strfcpy (tempfile, a->filename, sizeof (tempfile));
+         else
+           goto return_error;
+       }
+       else
+         unlink_tempfile = 1;
+      }
+    }
+    else if (fp == NULL) /* send case */
+      strfcpy (tempfile, a->filename, sizeof (tempfile));
+    
+    if (fp)
+    {
+      /* recv case: we need to save the attachment to a file */
+      FREE (&fname);
+      if (mutt_save_attachment (fp, a, tempfile, 0, NULL) == -1)
+       goto return_error;
+    }
+
+    use_pipe = rfc1524_expand_command (a, tempfile, type,
+                                      command, sizeof (command));
+    use_pager = entry->copiousoutput;
+  }
+  
+  if (use_pager)
+  {
+    if (fp && !use_mailcap && a->filename)
+    {
+      /* recv case */
+      strfcpy (pagerfile, a->filename, sizeof (pagerfile));
+      mutt_adv_mktemp (pagerfile, sizeof(pagerfile));
+    }
+    else
+      mutt_mktemp (pagerfile);
+  }
+    
+  if (use_mailcap)
+  {
+    pid_t thepid = 0;
+    int tempfd = -1, pagerfd = -1;
+    
+    if (!use_pager)
+      mutt_endwin (NULL);
+
+    if (use_pager || use_pipe)
+    {
+      if (use_pager && ((pagerfd = safe_open (pagerfile, O_CREAT | O_EXCL | O_WRONLY)) == -1))
+      {
+       mutt_perror ("open");
+       goto return_error;
+      }
+      if (use_pipe && ((tempfd = open (tempfile, 0)) == -1))
+      {
+       if(pagerfd != -1)
+         close(pagerfd);
+       mutt_perror ("open");
+       goto return_error;
+      }
+
+      if ((thepid = mutt_create_filter_fd (command, NULL, NULL, NULL,
+                                          use_pipe ? tempfd : -1, use_pager ? pagerfd : -1, -1)) == -1)
+      {
+       if(pagerfd != -1)
+         close(pagerfd);
+       
+       if(tempfd != -1)
+         close(tempfd);
+
+       mutt_error _("Cannot create filter");
+       goto return_error;
+      }
+
+      if (use_pager)
+      {
+       if (a->description)
+         snprintf (descrip, sizeof (descrip),
+                   "---Command: %-20.20s Description: %s",
+                   command, a->description);
+       else
+         snprintf (descrip, sizeof (descrip),
+                   "---Command: %-30.30s Attachment: %s", command, type);
+      }
+
+      if ((mutt_wait_filter (thepid) || (entry->needsterminal &&
+         option (OPTWAITKEY))) && !use_pager)
+       mutt_any_key_to_continue (NULL);
+      
+      close(tempfd);
+      close(pagerfd);
+      
+    }
+    else
+    {
+      /* interactive command */
+      if (mutt_system (command) ||
+         (entry->needsterminal && option (OPTWAITKEY)))
+       mutt_any_key_to_continue (NULL);
+    }
+  }
+  else
+  {
+    /* Don't use mailcap; the attachment is viewed in the pager */
+
+    if (flag == M_AS_TEXT)
+    {
+      /* just let me see the raw data */
+      if (mutt_save_attachment (fp, a, pagerfile, 0, NULL))
+       goto return_error;
+    }
+    else
+    {
+      /* Use built-in handler */
+      set_option (OPTVIEWATTACH); /* disable the "use 'v' to view this part"
+                                  * message in case of error */
+      if (mutt_decode_save_attachment (fp, a, pagerfile, M_DISPLAY, 0))
+      {
+       unset_option (OPTVIEWATTACH);
+       goto return_error;
+      }
+      unset_option (OPTVIEWATTACH);
+    }
+    
+    if (a->description)
+      strfcpy (descrip, a->description, sizeof (descrip));
+    else if (a->filename)
+      snprintf (descrip, sizeof (descrip), "---Attachment: %s : %s",
+         a->filename, type);
+    else
+      snprintf (descrip, sizeof (descrip), "---Attachment: %s", type);
+  }
+  
+  /* We only reach this point if there have been no errors */
+
+  if (use_pager)
+  {
+    pager_t info;
+    
+    memset (&info, 0, sizeof (info));
+    info.fp = fp;
+    info.bdy = a;
+    info.ctx = Context;
+    info.idx = idx;
+    info.idxlen = idxlen;
+    info.hdr = hdr;
+
+    rc = mutt_do_pager (descrip, pagerfile,
+                       M_PAGER_ATTACHMENT | (is_message ? M_PAGER_MESSAGE : 0), &info);
+  }
+  else
+    rc = 0;
+
+  return_error:
+  
+  if (entry)
+    rfc1524_free_entry (&entry);
+  if (fp && tempfile[0])
+    mutt_unlink (tempfile);
+  else if (unlink_tempfile)
+    unlink(tempfile);
+
+  if (pagerfile[0])
+    mutt_unlink (pagerfile);
+
+  return rc;
+}
+
+/* returns 1 on success, 0 on error */
+int mutt_pipe_attachment (FILE *fp, BODY *b, const char *path, char *outfile)
+{
+  pid_t thepid;
+  int out = -1;
+  int rv = 0;
+  
+  if (outfile && *outfile)
+    if ((out = safe_open (outfile, O_CREAT | O_EXCL | O_WRONLY)) < 0)
+    {
+      mutt_perror ("open");
+      return 0;
+    }
+
+  mutt_endwin (NULL);
+
+  if (fp)
+  {
+    /* recv case */
+
+    STATE s;
+
+    memset (&s, 0, sizeof (STATE));
+
+    if (outfile && *outfile)
+      thepid = mutt_create_filter_fd (path, &s.fpout, NULL, NULL, -1, out, -1);
+    else
+      thepid = mutt_create_filter (path, &s.fpout, NULL, NULL);
+
+    if (thepid < 0)
+    {
+      mutt_perror _("Can't create filter");
+      goto bail;
+    }
+    
+    s.fpin = fp;
+    mutt_decode_attachment (b, &s);
+    safe_fclose (&s.fpout);
+  }
+  else
+  {
+    /* send case */
+
+    FILE *ifp, *ofp;
+
+    if ((ifp = fopen (b->filename, "r")) == NULL)
+    {
+      mutt_perror ("fopen");
+      if (outfile && *outfile)
+      {
+       close (out);
+       unlink (outfile);
+      }
+      return 0;
+    }
+
+    if (outfile && *outfile)
+      thepid = mutt_create_filter_fd (path, &ofp, NULL, NULL, -1, out, -1);
+    else
+      thepid = mutt_create_filter (path, &ofp, NULL, NULL);
+
+    if (thepid < 0)
+    {
+      mutt_perror _("Can't create filter");
+      safe_fclose (&ifp);
+      goto bail;
+    }
+    
+    mutt_copy_stream (ifp, ofp);
+    safe_fclose (&ofp);
+    safe_fclose (&ifp);
+  }
+
+  rv = 1;
+  
+bail:
+  
+  if (outfile && *outfile)
+    close (out);
+
+  /*
+   * check for error exit from child process
+   */
+  if (mutt_wait_filter (thepid) != 0)
+    rv = 0;
+
+  if (rv == 0 || option (OPTWAITKEY))
+    mutt_any_key_to_continue (NULL);
+  return rv;
+}
+
+static FILE *
+mutt_save_attachment_open (char *path, int flags)
+{
+  if (flags == M_SAVE_APPEND)
+    return fopen (path, "a");
+  if (flags == M_SAVE_OVERWRITE)
+    return fopen (path, "w");          /* __FOPEN_CHECKED__ */
+  
+  return safe_fopen (path, "w");
+}
+
+/* returns 0 on success, -1 on error */
+int mutt_save_attachment (FILE *fp, BODY *m, char *path, int flags, HEADER *hdr)
+{
+  if (fp)
+  {
+    
+    /* recv mode */
+
+    if(hdr &&
+       m->hdr &&
+       m->encoding != ENCBASE64 &&
+       m->encoding != ENCQUOTEDPRINTABLE &&
+       mutt_is_message_type(m->type, m->subtype))
+    {
+      /* message type attachments are written to mail folders. */
+
+      char buf[HUGE_STRING];
+      HEADER *hn;
+      CONTEXT ctx;
+      MESSAGE *msg;
+      int chflags = 0;
+      int r = -1;
+      
+      hn = m->hdr;
+      hn->msgno = hdr->msgno; /* required for MH/maildir */
+      hn->read = 1;
+
+      fseek (fp, m->offset, 0);
+      if (fgets (buf, sizeof (buf), fp) == NULL)
+       return -1;
+      if (mx_open_mailbox(path, M_APPEND | M_QUIET, &ctx) == NULL)
+       return -1;
+      if ((msg = mx_open_new_message (&ctx, hn, is_from (buf, NULL, 0, NULL) ? 0 : M_ADD_FROM)) == NULL)
+      {
+       mx_close_mailbox(&ctx, NULL);
+       return -1;
+      }
+      if (ctx.magic == M_MBOX || ctx.magic == M_MMDF)
+       chflags = CH_FROM;
+      chflags |= (ctx.magic == M_MAILDIR ? CH_NOSTATUS : CH_UPDATE);
+      if (_mutt_copy_message (msg->fp, fp, hn, hn->content, 0, chflags) == 0 
+         && mx_commit_message (msg, &ctx) == 0)
+       r = 0;
+      else
+       r = -1;
+
+      mx_close_message (&msg);
+      mx_close_mailbox (&ctx, NULL);
+      return r;
+    }
+    else
+    {
+      /* In recv mode, extract from folder and decode */
+      
+      STATE s;
+      
+      memset (&s, 0, sizeof (s));
+      if ((s.fpout = mutt_save_attachment_open (path, flags)) == NULL)
+      {
+       mutt_perror ("fopen");
+       return (-1);
+      }
+      fseek ((s.fpin = fp), m->offset, 0);
+      mutt_decode_attachment (m, &s);
+      
+      if (fclose (s.fpout) != 0)
+      {
+       mutt_perror ("fclose");
+       return (-1);
+      }
+    }
+  }
+  else
+  {
+    /* In send mode, just copy file */
+
+    FILE *ofp, *nfp;
+
+    if ((ofp = fopen (m->filename, "r")) == NULL)
+    {
+      mutt_perror ("fopen");
+      return (-1);
+    }
+    
+    if ((nfp = mutt_save_attachment_open (path, flags)) == NULL)
+    {
+      mutt_perror ("fopen");
+      safe_fclose (&ofp);
+      return (-1);
+    }
+
+    if (mutt_copy_stream (ofp, nfp) == -1)
+    {
+      mutt_error _("Write fault!");
+      safe_fclose (&ofp);
+      safe_fclose (&nfp);
+      return (-1);
+    }
+    safe_fclose (&ofp);
+    safe_fclose (&nfp);
+  }
+
+  return 0;
+}
+
+/* returns 0 on success, -1 on error */
+int mutt_decode_save_attachment (FILE *fp, BODY *m, char *path,
+                                int displaying, int flags)
+{
+  STATE s;
+  unsigned int saved_encoding = 0;
+  BODY *saved_parts = NULL;
+  HEADER *saved_hdr = NULL;
+
+  memset (&s, 0, sizeof (s));
+  s.flags = displaying;
+
+  if (flags == M_SAVE_APPEND)
+    s.fpout = fopen (path, "a");
+  else if (flags == M_SAVE_OVERWRITE)
+    s.fpout = fopen (path, "w");       /* __FOPEN_CHECKED__ */
+  else
+    s.fpout = safe_fopen (path, "w");
+
+  if (s.fpout == NULL)
+  {
+    mutt_perror ("fopen");
+    return (-1);
+  }
+
+  if (fp == NULL)
+  {
+    /* When called from the compose menu, the attachment isn't parsed,
+     * so we need to do it here. */
+    struct stat st;
+
+    if (stat (m->filename, &st) == -1)
+    {
+      mutt_perror ("stat");
+      fclose (s.fpout);
+      return (-1);
+    }
+
+    if ((s.fpin = fopen (m->filename, "r")) == NULL)
+    {
+      mutt_perror ("fopen");
+      return (-1);
+    }
+
+    saved_encoding = m->encoding;
+    if (!is_multipart (m))
+      m->encoding = ENC8BIT;
+    
+    m->length = st.st_size;
+    m->offset = 0;
+    saved_parts = m->parts;
+    saved_hdr = m->hdr;
+    mutt_parse_part (s.fpin, m);
+
+    if (m->noconv || is_multipart (m))
+      s.flags |= M_CHARCONV;
+  }
+  else
+  {
+    s.fpin = fp;
+    s.flags |= M_CHARCONV;
+  }
+
+  mutt_body_handler (m, &s);
+
+  fclose (s.fpout);
+  if (fp == NULL)
+  {
+    m->length = 0;
+    m->encoding = saved_encoding;
+    if (saved_parts)
+    {
+      mutt_free_header (&m->hdr);
+      m->parts = saved_parts;
+      m->hdr = saved_hdr;
+    }
+    fclose (s.fpin);
+  }
+
+  return (0);
+}
+
+/* Ok, the difference between send and receive:
+ * recv: BODY->filename is a suggested name, and Context|HEADER points
+ *       to the attachment in mailbox which is encooded
+ * send: BODY->filename points to the un-encoded file which contains the 
+ *       attachment
+ */
+
+int mutt_print_attachment (FILE *fp, BODY *a)
+{
+  char newfile[_POSIX_PATH_MAX] = "";
+  char type[STRING];
+  pid_t thepid;
+  FILE *ifp, *fpout;
+  short unlink_newfile = 0;
+  
+  snprintf (type, sizeof (type), "%s/%s", TYPE (a), a->subtype);
+
+  if (rfc1524_mailcap_lookup (a, type, NULL, M_PRINT)) 
+  {
+    char command[_POSIX_PATH_MAX+STRING];
+    rfc1524_entry *entry;
+    int piped = FALSE;
+
+    dprint (2, (debugfile, "Using mailcap...\n"));
+    
+    entry = rfc1524_new_entry ();
+    rfc1524_mailcap_lookup (a, type, entry, M_PRINT);
+    if (rfc1524_expand_filename (entry->nametemplate, a->filename,
+                                                 newfile, sizeof (newfile)))
+    {
+      if (!fp)
+      {
+       if (safe_symlink(a->filename, newfile) == -1)
+       {
+         if (mutt_yesorno (_("Can't match nametemplate, continue?"), M_YES) != M_YES)
+         {
+           rfc1524_free_entry (&entry);
+           return 0;
+         }
+         strfcpy (newfile, a->filename, sizeof (newfile));
+       }
+       else
+         unlink_newfile = 1;
+      }
+    }
+
+    /* in recv mode, save file to newfile first */
+    if (fp)
+      mutt_save_attachment (fp, a, newfile, 0, NULL);
+
+    strfcpy (command, entry->printcommand, sizeof (command));
+    piped = rfc1524_expand_command (a, newfile, type, command, sizeof (command));
+
+    mutt_endwin (NULL);
+
+    /* interactive program */
+    if (piped)
+    {
+      if ((ifp = fopen (newfile, "r")) == NULL)
+      {
+       mutt_perror ("fopen");
+       rfc1524_free_entry (&entry);
+       return (0);
+      }
+
+      if ((thepid = mutt_create_filter (command, &fpout, NULL, NULL)) < 0)
+      {
+       mutt_perror _("Can't create filter");
+       rfc1524_free_entry (&entry);
+       safe_fclose (&ifp);
+       return 0;
+      }
+      mutt_copy_stream (ifp, fpout);
+      safe_fclose (&fpout);
+      safe_fclose (&ifp);
+      if (mutt_wait_filter (thepid) || option (OPTWAITKEY))
+       mutt_any_key_to_continue (NULL);
+    }
+    else
+    {
+      if (mutt_system (command) || option (OPTWAITKEY))
+       mutt_any_key_to_continue (NULL);
+    }
+
+    if (fp)
+      mutt_unlink (newfile);
+    else if (unlink_newfile)
+      unlink(newfile);
+
+    rfc1524_free_entry (&entry);
+    return (1);
+  }
+
+  if (!ascii_strcasecmp ("text/plain", type) ||
+      !ascii_strcasecmp ("application/postscript", type))
+  {
+    return (mutt_pipe_attachment (fp, a, NONULL(PrintCmd), NULL));
+  }
+  else if (mutt_can_decode (a))
+  {
+    /* decode and print */
+
+    int rc = 0;
+    
+    ifp = NULL;
+    fpout = NULL;
+    
+    mutt_mktemp (newfile);
+    if (mutt_decode_save_attachment (fp, a, newfile, M_PRINTING, 0) == 0)
+    {
+      
+      dprint (2, (debugfile, "successfully decoded %s type attachment to %s\n",
+                 type, newfile));
+      
+      if ((ifp = fopen (newfile, "r")) == NULL)
+      {
+       mutt_perror ("fopen");
+       goto bail0;
+      }
+
+      dprint (2, (debugfile, "successfully opened %s read-only\n", newfile));
+      
+      mutt_endwin (NULL);
+      if ((thepid = mutt_create_filter (NONULL(PrintCmd), &fpout, NULL, NULL)) < 0)
+      {
+       mutt_perror _("Can't create filter");
+       goto bail0;
+      }
+
+      dprint (2, (debugfile, "Filter created.\n"));
+      
+      mutt_copy_stream (ifp, fpout);
+
+      safe_fclose (&fpout);
+      safe_fclose (&ifp);
+
+      if (mutt_wait_filter (thepid) != 0 || option (OPTWAITKEY))
+       mutt_any_key_to_continue (NULL);
+      rc = 1;
+    }
+  bail0:
+    safe_fclose (&ifp);
+    safe_fclose (&fpout);
+    mutt_unlink (newfile);
+    return rc;
+  }
+  else
+  {
+    mutt_error _("I don't know how to print that!");
+    return 0;
+  }
+}
diff --git a/attach.h b/attach.h
new file mode 100644 (file)
index 0000000..b751a95
--- /dev/null
+++ b/attach.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+/* common protos for compose / attach menus */
+
+int mutt_tag_attach (MUTTMENU *menu, int n, int m);
+int mutt_attach_display_loop (MUTTMENU *menu, int op, FILE *fp, HEADER *hdr,
+                             BODY *cur, ATTACHPTR ***idxp, short *idxlen, short *idxmax,
+                             int recv);
+
+
+void mutt_save_attachment_list (FILE *fp, int tag, BODY *top, HEADER *hdr, MUTTMENU *menu);
+void mutt_pipe_attachment_list (FILE *fp, int tag, BODY *top, int filter);
+void mutt_print_attachment_list (FILE *fp, int tag, BODY *top);
+
+void mutt_attach_bounce (FILE *, HEADER *, ATTACHPTR **, short, BODY *);
+void mutt_attach_resend (FILE *, HEADER *, ATTACHPTR **, short, BODY *);
+void mutt_attach_forward (FILE *, HEADER *, ATTACHPTR **, short, BODY *, int);
+void mutt_attach_reply (FILE *, HEADER *, ATTACHPTR **, short, BODY *, int);
diff --git a/base64.c b/base64.c
new file mode 100644 (file)
index 0000000..0bcc865
--- /dev/null
+++ b/base64.c
@@ -0,0 +1,118 @@
+/*
+ *     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.
+ * 
+ */
+
+/* 
+ * Base64 handling elsewhere in mutt should be modified to call
+ * these routines. These routines were written because IMAP's
+ * AUTHENTICATE protocol required them, and base64 handling
+ * elsewhere wasn't sufficiently generic.
+ * 
+ */
+
+/* 
+ * This code is heavily modified from fetchmail (also GPL'd, of
+ * course) by Brendan Cully <brendan@kublai.com>.
+ * 
+ * Original copyright notice:
+ * 
+ * The code in the fetchmail distribution is Copyright 1997 by Eric
+ * S. Raymond.  Portions are also copyrighted by Carl Harris, 1993
+ * and 1995.  Copyright retained for the purpose of protecting free
+ * redistribution of source. 
+ * 
+ */
+
+#include "mutt.h"
+#include "mime.h"
+
+#define BAD     -1
+
+/* raw bytes to null-terminated base 64 string */
+void mutt_to_base64 (unsigned char *out, const unsigned char *in, size_t len,
+                    size_t olen)
+{
+  while (len >= 3 && olen > 10)
+  {
+    *out++ = B64Chars[in[0] >> 2];
+    *out++ = B64Chars[((in[0] << 4) & 0x30) | (in[1] >> 4)];
+    *out++ = B64Chars[((in[1] << 2) & 0x3c) | (in[2] >> 6)];
+    *out++ = B64Chars[in[2] & 0x3f];
+    olen  -= 4;
+    len   -= 3;
+    in    += 3;
+  }
+
+  /* clean up remainder */
+  if (len > 0 && olen > 4)
+  {
+    unsigned char fragment;
+
+    *out++ = B64Chars[in[0] >> 2];
+    fragment = (in[0] << 4) & 0x30;
+    if (len > 1)
+      fragment |= in[1] >> 4;
+    *out++ = B64Chars[fragment];
+    *out++ = (len < 2) ? '=' : B64Chars[(in[1] << 2) & 0x3c];
+    *out++ = '=';
+  }
+  *out = '\0';
+}
+
+/* Convert '\0'-terminated base 64 string to raw bytes.
+ * Returns length of returned buffer, or -1 on error */
+int mutt_from_base64 (char *out, const char *in)
+{
+  int len = 0;
+  register unsigned char digit1, digit2, digit3, digit4;
+
+  do
+  {
+    digit1 = in[0];
+    if (digit1 > 127 || base64val (digit1) == BAD)
+      return -1;
+    digit2 = in[1];
+    if (digit2 > 127 || base64val (digit2) == BAD)
+      return -1;
+    digit3 = in[2];
+    if (digit3 > 127 || ((digit3 != '=') && (base64val (digit3) == BAD)))
+      return -1;
+    digit4 = in[3];
+    if (digit4 > 127 || ((digit4 != '=') && (base64val (digit4) == BAD)))
+      return -1;
+    in += 4;
+
+    /* digits are already sanity-checked */
+    *out++ = (base64val(digit1) << 2) | (base64val(digit2) >> 4);
+    len++;
+    if (digit3 != '=')
+    {
+      *out++ = ((base64val(digit2) << 4) & 0xf0) | (base64val(digit3) >> 2);
+      len++;
+      if (digit4 != '=')
+      {
+       *out++ = ((base64val(digit3) << 6) & 0xc0) | base64val(digit4);
+       len++;
+      }
+    }
+  }
+  while (*in && digit4 != '=');
+
+  return len;
+}
diff --git a/browser.c b/browser.c
new file mode 100644 (file)
index 0000000..9ae55ac
--- /dev/null
+++ b/browser.c
@@ -0,0 +1,1590 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "mutt_menu.h"
+#include "buffy.h"
+#include "mapping.h"
+#include "sort.h"
+#include "mailbox.h"
+#include "browser.h"
+#ifdef USE_IMAP
+#include "imap.h"
+#endif
+#ifdef USE_NNTP
+#include "nntp.h"
+#endif
+
+#include <stdlib.h>
+#include <dirent.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+static struct mapping_t FolderHelp[] = {
+  { N_("Exit"),  OP_EXIT },
+  { N_("Chdir"), OP_CHANGE_DIRECTORY },
+  { N_("Mask"),  OP_ENTER_MASK },
+  { N_("Help"),  OP_HELP },
+  { NULL }
+};
+
+#ifdef USE_NNTP
+static struct mapping_t FolderNewsHelp[] = {
+  { N_("Exit"),        OP_EXIT },
+  { N_("List"),        OP_TOGGLE_MAILBOXES },
+  { N_("Subscribe"),   OP_BROWSER_SUBSCRIBE },
+  { N_("Unsubscribe"), OP_BROWSER_UNSUBSCRIBE },
+  { N_("Catchup"),     OP_CATCHUP },
+  { N_("Mask"),        OP_ENTER_MASK },
+  { N_("Help"),        OP_HELP },
+  { NULL }
+};
+#endif
+
+typedef struct folder_t
+{
+  struct folder_file *ff;
+  int num;
+} FOLDER;
+
+static char LastDir[_POSIX_PATH_MAX] = "";
+static char LastDirBackup[_POSIX_PATH_MAX] = "";
+
+/* Frees up the memory allocated for the local-global variables.  */
+static void destroy_state (struct browser_state *state)
+{
+  int c;
+
+  for (c = 0; c < state->entrylen; c++)
+  {
+    FREE (&((state->entry)[c].name));
+    FREE (&((state->entry)[c].desc));
+    FREE (&((state->entry)[c].st));
+  }
+#ifdef USE_IMAP
+  FREE (&state->folder);
+#endif
+  FREE (&state->entry);
+}
+
+static int browser_compare_subject (const void *a, const void *b)
+{
+  struct folder_file *pa = (struct folder_file *) a;
+  struct folder_file *pb = (struct folder_file *) b;
+
+  int r = mutt_strcoll (pa->name, pb->name);
+
+  return ((BrowserSort & SORT_REVERSE) ? -r : r);
+}
+
+static int browser_compare_date (const void *a, const void *b)
+{
+  struct folder_file *pa = (struct folder_file *) a;
+  struct folder_file *pb = (struct folder_file *) b;
+
+  int r = pa->mtime - pb->mtime;
+
+  return ((BrowserSort & SORT_REVERSE) ? -r : r);
+}
+
+static int browser_compare_size (const void *a, const void *b)
+{
+  struct folder_file *pa = (struct folder_file *) a;
+  struct folder_file *pb = (struct folder_file *) b;
+
+  int r = pa->size - pb->size;
+
+  return ((BrowserSort & SORT_REVERSE) ? -r : r);
+}
+
+static void browser_sort (struct browser_state *state)
+{
+  int (*f) (const void *, const void *);
+
+  switch (BrowserSort & SORT_MASK)
+  {
+    case SORT_ORDER:
+      return;
+    case SORT_DATE:
+#ifdef USE_NNTP
+      if (option (OPTNEWS))
+       return;
+#endif
+      f = browser_compare_date;
+      break;
+    case SORT_SIZE:
+#ifdef USE_NNTP
+      if (option (OPTNEWS))
+       return;
+#endif
+      f = browser_compare_size;
+      break;
+    case SORT_SUBJECT:
+    default:
+      f = browser_compare_subject;
+      break;
+  }
+  qsort (state->entry, state->entrylen, sizeof (struct folder_file), f);
+}
+
+static int link_is_dir (const char *folder, const char *path)
+{
+  struct stat st;
+  char fullpath[_POSIX_PATH_MAX];
+  
+  mutt_concat_path (fullpath, folder, path, sizeof (fullpath));
+  
+  if (stat (fullpath, &st) == 0)
+    return (S_ISDIR (st.st_mode));
+  else
+    return 0;
+}
+
+static const char *
+folder_format_str (char *dest, size_t destlen, char op, const char *src,
+                  const char *fmt, const char *ifstring, const char *elsestring,
+                  unsigned long data, format_flag flags)
+{
+  char fn[SHORT_STRING], tmp[SHORT_STRING], permission[11];
+  char date[16], *t_fmt;
+  time_t tnow;
+  FOLDER *folder = (FOLDER *) data;
+  struct passwd *pw;
+  struct group *gr;
+  int optional = (flags & M_FORMAT_OPTIONAL);
+
+  switch (op)
+  {
+    case 'C':
+      snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+      snprintf (dest, destlen, tmp, folder->num + 1);
+      break;
+      
+    case 'd':
+      if (folder->ff->st != NULL)
+      {
+       tnow = time (NULL);
+       t_fmt = tnow - folder->ff->st->st_mtime < 31536000 ? "%b %d %H:%M" : "%b %d  %Y";
+       strftime (date, sizeof (date), t_fmt, localtime (&folder->ff->st->st_mtime));
+       mutt_format_s (dest, destlen, fmt, date);
+      }
+      else
+       mutt_format_s (dest, destlen, fmt, "");
+      break;
+      
+    case 'f':
+    {
+      char *s;
+#ifdef USE_IMAP
+      if (folder->ff->imap)
+       s = NONULL (folder->ff->desc);
+      else
+#endif
+       s = NONULL (folder->ff->name);
+
+      snprintf (fn, sizeof (fn), "%s%s", s,
+               folder->ff->st ? (S_ISLNK (folder->ff->st->st_mode) ? "@" :             
+                                 (S_ISDIR (folder->ff->st->st_mode) ? "/" : 
+                                  ((folder->ff->st->st_mode & S_IXUSR) != 0 ? "*" : ""))) : "");
+      
+      mutt_format_s (dest, destlen, fmt, fn);
+      break;
+    }
+    case 'F':
+      if (folder->ff->st != NULL)
+      {
+       snprintf (permission, sizeof (permission), "%c%c%c%c%c%c%c%c%c%c",
+                 S_ISDIR(folder->ff->st->st_mode) ? 'd' : (S_ISLNK(folder->ff->st->st_mode) ? 'l' : '-'),
+                 (folder->ff->st->st_mode & S_IRUSR) != 0 ? 'r': '-',
+                 (folder->ff->st->st_mode & S_IWUSR) != 0 ? 'w' : '-',
+                 (folder->ff->st->st_mode & S_ISUID) != 0 ? 's' : (folder->ff->st->st_mode & S_IXUSR) != 0 ? 'x': '-',
+                 (folder->ff->st->st_mode & S_IRGRP) != 0 ? 'r' : '-',
+                 (folder->ff->st->st_mode & S_IWGRP) != 0 ? 'w' : '-',
+                 (folder->ff->st->st_mode & S_ISGID) != 0 ? 's' : (folder->ff->st->st_mode & S_IXGRP) != 0 ? 'x': '-',
+                 (folder->ff->st->st_mode & S_IROTH) != 0 ? 'r' : '-',
+                 (folder->ff->st->st_mode & S_IWOTH) != 0 ? 'w' : '-',
+                 (folder->ff->st->st_mode & S_ISVTX) != 0 ? 't' : (folder->ff->st->st_mode & S_IXOTH) != 0 ? 'x': '-');
+       mutt_format_s (dest, destlen, fmt, permission);
+      }
+#ifdef USE_IMAP
+      else if (folder->ff->imap)
+      {
+       /* mark folders with subfolders AND mail */
+       snprintf (permission, sizeof (permission), "IMAP %c",
+                 (folder->ff->inferiors && folder->ff->selectable) ? '+' : ' ');
+       mutt_format_s (dest, destlen, fmt, permission);
+      }                                        
+#endif
+      else
+       mutt_format_s (dest, destlen, fmt, "");
+      break;
+      
+    case 'g':
+      if (folder->ff->st != NULL)
+      {
+       if ((gr = getgrgid (folder->ff->st->st_gid)))
+         mutt_format_s (dest, destlen, fmt, gr->gr_name);
+       else
+       {
+         snprintf (tmp, sizeof (tmp), "%%%sld", fmt);
+         snprintf (dest, destlen, tmp, folder->ff->st->st_gid);
+       }
+      }
+      else
+       mutt_format_s (dest, destlen, fmt, "");
+      break;
+      
+    case 'l':
+      if (folder->ff->st != NULL)
+      {
+       snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+       snprintf (dest, destlen, tmp, folder->ff->st->st_nlink);
+      }
+      else
+       mutt_format_s (dest, destlen, fmt, "");
+      break;
+      
+    case 'N':
+#ifdef USE_IMAP
+      if (mx_is_imap (folder->ff->desc))
+      {
+       if (!optional)
+       {
+         snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+         snprintf (dest, destlen, tmp, folder->ff->new);
+       }
+       else if (!folder->ff->new)
+         optional = 0;
+       break;
+      }
+#endif
+      snprintf (tmp, sizeof (tmp), "%%%sc", fmt);
+      snprintf (dest, destlen, tmp, folder->ff->new ? 'N' : ' ');
+      break;
+      
+    case 's':
+      if (folder->ff->st != NULL)
+      {
+       snprintf (tmp, sizeof (tmp), "%%%sld", fmt);
+       snprintf (dest, destlen, tmp, (long) folder->ff->st->st_size);
+      }
+      else
+       mutt_format_s (dest, destlen, fmt, "");
+      break;
+      
+    case 't':
+      snprintf (tmp, sizeof (tmp), "%%%sc", fmt);
+      snprintf (dest, destlen, tmp, folder->ff->tagged ? '*' : ' ');
+      break;
+      
+    case 'u':
+      if (folder->ff->st != NULL)
+      {
+       if ((pw = getpwuid (folder->ff->st->st_uid)))
+         mutt_format_s (dest, destlen, fmt, pw->pw_name);
+       else
+       {
+         snprintf (tmp, sizeof (tmp), "%%%sld", fmt);
+         snprintf (dest, destlen, tmp, folder->ff->st->st_uid);
+       }
+      }
+      else
+       mutt_format_s (dest, destlen, fmt, "");
+      break;
+      
+    default:
+      snprintf (tmp, sizeof (tmp), "%%%sc", fmt);
+      snprintf (dest, destlen, tmp, op);
+      break;
+  }
+
+  if (optional)
+    mutt_FormatString (dest, destlen, ifstring, folder_format_str, data, 0);
+  else if (flags & M_FORMAT_OPTIONAL)
+    mutt_FormatString (dest, destlen, elsestring, folder_format_str, data, 0);
+
+  return (src);
+}
+
+#ifdef USE_NNTP
+static const char *
+newsgroup_format_str (char *dest, size_t destlen, char op, const char *src,
+                      const char *fmt, const char *ifstring, const char *elsestring,
+                      unsigned long data, format_flag flags)
+{
+  char fn[SHORT_STRING], tmp[SHORT_STRING];
+  FOLDER *folder = (FOLDER *) data;
+
+  switch (op)
+  {
+    case 'C':
+      snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+      snprintf (dest, destlen, tmp, folder->num + 1);
+      break;
+      
+    case 'f':
+      strncpy (fn, folder->ff->name, sizeof(fn) - 1);
+      snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
+      snprintf (dest, destlen, tmp, fn);
+      break;
+
+    case 'N':
+      snprintf (tmp, sizeof (tmp), "%%%sc", fmt);
+      if (folder->ff->nd->subscribed)
+       snprintf (dest, destlen, tmp, ' ');
+      else
+       snprintf (dest, destlen, tmp, folder->ff->new ? 'N' : 'u');
+      break;
+
+    case 'M':
+      snprintf (tmp, sizeof (tmp), "%%%sc", fmt);
+      if (folder->ff->nd->deleted)
+       snprintf (dest, destlen, tmp, 'D');
+      else
+       snprintf (dest, destlen, tmp, folder->ff->nd->allowed ? ' ' : '-');
+      break;
+
+    case 's':
+      if (flags & M_FORMAT_OPTIONAL)
+      {
+       if (folder->ff->nd->unread != 0)
+         mutt_FormatString (dest, destlen, ifstring, newsgroup_format_str,
+               data, flags);
+       else
+         mutt_FormatString (dest, destlen, elsestring, newsgroup_format_str,
+               data, flags);
+      }
+      else if (Context && Context->data == folder->ff->nd)
+      {
+       snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+       snprintf (dest, destlen, tmp, Context->unread);
+      }
+      else
+      {
+       snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+       snprintf (dest, destlen, tmp, folder->ff->nd->unread);
+      }
+      break;
+
+    case 'n':
+      if (Context && Context->data == folder->ff->nd)
+      {
+       snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+       snprintf (dest, destlen, tmp, Context->new);
+      }
+      else if (option (OPTMARKOLD) &&
+               folder->ff->nd->lastCached >= folder->ff->nd->firstMessage &&
+               folder->ff->nd->lastCached <= folder->ff->nd->lastMessage)
+      {
+       snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+       snprintf (dest, destlen, tmp, folder->ff->nd->lastMessage - folder->ff->nd->lastCached);
+      }
+      else
+      {
+       snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+       snprintf (dest, destlen, tmp, folder->ff->nd->unread);
+      }
+      break;
+
+    case 'd':
+      if (folder->ff->nd->desc != NULL)
+      {
+       snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
+       snprintf (dest, destlen, tmp, folder->ff->nd->desc);
+      }
+      else
+      {
+       snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
+       snprintf (dest, destlen, tmp, "");
+      }
+      break;
+  }
+  return (src);
+}
+#endif /* USE_NNTP */
+
+static void add_folder (MUTTMENU *m, struct browser_state *state,
+                       const char *name, const struct stat *s,
+                       void *data, int new)
+{
+  if (state->entrylen == state->entrymax)
+  {
+    /* need to allocate more space */
+    safe_realloc (&state->entry,
+                 sizeof (struct folder_file) * (state->entrymax += 256));
+    memset (&state->entry[state->entrylen], 0,
+           sizeof (struct folder_file) * 256);
+    if (m)
+      m->data = state->entry;
+  }
+
+  if (s != NULL)
+  {
+    (state->entry)[state->entrylen].mode = s->st_mode;
+    (state->entry)[state->entrylen].mtime = s->st_mtime;
+    (state->entry)[state->entrylen].size = s->st_size;
+    
+    (state->entry)[state->entrylen].st = safe_malloc (sizeof (struct stat));
+    memcpy ((state->entry)[state->entrylen].st, s, sizeof (struct stat));
+  }
+
+  (state->entry)[state->entrylen].new = new;
+  (state->entry)[state->entrylen].name = safe_strdup (name);
+  (state->entry)[state->entrylen].desc = safe_strdup (name);
+#ifdef USE_IMAP
+  (state->entry)[state->entrylen].imap = 0;
+#endif
+#ifdef USE_NNTP
+  if (option (OPTNEWS))
+    (state->entry)[state->entrylen].nd = (NNTP_DATA *) data;
+#endif
+  (state->entrylen)++;
+}
+
+static void init_state (struct browser_state *state, MUTTMENU *menu)
+{
+  state->entrylen = 0;
+  state->entrymax = 256;
+  state->entry = (struct folder_file *) safe_calloc (state->entrymax, sizeof (struct folder_file));
+#ifdef USE_IMAP
+  state->imap_browse = 0;
+#endif
+  if (menu)
+    menu->data = state->entry;
+}
+
+/* get list of all files/newsgroups with mask */
+static int examine_directory (MUTTMENU *menu, struct browser_state *state,
+                             char *d, const char *prefix)
+{
+#ifdef USE_NNTP
+  if (option (OPTNEWS))
+  {
+    LIST *tmp;
+    NNTP_DATA *data;
+    NNTP_SERVER *news = CurrentNewsSrv;
+
+/*  mutt_buffy_check (0); */
+    init_state (state, menu);
+
+    for (tmp = news->list; tmp; tmp = tmp->next)
+    {
+      if (!(data = (NNTP_DATA *)tmp->data))
+       continue;
+      if (prefix && *prefix && strncmp (prefix, data->group,
+           strlen (prefix)) != 0)
+       continue;
+      if (!((regexec (Mask.rx, data->group, 0, NULL, 0) == 0) ^ Mask.not))
+       continue;
+      add_folder (menu, state, data->group, NULL, data, data->new);
+    }
+  }
+  else
+#endif /* USE_NNTP */
+  {
+  struct stat s;
+  DIR *dp;
+  struct dirent *de;
+  char buffer[_POSIX_PATH_MAX + SHORT_STRING];
+  BUFFY *tmp;
+
+  while (stat (d, &s) == -1)
+  {
+    if (errno == ENOENT)
+    {
+      /* The last used directory is deleted, try to use the parent dir. */
+      char *c = strrchr (d, '/');
+
+      if (c && (c > d))
+      {
+       *c = 0;
+       continue;
+      }
+    }
+    mutt_perror (d);
+    return (-1);
+  }
+
+  if (!S_ISDIR (s.st_mode))
+  {
+    mutt_error (_("%s is not a directory."), d);
+    return (-1);
+  }
+
+  mutt_buffy_check (0);
+
+  if ((dp = opendir (d)) == NULL)
+  {
+    mutt_perror (d);
+    return (-1);
+  }
+
+  init_state (state, menu);
+
+  while ((de = readdir (dp)) != NULL)
+  {
+    if (mutt_strcmp (de->d_name, ".") == 0)
+      continue;    /* we don't need . */
+    
+    if (prefix && *prefix && mutt_strncmp (prefix, de->d_name, mutt_strlen (prefix)) != 0)
+      continue;
+    if (!((regexec (Mask.rx, de->d_name, 0, NULL, 0) == 0) ^ Mask.not))
+      continue;
+
+    mutt_concat_path (buffer, d, de->d_name, sizeof (buffer));
+    if (lstat (buffer, &s) == -1)
+      continue;
+    
+    if ((! S_ISREG (s.st_mode)) && (! S_ISDIR (s.st_mode)) &&
+       (! S_ISLNK (s.st_mode)))
+      continue;
+    
+    tmp = Incoming;
+    while (tmp && mutt_strcmp (buffer, tmp->path))
+      tmp = tmp->next;
+    add_folder (menu, state, de->d_name, &s, NULL, (tmp) ? tmp->new : 0);
+  }
+  closedir (dp);
+  }
+  browser_sort (state);
+  return 0;
+}
+
+/* get list of mailboxes/subscribed newsgroups */
+static int examine_mailboxes (MUTTMENU *menu, struct browser_state *state)
+{
+  struct stat s;
+  char buffer[LONG_STRING];
+
+#ifdef USE_NNTP
+  if (option (OPTNEWS))
+  {
+    LIST *tmp;
+    NNTP_DATA *data;
+    NNTP_SERVER *news = CurrentNewsSrv;
+
+/*  mutt_buffy_check (0); */
+    init_state (state, menu);
+
+    for (tmp = news->list; tmp; tmp = tmp->next)
+    {
+      if ((data = (NNTP_DATA *) tmp->data) != NULL && (data->new ||
+         (data->subscribed && (!option (OPTSHOWONLYUNREAD) || data->unread))))
+      add_folder (menu, state, data->group, NULL, data, data->new);
+    }
+  }
+  else
+#endif
+  {
+    BUFFY *tmp = Incoming;
+
+    if (!Incoming)
+      return (-1);
+    mutt_buffy_check (0);
+
+    init_state (state, menu);
+
+    do
+    {
+#ifdef USE_IMAP
+      if (mx_is_imap (tmp->path))
+      {
+       add_folder (menu, state, tmp->path, NULL, NULL, tmp->new);
+       continue;
+      }
+#endif
+#ifdef USE_POP
+      if (mx_is_pop (tmp->path))
+      {
+       add_folder (menu, state, tmp->path, NULL, NULL, tmp->new);
+       continue;
+      }
+#endif
+#ifdef USE_NNTP
+      if (mx_is_nntp (tmp->path))
+      {
+       add_folder (menu, state, tmp->path, NULL, NULL, tmp->new);
+       continue;
+      }
+#endif
+      if (lstat (tmp->path, &s) == -1)
+       continue;
+
+      if ((! S_ISREG (s.st_mode)) && (! S_ISDIR (s.st_mode)) &&
+         (! S_ISLNK (s.st_mode)))
+       continue;
+    
+      strfcpy (buffer, NONULL(tmp->path), sizeof (buffer));
+      mutt_pretty_mailbox (buffer);
+
+      add_folder (menu, state, buffer, &s, NULL, tmp->new);
+    }
+    while ((tmp = tmp->next));
+  }
+  browser_sort (state);
+  return 0;
+}
+
+int select_file_search (MUTTMENU *menu, regex_t *re, int n)
+{
+#ifdef USE_NNTP
+  if (option (OPTNEWS))
+    return (regexec (re, ((struct folder_file *) menu->data)[n].desc, 0, NULL, 0));
+#endif
+  return (regexec (re, ((struct folder_file *) menu->data)[n].name, 0, NULL, 0));
+}
+
+void folder_entry (char *s, size_t slen, MUTTMENU *menu, int num)
+{
+  FOLDER folder;
+
+  folder.ff = &((struct folder_file *) menu->data)[num];
+  folder.num = num;
+  
+#ifdef USE_NNTP
+  if (option (OPTNEWS))
+    mutt_FormatString (s, slen, NONULL(GroupFormat), newsgroup_format_str, 
+      (unsigned long) &folder, M_FORMAT_ARROWCURSOR);
+  else
+#endif
+    mutt_FormatString (s, slen, NONULL(FolderFormat), folder_format_str, 
+      (unsigned long) &folder, M_FORMAT_ARROWCURSOR);
+}
+
+static void init_menu (struct browser_state *state, MUTTMENU *menu, char *title,
+                      size_t titlelen, int buffy)
+{
+  char path[_POSIX_PATH_MAX];
+
+  menu->max = state->entrylen;
+
+  if(menu->current >= menu->max)
+    menu->current = menu->max - 1;
+  if (menu->current < 0)
+    menu->current = 0;
+  if (menu->top > menu->current)
+    menu->top = 0;
+
+  menu->tagged = 0;
+
+#ifdef USE_NNTP
+  if (option (OPTNEWS))
+  {
+    if (buffy)
+      snprintf (title, titlelen, _("Subscribed newsgroups"));
+    else
+      snprintf (title, titlelen, _("Newsgroups on server [%s]"),
+               CurrentNewsSrv->conn->account.host);
+  }
+  else
+#endif
+  if (buffy)
+    snprintf (title, titlelen, _("Mailboxes [%d]"), mutt_buffy_check (0));
+  else
+  {
+    strfcpy (path, LastDir, sizeof (path));
+    mutt_pretty_mailbox (path);
+#ifdef USE_IMAP
+  if (state->imap_browse && option (OPTIMAPLSUB))
+    snprintf (title, titlelen, _("Subscribed [%s], File mask: %s"),
+             path, NONULL (Mask.pattern));
+  else
+#endif
+    snprintf (title, titlelen, _("Directory [%s], File mask: %s"),
+             path, NONULL(Mask.pattern));
+  }
+  menu->redraw = REDRAW_FULL;
+}
+
+int file_tag (MUTTMENU *menu, int n, int m)
+{
+  struct folder_file *ff = &(((struct folder_file *)menu->data)[n]);
+  int ot;
+  if (S_ISDIR (ff->mode) || (S_ISLNK (ff->mode) && link_is_dir (LastDir, ff->name)))
+  {
+    mutt_error _("Can't attach a directory!");
+    return 0;
+  }
+  
+  ot = ff->tagged;
+  ff->tagged = (m >= 0 ? m : !ff->tagged);
+  
+  return ff->tagged - ot;
+}
+
+void _mutt_select_file (char *f, size_t flen, int flags, char ***files, int *numfiles)
+{
+  char buf[_POSIX_PATH_MAX];
+  char prefix[_POSIX_PATH_MAX] = "";
+  char helpstr[SHORT_STRING];
+  char title[STRING];
+  struct browser_state state;
+  MUTTMENU *menu;
+  struct stat st;
+  int i, killPrefix = 0;
+  int multiple = (flags & M_SEL_MULTI)  ? 1 : 0;
+  int folder   = (flags & M_SEL_FOLDER) ? 1 : 0;
+  int buffy    = (flags & M_SEL_BUFFY)  ? 1 : 0;
+
+  buffy = buffy && folder;
+  
+  memset (&state, 0, sizeof (struct browser_state));
+
+  if (!folder)
+    strfcpy (LastDirBackup, LastDir, sizeof (LastDirBackup));
+
+#ifdef USE_NNTP
+  if (option (OPTNEWS))
+  {
+    if (*f)
+      strfcpy (prefix, f, sizeof (prefix));
+    else
+    {
+      LIST *list;
+
+      /* default state for news reader mode is browse subscribed newsgroups */
+      buffy = 0;
+      for (list = CurrentNewsSrv->list; list; list = list->next)
+      {
+       NNTP_DATA *data = (NNTP_DATA *) list->data;
+
+       if (data && data->subscribed)
+       {
+         buffy = 1;
+         break;
+       }
+      }
+    }
+  }
+  else
+#endif
+  if (*f)
+  {
+    mutt_expand_path (f, flen);
+#ifdef USE_IMAP
+    if (mx_is_imap (f))
+    {
+      init_state (&state, NULL);
+      state.imap_browse = 1;
+      imap_browse (f, &state);
+      strfcpy (LastDir, state.folder, sizeof (LastDir));
+    }
+    else
+    {
+#endif
+    for (i = mutt_strlen (f) - 1; i > 0 && f[i] != '/' ; i--);
+    if (i > 0)
+    {
+      if (f[0] == '/')
+      {
+       if (i > sizeof (LastDir) - 1) i = sizeof (LastDir) - 1;
+       strncpy (LastDir, f, i);
+       LastDir[i] = 0;
+      }
+      else
+      {
+       getcwd (LastDir, sizeof (LastDir));
+       strcat (LastDir, "/");  /* __STRCAT_CHECKED__ */
+       strncat (LastDir, f, i);
+      }
+    }
+    else
+    {
+      if (f[0] == '/')
+       strcpy (LastDir, "/");          /* __STRCPY_CHECKED__ */
+      else
+       getcwd (LastDir, sizeof (LastDir));
+    }
+
+    if (i <= 0 && f[0] != '/')
+      strfcpy (prefix, f, sizeof (prefix));
+    else
+      strfcpy (prefix, f + i + 1, sizeof (prefix));
+    killPrefix = 1;
+#ifdef USE_IMAP
+    }
+#endif
+  }
+  else 
+  {
+    if (!folder)
+      getcwd (LastDir, sizeof (LastDir));
+    else if (!LastDir[0])
+      strfcpy (LastDir, NONULL(Maildir), sizeof (LastDir));
+    
+#ifdef USE_IMAP
+    if (!buffy && mx_is_imap (LastDir))
+    {
+      init_state (&state, NULL);
+      state.imap_browse = 1;
+      imap_browse (LastDir, &state);
+    }
+#endif
+  }
+
+  *f = 0;
+
+  if (buffy)
+  {
+    if (examine_mailboxes (NULL, &state) == -1)
+      goto bail;
+  }
+  else
+#ifdef USE_IMAP
+  if (!state.imap_browse)
+#endif
+  if (examine_directory (NULL, &state, LastDir, prefix) == -1)
+    goto bail;
+
+  menu = mutt_new_menu ();
+  menu->menu = MENU_FOLDER;
+  menu->make_entry = folder_entry;
+  menu->search = select_file_search;
+  menu->title = title;
+  menu->data = state.entry;
+  if (multiple)
+    menu->tag = file_tag;
+
+  menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_FOLDER,
+#ifdef USE_NNTP
+    (option (OPTNEWS)) ? FolderNewsHelp :
+#endif
+    FolderHelp);
+
+  init_menu (&state, menu, title, sizeof (title), buffy);
+
+  FOREVER
+  {
+    switch (i = mutt_menuLoop (menu))
+    {
+      case OP_GENERIC_SELECT_ENTRY:
+
+       if (!state.entrylen)
+       {
+         mutt_error _("No files match the file mask");
+         break;
+       }
+
+        if (S_ISDIR (state.entry[menu->current].mode) ||
+           (S_ISLNK (state.entry[menu->current].mode) &&
+           link_is_dir (LastDir, state.entry[menu->current].name)) 
+#ifdef USE_IMAP
+           || state.entry[menu->current].inferiors
+#endif
+           )
+       {
+         /* make sure this isn't a MH or maildir mailbox */
+         if (buffy)
+         {
+           strfcpy (buf, state.entry[menu->current].name, sizeof (buf));
+           mutt_expand_path (buf, sizeof (buf));
+         }
+#ifdef USE_IMAP
+         else if (state.imap_browse)
+         {
+            strfcpy (buf, state.entry[menu->current].name, sizeof (buf));
+         }
+#endif
+         else
+           mutt_concat_path (buf, LastDir, state.entry[menu->current].name, sizeof (buf));
+
+         if ((mx_get_magic (buf) <= 0)
+#ifdef USE_IMAP
+           || state.entry[menu->current].inferiors
+#endif
+           )
+         {
+           char OldLastDir[_POSIX_PATH_MAX];
+
+           /* save the old directory */
+           strfcpy (OldLastDir, LastDir, sizeof (OldLastDir));
+
+           if (mutt_strcmp (state.entry[menu->current].name, "..") == 0)
+           {
+             if (mutt_strcmp ("..", LastDir + mutt_strlen (LastDir) - 2) == 0)
+               strcat (LastDir, "/..");        /* __STRCAT_CHECKED__ */
+             else
+             {
+               char *p = strrchr (LastDir + 1, '/');
+
+               if (p)
+                 *p = 0;
+               else
+               {
+                 if (LastDir[0] == '/')
+                   LastDir[1] = 0;
+                 else
+                   strcat (LastDir, "/..");    /* __STRCAT_CHECKED__ */
+               }
+             }
+           }
+           else if (buffy)
+           {
+             strfcpy (LastDir, state.entry[menu->current].name, sizeof (LastDir));
+             mutt_expand_path (LastDir, sizeof (LastDir));
+           }
+#ifdef USE_IMAP
+           else if (state.imap_browse)
+           {
+             int n;
+             ciss_url_t url;
+             
+              strfcpy (LastDir, state.entry[menu->current].name,
+                sizeof (LastDir));
+             /* tack on delimiter here */
+             n = strlen (LastDir)+1;
+             
+             /* special case "" needs no delimiter */
+             url_parse_ciss (&url, state.entry[menu->current].name);
+             if (url.path &&
+                 (state.entry[menu->current].delim != '\0') &&
+                 (n < sizeof (LastDir)))
+             {
+               LastDir[n] = '\0';
+               LastDir[n-1] = state.entry[menu->current].delim;
+             }
+           }
+#endif
+           else
+           {
+             char tmp[_POSIX_PATH_MAX];
+             mutt_concat_path (tmp, LastDir, state.entry[menu->current].name, sizeof (tmp));
+             strfcpy (LastDir, tmp, sizeof (LastDir));
+           }
+
+           destroy_state (&state);
+           if (killPrefix)
+           {
+             prefix[0] = 0;
+             killPrefix = 0;
+           }
+           buffy = 0;
+#ifdef USE_IMAP
+           if (state.imap_browse)
+           {
+             init_state (&state, NULL);
+             state.imap_browse = 1;
+             imap_browse (LastDir, &state);
+             menu->data = state.entry;
+           }
+           else
+#endif
+           if (examine_directory (menu, &state, LastDir, prefix) == -1)
+           {
+             /* try to restore the old values */
+             strfcpy (LastDir, OldLastDir, sizeof (LastDir));
+             if (examine_directory (menu, &state, LastDir, prefix) == -1)
+             {
+               strfcpy (LastDir, NONULL(Homedir), sizeof (LastDir));
+               goto bail;
+             }
+           }
+           menu->current = 0; 
+           menu->top = 0; 
+           init_menu (&state, menu, title, sizeof (title), buffy);
+           break;
+         }
+       }
+
+#ifdef USE_NNTP
+       if (buffy || option (OPTNEWS)) /* news have not path */
+#else
+       if (buffy)
+#endif
+       {
+         strfcpy (f, state.entry[menu->current].name, flen);
+         mutt_expand_path (f, flen);
+       }
+#ifdef USE_IMAP
+       else if (state.imap_browse)
+          strfcpy (f, state.entry[menu->current].name, flen);
+#endif
+       else
+         mutt_concat_path (f, LastDir, state.entry[menu->current].name, flen);
+
+       /* Fall through to OP_EXIT */
+
+      case OP_EXIT:
+
+       if (multiple)
+       {
+         char **tfiles;
+         int i, j;
+
+         if (menu->tagged)
+         {
+           *numfiles = menu->tagged;
+           tfiles = safe_calloc (*numfiles, sizeof (char *));
+           for (i = 0, j = 0; i < state.entrylen; i++)
+           {
+             struct folder_file ff = state.entry[i];
+             char full[_POSIX_PATH_MAX];
+             if (ff.tagged)
+             {
+               mutt_concat_path (full, LastDir, ff.name, sizeof (full));
+               mutt_expand_path (full, sizeof (full));
+               tfiles[j++] = safe_strdup (full);
+             }
+           }
+           *files = tfiles;
+         }
+         else if (f[0]) /* no tagged entries. return selected entry */
+         {
+           *numfiles = 1;
+           tfiles = safe_calloc (*numfiles, sizeof (char *));
+           mutt_expand_path (f, flen);
+           tfiles[0] = safe_strdup (f);
+           *files = tfiles;
+         }
+       }
+
+       destroy_state (&state);
+       mutt_menuDestroy (&menu);
+       goto bail;
+
+      case OP_BROWSER_TELL:
+        if(state.entrylen)
+         mutt_message("%s", state.entry[menu->current].name);
+        break;
+
+#ifdef USE_IMAP
+      case OP_BROWSER_TOGGLE_LSUB:
+       if (option (OPTIMAPLSUB))
+       {
+         unset_option (OPTIMAPLSUB);
+       }
+       else
+       {
+         set_option (OPTIMAPLSUB);
+       }
+       mutt_ungetch (0, OP_CHECK_NEW);
+       break;
+
+      case OP_CREATE_MAILBOX:
+       if (!state.imap_browse)
+         mutt_error (_("Create is only supported for IMAP mailboxes"));
+       else
+       {
+         imap_mailbox_create (LastDir);
+         /* TODO: find a way to detect if the new folder would appear in
+          *   this window, and insert it without starting over. */
+         destroy_state (&state);
+         init_state (&state, NULL);
+         state.imap_browse = 1;
+         imap_browse (LastDir, &state);
+         menu->data = state.entry;
+         menu->current = 0; 
+         menu->top = 0; 
+         init_menu (&state, menu, title, sizeof (title), buffy);
+         MAYBE_REDRAW (menu->redraw);
+       }
+       break;
+
+      case OP_DELETE_MAILBOX:
+       if (!state.entry[menu->current].imap)
+         mutt_error (_("Delete is only supported for IMAP mailboxes"));
+       else
+        {
+         char msg[SHORT_STRING];
+         IMAP_MBOX mx;
+         int nentry = menu->current;
+         
+         imap_parse_path (state.entry[nentry].name, &mx);
+         snprintf (msg, sizeof (msg), _("Really delete mailbox \"%s\"?"),
+            mx.mbox);
+         if (mutt_yesorno (msg, M_NO) == M_YES)
+          {
+           if (!imap_delete_mailbox (Context, mx))
+            {
+             /* free the mailbox from the browser */
+             FREE (&((state.entry)[nentry].name));
+             FREE (&((state.entry)[nentry].desc));
+             /* and move all other entries up */
+             if (nentry+1 < state.entrylen)
+               memmove (state.entry + nentry, state.entry + nentry + 1,
+                  sizeof (struct folder_file) * (state.entrylen - (nentry+1)));
+             state.entrylen--;
+             mutt_message _("Mailbox deleted.");
+             init_menu (&state, menu, title, sizeof (title), buffy);
+             MAYBE_REDRAW (menu->redraw);
+           }
+         }
+         else
+           mutt_message _("Mailbox not deleted.");
+         FREE (&mx.mbox);
+        }
+        break;
+#endif
+      
+      case OP_CHANGE_DIRECTORY:
+
+#ifdef USE_NNTP
+       if (option (OPTNEWS))
+         break;
+#endif
+
+       strfcpy (buf, LastDir, sizeof (buf));
+#ifdef USE_IMAP
+       if (!state.imap_browse)
+#endif
+       {
+         /* add '/' at the end of the directory name if not already there */
+         int len=mutt_strlen(LastDir);
+         if (len && LastDir[len-1] != '/' && sizeof (buf) > len)
+           buf[len]='/';
+       }
+
+       if (mutt_get_field (_("Chdir to: "), buf, sizeof (buf), M_FILE) == 0 &&
+           buf[0])
+       {
+         buffy = 0;      
+         mutt_expand_path (buf, sizeof (buf));
+#ifdef USE_IMAP
+         if (mx_is_imap (buf))
+         {
+           strfcpy (LastDir, buf, sizeof (LastDir));
+           destroy_state (&state);
+           init_state (&state, NULL);
+           state.imap_browse = 1;
+           imap_browse (LastDir, &state);
+           menu->data = state.entry;
+           menu->current = 0; 
+           menu->top = 0; 
+           init_menu (&state, menu, title, sizeof (title), buffy);
+         }
+         else
+#endif
+         if (stat (buf, &st) == 0)
+         {
+           if (S_ISDIR (st.st_mode))
+           {
+             strfcpy (LastDir, buf, sizeof (LastDir));
+             destroy_state (&state);
+             if (examine_directory (menu, &state, LastDir, prefix) == 0)
+             {
+               menu->current = 0; 
+               menu->top = 0; 
+               init_menu (&state, menu, title, sizeof (title), buffy);
+             }
+             else
+             {
+               mutt_error _("Error scanning directory.");
+               destroy_state (&state);
+               mutt_menuDestroy (&menu);
+               goto bail;
+             }
+           }
+           else
+             mutt_error (_("%s is not a directory."), buf);
+         }
+         else
+           mutt_perror (buf);
+       }
+       MAYBE_REDRAW (menu->redraw);
+       break;
+       
+      case OP_ENTER_MASK:
+
+       strfcpy (buf, NONULL(Mask.pattern), sizeof (buf));
+       if (mutt_get_field (_("File Mask: "), buf, sizeof (buf), 0) == 0)
+       {
+         regex_t *rx = (regex_t *) safe_malloc (sizeof (regex_t));
+         char *s = buf;
+         int not = 0, err;
+
+         buffy = 0;
+         /* assume that the user wants to see everything */
+         if (!buf[0])
+           strfcpy (buf, ".", sizeof (buf));
+         SKIPWS (s);
+         if (*s == '!')
+         {
+           s++;
+           SKIPWS (s);
+           not = 1;
+         }
+
+         if ((err = REGCOMP (rx, s, REG_NOSUB)) != 0)
+         {
+           regerror (err, rx, buf, sizeof (buf));
+           regfree (rx);
+           FREE (&rx);
+           mutt_error ("%s", buf);
+         }
+         else
+         {
+           mutt_str_replace (&Mask.pattern, buf);
+           regfree (Mask.rx);
+           FREE (&Mask.rx);
+           Mask.rx = rx;
+           Mask.not = not;
+
+           destroy_state (&state);
+#ifdef USE_IMAP
+           if (state.imap_browse)
+           {
+             init_state (&state, NULL);
+             state.imap_browse = 1;
+             imap_browse (LastDir, &state);
+             menu->data = state.entry;
+             init_menu (&state, menu, title, sizeof (title), buffy);
+           }
+           else
+#endif
+           if (examine_directory (menu, &state, LastDir, NULL) == 0)
+             init_menu (&state, menu, title, sizeof (title), buffy);
+           else
+           {
+             mutt_error _("Error scanning directory.");
+             mutt_menuDestroy (&menu);
+             goto bail;
+           }
+           killPrefix = 0;
+           if (!state.entrylen)
+           {
+             mutt_error _("No files match the file mask");
+             break;
+           }
+         }
+       }
+       MAYBE_REDRAW (menu->redraw);
+       break;
+
+      case OP_SORT:
+      case OP_SORT_REVERSE:
+
+        {
+         int resort = 1;
+         int reverse = (i == OP_SORT_REVERSE);
+         
+         switch (mutt_multi_choice ((reverse) ?
+             _("Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? ") :
+             _("Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "),
+             _("dazn")))
+         {
+           case -1: /* abort */
+             resort = 0;
+             break;
+
+            case 1: /* (d)ate */
+             BrowserSort = SORT_DATE;
+             break;
+
+            case 2: /* (a)lpha */
+             BrowserSort = SORT_SUBJECT;
+             break;
+
+            case 3: /* si(z)e */
+             BrowserSort = SORT_SIZE;
+             break;
+
+            case 4: /* do(n)'t sort */
+             BrowserSort = SORT_ORDER;
+             resort = 0;
+             break;
+         }
+         if (resort)
+         {
+           BrowserSort |= reverse ? SORT_REVERSE : 0;
+           browser_sort (&state);
+           menu->redraw = REDRAW_FULL;
+         }
+         break;
+       }
+
+      case OP_TOGGLE_MAILBOXES:
+       buffy = 1 - buffy;
+
+      case OP_CHECK_NEW:
+       destroy_state (&state);
+       prefix[0] = 0;
+       killPrefix = 0;
+
+       if (buffy)
+       {
+         if (examine_mailboxes (menu, &state) == -1)
+           goto bail;
+       }
+#ifdef USE_IMAP
+       else if (mx_is_imap (LastDir))
+       {
+         init_state (&state, NULL);
+         state.imap_browse = 1;
+         imap_browse (LastDir, &state);
+         menu->data = state.entry;
+       }
+#endif
+       else if (examine_directory (menu, &state, LastDir, prefix) == -1)
+         goto bail;
+       init_menu (&state, menu, title, sizeof (title), buffy);
+       break;
+
+      case OP_BUFFY_LIST:
+       mutt_buffy_list ();
+       break;
+
+      case OP_BROWSER_NEW_FILE:
+
+       snprintf (buf, sizeof (buf), "%s/", LastDir);
+       if (mutt_get_field (_("New file name: "), buf, sizeof (buf), M_FILE) == 0)
+       {
+         strfcpy (f, buf, flen);
+         destroy_state (&state);
+         mutt_menuDestroy (&menu);
+         goto bail;
+       }
+       MAYBE_REDRAW (menu->redraw);
+       break;
+
+      case OP_BROWSER_VIEW_FILE:
+       if (!state.entrylen)
+       {
+         mutt_error _("No files match the file mask");
+         break;
+       }
+
+#ifdef USE_IMAP
+       if (state.entry[menu->current].selectable)
+       {
+         strfcpy (f, state.entry[menu->current].name, flen);
+         destroy_state (&state);
+         mutt_menuDestroy (&menu);
+         goto bail;
+       }
+       else
+#endif
+        if (S_ISDIR (state.entry[menu->current].mode) ||
+           (S_ISLNK (state.entry[menu->current].mode) &&
+           link_is_dir (LastDir, state.entry[menu->current].name)))
+       {
+         mutt_error _("Can't view a directory");
+         break;
+       } 
+       else
+       {
+         BODY *b;
+         char buf[_POSIX_PATH_MAX];
+         
+         mutt_concat_path (buf, LastDir, state.entry[menu->current].name, sizeof (buf));
+         b = mutt_make_file_attach (buf);
+         if (b != NULL)
+         {
+           mutt_view_attachment (NULL, b, M_REGULAR, NULL, NULL, 0);
+           mutt_free_body (&b);
+           menu->redraw = REDRAW_FULL;
+         }
+         else
+           mutt_error _("Error trying to view file");
+       }
+       break;
+
+#ifdef USE_NNTP
+      case OP_CATCHUP:
+      case OP_UNCATCHUP:
+       if (option (OPTNEWS))
+       {
+         struct folder_file *f = &state.entry[menu->current];
+         NNTP_DATA *nd;
+
+         if (i == OP_CATCHUP)
+           nd = mutt_newsgroup_catchup (CurrentNewsSrv, f->name);
+         else
+           nd = mutt_newsgroup_uncatchup (CurrentNewsSrv, f->name);
+
+         if (nd)
+         {
+/*         FOLDER folder;
+           struct folder_file ff;
+           char buffer[_POSIX_PATH_MAX + SHORT_STRING];
+
+           folder.ff = &ff;
+           folder.ff->name = f->name;
+           folder.ff->st = NULL;
+           folder.ff->is_new = nd->new;
+           folder.ff->nd = nd;
+           FREE (&f->desc);
+           mutt_FormatString (buffer, sizeof (buffer), NONULL(GroupFormat),
+                 newsgroup_format_str, (unsigned long) &folder,
+                 M_FORMAT_ARROWCURSOR);
+           f->desc = safe_strdup (buffer); */
+           if (menu->current + 1 < menu->max)
+             menu->current++;
+           menu->redraw = REDRAW_MOTION_RESYNCH;
+         }
+       }
+       break;
+
+      case OP_LOAD_ACTIVE:
+       if (!option (OPTNEWS))
+         break;
+
+       {
+         LIST *tmp;
+         NNTP_DATA *data;
+
+         for (tmp = CurrentNewsSrv->list; tmp; tmp = tmp->next)
+         {
+           if ((data = (NNTP_DATA *)tmp->data))
+             data->deleted = 1;
+         }
+       }
+       nntp_get_active (CurrentNewsSrv);
+
+       destroy_state (&state);
+       if (buffy)
+         examine_mailboxes (menu, &state);
+       else
+         examine_directory (menu, &state, NULL, NULL);
+       init_menu (&state, menu, title, sizeof (title), buffy);
+       break;
+#endif /* USE_NNTP */
+
+#if defined USE_IMAP || defined USE_NNTP
+      case OP_BROWSER_SUBSCRIBE:
+      case OP_BROWSER_UNSUBSCRIBE:
+#endif
+#ifdef USE_NNTP
+      case OP_SUBSCRIBE_PATTERN:
+      case OP_UNSUBSCRIBE_PATTERN:
+        if (option (OPTNEWS))
+       {
+         regex_t *rx = (regex_t *) safe_malloc (sizeof (regex_t));
+         char *s = buf;
+         int j = menu->current;
+         NNTP_DATA *nd;
+         NNTP_SERVER *news = CurrentNewsSrv;
+
+         if (i == OP_SUBSCRIBE_PATTERN || i == OP_UNSUBSCRIBE_PATTERN)
+         {
+           char tmp[STRING];
+           int err;
+
+           buf[0] = 0;
+           if (i == OP_SUBSCRIBE_PATTERN)
+             snprintf (tmp, sizeof (tmp), _("Subscribe pattern: "));
+           else
+             snprintf (tmp, sizeof (tmp), _("Unsubscribe pattern: "));
+           if (mutt_get_field (tmp, buf, sizeof (buf), 0) != 0 || !buf[0])
+           {
+             FREE (&rx);
+             break;
+           }
+
+           if ((err = REGCOMP (rx, s, REG_NOSUB)) != 0)
+           {
+             regerror (err, rx, buf, sizeof (buf));
+             regfree (rx);
+             FREE (&rx);
+             mutt_error ("%s", buf);
+             break;
+           }
+           menu->redraw = REDRAW_FULL;
+           j = 0;
+         }
+         else if (!state.entrylen)
+         {
+           mutt_error _("No newsgroups match the mask");
+           break;
+         }
+
+         for ( ; j < state.entrylen; j++)
+         {
+           struct folder_file *f = &state.entry[j];
+
+           if (i == OP_BROWSER_SUBSCRIBE || i == OP_BROWSER_UNSUBSCRIBE ||
+                 regexec (rx, f->name, 0, NULL, 0) == 0)
+           {
+             if (i == OP_BROWSER_SUBSCRIBE || i == OP_SUBSCRIBE_PATTERN)
+               nd = mutt_newsgroup_subscribe (news, f->name);
+             else
+               nd = mutt_newsgroup_unsubscribe (news, f->name);
+/*           if (nd)
+             {
+               FOLDER folder;
+               char buffer[_POSIX_PATH_MAX + SHORT_STRING];
+
+               folder.name = f->name;
+               folder.f = NULL;
+               folder.new = nd->new;
+               folder.nd = nd;
+               FREE (&f->desc);
+               mutt_FormatString (buffer, sizeof (buffer), NONULL(GroupFormat),
+                       newsgroup_format_str, (unsigned long) &folder,
+                       M_FORMAT_ARROWCURSOR);
+               f->desc = safe_strdup (buffer);
+             } */
+           }
+           if (i == OP_BROWSER_SUBSCRIBE || i == OP_BROWSER_UNSUBSCRIBE)
+           {
+             if (menu->current + 1 < menu->max)
+               menu->current++;
+             menu->redraw = REDRAW_MOTION_RESYNCH;
+             break;
+           }
+         }
+         if (i == OP_SUBSCRIBE_PATTERN)
+         {
+           LIST *grouplist = NULL;
+
+           if (news)
+             grouplist = news->list;
+           for (; grouplist; grouplist = grouplist->next)
+           {
+             nd = (NNTP_DATA *) grouplist->data;
+             if (nd && nd->group && !nd->subscribed)
+             {
+               if (regexec (rx, nd->group, 0, NULL, 0) == 0)
+               {
+                 mutt_newsgroup_subscribe (news, nd->group);
+                 add_folder (menu, &state, nd->group, NULL, nd, nd->new);
+               }
+             }
+           }
+           init_menu (&state, menu, title, sizeof (title), buffy);
+         }
+         mutt_newsrc_update (news);
+         nntp_clear_cacheindex (news);
+         if (i != OP_BROWSER_SUBSCRIBE && i != OP_BROWSER_UNSUBSCRIBE)
+           regfree (rx);
+         FREE (&rx);
+       }
+#ifdef USE_IMAP
+       else
+#endif /* USE_IMAP && USE_NNTP */
+#endif /* USE_NNTP */
+#ifdef USE_IMAP
+       {
+         if (i == OP_BROWSER_SUBSCRIBE)
+           imap_subscribe (state.entry[menu->current].name, 1);
+         else
+           imap_subscribe (state.entry[menu->current].name, 0);
+       }
+#endif /* USE_IMAP */
+    }
+  }
+  
+  bail:
+  
+  if (!folder)
+    strfcpy (LastDir, LastDirBackup, sizeof (LastDir));
+  
+}
diff --git a/browser.h b/browser.h
new file mode 100644 (file)
index 0000000..dbc5726
--- /dev/null
+++ b/browser.h
@@ -0,0 +1,65 @@
+/* $Id: browser.h,v 3.1 2002/12/11 11:19:39 roessler Exp $ */
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#ifndef _BROWSER_H
+#define _BROWSER_H 1
+
+#ifdef USE_NNTP
+#include "nntp.h"
+#endif
+
+struct folder_file
+{
+  mode_t mode;
+  off_t size;
+  time_t mtime;
+  struct stat *st;
+
+  char *name;
+  char *desc;
+
+  unsigned short new;
+#ifdef USE_IMAP
+  char delim;
+  
+  unsigned imap : 1;
+  unsigned selectable : 1;
+  unsigned inferiors : 1;
+#endif
+#ifdef USE_NNTP
+  NNTP_DATA *nd;
+#endif
+  unsigned tagged : 1;
+};
+
+struct browser_state
+{
+  struct folder_file *entry;
+  unsigned int entrylen; /* number of real entries */
+  unsigned int entrymax; /* max entry */
+#ifdef USE_IMAP
+  short imap_browse;
+  char *folder;
+  unsigned noselect : 1;
+  unsigned marked : 1;
+  unsigned unmarked : 1;
+#endif
+};
+
+#endif /* _BROWSER_H */
diff --git a/buffy.c b/buffy.c
new file mode 100644 (file)
index 0000000..334a164
--- /dev/null
+++ b/buffy.c
@@ -0,0 +1,561 @@
+/* 
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */
+
+#include "mutt.h"
+#include "buffy.h"
+#include "mailbox.h"
+#include "mx.h"
+
+#include "mutt_curses.h"
+
+#ifdef USE_IMAP
+#include "imap.h"
+#endif
+
+#include <string.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <utime.h>
+#include <ctype.h>
+#include <unistd.h>
+
+#include <stdio.h>
+
+static time_t BuffyTime = 0;   /* last time we started checking for mail */
+time_t BuffyDoneTime = 0;      /* last time we knew for sure how much mail there was. */
+static short BuffyCount = 0;   /* how many boxes with new mail */
+static short BuffyNotify = 0;  /* # of unnotified new boxes */
+
+#ifdef BUFFY_SIZE
+
+/* Find the last message in the file. 
+ * upon success return 0. If no message found - return -1 */
+
+int fseek_last_message (FILE * f)
+{
+  long int pos;
+  char buffer[BUFSIZ + 9];     /* 7 for "\n\nFrom " */
+  int bytes_read;
+  int i;                       /* Index into `buffer' for scanning.  */
+
+  memset (buffer, 0, sizeof(buffer));
+  fseek (f, 0, SEEK_END);
+  pos = ftell (f);
+
+  /* Set `bytes_read' to the size of the last, probably partial, buffer; 0 <
+   * `bytes_read' <= `BUFSIZ'.  */
+  bytes_read = pos % BUFSIZ;
+  if (bytes_read == 0)
+    bytes_read = BUFSIZ;
+  /* Make `pos' a multiple of `BUFSIZ' (0 if the file is short), so that all
+   * reads will be on block boundaries, which might increase efficiency.  */
+  while ((pos -= bytes_read) >= 0)
+  {
+    /* we save in the buffer at the end the first 7 chars from the last read */
+    strncpy (buffer + BUFSIZ, buffer, 5+2); /* 2 == 2 * mutt_strlen(CRLF) */
+    fseek (f, pos, SEEK_SET);
+    bytes_read = fread (buffer, sizeof (char), bytes_read, f);
+    if (bytes_read == -1)
+      return -1;
+    for (i = bytes_read; --i >= 0;)
+      if (!mutt_strncmp (buffer + i, "\n\nFrom ", mutt_strlen ("\n\nFrom ")))
+      {                                /* found it - go to the beginning of the From */
+       fseek (f, pos + i + 2, SEEK_SET);
+       return 0;
+      }
+    bytes_read = BUFSIZ;
+  }
+
+  /* here we are at the beginning of the file */
+  if (!mutt_strncmp ("From ", buffer, 5))
+  {
+    fseek (f, 0, 0);
+    return (0);
+  }
+
+  return (-1);
+}
+
+/* Return 1 if the last message is new */
+int test_last_status_new (FILE * f)
+{
+  HEADER *hdr;
+  ENVELOPE* tmp_envelope;
+  int result = 0;
+
+  if (fseek_last_message (f) == -1)
+    return (0);
+
+  hdr = mutt_new_header ();
+  tmp_envelope = mutt_read_rfc822_header (f, hdr, 0, 0);
+  if (!(hdr->read || hdr->old))
+    result = 1;
+
+  mutt_free_envelope(&tmp_envelope);
+  mutt_free_header (&hdr);
+
+  return result;
+}
+
+int test_new_folder (const char *path)
+{
+  FILE *f;
+  int rc = 0;
+  int typ;
+
+  typ = mx_get_magic (path);
+
+  if (typ != M_MBOX && typ != M_MMDF)
+    return 0;
+
+  if ((f = fopen (path, "rb")))
+  {
+    rc = test_last_status_new (f);
+    fclose (f);
+  }
+
+  return rc;
+}
+
+BUFFY *mutt_find_mailbox (const char *path)
+{
+  BUFFY *tmp = NULL;
+  struct stat sb;
+  struct stat tmp_sb;
+  
+  if (stat (path,&sb) != 0)
+    return NULL;
+
+  for (tmp = Incoming; tmp; tmp = tmp->next)
+  {
+    if (stat (tmp->path,&tmp_sb) ==0 && 
+       sb.st_dev == tmp_sb.st_dev && sb.st_ino == tmp_sb.st_ino)
+      break;
+  }
+  return tmp;
+}
+
+void mutt_update_mailbox (BUFFY * b)
+{
+  struct stat sb;
+
+  if (!b)
+    return;
+
+  if (stat (b->path, &sb) == 0)
+    b->size = (long) sb.st_size;
+  else
+    b->size = 0;
+  return;
+}
+#endif
+
+int mutt_parse_mailboxes (BUFFER *path, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  BUFFY **tmp,*tmp1;
+  char buf[_POSIX_PATH_MAX];
+#ifdef BUFFY_SIZE
+  struct stat sb;
+#endif /* BUFFY_SIZE */
+
+  while (MoreArgs (s))
+  {
+    mutt_extract_token (path, s, 0);
+    strfcpy (buf, path->data, sizeof (buf));
+
+    if(data == M_UNMAILBOXES && mutt_strcmp(buf,"*") == 0)
+    {
+      for (tmp = &Incoming; *tmp;)
+      {
+        FREE (&((*tmp)->path));
+        tmp1=(*tmp)->next;
+        FREE (tmp);
+        *tmp=tmp1;
+      }
+      return 0;
+    }
+
+    mutt_expand_path (buf, sizeof (buf));
+
+    /* Skip empty tokens. */
+    if(!*buf) continue;
+
+    /* simple check to avoid duplicates */
+    for (tmp = &Incoming; *tmp; tmp = &((*tmp)->next))
+    {
+      if (mutt_strcmp (buf, (*tmp)->path) == 0)
+       break;
+    }
+
+    if(data == M_UNMAILBOXES)
+    {
+      if(*tmp)
+      {
+        FREE (&((*tmp)->path));
+        tmp1=(*tmp)->next;
+        FREE (tmp);
+        *tmp=tmp1;
+      }
+      continue;
+    }
+
+    if (!*tmp)
+    {
+      *tmp = (BUFFY *) safe_calloc (1, sizeof (BUFFY));
+      (*tmp)->path = safe_strdup (buf);
+      (*tmp)->next = NULL;
+      /* it is tempting to set magic right here */
+      (*tmp)->magic = 0;
+      
+    }
+
+    (*tmp)->new = 0;
+    (*tmp)->notified = 1;
+    (*tmp)->newly_created = 0;
+
+#ifdef BUFFY_SIZE
+    /* for buffy_size, it is important that if the folder is new (tested by
+     * reading it), the size is set to 0 so that later when we check we see
+     * that it increased .  without buffy_size we probably don't care.
+     */
+    if (stat ((*tmp)->path, &sb) == 0 && !test_new_folder ((*tmp)->path))
+    {
+      /* some systems out there don't have an off_t type */
+      (*tmp)->size = (long) sb.st_size;
+    }
+    else
+      (*tmp)->size = 0;
+#endif /* BUFFY_SIZE */
+  }
+  return 0;
+}
+
+#ifdef BUFFY_SIZE
+/* people use buffy_size on systems where modified time attributes are BADLY
+ * broken. Ignore them.
+ */
+#define STAT_CHECK (sb.st_size > tmp->size)
+#else
+#define STAT_CHECK (sb.st_mtime > sb.st_atime || (tmp->newly_created && sb.st_ctime == sb.st_mtime && sb.st_ctime == sb.st_atime))
+#endif /* BUFFY_SIZE */
+
+int mutt_buffy_check (int force)
+{
+  BUFFY *tmp;
+  struct stat sb;
+  struct dirent *de;
+  DIR *dirp;
+  char path[_POSIX_PATH_MAX];
+  struct stat contex_sb;
+  time_t t;
+
+#ifdef USE_IMAP
+  /* update postponed count as well, on force */
+  if (force)
+    mutt_update_num_postponed ();
+#endif
+
+  /* fastest return if there are no mailboxes */
+  if (!Incoming)
+    return 0;
+  t = time (NULL);
+  if (!force && (t - BuffyTime < BuffyTimeout))
+    return BuffyCount;
+  BuffyTime = t;
+  BuffyCount = 0;
+  BuffyNotify = 0;
+
+#ifdef USE_IMAP
+  if (!Context || Context->magic != M_IMAP)
+#endif
+#ifdef USE_POP
+  if (!Context || Context->magic != M_POP)
+#endif
+#ifdef USE_NNTP
+  if (!Context || Context->magic != M_NNTP)
+#endif
+  /* check device ID and serial number instead of comparing paths */
+  if (!Context || !Context->path || stat (Context->path, &contex_sb) != 0)
+  {
+    contex_sb.st_dev=0;
+    contex_sb.st_ino=0;
+  }
+  
+  for (tmp = Incoming; tmp; tmp = tmp->next)
+  {
+    tmp->new = 0;
+
+#ifdef USE_IMAP
+    if (mx_is_imap (tmp->path))
+      tmp->magic = M_IMAP;
+    else
+#endif
+#ifdef USE_POP
+    if (mx_is_pop (tmp->path))
+      tmp->magic = M_POP;
+    else
+#endif
+#ifdef USE_NNTP
+    if ((tmp->magic == M_NNTP) || mx_is_nntp (tmp->path))
+      tmp->magic = M_NNTP;
+    else
+#endif
+    if (stat (tmp->path, &sb) != 0 || sb.st_size == 0 ||
+       (!tmp->magic && (tmp->magic = mx_get_magic (tmp->path)) <= 0))
+    {
+      /* if the mailbox still doesn't exist, set the newly created flag to
+       * be ready for when it does. */
+      tmp->newly_created = 1;
+      tmp->magic = 0;
+#ifdef BUFFY_SIZE
+      tmp->size = 0;
+#endif
+      continue;
+    }
+
+    /* check to see if the folder is the currently selected folder
+     * before polling */
+    if (!Context || !Context->path ||
+        (
+          (0
+#ifdef USE_IMAP
+           || tmp->magic == M_IMAP
+#endif
+#ifdef USE_POP
+           || tmp->magic == M_POP
+#endif
+#ifdef USE_NNTP
+           || tmp->magic == M_NNTP
+#endif
+          ) ? mutt_strcmp (tmp->path, Context->path) :
+              (sb.st_dev != contex_sb.st_dev || sb.st_ino != contex_sb.st_ino)
+        )
+       )
+    {
+      switch (tmp->magic)
+      {
+      case M_MBOX:
+      case M_MMDF:
+
+       if (STAT_CHECK)
+       {
+         BuffyCount++;
+         tmp->new = 1;
+       }
+#ifdef BUFFY_SIZE
+       else
+       {
+         /* some other program has deleted mail from the folder */
+         tmp->size = (long) sb.st_size;
+       }
+#endif
+       if (tmp->newly_created &&
+           (sb.st_ctime != sb.st_mtime || sb.st_ctime != sb.st_atime))
+         tmp->newly_created = 0;
+
+       break;
+
+      case M_MAILDIR:
+
+       snprintf (path, sizeof (path), "%s/new", tmp->path);
+       if ((dirp = opendir (path)) == NULL)
+       {
+         tmp->magic = 0;
+         break;
+       }
+       while ((de = readdir (dirp)) != NULL)
+       {
+         char *p;
+         if (*de->d_name != '.' && 
+             (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T')))
+         {
+           /* one new and undeleted message is enough */
+           BuffyCount++;
+           tmp->new = 1;
+           break;
+         }
+       }
+       closedir (dirp);
+       break;
+
+      case M_MH:
+       if ((tmp->new = mh_buffy (tmp->path)) > 0)
+         BuffyCount++;
+       break;
+       
+#ifdef USE_IMAP
+      case M_IMAP:
+       if ((tmp->new = imap_mailbox_check (tmp->path, 1)) > 0)
+         BuffyCount++;
+       else
+         tmp->new = 0;
+
+       break;
+#endif
+
+#ifdef USE_POP
+      case M_POP:
+       break;
+#endif
+
+#ifdef USE_NNTP
+      case M_NNTP:
+       break;
+#endif
+      }
+    }
+#ifdef BUFFY_SIZE
+    else if (Context && Context->path)
+      tmp->size = (long) sb.st_size;   /* update the size */
+#endif
+
+    if (!tmp->new)
+      tmp->notified = 0;
+    else if (!tmp->notified)
+      BuffyNotify++;
+  }
+
+  BuffyDoneTime = BuffyTime;
+  return (BuffyCount);
+}
+
+int mutt_buffy_list (void)
+{
+  BUFFY *tmp;
+  char path[_POSIX_PATH_MAX];
+  char buffylist[160];
+  int pos;
+  int first;
+
+  int have_unnotified = BuffyNotify;
+  
+  pos = 0;
+  first = 1;
+  buffylist[0] = 0;
+  pos += strlen (strncat (buffylist, _("New mail in "), sizeof (buffylist) - 1 - pos));
+  for (tmp = Incoming; tmp; tmp = tmp->next)
+  {
+    /* Is there new mail in this mailbox? */
+    if (!tmp->new || (have_unnotified && tmp->notified))
+      continue;
+
+    strfcpy (path, tmp->path, sizeof (path));
+    mutt_pretty_mailbox (path);
+    
+    if (!first && pos + strlen (path) >= COLS - 7)
+      break;
+    
+    if (!first)
+      pos += strlen (strncat(buffylist + pos, ", ", sizeof(buffylist)-1-pos));
+
+    /* Prepend an asterisk to mailboxes not already notified */
+    if (!tmp->notified)
+    {
+      /* pos += strlen (strncat(buffylist + pos, "*", sizeof(buffylist)-1-pos)); */
+      tmp->notified = 1;
+      BuffyNotify--;
+    }
+    pos += strlen (strncat(buffylist + pos, path, sizeof(buffylist)-1-pos));
+    first = 0;
+  }
+  if (!first && tmp)
+  {
+    strncat (buffylist + pos, ", ...", sizeof (buffylist) - 1 - pos);
+  }
+  if (!first)
+  {
+    mutt_message ("%s", buffylist);
+    return (1);
+  }
+  /* there were no mailboxes needing to be notified, so clean up since 
+   * BuffyNotify has somehow gotten out of sync
+   */
+  BuffyNotify = 0;
+  return (0);
+}
+
+int mutt_buffy_notify (void)
+{
+  if (mutt_buffy_check (0) && BuffyNotify)
+  {
+    return (mutt_buffy_list ());
+  }
+  return (0);
+}
+
+/* 
+ * mutt_buffy() -- incoming folders completion routine
+ *
+ * given a folder name, this routine gives the next incoming folder with new
+ * new mail.
+ */
+void mutt_buffy (char *s, size_t slen)
+{
+  int count;
+  BUFFY *tmp = Incoming;
+
+  mutt_expand_path (s, _POSIX_PATH_MAX);
+  switch (mutt_buffy_check (0))
+  {
+  case 0:
+
+    *s = '\0';
+    break;
+
+  case 1:
+
+    while (tmp && !tmp->new)
+      tmp = tmp->next;
+    if (!tmp)
+    {
+      *s = '\0';
+      mutt_buffy_check (1); /* buffy was wrong - resync things */
+      break;
+    }
+    strfcpy (s, tmp->path, slen);
+    mutt_pretty_mailbox (s);
+    break;
+
+  default:
+    
+    count = 0;
+    while (count < 3)
+    {
+      if (mutt_strcmp (s, tmp->path) == 0)
+       count++;
+      else if (count && tmp->new)
+       break;
+      tmp = tmp->next;
+      if (!tmp)
+      {
+       tmp = Incoming;
+       count++;
+      }
+    }
+    if (count >= 3)
+    {
+      *s = '\0';
+      mutt_buffy_check (1); /* buffy was wrong - resync things */
+      break;
+    }
+    strfcpy (s, tmp->path, slen);
+    mutt_pretty_mailbox (s);
+    break;
+  }
+}
diff --git a/buffy.h b/buffy.h
new file mode 100644 (file)
index 0000000..e04e7c5
--- /dev/null
+++ b/buffy.h
@@ -0,0 +1,45 @@
+/* 
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */
+
+/*parameter to mutt_parse_mailboxes*/
+#define M_MAILBOXES   1
+#define M_UNMAILBOXES 2 
+
+typedef struct buffy_t
+{
+  char *path;
+#ifdef BUFFY_SIZE
+  long size;
+#endif                         /* BUFFY_SIZE */
+  struct buffy_t *next;
+  short new;                   /* mailbox has new mail */
+  short notified;              /* user has been notified */
+  short magic;                 /* mailbox type */
+  short newly_created;         /* mbox or mmdf just popped into existence */
+}
+BUFFY;
+
+WHERE BUFFY *Incoming INITVAL (0);
+WHERE short BuffyTimeout INITVAL (3);
+
+extern time_t BuffyDoneTime;   /* last time we knew for sure how much mail there was */
+
+#ifdef BUFFY_SIZE
+BUFFY *mutt_find_mailbox (const char *path);
+void mutt_update_mailbox (BUFFY * b);
+#endif
diff --git a/charset.c b/charset.c
new file mode 100644 (file)
index 0000000..19c3a2b
--- /dev/null
+++ b/charset.c
@@ -0,0 +1,583 @@
+/*
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ *
+ *     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.
+ */
+
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <ctype.h>
+
+#include <sys/types.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include "mutt.h"
+#include "charset.h"
+
+#ifndef EILSEQ
+# define EILSEQ EINVAL
+#endif
+
+/* 
+ * The following list has been created manually from the data under:
+ * http://www.isi.edu/in-notes/iana/assignments/character-sets
+ * Last update: 2000-09-07
+ *
+ * Note that it includes only the subset of character sets for which
+ * a preferred MIME name is given.
+ */
+
+static struct 
+{
+  char *key;
+  char *pref;
+}
+PreferredMIMENames[] = 
+{
+  { "ansi_x3.4-1968",  "us-ascii"      },
+  { "iso-ir-6",                "us-ascii"      },
+  { "iso_646.irv:1991",        "us-ascii"      },
+  { "ascii",           "us-ascii"      },
+  { "iso646-us",       "us-ascii"      },
+  { "us",              "us-ascii"      },
+  { "ibm367",          "us-ascii"      },
+  { "cp367",           "us-ascii"      },
+  { "csASCII",         "us-ascii"      },
+  
+  { "csISO2022KR",     "iso-2022-kr"   },
+  { "csEUCKR",         "euc-kr"        },
+  { "csISO2022JP",     "iso-2022-jp"   },
+  { "csISO2022JP2",    "iso-2022-jp-2" },
+
+  { "ISO_8859-1:1987", "iso-8859-1"    },
+  { "iso-ir-100",      "iso-8859-1"    },
+  { "iso_8859-1",      "iso-8859-1"    },
+  { "latin1",          "iso-8859-1"    },
+  { "l1",              "iso-8859-1"    },
+  { "IBM819",          "iso-8859-1"    },
+  { "CP819",           "iso-8859-1"    },
+  { "csISOLatin1",     "iso-8859-1"    },
+  
+  { "ISO_8859-2:1987", "iso-8859-2"    },
+  { "iso-ir-101",      "iso-8859-2"    },
+  { "iso_8859-2",      "iso-8859-2"    },
+  { "latin2",          "iso-8859-2"    },
+  { "l2",              "iso-8859-2"    },
+  { "csISOLatin2",     "iso-8859-2"    },
+  
+  { "ISO_8859-3:1988", "iso-8859-3"    },
+  { "iso-ir-109",      "iso-8859-3"    },
+  { "ISO_8859-3",      "iso-8859-3"    },
+  { "latin3",          "iso-8859-3"    },
+  { "l3",              "iso-8859-3"    },
+  { "csISOLatin3",     "iso-8859-3"    },
+
+  { "ISO_8859-4:1988", "iso-8859-4"    },
+  { "iso-ir-110",      "iso-8859-4"    },
+  { "ISO_8859-4",      "iso-8859-4"    },
+  { "latin4",          "iso-8859-4"    },
+  { "l4",              "iso-8859-4"    },
+  { "csISOLatin4",     "iso-8859-4"    },
+
+  { "ISO_8859-6:1987", "iso-8859-6"    },
+  { "iso-ir-127",      "iso-8859-6"    },
+  { "iso_8859-6",      "iso-8859-6"    },
+  { "ECMA-114",                "iso-8859-6"    },
+  { "ASMO-708",                "iso-8859-6"    },
+  { "arabic",          "iso-8859-6"    },
+  { "csISOLatinArabic",        "iso-8859-6"    },
+  
+  { "ISO_8859-7:1987", "iso-8859-7"    },
+  { "iso-ir-126",      "iso-8859-7"    },
+  { "ISO_8859-7",      "iso-8859-7"    },
+  { "ELOT_928",                "iso-8859-7"    },
+  { "ECMA-118",                "iso-8859-7"    },
+  { "greek",           "iso-8859-7"    },
+  { "greek8",          "iso-8859-7"    },
+  { "csISOLatinGreek", "iso-8859-7"    },
+  
+  { "ISO_8859-8:1988", "iso-8859-8"    },
+  { "iso-ir-138",      "iso-8859-8"    },
+  { "ISO_8859-8",      "iso-8859-8"    },
+  { "hebrew",          "iso-8859-8"    },
+  { "csISOLatinHebrew",        "iso-8859-8"    },
+
+  { "ISO_8859-5:1988", "iso-8859-5"    },
+  { "iso-ir-144",      "iso-8859-5"    },
+  { "ISO_8859-5",      "iso-8859-5"    },
+  { "cyrillic",                "iso-8859-5"    },
+  { "csISOLatinCyrillic", "iso8859-5"  },
+
+  { "ISO_8859-9:1989", "iso-8859-9"    },
+  { "iso-ir-148",      "iso-8859-9"    },
+  { "ISO_8859-9",      "iso-8859-9"    },
+  { "latin5",          "iso-8859-9"    }, /* this is not a bug */
+  { "l5",              "iso-8859-9"    },
+  { "csISOLatin5",     "iso-8859-9"    },
+  
+  { "ISO_8859-10:1992",        "iso-8859-10"   },
+  { "iso-ir-157",      "iso-8859-10"   },
+  { "latin6",          "iso-8859-10"   }, /* this is not a bug */
+  { "l6",              "iso-8859-10"   },
+  { "csISOLatin6"      "iso-8859-10"   }, 
+  
+  { "csKOI8r",         "koi8-r"        },
+  
+  { "MS_Kanji",                "Shift_JIS"     }, /* Note the underscore! */
+  { "csShiftJis",      "Shift_JIS"     },
+  
+  { "Extended_UNIX_Code_Packed_Format_for_Japanese",
+                       "EUC-JP"        },
+  { "csEUCPkdFmtJapanese", 
+                       "EUC-JP"        },
+  
+  { "csGB2312",                "gb2312"        },
+  { "csbig5",          "big5"          },
+
+  /* 
+   * End of official brain damage.  What follows has been taken
+   * from glibc's localedata files. 
+   */
+
+  { "iso_8859-13",     "iso-8859-13"   },
+  { "iso-ir-179",      "iso-8859-13"   },
+  { "latin7",          "iso-8859-13"   }, /* this is not a bug */
+  { "l7",              "iso-8859-13"   },
+  
+  { "iso_8859-14",     "iso-8859-14"   },
+  { "latin8",          "iso-8859-14"   }, /* this is not a bug */
+  { "l8",              "iso-8859-14"   },
+
+  { "iso_8859-15",     "iso-8859-15"   },
+  { "latin9",          "iso-8859-15"   }, /* this is not a bug */
+
+  /* Suggested by Ionel Mugurel Ciobica <tgakic@sg10.chem.tue.nl> */
+  { "latin0",           "iso-8859-15"   }, /* this is not a bug */
+  
+  { "iso_8859-16",      "iso-8859-16"   },
+  { "latin10",          "iso-8859-16"   }, /* this is not a bug */
+  
+  /* 
+   * David Champion <dgc@uchicago.edu> has observed this with
+   * nl_langinfo under SunOS 5.8. 
+   */
+  
+  { "646",             "us-ascii"      },
+  
+  /* 
+   * http://www.sun.com/software/white-papers/wp-unicode/
+   */
+
+  { "eucJP",           "euc-jp"        },
+  { "PCK",             "Shift_JIS"     },
+  { "ko_KR-euc",       "euc-kr"        },
+  { "zh_TW-big5",      "big5"          },
+
+  /* seems to be common on some systems */
+
+  { "sjis",            "Shift_JIS"     },
+
+
+  /*
+   * If you happen to encounter system-specific brain-damage with
+   * respect to character set naming, please add it above this
+   * comment, and submit a patch to <mutt-dev@mutt.org>. 
+   */
+  
+  /* End of aliases.  Please keep this line last. */
+  
+  { NULL,              NULL            }
+};
+
+#ifdef HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+
+
+void mutt_set_langinfo_charset (void)
+{
+  char buff[LONG_STRING];
+  char buff2[LONG_STRING];
+  
+  strfcpy (buff, nl_langinfo (CODESET), sizeof (buff));
+  mutt_canonical_charset (buff2, sizeof (buff2), buff);
+  
+  /* finally, set $charset */
+  if (!(Charset = safe_strdup (buff2)))
+    Charset = safe_strdup ("iso-8859-1");
+}
+
+#else
+
+void mutt_set_langinfo_charset (void)
+{
+  Charset = safe_strdup ("iso-8859-1");
+}
+
+#endif
+
+void mutt_canonical_charset (char *dest, size_t dlen, const char *name)
+{
+  size_t i;
+  char *p;
+  char scratch[LONG_STRING];
+
+  /* catch some common iso-8859-something misspellings */
+  if (!ascii_strncasecmp (name, "8859", 4) && name[4] != '-')
+    snprintf (scratch, sizeof (scratch), "iso-8859-%s", name +4);
+  else if (!ascii_strncasecmp (name, "8859-", 5))
+    snprintf (scratch, sizeof (scratch), "iso-8859-%s", name + 5);
+  else if (!ascii_strncasecmp (name, "iso8859", 7) && name[7] != '-')
+    snprintf (scratch, sizeof (scratch), "iso_8859-%s", name + 7);
+  else if (!ascii_strncasecmp (name, "iso8859-", 8))
+    snprintf (scratch, sizeof (scratch), "iso_8859-%s", name + 8);
+  else
+    strfcpy (scratch, NONULL(name), sizeof (scratch));
+
+  for (i = 0; PreferredMIMENames[i].key; i++)
+    if (!ascii_strcasecmp (scratch, PreferredMIMENames[i].key) ||
+       !mutt_strcasecmp (scratch, PreferredMIMENames[i].key))
+    {
+      strfcpy (dest, PreferredMIMENames[i].pref, dlen);
+      return;
+    }
+
+  strfcpy (dest, scratch, dlen);
+
+  /* for cosmetics' sake, transform to lowercase. */
+  for (p = dest; *p; p++)
+    *p = ascii_tolower (*p);
+}
+
+int mutt_chscmp (const char *s, const char *chs)
+{
+  char buffer[STRING];
+
+  if (!s) return 0;
+
+  mutt_canonical_charset (buffer, sizeof (buffer), s);
+  return !ascii_strcasecmp (buffer, chs);
+}
+
+
+#ifndef HAVE_ICONV
+
+iconv_t iconv_open (const char *tocode, const char *fromcode)
+{
+  return (iconv_t)(-1);
+}
+
+size_t iconv (iconv_t cd, ICONV_CONST char **inbuf, size_t *inbytesleft,
+             char **outbuf, size_t *outbytesleft)
+{
+  return 0;
+}
+
+int iconv_close (iconv_t cd)
+{
+  return 0;
+}
+
+#endif /* !HAVE_ICONV */
+
+
+/*
+ * Like iconv_open, but canonicalises the charsets
+ */
+
+iconv_t mutt_iconv_open (const char *tocode, const char *fromcode, int flags)
+{
+  char tocode1[SHORT_STRING];
+  char fromcode1[SHORT_STRING];
+  char *tocode2, *fromcode2;
+  char *tmp;
+
+  iconv_t cd;
+  
+  mutt_canonical_charset (tocode1, sizeof (tocode1), tocode);
+
+#ifdef M_ICONV_HOOK_TO
+  /* Not used. */
+  if ((flags & M_ICONV_HOOK_TO) && (tmp = mutt_charset_hook (tocode1)))
+    mutt_canonical_charset (tocode1, sizeof (tocode1), tmp);
+#endif
+
+  mutt_canonical_charset (fromcode1, sizeof (fromcode1), fromcode);
+  if ((flags & M_ICONV_HOOK_FROM) && (tmp = mutt_charset_hook (fromcode1)))
+    mutt_canonical_charset (fromcode1, sizeof (fromcode1), tmp);
+
+  if ((cd = iconv_open (tocode1, fromcode1)) != (iconv_t) -1)
+    return cd;
+  if ((tocode2 = mutt_iconv_hook (tocode1)) && (fromcode2 = mutt_iconv_hook (fromcode1)))
+    return iconv_open (tocode2, fromcode2);
+  
+  return (iconv_t) -1;
+}
+
+
+/*
+ * Like iconv, but keeps going even when the input is invalid
+ * If you're supplying inrepls, the source charset should be stateless;
+ * if you're supplying an outrepl, the target charset should be.
+ */
+
+size_t mutt_iconv (iconv_t cd, ICONV_CONST char **inbuf, size_t *inbytesleft,
+                  char **outbuf, size_t *outbytesleft,
+                  ICONV_CONST char **inrepls, const char *outrepl)
+{
+  size_t ret = 0, ret1;
+  ICONV_CONST char *ib = *inbuf;
+  size_t ibl = *inbytesleft;
+  char *ob = *outbuf;
+  size_t obl = *outbytesleft;
+
+  for (;;)
+  {
+    ret1 = iconv (cd, &ib, &ibl, &ob, &obl);
+    if (ret1 != (size_t)-1)
+      ret += ret1;
+    if (ibl && obl && errno == EILSEQ)
+    {
+      if (inrepls)
+      {
+       /* Try replacing the input */
+       ICONV_CONST char **t;
+       for (t = inrepls; *t; t++)
+       {
+         ICONV_CONST char *ib1 = *t;
+         size_t ibl1 = strlen (*t);
+         char *ob1 = ob;
+         size_t obl1 = obl;
+         iconv (cd, &ib1, &ibl1, &ob1, &obl1);
+         if (!ibl1)
+         {
+           ++ib, --ibl;
+           ob = ob1, obl = obl1;
+           ++ret;
+           break;
+         }
+       }
+       if (*t)
+         continue;
+      }
+      if (outrepl)
+      {
+       /* Try replacing the output */
+       int n = strlen (outrepl);
+       if (n <= obl)
+       {
+         memcpy (ob, outrepl, n);
+         ++ib, --ibl;
+         ob += n, obl -= n;
+         ++ret;
+         continue;
+       }
+      }
+    }
+    *inbuf = ib, *inbytesleft = ibl;
+    *outbuf = ob, *outbytesleft = obl;
+    return ret;
+  }
+}
+
+
+/*
+ * Convert a string
+ * Used in rfc2047.c and rfc2231.c
+ */
+
+int mutt_convert_string (char **ps, const char *from, const char *to, int flags)
+{
+  iconv_t cd;
+  ICONV_CONST char *repls[] = { "\357\277\275", "?", 0 };
+  char *s = *ps;
+
+  if (!s || !*s)
+    return 0;
+
+  if (to && from && (cd = mutt_iconv_open (to, from, flags)) != (iconv_t)-1)
+  {
+    int len;
+    ICONV_CONST char *ib;
+    char *buf, *ob;
+    size_t ibl, obl;
+    ICONV_CONST char **inrepls = 0;
+    char *outrepl = 0;
+
+    if (mutt_is_utf8 (to))
+      outrepl = "\357\277\275";
+    else if (mutt_is_utf8 (from))
+      inrepls = repls;
+    else
+      outrepl = "?";
+      
+    len = strlen (s);
+    ib = s, ibl = len + 1;
+    obl = MB_LEN_MAX * ibl;
+    ob = buf = safe_malloc (obl + 1);
+    
+    mutt_iconv (cd, &ib, &ibl, &ob, &obl, inrepls, outrepl);
+    iconv_close (cd);
+
+    *ob = '\0';
+
+    FREE (ps);
+    *ps = buf;
+    
+    mutt_str_adjust (ps);
+    return 0;
+  }
+  else
+    return -1;
+}
+
+
+/*
+ * FGETCONV stuff for converting a file while reading it
+ * Used in sendlib.c for converting from mutt's Charset
+ */
+
+struct fgetconv_s
+{
+  FILE *file;
+  iconv_t cd;
+  char bufi[512];
+  char bufo[512];
+  char *p;
+  char *ob;
+  char *ib;
+  size_t ibl;
+  ICONV_CONST char **inrepls;
+};
+
+struct fgetconv_not
+{
+  FILE *file;
+  iconv_t cd;
+};
+
+FGETCONV *fgetconv_open (FILE *file, const char *from, const char *to, int flags)
+{
+  struct fgetconv_s *fc;
+  iconv_t cd = (iconv_t)-1;
+  static ICONV_CONST char *repls[] = { "\357\277\275", "?", 0 };
+
+  if (from && to)
+    cd = mutt_iconv_open (to, from, flags);
+
+  if (cd != (iconv_t)-1)
+  {
+    fc = safe_malloc (sizeof (struct fgetconv_s));
+    fc->p = fc->ob = fc->bufo;
+    fc->ib = fc->bufi;
+    fc->ibl = 0;
+    fc->inrepls = mutt_is_utf8 (to) ? repls : repls + 1;
+  }
+  else
+    fc = safe_malloc (sizeof (struct fgetconv_not));
+  fc->file = file;
+  fc->cd = cd;
+  return (FGETCONV *)fc;
+}
+
+char *fgetconvs (char *buf, size_t l, FGETCONV *_fc)
+{
+  int c;
+  size_t r;
+  
+  for (r = 0; r + 1 < l;)
+  {
+    if ((c = fgetconv (_fc)) == EOF)
+      break;
+    buf[r++] = (char) c;
+    if (c == '\n') 
+      break;
+  }
+  buf[r] = '\0';
+  
+  if (r) 
+    return buf;
+  else 
+    return NULL;
+}
+
+int fgetconv (FGETCONV *_fc)
+{
+  struct fgetconv_s *fc = (struct fgetconv_s *)_fc;
+
+  if (!fc)
+    return EOF;
+  if (fc->cd == (iconv_t)-1)
+    return fgetc (fc->file);
+  if (!fc->p)
+    return EOF;
+  if (fc->p < fc->ob)
+    return (unsigned char)*(fc->p)++;
+
+  /* Try to convert some more */
+  fc->p = fc->ob = fc->bufo;
+  if (fc->ibl)
+  {
+    size_t obl = sizeof (fc->bufo);
+    iconv (fc->cd, (ICONV_CONST char **)&fc->ib, &fc->ibl, &fc->ob, &obl);
+    if (fc->p < fc->ob)
+      return (unsigned char)*(fc->p)++;
+  }
+
+  /* If we trusted iconv a bit more, we would at this point
+   * ask why it had stopped converting ... */
+
+  /* Try to read some more */
+  if (fc->ibl == sizeof (fc->bufi) ||
+      (fc->ibl && fc->ib + fc->ibl < fc->bufi + sizeof (fc->bufi)))
+  {
+    fc->p = 0;
+    return EOF;
+  }
+  if (fc->ibl)
+    memcpy (fc->bufi, fc->ib, fc->ibl);
+  fc->ib = fc->bufi;
+  fc->ibl += fread (fc->ib + fc->ibl, 1, sizeof (fc->bufi) - fc->ibl, fc->file);
+
+  /* Try harder this time to convert some */
+  if (fc->ibl)
+  {
+    size_t obl = sizeof (fc->bufo);
+    mutt_iconv (fc->cd, (ICONV_CONST char **)&fc->ib, &fc->ibl, &fc->ob, &obl,
+               fc->inrepls, 0);
+    if (fc->p < fc->ob)
+      return (unsigned char)*(fc->p)++;
+  }
+
+  /* Either the file has finished or one of the buffers is too small */
+  fc->p = 0;
+  return EOF;
+}
+
+void fgetconv_close (FGETCONV **_fc)
+{
+  struct fgetconv_s *fc = (struct fgetconv_s *) *_fc;
+
+  if (fc->cd != (iconv_t)-1)
+    iconv_close (fc->cd);
+  FREE (_fc);
+}
diff --git a/charset.h b/charset.h
new file mode 100644 (file)
index 0000000..cfc2ac5
--- /dev/null
+++ b/charset.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ *
+ *     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.
+ */
+
+#ifndef _CHARSET_H
+#define _CHARSET_H
+
+#ifdef HAVE_ICONV_H
+#include <iconv.h>
+#endif
+
+#ifndef HAVE_ICONV_T_DEF
+typedef void *iconv_t;
+#endif
+
+#ifndef HAVE_ICONV
+#define ICONV_CONST /**/
+iconv_t iconv_open (const char *, const char *);
+size_t iconv (iconv_t, ICONV_CONST char **, size_t *, char **, size_t *);
+int iconv_close (iconv_t);
+#endif
+
+int mutt_convert_string (char **, const char *, const char *, int);
+
+iconv_t mutt_iconv_open (const char *, const char *, int);
+size_t mutt_iconv (iconv_t, ICONV_CONST char **, size_t *, char **, size_t *, ICONV_CONST char **, const char *);
+
+typedef void * FGETCONV;
+
+FGETCONV *fgetconv_open (FILE *, const char *, const char *, int);
+int fgetconv (FGETCONV *);
+char * fgetconvs (char *, size_t, FGETCONV *);
+void fgetconv_close (FGETCONV **);
+
+void mutt_set_langinfo_charset (void);
+
+#define M_ICONV_HOOK_FROM 1
+#define M_ICONV_HOOK_TO   2
+
+#endif /* _CHARSET_H */
diff --git a/color.c b/color.c
new file mode 100644 (file)
index 0000000..2d013e7
--- /dev/null
+++ b/color.c
@@ -0,0 +1,801 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "mapping.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+/* globals */
+int *ColorQuote;
+int ColorQuoteUsed;
+int ColorDefs[MT_COLOR_MAX];
+COLOR_LINE *ColorHdrList = NULL;
+COLOR_LINE *ColorBodyList = NULL;
+COLOR_LINE *ColorIndexList = NULL;
+
+/* local to this file */
+static int ColorQuoteSize;
+
+#ifdef HAVE_COLOR
+
+#define COLOR_DEFAULT (-2)
+
+typedef struct color_list
+{
+  short fg;
+  short bg;
+  short index;
+  short count;
+  struct color_list *next;
+} COLOR_LIST;
+
+static COLOR_LIST *ColorList = NULL;
+static int UserColors = 0;
+
+static struct mapping_t Colors[] =
+{
+  { "black",   COLOR_BLACK },
+  { "blue",    COLOR_BLUE },
+  { "cyan",    COLOR_CYAN },
+  { "green",   COLOR_GREEN },
+  { "magenta", COLOR_MAGENTA },
+  { "red",     COLOR_RED },
+  { "white",   COLOR_WHITE },
+  { "yellow",  COLOR_YELLOW },
+#if defined (USE_SLANG_CURSES) || defined (HAVE_USE_DEFAULT_COLORS)
+  { "default", COLOR_DEFAULT },
+#endif
+  { 0, 0 }
+};
+
+#endif /* HAVE_COLOR */
+
+static struct mapping_t Fields[] =
+{
+  { "hdrdefault",      MT_COLOR_HDEFAULT },
+  { "quoted",          MT_COLOR_QUOTED },
+  { "signature",       MT_COLOR_SIGNATURE },
+  { "indicator",       MT_COLOR_INDICATOR },
+  { "status",          MT_COLOR_STATUS },
+  { "tree",            MT_COLOR_TREE },
+  { "error",           MT_COLOR_ERROR },
+  { "normal",          MT_COLOR_NORMAL },
+  { "tilde",           MT_COLOR_TILDE },
+  { "markers",         MT_COLOR_MARKERS },
+  { "header",          MT_COLOR_HEADER },
+  { "body",            MT_COLOR_BODY },
+  { "message",         MT_COLOR_MESSAGE },
+  { "attachment",      MT_COLOR_ATTACHMENT },
+  { "search",          MT_COLOR_SEARCH },
+  { "bold",            MT_COLOR_BOLD },
+  { "underline",       MT_COLOR_UNDERLINE },
+  { "index",           MT_COLOR_INDEX },
+  { NULL,              0 }
+};
+
+#define COLOR_QUOTE_INIT       8
+
+static COLOR_LINE *mutt_new_color_line (void)
+{
+  COLOR_LINE *p = safe_calloc (1, sizeof (COLOR_LINE));
+
+  p->fg = p->bg = -1;
+  
+  return (p);
+}
+
+static void mutt_free_color_line(COLOR_LINE **l, 
+                                int free_colors)
+{
+  COLOR_LINE *tmp;
+  if(!l || !*l)
+    return;
+
+  tmp = *l;
+
+#ifdef HAVE_COLOR
+  if(free_colors && tmp->fg != -1 && tmp->bg != -1)
+    mutt_free_color(tmp->fg, tmp->bg);
+#endif
+
+  /* we should really introduce a container
+   * type for regular expressions.
+   */
+  
+  regfree(&tmp->rx);
+  mutt_pattern_free(&tmp->color_pattern);
+  FREE (&tmp->pattern);
+  FREE (l);
+}
+
+void ci_start_color (void)
+{
+  memset (ColorDefs, A_NORMAL, sizeof (int) * MT_COLOR_MAX);
+  ColorQuote = (int *) safe_malloc (COLOR_QUOTE_INIT * sizeof (int));
+  memset (ColorQuote, A_NORMAL, sizeof (int) * COLOR_QUOTE_INIT);
+  ColorQuoteSize = COLOR_QUOTE_INIT;
+  ColorQuoteUsed = 0;
+
+  /* set some defaults */
+  ColorDefs[MT_COLOR_STATUS] = A_REVERSE;
+  ColorDefs[MT_COLOR_INDICATOR] = A_REVERSE;
+  ColorDefs[MT_COLOR_SEARCH] = A_REVERSE;
+  ColorDefs[MT_COLOR_MARKERS] = A_REVERSE;
+  /* special meaning: toggle the relevant attribute */
+  ColorDefs[MT_COLOR_BOLD] = 0;
+  ColorDefs[MT_COLOR_UNDERLINE] = 0;
+
+#ifdef HAVE_COLOR
+  start_color ();
+#endif
+}
+
+#ifdef HAVE_COLOR
+
+#ifdef USE_SLANG_CURSES
+static char *get_color_name (char *dest, size_t destlen, int val)
+{
+  static char * missing[3] = {"brown", "lightgray", ""};
+  int i;
+
+  switch (val)
+  {
+    case COLOR_YELLOW:
+      strfcpy (dest, missing[0], destlen);
+      return dest;
+
+    case COLOR_WHITE:
+      strfcpy (dest, missing[1], destlen);
+      return dest;
+      
+    case COLOR_DEFAULT:
+      strfcpy (dest, missing[2], destlen);
+      return dest;
+  }
+
+  for (i = 0; Colors[i].name; i++)
+  {
+    if (Colors[i].value == val)
+    {
+      strfcpy (dest, Colors[i].name, destlen);
+      return dest;
+    }
+  }
+
+  /* Sigh. If we got this far, the color is of the form 'colorN'
+   * Slang can handle this itself, so just return 'colorN'
+   */
+
+  snprintf (dest, destlen, "color%d", val);
+  return dest;
+}
+#endif
+
+int mutt_alloc_color (int fg, int bg)
+{
+  COLOR_LIST *p = ColorList;
+  int i;
+  
+#if defined (USE_SLANG_CURSES)
+  char fgc[SHORT_STRING], bgc[SHORT_STRING];
+#endif
+
+  /* check to see if this color is already allocated to save space */
+  while (p)
+  {
+    if (p->fg == fg && p->bg == bg)
+    {
+      (p->count)++;
+      return (COLOR_PAIR (p->index));
+    }
+    p = p->next;
+  }
+
+  /* check to see if there are colors left */
+  if (++UserColors > COLOR_PAIRS) return (A_NORMAL);
+
+  /* find the smallest available index (object) */
+  i = 1;
+  FOREVER
+  {
+    p = ColorList;
+    while (p)
+    {
+      if (p->index == i) break;
+      p = p->next;
+    }
+    if (p == NULL) break;
+    i++;
+  }
+
+  p = (COLOR_LIST *) safe_malloc (sizeof (COLOR_LIST));
+  p->next = ColorList;
+  ColorList = p;
+
+  p->index = i;
+  p->count = 1;
+  p->bg = bg;
+  p->fg = fg;
+
+#if defined (USE_SLANG_CURSES)
+  if (fg == COLOR_DEFAULT || bg == COLOR_DEFAULT)
+    SLtt_set_color (i, NULL, get_color_name (fgc, sizeof (fgc), fg), get_color_name (bgc, sizeof (bgc), bg));
+  else
+#elif defined (HAVE_USE_DEFAULT_COLORS)
+  if (fg == COLOR_DEFAULT)
+    fg = -1;
+  if (bg == COLOR_DEFAULT)
+    bg = -1;
+#endif
+
+  init_pair(i, fg, bg);
+
+  dprint(1,(debugfile,"mutt_alloc_color(): Color pairs used so far: %d\n",
+                       UserColors));
+
+  return (COLOR_PAIR (p->index));
+}
+
+void mutt_free_color (int fg, int bg)
+{
+  COLOR_LIST *p, *q;
+
+  p = ColorList;
+  while (p)
+  {
+    if (p->fg == fg && p->bg == bg)
+    {
+      (p->count)--;
+      if (p->count > 0) return;
+
+      UserColors--;
+      dprint(1,(debugfile,"mutt_free_color(): Color pairs used so far: %d\n",
+                           UserColors));
+
+      if (p == ColorList)
+      {
+       ColorList = ColorList->next;
+       FREE (&p);
+       return;
+      }
+      q = ColorList;
+      while (q)
+      {
+       if (q->next == p)
+       {
+         q->next = p->next;
+         FREE (&p);
+         return;
+       }
+       q = q->next;
+      }
+      /* can't get here */
+    }
+    p = p->next;
+  }
+}
+
+#endif /* HAVE_COLOR */
+
+
+#ifdef HAVE_COLOR
+
+static int
+parse_color_name (const char *s, int *col, int *attr, int brite, BUFFER *err)
+{
+  char *eptr;
+
+  if (mutt_strncasecmp (s, "bright", 6) == 0)
+  {
+    *attr |= brite;
+    s += 6;
+  }
+
+  /* allow aliases for xterm color resources */
+  if (mutt_strncasecmp (s, "color", 5) == 0)
+  {
+    s += 5;
+    *col = strtol (s, &eptr, 10);
+    if (!*s || *eptr || *col < 0 ||
+       (*col >= COLORS && !option(OPTNOCURSES) && has_colors()))
+    {
+      snprintf (err->data, err->dsize, _("%s: color not supported by term"), s);
+      return (-1);
+    }
+  }
+  else if ((*col = mutt_getvaluebyname (s, Colors)) == -1)
+  {
+    snprintf (err->data, err->dsize, _("%s: no such color"), s);
+    return (-1);
+  }
+
+  return 0;
+}
+
+#endif
+
+
+/* usage: uncolor index pattern [pattern...]
+ *       unmono  index pattern [pattern...]
+ */
+
+static int 
+_mutt_parse_uncolor (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err, 
+                        short parse_uncolor);
+
+
+#ifdef HAVE_COLOR
+
+int mutt_parse_uncolor (BUFFER *buf, BUFFER *s, unsigned long data,
+                       BUFFER *err)
+{
+  return _mutt_parse_uncolor(buf, s, data, err, 1);
+}
+
+#endif
+
+int mutt_parse_unmono (BUFFER *buf, BUFFER *s, unsigned long data,
+                      BUFFER *err)
+{
+  return _mutt_parse_uncolor(buf, s, data, err, 0);
+}
+
+static int 
+_mutt_parse_uncolor (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err, 
+                        short parse_uncolor)
+{
+  int object = 0, do_cache = 0;
+  COLOR_LINE *tmp, *last = NULL;
+
+  mutt_extract_token (buf, s, 0);
+
+  if ((object = mutt_getvaluebyname (buf->data, Fields)) == -1)
+  {
+    snprintf (err->data, err->dsize, _("%s: no such object"), buf->data);
+    return (-1);
+  }
+
+  if (mutt_strncmp (buf->data, "index", 5) != 0)
+  {
+    snprintf (err->data, err->dsize,
+             _("%s: command valid only for index object"), 
+             parse_uncolor ? "uncolor" : "unmono");
+    return (-1);
+  }
+  
+  if (!MoreArgs (s))
+  {
+    snprintf (err->data, err->dsize,
+             _("%s: too few arguments"), parse_uncolor ? "uncolor" : "unmono");
+    return (-1);
+  }
+
+  if(
+#ifdef HAVE_COLOR
+     /* we're running without curses */
+     option (OPTNOCURSES) 
+     || /* we're parsing an uncolor command, and have no colors */
+     (parse_uncolor && !has_colors())
+     /* we're parsing an unmono command, and have colors */
+     || (!parse_uncolor && has_colors())
+#else
+     /* We don't even have colors compiled in */
+     parse_uncolor
+#endif
+     )
+  {
+    /* just eat the command, but don't do anything real about it */
+    do
+      mutt_extract_token (buf, s, 0);
+    while (MoreArgs (s));
+
+    return 0;
+  }
+     
+  
+  do
+  {
+    mutt_extract_token (buf, s, 0);
+    if (!mutt_strcmp ("*", buf->data))
+    {
+      for (tmp = ColorIndexList; tmp; )
+      {
+        if (!do_cache)
+         do_cache = 1;
+       last = tmp;
+       tmp = tmp->next;
+       mutt_free_color_line(&last, parse_uncolor);
+      }
+      ColorIndexList = NULL;
+    }
+    else
+    {
+      for (last = NULL, tmp = ColorIndexList; tmp; last = tmp, tmp = tmp->next)
+      {
+       if (!mutt_strcmp (buf->data, tmp->pattern))
+       {
+          if (!do_cache)
+           do_cache = 1;
+         dprint(1,(debugfile,"Freeing pattern \"%s\" from ColorIndexList\n",
+                              tmp->pattern));
+         if (last)
+           last->next = tmp->next;
+         else
+           ColorIndexList = tmp->next;
+         mutt_free_color_line(&tmp, parse_uncolor);
+         break;
+       }
+      }
+    }
+  }
+  while (MoreArgs (s));
+
+
+  if (do_cache && !option (OPTNOCURSES))
+  {
+    int i;
+    set_option (OPTFORCEREDRAWINDEX);
+    /* force re-caching of index colors */
+    for (i = 0; Context && i < Context->msgcount; i++)
+      Context->hdrs[i]->pair = 0;
+  }
+  return (0);
+}
+
+
+static int 
+add_pattern (COLOR_LINE **top, const char *s, int sensitive,
+            int fg, int bg, int attr, BUFFER *err,
+            int is_index)
+{
+
+  /* is_index used to store compiled pattern
+   * only for `index' color object 
+   * when called from mutt_parse_color() */
+
+  COLOR_LINE *tmp = *top;
+
+  while (tmp)
+  {
+    if (sensitive)
+    {
+      if (mutt_strcmp (s, tmp->pattern) == 0)
+       break;
+    }
+    else
+    {
+      if (mutt_strcasecmp (s, tmp->pattern) == 0)
+       break;
+    }
+    tmp = tmp->next;
+  }
+
+  if (tmp)
+  {
+#ifdef HAVE_COLOR
+    if (fg != -1 && bg != -1)
+    {
+      if (tmp->fg != fg || tmp->bg != bg)
+      {
+       mutt_free_color (tmp->fg, tmp->bg);
+       tmp->fg = fg;
+       tmp->bg = bg;
+       attr |= mutt_alloc_color (fg, bg);
+      }
+      else
+       attr |= (tmp->pair & ~A_BOLD);
+    }
+#endif /* HAVE_COLOR */
+    tmp->pair = attr;
+  }
+  else
+  {
+    int r;
+    char buf[STRING];
+
+    tmp = mutt_new_color_line ();
+    if (is_index) 
+    {
+      int i;
+
+      strfcpy(buf, NONULL(s), sizeof(buf));
+      mutt_check_simple (buf, sizeof (buf), NONULL(SimpleSearch));
+      if((tmp->color_pattern = mutt_pattern_comp (buf, M_FULL_MSG, err)) == NULL)
+      {
+       mutt_free_color_line(&tmp, 1);
+       return -1;
+      }
+      /* force re-caching of index colors */
+      for (i = 0; Context && i < Context->msgcount; i++)
+       Context->hdrs[i]->pair = 0;
+    }
+    else if ((r = REGCOMP (&tmp->rx, s, (sensitive ? mutt_which_case (s) : REG_ICASE))) != 0)
+    {
+      regerror (r, &tmp->rx, err->data, err->dsize);
+      mutt_free_color_line(&tmp, 1);
+      return (-1);
+    }
+    tmp->next = *top;
+    tmp->pattern = safe_strdup (s);
+#ifdef HAVE_COLOR
+    if(fg != -1 && bg != -1)
+    {
+      tmp->fg = fg;
+      tmp->bg = bg;
+      attr |= mutt_alloc_color (fg, bg);
+    }
+#endif
+    tmp->pair = attr;
+    *top = tmp;
+  }
+
+  return 0;
+}
+
+static int
+parse_object(BUFFER *buf, BUFFER *s, int *o, int *ql, BUFFER *err)
+{
+  int q_level = 0;
+  char *eptr;
+  
+  if(!MoreArgs(s))
+  {
+    strfcpy(err->data, _("Missing arguments."), err->dsize);
+    return -1;
+  }
+  
+  mutt_extract_token(buf, s, 0);
+  if(!mutt_strncmp(buf->data, "quoted", 6))
+  {
+    if(buf->data[6])
+    {
+      *ql = strtol(buf->data + 6, &eptr, 10);
+      if(*eptr || q_level < 0)
+      {
+       snprintf(err->data, err->dsize, _("%s: no such object"), buf->data);
+       return -1;
+      }
+    }
+    else
+      *ql = 0;
+    
+    *o = MT_COLOR_QUOTED;
+  }
+  else if ((*o = mutt_getvaluebyname (buf->data, Fields)) == -1)
+  {
+    snprintf (err->data, err->dsize, _("%s: no such object"), buf->data);
+    return (-1);
+  }
+
+  return 0;
+}
+
+typedef int (*parser_callback_t)(BUFFER *, BUFFER *, int *, int *, int *, BUFFER *);
+
+#ifdef HAVE_COLOR
+
+static int
+parse_color_pair(BUFFER *buf, BUFFER *s, int *fg, int *bg, int *attr, BUFFER *err)
+{
+  if (! MoreArgs (s))
+  {
+    strfcpy (err->data, _("color: too few arguments"), err->dsize);
+    return (-1);
+  }
+
+  mutt_extract_token (buf, s, 0);
+
+  if (parse_color_name (buf->data, fg, attr, A_BOLD, err) != 0)
+    return (-1);
+
+  if (! MoreArgs (s))
+  {
+    strfcpy (err->data, _("color: too few arguments"), err->dsize);
+    return (-1);
+  }
+  
+  mutt_extract_token (buf, s, 0);
+
+  if (parse_color_name (buf->data, bg, attr, A_BLINK, err) != 0)
+    return (-1);
+  
+  return 0;
+}
+
+#endif
+
+static int
+parse_attr_spec(BUFFER *buf, BUFFER *s, int *fg, int *bg, int *attr, BUFFER *err)
+{
+  
+  if(fg) *fg = -1; 
+  if(bg) *bg = -1;
+
+  if (! MoreArgs (s))
+  {
+    strfcpy (err->data, _("mono: too few arguments"), err->dsize);
+    return (-1);
+  }
+
+  mutt_extract_token (buf, s, 0);
+
+  if (ascii_strcasecmp ("bold", buf->data) == 0)
+    *attr |= A_BOLD;
+  else if (ascii_strcasecmp ("underline", buf->data) == 0)
+    *attr |= A_UNDERLINE;
+  else if (ascii_strcasecmp ("none", buf->data) == 0)
+    *attr = A_NORMAL;
+  else if (ascii_strcasecmp ("reverse", buf->data) == 0)
+    *attr |= A_REVERSE;
+  else if (ascii_strcasecmp ("standout", buf->data) == 0)
+    *attr |= A_STANDOUT;
+  else if (ascii_strcasecmp ("normal", buf->data) == 0)
+    *attr = A_NORMAL; /* needs use = instead of |= to clear other bits */
+  else
+  {
+    snprintf (err->data, err->dsize, _("%s: no such attribute"), buf->data);
+    return (-1);
+  }
+  
+  return 0;
+}
+
+static int fgbgattr_to_color(int fg, int bg, int attr)
+{
+#ifdef HAVE_COLOR
+  if(fg != -1 && bg != -1)
+    return attr | mutt_alloc_color(fg, bg);
+  else
+#endif
+    return attr;
+}
+
+/* usage: color <object> <fg> <bg> [ <regexp> ] 
+ *       mono  <object> <attr> [ <regexp> ]
+ */
+
+static int 
+_mutt_parse_color (BUFFER *buf, BUFFER *s, BUFFER *err, 
+                  parser_callback_t callback, short dry_run)
+{
+  int object = 0, attr = 0, fg = 0, bg = 0, q_level = 0;
+  int r = 0;
+
+  if(parse_object(buf, s, &object, &q_level, err) == -1)
+    return -1;
+
+  if(callback(buf, s, &fg, &bg, &attr, err) == -1)
+    return -1;
+
+  /* extract a regular expression if needed */
+  
+  if (object == MT_COLOR_HEADER || object == MT_COLOR_BODY || object == MT_COLOR_INDEX)
+  {
+    if (!MoreArgs (s))
+    {
+      strfcpy (err->data, _("too few arguments"), err->dsize);
+      return (-1);
+    }
+
+    mutt_extract_token (buf, s, 0);
+  }
+   
+  if (MoreArgs (s))
+  {
+    strfcpy (err->data, _("too many arguments"), err->dsize);
+    return (-1);
+  }
+  
+  /* dry run? */
+  
+  if(dry_run) return 0;
+
+  
+#ifdef HAVE_COLOR
+# ifdef HAVE_USE_DEFAULT_COLORS
+  if (!option (OPTNOCURSES) && has_colors()
+    /* delay use_default_colors() until needed, since it initializes things */
+    && (fg == COLOR_DEFAULT || bg == COLOR_DEFAULT)
+    && use_default_colors () != OK)
+  {
+    strfcpy (err->data, _("default colors not supported"), err->dsize);
+    return (-1);
+  }
+# endif /* HAVE_USE_DEFAULT_COLORS */
+#endif
+  
+  if (object == MT_COLOR_HEADER)
+    r = add_pattern (&ColorHdrList, buf->data, 0, fg, bg, attr, err,0);
+  else if (object == MT_COLOR_BODY)
+    r = add_pattern (&ColorBodyList, buf->data, 1, fg, bg, attr, err, 0);
+  else if (object == MT_COLOR_INDEX)
+  {
+    r = add_pattern (&ColorIndexList, buf->data, 1, fg, bg, attr, err, 1);
+    set_option (OPTFORCEREDRAWINDEX);
+  }
+  else if (object == MT_COLOR_QUOTED)
+  {
+    if (q_level >= ColorQuoteSize)
+    {
+      safe_realloc (&ColorQuote, (ColorQuoteSize += 2) * sizeof (int));
+      ColorQuote[ColorQuoteSize-2] = ColorDefs[MT_COLOR_QUOTED];
+      ColorQuote[ColorQuoteSize-1] = ColorDefs[MT_COLOR_QUOTED];
+    }
+    if (q_level >= ColorQuoteUsed)
+      ColorQuoteUsed = q_level + 1;
+    if (q_level == 0)
+    {
+      ColorDefs[MT_COLOR_QUOTED] = fgbgattr_to_color(fg, bg, attr);
+      
+      ColorQuote[0] = ColorDefs[MT_COLOR_QUOTED];
+      for (q_level = 1; q_level < ColorQuoteUsed; q_level++)
+      {
+       if (ColorQuote[q_level] == A_NORMAL)
+         ColorQuote[q_level] = ColorDefs[MT_COLOR_QUOTED];
+      }
+    }
+    else
+      ColorQuote[q_level] = fgbgattr_to_color(fg, bg, attr);
+  }
+  else
+    ColorDefs[object] = fgbgattr_to_color(fg, bg, attr);
+
+#ifdef HAVE_COLOR
+# ifdef HAVE_BKGDSET
+  if (object == MT_COLOR_NORMAL && !option (OPTNOCURSES) && has_colors())
+    BKGDSET (MT_COLOR_NORMAL);
+# endif
+#endif
+
+  return (r);
+}
+
+#ifdef HAVE_COLOR
+
+int mutt_parse_color(BUFFER *buff, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  int dry_run = 0;
+  
+  if(option(OPTNOCURSES) || !has_colors())
+    dry_run = 1;
+  
+  return _mutt_parse_color(buff, s, err, parse_color_pair, dry_run);
+}
+
+#endif
+
+int mutt_parse_mono(BUFFER *buff, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  int dry_run = 0;
+  
+#ifdef HAVE_COLOR
+  if(option(OPTNOCURSES) || has_colors())
+    dry_run = 1;
+#else
+  if(option(OPTNOCURSES))
+    dry_run = 1;
+#endif
+
+  return _mutt_parse_color(buff, s, err, parse_attr_spec, dry_run);
+}
+
diff --git a/commands.c b/commands.c
new file mode 100644 (file)
index 0000000..5a8862e
--- /dev/null
@@ -0,0 +1,1104 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "mutt_menu.h"
+#include "mime.h"
+#include "sort.h"
+#include "mailbox.h"
+#include "copy.h"
+#include "mx.h"
+#include "pager.h"
+#include "mutt_crypt.h"
+#include "mutt_idna.h"
+#include "rfc1524.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#ifdef USE_IMAP
+#include "imap.h"
+#endif
+
+#ifdef BUFFY_SIZE
+#include "buffy.h"
+#endif
+
+#include <errno.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/wait.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <utime.h>
+
+extern char *ReleaseDate;
+
+/* The folder the user last saved to.  Used by ci_save_message() */
+static char LastSaveFolder[_POSIX_PATH_MAX] = "";
+
+int mutt_display_message (HEADER *cur)
+{
+  char tempfile[_POSIX_PATH_MAX], buf[LONG_STRING];
+  int rc = 0, builtin = 0;
+  int cmflags = M_CM_DECODE | M_CM_DISPLAY | M_CM_CHARCONV;
+  FILE *fpout = NULL;
+  FILE *fpfilterout = NULL;
+  pid_t filterpid = -1;
+  int res;
+
+  snprintf (buf, sizeof (buf), "%s/%s", TYPE (cur->content),
+           cur->content->subtype);
+
+  mutt_parse_mime_message (Context, cur);
+  mutt_message_hook (Context, cur, M_MESSAGEHOOK);
+
+  /* see if crytpo is needed for this message.  if so, we should exit curses */
+  if (WithCrypto && cur->security)
+  {
+    if (cur->security & ENCRYPT)
+    {
+      if (cur->security & APPLICATION_SMIME)
+       crypt_smime_getkeys (cur->env);
+      if(!crypt_valid_passphrase(cur->security))
+       return 0;
+
+      cmflags |= M_CM_VERIFY;
+    }
+    else if (cur->security & SIGN)
+    {
+      /* find out whether or not the verify signature */
+      if (query_quadoption (OPT_VERIFYSIG, _("Verify PGP signature?")) == M_YES)
+      {
+       cmflags |= M_CM_VERIFY;
+      }
+    }
+  }
+  
+  if (cmflags & M_CM_VERIFY || cur->security & ENCRYPT)
+  {
+    if (cur->security & APPLICATION_PGP)
+    {
+      if (cur->env->from)
+        crypt_pgp_invoke_getkeys (cur->env->from);
+      
+      crypt_invoke_message (APPLICATION_PGP);
+    }
+
+    if (cur->security & APPLICATION_SMIME)
+      crypt_invoke_message (APPLICATION_SMIME);
+  }
+
+
+  mutt_mktemp (tempfile);
+  if ((fpout = safe_fopen (tempfile, "w")) == NULL)
+  {
+    mutt_error _("Could not create temporary file!");
+    return (0);
+  }
+
+  if (DisplayFilter && *DisplayFilter) 
+  {
+    fpfilterout = fpout;
+    fpout = NULL;
+    /* mutt_endwin (NULL); */
+    filterpid = mutt_create_filter_fd (DisplayFilter, &fpout, NULL, NULL,
+                                      -1, fileno(fpfilterout), -1);
+    if (filterpid < 0)
+    {
+      mutt_error (_("Cannot create display filter"));
+      safe_fclose (&fpfilterout);
+      unlink (tempfile);
+      return 0;
+    }
+  }
+
+  if (!Pager || mutt_strcmp (Pager, "builtin") == 0)
+    builtin = 1;
+  else
+  {
+    mutt_make_string (buf, sizeof (buf), NONULL(PagerFmt), Context, cur);
+    fputs (buf, fpout);
+    fputs ("\n\n", fpout);
+  }
+
+  res = mutt_copy_message (fpout, Context, cur, cmflags,
+               (option (OPTWEED) ? (CH_WEED | CH_REORDER) : 0) | CH_DECODE | CH_FROM);
+  if ((safe_fclose (&fpout) != 0 && errno != EPIPE) || res == -1)
+  {
+    mutt_error (_("Could not copy message"));
+    if (fpfilterout != NULL)
+    {
+      mutt_wait_filter (filterpid);
+      safe_fclose (&fpfilterout);
+    }
+    mutt_unlink (tempfile);
+    return 0;
+  }
+
+  if (fpfilterout != NULL && mutt_wait_filter (filterpid) != 0)
+    mutt_any_key_to_continue (NULL);
+
+  safe_fclose (&fpfilterout);  /* XXX - check result? */
+
+  
+  if (WithCrypto)
+  {
+    /* update crypto information for this message */
+    cur->security |= crypt_query (cur->content);
+  
+    /* Remove color cache for this message, in case there
+       are color patterns for both ~g and ~V */
+    cur->pair = 0;
+  }
+
+  if (builtin)
+  {
+    pager_t info;
+
+    if (WithCrypto 
+        && (cur->security & APPLICATION_SMIME) && (cmflags & M_CM_VERIFY))
+    {
+      if (cur->security & GOODSIGN)
+      {
+       if (!crypt_smime_verify_sender(cur))
+         mutt_message ( _("S/MIME signature successfully verified."));
+       else
+         mutt_error ( _("S/MIME certificate owner does not match sender."));
+      }
+      else if (cur->security & PARTSIGN)
+       mutt_message (_("Warning: Part of this message has not been signed."));
+      else if (cur->security & SIGN || cur->security & BADSIGN)
+       mutt_error ( _("S/MIME signature could NOT be verified."));
+    }
+
+    if (WithCrypto 
+        && (cur->security & APPLICATION_PGP) && (cmflags & M_CM_VERIFY))
+    {
+      if (cur->security & GOODSIGN)
+       mutt_message (_("PGP signature successfully verified."));
+      else if (cur->security & PARTSIGN)
+       mutt_message (_("Warning: Part of this message has not been signed."));
+      else
+       mutt_message (_("PGP signature could NOT be verified."));
+    }
+
+    /* Invoke the builtin pager */
+    memset (&info, 0, sizeof (pager_t));
+    info.hdr = cur;
+    info.ctx = Context;
+    rc = mutt_pager (NULL, tempfile, M_PAGER_MESSAGE, &info);
+  }
+  else
+  {
+    int r;
+
+    mutt_endwin (NULL);
+    snprintf (buf, sizeof (buf), "%s %s", NONULL(Pager), tempfile);
+    if ((r = mutt_system (buf)) == -1)
+      mutt_error (_("Error running \"%s\"!"), buf);
+    unlink (tempfile);
+    keypad (stdscr, TRUE);
+    if (r != -1)
+      mutt_set_flag (Context, cur, M_READ, 1);
+    if (r != -1 && option (OPTPROMPTAFTER))
+    {
+      mutt_ungetch (mutt_any_key_to_continue _("Command: "), 0);
+      rc = km_dokey (MENU_PAGER);
+    }
+    else
+      rc = 0;
+  }
+
+  return rc;
+}
+
+void ci_bounce_message (HEADER *h, int *redraw)
+{
+  char prompt[SHORT_STRING];
+  char buf[HUGE_STRING] = { 0 };
+  ADDRESS *adr = NULL;
+  char *err = NULL;
+  int rc;
+
+  if(h)
+    strfcpy(prompt, _("Bounce message to: "), sizeof(prompt));
+  else
+    strfcpy(prompt, _("Bounce tagged messages to: "), sizeof(prompt));
+  
+  rc = mutt_get_field (prompt, buf, sizeof (buf), M_ALIAS);
+
+  if (option (OPTNEEDREDRAW))
+  {
+    unset_option (OPTNEEDREDRAW);
+    *redraw = REDRAW_FULL;
+  }
+
+  if (rc || !buf[0])
+    return;
+
+  if (!(adr = rfc822_parse_adrlist (adr, buf)))
+  {
+    mutt_error _("Error parsing address!");
+    return;
+  }
+
+  adr = mutt_expand_aliases (adr);
+
+  if (mutt_addrlist_to_idna (adr, &err) < 0)
+  {
+    mutt_error (_("Bad IDN: '%s'"), err);
+    FREE (&err);
+    rfc822_free_address (&adr);
+    return;
+  }
+
+  buf[0] = 0;
+  rfc822_write_address (buf, sizeof (buf), adr, 1);
+
+#define extra_space (15 + 7 + 2)
+  snprintf (prompt, sizeof (prompt),
+           (h ? _("Bounce message to %s") : _("Bounce messages to %s")), buf);
+
+  if (mutt_strwidth (prompt) > COLS - extra_space)
+  {
+    mutt_format_string (prompt, sizeof (prompt),
+                       0, COLS-extra_space, 0, 0,
+                       prompt, sizeof (prompt), 0);
+    strncat (prompt, "...?", sizeof (prompt));
+  }
+  else
+    strncat (prompt, "?", sizeof (prompt));
+
+  if (query_quadoption (OPT_BOUNCE, prompt) != M_YES)
+  {
+    rfc822_free_address (&adr);
+    CLEARLINE (LINES - 1);
+    mutt_message (h ? _("Message not bounced.") : _("Messages not bounced."));
+    return;
+  }
+
+  CLEARLINE (LINES - 1);
+  
+  rc = mutt_bounce_message (NULL, h, adr);
+  rfc822_free_address (&adr);
+  /* If no error, or background, display message. */
+  if ((rc == 0) || (rc == S_BKG))
+    mutt_message (h ? _("Message bounced.") : _("Messages bounced."));
+}
+
+static void pipe_set_flags (int decode, int print, int *cmflags, int *chflags)
+{
+  if (decode)
+  {
+    *cmflags |= M_CM_DECODE | M_CM_CHARCONV;
+    *chflags |= CH_DECODE | CH_REORDER;
+    
+    if (option (OPTWEED))
+    {
+      *chflags |= CH_WEED;
+      *cmflags |= M_CM_WEED;
+    }
+  }
+  
+  if (print)
+    *cmflags |= M_CM_PRINTING;
+  
+}
+
+void pipe_msg (HEADER *h, FILE *fp, int decode, int print)
+{
+  int cmflags = 0;
+  int chflags = CH_FROM;
+  
+  pipe_set_flags (decode, print, &cmflags, &chflags);
+
+  if (WithCrypto && decode && h->security & ENCRYPT)
+  {
+    if(!crypt_valid_passphrase(h->security))
+      return;
+    endwin ();
+  }
+
+  if (decode)
+    mutt_parse_mime_message (Context, h);
+
+  mutt_copy_message (fp, Context, h, cmflags, chflags);
+}
+
+
+/* the following code is shared between printing and piping */
+
+static int _mutt_pipe_message (HEADER *h, char *cmd,
+                              int decode,
+                              int print,
+                              int split,
+                              char *sep)
+{
+  
+  int i, rc = 0;
+  pid_t thepid;
+  FILE *fpout;
+  
+/*   mutt_endwin (NULL); 
+
+     is this really needed here ? 
+     it makes the screen flicker on pgp and s/mime messages,
+     before asking for a passphrase...
+                                     Oliver Ehli */
+  if (h)
+  {
+
+    mutt_message_hook (Context, h, M_MESSAGEHOOK);
+
+    if (WithCrypto && decode)
+    {
+      mutt_parse_mime_message (Context, h);
+      if(h->security & ENCRYPT && !crypt_valid_passphrase(h->security))
+       return 1;
+    }
+    mutt_endwin (NULL);
+
+    if ((thepid = mutt_create_filter (cmd, &fpout, NULL, NULL)) < 0)
+    {
+      mutt_perror _("Can't create filter process");
+      return 1;
+    }
+      
+    pipe_msg (h, fpout, decode, print);
+    fclose (fpout);
+    rc = mutt_wait_filter (thepid);
+  }
+  else
+  { /* handle tagged messages */
+
+    if (WithCrypto && decode)
+    {
+      for (i = 0; i < Context->vcount; i++)
+       if(Context->hdrs[Context->v2r[i]]->tagged)
+       {
+         mutt_message_hook (Context, Context->hdrs[Context->v2r[i]], M_MESSAGEHOOK);
+         mutt_parse_mime_message(Context, Context->hdrs[Context->v2r[i]]);
+         if (Context->hdrs[Context->v2r[i]]->security & ENCRYPT &&
+             !crypt_valid_passphrase(Context->hdrs[Context->v2r[i]]->security))
+           return 1;
+       }
+    }
+    
+    if (split)
+    {
+      for (i = 0; i < Context->vcount; i++)
+      {
+        if (Context->hdrs[Context->v2r[i]]->tagged)
+        {
+         mutt_message_hook (Context, Context->hdrs[Context->v2r[i]], M_MESSAGEHOOK);
+         mutt_endwin (NULL);
+         if ((thepid = mutt_create_filter (cmd, &fpout, NULL, NULL)) < 0)
+         {
+           mutt_perror _("Can't create filter process");
+           return 1;
+         }
+          pipe_msg (Context->hdrs[Context->v2r[i]], fpout, decode, print);
+          /* add the message separator */
+          if (sep)  fputs (sep, fpout);
+         safe_fclose (&fpout);
+         if (mutt_wait_filter (thepid) != 0)
+           rc = 1;
+        }
+      }
+    }
+    else
+    {
+      mutt_endwin (NULL);
+      if ((thepid = mutt_create_filter (cmd, &fpout, NULL, NULL)) < 0)
+      {
+       mutt_perror _("Can't create filter process");
+       return 1;
+      }
+      for (i = 0; i < Context->vcount; i++)
+      {
+        if (Context->hdrs[Context->v2r[i]]->tagged)
+        {
+         mutt_message_hook (Context, Context->hdrs[Context->v2r[i]], M_MESSAGEHOOK);
+          pipe_msg (Context->hdrs[Context->v2r[i]], fpout, decode, print);
+          /* add the message separator */
+          if (sep) fputs (sep, fpout);
+        }
+      }
+      safe_fclose (&fpout);
+      if (mutt_wait_filter (thepid) != 0)
+       rc = 1;
+    }
+  }
+
+  if (rc || option (OPTWAITKEY))
+    mutt_any_key_to_continue (NULL);
+  return rc;
+}
+
+void mutt_pipe_message (HEADER *h)
+{
+  char buffer[LONG_STRING];
+
+  buffer[0] = 0;
+  if (mutt_get_field (_("Pipe to command: "), buffer, sizeof (buffer), M_CMD)
+      != 0 || !buffer[0])
+    return;
+
+  mutt_expand_path (buffer, sizeof (buffer));
+  _mutt_pipe_message (h, buffer,
+                     option (OPTPIPEDECODE),
+                     0, 
+                     option (OPTPIPESPLIT),
+                     PipeSep);
+}
+
+void mutt_print_message (HEADER *h)
+{
+
+  if (quadoption (OPT_PRINT) && (!PrintCmd || !*PrintCmd))
+  {
+    mutt_message (_("No printing command has been defined."));
+    return;
+  }
+  
+  if (query_quadoption (OPT_PRINT,
+                       h ? _("Print message?") : _("Print tagged messages?"))
+                       != M_YES)
+    return;
+
+  if (_mutt_pipe_message (h, PrintCmd,
+                         option (OPTPRINTDECODE),
+                         1,
+                         option (OPTPRINTSPLIT),
+                         "\f") == 0)
+    mutt_message (h ? _("Message printed") : _("Messages printed"));
+  else
+    mutt_message (h ? _("Message could not be printed") :
+                 _("Messages could not be printed"));
+}
+
+
+int mutt_select_sort (int reverse)
+{
+  int method = Sort; /* save the current method in case of abort */
+
+  switch (mutt_multi_choice (reverse ?
+                            _("Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: ") :
+                            _("Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "),
+                            _("dfrsotuzc")))
+  {
+  case -1: /* abort - don't resort */
+    return -1;
+
+  case 1: /* (d)ate */
+    Sort = SORT_DATE;
+    break;
+
+  case 2: /* (f)rm */
+    Sort = SORT_FROM;
+    break;
+  
+  case 3: /* (r)ecv */
+    Sort = SORT_RECEIVED;
+    break;
+  
+  case 4: /* (s)ubj */
+    Sort = SORT_SUBJECT;
+    break;
+  
+  case 5: /* t(o) */
+    Sort = SORT_TO;
+    break;
+  
+  case 6: /* (t)hread */
+    Sort = SORT_THREADS;
+    break;
+  
+  case 7: /* (u)nsort */
+    Sort = SORT_ORDER;
+    break;
+  
+  case 8: /* si(z)e */
+    Sort = SORT_SIZE;
+    break;
+  
+  case 9: /* s(c)ore */ 
+    Sort = SORT_SCORE;
+    break;
+  }
+  if (reverse)
+    Sort |= SORT_REVERSE;
+
+  return (Sort != method ? 0 : -1); /* no need to resort if it's the same */
+}
+
+/* invoke a command in a subshell */
+void mutt_shell_escape (void)
+{
+  char buf[LONG_STRING];
+
+  buf[0] = 0;
+  if (mutt_get_field (_("Shell command: "), buf, sizeof (buf), M_CMD) == 0)
+  {
+    if (!buf[0] && Shell)
+      strfcpy (buf, Shell, sizeof (buf));
+    if(buf[0])
+    {
+      CLEARLINE (LINES-1);
+      mutt_endwin (NULL);
+      fflush (stdout);
+      if (mutt_system (buf) != 0 || option (OPTWAITKEY))
+       mutt_any_key_to_continue (NULL);
+    }
+  }
+}
+
+/* enter a mutt command */
+void mutt_enter_command (void)
+{
+  BUFFER err, token;
+  char buffer[LONG_STRING], errbuf[SHORT_STRING];
+  int r;
+
+  buffer[0] = 0;
+  if (mutt_get_field (":", buffer, sizeof (buffer), M_COMMAND) != 0 || !buffer[0])
+    return;
+  err.data = errbuf;
+  err.dsize = sizeof (errbuf);
+  memset (&token, 0, sizeof (token));
+  r = mutt_parse_rc_line (buffer, &token, &err);
+  FREE (&token.data);
+  if (errbuf[0])
+  {
+    /* since errbuf could potentially contain printf() sequences in it,
+       we must call mutt_error() in this fashion so that vsprintf()
+       doesn't expect more arguments that we passed */
+    if (r == 0)
+      mutt_message ("%s", errbuf);
+    else
+      mutt_error ("%s", errbuf);
+  }
+}
+
+void mutt_display_address (ENVELOPE *env)
+{
+  char *pfx = NULL;
+  char buf[SHORT_STRING];
+  ADDRESS *adr = NULL;
+
+  adr = mutt_get_address (env, &pfx);
+
+  if (!adr) return;
+  
+  /* 
+   * Note: We don't convert IDNA to local representation this time.
+   * That is intentional, so the user has an opportunity to copy &
+   * paste the on-the-wire form of the address to other, IDN-unable
+   * software. 
+   */
+  
+  buf[0] = 0;
+  rfc822_write_address (buf, sizeof (buf), adr, 0);
+  mutt_message ("%s: %s", pfx, buf);
+}
+
+static void set_copy_flags (HEADER *hdr, int decode, int decrypt, int *cmflags, int *chflags)
+{
+  *cmflags = 0;
+  *chflags = CH_UPDATE_LEN;
+  
+  if (WithCrypto && !decode && decrypt && (hdr->security & ENCRYPT))
+  {
+    if ((WithCrypto & APPLICATION_PGP)
+        && mutt_is_multipart_encrypted(hdr->content))
+    {
+      *chflags = CH_NONEWLINE | CH_XMIT | CH_MIME;
+      *cmflags = M_CM_DECODE_PGP;
+    }
+    else if ((WithCrypto & APPLICATION_PGP)
+              && mutt_is_application_pgp (hdr->content) & ENCRYPT)
+      decode = 1;
+    else if ((WithCrypto & APPLICATION_SMIME)
+             && mutt_is_application_smime(hdr->content) & ENCRYPT)
+    {
+      *chflags = CH_NONEWLINE | CH_XMIT | CH_MIME;
+      *cmflags = M_CM_DECODE_SMIME;
+    }
+  }
+
+  if (decode)
+  {
+    *chflags = CH_XMIT | CH_MIME | CH_TXTPLAIN;
+    *cmflags = M_CM_DECODE | M_CM_CHARCONV;
+
+    if (!decrypt)      /* If decode doesn't kick in for decrypt, */
+    {
+      *chflags |= CH_DECODE;   /* then decode RFC 2047 headers, */
+
+      if (option (OPTWEED))
+      {
+       *chflags |= CH_WEED;    /* and respect $weed. */
+       *cmflags |= M_CM_WEED;
+      }
+    }
+  }
+}
+
+void _mutt_save_message (HEADER *h, CONTEXT *ctx, int delete, int decode, int decrypt)
+{
+  int cmflags, chflags;
+  
+  set_copy_flags (h, decode, decrypt, &cmflags, &chflags);
+
+  if (decode || decrypt)
+    mutt_parse_mime_message (Context, h);
+
+  if (mutt_append_message (ctx, Context, h, cmflags, chflags) == 0)
+  {
+    if (delete)
+    {
+      mutt_set_flag (Context, h, M_DELETE, 1);
+      if (option (OPTDELETEUNTAG))
+       mutt_set_flag (Context, h, M_TAG, 0);
+    }
+    mutt_set_flag (Context, h, M_APPENDED, 1);
+  }
+}
+
+/* returns 0 if the copy/save was successful, or -1 on error/abort */
+int mutt_save_message (HEADER *h, int delete, 
+                      int decode, int decrypt, int *redraw)
+{
+  int i, need_buffy_cleanup;
+  int need_passphrase = 0, app=0;
+  char prompt[SHORT_STRING], buf[_POSIX_PATH_MAX];
+  CONTEXT ctx;
+  struct stat st;
+#ifdef BUFFY_SIZE
+  BUFFY *tmp = NULL;
+#else
+  struct utimbuf ut;
+#endif
+
+  *redraw = 0;
+
+  
+  snprintf (prompt, sizeof (prompt),
+           decode  ? (delete ? _("Decode-save%s to mailbox") :
+                      _("Decode-copy%s to mailbox")) :
+           (decrypt ? (delete ? _("Decrypt-save%s to mailbox") :
+                       _("Decrypt-copy%s to mailbox")) :
+            (delete ? _("Save%s to mailbox") : _("Copy%s to mailbox"))),
+           h ? "" : _(" tagged"));
+  
+
+  if (h)
+  {
+    if (WithCrypto)
+    {
+      need_passphrase = h->security & ENCRYPT;
+      app = h->security;
+    }
+    mutt_message_hook (Context, h, M_MESSAGEHOOK);
+    mutt_default_save (buf, sizeof (buf), h);
+  }
+  else
+  {
+    /* look for the first tagged message */
+
+    for (i = 0; i < Context->vcount; i++)
+    {
+      if (Context->hdrs[Context->v2r[i]]->tagged)
+      {
+       h = Context->hdrs[Context->v2r[i]];
+       break;
+      }
+    }
+
+
+    if (h)
+    {
+      mutt_message_hook (Context, h, M_MESSAGEHOOK);
+      mutt_default_save (buf, sizeof (buf), h);
+      if (WithCrypto)
+      {
+        need_passphrase = h->security & ENCRYPT;
+        app = h->security;
+      }
+      h = NULL;
+    }
+  }
+
+  mutt_pretty_mailbox (buf);
+  if (mutt_enter_fname (prompt, buf, sizeof (buf), redraw, 0) == -1)
+    return (-1);
+
+  if (*redraw != REDRAW_FULL)
+  {
+    if (!h)
+      *redraw = REDRAW_INDEX | REDRAW_STATUS;
+    else
+      *redraw = REDRAW_STATUS;
+  }
+
+  if (!buf[0])
+    return (-1);
+  /* This is an undocumented feature of ELM pointed out to me by Felix von
+   * Leitner <leitner@prz.fu-berlin.de>
+   */
+  if (mutt_strcmp (buf, ".") == 0)
+    strfcpy (buf, LastSaveFolder, sizeof (buf));
+  else
+    strfcpy (LastSaveFolder, buf, sizeof (LastSaveFolder));
+
+  mutt_expand_path (buf, sizeof (buf));
+
+  /* check to make sure that this file is really the one the user wants */
+  if (mutt_save_confirm (buf, &st) != 0)
+    return -1;
+
+  if (WithCrypto && need_passphrase && (decode || decrypt)
+      && !crypt_valid_passphrase(app))
+    return -1;
+  
+  mutt_message (_("Copying to %s..."), buf);
+  
+#ifdef USE_IMAP
+  if (Context->magic == M_IMAP && 
+      !(decode || decrypt) && mx_is_imap (buf))
+  {
+    switch (imap_copy_messages (Context, h, buf, delete))
+    {
+      /* success */
+      case 0: mutt_clear_error (); return 0;
+      /* non-fatal error: fall through to fetch/append */
+      case 1: break;
+      /* fatal error, abort */
+      case -1: return -1;
+    }
+  }
+#endif
+
+  if (mx_open_mailbox (buf, M_APPEND, &ctx) != NULL)
+  {
+    if (h)
+      _mutt_save_message(h, &ctx, delete, decode, decrypt);
+    else
+    {
+      for (i = 0; i < Context->vcount; i++)
+      {
+       if (Context->hdrs[Context->v2r[i]]->tagged)
+       {
+         mutt_message_hook (Context, Context->hdrs[Context->v2r[i]], M_MESSAGEHOOK);
+         _mutt_save_message(Context->hdrs[Context->v2r[i]],
+                            &ctx, delete, decode, decrypt);
+       }
+      }
+    }
+
+    need_buffy_cleanup = (ctx.magic == M_MBOX || ctx.magic == M_MMDF);
+
+    mx_close_mailbox (&ctx, NULL);
+
+    if (need_buffy_cleanup)
+    {
+#ifdef BUFFY_SIZE
+      tmp = mutt_find_mailbox (buf);
+      if (tmp && !tmp->new)
+       mutt_update_mailbox (tmp);
+#else
+      /* fix up the times so buffy won't get confused */
+      if (st.st_mtime > st.st_atime)
+      {
+       ut.actime = st.st_atime;
+       ut.modtime = time (NULL);
+       utime (buf, &ut); 
+      }
+      else
+       utime (buf, NULL);
+#endif
+    }
+
+    mutt_clear_error ();
+    return (0);
+  }
+  
+  return -1;
+}
+
+int mutt_update_list_file (char *filename, char *section, char *key, char *line)
+{
+  FILE *ifp;
+  FILE *ofp;
+  char buf[HUGE_STRING];
+  char oldfile[_POSIX_PATH_MAX];
+  char *c;
+  int ext = 0, done = 0, r = 0;
+
+  snprintf (oldfile, sizeof(oldfile), "%s.bak", filename);
+  dprint (1, (debugfile, "Renaming %s to %s\n", filename, oldfile));
+
+  /* if file not exist, create it */
+  if ((ifp = safe_fopen (filename, "a")))
+    fclose (ifp);
+  if (_mutt_rename_file (filename, oldfile, 1))
+  {
+    mutt_perror _("Unable to create backup file");
+    return (-1);
+  }
+  dprint (1, (debugfile, "Opening %s\n", oldfile));
+  if (!(ifp = safe_fopen (oldfile, "r")))
+  {
+    mutt_perror _("Unable to open backup file for reading");
+    return (-1);
+  }
+  dprint (1, (debugfile, "Opening %s\n", filename));
+  if (!(ofp = fopen (filename, "w")))
+  {
+    fclose (ifp);
+    mutt_perror _("Unable to open new file for writing");
+    return (-1);
+  }
+  if (mx_lock_file (filename, fileno (ofp), 1, 0, 1))
+  {
+    fclose (ofp);
+    fclose (ifp);
+    mutt_error (_("Unable to lock %s, old file saved as %s"), filename, oldfile);
+    return (-1);
+  }
+
+  if (section)
+  {
+    while (r != EOF && !done && fgets (buf, sizeof (buf), ifp))
+    {
+      r = fputs (buf, ofp);
+      c = buf;
+      while (*c && *c != '\n') c++;
+      c[0] = 0;        /* strip EOL */
+      if (!strncmp (buf, "#: ", 3) && !mutt_strcasecmp (buf+3, section))
+       done++;
+    }
+    if (r != EOF && !done)
+    {
+      snprintf (buf, sizeof(buf), "#: %s\n", section);
+      r = fputs (buf, ofp);
+    }
+    done = 0;
+  }
+
+  while (r != EOF && fgets (buf, sizeof (buf), ifp))
+  {
+    if (ext)
+    {
+      c = buf;
+      while (*c && (*c != '\r') && (*c != '\n')) c++;
+      c--;
+      if (*c != '\\') ext = 0;
+    }
+    else if ((section && !strncmp (buf, "#: ", 3)))
+    {
+      if (!done && line)
+      {
+       fputs (line, ofp);
+       fputc ('\n', ofp);
+      }
+      r = fputs (buf, ofp);
+      done++;
+      break;
+    }
+    else if (key && !strncmp (buf, key, strlen(key)) &&
+           (!*key || buf[strlen(key)] == ' '))
+    {
+      c = buf;
+      ext = 0;
+      while (*c && (*c != '\r') && (*c != '\n')) c++;
+      c--;
+      if (*c == '\\') ext = 1;
+      if (!done && line)
+      {
+       r = fputs (line, ofp);
+       if (*key)
+         r = fputc ('\n', ofp);
+       done++;
+      }
+    }
+    else
+    {
+      r = fputs (buf, ofp);
+    }
+  }
+
+  while (r != EOF && fgets (buf, sizeof (buf), ifp))
+    r = fputs (buf, ofp);
+
+  /* If there wasn't a line to replace, put it on the end of the file */
+  if (r != EOF && !done && line)
+  {
+    fputs (line, ofp);
+    r = fputc ('\n', ofp);
+  }
+  mx_unlock_file (filename, fileno (ofp), 0);
+  fclose (ofp);
+  fclose (ifp);
+  if (r != EOF)
+  {
+    unlink (oldfile);
+    return 0;
+  }
+  unlink (filename);
+  mutt_error (_("Cannot write new %s, old file saved as %s"), filename,
+       oldfile);
+  return (-1);
+}
+
+
+void mutt_version (void)
+{
+  mutt_message ("Mutt %s (%s)", MUTT_VERSION, ReleaseDate);
+}
+
+void mutt_edit_content_type (HEADER *h, BODY *b, FILE *fp)
+{
+  char buf[LONG_STRING];
+  char obuf[LONG_STRING];
+  char tmp[STRING];
+  PARAMETER *p;
+
+  char charset[STRING];
+  char *cp;
+
+  short charset_changed = 0;
+  short type_changed = 0;
+  
+  cp = mutt_get_parameter ("charset", b->parameter);
+  strfcpy (charset, NONULL (cp), sizeof (charset));
+
+  snprintf (buf, sizeof (buf), "%s/%s", TYPE (b), b->subtype);
+  strfcpy (obuf, buf, sizeof (obuf));
+  if (b->parameter)
+  {
+    size_t l;
+    
+    for (p = b->parameter; p; p = p->next)
+    {
+      l = strlen (buf);
+
+      rfc822_cat (tmp, sizeof (tmp), p->value, MimeSpecials);
+      snprintf (buf + l, sizeof (buf) - l, "; %s=%s", p->attribute, tmp);
+    }
+  }
+  
+  if (mutt_get_field ("Content-Type: ", buf, sizeof (buf), 0) != 0 ||
+      buf[0] == 0)
+    return;
+  
+  /* clean up previous junk */
+  mutt_free_parameter (&b->parameter);
+  FREE (&b->subtype);
+  
+  mutt_parse_content_type (buf, b);
+
+  
+  snprintf (tmp, sizeof (tmp), "%s/%s", TYPE (b), NONULL (b->subtype));
+  type_changed = ascii_strcasecmp (tmp, obuf);
+  charset_changed = ascii_strcasecmp (charset, mutt_get_parameter ("charset", b->parameter));
+
+  /* if in send mode, check for conversion - current setting is default. */
+
+  if (!h && b->type == TYPETEXT && charset_changed)
+  {
+    int r;
+    snprintf (tmp, sizeof (tmp), _("Convert to %s upon sending?"),
+             mutt_get_parameter ("charset", b->parameter));
+    if ((r = mutt_yesorno (tmp, !b->noconv)) != -1)
+      b->noconv = (r == M_NO);
+  }
+
+  /* inform the user */
+  
+  if (type_changed)
+    mutt_message (_("Content-Type changed to %s."), tmp);
+  else if (b->type == TYPETEXT && charset_changed)
+    mutt_message (_("Character set changed to %s; %s."),
+                 mutt_get_parameter ("charset", b->parameter),
+                 b->noconv ? _("not converting") : _("converting"));
+
+  b->force_charset |= charset_changed ? 1 : 0;
+
+  if (!is_multipart (b) && b->parts)
+    mutt_free_body (&b->parts);
+  if (!mutt_is_message_type (b->type, b->subtype) && b->hdr)
+  {
+    b->hdr->content = NULL;
+    mutt_free_header (&b->hdr);
+  }
+
+  if (fp && (is_multipart (b) || mutt_is_message_type (b->type, b->subtype)))
+    mutt_parse_part (fp, b);
+  
+  if (WithCrypto && h)
+  {
+    if (h->content == b)
+      h->security  = 0;
+
+    h->security |= crypt_query (b);
+  }
+}
+
+
+static int _mutt_check_traditional_pgp (HEADER *h, int *redraw)
+{
+  MESSAGE *msg;
+  int rv = 0;
+  
+  mutt_parse_mime_message (Context, h);
+  if ((msg = mx_open_message (Context, h->msgno)) == NULL)
+    return 0;
+  if (crypt_pgp_check_traditional (msg->fp, h->content, 0))
+  {
+    h->security = crypt_query (h->content);
+    *redraw |= REDRAW_FULL;
+    rv = 1;
+  }
+  
+  mx_close_message (&msg);
+  return rv;
+}
+
+int mutt_check_traditional_pgp (HEADER *h, int *redraw)
+{
+  int i;
+  int rv = 0;
+  if (h)
+    rv = _mutt_check_traditional_pgp (h, redraw);
+  else
+  {
+    for (i = 0; i < Context->vcount; i++)
+      if (Context->hdrs[Context->v2r[i]]->tagged)
+       rv = _mutt_check_traditional_pgp (Context->hdrs[Context->v2r[i]], redraw)
+         || rv;
+  }
+  return rv;
+}
+
+
diff --git a/compile.sh b/compile.sh
new file mode 100755 (executable)
index 0000000..6a8a49d
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+# ./configure --enable-pgp --enable-smime --with-regex --enable-pop --enable-imap --enable-nntp --enable-imap-edit-threads --with-ssl --enable-hcache --with-libesmtp && make
+./configure --enable-pgp --enable-smime --with-regex --enable-pop --enable-imap --enable-nntp --enable-imap-edit-threads --with-ssl --enable-hcache && make
diff --git a/complete.c b/complete.c
new file mode 100644 (file)
index 0000000..58e0529
--- /dev/null
@@ -0,0 +1,263 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#ifdef USE_IMAP
+#include "mailbox.h"
+#include "imap.h"
+#endif
+#ifdef USE_NNTP
+#include "nntp.h"
+#endif
+
+#include <dirent.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+/* given a partial pathname, this routine fills in as much of the rest of the
+ * path as is unique.
+ *
+ * return 0 if ok, -1 if no matches
+ */
+int mutt_complete (char *s, size_t slen)
+{
+  char *p;
+  DIR *dirp = NULL;
+  struct dirent *de;
+  int i ,init=0;
+  size_t len;
+  char dirpart[_POSIX_PATH_MAX], exp_dirpart[_POSIX_PATH_MAX];
+  char filepart[_POSIX_PATH_MAX];
+#ifdef USE_IMAP
+  char imap_path[LONG_STRING];
+#endif
+
+  dprint (2, (debugfile, "mutt_complete: completing %s\n", s));
+
+#ifdef USE_NNTP
+  if (option (OPTNEWS))
+  {
+    LIST *l = CurrentNewsSrv->list;
+
+    strfcpy (filepart, s, sizeof (filepart));
+
+    /*
+     * special case to handle when there is no filepart yet.
+     * find the first subscribed newsgroup
+     */
+    if ((len = mutt_strlen (filepart)) == 0)
+    {
+      for (; l; l = l->next)
+      {
+       NNTP_DATA *data = (NNTP_DATA *)l->data;
+
+       if (data && data->subscribed)
+       {
+         strfcpy (filepart, data->group, sizeof (filepart));
+         init++;
+         l = l->next;
+         break;
+       }
+      }
+    }
+
+    for (; l; l = l->next)
+    {
+      NNTP_DATA *data = (NNTP_DATA *)l->data;
+
+      if (data && data->subscribed &&
+         mutt_strncmp (data->group, filepart, len) == 0)
+      {
+       if (init)
+       {
+         for (i = 0; filepart[i] && data->group[i]; i++)
+         {
+           if (filepart[i] != data->group[i])
+           {
+             filepart[i] = 0;
+             break;
+           }
+         }
+         filepart[i] = 0;
+       }
+       else
+       {
+         strfcpy (filepart, data->group, sizeof (filepart));
+         init = 1;
+       }
+      }
+    }
+
+    strcpy (s, filepart);
+
+    return (init ? 0 : -1);
+  }
+#endif
+
+#ifdef USE_IMAP
+  /* we can use '/' as a delimiter, imap_complete rewrites it */
+  if (*s == '=' || *s == '+' || *s == '!')
+  {
+    if (*s == '!')
+      p = NONULL (Spoolfile);
+    else
+      p = NONULL (Maildir);
+
+    mutt_concat_path (imap_path, p, s+1, sizeof (imap_path));
+  }
+  else
+    strfcpy (imap_path, s, sizeof(imap_path));
+
+  if (mx_is_imap (imap_path))
+    return imap_complete (s, slen, imap_path);
+#endif
+  
+  if (*s == '=' || *s == '+' || *s == '!')
+  {
+    dirpart[0] = *s;
+    dirpart[1] = 0;
+    if (*s == '!')
+      strfcpy (exp_dirpart, NONULL (Spoolfile), sizeof (exp_dirpart));
+    else
+      strfcpy (exp_dirpart, NONULL (Maildir), sizeof (exp_dirpart));
+    if ((p = strrchr (s, '/')))
+    {
+      char buf[_POSIX_PATH_MAX];
+      *p++ = 0;
+      mutt_concat_path (buf, exp_dirpart, s + 1, sizeof (buf));
+      strfcpy (exp_dirpart, buf, sizeof (exp_dirpart));
+      snprintf (buf, sizeof (buf), "%s%s/", dirpart, s+1);
+      strfcpy (dirpart, buf, sizeof (dirpart));
+      strfcpy (filepart, p, sizeof (filepart));
+    }
+    else
+      strfcpy (filepart, s + 1, sizeof (filepart));
+    dirp = opendir (exp_dirpart);
+  }
+  else
+  {
+    if ((p = strrchr (s, '/')))
+    {
+      if (p == s) /* absolute path */
+      {
+       p = s + 1;
+       strfcpy (dirpart, "/", sizeof (dirpart));
+       exp_dirpart[0] = 0;
+       strfcpy (filepart, p, sizeof (filepart));
+       dirp = opendir (dirpart);
+      }
+      else
+      {
+       *p = 0;
+       len = (size_t)(p - s);
+       strncpy (dirpart, s, len);
+       dirpart[len]=0;
+       p++;
+       strfcpy (filepart, p, sizeof (filepart));
+       strfcpy (exp_dirpart, dirpart, sizeof (exp_dirpart));
+       mutt_expand_path (exp_dirpart, sizeof (exp_dirpart));
+       dirp = opendir (exp_dirpart);
+      }
+    }
+    else
+    {
+      /* no directory name, so assume current directory. */
+      dirpart[0] = 0;
+      strfcpy (filepart, s, sizeof (filepart));
+      dirp = opendir (".");
+    }
+  }
+
+  if (dirp == NULL)
+  {
+    dprint (1, (debugfile, "mutt_complete(): %s: %s (errno %d).\n", exp_dirpart, strerror (errno), errno));
+    return (-1);
+  }
+
+  /*
+   * special case to handle when there is no filepart yet.  find the first
+   * file/directory which is not ``.'' or ``..''
+   */
+  if ((len = mutt_strlen (filepart)) == 0)
+  {
+    while ((de = readdir (dirp)) != NULL)
+    {
+      if (mutt_strcmp (".", de->d_name) != 0 && mutt_strcmp ("..", de->d_name) != 0)
+      {
+       strfcpy (filepart, de->d_name, sizeof (filepart));
+       init++;
+       break;
+      }
+    }
+  }
+
+  while ((de = readdir (dirp)) != NULL)
+  {
+    if (mutt_strncmp (de->d_name, filepart, len) == 0)
+    {
+      if (init)
+      {
+       for (i=0; filepart[i] && de->d_name[i]; i++)
+       {
+         if (filepart[i] != de->d_name[i])
+         {
+           filepart[i] = 0;
+           break;
+         }
+       }
+       filepart[i] = 0;
+      }
+      else
+      {
+       char buf[_POSIX_PATH_MAX];
+       struct stat st;
+
+       strfcpy (filepart, de->d_name, sizeof(filepart));
+
+       /* check to see if it is a directory */
+       if (dirpart[0])
+       {
+         strfcpy (buf, exp_dirpart, sizeof (buf));
+         strfcpy (buf + strlen (buf), "/", sizeof (buf) - strlen (buf));
+       }
+       else
+         buf[0] = 0;
+       strfcpy (buf + strlen (buf), filepart, sizeof (buf) - strlen (buf));
+       if (stat (buf, &st) != -1 && (st.st_mode & S_IFDIR))
+         strfcpy (filepart + strlen (filepart), "/",
+                  sizeof (filepart) - strlen (filepart));
+       init = 1;
+      }
+    }
+  }
+  closedir (dirp);
+
+  if (dirpart[0])
+  {
+    strfcpy (s, dirpart, slen);
+    if (mutt_strcmp ("/", dirpart) != 0 && dirpart[0] != '=' && dirpart[0] != '+')
+      strfcpy (s + strlen (s), "/", slen - strlen (s));
+    strfcpy (s + strlen (s), filepart, slen - strlen (s));
+  }
+  else
+    strfcpy (s, filepart, slen);
+
+  return (init ? 0 : -1);
+}
diff --git a/compose.c b/compose.c
new file mode 100644 (file)
index 0000000..6711dd9
--- /dev/null
+++ b/compose.c
@@ -0,0 +1,1551 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "mutt_idna.h"
+#include "mutt_menu.h"
+#include "rfc1524.h"
+#include "mime.h"
+#include "attach.h"
+#include "mapping.h"
+#include "mailbox.h"
+#include "sort.h"
+#include "charset.h"
+#include "mx.h"
+
+#ifdef MIXMASTER
+#include "remailer.h"
+#endif
+  
+#ifdef USE_NNTP
+#include "nntp.h"
+#endif
+
+#include <errno.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+static const char* There_are_no_attachments = N_("There are no attachments.");
+
+#define CHECK_COUNT if (idxlen == 0) { mutt_error _(There_are_no_attachments); break; }
+
+
+
+enum
+{
+  HDR_FROM  = 1,
+  HDR_TO,
+  HDR_CC,
+  HDR_BCC,
+  HDR_SUBJECT,
+  HDR_REPLYTO,
+  HDR_FCC,
+
+
+  HDR_CRYPT,
+  HDR_CRYPTINFO,
+
+#ifdef USE_NNTP
+  HDR_NEWSGROUPS,
+  HDR_FOLLOWUPTO,
+  HDR_XCOMMENTTO,
+#endif
+
+  HDR_ATTACH  = (HDR_FCC + 5) /* where to start printing the attachments */
+};
+
+#define HDR_XOFFSET 14
+#define TITLE_FMT "%14s" /* Used for Prompts, which are ASCII */
+#define W (COLS - HDR_XOFFSET)
+
+static char *Prompts[] =
+{
+  "From: ",
+  "To: ",
+  "Cc: ",
+  "Bcc: ",
+  "Subject: ",
+  "Reply-To: ",
+  "Fcc: "
+#ifdef USE_NNTP
+#ifdef MIXMASTER
+  ,""
+#endif
+  ,""
+  ,""
+  ,"Newsgroups: "
+  ,"Followup-To: "
+  ,"X-Comment-To: "
+#endif
+};
+
+static struct mapping_t ComposeHelp[] = {
+  { N_("Send"),    OP_COMPOSE_SEND_MESSAGE },
+  { N_("Abort"),   OP_EXIT },
+  { "To",      OP_COMPOSE_EDIT_TO },
+  { "CC",      OP_COMPOSE_EDIT_CC },
+  { "Subj",    OP_COMPOSE_EDIT_SUBJECT },
+  { N_("Attach file"),  OP_COMPOSE_ATTACH_FILE },
+  { N_("Descrip"), OP_COMPOSE_EDIT_DESCRIPTION },
+  { N_("Help"),    OP_HELP },
+  { NULL }
+};
+
+#ifdef USE_NNTP
+static struct mapping_t ComposeNewsHelp[] = {
+  { N_("Send"),    OP_COMPOSE_SEND_MESSAGE },
+  { N_("Abort"),   OP_EXIT },
+  { "Newsgroups",  OP_COMPOSE_EDIT_NEWSGROUPS },
+  { "Subj",        OP_COMPOSE_EDIT_SUBJECT },
+  { N_("Attach file"),  OP_COMPOSE_ATTACH_FILE },
+  { N_("Descrip"), OP_COMPOSE_EDIT_DESCRIPTION },
+  { N_("Help"),    OP_HELP },
+  { NULL }
+};
+#endif
+
+static void snd_entry (char *b, size_t blen, MUTTMENU *menu, int num)
+{
+    mutt_FormatString (b, blen, NONULL (AttachFormat), mutt_attach_fmt,
+           (unsigned long)(((ATTACHPTR **) menu->data)[num]),
+           M_FORMAT_STAT_FILE | M_FORMAT_ARROWCURSOR);
+}
+
+
+
+#include "mutt_crypt.h"
+
+static void redraw_crypt_lines (HEADER *msg)
+{
+  int off = 0;
+
+  if ((WithCrypto & APPLICATION_PGP) && (WithCrypto & APPLICATION_SMIME))
+  {     
+    if (!msg->security)
+      mvaddstr (HDR_CRYPT, 0,     "    Security: ");
+    else if (msg->security & APPLICATION_SMIME)
+      mvaddstr (HDR_CRYPT, 0,     "      S/MIME: ");
+    else if (msg->security & APPLICATION_PGP)
+      mvaddstr (HDR_CRYPT, 0,     "         PGP: ");
+  }
+  else if ((WithCrypto & APPLICATION_SMIME))
+    mvaddstr (HDR_CRYPT, 0,     "      S/MIME: ");
+  else if ((WithCrypto & APPLICATION_PGP))
+    mvaddstr (HDR_CRYPT, 0,     "         PGP: ");
+  else
+    return;
+
+  if ((msg->security & (ENCRYPT | SIGN)) == (ENCRYPT | SIGN))
+    addstr (_("Sign, Encrypt"));
+  else if (msg->security & ENCRYPT)
+    addstr (_("Encrypt"));
+  else if (msg->security & SIGN)
+    addstr (_("Sign"));
+  else
+    addstr (_("Clear"));
+  clrtoeol ();
+
+  move (HDR_CRYPTINFO, 0);
+  clrtoeol ();
+  if ((WithCrypto & APPLICATION_PGP)
+      && msg->security & APPLICATION_PGP  && msg->security & SIGN)
+    printw ("%s%s", _(" sign as: "), PgpSignAs ? PgpSignAs : _("<default>"));
+
+  if ((WithCrypto & APPLICATION_SMIME)
+      && msg->security & APPLICATION_SMIME  && msg->security & SIGN) {
+      printw ("%s%s", _(" sign as: "), SmimeDefaultKey ? SmimeDefaultKey : _("<default>"));
+  }
+
+  if ((WithCrypto & APPLICATION_SMIME)
+       && msg->security & APPLICATION_SMIME  && (msg->security & ENCRYPT)) {
+      mvprintw (HDR_CRYPTINFO, 40, "%s%s", _("Encrypt with: "),
+               NONULL(SmimeCryptAlg));
+      off = 20;
+  }
+}
+
+
+
+static int pgp_send_menu (HEADER *msg, int *redraw)
+{
+  pgp_key_t p;
+  char input_signas[SHORT_STRING];
+
+  if (!(WithCrypto & APPLICATION_PGP))
+    return msg->security;
+
+  switch (mutt_multi_choice (_("PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "),
+                            _("esabf")))
+  {
+  case 1: /* (e)ncrypt */
+    msg->security |= ENCRYPT;
+    break;
+
+  case 2: /* (s)ign */
+    msg->security |= SIGN;
+    break;
+
+  case 3: /* sign (a)s */
+    unset_option(OPTPGPCHECKTRUST);
+
+    if ((p = crypt_pgp_ask_for_key (_("Sign as: "), NULL,
+                                    KEYFLAG_CANSIGN, PGP_PUBRING)))
+    {
+      snprintf (input_signas, sizeof (input_signas), "0x%s",
+                crypt_pgp_keyid (p));
+      mutt_str_replace (&PgpSignAs, input_signas);
+      crypt_pgp_free_key (&p);
+      
+      msg->security |= SIGN;
+       
+      crypt_pgp_void_passphrase ();  /* probably need a different passphrase */
+    }
+    else
+    {
+      msg->security &= ~SIGN;
+    }
+
+    *redraw = REDRAW_FULL;
+    break;
+
+  case 4: /* (b)oth */
+    msg->security = ENCRYPT | SIGN;
+    break;
+
+  case 5: /* (f)orget it */
+    msg->security = 0;
+    break;
+  }
+
+  if (msg->security && msg->security != APPLICATION_PGP)
+    msg->security |= APPLICATION_PGP;
+  else
+    msg->security = 0;
+
+  if(*redraw)
+      redraw_crypt_lines (msg);
+  return (msg->security);
+}
+
+
+
+static int smime_send_menu (HEADER *msg, int *redraw)
+{
+  char *p;
+
+  if (!(WithCrypto & APPLICATION_SMIME))
+    return msg->security;
+
+  switch (mutt_multi_choice (_("S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "),
+                            _("eswabf")))
+  {
+  case 1: /* (e)ncrypt */
+    msg->security |= ENCRYPT;
+    break;
+
+  case 3: /* encrypt (w)ith */
+    msg->security |= ENCRYPT;
+    switch (mutt_multi_choice (_("1: DES, 2: Triple-DES, 3: RC2-40,"
+                                " 4: RC2-64, 5: RC2-128, or (f)orget it? "),
+                              _("12345f"))) {
+    case 1:
+       mutt_str_replace (&SmimeCryptAlg, "des");
+       break;
+    case 2:
+       mutt_str_replace (&SmimeCryptAlg, "des3");
+       break;
+    case 3:
+       mutt_str_replace (&SmimeCryptAlg, "rc2-40");
+       break;
+    case 4:
+       mutt_str_replace (&SmimeCryptAlg, "rc2-64");
+       break;
+    case 5:
+       mutt_str_replace (&SmimeCryptAlg, "rc2-128");
+       break;
+    case 6: /* forget it */
+       break;
+    }
+    break;
+
+  case 2: /* (s)ign */
+      
+    if(!SmimeDefaultKey)
+       mutt_message("Can\'t sign: No key specified. use sign(as).");
+    else
+       msg->security |= SIGN;
+    break;
+
+  case 4: /* sign (a)s */
+
+    if ((p = crypt_smime_ask_for_key (_("Sign as: "), NULL, 0))) {
+      p[mutt_strlen (p)-1] = '\0';
+      mutt_str_replace (&SmimeDefaultKey, p);
+       
+      msg->security |= SIGN;
+
+      /* probably need a different passphrase */
+      crypt_smime_void_passphrase ();
+    }
+    else
+      msg->security &= ~SIGN;
+
+    *redraw = REDRAW_FULL;
+    break;
+
+  case 5: /* (b)oth */
+    msg->security = ENCRYPT | SIGN;
+    break;
+
+  case 6: /* (f)orget it */
+    msg->security = 0;
+    break;
+  }
+
+  if (msg->security && msg->security != APPLICATION_SMIME)
+    msg->security |= APPLICATION_SMIME;
+  else
+    msg->security = 0;
+
+  if(*redraw)
+      redraw_crypt_lines (msg);
+  return (msg->security);
+}
+
+
+#ifdef MIXMASTER
+
+static void redraw_mix_line (LIST *chain)
+{
+  int c;
+  char *t;
+
+  mvaddstr (HDR_MIX, 0,     "     Mix: ");
+
+  if (!chain)
+  {
+    addstr ("<no chain defined>");
+    clrtoeol ();
+    return;
+  }
+  
+  for (c = 12; chain; chain = chain->next)
+  {
+    t = chain->data;
+    if (t && t[0] == '0' && t[1] == '\0')
+      t = "<random>";
+    
+    if (c + mutt_strlen (t) + 2 >= COLS)
+      break;
+
+    addstr (NONULL(t));
+    if (chain->next)
+      addstr (", ");
+
+    c += mutt_strlen (t) + 2;
+  }
+}
+#endif /* MIXMASTER */
+
+static int
+check_attachments(ATTACHPTR **idx, short idxlen)
+{
+  int i, r;
+  struct stat st;
+  char pretty[_POSIX_PATH_MAX], msg[_POSIX_PATH_MAX + SHORT_STRING];
+
+  for (i = 0; i < idxlen; i++)
+  {
+    strfcpy(pretty, idx[i]->content->filename, sizeof(pretty));
+    if(stat(idx[i]->content->filename, &st) != 0)
+    {
+      mutt_pretty_mailbox(pretty);
+      mutt_error(_("%s [#%d] no longer exists!"),
+                pretty, i+1);
+      return -1;
+    }
+    
+    if(idx[i]->content->stamp < st.st_mtime)
+    {
+      mutt_pretty_mailbox(pretty);
+      snprintf(msg, sizeof(msg), _("%s [#%d] modified. Update encoding?"),
+              pretty, i+1);
+      
+      if((r = mutt_yesorno(msg, M_YES)) == M_YES)
+       mutt_update_encoding(idx[i]->content);
+      else if(r == -1)
+       return -1;
+    }
+  }
+
+  return 0;
+}
+
+static void draw_envelope_addr (int line, ADDRESS *addr)
+{
+  char buf[STRING];
+
+  buf[0] = 0;
+  rfc822_write_address (buf, sizeof (buf), addr, 1);
+  mvprintw (line, 0, TITLE_FMT, Prompts[line - 1]);
+  mutt_paddstr (W, buf);
+}
+
+static void draw_envelope (HEADER *msg, char *fcc)
+{
+  draw_envelope_addr (HDR_FROM, msg->env->from);
+#ifdef USE_NNTP
+  if (!option (OPTNEWSSEND))
+  {
+#endif
+  draw_envelope_addr (HDR_TO, msg->env->to);
+  draw_envelope_addr (HDR_CC, msg->env->cc);
+  draw_envelope_addr (HDR_BCC, msg->env->bcc);
+#ifdef USE_NNTP
+  }
+  else
+  {
+    mvprintw (HDR_TO, 0, TITLE_FMT , Prompts[HDR_NEWSGROUPS - 1]);
+    mutt_paddstr (W, NONULL (msg->env->newsgroups));
+    mvprintw (HDR_CC, 0, TITLE_FMT , Prompts[HDR_FOLLOWUPTO - 1]);
+    mutt_paddstr (W, NONULL (msg->env->followup_to));
+    if (option (OPTXCOMMENTTO))
+    {
+      mvprintw (HDR_BCC, 0, TITLE_FMT , Prompts[HDR_XCOMMENTTO - 1]);
+      mutt_paddstr (W, NONULL (msg->env->x_comment_to));
+    }
+  }
+#endif
+  mvprintw (HDR_SUBJECT, 0, TITLE_FMT, Prompts[HDR_SUBJECT - 1]);
+  mutt_paddstr (W, NONULL (msg->env->subject));
+  draw_envelope_addr (HDR_REPLYTO, msg->env->reply_to);
+  mvprintw (HDR_FCC, 0, TITLE_FMT, Prompts[HDR_FCC - 1]);
+  mutt_paddstr (W, fcc);
+
+  if (WithCrypto)
+    redraw_crypt_lines (msg);
+
+#ifdef MIXMASTER
+  redraw_mix_line (msg->chain);
+#endif
+
+  SETCOLOR (MT_COLOR_STATUS);
+  mvaddstr (HDR_ATTACH - 1, 0, _("-- Attachments"));
+  BKGDSET (MT_COLOR_STATUS);
+  clrtoeol ();
+
+  BKGDSET (MT_COLOR_NORMAL);
+  SETCOLOR (MT_COLOR_NORMAL);
+}
+
+static int edit_address_list (int line, ADDRESS **addr)
+{
+  char buf[HUGE_STRING] = ""; /* needs to be large for alias expansion */
+  char *err = NULL;
+  
+  mutt_addrlist_to_local (*addr);
+  rfc822_write_address (buf, sizeof (buf), *addr, 0);
+  if (mutt_get_field (Prompts[line - 1], buf, sizeof (buf), M_ALIAS) == 0)
+  {
+    rfc822_free_address (addr);
+    *addr = mutt_parse_adrlist (*addr, buf);
+    *addr = mutt_expand_aliases (*addr);
+  }
+
+  if (option (OPTNEEDREDRAW))
+  {
+    unset_option (OPTNEEDREDRAW);
+    return (REDRAW_FULL);
+  }
+
+  if (mutt_addrlist_to_idna (*addr, &err) != 0)
+  {
+    mutt_error (_("Warning: '%s' is a bad IDN."), err);
+    mutt_refresh();
+    FREE (&err);
+  }
+
+  /* redraw the expanded list so the user can see the result */
+  buf[0] = 0;
+  rfc822_write_address (buf, sizeof (buf), *addr, 1);
+  move (line, HDR_XOFFSET);
+  mutt_paddstr (W, buf);
+  
+  return 0;
+}
+
+static int delete_attachment (MUTTMENU *menu, short *idxlen, int x)
+{
+  ATTACHPTR **idx = (ATTACHPTR **) menu->data;
+  int y;
+
+  menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
+
+  if (x == 0 && menu->max == 1)
+  {
+    mutt_error _("You may not delete the only attachment.");
+    idx[x]->content->tagged = 0;
+    return (-1);
+  }
+
+  for (y = 0; y < *idxlen; y++)
+  {
+    if (idx[y]->content->next == idx[x]->content)
+    {
+      idx[y]->content->next = idx[x]->content->next;
+      break;
+    }
+  }
+
+  idx[x]->content->next = NULL;
+  idx[x]->content->parts = NULL;
+  mutt_free_body (&(idx[x]->content));
+  FREE (&idx[x]->tree);
+  FREE (&idx[x]);
+  for (; x < *idxlen - 1; x++)
+    idx[x] = idx[x+1];
+  menu->max = --(*idxlen);
+  
+  return (0);
+}
+
+static void update_idx (MUTTMENU *menu, ATTACHPTR **idx, short idxlen)
+{
+  idx[idxlen]->level = (idxlen > 0) ? idx[idxlen-1]->level : 0;
+  if (idxlen)
+    idx[idxlen - 1]->content->next = idx[idxlen]->content;
+  idx[idxlen]->content->aptr = idx[idxlen];
+  menu->current = idxlen++;
+  mutt_update_tree (idx, idxlen);
+  menu->max = idxlen;
+  return;
+}
+
+
+/* 
+ * cum_attachs_size: Cumulative Attachments Size
+ *
+ * Returns the total number of bytes used by the attachments in the
+ * attachment list _after_ content-transfer-encodings have been
+ * applied.
+ * 
+ */
+
+static unsigned long cum_attachs_size (MUTTMENU *menu)
+{
+  size_t s;
+  unsigned short i;
+  ATTACHPTR **idx = menu->data;
+  CONTENT *info;
+  BODY *b;
+  
+  for (i = 0, s = 0; i < menu->max; i++)
+  {
+    b = idx[i]->content;
+
+    if (!b->content)
+      b->content = mutt_get_content_info (b->filename, b);
+
+    if ((info = b->content))
+    {
+      switch (b->encoding)
+      {
+       case ENCQUOTEDPRINTABLE:
+         s += 3 * (info->lobin + info->hibin) + info->ascii + info->crlf;
+         break;
+       case ENCBASE64:
+         s += (4 * (info->lobin + info->hibin + info->ascii + info->crlf)) / 3;
+         break;
+       default:
+         s += info->lobin + info->hibin + info->ascii + info->crlf;
+         break;
+      }
+    }
+  }
+
+  return s;
+}
+
+/* prototype for use below */
+void compose_status_line (char *buf, size_t buflen, MUTTMENU *menu, 
+      const char *p);
+
+/*
+ * compose_format_str()
+ *
+ * %a = total number of attachments 
+ * %h = hostname  [option]
+ * %l = approx. length of current message (in bytes) 
+ * %v = Mutt version 
+ *
+ * This function is similar to status_format_str().  Look at that function for
+ * help when modifying this function.
+ */
+
+static const char *
+compose_format_str (char *buf, size_t buflen, char op, const char *src,
+                  const char *prefix, const char *ifstring,
+                  const char *elsestring,
+                  unsigned long data, format_flag flags)
+{
+  char fmt[SHORT_STRING], tmp[SHORT_STRING];
+  int optional = (flags & M_FORMAT_OPTIONAL);
+  MUTTMENU *menu = (MUTTMENU *) data;
+
+  *buf = 0;
+  switch (op)
+  {
+    case 'a': /* total number of attachments */
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (buf, buflen, fmt, menu->max);
+      break;
+
+    case 'h':  /* hostname */
+      snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+      snprintf (buf, buflen, fmt, NONULL(Hostname));
+      break;
+
+    case 'l': /* approx length of current message in bytes */
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       mutt_pretty_size (tmp, sizeof (tmp), menu ? cum_attachs_size(menu) : 0);
+       snprintf (buf, buflen, fmt, tmp);
+      break;
+
+    case 'v':
+      snprintf (fmt, sizeof (fmt), "Mutt %%s");
+      snprintf (buf, buflen, fmt, MUTT_VERSION);
+      break;
+
+    case 0:
+      *buf = 0;
+      return (src);
+
+    default:
+      snprintf (buf, buflen, "%%%s%c", prefix, op);
+      break;
+  }
+
+  if (optional)
+    compose_status_line (buf, buflen, menu, ifstring);
+  else if (flags & M_FORMAT_OPTIONAL)
+    compose_status_line (buf, buflen, menu, elsestring);
+
+  return (src);
+}
+
+void compose_status_line (char *buf, size_t buflen, MUTTMENU *menu, 
+      const char *p)
+{
+  mutt_FormatString (buf, buflen, p, compose_format_str, 
+        (unsigned long) menu, 0);
+}
+
+
+/* return values:
+ *
+ * 1   message should be postponed
+ * 0   normal exit
+ * -1  abort message
+ */
+int mutt_compose_menu (HEADER *msg,   /* structure for new message */
+                   char *fcc,     /* where to save a copy of the message */
+                   size_t fcclen,
+                   HEADER *cur)   /* current message */
+{
+  char helpstr[SHORT_STRING];
+  char buf[LONG_STRING];
+  char fname[_POSIX_PATH_MAX];
+  MUTTMENU *menu;
+  ATTACHPTR **idx = NULL;
+  short idxlen = 0;
+  short idxmax = 0;
+  int i, close = 0;
+  int r = -1;          /* return value */
+  int op = 0;
+  int loop = 1;
+  int fccSet = 0;      /* has the user edited the Fcc: field ? */
+  CONTEXT *ctx = NULL, *this = NULL;
+  /* Sort, SortAux could be changed in mutt_index_menu() */
+  int oldSort, oldSortAux;
+  struct stat st;
+#ifdef USE_NNTP
+  int news = 0;               /* is it a news article ? */
+
+  if (option (OPTNEWSSEND))
+    news++;
+#endif
+
+  mutt_attach_init (msg->content);
+  idx = mutt_gen_attach_list (msg->content, -1, idx, &idxlen, &idxmax, 0, 1);
+
+  menu = mutt_new_menu ();
+  menu->menu = MENU_COMPOSE;
+  menu->offset = HDR_ATTACH;
+  menu->max = idxlen;
+  menu->make_entry = snd_entry;
+  menu->tag = mutt_tag_attach;
+  menu->data = idx;
+#ifdef USE_NNTP
+  if (news)
+  menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_COMPOSE, ComposeNewsHelp);
+  else
+#endif
+  menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_COMPOSE, ComposeHelp);
+  
+  while (loop)
+  {
+#ifdef USE_NNTP
+    unset_option (OPTNEWS);    /* for any case */
+#endif
+    switch (op = mutt_menuLoop (menu))
+    {
+      case OP_REDRAW:
+       draw_envelope (msg, fcc);
+       menu->offset = HDR_ATTACH;
+       menu->pagelen = LINES - HDR_ATTACH - 2;
+       break;
+      case OP_COMPOSE_EDIT_FROM:
+       menu->redraw = edit_address_list (HDR_FROM, &msg->env->from);
+       break;
+      case OP_COMPOSE_EDIT_TO:
+#ifdef USE_NNTP
+       if (!news)
+#endif
+         menu->redraw = edit_address_list (HDR_TO, &msg->env->to);
+       break;
+      case OP_COMPOSE_EDIT_BCC:
+#ifdef USE_NNTP
+       if (!news)
+#endif
+         menu->redraw = edit_address_list (HDR_BCC, &msg->env->bcc);
+       break;
+      case OP_COMPOSE_EDIT_CC:
+#ifdef USE_NNTP
+       if (!news)
+#endif
+         menu->redraw = edit_address_list (HDR_CC, &msg->env->cc);
+       break;
+#ifdef USE_NNTP
+      case OP_COMPOSE_EDIT_NEWSGROUPS:
+       if (news)
+       {
+         if (msg->env->newsgroups)
+           strfcpy (buf, msg->env->newsgroups, sizeof (buf));
+         else
+           buf[0] = 0;
+         if (mutt_get_field ("Newsgroups: ", buf, sizeof (buf), 0) == 0 && buf[0])
+         {
+           FREE (&msg->env->newsgroups);
+           mutt_remove_trailing_ws (buf);
+           msg->env->newsgroups = safe_strdup (mutt_skip_whitespace (buf));
+           move (HDR_TO, HDR_XOFFSET);
+           clrtoeol ();
+           if (msg->env->newsgroups)
+             printw ("%-*.*s", W, W, msg->env->newsgroups);
+         }
+       }
+       break;
+
+      case OP_COMPOSE_EDIT_FOLLOWUP_TO:
+       if (news)
+       {
+         buf[0] = 0;
+         if (msg->env->followup_to)
+           strfcpy (buf, msg->env->followup_to, sizeof (buf));
+         if (mutt_get_field ("Followup-To: ", buf, sizeof (buf), 0) == 0 && buf[0])
+         {
+           FREE (&msg->env->followup_to);
+           mutt_remove_trailing_ws (buf);
+           msg->env->followup_to = safe_strdup (mutt_skip_whitespace (buf));
+           move (HDR_CC, HDR_XOFFSET);
+           clrtoeol();
+           if (msg->env->followup_to)
+             printw ("%-*.*s", W, W, msg->env->followup_to);
+         }
+       }
+       break;
+
+      case OP_COMPOSE_EDIT_X_COMMENT_TO:
+       if (news && option (OPTXCOMMENTTO))
+       {
+         buf[0] = 0;
+         if (msg->env->x_comment_to)
+           strfcpy (buf, msg->env->x_comment_to, sizeof (buf));
+         if (mutt_get_field ("X-Comment-To: ", buf, sizeof (buf), 0) == 0 && buf[0])
+         {
+           FREE (&msg->env->x_comment_to);
+           msg->env->x_comment_to = safe_strdup (buf);
+           move (HDR_BCC, HDR_XOFFSET);
+           clrtoeol();
+           if (msg->env->x_comment_to)
+             printw ("%-*.*s", W, W, msg->env->x_comment_to);
+         }
+       }
+       break;
+#endif
+      case OP_COMPOSE_EDIT_SUBJECT:
+       if (msg->env->subject)
+         strfcpy (buf, msg->env->subject, sizeof (buf));
+       else
+         buf[0] = 0;
+       if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0)
+       {
+         mutt_str_replace (&msg->env->subject, buf);
+         move (HDR_SUBJECT, HDR_XOFFSET);
+         clrtoeol ();
+         if (msg->env->subject)
+           mutt_paddstr (W, msg->env->subject);
+       }
+       break;
+      case OP_COMPOSE_EDIT_REPLY_TO:
+       menu->redraw = edit_address_list (HDR_REPLYTO, &msg->env->reply_to);
+       break;
+      case OP_COMPOSE_EDIT_FCC:
+       strfcpy (buf, fcc, sizeof (buf));
+       if (mutt_get_field ("Fcc: ", buf, sizeof (buf), M_FILE | M_CLEAR) == 0)
+       {
+         strfcpy (fcc, buf, _POSIX_PATH_MAX);
+         mutt_pretty_mailbox (fcc);
+         move (HDR_FCC, HDR_XOFFSET);
+         mutt_paddstr (W, fcc);
+         fccSet = 1;
+       }
+       MAYBE_REDRAW (menu->redraw);
+       break;
+      case OP_COMPOSE_EDIT_MESSAGE:
+       if (Editor && (mutt_strcmp ("builtin", Editor) != 0) && !option (OPTEDITHDRS))
+       {
+         mutt_edit_file (Editor, msg->content->filename);
+         mutt_update_encoding (msg->content);
+         menu->redraw = REDRAW_CURRENT | REDRAW_STATUS;
+         break;
+       }
+       /* fall through */
+      case OP_COMPOSE_EDIT_HEADERS:
+       if (op == OP_COMPOSE_EDIT_HEADERS ||
+           (op == OP_COMPOSE_EDIT_MESSAGE && option (OPTEDITHDRS)))
+       {
+         char *tag = NULL, *err = NULL;
+         mutt_env_to_local (msg->env);
+         mutt_edit_headers (NONULL (Editor), msg->content->filename, msg,
+                            fcc, fcclen);
+         if (mutt_env_to_idna (msg->env, &tag, &err))
+         {
+           mutt_error (_("Bad IDN in \"%s\": '%s'"), tag, err);
+           FREE (&err);
+         }
+       }
+       else
+       {
+         /* this is grouped with OP_COMPOSE_EDIT_HEADERS because the
+            attachment list could change if the user invokes ~v to edit
+            the message with headers, in which we need to execute the
+            code below to regenerate the index array */
+         mutt_builtin_editor (msg->content->filename, msg, cur);
+       }
+       mutt_update_encoding (msg->content);
+
+       /* attachments may have been added */
+       if (idxlen && idx[idxlen - 1]->content->next)
+       {
+         for (i = 0; i < idxlen; i++)
+           FREE (&idx[i]);
+         idxlen = 0;
+         idx = mutt_gen_attach_list (msg->content, -1, idx, &idxlen, &idxmax, 0, 1);
+         menu->data = idx;
+         menu->max = idxlen;
+       }
+
+       menu->redraw = REDRAW_FULL;
+       break;
+
+
+
+      case OP_COMPOSE_ATTACH_KEY:
+        if (!(WithCrypto & APPLICATION_PGP))
+          break;       
+       if (idxlen == idxmax)
+        {
+         safe_realloc (&idx, sizeof (ATTACHPTR *) * (idxmax += 5));
+         menu->data = idx;
+       }
+       
+       idx[idxlen] = (ATTACHPTR *) safe_calloc (1, sizeof (ATTACHPTR));
+       if ((idx[idxlen]->content = crypt_pgp_make_key_attachment(NULL)) != NULL)
+       {
+         update_idx (menu, idx, idxlen++);
+         menu->redraw |= REDRAW_INDEX;
+       }
+       else
+         FREE (&idx[idxlen]);
+
+       menu->redraw |= REDRAW_STATUS;
+
+       if (option(OPTNEEDREDRAW))
+       {
+         menu->redraw = REDRAW_FULL;
+         unset_option(OPTNEEDREDRAW);
+       }
+       
+       break;
+
+
+      case OP_COMPOSE_ATTACH_FILE:
+       {
+         char *prompt, **files;
+         int error, numfiles;
+
+         fname[0] = 0;
+         prompt = _("Attach file");
+         numfiles = 0;
+         files = NULL;
+
+         if (_mutt_enter_fname (prompt, fname, sizeof (fname), &menu->redraw, 0, 1, &files, &numfiles) == -1 ||
+             *fname == '\0')
+           break;
+
+         if (idxlen + numfiles >= idxmax)
+         {
+           safe_realloc (&idx, sizeof (ATTACHPTR *) * (idxmax += 5 + numfiles));
+           menu->data = idx;
+         }
+
+         error = 0;
+         if (numfiles > 1)
+           mutt_message _("Attaching selected files...");
+         for (i = 0; i < numfiles; i++)
+         {
+           char *att = files[i];
+           idx[idxlen] = (ATTACHPTR *) safe_calloc (1, sizeof (ATTACHPTR));
+           idx[idxlen]->content = mutt_make_file_attach (att);
+           if (idx[idxlen]->content != NULL)
+             update_idx (menu, idx, idxlen++);
+           else
+           {
+             error = 1;
+             mutt_error (_("Unable to attach %s!"), att);
+             FREE (&idx[idxlen]);
+           }
+         }
+         
+         FREE (&files);
+         if (!error) mutt_clear_error ();
+
+         menu->redraw |= REDRAW_INDEX | REDRAW_STATUS;
+       }
+       break;
+
+      case OP_COMPOSE_ATTACH_MESSAGE:
+#ifdef USE_NNTP
+      case OP_COMPOSE_ATTACH_NEWS_MESSAGE:
+#endif
+       {
+         char *prompt;
+         HEADER *h;
+
+         fname[0] = 0;
+         prompt = _("Open mailbox to attach message from");
+
+#ifdef USE_NNTP
+         unset_option (OPTNEWS);
+         if (op == OP_COMPOSE_ATTACH_NEWS_MESSAGE)
+         {
+           if (!(CurrentNewsSrv = mutt_select_newsserver (NewsServer)))
+             break;
+
+           prompt = _("Open newsgroup to attach message from");
+           set_option (OPTNEWS);
+         }
+#endif
+
+         if (Context)
+#ifdef USE_NNTP
+         if ((op == OP_COMPOSE_ATTACH_MESSAGE) ^ (Context->magic == M_NNTP))
+#endif
+         {
+           strfcpy (fname, NONULL (Context->path), sizeof (fname));
+           mutt_pretty_mailbox (fname);
+         }
+
+         if (mutt_enter_fname (prompt, fname, sizeof (fname), &menu->redraw, 1) == -1 || !fname[0])
+           break;
+
+#ifdef USE_NNTP
+         if (option (OPTNEWS))
+           nntp_expand_path (fname, sizeof (fname), &CurrentNewsSrv->conn->account);
+         else
+#endif
+         mutt_expand_path (fname, sizeof (fname));
+#ifdef USE_IMAP
+          if (!mx_is_imap (fname))
+#endif
+#ifdef USE_POP
+          if (!mx_is_pop (fname))
+#endif
+#ifdef USE_NNTP
+          if (!mx_is_nntp (fname) && !option (OPTNEWS))
+#endif
+         /* check to make sure the file exists and is readable */
+         if (access (fname, R_OK) == -1)
+         {
+           mutt_perror (fname);
+           break;
+         }
+
+         menu->redraw = REDRAW_FULL;
+
+         ctx = mx_open_mailbox (fname, M_READONLY, NULL);
+         if (ctx == NULL)
+         {
+           mutt_perror (fname);
+           break;
+         }
+
+         if (!ctx->msgcount)
+         {
+           mx_close_mailbox (ctx, NULL);
+           FREE (&ctx);
+           mutt_error _("No messages in that folder.");
+           break;
+         }
+
+         this = Context; /* remember current folder and sort methods*/
+         oldSort = Sort; oldSortAux = SortAux;
+         
+         Context = ctx;
+         set_option(OPTATTACHMSG);
+         mutt_message _("Tag the messages you want to attach!");
+         close = mutt_index_menu ();
+         unset_option(OPTATTACHMSG);
+
+         if (!Context)
+         {
+           /* go back to the folder we started from */
+           Context = this;
+           /* Restore old $sort and $sort_aux */
+           Sort = oldSort;
+           SortAux = oldSortAux;
+           menu->redraw |= REDRAW_INDEX | REDRAW_STATUS;
+           break;
+         }
+
+         if (idxlen + Context->tagged >= idxmax)
+         {
+           safe_realloc (&idx, sizeof (ATTACHPTR *) * (idxmax += 5 + Context->tagged));
+           menu->data = idx;
+         }
+
+         for (i = 0; i < Context->msgcount; i++)
+         {
+           h = Context->hdrs[i];
+           if (h->tagged)
+           {
+             idx[idxlen] = (ATTACHPTR *) safe_calloc (1, sizeof (ATTACHPTR));
+             idx[idxlen]->content = mutt_make_message_attach (Context, h, 1);
+             if (idx[idxlen]->content != NULL)
+               update_idx (menu, idx, idxlen++);
+             else
+             {
+               mutt_error _("Unable to attach!");
+               FREE (&idx[idxlen]);
+             }
+           }
+         }
+         menu->redraw |= REDRAW_FULL;
+
+         if (close == OP_QUIT) 
+           mx_close_mailbox (Context, NULL);
+         else
+           mx_fastclose_mailbox (Context);
+         FREE (&Context);
+
+         /* go back to the folder we started from */
+         Context = this;
+         /* Restore old $sort and $sort_aux */
+         Sort = oldSort;
+         SortAux = oldSortAux;
+       }
+       break;
+
+      case OP_DELETE:
+       CHECK_COUNT;
+       if (delete_attachment (menu, &idxlen, menu->current) == -1)
+         break;
+       mutt_update_tree (idx, idxlen);
+       if (idxlen)
+       {
+         if (menu->current > idxlen - 1)
+           menu->current = idxlen - 1;
+       }
+       else
+         menu->current = 0;
+
+       if (menu->current == 0)
+         msg->content = idx[0]->content;
+
+        menu->redraw |= REDRAW_STATUS;
+       break;
+
+#define CURRENT idx[menu->current]->content
+      
+      case OP_COMPOSE_TOGGLE_RECODE:
+      {      
+        CHECK_COUNT;
+        if (!mutt_is_text_part (CURRENT))
+        {
+         mutt_error (_("Recoding only affects text attachments."));
+         break;
+       }
+        CURRENT->noconv = !CURRENT->noconv;
+        if (CURRENT->noconv)
+         mutt_message (_("The current attachment won't be converted."));
+        else
+         mutt_message (_("The current attachment will be converted."));
+       menu->redraw = REDRAW_CURRENT;
+        break;
+      }
+#undef CURRENT
+
+      case OP_COMPOSE_EDIT_DESCRIPTION:
+       CHECK_COUNT;
+       strfcpy (buf,
+                idx[menu->current]->content->description ?
+                idx[menu->current]->content->description : "",
+                sizeof (buf));
+       /* header names should not be translated */
+       if (mutt_get_field ("Description: ", buf, sizeof (buf), 0) == 0)
+       {
+         mutt_str_replace (&idx[menu->current]->content->description, buf);
+         menu->redraw = REDRAW_CURRENT;
+       }
+       break;
+
+      case OP_COMPOSE_UPDATE_ENCODING:
+        CHECK_COUNT;
+        if (menu->tagprefix)
+        {
+         BODY *top;
+         for (top = msg->content; top; top = top->next)
+         {
+           if (top->tagged)
+             mutt_update_encoding (top);
+         }
+         menu->redraw = REDRAW_FULL;
+       }
+        else
+        {
+          mutt_update_encoding(idx[menu->current]->content);
+         menu->redraw = REDRAW_CURRENT | REDRAW_STATUS;
+       }
+        break;
+      
+      case OP_COMPOSE_TOGGLE_DISPOSITION:
+       /* toggle the content-disposition between inline/attachment */
+       idx[menu->current]->content->disposition = (idx[menu->current]->content->disposition == DISPINLINE) ? DISPATTACH : DISPINLINE;
+       menu->redraw = REDRAW_CURRENT;
+       break;
+
+      case OP_EDIT_TYPE:
+       CHECK_COUNT;
+        {
+         mutt_edit_content_type (NULL, idx[menu->current]->content, NULL);
+
+         /* this may have been a change to text/something */
+         mutt_update_encoding (idx[menu->current]->content);
+
+         menu->redraw = REDRAW_CURRENT;
+       }
+       break;
+
+      case OP_COMPOSE_EDIT_ENCODING:
+       CHECK_COUNT;
+       strfcpy (buf, ENCODING (idx[menu->current]->content->encoding),
+                                                             sizeof (buf));
+       if (mutt_get_field ("Content-Transfer-Encoding: ", buf,
+                                           sizeof (buf), 0) == 0 && buf[0])
+       {
+         if ((i = mutt_check_encoding (buf)) != ENCOTHER && i != ENCUUENCODED)
+         {
+           idx[menu->current]->content->encoding = i;
+           menu->redraw = REDRAW_CURRENT | REDRAW_STATUS;
+           mutt_clear_error();
+         }
+         else
+           mutt_error _("Invalid encoding.");
+       }
+       break;
+
+      case OP_COMPOSE_SEND_MESSAGE:
+      
+        if(check_attachments(idx, idxlen) != 0)
+        {
+         menu->redraw = REDRAW_FULL;
+         break;
+       }
+
+      
+#ifdef MIXMASTER
+        if (msg->chain && mix_check_message (msg) != 0)
+         break;
+#endif
+      
+       if (!fccSet && *fcc)
+       {
+         if ((i = query_quadoption (OPT_COPY,
+                               _("Save a copy of this message?"))) == -1)
+           break;
+         else if (i == M_NO)
+           *fcc = 0;
+       }
+
+       loop = 0;
+       r = 0;
+       break;
+
+      case OP_COMPOSE_EDIT_FILE:
+       CHECK_COUNT;
+       mutt_edit_file (NONULL(Editor), idx[menu->current]->content->filename);
+       mutt_update_encoding (idx[menu->current]->content);
+       menu->redraw = REDRAW_CURRENT | REDRAW_STATUS;
+       break;
+
+      case OP_COMPOSE_TOGGLE_UNLINK:
+       CHECK_COUNT;
+       idx[menu->current]->content->unlink = !idx[menu->current]->content->unlink;
+
+#if 0
+        /* OPTRESOLVE is otherwise ignored on this menu.
+        * Where's the bug?
+        */
+
+        if (option (OPTRESOLVE) && menu->current + 1 < menu->max)
+         menu->current++;
+# endif
+       menu->redraw = REDRAW_INDEX;
+       break;
+
+      case OP_COMPOSE_GET_ATTACHMENT:
+        CHECK_COUNT;
+        if(menu->tagprefix)
+        {
+         BODY *top;
+         for(top = msg->content; top; top = top->next)
+         {
+           if(top->tagged)
+             mutt_get_tmp_attachment(top);
+         }
+         menu->redraw = REDRAW_FULL;
+       }
+        else if (mutt_get_tmp_attachment(idx[menu->current]->content) == 0)
+         menu->redraw = REDRAW_CURRENT;
+
+        break;
+      
+      case OP_COMPOSE_RENAME_FILE:
+       CHECK_COUNT;
+       strfcpy (fname, idx[menu->current]->content->filename, sizeof (fname));
+       mutt_pretty_mailbox (fname);
+       if (mutt_get_field (_("Rename to: "), fname, sizeof (fname), M_FILE)
+                                                       == 0 && fname[0])
+       {
+         if (stat(idx[menu->current]->content->filename, &st) == -1)
+         {
+           mutt_error (_("Can't stat %s: %s"), fname, strerror (errno));
+           break;
+         }
+
+         mutt_expand_path (fname, sizeof (fname));
+         if(mutt_rename_file (idx[menu->current]->content->filename, fname))
+           break;
+         
+         mutt_str_replace (&idx[menu->current]->content->filename, fname);
+         menu->redraw = REDRAW_CURRENT;
+
+         if(idx[menu->current]->content->stamp >= st.st_mtime)
+           mutt_stamp_attachment(idx[menu->current]->content);
+         
+       }
+       break;
+
+      case OP_COMPOSE_NEW_MIME:
+       {
+         char type[STRING];
+         char *p;
+         int itype;
+         FILE *fp;
+
+         CLEARLINE (LINES-1);
+         fname[0] = 0;
+         if (mutt_get_field (_("New file: "), fname, sizeof (fname), M_FILE)
+             != 0 || !fname[0])
+           continue;
+         mutt_expand_path (fname, sizeof (fname));
+
+         /* Call to lookup_mime_type () ?  maybe later */
+         type[0] = 0;
+         if (mutt_get_field ("Content-Type: ", type, sizeof (type), 0) != 0 
+             || !type[0])
+           continue;
+
+         if (!(p = strchr (type, '/')))
+         {
+           mutt_error _("Content-Type is of the form base/sub");
+           continue;
+         }
+         *p++ = 0;
+         if ((itype = mutt_check_mime_type (type)) == TYPEOTHER)
+         {
+           mutt_error (_("Unknown Content-Type %s"), type);
+           continue;
+         }
+         if (idxlen == idxmax)
+         {
+           safe_realloc (&idx, sizeof (ATTACHPTR *) * (idxmax += 5));
+           menu->data = idx;
+         }
+
+         idx[idxlen] = (ATTACHPTR *) safe_calloc (1, sizeof (ATTACHPTR));
+         /* Touch the file */
+         if (!(fp = safe_fopen (fname, "w")))
+         {
+           mutt_error (_("Can't create file %s"), fname);
+           FREE (&idx[idxlen]);
+           continue;
+         }
+         fclose (fp);
+
+         if ((idx[idxlen]->content = mutt_make_file_attach (fname)) == NULL)
+         {
+           mutt_error _("What we have here is a failure to make an attachment");
+           continue;
+         }
+         update_idx (menu, idx, idxlen++);
+
+         idx[menu->current]->content->type = itype;
+         mutt_str_replace (&idx[menu->current]->content->subtype, p);
+         idx[menu->current]->content->unlink = 1;
+         menu->redraw |= REDRAW_INDEX | REDRAW_STATUS;
+
+         if (mutt_compose_attachment (idx[menu->current]->content))
+         {
+           mutt_update_encoding (idx[menu->current]->content);
+           menu->redraw = REDRAW_FULL;
+         }
+       }
+       break;
+
+      case OP_COMPOSE_EDIT_MIME:
+       CHECK_COUNT;
+       if (mutt_edit_attachment (idx[menu->current]->content))
+       {
+         mutt_update_encoding (idx[menu->current]->content);
+         menu->redraw = REDRAW_FULL;
+       }
+       break;
+
+      case OP_VIEW_ATTACH:
+      case OP_DISPLAY_HEADERS:
+       CHECK_COUNT;
+       mutt_attach_display_loop (menu, op, NULL, NULL, NULL, &idx, &idxlen, NULL, 0);
+       menu->redraw = REDRAW_FULL;
+       break;
+
+      case OP_SAVE:
+       CHECK_COUNT;
+       mutt_save_attachment_list (NULL, menu->tagprefix, menu->tagprefix ?  msg->content : idx[menu->current]->content, NULL, menu);
+       MAYBE_REDRAW (menu->redraw);
+       break;
+
+      case OP_PRINT:
+       CHECK_COUNT;
+       mutt_print_attachment_list (NULL, menu->tagprefix, menu->tagprefix ? msg->content : idx[menu->current]->content);
+       break;
+
+      case OP_PIPE:
+      case OP_FILTER:
+        CHECK_COUNT;
+       mutt_pipe_attachment_list (NULL, menu->tagprefix, menu->tagprefix ? msg->content : idx[menu->current]->content, op == OP_FILTER);
+       if (op == OP_FILTER) /* cte might have changed */
+         menu->redraw = menu->tagprefix ? REDRAW_FULL : REDRAW_CURRENT; 
+        menu->redraw |= REDRAW_STATUS;
+       break;
+
+      case OP_EXIT:
+       if ((i = query_quadoption (OPT_POSTPONE, _("Postpone this message?"))) == M_NO)
+       {
+         while (idxlen-- > 0)
+         {
+           /* avoid freeing other attachments */
+           idx[idxlen]->content->next = NULL;
+           idx[idxlen]->content->parts = NULL;
+           mutt_free_body (&idx[idxlen]->content);
+           FREE (&idx[idxlen]->tree);
+           FREE (&idx[idxlen]);
+         }
+         FREE (&idx);
+         idxlen = 0;
+         idxmax = 0;
+         r = -1;
+         loop = 0;
+         break;
+       }
+       else if (i == -1)
+         break; /* abort */
+
+       /* fall through to postpone! */
+
+      case OP_COMPOSE_POSTPONE_MESSAGE:
+
+        if(check_attachments(idx, idxlen) != 0)
+        {
+         menu->redraw = REDRAW_FULL;
+         break;
+       }
+      
+       loop = 0;
+       r = 1;
+       break;
+
+      case OP_COMPOSE_ISPELL:
+       endwin ();
+       snprintf (buf, sizeof (buf), "%s -x %s", NONULL(Ispell), msg->content->filename);
+       if (mutt_system (buf) == -1)
+         mutt_error (_("Error running \"%s\"!"), buf);
+       else
+        {
+         mutt_update_encoding (msg->content);
+         menu->redraw |= REDRAW_STATUS;
+       }
+       break;
+
+      case OP_COMPOSE_WRITE_MESSAGE:
+
+       fname[0] = '\0';
+       if (Context)
+       {
+        strfcpy (fname, NONULL (Context->path), sizeof (fname));
+        mutt_pretty_mailbox (fname);
+       }
+       if (idxlen)
+         msg->content = idx[0]->content;
+       if (mutt_enter_fname (_("Write message to mailbox"), fname, sizeof (fname),
+                             &menu->redraw, 1) != -1 && fname[0])
+       {
+         mutt_message (_("Writing message to %s ..."), fname);
+         mutt_expand_path (fname, sizeof (fname));
+
+         if (msg->content->next)
+           msg->content = mutt_make_multipart (msg->content);
+
+         if (mutt_write_fcc (NONULL (fname), msg, NULL, 1, NULL) < 0)
+           msg->content = mutt_remove_multipart (msg->content);
+         else
+           mutt_message _("Message written.");
+       }
+       break;
+
+
+
+      case OP_COMPOSE_PGP_MENU:
+        if (!(WithCrypto & APPLICATION_PGP))
+          break;
+       if ((WithCrypto & APPLICATION_SMIME)
+            && msg->security & APPLICATION_SMIME)
+       {
+         if (mutt_yesorno (_("S/MIME already selected. Clear & continue ? "),
+                            M_YES) != M_YES)
+         {
+           mutt_clear_error ();
+           break;
+         }
+         msg->security = 0;
+       }
+       msg->security = pgp_send_menu (msg, &menu->redraw);
+       redraw_crypt_lines (msg);
+       break;
+
+
+      case OP_FORGET_PASSPHRASE:
+       crypt_forget_passphrase ();
+       break;
+
+
+      case OP_COMPOSE_SMIME_MENU:
+        if (!(WithCrypto & APPLICATION_SMIME))
+          break;
+
+       if ((WithCrypto & APPLICATION_PGP)
+            && msg->security & APPLICATION_PGP)
+       {
+         if (mutt_yesorno (_("PGP already selected. Clear & continue ? "),
+                             M_YES) != M_YES)
+         {
+            mutt_clear_error ();
+            break;
+         }
+         msg->security = 0;
+       }
+       msg->security = smime_send_menu(msg, &menu->redraw);
+       redraw_crypt_lines (msg);
+       break;
+
+
+#ifdef MIXMASTER
+      case OP_COMPOSE_MIX:
+      
+       mix_make_chain (&msg->chain, &menu->redraw);
+        break;
+#endif
+
+    }
+
+    /* Draw formated compose status line */
+    if (menu->redraw & REDRAW_STATUS) 
+    {
+               compose_status_line (buf, sizeof (buf), menu, NONULL(ComposeFormat));
+       CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES-2);
+       SETCOLOR (MT_COLOR_STATUS);
+       printw ("%-*.*s", COLS, COLS, buf);
+       SETCOLOR (MT_COLOR_NORMAL);
+       menu->redraw &= ~REDRAW_STATUS;
+    }
+  }
+
+  mutt_menuDestroy (&menu);
+
+  if (idxlen)
+  {
+    msg->content = idx[0]->content;
+    for (i = 0; i < idxlen; i++)
+    {
+      idx[i]->content->aptr = NULL;
+      FREE (&idx[i]);
+    }
+  }
+  else
+    msg->content = NULL;
+
+  FREE (&idx);
+
+  return (r);
+}
+
diff --git a/config.guess b/config.guess
new file mode 100755 (executable)
index 0000000..cc726cd
--- /dev/null
@@ -0,0 +1,1388 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+timestamp='2003-02-22'
+
+# This file 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-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+       for c in cc gcc c89 c99 ; do
+         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+            CC_FOR_BUILD="$c"; break ;
+         fi ;
+       done ;
+       if test x"$CC_FOR_BUILD" = x ; then
+         CC_FOR_BUILD=no_compiler_found ;
+       fi
+       ;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+       PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+       # NetBSD (nbsd) targets should (where applicable) match one or
+       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+       # switched to ELF, *-*-netbsd* would select the old
+       # object file format.  This provides both forward
+       # compatibility and a consistent mechanism for selecting the
+       # object file format.
+       #
+       # Note: NetBSD doesn't particularly care about the vendor
+       # portion of the name.  We always set it to "unknown".
+       sysctl="sysctl -n hw.machine_arch"
+       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+       case "${UNAME_MACHINE_ARCH}" in
+           armeb) machine=armeb-unknown ;;
+           arm*) machine=arm-unknown ;;
+           sh3el) machine=shl-unknown ;;
+           sh3eb) machine=sh-unknown ;;
+           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+       esac
+       # The Operating System including object format, if it has switched
+       # to ELF recently, or will in the future.
+       case "${UNAME_MACHINE_ARCH}" in
+           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+               eval $set_cc_for_build
+               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+                       | grep __ELF__ >/dev/null
+               then
+                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+                   # Return netbsd for either.  FIX?
+                   os=netbsd
+               else
+                   os=netbsdelf
+               fi
+               ;;
+           *)
+               os=netbsd
+               ;;
+       esac
+       # The OS release
+       # Debian GNU/NetBSD machines have a different userland, and
+       # thus, need a distinct triplet. However, they do not need
+       # kernel version information, so it can be replaced with a
+       # suitable tag, in the style of linux-gnu.
+       case "${UNAME_VERSION}" in
+           Debian*)
+               release='-gnu'
+               ;;
+           *)
+               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+               ;;
+       esac
+       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+       # contains redundant information, the shorter form:
+       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+       echo "${machine}-${os}${release}"
+       exit 0 ;;
+    amiga:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    arc:OpenBSD:*:*)
+       echo mipsel-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    hp300:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    mac68k:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    macppc:OpenBSD:*:*)
+       echo powerpc-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    mvme68k:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    mvme88k:OpenBSD:*:*)
+       echo m88k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    mvmeppc:OpenBSD:*:*)
+       echo powerpc-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    pmax:OpenBSD:*:*)
+       echo mipsel-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    sgi:OpenBSD:*:*)
+       echo mipseb-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    sun3:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    wgrisc:OpenBSD:*:*)
+       echo mipsel-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    *:OpenBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    alpha:OSF1:*:*)
+       if test $UNAME_RELEASE = "V4.0"; then
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+       fi
+       # According to Compaq, /usr/sbin/psrinfo has been available on
+       # OSF/1 and Tru64 systems produced since 1995.  I hope that
+       # covers most systems running today.  This code pipes the CPU
+       # types through head -n 1, so we only detect the type of CPU 0.
+       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+       case "$ALPHA_CPU_TYPE" in
+           "EV4 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "EV4.5 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "LCA4 (21066/21068)")
+               UNAME_MACHINE="alpha" ;;
+           "EV5 (21164)")
+               UNAME_MACHINE="alphaev5" ;;
+           "EV5.6 (21164A)")
+               UNAME_MACHINE="alphaev56" ;;
+           "EV5.6 (21164PC)")
+               UNAME_MACHINE="alphapca56" ;;
+           "EV5.7 (21164PC)")
+               UNAME_MACHINE="alphapca57" ;;
+           "EV6 (21264)")
+               UNAME_MACHINE="alphaev6" ;;
+           "EV6.7 (21264A)")
+               UNAME_MACHINE="alphaev67" ;;
+           "EV6.8CB (21264C)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8AL (21264B)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8CX (21264D)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.9A (21264/EV69A)")
+               UNAME_MACHINE="alphaev69" ;;
+           "EV7 (21364)")
+               UNAME_MACHINE="alphaev7" ;;
+           "EV7.9 (21364A)")
+               UNAME_MACHINE="alphaev79" ;;
+       esac
+       # A Vn.n version is a released version.
+       # A Tn.n version is a released field test version.
+       # A Xn.n version is an unreleased experimental baselevel.
+       # 1.2 uses "1.2" for uname -r.
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       exit 0 ;;
+    Alpha\ *:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # Should we change UNAME_MACHINE based on the output of uname instead
+       # of the specific Alpha model?
+       echo alpha-pc-interix
+       exit 0 ;;
+    21064:Windows_NT:50:3)
+       echo alpha-dec-winnt3.5
+       exit 0 ;;
+    Amiga*:UNIX_System_V:4.0:*)
+       echo m68k-unknown-sysv4
+       exit 0;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-amigaos
+       exit 0 ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-morphos
+       exit 0 ;;
+    *:OS/390:*:*)
+       echo i370-ibm-openedition
+       exit 0 ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix${UNAME_RELEASE}
+       exit 0;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+       echo hppa1.1-hitachi-hiuxmpp
+       exit 0;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+       if test "`(/bin/universe) 2>/dev/null`" = att ; then
+               echo pyramid-pyramid-sysv3
+       else
+               echo pyramid-pyramid-bsd
+       fi
+       exit 0 ;;
+    NILE*:*:*:dcosx)
+       echo pyramid-pyramid-svr4
+       exit 0 ;;
+    DRS?6000:UNIX_SV:4.2*:7*)
+       case `/usr/bin/uname -p` in
+           sparc) echo sparc-icl-nx7 && exit 0 ;;
+       esac ;;
+    sun4H:SunOS:5.*:*)
+       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    i86pc:SunOS:5.*:*)
+       echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    sun4*:SunOS:6*:*)
+       # According to config.sub, this is the proper way to canonicalize
+       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+       # it's likely to be more like Solaris than SunOS4.
+       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    sun4*:SunOS:*:*)
+       case "`/usr/bin/arch -k`" in
+           Series*|S4*)
+               UNAME_RELEASE=`uname -v`
+               ;;
+       esac
+       # Japanese Language versions have a version number like `4.1.3-JL'.
+       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+       exit 0 ;;
+    sun3*:SunOS:*:*)
+       echo m68k-sun-sunos${UNAME_RELEASE}
+       exit 0 ;;
+    sun*:*:4.2BSD:*)
+       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+       case "`/bin/arch`" in
+           sun3)
+               echo m68k-sun-sunos${UNAME_RELEASE}
+               ;;
+           sun4)
+               echo sparc-sun-sunos${UNAME_RELEASE}
+               ;;
+       esac
+       exit 0 ;;
+    aushp:SunOS:*:*)
+       echo sparc-auspex-sunos${UNAME_RELEASE}
+       exit 0 ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit 0 ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit 0 ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit 0 ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit 0 ;;
+    powerpc:machten:*:*)
+       echo powerpc-apple-machten${UNAME_RELEASE}
+       exit 0 ;;
+    RISC*:Mach:*:*)
+       echo mips-dec-mach_bsd4.3
+       exit 0 ;;
+    RISC*:ULTRIX:*:*)
+       echo mips-dec-ultrix${UNAME_RELEASE}
+       exit 0 ;;
+    VAX*:ULTRIX*:*:*)
+       echo vax-dec-ultrix${UNAME_RELEASE}
+       exit 0 ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+       echo clipper-intergraph-clix${UNAME_RELEASE}
+       exit 0 ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+       #if defined (host_mips) && defined (MIPSEB)
+       #if defined (SYSTYPE_SYSV)
+         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_SVR4)
+         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+       #endif
+       #endif
+         exit (-1);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c \
+         && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+         && exit 0
+       echo mips-mips-riscos${UNAME_RELEASE}
+       exit 0 ;;
+    Motorola:PowerMAX_OS:*:*)
+       echo powerpc-motorola-powermax
+       exit 0 ;;
+    Motorola:*:4.3:PL8-*)
+       echo powerpc-harris-powermax
+       exit 0 ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+       echo powerpc-harris-powermax
+       exit 0 ;;
+    Night_Hawk:Power_UNIX:*:*)
+       echo powerpc-harris-powerunix
+       exit 0 ;;
+    m88k:CX/UX:7*:*)
+       echo m88k-harris-cxux7
+       exit 0 ;;
+    m88k:*:4*:R4*)
+       echo m88k-motorola-sysv4
+       exit 0 ;;
+    m88k:*:3*:R3*)
+       echo m88k-motorola-sysv3
+       exit 0 ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+       then
+           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+              [ ${TARGET_BINARY_INTERFACE}x = x ]
+           then
+               echo m88k-dg-dgux${UNAME_RELEASE}
+           else
+               echo m88k-dg-dguxbcs${UNAME_RELEASE}
+           fi
+       else
+           echo i586-dg-dgux${UNAME_RELEASE}
+       fi
+       exit 0 ;;
+    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
+       echo m88k-dolphin-sysv3
+       exit 0 ;;
+    M88*:*:R3*:*)
+       # Delta 88k system running SVR3
+       echo m88k-motorola-sysv3
+       exit 0 ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+       echo m88k-tektronix-sysv3
+       exit 0 ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+       echo m68k-tektronix-bsd
+       exit 0 ;;
+    *:IRIX*:*:*)
+       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       exit 0 ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+       echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
+       exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+       echo i386-ibm-aix
+       exit 0 ;;
+    ia64:AIX:*:*)
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+       exit 0 ;;
+    *:AIX:2:3)
+       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+               eval $set_cc_for_build
+               sed 's/^                //' << EOF >$dummy.c
+               #include <sys/systemcfg.h>
+
+               main()
+                       {
+                       if (!__power_pc())
+                               exit(1);
+                       puts("powerpc-ibm-aix3.2.5");
+                       exit(0);
+                       }
+EOF
+               $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+               echo rs6000-ibm-aix3.2.5
+       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+               echo rs6000-ibm-aix3.2.4
+       else
+               echo rs6000-ibm-aix3.2
+       fi
+       exit 0 ;;
+    *:AIX:*:[45])
+       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+               IBM_ARCH=rs6000
+       else
+               IBM_ARCH=powerpc
+       fi
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+       exit 0 ;;
+    *:AIX:*:*)
+       echo rs6000-ibm-aix
+       exit 0 ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+       echo romp-ibm-bsd4.4
+       exit 0 ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       exit 0 ;;                           # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+       echo rs6000-bull-bosx
+       exit 0 ;;
+    DPX/2?00:B.O.S.:*:*)
+       echo m68k-bull-sysv3
+       exit 0 ;;
+    9000/[34]??:4.3bsd:1.*:*)
+       echo m68k-hp-bsd
+       exit 0 ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+       echo m68k-hp-bsd4.4
+       exit 0 ;;
+    9000/[34678]??:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       case "${UNAME_MACHINE}" in
+           9000/31? )            HP_ARCH=m68000 ;;
+           9000/[34]?? )         HP_ARCH=m68k ;;
+           9000/[678][0-9][0-9])
+               if [ -x /usr/bin/getconf ]; then
+                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+               fi
+               if [ "${HP_ARCH}" = "" ]; then
+                   eval $set_cc_for_build
+                   sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+               {
+               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+               case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+                   switch (bits)
+                       {
+                       case 64: puts ("hppa2.0w"); break;
+                       case 32: puts ("hppa2.0n"); break;
+                       default: puts ("hppa2.0"); break;
+                       } break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+                   puts ("hppa2.0"); break;
+              #endif
+               default: puts ("hppa1.0"); break;
+               }
+                  exit (0);
+              }
+EOF
+                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+                   test -z "$HP_ARCH" && HP_ARCH=hppa
+               fi ;;
+       esac
+       if [ ${HP_ARCH} = "hppa2.0w" ]
+       then
+           # avoid double evaluation of $set_cc_for_build
+           test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
+           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
+           then
+               HP_ARCH="hppa2.0w"
+           else
+               HP_ARCH="hppa64"
+           fi
+       fi
+       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       exit 0 ;;
+    ia64:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       echo ia64-hp-hpux${HPUX_REV}
+       exit 0 ;;
+    3050*:HI-UX:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <unistd.h>
+       int
+       main ()
+       {
+         long cpu = sysconf (_SC_CPU_VERSION);
+         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+            results, however.  */
+         if (CPU_IS_PA_RISC (cpu))
+           {
+             switch (cpu)
+               {
+                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+                 default: puts ("hppa-hitachi-hiuxwe2"); break;
+               }
+           }
+         else if (CPU_IS_HP_MC68K (cpu))
+           puts ("m68k-hitachi-hiuxwe2");
+         else puts ("unknown-hitachi-hiuxwe2");
+         exit (0);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+       echo unknown-hitachi-hiuxwe2
+       exit 0 ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+       echo hppa1.1-hp-bsd
+       exit 0 ;;
+    9000/8??:4.3bsd:*:*)
+       echo hppa1.0-hp-bsd
+       exit 0 ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+       echo hppa1.0-hp-mpeix
+       exit 0 ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+       echo hppa1.1-hp-osf
+       exit 0 ;;
+    hp8??:OSF1:*:*)
+       echo hppa1.0-hp-osf
+       exit 0 ;;
+    i*86:OSF1:*:*)
+       if [ -x /usr/sbin/sysversion ] ; then
+           echo ${UNAME_MACHINE}-unknown-osf1mk
+       else
+           echo ${UNAME_MACHINE}-unknown-osf1
+       fi
+       exit 0 ;;
+    parisc*:Lites*:*:*)
+       echo hppa1.1-hp-lites
+       exit 0 ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+       echo c1-convex-bsd
+        exit 0 ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+        exit 0 ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+       echo c34-convex-bsd
+        exit 0 ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+       echo c38-convex-bsd
+        exit 0 ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+       echo c4-convex-bsd
+        exit 0 ;;
+    CRAY*Y-MP:*:*:*)
+       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit 0 ;;
+    CRAY*[A-Z]90:*:*:*)
+       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+             -e 's/\.[^.]*$/.X/'
+       exit 0 ;;
+    CRAY*TS:*:*:*)
+       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit 0 ;;
+    CRAY*T3E:*:*:*)
+       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit 0 ;;
+    CRAY*SV1:*:*:*)
+       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit 0 ;;
+    *:UNICOS/mp:*:*)
+       echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' 
+       exit 0 ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit 0 ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       exit 0 ;;
+    sparc*:BSD/OS:*:*)
+       echo sparc-unknown-bsdi${UNAME_RELEASE}
+       exit 0 ;;
+    *:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+       exit 0 ;;
+    *:FreeBSD:*:*)
+       # Determine whether the default compiler uses glibc.
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <features.h>
+       #if __GLIBC__ >= 2
+       LIBC=gnu
+       #else
+       LIBC=
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+       echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
+       exit 0 ;;
+    i*:CYGWIN*:*)
+       echo ${UNAME_MACHINE}-pc-cygwin
+       exit 0 ;;
+    i*:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit 0 ;;
+    i*:PW*:*)
+       echo ${UNAME_MACHINE}-pc-pw32
+       exit 0 ;;
+    x86:Interix*:3*)
+       echo i586-pc-interix3
+       exit 0 ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+       echo i${UNAME_MACHINE}-pc-mks
+       exit 0 ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+       # UNAME_MACHINE based on the output of uname instead of i386?
+       echo i586-pc-interix
+       exit 0 ;;
+    i*:UWIN*:*)
+       echo ${UNAME_MACHINE}-pc-uwin
+       exit 0 ;;
+    p*:CYGWIN*:*)
+       echo powerpcle-unknown-cygwin
+       exit 0 ;;
+    prep*:SunOS:5.*:*)
+       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    *:GNU:*:*)
+       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       exit 0 ;;
+    i*86:Minix:*:*)
+       echo ${UNAME_MACHINE}-pc-minix
+       exit 0 ;;
+    arm*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit 0 ;;
+    ia64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit 0 ;;
+    m68*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit 0 ;;
+    mips:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef mips
+       #undef mipsel
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=mipsel
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=mips
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+       test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+       ;;
+    mips64:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef mips64
+       #undef mips64el
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=mips64el
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=mips64
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+       test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+       ;;
+    ppc:Linux:*:*)
+       echo powerpc-unknown-linux-gnu
+       exit 0 ;;
+    ppc64:Linux:*:*)
+       echo powerpc64-unknown-linux-gnu
+       exit 0 ;;
+    alpha:Linux:*:*)
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+         EV5)   UNAME_MACHINE=alphaev5 ;;
+         EV56)  UNAME_MACHINE=alphaev56 ;;
+         PCA56) UNAME_MACHINE=alphapca56 ;;
+         PCA57) UNAME_MACHINE=alphapca56 ;;
+         EV6)   UNAME_MACHINE=alphaev6 ;;
+         EV67)  UNAME_MACHINE=alphaev67 ;;
+         EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+       objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       exit 0 ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+       # Look for CPU level
+       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+         PA7*) echo hppa1.1-unknown-linux-gnu ;;
+         PA8*) echo hppa2.0-unknown-linux-gnu ;;
+         *)    echo hppa-unknown-linux-gnu ;;
+       esac
+       exit 0 ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+       echo hppa64-unknown-linux-gnu
+       exit 0 ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+       echo ${UNAME_MACHINE}-ibm-linux
+       exit 0 ;;
+    sh*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit 0 ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit 0 ;;
+    x86_64:Linux:*:*)
+       echo x86_64-unknown-linux-gnu
+       exit 0 ;;
+    i*86:Linux:*:*)
+       # The BFD linker knows what the default object file format is, so
+       # first see if it will tell us. cd to the root directory to prevent
+       # problems with other programs or directories called `ld' in the path.
+       # Set LC_ALL=C to ensure ld outputs messages in English.
+       ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+                        | sed -ne '/supported targets:/!d
+                                   s/[         ][      ]*/ /g
+                                   s/.*supported targets: *//
+                                   s/ .*//
+                                   p'`
+        case "$ld_supported_targets" in
+         elf32-i386)
+               TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+               ;;
+         a.out-i386-linux)
+               echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+               exit 0 ;;
+         coff-i386)
+               echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+               exit 0 ;;
+         "")
+               # Either a pre-BFD a.out linker (linux-gnuoldld) or
+               # one that does not give us useful --help.
+               echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+               exit 0 ;;
+       esac
+       # Determine whether the default compiler is a.out or elf
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <features.h>
+       #ifdef __ELF__
+       # ifdef __GLIBC__
+       #  if __GLIBC__ >= 2
+       LIBC=gnu
+       #  else
+       LIBC=gnulibc1
+       #  endif
+       # else
+       LIBC=gnulibc1
+       # endif
+       #else
+       #ifdef __INTEL_COMPILER
+       LIBC=gnu
+       #else
+       LIBC=gnuaout
+       #endif
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+       test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+       test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+       ;;
+    i*86:DYNIX/ptx:4*:*)
+       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+       # earlier versions are messed up and put the nodename in both
+       # sysname and nodename.
+       echo i386-sequent-sysv4
+       exit 0 ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+       # I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+       exit 0 ;;
+    i*86:OS/2:*:*)
+       # If we were able to find `uname', then EMX Unix compatibility
+       # is probably installed.
+       echo ${UNAME_MACHINE}-pc-os2-emx
+       exit 0 ;;
+    i*86:XTS-300:*:STOP)
+       echo ${UNAME_MACHINE}-unknown-stop
+       exit 0 ;;
+    i*86:atheos:*:*)
+       echo ${UNAME_MACHINE}-unknown-atheos
+       exit 0 ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+       echo i386-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    i*86:*DOS:*:*)
+       echo ${UNAME_MACHINE}-pc-msdosdjgpp
+       exit 0 ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+       else
+               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+       fi
+       exit 0 ;;
+    i*86:*:5:[78]*)
+       case `/bin/uname -X | grep "^Machine"` in
+           *486*)           UNAME_MACHINE=i486 ;;
+           *Pentium)        UNAME_MACHINE=i586 ;;
+           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+       esac
+       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+       exit 0 ;;
+    i*86:*:3.2:*)
+       if test -f /usr/options/cb.name; then
+               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+       elif /bin/uname -X 2>/dev/null >/dev/null ; then
+               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+       else
+               echo ${UNAME_MACHINE}-pc-sysv32
+       fi
+       exit 0 ;;
+    pc:*:*:*)
+       # Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+       echo i386-pc-msdosdjgpp
+        exit 0 ;;
+    Intel:Mach:3*:*)
+       echo i386-pc-mach3
+       exit 0 ;;
+    paragon:*:*:*)
+       echo i860-intel-osf1
+       exit 0 ;;
+    i860:*:4.*:*) # i860-SVR4
+       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+       else # Add other i860-SVR4 vendors below as they are discovered.
+         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+       fi
+       exit 0 ;;
+    mini*:CTIX:SYS*5:*)
+       # "miniframe"
+       echo m68010-convergent-sysv
+       exit 0 ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+       echo m68k-convergent-sysv
+       exit 0 ;;
+    M680?0:D-NIX:5.3:*)
+       echo m68k-diab-dnix
+       exit 0 ;;
+    M68*:*:R3V[567]*:*)
+       test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+    3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0)
+       OS_REL=''
+       test -r /etc/.relid \
+       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+         && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && echo i486-ncr-sysv4 && exit 0 ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    mc68030:UNIX_System_V:4.*:*)
+       echo m68k-atari-sysv4
+       exit 0 ;;
+    TSUNAMI:LynxOS:2.*:*)
+       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    rs6000:LynxOS:2.*:*)
+       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+       echo powerpc-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    SM[BE]S:UNIX_SV:*:*)
+       echo mips-dde-sysv${UNAME_RELEASE}
+       exit 0 ;;
+    RM*:ReliantUNIX-*:*:*)
+       echo mips-sni-sysv4
+       exit 0 ;;
+    RM*:SINIX-*:*:*)
+       echo mips-sni-sysv4
+       exit 0 ;;
+    *:SINIX-*:*:*)
+       if uname -p 2>/dev/null >/dev/null ; then
+               UNAME_MACHINE=`(uname -p) 2>/dev/null`
+               echo ${UNAME_MACHINE}-sni-sysv4
+       else
+               echo ns32k-sni-sysv
+       fi
+       exit 0 ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit 0 ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <hewes@openmarket.com>.
+       # How about differentiating between stratus architectures? -djm
+       echo hppa1.1-stratus-sysv4
+       exit 0 ;;
+    *:*:*:FTX*)
+       # From seanf@swdc.stratus.com.
+       echo i860-stratus-sysv4
+       exit 0 ;;
+    *:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo hppa1.1-stratus-vos
+       exit 0 ;;
+    mc68*:A/UX:*:*)
+       echo m68k-apple-aux${UNAME_RELEASE}
+       exit 0 ;;
+    news*:NEWS-OS:6*:*)
+       echo mips-sony-newsos6
+       exit 0 ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+       if [ -d /usr/nec ]; then
+               echo mips-nec-sysv${UNAME_RELEASE}
+       else
+               echo mips-unknown-sysv${UNAME_RELEASE}
+       fi
+        exit 0 ;;
+    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
+       echo powerpc-be-beos
+       exit 0 ;;
+    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
+       echo powerpc-apple-beos
+       exit 0 ;;
+    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
+       echo i586-pc-beos
+       exit 0 ;;
+    SX-4:SUPER-UX:*:*)
+       echo sx4-nec-superux${UNAME_RELEASE}
+       exit 0 ;;
+    SX-5:SUPER-UX:*:*)
+       echo sx5-nec-superux${UNAME_RELEASE}
+       exit 0 ;;
+    SX-6:SUPER-UX:*:*)
+       echo sx6-nec-superux${UNAME_RELEASE}
+       exit 0 ;;
+    Power*:Rhapsody:*:*)
+       echo powerpc-apple-rhapsody${UNAME_RELEASE}
+       exit 0 ;;
+    *:Rhapsody:*:*)
+       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+       exit 0 ;;
+    *:Darwin:*:*)
+       case `uname -p` in
+           *86) UNAME_PROCESSOR=i686 ;;
+           powerpc) UNAME_PROCESSOR=powerpc ;;
+       esac
+       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+       exit 0 ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+       UNAME_PROCESSOR=`uname -p`
+       if test "$UNAME_PROCESSOR" = "x86"; then
+               UNAME_PROCESSOR=i386
+               UNAME_MACHINE=pc
+       fi
+       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+       exit 0 ;;
+    *:QNX:*:4*)
+       echo i386-pc-qnx
+       exit 0 ;;
+    NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
+       echo nsr-tandem-nsk${UNAME_RELEASE}
+       exit 0 ;;
+    *:NonStop-UX:*:*)
+       echo mips-compaq-nonstopux
+       exit 0 ;;
+    BS2000:POSIX*:*:*)
+       echo bs2000-siemens-sysv
+       exit 0 ;;
+    DS/*:UNIX_System_V:*:*)
+       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+       exit 0 ;;
+    *:Plan9:*:*)
+       # "uname -m" is not consistent, so use $cputype instead. 386
+       # is converted to i386 for consistency with other x86
+       # operating systems.
+       if test "$cputype" = "386"; then
+           UNAME_MACHINE=i386
+       else
+           UNAME_MACHINE="$cputype"
+       fi
+       echo ${UNAME_MACHINE}-unknown-plan9
+       exit 0 ;;
+    *:TOPS-10:*:*)
+       echo pdp10-unknown-tops10
+       exit 0 ;;
+    *:TENEX:*:*)
+       echo pdp10-unknown-tenex
+       exit 0 ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+       echo pdp10-dec-tops20
+       exit 0 ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+       echo pdp10-xkl-tops20
+       exit 0 ;;
+    *:TOPS-20:*:*)
+       echo pdp10-unknown-tops20
+       exit 0 ;;
+    *:ITS:*:*)
+       echo pdp10-unknown-its
+       exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+         ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+       printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+       printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+       echo c1-convex-bsd
+       exit 0 ;;
+    c2*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit 0 ;;
+    c34*)
+       echo c34-convex-bsd
+       exit 0 ;;
+    c38*)
+       echo c38-convex-bsd
+       exit 0 ;;
+    c4*)
+       echo c4-convex-bsd
+       exit 0 ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+    ftp://ftp.gnu.org/pub/gnu/config/
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.h.in b/config.h.in
new file mode 100644 (file)
index 0000000..7a995eb
--- /dev/null
@@ -0,0 +1,560 @@
+/* config.h.in.  Generated automatically from configure.in by autoheader 2.13.  */
+
+/* Define if using alloca.c.  */
+#undef C_ALLOCA
+
+/* Define to empty if the keyword does not work.  */
+#undef const
+
+/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
+   This function is required for alloca.c support on those systems.  */
+#undef CRAY_STACKSEG_END
+
+/* Define if you have alloca, as a function or macro.  */
+#undef HAVE_ALLOCA
+
+/* Define if you have <alloca.h> and it should be used (not on Ultrix).  */
+#undef HAVE_ALLOCA_H
+
+/* Define if you have a working `mmap' system call.  */
+#undef HAVE_MMAP
+
+/* Define as __inline if that's what the C compiler calls it.  */
+#undef inline
+
+/* Define to `long' if <sys/types.h> doesn't define.  */
+#undef off_t
+
+/* Define to `int' if <sys/types.h> doesn't define.  */
+#undef pid_t
+
+/* Define as the return type of signal handlers (int or void).  */
+#undef RETSIGTYPE
+
+/* Define to `unsigned' if <sys/types.h> doesn't define.  */
+#undef size_t
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at run-time.
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown
+ */
+#undef STACK_DIRECTION
+
+/* Define if you have the ANSI C header files.  */
+#undef STDC_HEADERS
+
+/* Define if `sys_siglist' is declared by <signal.h>.  */
+#undef SYS_SIGLIST_DECLARED
+
+/* Define if your processor stores words with the most significant
+   byte first (like Motorola and SPARC, unlike Intel and VAX).  */
+#undef WORDS_BIGENDIAN
+
+/* Compiling with newsreading support with NNTP */
+#undef USE_NNTP
+
+/* program to use for shell commands */
+#define EXECSHELL "/bin/sh"
+
+/* Define to `int' if <signal.h> doesn't define.  */
+#undef sig_atomic_t
+
+/* The number of bytes in a int.  */
+#undef SIZEOF_INT
+
+/* The number of bytes in a long.  */
+#undef SIZEOF_LONG
+
+/* Define if you have the RAND_egd function.  */
+#undef HAVE_RAND_EGD
+
+/* Define if you have the RAND_status function.  */
+#undef HAVE_RAND_STATUS
+
+/* Define if you have the __argz_count function.  */
+#undef HAVE___ARGZ_COUNT
+
+/* Define if you have the __argz_next function.  */
+#undef HAVE___ARGZ_NEXT
+
+/* Define if you have the __argz_stringify function.  */
+#undef HAVE___ARGZ_STRINGIFY
+
+/* Define if you have the bind_textdomain_codeset function.  */
+#undef HAVE_BIND_TEXTDOMAIN_CODESET
+
+/* Define if you have the dcgettext function.  */
+#undef HAVE_DCGETTEXT
+
+/* Define if you have the fchdir function.  */
+#undef HAVE_FCHDIR
+
+/* Define if you have the feof_unlocked function.  */
+#undef HAVE_FEOF_UNLOCKED
+
+/* Define if you have the fgetpos function.  */
+#undef HAVE_FGETPOS
+
+/* Define if you have the fgets_unlocked function.  */
+#undef HAVE_FGETS_UNLOCKED
+
+/* Define if you have the ftruncate function.  */
+#undef HAVE_FTRUNCATE
+
+/* Define if you have the getaddrinfo function.  */
+#undef HAVE_GETADDRINFO
+
+/* Define if you have the getcwd function.  */
+#undef HAVE_GETCWD
+
+/* Define if you have the getegid function.  */
+#undef HAVE_GETEGID
+
+/* Define if you have the geteuid function.  */
+#undef HAVE_GETEUID
+
+/* Define if you have the getgid function.  */
+#undef HAVE_GETGID
+
+/* Define if you have the getpagesize function.  */
+#undef HAVE_GETPAGESIZE
+
+/* Define if you have the getsid function.  */
+#undef HAVE_GETSID
+
+/* Define if you have the getuid function.  */
+#undef HAVE_GETUID
+
+/* Define if you have the idna_to_ascii_8z function.  */
+#undef HAVE_IDNA_TO_ASCII_8Z
+
+/* Define if you have the idna_to_ascii_from_locale function.  */
+#undef HAVE_IDNA_TO_ASCII_FROM_LOCALE
+
+/* Define if you have the idna_to_ascii_from_utf8 function.  */
+#undef HAVE_IDNA_TO_ASCII_FROM_UTF8
+
+/* Define if you have the idna_to_ascii_lz function.  */
+#undef HAVE_IDNA_TO_ASCII_LZ
+
+/* Define if you have the idna_to_unicode_8z8z function.  */
+#undef HAVE_IDNA_TO_UNICODE_8Z8Z
+
+/* Define if you have the idna_to_unicode_utf8_from_utf8 function.  */
+#undef HAVE_IDNA_TO_UNICODE_UTF8_FROM_UTF8
+
+/* Define if you have the iswalnum function.  */
+#undef HAVE_ISWALNUM
+
+/* Define if you have the iswalpha function.  */
+#undef HAVE_ISWALPHA
+
+/* Define if you have the iswcntrl function.  */
+#undef HAVE_ISWCNTRL
+
+/* Define if you have the iswdigit function.  */
+#undef HAVE_ISWDIGIT
+
+/* Define if you have the iswgraph function.  */
+#undef HAVE_ISWGRAPH
+
+/* Define if you have the iswlower function.  */
+#undef HAVE_ISWLOWER
+
+/* Define if you have the iswprint function.  */
+#undef HAVE_ISWPRINT
+
+/* Define if you have the iswpunct function.  */
+#undef HAVE_ISWPUNCT
+
+/* Define if you have the iswspace function.  */
+#undef HAVE_ISWSPACE
+
+/* Define if you have the iswupper function.  */
+#undef HAVE_ISWUPPER
+
+/* Define if you have the iswxdigit function.  */
+#undef HAVE_ISWXDIGIT
+
+/* Define if you have the memmove function.  */
+#undef HAVE_MEMMOVE
+
+/* Define if you have the mempcpy function.  */
+#undef HAVE_MEMPCPY
+
+/* Define if you have the munmap function.  */
+#undef HAVE_MUNMAP
+
+/* Define if you have the putenv function.  */
+#undef HAVE_PUTENV
+
+/* Define if you have the regcomp function.  */
+#undef HAVE_REGCOMP
+
+/* Define if you have the setegid function.  */
+#undef HAVE_SETEGID
+
+/* Define if you have the setenv function.  */
+#undef HAVE_SETENV
+
+/* Define if you have the setlocale function.  */
+#undef HAVE_SETLOCALE
+
+/* Define if you have the setrlimit function.  */
+#undef HAVE_SETRLIMIT
+
+/* Define if you have the snprintf function.  */
+#undef HAVE_SNPRINTF
+
+/* Define if you have the srand48 function.  */
+#undef HAVE_SRAND48
+
+/* Define if you have the stpcpy function.  */
+#undef HAVE_STPCPY
+
+/* Define if you have the strcasecmp function.  */
+#undef HAVE_STRCASECMP
+
+/* Define if you have the strchr function.  */
+#undef HAVE_STRCHR
+
+/* Define if you have the strdup function.  */
+#undef HAVE_STRDUP
+
+/* Define if you have the strerror function.  */
+#undef HAVE_STRERROR
+
+/* Define if you have the strftime function.  */
+#undef HAVE_STRFTIME
+
+/* Define if you have the strtoul function.  */
+#undef HAVE_STRTOUL
+
+/* Define if you have the towlower function.  */
+#undef HAVE_TOWLOWER
+
+/* Define if you have the towupper function.  */
+#undef HAVE_TOWUPPER
+
+/* Define if you have the tsearch function.  */
+#undef HAVE_TSEARCH
+
+/* Define if you have the vsnprintf function.  */
+#undef HAVE_VSNPRINTF
+
+/* Define if you have the <argz.h> header file.  */
+#undef HAVE_ARGZ_H
+
+/* Define if you have the <getopt.h> header file.  */
+#undef HAVE_GETOPT_H
+
+/* Define if you have the <iconv.h> header file.  */
+#undef HAVE_ICONV_H
+
+/* Define if you have the <inttypes.h> header file.  */
+#undef HAVE_INTTYPES_H
+
+/* Define if you have the <ioctl.h> header file.  */
+#undef HAVE_IOCTL_H
+
+/* Define if you have the <limits.h> header file.  */
+#undef HAVE_LIMITS_H
+
+/* Define if you have the <locale.h> header file.  */
+#undef HAVE_LOCALE_H
+
+/* Define if you have the <malloc.h> header file.  */
+#undef HAVE_MALLOC_H
+
+/* Define if you have the <ncurses.h> header file.  */
+#undef HAVE_NCURSES_H
+
+/* Define if you have the <ncursesw/ncurses.h> header file.  */
+#undef HAVE_NCURSESW_NCURSES_H
+
+/* Define if you have the <nl_types.h> header file.  */
+#undef HAVE_NL_TYPES_H
+
+/* Define if you have the <stdarg.h> header file.  */
+#undef HAVE_STDARG_H
+
+/* Define if you have the <stddef.h> header file.  */
+#undef HAVE_STDDEF_H
+
+/* Define if you have the <stdint.h> header file.  */
+#undef HAVE_STDINT_H
+
+/* Define if you have the <stdlib.h> header file.  */
+#undef HAVE_STDLIB_H
+
+/* Define if you have the <string.h> header file.  */
+#undef HAVE_STRING_H
+
+/* Define if you have the <sys/ioctl.h> header file.  */
+#undef HAVE_SYS_IOCTL_H
+
+/* Define if you have the <sys/param.h> header file.  */
+#undef HAVE_SYS_PARAM_H
+
+/* Define if you have the <sys/resource.h> header file.  */
+#undef HAVE_SYS_RESOURCE_H
+
+/* Define if you have the <sys/time.h> header file.  */
+#undef HAVE_SYS_TIME_H
+
+/* Define if you have the <sysexits.h> header file.  */
+#undef HAVE_SYSEXITS_H
+
+/* Define if you have the <unistd.h> header file.  */
+#undef HAVE_UNISTD_H
+
+/* Define if you have the <unix.h> header file.  */
+#undef HAVE_UNIX_H
+
+/* Define if you have the <wchar.h> header file.  */
+#undef HAVE_WCHAR_H
+
+/* Define if you have the <wctype.h> header file.  */
+#undef HAVE_WCTYPE_H
+
+/* Define if you have the crypto library (-lcrypto).  */
+#undef HAVE_LIBCRYPTO
+
+/* Define if you have the esmtp library (-lesmtp).  */
+#undef HAVE_LIBESMTP
+
+/* Define if you have the idn library (-lidn).  */
+#undef HAVE_LIBIDN
+
+/* Define if you have the nsl library (-lnsl).  */
+#undef HAVE_LIBNSL
+
+/* Define if you have the sasl library (-lsasl).  */
+#undef HAVE_LIBSASL
+
+/* Define if you have the sasl2 library (-lsasl2).  */
+#undef HAVE_LIBSASL2
+
+/* Define if you have the socket library (-lsocket).  */
+#undef HAVE_LIBSOCKET
+
+/* Define if you have the ssl library (-lssl).  */
+#undef HAVE_LIBSSL
+
+/* Define if you have the termlib library (-ltermlib).  */
+#undef HAVE_LIBTERMLIB
+
+/* Name of package */
+#undef PACKAGE
+
+/* Version number of package */
+#undef VERSION
+
+/* Define if compiler has function prototypes */
+#undef PROTOTYPES
+
+/*  Where to find sendmail on your system.  */
+#undef SENDMAIL
+
+/*  Define if you want classic PGP support.  */
+#undef CRYPT_BACKEND_CLASSIC_PGP
+
+/*  Define if you want clasic S/MIME support.  */
+#undef CRYPT_BACKEND_CLASSIC_SMIME
+
+/*  Where to find mixmaster on your system.  */
+#undef MIXMASTER
+
+/*  Is this the international version?  */
+#undef SUBVERSION
+
+/*  Where to find ispell on your system.  */
+#undef ISPELL
+
+/*  Define if you compile with SLang instead of curses/ncurses.  */
+#undef USE_SLANG_CURSES
+
+/*  Define if your curses library supports color.  */
+#undef HAVE_COLOR
+
+/*  Define if your curses library supports color.  */
+#undef HAVE_COLOR
+
+/*  Define if you have the uint32_t type.  */
+#undef HAVE_UINT32_T
+
+/*  Define if you want to use the included regex.c.  */
+#undef USE_GNU_REGEX
+
+/*  Where new mail is spooled.  */
+#undef MAILPATH
+
+/* Is mail spooled to the user's home directory?  If defined,
+           MAILPATH should be set to the filename of the spool mailbox
+           relative the the home directory.
+           use: configure --with-homespool=FILE */
+#undef HOMESPOOL
+
+/*  Define to use dotlocking for mailboxes.  */
+#undef USE_DOTLOCK
+
+/*  Where new mail is spooled.  */
+#undef MAILPATH
+
+/*  Define to use dotlocking for mailboxes.  */
+#undef USE_DOTLOCK
+
+/*  Define to use dotlocking for mailboxes.  */
+#undef USE_DOTLOCK
+
+/*  Define if mutt should run setgid mail.  */
+#undef USE_SETGID
+
+/*  Define if you want to use an external dotlocking program.  */
+#undef DL_STANDALONE
+
+/*  Define your domain name.  */
+#undef DOMAIN
+
+/*  Define if you want support for the POP3 protocol.  */
+#undef USE_POP
+
+/*  Define if you want support for the IMAP protocol.  */
+#undef USE_IMAP
+
+/*  Define to 'int' if <sys/socket.h> doesn't have it.  */
+#undef socklen_t
+
+/*  Include code for socket support. Set automatically if you enable POP3 or IMAP  */
+#undef USE_SOCKET
+
+/*  Define if your GSSAPI implementation is Heimdal  */
+#undef HAVE_HEIMDAL
+
+/*  Define if you have GSSAPI libraries available  */
+#undef USE_GSS
+
+/*  Define if you want support for SSL.  */
+#undef USE_SSL
+
+/*  Define if you want support for SSL via the NSS library.  */
+#undef USE_NSS
+
+/*  Define if want to use the Cyrus SASL library for POP/IMAP authentication.  */
+#undef USE_SASL
+
+/*  Define if want to use the Cyrus SASL library for POP/IMAP authentication.  */
+#undef USE_SASL
+
+/*  Define if want to use version 2 of the Cyrus SASL library.  */
+#undef USE_SASL2
+
+/*  Define to enable debugging info.  */
+#undef DEBUG
+
+/*  Define to use flock() to lock mailboxes.  */
+#undef USE_FLOCK
+
+/*  Define to use fcntl() to lock folders.  */
+#undef USE_FCNTL
+
+/* Define if you have problems with mutt not detecting
+                   new/old mailboxes over NFS.  Some NFS implementations
+                   incorrectly cache the attributes of small files. */
+#undef NFS_ATTRIBUTE_HACK
+
+/*  Define to enable the buffy_size feature.  */
+#undef BUFFY_SIZE
+
+/*  Define to enable Sun mailtool attachments support.  */
+#undef SUN_ATTACHMENT
+
+/*  Define if the result of isprint() is unreliable.  */
+#undef LOCALES_HACK
+
+/* program to use for shell commands */
+#undef EXECSHELL
+
+/* Enable exact regeneration of email addresses as parsed?
+                   NOTE: this requires significant more memory when defined. */
+#undef EXACT_ADDRESS
+
+/* Define if you have the iconv() function. */
+#undef HAVE_ICONV
+
+/* Define as const if the declaration of iconv() needs const. */
+#undef ICONV_CONST
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#undef HAVE_LANGINFO_CODESET
+
+/* Define if your <locale.h> file defines LC_MESSAGES. */
+#undef HAVE_LC_MESSAGES
+
+/* Define to 1 if translation of program messages to the user's native language
+   is requested. */
+#undef ENABLE_NLS
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define if <iconv.h> defines iconv_t. */
+#undef HAVE_ICONV_T_DEF
+
+/*  Define if your gettext has bind_textdomain_codeset.  */
+#undef HAVE_BIND_TEXTDOMAIN_CODESET
+
+/*  Define to 'int' if system headers don't define.  */
+#undef wchar_t
+
+/*  Define to 'int' if system headers don't define.  */
+#undef wint_t
+
+/*  Define to 'int' if system headers don't define.  */
+#undef mbstate_t
+
+/*  Define if you are using the system's wchar_t functions.  */
+#undef HAVE_WC_FUNCS
+
+/*  Define if you have <langinfo.h> and nl_langinfo(CODESET).  */
+#undef HAVE_LANGINFO_CODESET
+
+/*  Define if you have <langinfo.h> and nl_langinfo(YESEXPR).  */
+#undef HAVE_LANGINFO_YESEXPR
+
+/* Define to enable the use of libesmtp */
+#undef USE_LIBESMTP
+
+/* Define if you have start_color, as a function or macro.  */
+#undef HAVE_START_COLOR
+
+/* Define if you have typeahead, as a function or macro.  */
+#undef HAVE_TYPEAHEAD
+
+/* Define if you have bkgdset, as a function or macro.  */
+#undef HAVE_BKGDSET
+
+/* Define if you have curs_set, as a function or macro.  */
+#undef HAVE_CURS_SET
+
+/* Define if you have meta, as a function or macro.  */
+#undef HAVE_META
+
+/* Define if you have use_default_colors, as a function or macro.  */
+#undef HAVE_USE_DEFAULT_COLORS
+
+/* Define if you have resizeterm, as a function or macro.  */
+#undef HAVE_RESIZETERM
+
+/* Some systems declare sig_atomic_t as volatile, some others -- no.
+ * This define will have value `sig_atomic_t' or `volatile sig_atomic_t'
+ * accordingly. */
+#undef SIG_ATOMIC_VOLATILE_T
+
+/* Define as 1 if iconv() only converts exactly and we should treat
+ * all return values other than (size_t)(-1) as equivalent. */
+#undef ICONV_NONTRANS
+
diff --git a/config.sub b/config.sub
new file mode 100755 (executable)
index 0000000..9772e87
--- /dev/null
@@ -0,0 +1,1489 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+timestamp='2003-02-22'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file 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-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit 0;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+       -sun*os*)
+               # Prevent following clause from handling this invalid input.
+               ;;
+       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+       -apple | -axis)
+               os=
+               basic_machine=$1
+               ;;
+       -sim | -cisco | -oki | -wec | -winbond)
+               os=
+               basic_machine=$1
+               ;;
+       -scout)
+               ;;
+       -wrs)
+               os=-vxworks
+               basic_machine=$1
+               ;;
+       -chorusos*)
+               os=-chorusos
+               basic_machine=$1
+               ;;
+       -chorusrdb)
+               os=-chorusrdb
+               basic_machine=$1
+               ;;
+       -hiux*)
+               os=-hiuxwe2
+               ;;
+       -sco5)
+               os=-sco3.2v5
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco4)
+               os=-sco3.2v4
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2v[4-9]*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco*)
+               os=-sco3.2v2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -udk*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -isc)
+               os=-isc2.2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -clix*)
+               basic_machine=clipper-intergraph
+               ;;
+       -isc*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -lynx*)
+               os=-lynxos
+               ;;
+       -ptx*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+               ;;
+       -windowsnt*)
+               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+               ;;
+       -psos*)
+               os=-psos
+               ;;
+       -mint | -mint[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+       # Recognize the basic CPU types without company name.
+       # Some are omitted here because they have special meanings below.
+       1750a | 580 \
+       | a29k \
+       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+       | clipper \
+       | d10v | d30v | dlx | dsp16xx \
+       | fr30 | frv \
+       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+       | i370 | i860 | i960 | ia64 \
+       | ip2k \
+       | m32r | m68000 | m68k | m88k | mcore \
+       | mips | mipsbe | mipseb | mipsel | mipsle \
+       | mips16 \
+       | mips64 | mips64el \
+       | mips64vr | mips64vrel \
+       | mips64orion | mips64orionel \
+       | mips64vr4100 | mips64vr4100el \
+       | mips64vr4300 | mips64vr4300el \
+       | mips64vr5000 | mips64vr5000el \
+       | mipsisa32 | mipsisa32el \
+       | mipsisa32r2 | mipsisa32r2el \
+       | mipsisa64 | mipsisa64el \
+       | mipsisa64sb1 | mipsisa64sb1el \
+       | mipsisa64sr71k | mipsisa64sr71kel \
+       | mipstx39 | mipstx39el \
+       | mn10200 | mn10300 \
+       | msp430 \
+       | ns16k | ns32k \
+       | openrisc | or32 \
+       | pdp10 | pdp11 | pj | pjl \
+       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+       | pyramid \
+       | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+       | sh64 | sh64le \
+       | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
+       | strongarm \
+       | tahoe | thumb | tic80 | tron \
+       | v850 | v850e \
+       | we32k \
+       | x86 | xscale | xstormy16 | xtensa \
+       | z8k)
+               basic_machine=$basic_machine-unknown
+               ;;
+       m6811 | m68hc11 | m6812 | m68hc12)
+               # Motorola 68HC11/12.
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
+       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+               ;;
+
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i*86 | x86_64)
+         basic_machine=$basic_machine-pc
+         ;;
+       # Object if more than one company name word.
+       *-*-*)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+       # Recognize the basic CPU types with company name.
+       580-* \
+       | a29k-* \
+       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+       | avr-* \
+       | bs2000-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+       | clipper-* | cydra-* \
+       | d10v-* | d30v-* | dlx-* \
+       | elxsi-* \
+       | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+       | h8300-* | h8500-* \
+       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+       | i*86-* | i860-* | i960-* | ia64-* \
+       | ip2k-* \
+       | m32r-* \
+       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+       | m88110-* | m88k-* | mcore-* \
+       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+       | mips16-* \
+       | mips64-* | mips64el-* \
+       | mips64vr-* | mips64vrel-* \
+       | mips64orion-* | mips64orionel-* \
+       | mips64vr4100-* | mips64vr4100el-* \
+       | mips64vr4300-* | mips64vr4300el-* \
+       | mips64vr5000-* | mips64vr5000el-* \
+       | mipsisa32-* | mipsisa32el-* \
+       | mipsisa32r2-* | mipsisa32r2el-* \
+       | mipsisa64-* | mipsisa64el-* \
+       | mipsisa64sb1-* | mipsisa64sb1el-* \
+       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+       | mipstx39-* | mipstx39el-* \
+       | msp430-* \
+       | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
+       | orion-* \
+       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+       | pyramid-* \
+       | romp-* | rs6000-* \
+       | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+       | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+       | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+       | tahoe-* | thumb-* \
+       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+       | tron-* \
+       | v850-* | v850e-* | vax-* \
+       | we32k-* \
+       | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
+       | xtensa-* \
+       | ymp-* \
+       | z8k-*)
+               ;;
+       # Recognize the various machine names and aliases which stand
+       # for a CPU type and a company and sometimes even an OS.
+       386bsd)
+               basic_machine=i386-unknown
+               os=-bsd
+               ;;
+       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+               basic_machine=m68000-att
+               ;;
+       3b*)
+               basic_machine=we32k-att
+               ;;
+       a29khif)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       adobe68k)
+               basic_machine=m68010-adobe
+               os=-scout
+               ;;
+       alliant | fx80)
+               basic_machine=fx80-alliant
+               ;;
+       altos | altos3068)
+               basic_machine=m68k-altos
+               ;;
+       am29k)
+               basic_machine=a29k-none
+               os=-bsd
+               ;;
+       amdahl)
+               basic_machine=580-amdahl
+               os=-sysv
+               ;;
+       amiga | amiga-*)
+               basic_machine=m68k-unknown
+               ;;
+       amigaos | amigados)
+               basic_machine=m68k-unknown
+               os=-amigaos
+               ;;
+       amigaunix | amix)
+               basic_machine=m68k-unknown
+               os=-sysv4
+               ;;
+       apollo68)
+               basic_machine=m68k-apollo
+               os=-sysv
+               ;;
+       apollo68bsd)
+               basic_machine=m68k-apollo
+               os=-bsd
+               ;;
+       aux)
+               basic_machine=m68k-apple
+               os=-aux
+               ;;
+       balance)
+               basic_machine=ns32k-sequent
+               os=-dynix
+               ;;
+       c90)
+               basic_machine=c90-cray
+               os=-unicos
+               ;;
+       convex-c1)
+               basic_machine=c1-convex
+               os=-bsd
+               ;;
+       convex-c2)
+               basic_machine=c2-convex
+               os=-bsd
+               ;;
+       convex-c32)
+               basic_machine=c32-convex
+               os=-bsd
+               ;;
+       convex-c34)
+               basic_machine=c34-convex
+               os=-bsd
+               ;;
+       convex-c38)
+               basic_machine=c38-convex
+               os=-bsd
+               ;;
+       cray | j90)
+               basic_machine=j90-cray
+               os=-unicos
+               ;;
+       crds | unos)
+               basic_machine=m68k-crds
+               ;;
+       cris | cris-* | etrax*)
+               basic_machine=cris-axis
+               ;;
+       da30 | da30-*)
+               basic_machine=m68k-da30
+               ;;
+       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+               basic_machine=mips-dec
+               ;;
+       decsystem10* | dec10*)
+               basic_machine=pdp10-dec
+               os=-tops10
+               ;;
+       decsystem20* | dec20*)
+               basic_machine=pdp10-dec
+               os=-tops20
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               basic_machine=m68k-motorola
+               ;;
+       delta88)
+               basic_machine=m88k-motorola
+               os=-sysv3
+               ;;
+       dpx20 | dpx20-*)
+               basic_machine=rs6000-bull
+               os=-bosx
+               ;;
+       dpx2* | dpx2*-bull)
+               basic_machine=m68k-bull
+               os=-sysv3
+               ;;
+       ebmon29k)
+               basic_machine=a29k-amd
+               os=-ebmon
+               ;;
+       elxsi)
+               basic_machine=elxsi-elxsi
+               os=-bsd
+               ;;
+       encore | umax | mmax)
+               basic_machine=ns32k-encore
+               ;;
+       es1800 | OSE68k | ose68k | ose | OSE)
+               basic_machine=m68k-ericsson
+               os=-ose
+               ;;
+       fx2800)
+               basic_machine=i860-alliant
+               ;;
+       genix)
+               basic_machine=ns32k-ns
+               ;;
+       gmicro)
+               basic_machine=tron-gmicro
+               os=-sysv
+               ;;
+       go32)
+               basic_machine=i386-pc
+               os=-go32
+               ;;
+       h3050r* | hiux*)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       h8300hms)
+               basic_machine=h8300-hitachi
+               os=-hms
+               ;;
+       h8300xray)
+               basic_machine=h8300-hitachi
+               os=-xray
+               ;;
+       h8500hms)
+               basic_machine=h8500-hitachi
+               os=-hms
+               ;;
+       harris)
+               basic_machine=m88k-harris
+               os=-sysv3
+               ;;
+       hp300-*)
+               basic_machine=m68k-hp
+               ;;
+       hp300bsd)
+               basic_machine=m68k-hp
+               os=-bsd
+               ;;
+       hp300hpux)
+               basic_machine=m68k-hp
+               os=-hpux
+               ;;
+       hp3k9[0-9][0-9] | hp9[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               basic_machine=m68000-hp
+               ;;
+       hp9k3[2-9][0-9])
+               basic_machine=m68k-hp
+               ;;
+       hp9k6[0-9][0-9] | hp6[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k7[0-79][0-9] | hp7[0-79][0-9])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k78[0-9] | hp78[0-9])
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][13679] | hp8[0-9][13679])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hppa-next)
+               os=-nextstep3
+               ;;
+       hppaosf)
+               basic_machine=hppa1.1-hp
+               os=-osf
+               ;;
+       hppro)
+               basic_machine=hppa1.1-hp
+               os=-proelf
+               ;;
+       i370-ibm* | ibm*)
+               basic_machine=i370-ibm
+               ;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+       i*86v32)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv32
+               ;;
+       i*86v4*)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv4
+               ;;
+       i*86v)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv
+               ;;
+       i*86sol2)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-solaris2
+               ;;
+       i386mach)
+               basic_machine=i386-mach
+               os=-mach
+               ;;
+       i386-vsta | vsta)
+               basic_machine=i386-unknown
+               os=-vsta
+               ;;
+       iris | iris4d)
+               basic_machine=mips-sgi
+               case $os in
+                   -irix*)
+                       ;;
+                   *)
+                       os=-irix4
+                       ;;
+               esac
+               ;;
+       isi68 | isi)
+               basic_machine=m68k-isi
+               os=-sysv
+               ;;
+       m88k-omron*)
+               basic_machine=m88k-omron
+               ;;
+       magnum | m3230)
+               basic_machine=mips-mips
+               os=-sysv
+               ;;
+       merlin)
+               basic_machine=ns32k-utek
+               os=-sysv
+               ;;
+       mingw32)
+               basic_machine=i386-pc
+               os=-mingw32
+               ;;
+       miniframe)
+               basic_machine=m68000-convergent
+               ;;
+       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+       mips3*-*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+               ;;
+       mips3*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+               ;;
+       mmix*)
+               basic_machine=mmix-knuth
+               os=-mmixware
+               ;;
+       monitor)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       morphos)
+               basic_machine=powerpc-unknown
+               os=-morphos
+               ;;
+       msdos)
+               basic_machine=i386-pc
+               os=-msdos
+               ;;
+       mvs)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
+       ncr3000)
+               basic_machine=i486-ncr
+               os=-sysv4
+               ;;
+       netbsd386)
+               basic_machine=i386-unknown
+               os=-netbsd
+               ;;
+       netwinder)
+               basic_machine=armv4l-rebel
+               os=-linux
+               ;;
+       news | news700 | news800 | news900)
+               basic_machine=m68k-sony
+               os=-newsos
+               ;;
+       news1000)
+               basic_machine=m68030-sony
+               os=-newsos
+               ;;
+       news-3600 | risc-news)
+               basic_machine=mips-sony
+               os=-newsos
+               ;;
+       necv70)
+               basic_machine=v70-nec
+               os=-sysv
+               ;;
+       next | m*-next )
+               basic_machine=m68k-next
+               case $os in
+                   -nextstep* )
+                       ;;
+                   -ns2*)
+                     os=-nextstep2
+                       ;;
+                   *)
+                     os=-nextstep3
+                       ;;
+               esac
+               ;;
+       nh3000)
+               basic_machine=m68k-harris
+               os=-cxux
+               ;;
+       nh[45]000)
+               basic_machine=m88k-harris
+               os=-cxux
+               ;;
+       nindy960)
+               basic_machine=i960-intel
+               os=-nindy
+               ;;
+       mon960)
+               basic_machine=i960-intel
+               os=-mon960
+               ;;
+       nonstopux)
+               basic_machine=mips-compaq
+               os=-nonstopux
+               ;;
+       np1)
+               basic_machine=np1-gould
+               ;;
+       nv1)
+               basic_machine=nv1-cray
+               os=-unicosmp
+               ;;
+       nsr-tandem)
+               basic_machine=nsr-tandem
+               ;;
+       op50n-* | op60c-*)
+               basic_machine=hppa1.1-oki
+               os=-proelf
+               ;;
+       or32 | or32-*)
+               basic_machine=or32-unknown
+               os=-coff
+               ;;
+       OSE68000 | ose68000)
+               basic_machine=m68000-ericsson
+               os=-ose
+               ;;
+       os68k)
+               basic_machine=m68k-none
+               os=-os68k
+               ;;
+       pa-hitachi)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       paragon)
+               basic_machine=i860-intel
+               os=-osf
+               ;;
+       pbd)
+               basic_machine=sparc-tti
+               ;;
+       pbb)
+               basic_machine=m68k-tti
+               ;;
+       pc532 | pc532-*)
+               basic_machine=ns32k-pc532
+               ;;
+       pentium | p5 | k5 | k6 | nexgen | viac3)
+               basic_machine=i586-pc
+               ;;
+       pentiumpro | p6 | 6x86 | athlon | athlon_*)
+               basic_machine=i686-pc
+               ;;
+       pentiumii | pentium2)
+               basic_machine=i686-pc
+               ;;
+       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumpro-* | p6-* | 6x86-* | athlon-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumii-* | pentium2-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pn)
+               basic_machine=pn-gould
+               ;;
+       power)  basic_machine=power-ibm
+               ;;
+       ppc)    basic_machine=powerpc-unknown
+               ;;
+       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppcle | powerpclittle | ppc-le | powerpc-little)
+               basic_machine=powerpcle-unknown
+               ;;
+       ppcle-* | powerpclittle-*)
+               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64)  basic_machine=powerpc64-unknown
+               ;;
+       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+               basic_machine=powerpc64le-unknown
+               ;;
+       ppc64le-* | powerpc64little-*)
+               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ps2)
+               basic_machine=i386-ibm
+               ;;
+       pw32)
+               basic_machine=i586-unknown
+               os=-pw32
+               ;;
+       rom68k)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       rm[46]00)
+               basic_machine=mips-siemens
+               ;;
+       rtpc | rtpc-*)
+               basic_machine=romp-ibm
+               ;;
+       s390 | s390-*)
+               basic_machine=s390-ibm
+               ;;
+       s390x | s390x-*)
+               basic_machine=s390x-ibm
+               ;;
+       sa29200)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       sb1)
+               basic_machine=mipsisa64sb1-unknown
+               ;;
+       sb1el)
+               basic_machine=mipsisa64sb1el-unknown
+               ;;
+       sequent)
+               basic_machine=i386-sequent
+               ;;
+       sh)
+               basic_machine=sh-hitachi
+               os=-hms
+               ;;
+       sparclite-wrs | simso-wrs)
+               basic_machine=sparclite-wrs
+               os=-vxworks
+               ;;
+       sps7)
+               basic_machine=m68k-bull
+               os=-sysv2
+               ;;
+       spur)
+               basic_machine=spur-unknown
+               ;;
+       st2000)
+               basic_machine=m68k-tandem
+               ;;
+       stratus)
+               basic_machine=i860-stratus
+               os=-sysv4
+               ;;
+       sun2)
+               basic_machine=m68000-sun
+               ;;
+       sun2os3)
+               basic_machine=m68000-sun
+               os=-sunos3
+               ;;
+       sun2os4)
+               basic_machine=m68000-sun
+               os=-sunos4
+               ;;
+       sun3os3)
+               basic_machine=m68k-sun
+               os=-sunos3
+               ;;
+       sun3os4)
+               basic_machine=m68k-sun
+               os=-sunos4
+               ;;
+       sun4os3)
+               basic_machine=sparc-sun
+               os=-sunos3
+               ;;
+       sun4os4)
+               basic_machine=sparc-sun
+               os=-sunos4
+               ;;
+       sun4sol2)
+               basic_machine=sparc-sun
+               os=-solaris2
+               ;;
+       sun3 | sun3-*)
+               basic_machine=m68k-sun
+               ;;
+       sun4)
+               basic_machine=sparc-sun
+               ;;
+       sun386 | sun386i | roadrunner)
+               basic_machine=i386-sun
+               ;;
+       sv1)
+               basic_machine=sv1-cray
+               os=-unicos
+               ;;
+       symmetry)
+               basic_machine=i386-sequent
+               os=-dynix
+               ;;
+       t3e)
+               basic_machine=alphaev5-cray
+               os=-unicos
+               ;;
+       t90)
+               basic_machine=t90-cray
+               os=-unicos
+               ;;
+        tic4x | c4x*)
+               basic_machine=tic4x-unknown
+               os=-coff
+               ;;
+       tic54x | c54x*)
+               basic_machine=tic54x-unknown
+               os=-coff
+               ;;
+       tic55x | c55x*)
+               basic_machine=tic55x-unknown
+               os=-coff
+               ;;
+       tic6x | c6x*)
+               basic_machine=tic6x-unknown
+               os=-coff
+               ;;
+       tx39)
+               basic_machine=mipstx39-unknown
+               ;;
+       tx39el)
+               basic_machine=mipstx39el-unknown
+               ;;
+       toad1)
+               basic_machine=pdp10-xkl
+               os=-tops20
+               ;;
+       tower | tower-32)
+               basic_machine=m68k-ncr
+               ;;
+       udi29k)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       ultra3)
+               basic_machine=a29k-nyu
+               os=-sym1
+               ;;
+       v810 | necv810)
+               basic_machine=v810-nec
+               os=-none
+               ;;
+       vaxv)
+               basic_machine=vax-dec
+               os=-sysv
+               ;;
+       vms)
+               basic_machine=vax-dec
+               os=-vms
+               ;;
+       vpp*|vx|vx-*)
+               basic_machine=f301-fujitsu
+               ;;
+       vxworks960)
+               basic_machine=i960-wrs
+               os=-vxworks
+               ;;
+       vxworks68)
+               basic_machine=m68k-wrs
+               os=-vxworks
+               ;;
+       vxworks29k)
+               basic_machine=a29k-wrs
+               os=-vxworks
+               ;;
+       w65*)
+               basic_machine=w65-wdc
+               os=-none
+               ;;
+       w89k-*)
+               basic_machine=hppa1.1-winbond
+               os=-proelf
+               ;;
+       xps | xps100)
+               basic_machine=xps100-honeywell
+               ;;
+       ymp)
+               basic_machine=ymp-cray
+               os=-unicos
+               ;;
+       z8k-*-coff)
+               basic_machine=z8k-unknown
+               os=-sim
+               ;;
+       none)
+               basic_machine=none-none
+               os=-none
+               ;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               basic_machine=hppa1.1-winbond
+               ;;
+       op50n)
+               basic_machine=hppa1.1-oki
+               ;;
+       op60c)
+               basic_machine=hppa1.1-oki
+               ;;
+       romp)
+               basic_machine=romp-ibm
+               ;;
+       rs6000)
+               basic_machine=rs6000-ibm
+               ;;
+       vax)
+               basic_machine=vax-dec
+               ;;
+       pdp10)
+               # there are many clones, so DEC is not a safe bet
+               basic_machine=pdp10-unknown
+               ;;
+       pdp11)
+               basic_machine=pdp11-dec
+               ;;
+       we32k)
+               basic_machine=we32k-att
+               ;;
+       sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+               basic_machine=sh-unknown
+               ;;
+       sh64)
+               basic_machine=sh64-unknown
+               ;;
+       sparc | sparcv9 | sparcv9b)
+               basic_machine=sparc-sun
+               ;;
+       cydra)
+               basic_machine=cydra-cydrome
+               ;;
+       orion)
+               basic_machine=orion-highlevel
+               ;;
+       orion105)
+               basic_machine=clipper-highlevel
+               ;;
+       mac | mpw | mac-mpw)
+               basic_machine=m68k-apple
+               ;;
+       pmac | pmac-mpw)
+               basic_machine=powerpc-apple
+               ;;
+       *-unknown)
+               # Make sure to match an already-canonicalized machine name.
+               ;;
+       *)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+       *-digital*)
+               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+               ;;
+       *-commodore*)
+               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+               ;;
+       *)
+               ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+       # -solaris* is a basic system type, with this one exception.
+       -solaris1 | -solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+               ;;
+       -solaris)
+               os=-solaris2
+               ;;
+       -svr4*)
+               os=-sysv4
+               ;;
+       -unixware*)
+               os=-sysv4.2uw
+               ;;
+       -gnu/linux*)
+               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+               ;;
+       # First accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST END IN A *, to match a version number.
+       # -sysv* is not here because it comes later, after sysvr4.
+       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+             | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+             | -aos* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
+             | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+             | -chorusos* | -chorusrdb* \
+             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
+             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+             | -powermax* | -dnix*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -qnx*)
+               case $basic_machine in
+                   x86-* | i*86-*)
+                       ;;
+                   *)
+                       os=-nto$os
+                       ;;
+               esac
+               ;;
+       -nto-qnx*)
+               ;;
+       -nto*)
+               os=`echo $os | sed -e 's|nto|nto-qnx|'`
+               ;;
+       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+             | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+               ;;
+       -mac*)
+               os=`echo $os | sed -e 's|mac|macos|'`
+               ;;
+       -linux*)
+               os=`echo $os | sed -e 's|linux|linux-gnu|'`
+               ;;
+       -sunos5*)
+               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+               ;;
+       -sunos6*)
+               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+               ;;
+       -opened*)
+               os=-openedition
+               ;;
+       -wince*)
+               os=-wince
+               ;;
+       -osfrose*)
+               os=-osfrose
+               ;;
+       -osf*)
+               os=-osf
+               ;;
+       -utek*)
+               os=-bsd
+               ;;
+       -dynix*)
+               os=-bsd
+               ;;
+       -acis*)
+               os=-aos
+               ;;
+       -atheos*)
+               os=-atheos
+               ;;
+       -386bsd)
+               os=-bsd
+               ;;
+       -ctix* | -uts*)
+               os=-sysv
+               ;;
+       -nova*)
+               os=-rtmk-nova
+               ;;
+       -ns2 )
+               os=-nextstep2
+               ;;
+       -nsk*)
+               os=-nsk
+               ;;
+       # Preserve the version number of sinix5.
+       -sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       -sinix*)
+               os=-sysv4
+               ;;
+       -triton*)
+               os=-sysv3
+               ;;
+       -oss*)
+               os=-sysv3
+               ;;
+       -svr4)
+               os=-sysv4
+               ;;
+       -svr3)
+               os=-sysv3
+               ;;
+       -sysvr4)
+               os=-sysv4
+               ;;
+       # This must come after -sysvr4.
+       -sysv*)
+               ;;
+       -ose*)
+               os=-ose
+               ;;
+       -es1800*)
+               os=-ose
+               ;;
+       -xenix)
+               os=-xenix
+               ;;
+       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+               os=-mint
+               ;;
+       -aros*)
+               os=-aros
+               ;;
+       -kaos*)
+               os=-kaos
+               ;;
+       -none)
+               ;;
+       *)
+               # Get rid of the `-' at the beginning of $os.
+               os=`echo $os | sed 's/[^-]*-//'`
+               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+       *-acorn)
+               os=-riscix1.2
+               ;;
+       arm*-rebel)
+               os=-linux
+               ;;
+       arm*-semi)
+               os=-aout
+               ;;
+       # This must come before the *-dec entry.
+       pdp10-*)
+               os=-tops20
+               ;;
+       pdp11-*)
+               os=-none
+               ;;
+       *-dec | vax-*)
+               os=-ultrix4.2
+               ;;
+       m68*-apollo)
+               os=-domain
+               ;;
+       i386-sun)
+               os=-sunos4.0.2
+               ;;
+       m68000-sun)
+               os=-sunos3
+               # This also exists in the configure program, but was not the
+               # default.
+               # os=-sunos4
+               ;;
+       m68*-cisco)
+               os=-aout
+               ;;
+       mips*-cisco)
+               os=-elf
+               ;;
+       mips*-*)
+               os=-elf
+               ;;
+       or32-*)
+               os=-coff
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=-sysv3
+               ;;
+       sparc-* | *-sun)
+               os=-sunos4.1.1
+               ;;
+       *-be)
+               os=-beos
+               ;;
+       *-ibm)
+               os=-aix
+               ;;
+       *-wec)
+               os=-proelf
+               ;;
+       *-winbond)
+               os=-proelf
+               ;;
+       *-oki)
+               os=-proelf
+               ;;
+       *-hp)
+               os=-hpux
+               ;;
+       *-hitachi)
+               os=-hiux
+               ;;
+       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+               os=-sysv
+               ;;
+       *-cbm)
+               os=-amigaos
+               ;;
+       *-dg)
+               os=-dgux
+               ;;
+       *-dolphin)
+               os=-sysv3
+               ;;
+       m68k-ccur)
+               os=-rtu
+               ;;
+       m88k-omron*)
+               os=-luna
+               ;;
+       *-next )
+               os=-nextstep
+               ;;
+       *-sequent)
+               os=-ptx
+               ;;
+       *-crds)
+               os=-unos
+               ;;
+       *-ns)
+               os=-genix
+               ;;
+       i370-*)
+               os=-mvs
+               ;;
+       *-next)
+               os=-nextstep3
+               ;;
+       *-gould)
+               os=-sysv
+               ;;
+       *-highlevel)
+               os=-bsd
+               ;;
+       *-encore)
+               os=-bsd
+               ;;
+       *-sgi)
+               os=-irix
+               ;;
+       *-siemens)
+               os=-sysv4
+               ;;
+       *-masscomp)
+               os=-rtu
+               ;;
+       f30[01]-fujitsu | f700-fujitsu)
+               os=-uxpv
+               ;;
+       *-rom68k)
+               os=-coff
+               ;;
+       *-*bug)
+               os=-coff
+               ;;
+       *-apple)
+               os=-macos
+               ;;
+       *-atari*)
+               os=-mint
+               ;;
+       *)
+               os=-none
+               ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+       *-unknown)
+               case $os in
+                       -riscix*)
+                               vendor=acorn
+                               ;;
+                       -sunos*)
+                               vendor=sun
+                               ;;
+                       -aix*)
+                               vendor=ibm
+                               ;;
+                       -beos*)
+                               vendor=be
+                               ;;
+                       -hpux*)
+                               vendor=hp
+                               ;;
+                       -mpeix*)
+                               vendor=hp
+                               ;;
+                       -hiux*)
+                               vendor=hitachi
+                               ;;
+                       -unos*)
+                               vendor=crds
+                               ;;
+                       -dgux*)
+                               vendor=dg
+                               ;;
+                       -luna*)
+                               vendor=omron
+                               ;;
+                       -genix*)
+                               vendor=ns
+                               ;;
+                       -mvs* | -opened*)
+                               vendor=ibm
+                               ;;
+                       -ptx*)
+                               vendor=sequent
+                               ;;
+                       -vxsim* | -vxworks* | -windiss*)
+                               vendor=wrs
+                               ;;
+                       -aux*)
+                               vendor=apple
+                               ;;
+                       -hms*)
+                               vendor=hitachi
+                               ;;
+                       -mpw* | -macos*)
+                               vendor=apple
+                               ;;
+                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+                               vendor=atari
+                               ;;
+                       -vos*)
+                               vendor=stratus
+                               ;;
+               esac
+               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+               ;;
+esac
+
+echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..05de30d
--- /dev/null
+++ b/configure
@@ -0,0 +1,9058 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13 
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_help="$ac_help
+  --disable-pgp              Disable PGP support"
+ac_help="$ac_help
+  --disable-smime            Disable SMIME support"
+ac_help="$ac_help
+  --with-mixmaster[=PATH]    Include Mixmaster support"
+ac_help="$ac_help
+  --with-slang[=DIR]         Use S-Lang instead of ncurses"
+ac_help="$ac_help
+  --with-curses=DIR          Where ncurses is installed "
+ac_help="$ac_help
+  --with-regex               Use the GNU regex library "
+ac_help="$ac_help
+  --with-homespool[=FILE]    File in user's directory where new mail is spooled"
+ac_help="$ac_help
+  --with-mailpath=DIR        Directory where spool mailboxes are located"
+ac_help="$ac_help
+  --enable-external-dotlock  Force use of an external dotlock program"
+ac_help="$ac_help
+  --with-docdir=PATH         Specify where to put the documentation"
+ac_help="$ac_help
+  --with-domain=DOMAIN       Specify your DNS domain name"
+ac_help="$ac_help
+  --enable-pop               Enable POP3 support"
+ac_help="$ac_help
+  --enable-imap              Enable IMAP support"
+ac_help="$ac_help
+  --enable-nntp              Enable NNTP support"
+ac_help="$ac_help
+    --with-gss[=PFX]         Compile in GSSAPI authentication for IMAP"
+ac_help="$ac_help
+  --with-ssl[=PFX]           Compile in SSL support for POP/IMAP"
+ac_help="$ac_help
+  --with-nss[=PFX]           Compile in SSL support for POP/IMAP via NSS"
+ac_help="$ac_help
+  --with-sasl[=PFX]          Use Cyrus SASL library for POP/IMAP authentication"
+ac_help="$ac_help
+  --with-sasl2[=PFX]         Use Cyrus SASL library version 2 for POP/IMAP authentication"
+ac_help="$ac_help
+  --with-idn=[PFX]             Use GNU libidn for domain names"
+ac_help="$ac_help
+  --enable-debug             Enable debugging support"
+ac_help="$ac_help
+  --enable-flock             Use flock() to lock files"
+ac_help="$ac_help
+  --disable-fcntl            Do NOT use fcntl() to lock files "
+ac_help="$ac_help
+  --disable-warnings         Turn off compiler warnings (not recommended)"
+ac_help="$ac_help
+  --enable-nfs-fix           Work around an NFS with broken attributes caching "
+ac_help="$ac_help
+  --enable-buffy-size        Use file size attribute instead of access time "
+ac_help="$ac_help
+  --enable-mailtool          Enable Sun mailtool attachments support "
+ac_help="$ac_help
+  --enable-locales-fix       The result of isprint() is unreliable "
+ac_help="$ac_help
+  --with-exec-shell=SHELL    Specify alternate shell (ONLY if /bin/sh is broken)"
+ac_help="$ac_help
+  --enable-exact-address     Enable regeneration of email addresses"
+ac_help="$ac_help
+  --disable-iconv            Disable iconv support"
+ac_help="$ac_help
+  --with-libiconv-prefix=DIR Search for libiconv in DIR/include and DIR/lib"
+ac_help="$ac_help
+  --disable-nls              Do not use Native Language Support"
+ac_help="$ac_help
+  --with-included-gettext    Use the GNU gettext library included here"
+ac_help="$ac_help
+  --without-wc-funcs         Do not use the system's wchar_t functions"
+ac_help="$ac_help
+  --with-libesmtp=DIR      Compile in support for libesmtp for the MTA"
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  case "$ac_option" in
+  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) ac_optarg= ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case "$ac_option" in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir="$ac_optarg" ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build="$ac_optarg" ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file="$ac_optarg" ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir="$ac_optarg" ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    eval "enable_${ac_feature}=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix="$ac_optarg" ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he)
+    # Omit some internal or obsolete options to make the list less imposing.
+    # This message is too long to be a string in the A/UX 3.1 sh.
+    cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+  --cache-file=FILE       cache test results in FILE
+  --help                  print this message
+  --no-create             do not create output files
+  --quiet, --silent       do not print \`checking...' messages
+  --version               print the version of autoconf that created configure
+Directory and file names:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [same as prefix]
+  --bindir=DIR            user executables in DIR [EPREFIX/bin]
+  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
+  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
+  --datadir=DIR           read-only architecture-independent data in DIR
+                          [PREFIX/share]
+  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
+                          [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
+  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
+  --includedir=DIR        C header files in DIR [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
+  --infodir=DIR           info documentation in DIR [PREFIX/info]
+  --mandir=DIR            man documentation in DIR [PREFIX/man]
+  --srcdir=DIR            find the sources in DIR [configure dir or ..]
+  --program-prefix=PREFIX prepend PREFIX to installed program names
+  --program-suffix=SUFFIX append SUFFIX to installed program names
+  --program-transform-name=PROGRAM
+                          run sed PROGRAM on installed program names
+EOF
+    cat << EOF
+Host type:
+  --build=BUILD           configure for building on BUILD [BUILD=HOST]
+  --host=HOST             configure for HOST [guessed]
+  --target=TARGET         configure for TARGET [TARGET=HOST]
+Features and packages:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --x-includes=DIR        X include files are in DIR
+  --x-libraries=DIR       X library files are in DIR
+EOF
+    if test -n "$ac_help"; then
+      echo "--enable and --with options recognized:$ac_help"
+    fi
+    exit 0 ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host="$ac_optarg" ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir="$ac_optarg" ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir="$ac_optarg" ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir="$ac_optarg" ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir="$ac_optarg" ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir="$ac_optarg" ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir="$ac_optarg" ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir="$ac_optarg" ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix="$ac_optarg" ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix="$ac_optarg" ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix="$ac_optarg" ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name="$ac_optarg" ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir="$ac_optarg" ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir="$ac_optarg" ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site="$ac_optarg" ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir="$ac_optarg" ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir="$ac_optarg" ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target="$ac_optarg" ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers)
+    echo "configure generated by autoconf version 2.13"
+    exit 0 ;;
+
+  -with-* | --with-*)
+    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_${ac_package}='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    eval "with_${ac_package}=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes="$ac_optarg" ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries="$ac_optarg" ;;
+
+  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+    ;;
+
+  *)
+    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+      echo "configure: warning: $ac_option: invalid host type" 1>&2
+    fi
+    if test "x$nonopt" != xNONE; then
+      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+    fi
+    nonopt="$ac_option"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+  exec 6>/dev/null
+else
+  exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+  case "$ac_arg" in
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c) ;;
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+  *" "*|*"     "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+  esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set.  These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=mutt.h
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_prog=$0
+  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+  else
+    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+  fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    echo "loading site script $ac_site_file"
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  echo "loading cache $cache_file"
+  . $cache_file
+else
+  echo "creating cache $cache_file"
+  > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+    ac_n= ac_c='
+' ac_t='       '
+  else
+    ac_n=-n ac_c= ac_t=
+  fi
+else
+  ac_n= ac_c='\c' ac_t=
+fi
+
+
+
+
+
+
+mutt_cv_version=`cat $srcdir/VERSION`
+
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:635: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    IFS="${IFS=        }"; ac_save_IFS="$IFS"; IFS=":"
+  for ac_dir in $PATH; do
+    # Account for people who put trailing slashes in PATH elements.
+    case "$ac_dir/" in
+    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+    *)
+      # OSF1 and SCO ODT 3.0 have their own names for install.
+      # Don't use installbsd from OSF since it installs stuff as root
+      # by default.
+      for ac_prog in ginstall scoinst install; do
+        if test -f $ac_dir/$ac_prog; then
+         if test $ac_prog = install &&
+            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         else
+           ac_cv_path_install="$ac_dir/$ac_prog -c"
+           break 2
+         fi
+       fi
+      done
+      ;;
+    esac
+  done
+  IFS="$ac_save_IFS"
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL="$ac_cv_path_install"
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL="$ac_install_sh"
+  fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
+echo "configure:688: checking whether build environment is sane" >&5
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftestfile`
+   fi
+   if test "$*" != "X $srcdir/configure conftestfile" \
+      && test "$*" != "X conftestfile $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { echo "configure: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" 1>&2; exit 1; }
+   fi
+
+   test "$2" = conftestfile
+   )
+then
+   # Ok.
+   :
+else
+   { echo "configure: error: newly created file is older than distributed files!
+Check your system clock" 1>&2; exit 1; }
+fi
+rm -f conftest*
+echo "$ac_t""yes" 1>&6
+if test "$program_transform_name" = s,x,x,; then
+  program_transform_name=
+else
+  # Double any \ or $.  echo might interpret backslashes.
+  cat <<\EOF_SED > conftestsed
+s,\\,\\\\,g; s,\$,$$,g
+EOF_SED
+  program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
+  rm -f conftestsed
+fi
+test "$program_prefix" != NONE &&
+  program_transform_name="s,^,${program_prefix},; $program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
+
+# sed with no file args requires a program.
+test "$program_transform_name" = "" && program_transform_name="s,x,x,"
+
+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:745: checking whether ${MAKE-make} sets \${MAKE}" >&5
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftestmake <<\EOF
+all:
+       @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  SET_MAKE=
+else
+  echo "$ac_t""no" 1>&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+PACKAGE=mutt
+
+VERSION=$mutt_cv_version
+
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+  { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
+fi
+cat >> confdefs.h <<EOF
+#define PACKAGE "$PACKAGE"
+EOF
+
+cat >> confdefs.h <<EOF
+#define VERSION "$VERSION"
+EOF
+
+
+
+missing_dir=`cd $ac_aux_dir && pwd`
+echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
+echo "configure:791: checking for working aclocal" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (aclocal --version) < /dev/null > /dev/null 2>&1; then
+   ACLOCAL=aclocal
+   echo "$ac_t""found" 1>&6
+else
+   ACLOCAL="$missing_dir/missing aclocal"
+   echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
+echo "configure:804: checking for working autoconf" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (autoconf --version) < /dev/null > /dev/null 2>&1; then
+   AUTOCONF=autoconf
+   echo "$ac_t""found" 1>&6
+else
+   AUTOCONF="$missing_dir/missing autoconf"
+   echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working automake""... $ac_c" 1>&6
+echo "configure:817: checking for working automake" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (automake --version) < /dev/null > /dev/null 2>&1; then
+   AUTOMAKE=automake
+   echo "$ac_t""found" 1>&6
+else
+   AUTOMAKE="$missing_dir/missing automake"
+   echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
+echo "configure:830: checking for working autoheader" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (autoheader --version) < /dev/null > /dev/null 2>&1; then
+   AUTOHEADER=autoheader
+   echo "$ac_t""found" 1>&6
+else
+   AUTOHEADER="$missing_dir/missing autoheader"
+   echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
+echo "configure:843: checking for working makeinfo" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
+   MAKEINFO=makeinfo
+   echo "$ac_t""found" 1>&6
+else
+   MAKEINFO="$missing_dir/missing makeinfo"
+   echo "$ac_t""missing" 1>&6
+fi
+
+
+
+
+
+ALL_LINGUAS="de ru it es uk fr pl nl cs id sk ko el zh_TW zh_CN pt_BR eo gl sv da lt tr ja hu et ca bg"
+
+
+# Make sure we can run config.sub.
+if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
+else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking host system type""... $ac_c" 1>&6
+echo "configure:868: checking host system type" >&5
+
+host_alias=$host
+case "$host_alias" in
+NONE)
+  case $nonopt in
+  NONE)
+    if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
+    else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
+    fi ;;
+  *) host_alias=$nonopt ;;
+  esac ;;
+esac
+
+host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
+host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$host" 1>&6
+
+
+echo $ac_n "checking for prefix""... $ac_c" 1>&6
+echo "configure:890: checking for prefix" >&5
+if test x$prefix = xNONE; then
+        mutt_cv_prefix=$ac_default_prefix
+else
+        mutt_cv_prefix=$prefix
+fi
+echo "$ac_t""$mutt_cv_prefix" 1>&6
+
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:901: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="gcc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:931: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_prog_rejected=no
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+        ac_prog_rejected=yes
+       continue
+      fi
+      ac_cv_prog_CC="cc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# -gt 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    set dummy "$ac_dir/$ac_word" "$@"
+    shift
+    ac_cv_prog_CC="$@"
+  fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  if test -z "$CC"; then
+    case "`uname -s`" in
+    *win32* | *WIN32*)
+      # Extract the first word of "cl", so it can be a program name with args.
+set dummy cl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:982: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="cl"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+ ;;
+    esac
+  fi
+  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:1014: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 1025 "configure"
+#include "confdefs.h"
+
+main(){return(0);}
+EOF
+if { (eval echo configure:1030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  ac_cv_prog_cc_works=yes
+  # If we can't run a trivial program, we are probably using a cross compiler.
+  if (./conftest; exit) 2>/dev/null; then
+    ac_cv_prog_cc_cross=no
+  else
+    ac_cv_prog_cc_cross=yes
+  fi
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:1056: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:1061: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.c <<EOF
+#ifdef __GNUC__
+  yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1070: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+  ac_cv_prog_gcc=yes
+else
+  ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:1089: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+  ac_cv_prog_cc_g=yes
+else
+  ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS="$ac_save_CFLAGS"
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+
+
+        echo $ac_n "checking for strerror in -lcposix""... $ac_c" 1>&6
+echo "configure:1122: checking for strerror in -lcposix" >&5
+ac_lib_var=`echo cposix'_'strerror | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lcposix  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1130 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char strerror();
+
+int main() {
+strerror()
+; return 0; }
+EOF
+if { (eval echo configure:1141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  LIBS="$LIBS -lcposix"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  
+
+
+
+
+echo $ac_n "checking for ${CC-cc} option to accept ANSI C""... $ac_c" 1>&6
+echo "configure:1167: checking for ${CC-cc} option to accept ANSI C" >&5
+if eval "test \"`echo '$''{'am_cv_prog_cc_stdc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  am_cv_prog_cc_stdc=no
+ac_save_CC="$CC"
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX                  -qlanglvl=ansi
+# Ultrix and OSF/1     -std1
+# HP-UX                        -Aa -D_HPUX_SOURCE
+# SVR4                 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  cat > conftest.$ac_ext <<EOF
+#line 1183 "configure"
+#include "confdefs.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+
+int main() {
+
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+
+; return 0; }
+EOF
+if { (eval echo configure:1220: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  am_cv_prog_cc_stdc="$ac_arg"; break
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+done
+CC="$ac_save_CC"
+
+fi
+
+if test -z "$am_cv_prog_cc_stdc"; then
+  echo "$ac_t""none needed" 1>&6
+else
+  echo "$ac_t""$am_cv_prog_cc_stdc" 1>&6
+fi
+case "x$am_cv_prog_cc_stdc" in
+  x|xno) ;;
+  *) CC="$CC $am_cv_prog_cc_stdc" ;;
+esac
+
+echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:1244: checking how to run the C preprocessor" >&5
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    # This must be in double quotes, not single quotes, because CPP may get
+  # substituted into the Makefile and "${CC-cc}" will confuse make.
+  CPP="${CC-cc} -E"
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp.
+  cat > conftest.$ac_ext <<EOF
+#line 1259 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1265: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -E -traditional-cpp"
+  cat > conftest.$ac_ext <<EOF
+#line 1276 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1282: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -nologo -E"
+  cat > conftest.$ac_ext <<EOF
+#line 1293 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1299: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP=/lib/cpp
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+  ac_cv_prog_CPP="$CPP"
+fi
+  CPP="$ac_cv_prog_CPP"
+else
+  ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
+
+
+
+echo $ac_n "checking for function prototypes""... $ac_c" 1>&6
+echo "configure:1326: checking for function prototypes" >&5
+if test "$am_cv_prog_cc_stdc" != no; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define PROTOTYPES 1
+EOF
+
+  U= ANSI2KNR=
+else
+  echo "$ac_t""no" 1>&6
+  U=_ ANSI2KNR=./ansi2knr
+  # Ensure some checks needed by ansi2knr itself.
+  echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+echo "configure:1339: checking for ANSI C header files" >&5
+if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1344 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1352: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  ac_cv_header_stdc=yes
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 1369 "configure"
+#include "confdefs.h"
+#include <string.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "memchr" >/dev/null 2>&1; then
+  :
+else
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 1387 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "free" >/dev/null 2>&1; then
+  :
+else
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+if test "$cross_compiling" = yes; then
+  :
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1408 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int main () { int i; for (i = 0; i < 256; i++)
+if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
+exit (0); }
+
+EOF
+if { (eval echo configure:1419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  :
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_header_stdc=no
+fi
+rm -fr conftest*
+fi
+
+fi
+fi
+
+echo "$ac_t""$ac_cv_header_stdc" 1>&6
+if test $ac_cv_header_stdc = yes; then
+  cat >> confdefs.h <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+  for ac_hdr in string.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:1446: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1451 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1456: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+fi
+
+if test "x$U" != "x"; then
+  { echo "configure: error: Compiler not ANSI compliant" 1>&2; exit 1; }
+fi
+echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:1488: checking how to run the C preprocessor" >&5
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    # This must be in double quotes, not single quotes, because CPP may get
+  # substituted into the Makefile and "${CC-cc}" will confuse make.
+  CPP="${CC-cc} -E"
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp.
+  cat > conftest.$ac_ext <<EOF
+#line 1503 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1509: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -E -traditional-cpp"
+  cat > conftest.$ac_ext <<EOF
+#line 1520 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1526: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -nologo -E"
+  cat > conftest.$ac_ext <<EOF
+#line 1537 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1543: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP=/lib/cpp
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+  ac_cv_prog_CPP="$CPP"
+fi
+  CPP="$ac_cv_prog_CPP"
+else
+  ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
+
+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:1568: checking whether ${MAKE-make} sets \${MAKE}" >&5
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftestmake <<\EOF
+all:
+       @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  SET_MAKE=
+else
+  echo "$ac_t""no" 1>&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:1606: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    IFS="${IFS=        }"; ac_save_IFS="$IFS"; IFS=":"
+  for ac_dir in $PATH; do
+    # Account for people who put trailing slashes in PATH elements.
+    case "$ac_dir/" in
+    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+    *)
+      # OSF1 and SCO ODT 3.0 have their own names for install.
+      # Don't use installbsd from OSF since it installs stuff as root
+      # by default.
+      for ac_prog in ginstall scoinst install; do
+        if test -f $ac_dir/$ac_prog; then
+         if test $ac_prog = install &&
+            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         else
+           ac_cv_path_install="$ac_dir/$ac_prog -c"
+           break 2
+         fi
+       fi
+      done
+      ;;
+    esac
+  done
+  IFS="$ac_save_IFS"
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL="$ac_cv_path_install"
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL="$ac_install_sh"
+  fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+# Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1661: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_RANLIB="ranlib"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
+fi
+fi
+RANLIB="$ac_cv_prog_RANLIB"
+if test -n "$RANLIB"; then
+  echo "$ac_t""$RANLIB" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+echo $ac_n "checking build system type""... $ac_c" 1>&6
+echo "configure:1689: checking build system type" >&5
+
+build_alias=$build
+case "$build_alias" in
+NONE)
+  case $nonopt in
+  NONE) build_alias=$host_alias ;;
+  *) build_alias=$nonopt ;;
+  esac ;;
+esac
+
+build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
+build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$build" 1>&6
+
+if test $host != $build; then
+  ac_tool_prefix=${host_alias}-
+else
+  ac_tool_prefix=
+fi
+
+# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1715: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_AR="${ac_tool_prefix}ar"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+AR="$ac_cv_prog_AR"
+if test -n "$AR"; then
+  echo "$ac_t""$AR" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+if test -z "$ac_cv_prog_AR"; then
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1747: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_AR="ar"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="ar"
+fi
+fi
+AR="$ac_cv_prog_AR"
+if test -n "$AR"; then
+  echo "$ac_t""$AR" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+  AR="ar"
+fi
+fi
+
+
+echo $ac_n "checking for inline""... $ac_c" 1>&6
+echo "configure:1781: checking for inline" >&5
+if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat > conftest.$ac_ext <<EOF
+#line 1788 "configure"
+#include "confdefs.h"
+
+int main() {
+} $ac_kw foo() {
+; return 0; }
+EOF
+if { (eval echo configure:1795: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_c_inline=$ac_kw; break
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+done
+
+fi
+
+echo "$ac_t""$ac_cv_c_inline" 1>&6
+case "$ac_cv_c_inline" in
+  inline | yes) ;;
+  no) cat >> confdefs.h <<\EOF
+#define inline 
+EOF
+ ;;
+  *)  cat >> confdefs.h <<EOF
+#define inline $ac_cv_c_inline
+EOF
+ ;;
+esac
+
+echo $ac_n "checking for working const""... $ac_c" 1>&6
+echo "configure:1821: checking for working const" >&5
+if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1826 "configure"
+#include "confdefs.h"
+
+int main() {
+
+/* Ultrix mips cc rejects this.  */
+typedef int charset[2]; const charset x;
+/* SunOS 4.1.1 cc rejects this.  */
+char const *const *ccp;
+char **p;
+/* NEC SVR4.0.2 mips cc rejects this.  */
+struct point {int x, y;};
+static struct point const zero = {0,0};
+/* AIX XL C 1.02.0.0 rejects this.
+   It does not let you subtract one const X* pointer from another in an arm
+   of an if-expression whose if-part is not a constant expression */
+const char *g = "string";
+ccp = &g + (g ? g-g : 0);
+/* HPUX 7.0 cc rejects these. */
+++ccp;
+p = (char**) ccp;
+ccp = (char const *const *) p;
+{ /* SCO 3.2v4 cc rejects this.  */
+  char *t;
+  char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+  *t++ = 0;
+}
+{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+  int x[] = {25, 17};
+  const int *foo = &x[0];
+  ++foo;
+}
+{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+  typedef const int *iptr;
+  iptr p = 0;
+  ++p;
+}
+{ /* AIX XL C 1.02.0.0 rejects this saying
+     "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+  struct s { int j; const int *ap[3]; };
+  struct s *b; b->j = 5;
+}
+{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+  const int foo = 10;
+}
+
+; return 0; }
+EOF
+if { (eval echo configure:1875: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_c_const=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_c_const=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_c_const" 1>&6
+if test $ac_cv_c_const = no; then
+  cat >> confdefs.h <<\EOF
+#define const 
+EOF
+
+fi
+
+
+# Extract the first word of "dbx", so it can be a program name with args.
+set dummy dbx; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1899: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_DBX'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$DBX" in
+  /*)
+  ac_cv_path_DBX="$DBX" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_DBX="$DBX" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_DBX="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_DBX" && ac_cv_path_DBX="no"
+  ;;
+esac
+fi
+DBX="$ac_cv_path_DBX"
+if test -n "$DBX"; then
+  echo "$ac_t""$DBX" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+# Extract the first word of "gdb", so it can be a program name with args.
+set dummy gdb; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1935: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_GDB'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$GDB" in
+  /*)
+  ac_cv_path_GDB="$GDB" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_GDB="$GDB" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_GDB="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_GDB" && ac_cv_path_GDB="no"
+  ;;
+esac
+fi
+GDB="$ac_cv_path_GDB"
+if test -n "$GDB"; then
+  echo "$ac_t""$GDB" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+# Extract the first word of "sdb", so it can be a program name with args.
+set dummy sdb; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1971: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_SDB'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$SDB" in
+  /*)
+  ac_cv_path_SDB="$SDB" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_SDB="$SDB" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_SDB="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_SDB" && ac_cv_path_SDB="no"
+  ;;
+esac
+fi
+SDB="$ac_cv_path_SDB"
+if test -n "$SDB"; then
+  echo "$ac_t""$SDB" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+if test $GDB != no ; then
+        DEBUGGER=$GDB
+elif test $DBX != no ; then
+        DEBUGGER=$DBX
+elif test $SDB != no ; then
+        DEBUGGER=$SDB
+else
+        DEBUGGER=no
+fi
+
+
+
+# The following templates should be used with newer automakes
+# instead of acconfig.h
+#
+#AH_TEMPLATE([sig_atomic_t],
+#            [/* Define to `int' if <signal.h> doesn't define.])
+#AH_TEMPLATE([HAVE_START_COLOR],
+#            [Define if you have start_color, as a function or macro.])
+#AH_TEMPLATE([HAVE_TYPEAHEAD],
+#            [Define if you have typeahead, as a function or macro.])
+#AH_TEMPLATE([HAVE_BKGDSET],
+#            [Define if you have bkgdset, as a function or macro.])
+#AH_TEMPLATE([HAVE_CURS_SET],
+#            [Define if you have curs_set, as a function or macro.])
+#AH_TEMPLATE([HAVE_META],
+#            [Define if you have meta, as a function or macro.])
+#AH_TEMPLATE([HAVE_USE_DEFAULT_COLORS],
+#            [Define if you have use_default_colors, as a function or macro.])
+#AH_TEMPLATE([HAVE_RESIZETERM],
+#            [Define if you have resizeterm, as a function or macro.])
+#AH_TEMPLATE([SIG_ATOMIC_VOLATILE_T],
+#            [Some systems declare sig_atomic_t as volatile, some others -- no.
+#             This define will have value `sig_atomic_t' or
+#             `volatile sig_atomic_t' accordingly.])
+#AH_TEMPLATE([ICONV_NONTRANS],
+#            [Define as 1 if iconv() only converts exactly and we should treat
+#             all return values other than (size_t)(-1) as equivalent.])
+
+
+ac_aux_path_sendmail=/usr/sbin:/usr/lib
+# Extract the first word of "sendmail", so it can be a program name with args.
+set dummy sendmail; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:2049: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_SENDMAIL'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$SENDMAIL" in
+  /*)
+  ac_cv_path_SENDMAIL="$SENDMAIL" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_SENDMAIL="$SENDMAIL" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH:$ac_aux_path_sendmail"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_SENDMAIL="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_SENDMAIL" && ac_cv_path_SENDMAIL="/usr/sbin/sendmail"
+  ;;
+esac
+fi
+SENDMAIL="$ac_cv_path_SENDMAIL"
+if test -n "$SENDMAIL"; then
+  echo "$ac_t""$SENDMAIL" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+cat >> confdefs.h <<EOF
+#define SENDMAIL "$ac_cv_path_SENDMAIL"
+EOF
+
+
+OPS='$(srcdir)/OPS'
+if test -f $srcdir/EXPORTABLE ; then
+        SUBVERSION="us"
+else
+        SUBVERSION="i"
+
+        # Check whether --enable-pgp or --disable-pgp was given.
+if test "${enable_pgp+set}" = set; then
+  enableval="$enable_pgp"
+         if test x$enableval = xno ; then
+                        have_pgp=no
+                fi
+        
+fi
+
+
+        if test x$have_pgp != xno ; then
+                cat >> confdefs.h <<\EOF
+#define CRYPT_BACKEND_CLASSIC_PGP 1
+EOF
+
+                PGPAUX_TARGET="pgpring pgpewrap"
+                MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS pgp.o pgpinvoke.o pgpkey.o pgplib.o gnupgparse.o pgpmicalg.o pgppacket.o"
+        fi
+
+       # Check whether --enable-smime or --disable-smime was given.
+if test "${enable_smime+set}" = set; then
+  enableval="$enable_smime"
+       if test x$enableval = xno ; then
+                       have_smime=no
+               fi
+       
+fi
+
+       if test x$have_smime != xno ; then
+               cat >> confdefs.h <<\EOF
+#define CRYPT_BACKEND_CLASSIC_SMIME 1
+EOF
+
+               MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS smime.o "
+               SMIMEAUX_TARGET="smime_keys"
+       fi
+  
+        # Check whether --with-mixmaster or --without-mixmaster was given.
+if test "${with_mixmaster+set}" = set; then
+  withval="$with_mixmaster"
+  if test -x "$withval" ; then
+                        MIXMASTER="$withval"
+                 else
+                        MIXMASTER="mixmaster"
+                 fi
+                 OPS="$OPS \$(srcdir)/OPS.MIX"
+                 MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS remailer.o"
+                 cat >> confdefs.h <<EOF
+#define MIXMASTER "$MIXMASTER"
+EOF
+
+                
+fi
+
+
+fi
+# We now require all OPS
+OPS="$OPS \$(srcdir)/OPS.PGP \$(srcdir)/OPS.SMIME \$(srcdir)/OPS.CRYPT "
+
+
+
+
+
+
+cat >> confdefs.h <<EOF
+#define SUBVERSION "$SUBVERSION"
+EOF
+
+
+
+# Extract the first word of "ispell", so it can be a program name with args.
+set dummy ispell; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:2167: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_ISPELL'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$ISPELL" in
+  /*)
+  ac_cv_path_ISPELL="$ISPELL" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_ISPELL="$ISPELL" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_ISPELL="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_ISPELL" && ac_cv_path_ISPELL="no"
+  ;;
+esac
+fi
+ISPELL="$ac_cv_path_ISPELL"
+if test -n "$ISPELL"; then
+  echo "$ac_t""$ISPELL" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+if test $ISPELL != no; then
+        cat >> confdefs.h <<EOF
+#define ISPELL "$ISPELL"
+EOF
+
+fi
+
+# Check whether --with-slang or --without-slang was given.
+if test "${with_slang+set}" = set; then
+  withval="$with_slang"
+  echo $ac_n "checking if this is a BSD system""... $ac_c" 1>&6
+echo "configure:2211: checking if this is a BSD system" >&5
+if eval "test \"`echo '$''{'mutt_cv_bsdish'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+  mutt_cv_bsdish=no
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2219 "configure"
+#include "confdefs.h"
+#include <sys/param.h>
+
+main ()
+{
+#ifdef BSD
+        exit (0);
+#else
+        exit (1);
+#endif
+}
+EOF
+if { (eval echo configure:2232: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  mutt_cv_bsdish=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  mutt_cv_bsdish=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$mutt_cv_bsdish" 1>&6
+
+        echo $ac_n "checking for S-Lang""... $ac_c" 1>&6
+echo "configure:2249: checking for S-Lang" >&5
+        if test $withval = yes; then
+                if test -d $srcdir/../slang; then
+                        mutt_cv_slang=$srcdir/../slang/src
+                        CPPFLAGS="$CPPFLAGS -I${mutt_cv_slang}"
+                        LDFLAGS="$LDFLAGS -L${mutt_cv_slang}/objs"
+                else
+                        if test -d $mutt_cv_prefix/include/slang; then
+                                CPPFLAGS="$CPPFLAGS -I$mutt_cv_prefix/include/slang"
+                        elif test -d /usr/include/slang; then
+                                CPPFLAGS="$CPPFLAGS -I/usr/include/slang"
+                        fi
+                        mutt_cv_slang=yes
+                fi
+        else
+                                if test -f $withval/src/slang.h; then
+                        mutt_cv_slang=$withval/src
+                        CPPFLAGS="$CPPFLAGS -I${mutt_cv_slang}"
+                        LDFLAGS="$LDFLAGS -L${mutt_cv_slang}/objs"
+                else
+                                                mutt_cv_slang=$withval
+                        if test -d $withval/include/slang; then
+                                CPPFLAGS="$CPPFLAGS -I${withval}/include/slang"
+                        elif test -d $withval/include; then
+                                CPPFLAGS="$CPPFLAGS -I${withval}/include"
+                        fi
+                        LDFLAGS="$LDFLAGS -L${withval}/lib"
+                fi
+        fi
+        echo "$ac_t""$mutt_cv_slang" 1>&6
+        if test $mutt_cv_bsdish = yes; then
+                echo $ac_n "checking for main in -ltermlib""... $ac_c" 1>&6
+echo "configure:2281: checking for main in -ltermlib" >&5
+ac_lib_var=`echo termlib'_'main | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-ltermlib  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2289 "configure"
+#include "confdefs.h"
+
+int main() {
+main()
+; return 0; }
+EOF
+if { (eval echo configure:2296: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo termlib | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-ltermlib $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+        fi
+        cat >> confdefs.h <<\EOF
+#define USE_SLANG_CURSES 1
+EOF
+
+        cat >> confdefs.h <<\EOF
+#define HAVE_COLOR 1
+EOF
+
+        MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS resize.o"
+
+        
+        echo $ac_n "checking for SLtt_get_terminfo in -lslang""... $ac_c" 1>&6
+echo "configure:2336: checking for SLtt_get_terminfo in -lslang" >&5
+ac_lib_var=`echo slang'_'SLtt_get_terminfo | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lslang -lm $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2344 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char SLtt_get_terminfo();
+
+int main() {
+SLtt_get_terminfo()
+; return 0; }
+EOF
+if { (eval echo configure:2355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  MUTTLIBS="$MUTTLIBS -lslang -lm"
+else
+  echo "$ac_t""no" 1>&6
+{ echo "configure: error: unable to compile.  check config.log" 1>&2; exit 1; }
+fi
+
+
+        
+else
+  mutt_cv_curses=/usr
+        # Check whether --with-curses or --without-curses was given.
+if test "${with_curses+set}" = set; then
+  withval="$with_curses"
+  if test $withval != yes; then
+                        mutt_cv_curses=$withval
+                fi
+                if test x$mutt_cv_curses != x/usr; then
+                        LDFLAGS="-L${mutt_cv_curses}/lib $LDFLAGS"
+                        CPPFLAGS="$CPPFLAGS -I${mutt_cv_curses}/include"
+                fi
+fi
+
+
+       echo $ac_n "checking for initscr""... $ac_c" 1>&6
+echo "configure:2394: checking for initscr" >&5
+if eval "test \"`echo '$''{'ac_cv_func_initscr'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2399 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char initscr(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char initscr();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_initscr) || defined (__stub___initscr)
+choke me
+#else
+initscr();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_initscr=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_initscr=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'initscr`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+
+       cf_ncurses="ncurses"
+       for lib in ncurses ncursesw
+       do
+               echo $ac_n "checking for waddnwstr in -l$lib""... $ac_c" 1>&6
+echo "configure:2444: checking for waddnwstr in -l$lib" >&5
+ac_lib_var=`echo $lib'_'waddnwstr | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-l$lib  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2452 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char waddnwstr();
+
+int main() {
+waddnwstr()
+; return 0; }
+EOF
+if { (eval echo configure:2463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cf_ncurses="$lib"; break
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+       done
+        echo $ac_n "checking for initscr in -l$cf_ncurses""... $ac_c" 1>&6
+echo "configure:2485: checking for initscr in -l$cf_ncurses" >&5
+ac_lib_var=`echo $cf_ncurses'_'initscr | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-l$cf_ncurses  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2493 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char initscr();
+
+int main() {
+initscr()
+; return 0; }
+EOF
+if { (eval echo configure:2504: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  MUTTLIBS="$MUTTLIBS -l$cf_ncurses"
+                if test x$mutt_cv_curses = x/usr -a -d /usr/include/ncurses; then
+                        CPPFLAGS="$CPPFLAGS -I/usr/include/ncurses"
+                fi
+               
+                if test "$cf_ncurses" = ncursesw; then
+                       for ac_hdr in ncursesw/ncurses.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:2529: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2534 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:2539: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+ cf_cv_ncurses_header="ncursesw/ncurses.h"
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+               else
+                       for ac_hdr in ncurses.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:2570: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2575 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:2580: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+ cf_cv_ncurses_header="ncurses.h"
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+               fi
+else
+  echo "$ac_t""no" 1>&6
+
+echo $ac_n "checking for initscr""... $ac_c" 1>&6
+echo "configure:2611: checking for initscr" >&5
+if eval "test \"`echo '$''{'ac_cv_func_initscr'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2616 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char initscr(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char initscr();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_initscr) || defined (__stub___initscr)
+choke me
+#else
+initscr();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_initscr=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_initscr=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'initscr`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+
+case $host_os in #(vi
+freebsd*) #(vi
+       echo $ac_n "checking for tgoto in -lmytinfo""... $ac_c" 1>&6
+echo "configure:2660: checking for tgoto in -lmytinfo" >&5
+ac_lib_var=`echo mytinfo'_'tgoto | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lmytinfo  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2668 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char tgoto();
+
+int main() {
+tgoto()
+; return 0; }
+EOF
+if { (eval echo configure:2679: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  LIBS="-lmytinfo $LIBS"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+       ;;
+hpux10.*|hpux11.*)
+       echo $ac_n "checking for initscr in -lcur_colr""... $ac_c" 1>&6
+echo "configure:2702: checking for initscr in -lcur_colr" >&5
+ac_lib_var=`echo cur_colr'_'initscr | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lcur_colr  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2710 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char initscr();
+
+int main() {
+initscr()
+; return 0; }
+EOF
+if { (eval echo configure:2721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  
+               LIBS="-lcur_colr $LIBS"
+               CFLAGS="-I/usr/include/curses_colr $CFLAGS"
+               ac_cv_func_initscr=yes
+               
+else
+  echo "$ac_t""no" 1>&6
+
+       echo $ac_n "checking for initscr in -lHcurses""... $ac_c" 1>&6
+echo "configure:2745: checking for initscr in -lHcurses" >&5
+ac_lib_var=`echo Hcurses'_'initscr | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lHcurses  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2753 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char initscr();
+
+int main() {
+initscr()
+; return 0; }
+EOF
+if { (eval echo configure:2764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  
+               # HP's header uses __HP_CURSES, but user claims _HP_CURSES.
+               LIBS="-lHcurses $LIBS"
+               CFLAGS="-D__HP_CURSES -D_HP_CURSES $CFLAGS"
+               ac_cv_func_initscr=yes
+               
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+       ;;
+linux*) # Suse Linux does not follow /usr/lib convention
+       LIBS="$LIBS -L/lib"
+       ;;
+esac
+
+if test ".$With5lib" != ".no" ; then
+if test -d /usr/5lib ; then
+       # SunOS 3.x or 4.x
+       CPPFLAGS="$CPPFLAGS -I/usr/5include"
+       LIBS="$LIBS -L/usr/5lib"
+fi
+fi
+
+if test ".$ac_cv_func_initscr" != .yes ; then
+       cf_save_LIBS="$LIBS"
+       cf_term_lib=""
+       cf_curs_lib=""
+
+       # Check for library containing tgoto.  Do this before curses library
+       # because it may be needed to link the test-case for initscr.
+       echo $ac_n "checking for tgoto""... $ac_c" 1>&6
+echo "configure:2813: checking for tgoto" >&5
+if eval "test \"`echo '$''{'ac_cv_func_tgoto'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2818 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char tgoto(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char tgoto();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_tgoto) || defined (__stub___tgoto)
+choke me
+#else
+tgoto();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_tgoto=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_tgoto=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'tgoto`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cf_term_lib=predefined
+else
+  echo "$ac_t""no" 1>&6
+
+               for cf_term_lib in termcap termlib unknown
+               do
+                       echo $ac_n "checking for tgoto in -l$cf_term_lib""... $ac_c" 1>&6
+echo "configure:2862: checking for tgoto in -l$cf_term_lib" >&5
+ac_lib_var=`echo $cf_term_lib'_'tgoto | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-l$cf_term_lib  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2870 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char tgoto();
+
+int main() {
+tgoto()
+; return 0; }
+EOF
+if { (eval echo configure:2881: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  break
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+               done
+       
+fi
+
+
+       # Check for library containing initscr
+       test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS"
+       for cf_curs_lib in cursesX curses ncurses xcurses jcurses unknown
+       do
+               echo $ac_n "checking for initscr in -l$cf_curs_lib""... $ac_c" 1>&6
+echo "configure:2911: checking for initscr in -l$cf_curs_lib" >&5
+ac_lib_var=`echo $cf_curs_lib'_'initscr | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-l$cf_curs_lib  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2919 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char initscr();
+
+int main() {
+initscr()
+; return 0; }
+EOF
+if { (eval echo configure:2930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  break
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+       done
+       test $cf_curs_lib = unknown && { echo "configure: error: no curses library found" 1>&2; exit 1; }
+
+       LIBS="-l$cf_curs_lib $cf_save_LIBS"
+       if test "$cf_term_lib" = unknown ; then
+               echo $ac_n "checking if we can link with $cf_curs_lib library""... $ac_c" 1>&6
+echo "configure:2956: checking if we can link with $cf_curs_lib library" >&5
+               cat > conftest.$ac_ext <<EOF
+#line 2958 "configure"
+#include "confdefs.h"
+#include <${cf_cv_ncurses_header-curses.h}>
+int main() {
+initscr()
+; return 0; }
+EOF
+if { (eval echo configure:2965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  cf_result=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_result=no
+fi
+rm -f conftest*
+               echo "$ac_t""$cf_result" 1>&6
+               test $cf_result = no && { echo "configure: error: Cannot link curses library" 1>&2; exit 1; }
+       elif test "$cf_term_lib" != predefined ; then
+               echo $ac_n "checking if we need both $cf_curs_lib and $cf_term_lib libraries""... $ac_c" 1>&6
+echo "configure:2979: checking if we need both $cf_curs_lib and $cf_term_lib libraries" >&5
+               cat > conftest.$ac_ext <<EOF
+#line 2981 "configure"
+#include "confdefs.h"
+#include <${cf_cv_ncurses_header-curses.h}>
+int main() {
+initscr(); tgoto((char *)0, 0, 0);
+; return 0; }
+EOF
+if { (eval echo configure:2988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  cf_result=no
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  
+                       LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS"
+                       cat > conftest.$ac_ext <<EOF
+#line 2998 "configure"
+#include "confdefs.h"
+#include <${cf_cv_ncurses_header-curses.h}>
+int main() {
+initscr()
+; return 0; }
+EOF
+if { (eval echo configure:3005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  cf_result=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_result=error
+fi
+rm -f conftest*
+                       
+fi
+rm -f conftest*
+               echo "$ac_t""$cf_result" 1>&6
+       fi
+fi
+
+
+fi
+
+fi
+
+               
+fi
+
+
+        old_LIBS="$LIBS"
+        LIBS="$LIBS $MUTTLIBS"
+        for ac_func in start_color typeahead bkgdset curs_set meta use_default_colors resizeterm
+do
+
+echo $ac_n "checking for $ac_func declaration""... $ac_c" 1>&6
+echo "configure:3037: checking for $ac_func declaration" >&5
+if eval "test \"`echo '$''{'ac_cv_func_decl_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3042 "configure"
+#include "confdefs.h"
+#include <${cf_cv_ncurses_header-curses.h}>
+int main() {
+#ifndef ${ac_func}
+extern int     ${ac_func}();
+#endif
+; return 0; }
+EOF
+if { (eval echo configure:3051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  
+cat > conftest.$ac_ext <<EOF
+#line 3055 "configure"
+#include "confdefs.h"
+#include <${cf_cv_ncurses_header-curses.h}>
+int main() {
+#ifndef ${ac_func}
+int    (*p)() = ${ac_func};
+#endif
+; return 0; }
+EOF
+if { (eval echo configure:3064: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  
+eval "ac_cv_func_decl_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  
+eval "ac_cv_func_decl_$ac_func=no"
+fi
+rm -f conftest*
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  
+eval "ac_cv_func_decl_$ac_func=yes"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'decl_$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  
+  
+ac_tr_func=`echo HAVE_$ac_func | tr '[a-z]' '[A-Z]'`
+
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+        if test "$ac_cv_func_decl_start_color" = yes; then
+                cat >> confdefs.h <<\EOF
+#define HAVE_COLOR 1
+EOF
+
+        fi
+        if test "$ac_cv_func_decl_resizeterm" = yes; then
+                MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS resize.o"
+        fi
+        LIBS="$old_LIBS"
+        
+fi
+
+
+echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+echo "configure:3116: checking for ANSI C header files" >&5
+if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3121 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:3129: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  ac_cv_header_stdc=yes
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 3146 "configure"
+#include "confdefs.h"
+#include <string.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "memchr" >/dev/null 2>&1; then
+  :
+else
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 3164 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "free" >/dev/null 2>&1; then
+  :
+else
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+if test "$cross_compiling" = yes; then
+  :
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3185 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int main () { int i; for (i = 0; i < 256; i++)
+if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
+exit (0); }
+
+EOF
+if { (eval echo configure:3196: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  :
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_header_stdc=no
+fi
+rm -fr conftest*
+fi
+
+fi
+fi
+
+echo "$ac_t""$ac_cv_header_stdc" 1>&6
+if test $ac_cv_header_stdc = yes; then
+  cat >> confdefs.h <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+
+for ac_hdr in stdarg.h sys/ioctl.h ioctl.h sysexits.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:3224: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3229 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:3234: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+for ac_hdr in sys/time.h sys/resource.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:3264: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3269 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:3274: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+for ac_hdr in unix.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:3304: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3309 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:3314: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+for ac_func in setrlimit getsid
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:3344: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3349 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:3372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
+echo "configure:3398: checking return type of signal handlers" >&5
+if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3403 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <signal.h>
+#ifdef signal
+#undef signal
+#endif
+#ifdef __cplusplus
+extern "C" void (*signal (int, void (*)(int)))(int);
+#else
+void (*signal ()) ();
+#endif
+
+int main() {
+int i;
+; return 0; }
+EOF
+if { (eval echo configure:3420: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_type_signal=void
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_type_signal=int
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_type_signal" 1>&6
+cat >> confdefs.h <<EOF
+#define RETSIGTYPE $ac_cv_type_signal
+EOF
+
+
+
+echo $ac_n "checking for sig_atomic_t in signal.h""... $ac_c" 1>&6
+echo "configure:3440: checking for sig_atomic_t in signal.h" >&5
+cat > conftest.$ac_ext <<EOF
+#line 3442 "configure"
+#include "confdefs.h"
+#include <signal.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "sig_atomic_t" >/dev/null 2>&1; then
+  rm -rf conftest*
+  
+    ac_cv_type_sig_atomic_t=yes;
+    cat > conftest.$ac_ext <<EOF
+#line 3452 "configure"
+#include "confdefs.h"
+#include <signal.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "volatile.*sig_atomic_t" >/dev/null 2>&1; then
+  rm -rf conftest*
+  
+                        is_sig_atomic_t_volatile=yes;
+                        echo "$ac_t""yes, volatile" 1>&6
+                    
+else
+  rm -rf conftest*
+  
+                        is_sig_atomic_t_volatile=no;
+                        echo "$ac_t""yes, non volatile" 1>&6
+                    
+fi
+rm -f conftest*
+
+  
+else
+  rm -rf conftest*
+  
+    echo "$ac_t""no" 1>&6
+    echo $ac_n "checking for sig_atomic_t""... $ac_c" 1>&6
+echo "configure:3478: checking for sig_atomic_t" >&5
+if eval "test \"`echo '$''{'ac_cv_type_sig_atomic_t'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3483 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "(^|[^a-zA-Z_0-9])sig_atomic_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_type_sig_atomic_t=yes
+else
+  rm -rf conftest*
+  ac_cv_type_sig_atomic_t=no
+fi
+rm -f conftest*
+
+fi
+echo "$ac_t""$ac_cv_type_sig_atomic_t" 1>&6
+if test $ac_cv_type_sig_atomic_t = no; then
+  cat >> confdefs.h <<\EOF
+#define sig_atomic_t int
+EOF
+
+fi
+
+    is_sig_atomic_t_volatile=no
+  
+fi
+rm -f conftest*
+
+if test $is_sig_atomic_t_volatile = 'yes'
+then
+    cat >> confdefs.h <<\EOF
+#define SIG_ATOMIC_VOLATILE_T sig_atomic_t
+EOF
+
+else
+    cat >> confdefs.h <<\EOF
+#define SIG_ATOMIC_VOLATILE_T volatile sig_atomic_t
+EOF
+
+fi
+
+echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6
+echo "configure:3529: checking for sys_siglist declaration in signal.h or unistd.h" >&5
+if eval "test \"`echo '$''{'ac_cv_decl_sys_siglist'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3534 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <signal.h>
+/* NetBSD declares sys_siglist in unistd.h.  */
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+int main() {
+char *msg = *(sys_siglist + 1);
+; return 0; }
+EOF
+if { (eval echo configure:3546: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_decl_sys_siglist=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_decl_sys_siglist=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_decl_sys_siglist" 1>&6
+if test $ac_cv_decl_sys_siglist = yes; then
+  cat >> confdefs.h <<\EOF
+#define SYS_SIGLIST_DECLARED 1
+EOF
+
+fi
+
+
+echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
+echo "configure:3568: checking whether byte ordering is bigendian" >&5
+if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_cv_c_bigendian=unknown
+# See if sys/param.h defines the BYTE_ORDER macro.
+cat > conftest.$ac_ext <<EOF
+#line 3575 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/param.h>
+int main() {
+
+#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
+ bogus endian macros
+#endif
+; return 0; }
+EOF
+if { (eval echo configure:3586: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+cat > conftest.$ac_ext <<EOF
+#line 3590 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/param.h>
+int main() {
+
+#if BYTE_ORDER != BIG_ENDIAN
+ not big endian
+#endif
+; return 0; }
+EOF
+if { (eval echo configure:3601: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_c_bigendian=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_c_bigendian=no
+fi
+rm -f conftest*
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+if test $ac_cv_c_bigendian = unknown; then
+if test "$cross_compiling" = yes; then
+    { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3621 "configure"
+#include "confdefs.h"
+main () {
+  /* Are we little or big endian?  From Harbison&Steele.  */
+  union
+  {
+    long l;
+    char c[sizeof (long)];
+  } u;
+  u.l = 1;
+  exit (u.c[sizeof (long) - 1] == 1);
+}
+EOF
+if { (eval echo configure:3634: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_c_bigendian=no
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_c_bigendian=yes
+fi
+rm -fr conftest*
+fi
+
+fi
+fi
+
+echo "$ac_t""$ac_cv_c_bigendian" 1>&6
+if test $ac_cv_c_bigendian = yes; then
+  cat >> confdefs.h <<\EOF
+#define WORDS_BIGENDIAN 1
+EOF
+
+fi
+
+for ac_hdr in inttypes.h stdint.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:3661: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3666 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:3671: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+echo $ac_n "checking for uint32_t""... $ac_c" 1>&6
+echo "configure:3698: checking for uint32_t" >&5
+cat > conftest.$ac_ext <<EOF
+#line 3700 "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#if HAVE_INTTYPES_H
+#include <inttypes.h>
+#else
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#endif
+int main() {
+if ((uint32_t *) 0)
+  return 0;
+if (sizeof (uint32_t))
+  return 0;
+
+; return 0; }
+EOF
+if { (eval echo configure:3719: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  
+    cat >> confdefs.h <<\EOF
+#define HAVE_UINT32_T 1
+EOF
+
+    echo "$ac_t""yes" 1>&6
+  
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  echo "$ac_t""no" 1>&6
+
+fi
+rm -f conftest*
+echo $ac_n "checking size of int""... $ac_c" 1>&6
+echo "configure:3737: checking size of int" >&5
+if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+    { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3745 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+#include <sys/types.h>
+main()
+{
+  FILE *f=fopen("conftestval", "w");
+  if (!f) exit(1);
+  fprintf(f, "%d\n", sizeof(int));
+  exit(0);
+}
+EOF
+if { (eval echo configure:3757: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_sizeof_int=`cat conftestval`
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_sizeof_int=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_int" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+EOF
+
+
+echo $ac_n "checking size of long""... $ac_c" 1>&6
+echo "configure:3777: checking size of long" >&5
+if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+    { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3785 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+#include <sys/types.h>
+main()
+{
+  FILE *f=fopen("conftestval", "w");
+  if (!f) exit(1);
+  fprintf(f, "%d\n", sizeof(long));
+  exit(0);
+}
+EOF
+if { (eval echo configure:3797: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_sizeof_long=`cat conftestval`
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_sizeof_long=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_long" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+EOF
+
+
+
+echo $ac_n "checking for pid_t""... $ac_c" 1>&6
+echo "configure:3818: checking for pid_t" >&5
+if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3823 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "(^|[^a-zA-Z_0-9])pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_type_pid_t=yes
+else
+  rm -rf conftest*
+  ac_cv_type_pid_t=no
+fi
+rm -f conftest*
+
+fi
+echo "$ac_t""$ac_cv_type_pid_t" 1>&6
+if test $ac_cv_type_pid_t = no; then
+  cat >> confdefs.h <<\EOF
+#define pid_t int
+EOF
+
+fi
+
+
+for ac_func in fgetpos memmove setegid srand48 strerror
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:3854: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3859 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:3882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+for ac_func in strcasecmp strdup
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:3910: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3915 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:3938: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}"
+fi
+done
+
+
+
+echo $ac_n "checking for getopt""... $ac_c" 1>&6
+echo "configure:3966: checking for getopt" >&5
+if eval "test \"`echo '$''{'ac_cv_func_getopt'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3971 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char getopt(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char getopt();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_getopt) || defined (__stub___getopt)
+choke me
+#else
+getopt();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:3994: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_getopt=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_getopt=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'getopt`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+if test $ac_cv_func_getopt = yes; then
+        for ac_hdr in getopt.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:4018: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4023 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:4028: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+fi
+
+mutt_cv_snprintf=no
+SNPRINTFOBJS=""
+for ac_func in snprintf
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:4061: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4066 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:4089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+mutt_cv_snprintf=yes
+fi
+done
+
+for ac_func in vsnprintf
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:4117: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4122 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:4145: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+mutt_cv_snprintf=yes
+fi
+done
+
+if test $mutt_cv_snprintf = yes; then
+        LIBOBJS="$LIBOBJS snprintf.o"
+fi
+
+for ac_func in ftruncate
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:4177: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4182 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:4205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+echo $ac_n "checking for chsize in -lx""... $ac_c" 1>&6
+echo "configure:4227: checking for chsize in -lx" >&5
+ac_lib_var=`echo x'_'chsize | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lx  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 4235 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char chsize();
+
+int main() {
+chsize()
+; return 0; }
+EOF
+if { (eval echo configure:4246: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo x | sed -e 's/^a-zA-Z0-9_/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lx $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+done
+
+
+for ac_func in strftime
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:4280: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4285 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:4308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+echo $ac_n "checking for strftime in -lintl""... $ac_c" 1>&6
+echo "configure:4330: checking for strftime in -lintl" >&5
+ac_lib_var=`echo intl'_'strftime | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lintl  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 4338 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char strftime();
+
+int main() {
+strftime()
+; return 0; }
+EOF
+if { (eval echo configure:4349: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo intl | sed -e 's/^a-zA-Z0-9_/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lintl $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+done
+
+
+for ac_func in fchdir
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:4383: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4388 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:4411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+mutt_cv_fchdir=no
+fi
+done
+
+
+# Check whether --with-regex or --without-regex was given.
+if test "${with_regex+set}" = set; then
+  withval="$with_regex"
+  mutt_cv_regex=yes
+else
+  for ac_func in regcomp
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:4445: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4450 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:4473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+ mutt_cv_regex=no
+else
+  echo "$ac_t""no" 1>&6
+mutt_cv_regex=yes
+fi
+done
+
+fi
+
+
+if test $mutt_cv_regex = no ; then
+echo $ac_n "checking whether your system's regexp library is completely broken""... $ac_c" 1>&6
+echo "configure:4503: checking whether your system's regexp library is completely broken" >&5
+if eval "test \"`echo '$''{'mutt_cv_regex_broken'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+  mutt_cv_regex_broken=yes
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4511 "configure"
+#include "confdefs.h"
+
+#include <unistd.h>
+#include <regex.h>
+main() { regex_t blah ; regmatch_t p; p.rm_eo = p.rm_eo; return regcomp(&blah, "foo.*bar", REG_NOSUB) || regexec (&blah, "foobar", 0, NULL, 0); }
+EOF
+if { (eval echo configure:4518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  mutt_cv_regex_broken=no
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  mutt_cv_regex_broken=yes
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$mutt_cv_regex_broken" 1>&6
+        if test $mutt_cv_regex_broken = yes ; then
+                echo "Using the included GNU regex instead." >&6
+                mutt_cv_regex=yes
+        fi
+fi
+
+if test $mutt_cv_regex = yes; then
+        cat >> confdefs.h <<\EOF
+#define USE_GNU_REGEX 1
+EOF
+
+        LIBOBJS="$LIBOBJS regex.o"
+fi
+
+
+# Check whether --with-homespool or --without-homespool was given.
+if test "${with_homespool+set}" = set; then
+  withval="$with_homespool"
+  with_homespool=${withval}
+fi
+
+if test x$with_homespool != x; then
+        if test $with_homespool = yes; then
+                with_homespool=mailbox
+        fi
+        cat >> confdefs.h <<EOF
+#define MAILPATH "$with_homespool"
+EOF
+
+        cat >> confdefs.h <<\EOF
+#define HOMESPOOL 1
+EOF
+
+        cat >> confdefs.h <<\EOF
+#define USE_DOTLOCK 1
+EOF
+
+        mutt_cv_setgid=no
+else
+        # Check whether --with-mailpath or --without-mailpath was given.
+if test "${with_mailpath+set}" = set; then
+  withval="$with_mailpath"
+  mutt_cv_mailpath=$withval
+else
+   echo $ac_n "checking where new mail is stored""... $ac_c" 1>&6
+echo "configure:4578: checking where new mail is stored" >&5
+if eval "test \"`echo '$''{'mutt_cv_mailpath'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  mutt_cv_mailpath=no
+                        if test -d /var/mail; then
+                                mutt_cv_mailpath=/var/mail
+                        elif test -d /var/spool/mail; then
+                                mutt_cv_mailpath=/var/spool/mail
+                        elif test -d /usr/spool/mail; then
+                                mutt_cv_mailpath=/usr/spool/mail
+                        elif test -d /usr/mail; then
+                                mutt_cv_mailpath=/usr/mail
+                        fi
+fi
+
+echo "$ac_t""$mutt_cv_mailpath" 1>&6
+                
+fi
+
+        if test "$mutt_cv_mailpath" = no; then
+                { echo "configure: error: "Could not determine where new mail is stored."" 1>&2; exit 1; }
+        fi
+        cat >> confdefs.h <<EOF
+#define MAILPATH "$mutt_cv_mailpath"
+EOF
+
+
+        echo $ac_n "checking if $mutt_cv_mailpath is world writable""... $ac_c" 1>&6
+echo "configure:4607: checking if $mutt_cv_mailpath is world writable" >&5
+if eval "test \"`echo '$''{'mutt_cv_worldwrite'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+  mutt_cv_worldwrite=no
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4615 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+
+int main (int argc, char **argv)
+{
+        struct stat s;
+
+        stat ("$mutt_cv_mailpath", &s);
+        if (s.st_mode & S_IWOTH) exit (0);
+        exit (1);
+}
+EOF
+if { (eval echo configure:4629: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  mutt_cv_worldwrite=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  mutt_cv_worldwrite=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$mutt_cv_worldwrite" 1>&6
+
+        mutt_cv_setgid=no
+        if test $mutt_cv_worldwrite = yes; then
+                cat >> confdefs.h <<\EOF
+#define USE_DOTLOCK 1
+EOF
+
+        else
+
+                echo $ac_n "checking if $mutt_cv_mailpath is group writable""... $ac_c" 1>&6
+echo "configure:4654: checking if $mutt_cv_mailpath is group writable" >&5
+if eval "test \"`echo '$''{'mutt_cv_groupwrite'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+  mutt_cv_groupwrite=no
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4662 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+
+int main (int argc, char **argv)
+{
+        struct stat s;
+
+        stat ("$mutt_cv_mailpath", &s);
+        if (s.st_mode & S_IWGRP) exit (0);
+        exit (1);
+}
+EOF
+if { (eval echo configure:4676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  mutt_cv_groupwrite=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  mutt_cv_groupwrite=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$mutt_cv_groupwrite" 1>&6
+
+                if test $mutt_cv_groupwrite = yes; then
+                        cat >> confdefs.h <<\EOF
+#define USE_DOTLOCK 1
+EOF
+
+                        cat >> confdefs.h <<\EOF
+#define USE_SETGID 1
+EOF
+
+                        mutt_cv_setgid=yes
+                fi
+        fi
+fi
+
+# Check whether --enable-external_dotlock or --disable-external_dotlock was given.
+if test "${enable_external_dotlock+set}" = set; then
+  enableval="$enable_external_dotlock"
+  mutt_cv_external_dotlock="$enableval"
+fi
+
+
+if test "x$mutt_cv_setgid" = "xyes" || test "x$mutt_cv_fchdir" = "xno" \
+        || test "x$mutt_cv_external_dotlock" = "xyes"
+then
+        cat >> confdefs.h <<\EOF
+#define DL_STANDALONE 1
+EOF
+
+        DOTLOCK_TARGET="mutt_dotlock"
+else
+        MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS dotlock.o"
+fi
+
+
+
+
+echo $ac_n "checking where to put the documentation""... $ac_c" 1>&6
+echo "configure:4729: checking where to put the documentation" >&5
+# Check whether --with-docdir or --without-docdir was given.
+if test "${with_docdir+set}" = set; then
+  withval="$with_docdir"
+  mutt_cv_docdir=$withval
+else
+  mutt_cv_docdir="$mutt_cv_prefix/doc/mutt"
+fi
+
+echo "$ac_t""$mutt_cv_docdir" 1>&6
+
+docdir=$mutt_cv_docdir
+
+
+if test x$mutt_cv_setgid = xyes; then
+        DOTLOCK_GROUP='mail'
+        DOTLOCK_PERMISSION=2755
+else
+        DOTLOCK_GROUP=''
+        DOTLOCK_PERMISSION=755
+fi
+
+
+
+# Check whether --with-domain or --without-domain was given.
+if test "${with_domain+set}" = set; then
+  withval="$with_domain"
+  if test $withval != yes; then
+                cat >> confdefs.h <<EOF
+#define DOMAIN "$withval"
+EOF
+
+        fi
+fi
+
+
+need_socket="no"
+
+
+# Check whether --enable-pop or --disable-pop was given.
+if test "${enable_pop+set}" = set; then
+  enableval="$enable_pop"
+         if test x$enableval = xyes ; then
+                cat >> confdefs.h <<\EOF
+#define USE_POP 1
+EOF
+
+                MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS pop.o pop_lib.o pop_auth.o"
+                need_socket="yes"
+                need_md5="yes"
+        fi
+
+fi
+
+
+# Check whether --enable-imap or --disable-imap was given.
+if test "${enable_imap+set}" = set; then
+  enableval="$enable_imap"
+         if test x$enableval = xyes ; then
+                cat >> confdefs.h <<\EOF
+#define USE_IMAP 1
+EOF
+
+                LIBIMAP="-Limap -limap"
+                LIBIMAPDEPS="\$(top_srcdir)/imap/imap.h imap/libimap.a"
+                need_imap="yes"
+                need_socket="yes"
+                need_md5="yes"
+        fi
+
+fi
+
+
+
+if test x$need_imap = xyes; then
+  BUILD_IMAP_TRUE=
+  BUILD_IMAP_FALSE='#'
+else
+  BUILD_IMAP_TRUE='#'
+  BUILD_IMAP_FALSE=
+fi
+
+# Check whether --enable-nntp or --disable-nntp was given.
+if test "${enable_nntp+set}" = set; then
+  enableval="$enable_nntp"
+       if test x$enableval = xyes ; then
+               cat >> confdefs.h <<\EOF
+#define USE_NNTP 1
+EOF
+
+               MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS nntp.o newsrc.o"
+               need_socket="yes"
+       fi
+
+fi
+
+
+
+if test "$need_socket" = "yes"
+then
+        echo $ac_n "checking for socklen_t""... $ac_c" 1>&6
+echo "configure:4830: checking for socklen_t" >&5
+        cat > conftest.$ac_ext <<EOF
+#line 4832 "configure"
+#include "confdefs.h"
+#include <sys/socket.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "socklen_t" >/dev/null 2>&1; then
+  rm -rf conftest*
+  echo "$ac_t""yes" 1>&6
+else
+  rm -rf conftest*
+  echo "$ac_t""no" 1>&6
+                cat >> confdefs.h <<\EOF
+#define socklen_t int
+EOF
+
+fi
+rm -f conftest*
+
+        echo $ac_n "checking for gethostent""... $ac_c" 1>&6
+echo "configure:4851: checking for gethostent" >&5
+if eval "test \"`echo '$''{'ac_cv_func_gethostent'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4856 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char gethostent(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char gethostent();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_gethostent) || defined (__stub___gethostent)
+choke me
+#else
+gethostent();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:4879: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_gethostent=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_gethostent=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'gethostent`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+echo $ac_n "checking for gethostent in -lnsl""... $ac_c" 1>&6
+echo "configure:4897: checking for gethostent in -lnsl" >&5
+ac_lib_var=`echo nsl'_'gethostent | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lnsl  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 4905 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char gethostent();
+
+int main() {
+gethostent()
+; return 0; }
+EOF
+if { (eval echo configure:4916: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo nsl | sed -e 's/^a-zA-Z0-9_/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lnsl $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+        echo $ac_n "checking for setsockopt""... $ac_c" 1>&6
+echo "configure:4946: checking for setsockopt" >&5
+if eval "test \"`echo '$''{'ac_cv_func_setsockopt'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4951 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char setsockopt(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char setsockopt();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_setsockopt) || defined (__stub___setsockopt)
+choke me
+#else
+setsockopt();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:4974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_setsockopt=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_setsockopt=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'setsockopt`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+echo $ac_n "checking for setsockopt in -lsocket""... $ac_c" 1>&6
+echo "configure:4992: checking for setsockopt in -lsocket" >&5
+ac_lib_var=`echo socket'_'setsockopt | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lsocket  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 5000 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char setsockopt();
+
+int main() {
+setsockopt()
+; return 0; }
+EOF
+if { (eval echo configure:5011: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo socket | sed -e 's/^a-zA-Z0-9_/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lsocket $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+        for ac_func in getaddrinfo
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:5043: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 5048 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:5071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+        cat >> confdefs.h <<\EOF
+#define USE_SOCKET 1
+EOF
+
+        MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS account.o mutt_socket.o mutt_tunnel.o"
+fi
+
+
+# Check whether --with-gss or --without-gss was given.
+if test "${with_gss+set}" = set; then
+  withval="$with_gss"
+  gss_prefix="$withval"
+else
+  gss_prefix="no"
+fi
+
+if test "$gss_prefix" != "no"
+then
+  if test "$need_imap" = "yes"
+  then
+    
+  GSSAPI_PREFIX=$gss_prefix
+  GSSAPI_IMPL="none"
+  saved_CPPFLAGS="$CPPFLAGS"
+  saved_LDFLAGS="$LDFLAGS"
+  saved_LIBS="$LIBS"
+    if test "$GSSAPI_PREFIX" != "yes"
+  then
+    krb5_path="$GSSAPI_PREFIX/bin"
+  else
+    krb5_path="$PATH"
+  fi
+  # Extract the first word of "krb5-config", so it can be a program name with args.
+set dummy krb5-config; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:5130: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_KRB5CFGPATH'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$KRB5CFGPATH" in
+  /*)
+  ac_cv_path_KRB5CFGPATH="$KRB5CFGPATH" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_KRB5CFGPATH="$KRB5CFGPATH" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$krb5_path"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_KRB5CFGPATH="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_KRB5CFGPATH" && ac_cv_path_KRB5CFGPATH="none"
+  ;;
+esac
+fi
+KRB5CFGPATH="$ac_cv_path_KRB5CFGPATH"
+if test -n "$KRB5CFGPATH"; then
+  echo "$ac_t""$KRB5CFGPATH" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  if test "$KRB5CFGPATH" != "none"
+  then
+    GSSAPI_CFLAGS="$CPPFLAGS `$KRB5CFGPATH --cflags gssapi`"
+    GSSAPI_LIBS="$MUTTLIBS `$KRB5CFGPATH --libs gssapi`"
+    case "`$KRB5CFGPATH --version`" in
+      "Kerberos 5 "*)  GSSAPI_IMPL="MIT";;
+      ?eimdal*)                GSSAPI_IMPL="Heimdal";;
+      *)               GSSAPI_IMPL="Unknown";;
+   esac
+  else
+        if test "$GSSAPI_PREFIX" != "yes"
+    then
+      GSSAPI_CFLAGS="-I$GSSAPI_PREFIX/include"
+      GSSAPI_LDFLAGS="-L$GSSAPI_PREFIX/lib"
+      CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS"
+      LDFLAGS="$LDFLAGS $GSSAPI_LDFLAGS"
+    fi
+
+        echo $ac_n "checking for gss_init_sec_context in -lgssapi_krb5""... $ac_c" 1>&6
+echo "configure:5182: checking for gss_init_sec_context in -lgssapi_krb5" >&5
+ac_lib_var=`echo gssapi_krb5'_'gss_init_sec_context | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 5190 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char gss_init_sec_context();
+
+int main() {
+gss_init_sec_context()
+; return 0; }
+EOF
+if { (eval echo configure:5201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  
+      GSSAPI_IMPL="MIT",
+      GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err"
+      
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+        if test "$GSSAPI_IMPL" = "none"
+    then
+      echo $ac_n "checking for gss_init_sec_context in -lgssapi""... $ac_c" 1>&6
+echo "configure:5228: checking for gss_init_sec_context in -lgssapi" >&5
+ac_lib_var=`echo gssapi'_'gss_init_sec_context | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lgssapi -lkrb5 -ldes -lasn1 -lroken -lcrypt -lcom_err $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 5236 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char gss_init_sec_context();
+
+int main() {
+gss_init_sec_context()
+; return 0; }
+EOF
+if { (eval echo configure:5247: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  
+          GSSAPI_IMPL="Heimdal"
+          GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi -lkrb5 -ldes -lasn1 -lroken"
+          GSSAPI_LIBS="$GSSAPI_LIBS -lcrypt -lcom_err"
+          
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+    fi
+
+                            if test "$GSSAPI_IMPL" = "none"
+    then
+      echo $ac_n "checking for g_order_init in -lgssapi_krb5""... $ac_c" 1>&6
+echo "configure:5276: checking for g_order_init in -lgssapi_krb5" >&5
+ac_lib_var=`echo gssapi_krb5'_'g_order_init | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lgssapi_krb5 -lkrb5 -lcrypto -lcom_err $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 5284 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char g_order_init();
+
+int main() {
+g_order_init()
+; return 0; }
+EOF
+if { (eval echo configure:5295: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  
+        GSSAPI_IMPL="OldMIT",
+        GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lcrypto -lcom_err"
+        
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+    fi
+  fi
+
+  CPPFLAGS="$saved_CPPFLAGS"
+  LDFLAGS="$saved_LDFLAGS"
+  LIBS="$saved_LIBS"
+
+    echo $ac_n "checking GSSAPI implementation""... $ac_c" 1>&6
+echo "configure:5326: checking GSSAPI implementation" >&5
+    echo "$ac_t""$GSSAPI_IMPL" 1>&6
+    if test "$GSSAPI_IMPL" = "none"
+    then
+      cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs.  It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already.  You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+  case `(ac_space=' '; set | grep ac_space) 2>&1` in
+  *ac_space=\ *)
+    # `set' does not quote correctly, so add quotes (double-quote substitution
+    # turns \\\\ into \\, and sed turns \\ into \).
+    sed -n \
+      -e "s/'/'\\\\''/g" \
+      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+    ;;
+  *)
+    # `set' quotes correctly as required by POSIX, so do not add quotes.
+    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+    ;;
+  esac >> confcache
+if cmp -s $cache_file confcache; then
+  :
+else
+  if test -w $cache_file; then
+    echo "updating cache $cache_file"
+    cat confcache > $cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+      echo "$ac_t""GSSAPI libraries not found" 1>&6
+    fi
+    if test "$GSSAPI_IMPL" = "Heimdal"
+    then
+      cat >> confdefs.h <<\EOF
+#define HAVE_HEIMDAL 1
+EOF
+
+    fi
+    CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS"
+    MUTTLIBS="$MUTTLIBS $GSSAPI_LIBS"
+    cat >> confdefs.h <<\EOF
+#define USE_GSS 1
+EOF
+
+    need_gss="yes"
+  else
+    echo "configure: warning: GSS was requested but IMAP is not enabled" 1>&2
+  fi
+fi
+
+
+if test x$need_gss = xyes; then
+  USE_GSS_TRUE=
+  USE_GSS_FALSE='#'
+else
+  USE_GSS_TRUE='#'
+  USE_GSS_FALSE=
+fi
+
+
+# Check whether --with-ssl or --without-ssl was given.
+if test "${with_ssl+set}" = set; then
+  withval="$with_ssl"
+         if test "$with_ssl" != "no"
+        then
+          if test "$need_socket" != "yes"; then
+           { echo "configure: error: SSL support is only useful with POP or IMAP support" 1>&2; exit 1; }
+          fi
+
+          if test "$with_ssl" != "yes"
+          then
+           LDFLAGS="$LDFLAGS -L$withval/lib"
+           CPPFLAGS="$CPPFLAGS -I$withval/include"
+          fi
+          saved_LIBS="$LIBS"
+
+          echo $ac_n "checking for X509_new in -lcrypto""... $ac_c" 1>&6
+echo "configure:5425: checking for X509_new in -lcrypto" >&5
+ac_lib_var=`echo crypto'_'X509_new | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lcrypto  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 5433 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char X509_new();
+
+int main() {
+X509_new()
+; return 0; }
+EOF
+if { (eval echo configure:5444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo crypto | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lcrypto $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+{ echo "configure: error: Unable to find SSL library" 1>&2; exit 1; }
+fi
+
+          echo $ac_n "checking for SSL_new in -lssl""... $ac_c" 1>&6
+echo "configure:5473: checking for SSL_new in -lssl" >&5
+ac_lib_var=`echo ssl'_'SSL_new | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lssl -lcrypto $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 5481 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char SSL_new();
+
+int main() {
+SSL_new()
+; return 0; }
+EOF
+if { (eval echo configure:5492: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo ssl | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lssl $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+{ echo "configure: error: Unable to find SSL library" 1>&2; exit 1; }
+fi
+
+
+          for ac_func in RAND_status RAND_egd
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:5524: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 5529 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:5552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+          cat >> confdefs.h <<\EOF
+#define USE_SSL 1
+EOF
+
+          LIBS="$saved_LIBS"
+          MUTTLIBS="$MUTTLIBS -lssl -lcrypto"
+          MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_ssl.o"
+          need_ssl=yes
+
+        fi
+
+fi
+
+
+
+if test x$need_ssl = xyes; then
+  USE_SSL_TRUE=
+  USE_SSL_FALSE='#'
+else
+  USE_SSL_TRUE='#'
+  USE_SSL_FALSE=
+fi
+
+# Check whether --with-nss or --without-nss was given.
+if test "${with_nss+set}" = set; then
+  withval="$with_nss"
+         if test "$with_nss" != no
+        then
+          if test "$need_socket" != "yes"; then
+           { echo "configure: error: SSL support is only useful with POP or IMAP support" 1>&2; exit 1; }
+          fi
+
+          if test "$with_nss" != "yes"
+          then
+           LDFLAGS="$LDFLAGS -L$withval/lib"
+           CPPFLAGS="$CPPFLAGS -I$withval/include -I$withval/public/security"
+          fi
+
+          cat >> confdefs.h <<\EOF
+#define USE_NSS 1
+EOF
+
+          MUTTLIBS="$MUTTLIBS -lssl -lnss -lcertdb -lcerthi -lcryptohi"
+          MUTTLIBS="$MUTTLIBS -lpk11wrap -lsoftoken -lsecutil -ldbm -lplds4 -lplc4 -lfreebl"
+          MUTTLIBS="$MUTTLIBS -lnspr4"
+
+          MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_ssl_nss.o"
+          need_ssl=yes
+        fi
+
+fi
+
+
+# Check whether --with-sasl or --without-sasl was given.
+if test "${with_sasl+set}" = set; then
+  withval="$with_sasl"
+  
+        if test "$need_socket" != "yes"
+        then
+          { echo "configure: error: SASL support is only useful with POP or IMAP support" 1>&2; exit 1; }
+        fi
+
+        if test "$with_sasl" != "no"
+        then
+          if test "$with_sasl" != "yes"
+          then
+            CPPFLAGS="$CPPFLAGS -I$with_sasl/include"
+            LDFLAGS="$LDFLAGS -L$with_sasl/lib"
+          fi
+
+          saved_LIBS="$LIBS"
+
+          echo $ac_n "checking for sasl_client_init in -lsasl""... $ac_c" 1>&6
+echo "configure:5650: checking for sasl_client_init in -lsasl" >&5
+ac_lib_var=`echo sasl'_'sasl_client_init | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lsasl  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 5658 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char sasl_client_init();
+
+int main() {
+sasl_client_init()
+; return 0; }
+EOF
+if { (eval echo configure:5669: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo sasl | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lsasl $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+{ echo "configure: error: could not find libsasl" 1>&2; exit 1; }
+fi
+
+
+          MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_sasl.o"
+          MUTTLIBS="$MUTTLIBS -lsasl"
+          LIBS="$saved_LIBS"
+          cat >> confdefs.h <<\EOF
+#define USE_SASL 1
+EOF
+
+          need_sasl=yes
+        fi
+        
+fi
+
+
+
+if test x$need_sasl = xyes; then
+  USE_SASL_TRUE=
+  USE_SASL_FALSE='#'
+else
+  USE_SASL_TRUE='#'
+  USE_SASL_FALSE=
+fi
+
+# Check whether --with-sasl2 or --without-sasl2 was given.
+if test "${with_sasl2+set}" = set; then
+  withval="$with_sasl2"
+  
+        if test "$need_socket" != "yes"
+        then
+          { echo "configure: error: SASL support is only useful with POP or IMAP support" 1>&2; exit 1; }
+        fi
+
+        if test "$with_sasl2" != "no"
+        then
+          if test "$with_sasl2" != "yes"
+          then
+            CPPFLAGS="$CPPFLAGS -I$with_sasl2/include"
+            LDFLAGS="$LDFLAGS -L$with_sasl2/lib"
+          fi
+
+          saved_LIBS="$LIBS"
+
+          echo $ac_n "checking for sasl_client_init in -lsasl2""... $ac_c" 1>&6
+echo "configure:5740: checking for sasl_client_init in -lsasl2" >&5
+ac_lib_var=`echo sasl2'_'sasl_client_init | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lsasl2  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 5748 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char sasl_client_init();
+
+int main() {
+sasl_client_init()
+; return 0; }
+EOF
+if { (eval echo configure:5759: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo sasl2 | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lsasl2 $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+{ echo "configure: error: could not find libsasl" 1>&2; exit 1; }
+fi
+
+
+          MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_sasl.o"
+          MUTTLIBS="$MUTTLIBS -lsasl2"
+          LIBS="$saved_LIBS"
+          cat >> confdefs.h <<\EOF
+#define USE_SASL 1
+EOF
+
+          cat >> confdefs.h <<\EOF
+#define USE_SASL2 1
+EOF
+
+          need_sasl=yes
+        fi
+        
+fi
+
+
+
+if test x$need_sasl = xyes; then
+  USE_SASL_TRUE=
+  USE_SASL_FALSE='#'
+else
+  USE_SASL_TRUE='#'
+  USE_SASL_FALSE=
+fi
+
+# Check whether --with-idn or --without-idn was given.
+if test "${with_idn+set}" = set; then
+  withval="$with_idn"
+  
+                 if test "$with_idn" != "no" ; then
+                       if test "$with_idn" != "yes" ; then
+                          CPPFLAGS="$CPPFLAGS -I$with_idn/include"
+                          LDFLAGS="$LDFLAGS -L$with_idn/lib"
+                       fi
+                 fi
+                
+
+fi
+
+
+if test "x$with_idn" != "xno"; then
+   echo $ac_n "checking for stringprep_check_version in -lidn""... $ac_c" 1>&6
+echo "configure:5831: checking for stringprep_check_version in -lidn" >&5
+ac_lib_var=`echo idn'_'stringprep_check_version | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lidn  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 5839 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char stringprep_check_version();
+
+int main() {
+stringprep_check_version()
+; return 0; }
+EOF
+if { (eval echo configure:5850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo idn | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lidn $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+   for ac_func in idna_to_unicode_utf8_from_utf8 idna_to_unicode_8z8z
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:5880: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 5885 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:5908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+   for ac_func in idna_to_ascii_from_utf8 idna_to_ascii_8z
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:5935: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 5940 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:5963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+   for ac_func in idna_to_ascii_lz idna_to_ascii_from_locale
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:5990: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 5995 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:6018: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+fi
+
+if test "$need_md5" = "yes"
+then
+        MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS md5c.o"
+fi
+
+
+# Check whether --enable-debug or --disable-debug was given.
+if test "${enable_debug+set}" = set; then
+  enableval="$enable_debug"
+   if test x$enableval = xyes ; then
+                cat >> confdefs.h <<\EOF
+#define DEBUG 1
+EOF
+
+          fi
+         
+fi
+
+
+# Check whether --enable-flock or --disable-flock was given.
+if test "${enable_flock+set}" = set; then
+  enableval="$enable_flock"
+  if test $enableval = yes; then
+                cat >> confdefs.h <<\EOF
+#define USE_FLOCK 1
+EOF
+
+        fi
+fi
+
+
+mutt_cv_fcntl=yes
+# Check whether --enable-fcntl or --disable-fcntl was given.
+if test "${enable_fcntl+set}" = set; then
+  enableval="$enable_fcntl"
+  if test $enableval = no; then mutt_cv_fcntl=no; fi
+fi
+
+
+if test $mutt_cv_fcntl = yes; then
+        cat >> confdefs.h <<\EOF
+#define USE_FCNTL 1
+EOF
+
+fi
+
+mutt_cv_warnings=yes
+# Check whether --enable-warnings or --disable-warnings was given.
+if test "${enable_warnings+set}" = set; then
+  enableval="$enable_warnings"
+  if test $enableval = no; then
+        mutt_cv_warnings=no
+fi
+fi
+
+
+if test x$GCC = xyes -a $mutt_cv_warnings = yes; then
+        CFLAGS="-Wall -pedantic $CFLAGS"
+fi
+
+# Check whether --enable-nfs-fix or --disable-nfs-fix was given.
+if test "${enable_nfs_fix+set}" = set; then
+  enableval="$enable_nfs_fix"
+  if test x$enableval = xyes; then
+                cat >> confdefs.h <<\EOF
+#define NFS_ATTRIBUTE_HACK 1
+EOF
+
+        fi
+fi
+
+
+# Check whether --enable-buffy-size or --disable-buffy-size was given.
+if test "${enable_buffy_size+set}" = set; then
+  enableval="$enable_buffy_size"
+  if test x$enableval = xyes; then
+                cat >> confdefs.h <<\EOF
+#define BUFFY_SIZE 1
+EOF
+
+        fi
+fi
+
+
+# Check whether --enable-mailtool or --disable-mailtool was given.
+if test "${enable_mailtool+set}" = set; then
+  enableval="$enable_mailtool"
+  if test x$enableval = xyes; then
+                cat >> confdefs.h <<\EOF
+#define SUN_ATTACHMENT 1
+EOF
+
+        fi
+fi
+
+
+# Check whether --enable-locales-fix or --disable-locales-fix was given.
+if test "${enable_locales_fix+set}" = set; then
+  enableval="$enable_locales_fix"
+  if test x$enableval = xyes; then
+                cat >> confdefs.h <<\EOF
+#define LOCALES_HACK 1
+EOF
+
+        fi
+fi
+
+
+# Check whether --with-exec-shell or --without-exec-shell was given.
+if test "${with_exec_shell+set}" = set; then
+  withval="$with_exec_shell"
+  if test $withval != yes; then
+                cat >> confdefs.h <<EOF
+#define EXECSHELL "$withval"
+EOF
+
+         else
+                cat >> confdefs.h <<EOF
+#define EXECSHELL "/bin/sh"
+EOF
+
+        fi
+else
+  cat >> confdefs.h <<EOF
+#define EXECSHELL "/bin/sh"
+EOF
+
+fi
+
+
+# Check whether --enable-exact-address or --disable-exact-address was given.
+if test "${enable_exact_address+set}" = set; then
+  enableval="$enable_exact_address"
+  if test $enableval = yes; then
+                cat >> confdefs.h <<\EOF
+#define EXACT_ADDRESS 1
+EOF
+
+
+        fi
+fi
+
+
+
+
+
+
+
+
+# Check whether --enable-iconv or --disable-iconv was given.
+if test "${enable_iconv+set}" = set; then
+  enableval="$enable_iconv"
+  if test x$enableval = xno ; then
+                am_cv_func_iconv=no
+        fi
+
+fi
+
+
+echo $ac_n "checking for off_t""... $ac_c" 1>&6
+echo "configure:6204: checking for off_t" >&5
+if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 6209 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "(^|[^a-zA-Z_0-9])off_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_type_off_t=yes
+else
+  rm -rf conftest*
+  ac_cv_type_off_t=no
+fi
+rm -f conftest*
+
+fi
+echo "$ac_t""$ac_cv_type_off_t" 1>&6
+if test $ac_cv_type_off_t = no; then
+  cat >> confdefs.h <<\EOF
+#define off_t long
+EOF
+
+fi
+
+echo $ac_n "checking for size_t""... $ac_c" 1>&6
+echo "configure:6237: checking for size_t" >&5
+if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 6242 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_type_size_t=yes
+else
+  rm -rf conftest*
+  ac_cv_type_size_t=no
+fi
+rm -f conftest*
+
+fi
+echo "$ac_t""$ac_cv_type_size_t" 1>&6
+if test $ac_cv_type_size_t = no; then
+  cat >> confdefs.h <<\EOF
+#define size_t unsigned
+EOF
+
+fi
+
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments.  Useless!
+echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
+echo "configure:6272: checking for working alloca.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 6277 "configure"
+#include "confdefs.h"
+#include <alloca.h>
+int main() {
+char *p = alloca(2 * sizeof(int));
+; return 0; }
+EOF
+if { (eval echo configure:6284: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  ac_cv_header_alloca_h=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_header_alloca_h=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_header_alloca_h" 1>&6
+if test $ac_cv_header_alloca_h = yes; then
+  cat >> confdefs.h <<\EOF
+#define HAVE_ALLOCA_H 1
+EOF
+
+fi
+
+echo $ac_n "checking for alloca""... $ac_c" 1>&6
+echo "configure:6305: checking for alloca" >&5
+if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 6310 "configure"
+#include "confdefs.h"
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+#else
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# else
+#  if HAVE_ALLOCA_H
+#   include <alloca.h>
+#  else
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca /* predefined by HP cc +Olibcalls */
+char *alloca ();
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+int main() {
+char *p = (char *) alloca(1);
+; return 0; }
+EOF
+if { (eval echo configure:6338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  ac_cv_func_alloca_works=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_func_alloca_works=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_func_alloca_works" 1>&6
+if test $ac_cv_func_alloca_works = yes; then
+  cat >> confdefs.h <<\EOF
+#define HAVE_ALLOCA 1
+EOF
+
+fi
+
+if test $ac_cv_func_alloca_works = no; then
+  # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+  # that cause trouble.  Some versions do not even contain alloca or
+  # contain a buggy version.  If you still want to use their alloca,
+  # use ar to extract alloca.o from them instead of compiling alloca.c.
+  ALLOCA=alloca.${ac_objext}
+  cat >> confdefs.h <<\EOF
+#define C_ALLOCA 1
+EOF
+
+
+echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
+echo "configure:6370: checking whether alloca needs Cray hooks" >&5
+if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 6375 "configure"
+#include "confdefs.h"
+#if defined(CRAY) && ! defined(CRAY2)
+webecray
+#else
+wenotbecray
+#endif
+
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "webecray" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_os_cray=yes
+else
+  rm -rf conftest*
+  ac_cv_os_cray=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_os_cray" 1>&6
+if test $ac_cv_os_cray = yes; then
+for ac_func in _getb67 GETB67 getb67; do
+  echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:6400: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 6405 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:6428: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<EOF
+#define CRAY_STACKSEG_END $ac_func
+EOF
+
+  break
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+done
+fi
+
+echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
+echo "configure:6455: checking stack direction for C alloca" >&5
+if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_c_stack_direction=0
+else
+  cat > conftest.$ac_ext <<EOF
+#line 6463 "configure"
+#include "confdefs.h"
+find_stack_direction ()
+{
+  static char *addr = 0;
+  auto char dummy;
+  if (addr == 0)
+    {
+      addr = &dummy;
+      return find_stack_direction ();
+    }
+  else
+    return (&dummy > addr) ? 1 : -1;
+}
+main ()
+{
+  exit (find_stack_direction() < 0);
+}
+EOF
+if { (eval echo configure:6482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_c_stack_direction=1
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_c_stack_direction=-1
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$ac_cv_c_stack_direction" 1>&6
+cat >> confdefs.h <<EOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
+EOF
+
+fi
+
+for ac_hdr in unistd.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:6507: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 6512 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:6517: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+for ac_func in getpagesize
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:6546: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 6551 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:6574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+echo $ac_n "checking for working mmap""... $ac_c" 1>&6
+echo "configure:6599: checking for working mmap" >&5
+if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_mmap_fixed_mapped=no
+else
+  cat > conftest.$ac_ext <<EOF
+#line 6607 "configure"
+#include "confdefs.h"
+
+/* Thanks to Mike Haertel and Jim Avera for this test.
+   Here is a matrix of mmap possibilities:
+       mmap private not fixed
+       mmap private fixed at somewhere currently unmapped
+       mmap private fixed at somewhere already mapped
+       mmap shared not fixed
+       mmap shared fixed at somewhere currently unmapped
+       mmap shared fixed at somewhere already mapped
+   For private mappings, we should verify that changes cannot be read()
+   back from the file, nor mmap's back from the file at a different
+   address.  (There have been systems where private was not correctly
+   implemented like the infamous i386 svr4.0, and systems where the
+   VM page cache was not coherent with the filesystem buffer cache
+   like early versions of FreeBSD and possibly contemporary NetBSD.)
+   For shared mappings, we should conversely verify that changes get
+   propogated back to all the places they're supposed to be.
+
+   Grep wants private fixed already mapped.
+   The main things grep needs to know about mmap are:
+   * does it exist and is it safe to write into the mmap'd area
+   * how to use it (BSD variants)  */
+#include <sys/types.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+
+/* This mess was copied from the GNU getpagesize.h.  */
+#ifndef HAVE_GETPAGESIZE
+# ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+# endif
+
+/* Assume that all systems that can run configure have sys/param.h.  */
+# ifndef HAVE_SYS_PARAM_H
+#  define HAVE_SYS_PARAM_H 1
+# endif
+
+# ifdef _SC_PAGESIZE
+#  define getpagesize() sysconf(_SC_PAGESIZE)
+# else /* no _SC_PAGESIZE */
+#  ifdef HAVE_SYS_PARAM_H
+#   include <sys/param.h>
+#   ifdef EXEC_PAGESIZE
+#    define getpagesize() EXEC_PAGESIZE
+#   else /* no EXEC_PAGESIZE */
+#    ifdef NBPG
+#     define getpagesize() NBPG * CLSIZE
+#     ifndef CLSIZE
+#      define CLSIZE 1
+#     endif /* no CLSIZE */
+#    else /* no NBPG */
+#     ifdef NBPC
+#      define getpagesize() NBPC
+#     else /* no NBPC */
+#      ifdef PAGESIZE
+#       define getpagesize() PAGESIZE
+#      endif /* PAGESIZE */
+#     endif /* no NBPC */
+#    endif /* no NBPG */
+#   endif /* no EXEC_PAGESIZE */
+#  else /* no HAVE_SYS_PARAM_H */
+#   define getpagesize() 8192  /* punt totally */
+#  endif /* no HAVE_SYS_PARAM_H */
+# endif /* no _SC_PAGESIZE */
+
+#endif /* no HAVE_GETPAGESIZE */
+
+#ifdef __cplusplus
+extern "C" { void *malloc(unsigned); }
+#else
+char *malloc();
+#endif
+
+int
+main()
+{
+       char *data, *data2, *data3;
+       int i, pagesize;
+       int fd;
+
+       pagesize = getpagesize();
+
+       /*
+        * First, make a file with some known garbage in it.
+        */
+       data = malloc(pagesize);
+       if (!data)
+               exit(1);
+       for (i = 0; i < pagesize; ++i)
+               *(data + i) = rand();
+       umask(0);
+       fd = creat("conftestmmap", 0600);
+       if (fd < 0)
+               exit(1);
+       if (write(fd, data, pagesize) != pagesize)
+               exit(1);
+       close(fd);
+
+       /*
+        * Next, try to mmap the file at a fixed address which
+        * already has something else allocated at it.  If we can,
+        * also make sure that we see the same garbage.
+        */
+       fd = open("conftestmmap", O_RDWR);
+       if (fd < 0)
+               exit(1);
+       data2 = malloc(2 * pagesize);
+       if (!data2)
+               exit(1);
+       data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1);
+       if (data2 != mmap(data2, pagesize, PROT_READ | PROT_WRITE,
+           MAP_PRIVATE | MAP_FIXED, fd, 0L))
+               exit(1);
+       for (i = 0; i < pagesize; ++i)
+               if (*(data + i) != *(data2 + i))
+                       exit(1);
+
+       /*
+        * Finally, make sure that changes to the mapped area
+        * do not percolate back to the file as seen by read().
+        * (This is a bug on some variants of i386 svr4.0.)
+        */
+       for (i = 0; i < pagesize; ++i)
+               *(data2 + i) = *(data2 + i) + 1;
+       data3 = malloc(pagesize);
+       if (!data3)
+               exit(1);
+       if (read(fd, data3, pagesize) != pagesize)
+               exit(1);
+       for (i = 0; i < pagesize; ++i)
+               if (*(data + i) != *(data3 + i))
+                       exit(1);
+       close(fd);
+       unlink("conftestmmap");
+       exit(0);
+}
+
+EOF
+if { (eval echo configure:6747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_func_mmap_fixed_mapped=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_func_mmap_fixed_mapped=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$ac_cv_func_mmap_fixed_mapped" 1>&6
+if test $ac_cv_func_mmap_fixed_mapped = yes; then
+  cat >> confdefs.h <<\EOF
+#define HAVE_MMAP 1
+EOF
+
+fi
+
+
+    echo $ac_n "checking whether we are using the GNU C Library 2.1 or newer""... $ac_c" 1>&6
+echo "configure:6771: checking whether we are using the GNU C Library 2.1 or newer" >&5
+if eval "test \"`echo '$''{'ac_cv_gnu_library_2_1'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 6776 "configure"
+#include "confdefs.h"
+
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+       
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "Lucky GNU user" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_gnu_library_2_1=yes
+else
+  rm -rf conftest*
+  ac_cv_gnu_library_2_1=no
+fi
+rm -f conftest*
+
+      
+    
+fi
+
+echo "$ac_t""$ac_cv_gnu_library_2_1" 1>&6
+    
+    GLIBC21="$ac_cv_gnu_library_2_1"
+  
+
+                                    
+   for ac_hdr in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+stdlib.h string.h unistd.h sys/param.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:6812: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 6817 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:6822: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+   for ac_func in feof_unlocked fgets_unlocked getcwd getegid geteuid \
+getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \
+strdup strtoul tsearch __argz_count __argz_stringify __argz_next
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:6853: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 6858 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:6881: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+   
+    
+  # Check whether --with-libiconv-prefix or --without-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then
+  withval="$with_libiconv_prefix"
+  
+    for dir in `echo "$withval" | tr : ' '`; do
+      if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
+      if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi
+    done
+   
+fi
+
+
+  echo $ac_n "checking for iconv""... $ac_c" 1>&6
+echo "configure:6921: checking for iconv" >&5
+if eval "test \"`echo '$''{'am_cv_func_iconv'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    cat > conftest.$ac_ext <<EOF
+#line 6929 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <iconv.h>
+int main() {
+iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);
+; return 0; }
+EOF
+if { (eval echo configure:6939: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  am_cv_func_iconv=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS -liconv"
+      cat > conftest.$ac_ext <<EOF
+#line 6951 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <iconv.h>
+int main() {
+iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);
+; return 0; }
+EOF
+if { (eval echo configure:6961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+      LIBS="$am_save_LIBS"
+    fi
+  
+fi
+
+echo "$ac_t""$am_cv_func_iconv" 1>&6
+  if test "$am_cv_func_iconv" = yes; then
+    cat >> confdefs.h <<\EOF
+#define HAVE_ICONV 1
+EOF
+
+    echo $ac_n "checking for iconv declaration""... $ac_c" 1>&6
+echo "configure:6982: checking for iconv declaration" >&5
+    if eval "test \"`echo '$''{'am_cv_proto_iconv'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+      cat > conftest.$ac_ext <<EOF
+#line 6988 "configure"
+#include "confdefs.h"
+
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:7007: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  am_cv_proto_iconv_arg1=""
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  am_cv_proto_iconv_arg1="const"
+fi
+rm -f conftest*
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
+fi
+
+    am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    echo "$ac_t""${ac_t:-
+         }$am_cv_proto_iconv" 1>&6
+    cat >> confdefs.h <<EOF
+#define ICONV_CONST $am_cv_proto_iconv_arg1
+EOF
+
+  fi
+  LIBICONV=
+  if test "$am_cv_lib_iconv" = yes; then
+    LIBICONV="-liconv"
+  fi
+  
+
+   
+  echo $ac_n "checking for nl_langinfo and CODESET""... $ac_c" 1>&6
+echo "configure:7036: checking for nl_langinfo and CODESET" >&5
+if eval "test \"`echo '$''{'am_cv_langinfo_codeset'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 7041 "configure"
+#include "confdefs.h"
+#include <langinfo.h>
+int main() {
+char* cs = nl_langinfo(CODESET);
+; return 0; }
+EOF
+if { (eval echo configure:7048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  am_cv_langinfo_codeset=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  am_cv_langinfo_codeset=no
+fi
+rm -f conftest*
+    
+fi
+
+echo "$ac_t""$am_cv_langinfo_codeset" 1>&6
+  if test $am_cv_langinfo_codeset = yes; then
+    cat >> confdefs.h <<\EOF
+#define HAVE_LANGINFO_CODESET 1
+EOF
+
+  fi
+
+   if test $ac_cv_header_locale_h = yes; then
+    echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
+echo "configure:7071: checking for LC_MESSAGES" >&5
+if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 7076 "configure"
+#include "confdefs.h"
+#include <locale.h>
+int main() {
+return LC_MESSAGES
+; return 0; }
+EOF
+if { (eval echo configure:7083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  am_cv_val_LC_MESSAGES=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  am_cv_val_LC_MESSAGES=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$am_cv_val_LC_MESSAGES" 1>&6
+    if test $am_cv_val_LC_MESSAGES = yes; then
+      cat >> confdefs.h <<\EOF
+#define HAVE_LC_MESSAGES 1
+EOF
+
+    fi
+  fi
+   echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
+echo "configure:7104: checking whether NLS is requested" >&5
+        # Check whether --enable-nls or --disable-nls was given.
+if test "${enable_nls+set}" = set; then
+  enableval="$enable_nls"
+  USE_NLS=$enableval
+else
+  USE_NLS=yes
+fi
+
+    echo "$ac_t""$USE_NLS" 1>&6
+    
+
+    BUILD_INCLUDED_LIBINTL=no
+    USE_INCLUDED_LIBINTL=no
+    INTLLIBS=
+
+        if test "$USE_NLS" = "yes"; then
+      cat >> confdefs.h <<\EOF
+#define ENABLE_NLS 1
+EOF
+
+      echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
+echo "configure:7126: checking whether included gettext is requested" >&5
+      # Check whether --with-included-gettext or --without-included-gettext was given.
+if test "${with_included_gettext+set}" = set; then
+  withval="$with_included_gettext"
+  nls_cv_force_use_gnu_gettext=$withval
+else
+  nls_cv_force_use_gnu_gettext=no
+fi
+
+      echo "$ac_t""$nls_cv_force_use_gnu_gettext" 1>&6
+
+      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+                               CATOBJEXT=NONE
+
+                
+        
+
+       ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
+echo "configure:7146: checking for libintl.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 7151 "configure"
+#include "confdefs.h"
+#include <libintl.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:7156: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  echo $ac_n "checking for GNU gettext in libc""... $ac_c" 1>&6
+echo "configure:7173: checking for GNU gettext in libc" >&5
+if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 7178 "configure"
+#include "confdefs.h"
+#include <libintl.h>
+extern int _nl_msg_cat_cntr;
+int main() {
+bindtextdomain ("", "");
+return (int) gettext ("") + _nl_msg_cat_cntr
+; return 0; }
+EOF
+if { (eval echo configure:7187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  gt_cv_func_gnugettext1_libc=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  gt_cv_func_gnugettext1_libc=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$gt_cv_func_gnugettext1_libc" 1>&6
+
+          if test "$gt_cv_func_gnugettext1_libc" != "yes"; then
+            echo $ac_n "checking for GNU gettext in libintl""... $ac_c" 1>&6
+echo "configure:7203: checking for GNU gettext in libintl" >&5
+if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libintl'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  gt_save_LIBS="$LIBS"
+               LIBS="$LIBS -lintl $LIBICONV"
+               cat > conftest.$ac_ext <<EOF
+#line 7210 "configure"
+#include "confdefs.h"
+#include <libintl.h>
+extern int _nl_msg_cat_cntr;
+int main() {
+bindtextdomain ("", "");
+return (int) gettext ("") + _nl_msg_cat_cntr
+; return 0; }
+EOF
+if { (eval echo configure:7219: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  gt_cv_func_gnugettext1_libintl=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  gt_cv_func_gnugettext1_libintl=no
+fi
+rm -f conftest*
+               LIBS="$gt_save_LIBS"
+fi
+
+echo "$ac_t""$gt_cv_func_gnugettext1_libintl" 1>&6
+          fi
+
+                                          if test "$gt_cv_func_gnugettext1_libc" = "yes" \
+             || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \
+                  && test "$PACKAGE" != gettext; }; then
+            cat >> confdefs.h <<\EOF
+#define HAVE_GETTEXT 1
+EOF
+
+
+            if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then
+                                      INTLLIBS="-lintl $LIBICONV"
+            fi
+
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $INTLLIBS"
+            for ac_func in dcgettext
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:7252: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 7257 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:7280: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+            LIBS="$gt_save_LIBS"
+
+                    # Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:7309: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$MSGFMT" in
+  /*)
+  ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1; then
+       ac_cv_path_MSGFMT="$ac_dir/$ac_word"
+       break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+  ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+  echo "$ac_t""$MSGFMT" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+            # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:7343: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$GMSGFMT" in
+  /*)
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_GMSGFMT="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+  ;;
+esac
+fi
+GMSGFMT="$ac_cv_path_GMSGFMT"
+if test -n "$GMSGFMT"; then
+  echo "$ac_t""$GMSGFMT" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+                    # Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:7380: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$XGETTEXT" in
+  /*)
+  ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if $ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1; then
+       ac_cv_path_XGETTEXT="$ac_dir/$ac_word"
+       break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+  ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+  echo "$ac_t""$XGETTEXT" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+            CATOBJEXT=.gmo
+          fi
+       
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+        if test "$CATOBJEXT" = "NONE"; then
+                         nls_cv_use_gnu_gettext=yes
+        fi
+      fi
+
+      if test "$nls_cv_use_gnu_gettext" = "yes"; then
+                INTLOBJS="\$(GETTOBJS)"
+        # Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:7430: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$MSGFMT" in
+  /*)
+  ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1; then
+       ac_cv_path_MSGFMT="$ac_dir/$ac_word"
+       break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+  ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+  echo "$ac_t""$MSGFMT" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+        # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:7464: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$GMSGFMT" in
+  /*)
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_GMSGFMT="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+  ;;
+esac
+fi
+GMSGFMT="$ac_cv_path_GMSGFMT"
+if test -n "$GMSGFMT"; then
+  echo "$ac_t""$GMSGFMT" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+        # Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:7500: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$XGETTEXT" in
+  /*)
+  ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if $ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1; then
+       ac_cv_path_XGETTEXT="$ac_dir/$ac_word"
+       break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+  ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+  echo "$ac_t""$XGETTEXT" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+        
+       BUILD_INCLUDED_LIBINTL=yes
+       USE_INCLUDED_LIBINTL=yes
+        CATOBJEXT=.gmo
+       INTLLIBS="\$(top_builddir)/intl/libintl.a $LIBICONV"
+       LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+      fi
+
+                  if test "$GMSGFMT" != ":"; then
+                       if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then
+         : ;
+       else
+         echo "$ac_t""found msgfmt program is not GNU msgfmt; ignore it" 1>&6
+         GMSGFMT=":"
+       fi
+      fi
+
+                  if test "$XGETTEXT" != ":"; then
+                       if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then
+         : ;
+       else
+         echo "$ac_t""found xgettext program is not GNU xgettext; ignore it" 1>&6
+         XGETTEXT=":"
+       fi
+      fi
+
+            POSUB=po
+    fi
+    
+
+
+            if test "$PACKAGE" = gettext; then
+      BUILD_INCLUDED_LIBINTL=yes
+    fi
+
+                                            for ac_prog in bison
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:7571: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_INTLBISON'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$INTLBISON"; then
+  ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_INTLBISON="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+INTLBISON="$ac_cv_prog_INTLBISON"
+if test -n "$INTLBISON"; then
+  echo "$ac_t""$INTLBISON" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+test -n "$INTLBISON" && break
+done
+
+    if test -z "$INTLBISON"; then
+      ac_verc_fail=yes
+    else
+            echo $ac_n "checking version of bison""... $ac_c" 1>&6
+echo "configure:7604: checking version of bison" >&5
+      ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+      case $ac_prog_version in
+        '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+        1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+           ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+        *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+      esac
+      echo "$ac_t""$ac_prog_version" 1>&6
+    fi
+    if test $ac_verc_fail = yes; then
+      INTLBISON=:
+    fi
+
+                for lang in $ALL_LINGUAS; do
+      GMOFILES="$GMOFILES $lang.gmo"
+      POFILES="$POFILES $lang.po"
+    done
+
+        
+    
+    
+    
+    
+    
+    
+    
+    
+
+        nls_cv_header_intl=
+    nls_cv_header_libgt=
+
+        DATADIRNAME=share
+    
+
+        INSTOBJEXT=.mo
+    
+
+        GENCAT=gencat
+    
+  
+
+   if test "x$CATOBJEXT" != "x"; then
+     if test "x$ALL_LINGUAS" = "x"; then
+       LINGUAS=
+     else
+       echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
+echo "configure:7651: checking for catalogs to be installed" >&5
+       NEW_LINGUAS=
+       for presentlang in $ALL_LINGUAS; do
+         useit=no
+         for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do
+           # Use the presentlang catalog if desiredlang is
+           #   a. equal to presentlang, or
+           #   b. a variant of presentlang (because in this case,
+           #      presentlang can be used as a fallback for messages
+           #      which are not translated in the desiredlang catalog).
+           case "$desiredlang" in
+             "$presentlang"*) useit=yes;;
+           esac
+         done
+         if test $useit = yes; then
+           NEW_LINGUAS="$NEW_LINGUAS $presentlang"
+         fi
+       done
+       LINGUAS=$NEW_LINGUAS
+       echo "$ac_t""$LINGUAS" 1>&6
+     fi
+
+          if test -n "$LINGUAS"; then
+       for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+     fi
+   fi
+
+            MKINSTALLDIRS=
+   if test -n "$ac_aux_dir"; then
+     MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
+   fi
+   if test -z "$MKINSTALLDIRS"; then
+     MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+   fi
+   
+
+      INTL_LIBTOOL_SUFFIX_PREFIX=
+   
+  
+
+if test "$am_cv_func_iconv" != "yes"
+then
+  echo "configure: warning: Configuring without iconv support. See INSTALL for details" 1>&2
+else
+
+for ac_hdr in iconv.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:7700: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 7705 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:7710: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+ echo $ac_n "checking whether iconv.h defines iconv_t""... $ac_c" 1>&6
+echo "configure:7731: checking whether iconv.h defines iconv_t" >&5
+         cat > conftest.$ac_ext <<EOF
+#line 7733 "configure"
+#include "confdefs.h"
+#include <iconv.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "typedef.*iconv_t" >/dev/null 2>&1; then
+  rm -rf conftest*
+  echo "$ac_t""yes" 1>&6
+                 cat >> confdefs.h <<\EOF
+#define HAVE_ICONV_T_DEF 1
+EOF
+
+else
+  rm -rf conftest*
+  echo "$ac_t""no" 1>&6
+fi
+rm -f conftest*
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+echo $ac_n "checking whether this iconv is good enough""... $ac_c" 1>&6
+echo "configure:7758: checking whether this iconv is good enough" >&5
+if eval "test \"`echo '$''{'mutt_cv_iconv_good'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  mutt_save_LIBS="$LIBS"
+        LIBS="$LIBS $LIBICONV"
+        if test "$cross_compiling" = yes; then
+  mutt_cv_iconv_good=yes
+else
+  cat > conftest.$ac_ext <<EOF
+#line 7768 "configure"
+#include "confdefs.h"
+
+#include <iconv.h>
+int main()
+{
+  iconv_t cd;
+  char buf[4];
+  char *ob;
+  size_t obl;
+  ob = buf, obl = sizeof(buf);
+  return ((cd = iconv_open("UTF-8", "UTF-8")) != (iconv_t)(-1) &&
+          (iconv(cd, 0, 0, &ob, &obl) ||
+           !(ob == buf && obl == sizeof(buf)) ||
+           iconv_close(cd)));
+}
+                
+EOF
+if { (eval echo configure:7786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  mutt_cv_iconv_good=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  mutt_cv_iconv_good=no
+fi
+rm -fr conftest*
+fi
+
+        LIBS="$mutt_save_LIBS"
+fi
+
+echo "$ac_t""$mutt_cv_iconv_good" 1>&6
+if test "$mutt_cv_iconv_good" = no; then
+  { echo "configure: error: Try using libiconv instead" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether iconv is non-transcribing""... $ac_c" 1>&6
+echo "configure:7807: checking whether iconv is non-transcribing" >&5
+if eval "test \"`echo '$''{'mutt_cv_iconv_nontrans'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  mutt_save_LIBS="$LIBS"
+        LIBS="$LIBS $LIBICONV"
+        if test "$cross_compiling" = yes; then
+  mutt_cv_iconv_nontrans=no
+else
+  cat > conftest.$ac_ext <<EOF
+#line 7817 "configure"
+#include "confdefs.h"
+
+#include <iconv.h>
+#include <string.h>
+int main()
+{
+  iconv_t cd;
+  const char *ib;
+  char *ob;
+  size_t ibl, obl;
+  const char *s = "\304\211";
+  char t[3];
+  ib = s, ibl = 2, ob = t, obl = 3;
+  return ((cd = iconv_open("UTF-8", "UTF-8")) == (iconv_t)(-1) ||
+          iconv(cd, &ib, &ibl, &ob, &obl));
+}
+                
+EOF
+if { (eval echo configure:7836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  mutt_cv_iconv_nontrans=no
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  mutt_cv_iconv_nontrans=yes
+fi
+rm -fr conftest*
+fi
+
+        LIBS="$mutt_save_LIBS"
+fi
+
+echo "$ac_t""$mutt_cv_iconv_nontrans" 1>&6
+if test "$mutt_cv_iconv_nontrans" = yes; then
+  cat >> confdefs.h <<\EOF
+#define ICONV_NONTRANS 1
+EOF
+
+else
+  cat >> confdefs.h <<\EOF
+#define ICONV_NONTRANS 0
+EOF
+
+fi
+
+CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/intl"
+
+if test "$BUILD_INCLUDED_LIBINTL" = "yes"; then
+  cat >> confdefs.h <<\EOF
+#define HAVE_BIND_TEXTDOMAIN_CODESET 1
+EOF
+
+else
+  for ac_func in bind_textdomain_codeset
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:7875: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 7880 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:7903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+fi
+
+fi # libiconv
+
+
+for ac_hdr in wchar.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:7936: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 7941 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:7946: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+echo $ac_n "checking for wchar_t""... $ac_c" 1>&6
+echo "configure:7974: checking for wchar_t" >&5
+if eval "test \"`echo '$''{'mutt_cv_wchar_t'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 7979 "configure"
+#include "confdefs.h"
+
+#include <stddef.h>
+#include <stdlib.h>
+#ifdef HAVE_WCHAR_H
+#include <wchar.h>
+#endif
+                
+int main() {
+ wchar_t wc; return 0; 
+; return 0; }
+EOF
+if { (eval echo configure:7992: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  mutt_cv_wchar_t=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  mutt_cv_wchar_t=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$mutt_cv_wchar_t" 1>&6
+
+if test "$mutt_cv_wchar_t" = no; then
+        cat >> confdefs.h <<\EOF
+#define wchar_t int
+EOF
+
+fi
+
+echo $ac_n "checking for wint_t""... $ac_c" 1>&6
+echo "configure:8014: checking for wint_t" >&5
+if eval "test \"`echo '$''{'mutt_cv_wint_t'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 8019 "configure"
+#include "confdefs.h"
+
+#include <stddef.h>
+#include <stdlib.h>
+#ifdef HAVE_WCHAR_H
+#include <wchar.h>
+#endif
+                
+int main() {
+ wint_t wc; return 0; 
+; return 0; }
+EOF
+if { (eval echo configure:8032: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  mutt_cv_wint_t=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  mutt_cv_wint_t=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$mutt_cv_wint_t" 1>&6
+
+if test "$mutt_cv_wint_t" = no; then
+        cat >> confdefs.h <<\EOF
+#define wint_t int
+EOF
+
+fi
+
+for ac_hdr in wctype.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:8057: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 8062 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:8067: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+for ac_func in iswalnum iswalpha  iswcntrl iswdigit
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:8096: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 8101 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:8124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+for ac_func in iswgraph iswlower iswprint iswpunct iswspace iswupper
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:8151: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 8156 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:8179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+for ac_func in iswxdigit towupper towlower
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:8206: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 8211 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:8234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
+echo "configure:8260: checking for mbstate_t" >&5
+if eval "test \"`echo '$''{'mutt_cv_mbstate_t'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 8265 "configure"
+#include "confdefs.h"
+
+#include <stddef.h>
+#include <stdlib.h>
+#ifdef HAVE_WCHAR_H
+#include <wchar.h>
+#endif
+                
+int main() {
+ mbstate_t s; return 0; 
+; return 0; }
+EOF
+if { (eval echo configure:8278: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  mutt_cv_mbstate_t=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  mutt_cv_mbstate_t=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$mutt_cv_mbstate_t" 1>&6
+
+if test "$mutt_cv_mbstate_t" = no; then
+        cat >> confdefs.h <<\EOF
+#define mbstate_t int
+EOF
+
+fi
+
+wc_funcs=maybe
+# Check whether --with-wc-funcs or --without-wc-funcs was given.
+if test "${with_wc_funcs+set}" = set; then
+  withval="$with_wc_funcs"
+  wc_funcs=$withval
+fi
+
+
+if test "$wc_funcs" != yes -a "$wc_funcs" != no; then
+        echo $ac_n "checking for wchar_t functions""... $ac_c" 1>&6
+echo "configure:8309: checking for wchar_t functions" >&5
+if eval "test \"`echo '$''{'mutt_cv_wc_funcs'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  mutt_cv_wc_funcs=no
+                cat > conftest.$ac_ext <<EOF
+#line 8315 "configure"
+#include "confdefs.h"
+
+#define _XOPEN_SOURCE 1
+#include <stddef.h>
+#include <stdlib.h>
+#ifdef HAVE_WCTYPE_H
+#include <wctype.h>
+#endif
+#ifdef HAVE_WCHAR_H
+#include <wchar.h>
+#endif
+int main() {
+mbrtowc(0, 0, 0, 0); wctomb(0, 0); wcwidth(0);
+        iswprint(0); iswspace(0); towlower(0); towupper(0); iswalnum(0)
+; return 0; }
+EOF
+if { (eval echo configure:8332: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  mutt_cv_wc_funcs=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$mutt_cv_wc_funcs" 1>&6
+        wc_funcs=$mutt_cv_wc_funcs
+fi
+
+if test $wc_funcs = yes; then
+        cat >> confdefs.h <<\EOF
+#define HAVE_WC_FUNCS 1
+EOF
+
+fi
+
+echo $ac_n "checking for nl_langinfo and CODESET""... $ac_c" 1>&6
+echo "configure:8354: checking for nl_langinfo and CODESET" >&5
+if eval "test \"`echo '$''{'mutt_cv_langinfo_codeset'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 8359 "configure"
+#include "confdefs.h"
+#include <langinfo.h>
+int main() {
+char* cs = nl_langinfo(CODESET);
+; return 0; }
+EOF
+if { (eval echo configure:8366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  mutt_cv_langinfo_codeset=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  mutt_cv_langinfo_codeset=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$mutt_cv_langinfo_codeset" 1>&6
+if test $mutt_cv_langinfo_codeset = yes; then
+  cat >> confdefs.h <<\EOF
+#define HAVE_LANGINFO_CODESET 1
+EOF
+
+fi
+
+echo $ac_n "checking for nl_langinfo and YESEXPR""... $ac_c" 1>&6
+echo "configure:8387: checking for nl_langinfo and YESEXPR" >&5
+if eval "test \"`echo '$''{'mutt_cv_langinfo_yesexpr'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 8392 "configure"
+#include "confdefs.h"
+#include <langinfo.h>
+int main() {
+char* cs = nl_langinfo(YESEXPR);
+; return 0; }
+EOF
+if { (eval echo configure:8399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  mutt_cv_langinfo_yesexpr=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  mutt_cv_langinfo_yesexpr=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$mutt_cv_langinfo_yesexpr" 1>&6
+if test $mutt_cv_langinfo_yesexpr = yes; then
+  cat >> confdefs.h <<\EOF
+#define HAVE_LANGINFO_YESEXPR 1
+EOF
+
+fi
+
+
+  # Check whether --with-libesmtp or --without-libesmtp was given.
+if test "${with_libesmtp+set}" = set; then
+  withval="$with_libesmtp"
+   if test "$with_libesmtp" != "no"
+      then
+        mutt_libesmtp_check_path="$PATH"
+
+        if test "$with_libesmtp" != "yes"
+        then
+          mutt_libesmtp_check_path="$tmp_path:$withval/bin"
+        fi
+
+                # Extract the first word of "libesmtp-config", so it can be a program name with args.
+set dummy libesmtp-config; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:8435: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_mutt_libesmtp_config_path'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$mutt_libesmtp_config_path" in
+  /*)
+  ac_cv_path_mutt_libesmtp_config_path="$mutt_libesmtp_config_path" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_mutt_libesmtp_config_path="$mutt_libesmtp_config_path" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$mutt_libesmtp_check_path"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_mutt_libesmtp_config_path="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_mutt_libesmtp_config_path" && ac_cv_path_mutt_libesmtp_config_path="no"
+  ;;
+esac
+fi
+mutt_libesmtp_config_path="$ac_cv_path_mutt_libesmtp_config_path"
+if test -n "$mutt_libesmtp_config_path"; then
+  echo "$ac_t""$mutt_libesmtp_config_path" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+        if test "$mutt_libesmtp_config_path" = "no"
+        then
+          { echo "configure: error: libesmtp-config binary not found." 1>&2; exit 1; }
+        fi
+
+                mutt_libesmtp_cflags=`$mutt_libesmtp_config_path --cflags`
+        mutt_libesmtp_libs=`$mutt_libesmtp_config_path --libs`
+
+                temp_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $mutt_libesmtp_cflags"
+        ac_safe=`echo "libesmtp.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for libesmtp.h""... $ac_c" 1>&6
+echo "configure:8481: checking for libesmtp.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 8486 "configure"
+#include "confdefs.h"
+#include <libesmtp.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:8491: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+{ echo "configure: error: Could not find libesmtp.h" 1>&2; exit 1; }
+fi
+
+        CFLAGS="$temp_CFLAGS"
+
+                temp_CFLAGS="$CFLAGS"
+        temp_LIBS="$LIBS"
+        CFLAGS="$CFLAGS $mutt_libesmtp_cflags"
+        LIBS="$LIBS $mutt_libesmtp_libs"
+        echo $ac_n "checking for smtp_create_session in -lesmtp""... $ac_c" 1>&6
+echo "configure:8520: checking for smtp_create_session in -lesmtp" >&5
+ac_lib_var=`echo esmtp'_'smtp_create_session | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lesmtp  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 8528 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char smtp_create_session();
+
+int main() {
+smtp_create_session()
+; return 0; }
+EOF
+if { (eval echo configure:8539: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo esmtp | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lesmtp $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+{ echo "configure: error: Could not find libesmtp" 1>&2; exit 1; }
+fi
+
+        CFLAGS="$temp_CFLAGS"
+        LIBS="$temp_LIBS"
+
+                        use_libesmtp=yes
+      fi
+    
+  
+fi
+
+
+if test x$use_libesmtp = xyes; then
+    CFLAGS="$CFLAGS $mutt_libesmtp_cflags"
+    MUTTLIBS="$MUTTLIBS $mutt_libesmtp_libs"
+    MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_libesmtp.o"
+
+    cat >> confdefs.h <<\EOF
+#define USE_LIBESMTP 1
+EOF
+
+fi
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs.  It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already.  You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+  case `(ac_space=' '; set | grep ac_space) 2>&1` in
+  *ac_space=\ *)
+    # `set' does not quote correctly, so add quotes (double-quote substitution
+    # turns \\\\ into \\, and sed turns \\ into \).
+    sed -n \
+      -e "s/'/'\\\\''/g" \
+      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+    ;;
+  *)
+    # `set' quotes correctly as required by POSIX, so do not add quotes.
+    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+    ;;
+  esac >> confcache
+if cmp -s $cache_file confcache; then
+  :
+else
+  if test -w $cache_file; then
+    echo "updating cache $cache_file"
+    cat confcache > $cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[        ]*VPATH[        ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+  case "\$ac_option" in
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+    echo "$CONFIG_STATUS generated by autoconf version 2.13"
+    exit 0 ;;
+  -help | --help | --hel | --he | --h)
+    echo "\$ac_cs_usage"; exit 0 ;;
+  *) echo "\$ac_cs_usage"; exit 1 ;;
+  esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile intl/Makefile m4/Makefile
+        po/Makefile.in doc/Makefile contrib/Makefile
+        muttbug.sh
+        imap/Makefile
+        Muttrc.head
+        doc/instdoc.sh config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@PACKAGE@%$PACKAGE%g
+s%@VERSION@%$VERSION%g
+s%@ACLOCAL@%$ACLOCAL%g
+s%@AUTOCONF@%$AUTOCONF%g
+s%@AUTOMAKE@%$AUTOMAKE%g
+s%@AUTOHEADER@%$AUTOHEADER%g
+s%@MAKEINFO@%$MAKEINFO%g
+s%@SET_MAKE@%$SET_MAKE%g
+s%@host@%$host%g
+s%@host_alias@%$host_alias%g
+s%@host_cpu@%$host_cpu%g
+s%@host_vendor@%$host_vendor%g
+s%@host_os@%$host_os%g
+s%@CC@%$CC%g
+s%@CPP@%$CPP%g
+s%@U@%$U%g
+s%@ANSI2KNR@%$ANSI2KNR%g
+s%@RANLIB@%$RANLIB%g
+s%@build@%$build%g
+s%@build_alias@%$build_alias%g
+s%@build_cpu@%$build_cpu%g
+s%@build_vendor@%$build_vendor%g
+s%@build_os@%$build_os%g
+s%@AR@%$AR%g
+s%@DBX@%$DBX%g
+s%@GDB@%$GDB%g
+s%@SDB@%$SDB%g
+s%@DEBUGGER@%$DEBUGGER%g
+s%@SENDMAIL@%$SENDMAIL%g
+s%@OPS@%$OPS%g
+s%@PGPAUX_TARGET@%$PGPAUX_TARGET%g
+s%@SMIMEAUX_TARGET@%$SMIMEAUX_TARGET%g
+s%@SUBVERSION@%$SUBVERSION%g
+s%@ISPELL@%$ISPELL%g
+s%@LIBOBJS@%$LIBOBJS%g
+s%@DOTLOCK_TARGET@%$DOTLOCK_TARGET%g
+s%@docdir@%$docdir%g
+s%@DOTLOCK_GROUP@%$DOTLOCK_GROUP%g
+s%@DOTLOCK_PERMISSION@%$DOTLOCK_PERMISSION%g
+s%@BUILD_IMAP_TRUE@%$BUILD_IMAP_TRUE%g
+s%@BUILD_IMAP_FALSE@%$BUILD_IMAP_FALSE%g
+s%@KRB5CFGPATH@%$KRB5CFGPATH%g
+s%@USE_GSS_TRUE@%$USE_GSS_TRUE%g
+s%@USE_GSS_FALSE@%$USE_GSS_FALSE%g
+s%@USE_SSL_TRUE@%$USE_SSL_TRUE%g
+s%@USE_SSL_FALSE@%$USE_SSL_FALSE%g
+s%@USE_SASL_TRUE@%$USE_SASL_TRUE%g
+s%@USE_SASL_FALSE@%$USE_SASL_FALSE%g
+s%@MUTTLIBS@%$MUTTLIBS%g
+s%@MUTT_LIB_OBJECTS@%$MUTT_LIB_OBJECTS%g
+s%@LIBIMAP@%$LIBIMAP%g
+s%@LIBIMAPDEPS@%$LIBIMAPDEPS%g
+s%@ALLOCA@%$ALLOCA%g
+s%@GLIBC21@%$GLIBC21%g
+s%@LIBICONV@%$LIBICONV%g
+s%@USE_NLS@%$USE_NLS%g
+s%@MSGFMT@%$MSGFMT%g
+s%@GMSGFMT@%$GMSGFMT%g
+s%@XGETTEXT@%$XGETTEXT%g
+s%@INTLBISON@%$INTLBISON%g
+s%@BUILD_INCLUDED_LIBINTL@%$BUILD_INCLUDED_LIBINTL%g
+s%@USE_INCLUDED_LIBINTL@%$USE_INCLUDED_LIBINTL%g
+s%@CATALOGS@%$CATALOGS%g
+s%@CATOBJEXT@%$CATOBJEXT%g
+s%@GMOFILES@%$GMOFILES%g
+s%@INTLLIBS@%$INTLLIBS%g
+s%@INTLOBJS@%$INTLOBJS%g
+s%@POFILES@%$POFILES%g
+s%@POSUB@%$POSUB%g
+s%@DATADIRNAME@%$DATADIRNAME%g
+s%@INSTOBJEXT@%$INSTOBJEXT%g
+s%@GENCAT@%$GENCAT%g
+s%@MKINSTALLDIRS@%$MKINSTALLDIRS%g
+s%@INTL_LIBTOOL_SUFFIX_PREFIX@%$INTL_LIBTOOL_SUFFIX_PREFIX%g
+s%@mutt_libesmtp_config_path@%$mutt_libesmtp_config_path%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+  if test $ac_beg -gt 1; then
+    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+  else
+    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+  fi
+  if test ! -s conftest.s$ac_file; then
+    ac_more_lines=false
+    rm -f conftest.s$ac_file
+  else
+    if test -z "$ac_sed_cmds"; then
+      ac_sed_cmds="sed -f conftest.s$ac_file"
+    else
+      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+    fi
+    ac_file=`expr $ac_file + 1`
+    ac_beg=$ac_end
+    ac_end=`expr $ac_end + $ac_max_sed_cmds`
+  fi
+done
+if test -z "$ac_sed_cmds"; then
+  ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile intl/Makefile m4/Makefile
+        po/Makefile.in doc/Makefile contrib/Makefile
+        muttbug.sh
+        imap/Makefile
+        Muttrc.head
+        doc/instdoc.sh"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+  # Remove last slash and all that follows it.  Not all systems have dirname.
+  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+    # The file is in a subdirectory.
+    test ! -d "$ac_dir" && mkdir "$ac_dir"
+    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+    # A "../" for each directory in $ac_dir_suffix.
+    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+  else
+    ac_dir_suffix= ac_dots=
+  fi
+
+  case "$ac_given_srcdir" in
+  .)  srcdir=.
+      if test -z "$ac_dots"; then top_srcdir=.
+      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+  *) # Relative path.
+    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+    top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  case "$ac_given_INSTALL" in
+  [/$]*) INSTALL="$ac_given_INSTALL" ;;
+  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+  esac
+
+  echo creating "$ac_file"
+  rm -f "$ac_file"
+  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+  case "$ac_file" in
+  *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+  *) ac_comsub= ;;
+  esac
+
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([  ]*\)#\([        ]*define[       ][      ]*\)'
+ac_dB='\([     ][      ]*\)[^  ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_uB='\([     ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+  CONFIG_HEADERS="config.h"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  echo creating $ac_file
+
+  rm -f conftest.frag conftest.in conftest.out
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  cat $ac_file_inputs > conftest.in
+
+EOF
+
+# Transform confdefs.h into a sed script conftest.vals that substitutes
+# the proper values into config.h.in to produce config.h.  And first:
+# Protect against being on the right side of a sed subst in config.status.
+# Protect against being in an unquoted here document in config.status.
+rm -f conftest.vals
+cat > conftest.hdr <<\EOF
+s/[\\&%]/\\&/g
+s%[\\$`]%\\&%g
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%ac_d%ac_u%gp
+s%ac_u%ac_e%gp
+EOF
+sed -n -f conftest.hdr confdefs.h > conftest.vals
+rm -f conftest.hdr
+
+# This sed command replaces #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >> conftest.vals <<\EOF
+s%^[   ]*#[    ]*undef[        ][      ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+EOF
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+while :
+do
+  ac_lines=`grep -c . conftest.vals`
+  # grep -c gives empty output for an empty file on some AIX systems.
+  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+  # Write a limited-size here document to conftest.frag.
+  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+  echo 'CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+' >> $CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+  rm -f conftest.vals
+  mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+cat >> $CONFIG_STATUS <<\EOF
+  rm -f conftest.frag conftest.h
+  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
+  cat conftest.in >> conftest.h
+  rm -f conftest.in
+  if cmp -s $ac_file conftest.h 2>/dev/null; then
+    echo "$ac_file is unchanged"
+    rm -f conftest.h
+  else
+    # Remove last slash and all that follows it.  Not all systems have dirname.
+      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+      # The file is in a subdirectory.
+      test ! -d "$ac_dir" && mkdir "$ac_dir"
+    fi
+    rm -f $ac_file
+    mv conftest.h $ac_file
+  fi
+fi; done
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
+for ac_file in $CONFIG_FILES; do
+        # Support "outfile[:infile[:infile...]]"
+        case "$ac_file" in
+          *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+        esac
+        # PO directories have a Makefile.in generated from Makefile.in.in.
+        case "$ac_file" in */Makefile.in)
+          # Adjust a relative srcdir.
+          ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+          ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+          ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+          # In autoconf-2.13 it is called $ac_given_srcdir.
+          # In autoconf-2.50 it is called $srcdir.
+          test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+          case "$ac_given_srcdir" in
+            .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+            /*) top_srcdir="$ac_given_srcdir" ;;
+            *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+          esac
+          if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+            rm -f "$ac_dir/POTFILES"
+            test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+            sed -e "/^#/d" -e "/^[     ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES"
+            test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+            sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          fi
+          ;;
+        esac
+      done
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
diff --git a/configure.in b/configure.in
new file mode 100644 (file)
index 0000000..66d54de
--- /dev/null
@@ -0,0 +1,1003 @@
+dnl Process this file with autoconf to produce a configure script.
+
+dnl !!! WHEN ADDING NEW CONFIGURE TESTS, PLEASE ADD CODE TO MAIN.C !!!
+dnl !!! TO DUMP THEIR RESULTS WHEN MUTT -V IS CALLED            !!!
+
+AC_PREREQ(2.12)
+AC_INIT(mutt.h)
+AM_CONFIG_HEADER(config.h)
+
+mutt_cv_version=`cat $srcdir/VERSION`
+
+
+AM_INIT_AUTOMAKE(mutt, $mutt_cv_version)
+
+ifdef([AC_LIBOBJ], , [define([AC_LIBOBJ], [LIB[]OBJS="$LIBOBJS $1.o"])])
+
+ALL_LINGUAS="de ru it es uk fr pl nl cs id sk ko el zh_TW zh_CN pt_BR eo gl sv da lt tr ja hu et ca bg"
+
+AC_CANONICAL_HOST
+
+AC_MSG_CHECKING(for prefix)
+if test x$prefix = xNONE; then
+        mutt_cv_prefix=$ac_default_prefix
+else
+        mutt_cv_prefix=$prefix
+fi
+AC_MSG_RESULT($mutt_cv_prefix)
+
+AC_PROG_CC
+AC_ISC_POSIX
+AM_C_PROTOTYPES
+if test "x$U" != "x"; then
+  AC_MSG_ERROR(Compiler not ANSI compliant)
+fi
+AC_PROG_CPP
+AC_PROG_MAKE_SET
+AC_PROG_INSTALL
+AC_PROG_RANLIB
+AC_CHECK_TOOL(AR, ar, ar)
+
+AC_C_INLINE
+AC_C_CONST
+
+AC_PATH_PROG(DBX, dbx, no)
+AC_PATH_PROG(GDB, gdb, no)
+AC_PATH_PROG(SDB, sdb, no)
+
+if test $GDB != no ; then
+        DEBUGGER=$GDB
+elif test $DBX != no ; then
+        DEBUGGER=$DBX
+elif test $SDB != no ; then
+        DEBUGGER=$SDB
+else
+        DEBUGGER=no
+fi
+
+AC_SUBST(DEBUGGER)
+
+# The following templates should be used with newer automakes
+# instead of acconfig.h
+#
+#AH_TEMPLATE([sig_atomic_t],
+#            [/* Define to `int' if <signal.h> doesn't define.])
+#AH_TEMPLATE([HAVE_START_COLOR],
+#            [Define if you have start_color, as a function or macro.])
+#AH_TEMPLATE([HAVE_TYPEAHEAD],
+#            [Define if you have typeahead, as a function or macro.])
+#AH_TEMPLATE([HAVE_BKGDSET],
+#            [Define if you have bkgdset, as a function or macro.])
+#AH_TEMPLATE([HAVE_CURS_SET],
+#            [Define if you have curs_set, as a function or macro.])
+#AH_TEMPLATE([HAVE_META],
+#            [Define if you have meta, as a function or macro.])
+#AH_TEMPLATE([HAVE_USE_DEFAULT_COLORS],
+#            [Define if you have use_default_colors, as a function or macro.])
+#AH_TEMPLATE([HAVE_RESIZETERM],
+#            [Define if you have resizeterm, as a function or macro.])
+#AH_TEMPLATE([SIG_ATOMIC_VOLATILE_T],
+#            [Some systems declare sig_atomic_t as volatile, some others -- no.
+#             This define will have value `sig_atomic_t' or
+#             `volatile sig_atomic_t' accordingly.])
+#AH_TEMPLATE([ICONV_NONTRANS],
+#            [Define as 1 if iconv() only converts exactly and we should treat
+#             all return values other than (size_t)(-1) as equivalent.])
+
+
+ac_aux_path_sendmail=/usr/sbin:/usr/lib
+AC_PATH_PROG(SENDMAIL, sendmail, /usr/sbin/sendmail, $PATH:$ac_aux_path_sendmail)
+AC_DEFINE_UNQUOTED(SENDMAIL,"$ac_cv_path_SENDMAIL",[ Where to find sendmail on your system. ])
+
+OPS='$(srcdir)/OPS'
+if test -f $srcdir/EXPORTABLE ; then
+        SUBVERSION="us"
+else
+        SUBVERSION="i"
+
+        AC_ARG_ENABLE(pgp, [  --disable-pgp              Disable PGP support],
+        [       if test x$enableval = xno ; then
+                        have_pgp=no
+                fi
+        ])
+
+        if test x$have_pgp != xno ; then
+                AC_DEFINE(CRYPT_BACKEND_CLASSIC_PGP,1,
+                    [ Define if you want classic PGP support. ])
+                PGPAUX_TARGET="pgpring pgpewrap"
+                MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS pgp.o pgpinvoke.o pgpkey.o pgplib.o gnupgparse.o pgpmicalg.o pgppacket.o"
+        fi
+
+       AC_ARG_ENABLE(smime, [  --disable-smime            Disable SMIME support],
+       [       if test x$enableval = xno ; then
+                       have_smime=no
+               fi
+       ])
+       if test x$have_smime != xno ; then
+               AC_DEFINE(CRYPT_BACKEND_CLASSIC_SMIME,1,
+                  [ Define if you want clasic S/MIME support. ])
+               MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS smime.o "
+               SMIMEAUX_TARGET="smime_keys"
+       fi
+  
+        AC_ARG_WITH(mixmaster, [  --with-mixmaster[=PATH]    Include Mixmaster support],
+                [if test -x "$withval" ; then
+                        MIXMASTER="$withval"
+                 else
+                        MIXMASTER="mixmaster"
+                 fi
+                 OPS="$OPS \$(srcdir)/OPS.MIX"
+                 MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS remailer.o"
+                 AC_DEFINE_UNQUOTED(MIXMASTER,"$MIXMASTER",
+                         [ Where to find mixmaster on your system. ])
+                ])
+
+fi
+# We now require all OPS
+OPS="$OPS \$(srcdir)/OPS.PGP \$(srcdir)/OPS.SMIME \$(srcdir)/OPS.CRYPT "
+AC_SUBST(OPS)
+
+
+AC_SUBST(PGPAUX_TARGET)
+AC_SUBST(SMIMEAUX_TARGET)
+
+AC_DEFINE_UNQUOTED(SUBVERSION,"$SUBVERSION",[ Is this the international version? ])
+AC_SUBST(SUBVERSION)
+
+AC_PATH_PROG(ISPELL, ispell, no)
+if test $ISPELL != no; then
+        AC_DEFINE_UNQUOTED(ISPELL,"$ISPELL",[ Where to find ispell on your system. ])
+fi
+
+AC_ARG_WITH(slang, [  --with-slang[=DIR]         Use S-Lang instead of ncurses],
+        [AC_CACHE_CHECK([if this is a BSD system], mutt_cv_bsdish,
+                [AC_TRY_RUN([#include <sys/param.h>
+
+main ()
+{
+#ifdef BSD
+        exit (0);
+#else
+        exit (1);
+#endif
+}],
+                        mutt_cv_bsdish=yes,
+                        mutt_cv_bsdish=no,
+                        mutt_cv_bsdish=no)])
+
+        AC_MSG_CHECKING(for S-Lang)
+        if test $withval = yes; then
+                if test -d $srcdir/../slang; then
+                        mutt_cv_slang=$srcdir/../slang/src
+                        CPPFLAGS="$CPPFLAGS -I${mutt_cv_slang}"
+                        LDFLAGS="$LDFLAGS -L${mutt_cv_slang}/objs"
+                else
+                        if test -d $mutt_cv_prefix/include/slang; then
+                                CPPFLAGS="$CPPFLAGS -I$mutt_cv_prefix/include/slang"
+                        elif test -d /usr/include/slang; then
+                                CPPFLAGS="$CPPFLAGS -I/usr/include/slang"
+                        fi
+                        mutt_cv_slang=yes
+                fi
+        else
+                dnl ---Check to see if $withval is a source directory
+                if test -f $withval/src/slang.h; then
+                        mutt_cv_slang=$withval/src
+                        CPPFLAGS="$CPPFLAGS -I${mutt_cv_slang}"
+                        LDFLAGS="$LDFLAGS -L${mutt_cv_slang}/objs"
+                else
+                        dnl ---Must be installed somewhere
+                        mutt_cv_slang=$withval
+                        if test -d $withval/include/slang; then
+                                CPPFLAGS="$CPPFLAGS -I${withval}/include/slang"
+                        elif test -d $withval/include; then
+                                CPPFLAGS="$CPPFLAGS -I${withval}/include"
+                        fi
+                        LDFLAGS="$LDFLAGS -L${withval}/lib"
+                fi
+        fi
+        AC_MSG_RESULT($mutt_cv_slang)
+        if test $mutt_cv_bsdish = yes; then
+                AC_CHECK_LIB(termlib, main)
+        fi
+        AC_DEFINE(USE_SLANG_CURSES,1,
+                [ Define if you compile with SLang instead of curses/ncurses. ])
+        AC_DEFINE(HAVE_COLOR,1,[ Define if your curses library supports color. ])
+        MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS resize.o"
+
+        dnl --- now that we've found it, check the link
+
+        AC_CHECK_LIB(slang, SLtt_get_terminfo,
+                [MUTTLIBS="$MUTTLIBS -lslang -lm"],
+                [AC_MSG_ERROR(unable to compile.  check config.log)], -lm)
+
+        ],
+
+        [mutt_cv_curses=/usr
+        AC_ARG_WITH(curses, [  --with-curses=DIR          Where ncurses is installed ],
+                [if test $withval != yes; then
+                        mutt_cv_curses=$withval
+                fi
+                if test x$mutt_cv_curses != x/usr; then
+                        LDFLAGS="-L${mutt_cv_curses}/lib $LDFLAGS"
+                        CPPFLAGS="$CPPFLAGS -I${mutt_cv_curses}/include"
+                fi])
+
+       AC_CHECK_FUNC(initscr,,[
+       cf_ncurses="ncurses"
+       for lib in ncurses ncursesw
+       do
+               AC_CHECK_LIB($lib, waddnwstr, [cf_ncurses="$lib"; break])
+       done
+        AC_CHECK_LIB($cf_ncurses, initscr,
+                [MUTTLIBS="$MUTTLIBS -l$cf_ncurses"
+                if test x$mutt_cv_curses = x/usr -a -d /usr/include/ncurses; then
+                        CPPFLAGS="$CPPFLAGS -I/usr/include/ncurses"
+                fi
+               
+                if test "$cf_ncurses" = ncursesw; then
+                       AC_CHECK_HEADERS(ncursesw/ncurses.h,[cf_cv_ncurses_header="ncursesw/ncurses.h"])
+               else
+                       AC_CHECK_HEADERS(ncurses.h,[cf_cv_ncurses_header="ncurses.h"])
+               fi],
+
+                [CF_CURSES_LIBS])
+               ])
+
+        old_LIBS="$LIBS"
+        LIBS="$LIBS $MUTTLIBS"
+        CF_CHECK_FUNCDECLS([#include <${cf_cv_ncurses_header-curses.h}>],
+                           [start_color typeahead bkgdset curs_set meta use_default_colors resizeterm])
+        if test "$ac_cv_func_decl_start_color" = yes; then
+                AC_DEFINE(HAVE_COLOR,1,[ Define if your curses library supports color. ])
+        fi
+        if test "$ac_cv_func_decl_resizeterm" = yes; then
+                MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS resize.o"
+        fi
+        LIBS="$old_LIBS"
+        ])
+
+AC_HEADER_STDC
+
+AC_CHECK_HEADERS(stdarg.h sys/ioctl.h ioctl.h sysexits.h)
+AC_CHECK_HEADERS(sys/time.h sys/resource.h)
+AC_CHECK_HEADERS(unix.h)
+
+AC_CHECK_FUNCS(setrlimit getsid)
+
+AC_TYPE_SIGNAL
+
+AC_MSG_CHECKING(for sig_atomic_t in signal.h)
+AC_EGREP_HEADER(sig_atomic_t,signal.h,
+  [
+    ac_cv_type_sig_atomic_t=yes;
+    AC_EGREP_HEADER(volatile.*sig_atomic_t,
+                    signal.h,
+                    [
+                        is_sig_atomic_t_volatile=yes;
+                        AC_MSG_RESULT([yes, volatile])
+                    ],
+                    [
+                        is_sig_atomic_t_volatile=no;
+                        AC_MSG_RESULT([yes, non volatile])
+                    ])
+  ],
+  [
+    AC_MSG_RESULT(no)
+    AC_CHECK_TYPE(sig_atomic_t, int)
+    is_sig_atomic_t_volatile=no
+  ])
+if test $is_sig_atomic_t_volatile = 'yes'
+then
+    AC_DEFINE(SIG_ATOMIC_VOLATILE_T, sig_atomic_t)
+else
+    AC_DEFINE(SIG_ATOMIC_VOLATILE_T, [volatile sig_atomic_t])
+fi
+
+AC_DECL_SYS_SIGLIST
+
+dnl For MD5 and SHA1 on 64-bit systems
+AC_C_BIGENDIAN
+AC_CHECK_HEADERS(inttypes.h stdint.h)
+dnl This is the method autoconf-2.50's new AC_CHECK_TYPE macro uses.
+dnl We need to be backwards compatible to autoconf 2.13, though. -lh
+AC_MSG_CHECKING(for uint32_t)
+AC_TRY_COMPILE([
+#include <sys/types.h>
+#if HAVE_INTTYPES_H
+#include <inttypes.h>
+#else
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#endif],
+[if ((uint32_t *) 0)
+  return 0;
+if (sizeof (uint32_t))
+  return 0;
+],[
+    AC_DEFINE(HAVE_UINT32_T,1,[ Define if you have the uint32_t type. ])
+    AC_MSG_RESULT(yes)
+  ], AC_MSG_RESULT(no)
+)
+AC_CHECK_SIZEOF(int)
+AC_CHECK_SIZEOF(long)
+
+AC_TYPE_PID_T
+
+AC_CHECK_FUNCS(fgetpos memmove setegid srand48 strerror)
+
+AC_REPLACE_FUNCS(strcasecmp strdup)
+
+AC_CHECK_FUNC(getopt)
+if test $ac_cv_func_getopt = yes; then
+        AC_CHECK_HEADERS(getopt.h)
+fi
+
+mutt_cv_snprintf=no
+SNPRINTFOBJS=""
+AC_CHECK_FUNCS(snprintf, , [mutt_cv_snprintf=yes])
+AC_CHECK_FUNCS(vsnprintf, , [mutt_cv_snprintf=yes])
+if test $mutt_cv_snprintf = yes; then
+        AC_LIBOBJ(snprintf)
+fi
+
+dnl SCO uses chsize() instead of ftruncate()
+AC_CHECK_FUNCS(ftruncate, , [AC_CHECK_LIB(x, chsize)])
+
+dnl SCO has strftime() in libintl
+AC_CHECK_FUNCS(strftime, , [AC_CHECK_LIB(intl, strftime)])
+
+dnl AIX may not have fchdir()
+AC_CHECK_FUNCS(fchdir, , [mutt_cv_fchdir=no])
+
+AC_ARG_WITH(regex, [  --with-regex               Use the GNU regex library ],
+        [mutt_cv_regex=yes],
+        [AC_CHECK_FUNCS(regcomp, mutt_cv_regex=no, mutt_cv_regex=yes)])
+
+if test $mutt_cv_regex = no ; then
+AC_CACHE_CHECK([whether your system's regexp library is completely broken],
+        [mutt_cv_regex_broken],
+        AC_TRY_RUN([
+#include <unistd.h>
+#include <regex.h>
+main() { regex_t blah ; regmatch_t p; p.rm_eo = p.rm_eo; return regcomp(&blah, "foo.*bar", REG_NOSUB) || regexec (&blah, "foobar", 0, NULL, 0); }],
+        mutt_cv_regex_broken=no, mutt_cv_regex_broken=yes, mutt_cv_regex_broken=yes))
+        if test $mutt_cv_regex_broken = yes ; then
+                echo "Using the included GNU regex instead." >&AC_FD_MSG
+                mutt_cv_regex=yes
+        fi
+fi
+
+if test $mutt_cv_regex = yes; then
+        AC_DEFINE(USE_GNU_REGEX,1,[ Define if you want to use the included regex.c. ])
+        AC_LIBOBJ(regex)
+fi
+
+
+AC_ARG_WITH(homespool, [  --with-homespool[=FILE]    File in user's directory where new mail is spooled], with_homespool=${withval})
+if test x$with_homespool != x; then
+        if test $with_homespool = yes; then
+                with_homespool=mailbox
+        fi
+        AC_DEFINE_UNQUOTED(MAILPATH,"$with_homespool",[ Where new mail is spooled. ])
+        AC_DEFINE(HOMESPOOL,1,
+          [Is mail spooled to the user's home directory?  If defined,
+           MAILPATH should be set to the filename of the spool mailbox
+           relative the the home directory.
+           use: configure --with-homespool=FILE])
+        AC_DEFINE(USE_DOTLOCK,1,[ Define to use dotlocking for mailboxes. ])
+        mutt_cv_setgid=no
+else
+        AC_ARG_WITH(mailpath, [  --with-mailpath=DIR        Directory where spool mailboxes are located],
+                [mutt_cv_mailpath=$withval],
+                [ AC_CACHE_CHECK(where new mail is stored, mutt_cv_mailpath,
+                        [mutt_cv_mailpath=no
+                        if test -d /var/mail; then
+                                mutt_cv_mailpath=/var/mail
+                        elif test -d /var/spool/mail; then
+                                mutt_cv_mailpath=/var/spool/mail
+                        elif test -d /usr/spool/mail; then
+                                mutt_cv_mailpath=/usr/spool/mail
+                        elif test -d /usr/mail; then
+                                mutt_cv_mailpath=/usr/mail
+                        fi])
+                ])
+        if test "$mutt_cv_mailpath" = no; then
+                AC_MSG_ERROR("Could not determine where new mail is stored.")
+        fi
+        AC_DEFINE_UNQUOTED(MAILPATH,"$mutt_cv_mailpath",[ Where new mail is spooled. ])
+
+        AC_CACHE_CHECK(if $mutt_cv_mailpath is world writable, mutt_cv_worldwrite, [AC_TRY_RUN([#include <sys/types.h>
+#include <sys/stat.h>
+
+int main (int argc, char **argv)
+{
+        struct stat s;
+
+        stat ("$mutt_cv_mailpath", &s);
+        if (s.st_mode & S_IWOTH) exit (0);
+        exit (1);
+}], mutt_cv_worldwrite=yes, mutt_cv_worldwrite=no, mutt_cv_worldwrite=no)])
+
+        mutt_cv_setgid=no
+        if test $mutt_cv_worldwrite = yes; then
+                AC_DEFINE(USE_DOTLOCK,1,[ Define to use dotlocking for mailboxes. ])
+        else
+
+                AC_CACHE_CHECK(if $mutt_cv_mailpath is group writable, mutt_cv_groupwrite, [AC_TRY_RUN([#include <sys/types.h>
+#include <sys/stat.h>
+
+int main (int argc, char **argv)
+{
+        struct stat s;
+
+        stat ("$mutt_cv_mailpath", &s);
+        if (s.st_mode & S_IWGRP) exit (0);
+        exit (1);
+}], mutt_cv_groupwrite=yes, mutt_cv_groupwrite=no, mutt_cv_groupwrite=no)])
+
+                if test $mutt_cv_groupwrite = yes; then
+                        AC_DEFINE(USE_DOTLOCK,1,[ Define to use dotlocking for mailboxes. ])
+                        AC_DEFINE(USE_SETGID,1,[ Define if mutt should run setgid "mail". ])
+                        mutt_cv_setgid=yes
+                fi
+        fi
+fi
+
+AC_ARG_ENABLE(external_dotlock, [  --enable-external-dotlock  Force use of an external dotlock program],
+        [mutt_cv_external_dotlock="$enableval"])
+
+if test "x$mutt_cv_setgid" = "xyes" || test "x$mutt_cv_fchdir" = "xno" \
+        || test "x$mutt_cv_external_dotlock" = "xyes"
+then
+        AC_DEFINE(DL_STANDALONE,1,[ Define if you want to use an external dotlocking program. ])
+        DOTLOCK_TARGET="mutt_dotlock"
+else
+        MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS dotlock.o"
+fi
+
+AC_SUBST(DOTLOCK_TARGET)
+
+
+AC_MSG_CHECKING(where to put the documentation)
+AC_ARG_WITH(docdir, [  --with-docdir=PATH         Specify where to put the documentation],
+        [mutt_cv_docdir=$withval],
+        [mutt_cv_docdir="$mutt_cv_prefix/doc/mutt"])
+AC_MSG_RESULT($mutt_cv_docdir)
+
+docdir=$mutt_cv_docdir
+AC_SUBST(docdir)
+
+if test x$mutt_cv_setgid = xyes; then
+        DOTLOCK_GROUP='mail'
+        DOTLOCK_PERMISSION=2755
+else
+        DOTLOCK_GROUP=''
+        DOTLOCK_PERMISSION=755
+fi
+AC_SUBST(DOTLOCK_GROUP)
+AC_SUBST(DOTLOCK_PERMISSION)
+
+AC_ARG_WITH(domain, [  --with-domain=DOMAIN       Specify your DNS domain name],
+        [if test $withval != yes; then
+                AC_DEFINE_UNQUOTED(DOMAIN,"$withval",[ Define your domain name. ])
+        fi])
+
+need_socket="no"
+
+dnl -- socket dependencies --
+
+AC_ARG_ENABLE(pop,  [  --enable-pop               Enable POP3 support],
+[       if test x$enableval = xyes ; then
+                AC_DEFINE(USE_POP,1,[ Define if you want support for the POP3 protocol. ])
+                MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS pop.o pop_lib.o pop_auth.o"
+                need_socket="yes"
+                need_md5="yes"
+        fi
+])
+
+AC_ARG_ENABLE(imap, [  --enable-imap              Enable IMAP support],
+[       if test x$enableval = xyes ; then
+                AC_DEFINE(USE_IMAP,1,[ Define if you want support for the IMAP protocol. ])
+                LIBIMAP="-Limap -limap"
+                LIBIMAPDEPS="\$(top_srcdir)/imap/imap.h imap/libimap.a"
+                need_imap="yes"
+                need_socket="yes"
+                need_md5="yes"
+        fi
+])
+AM_CONDITIONAL(BUILD_IMAP, test x$need_imap = xyes)
+
+AC_ARG_ENABLE(nntp, [  --enable-nntp              Enable NNTP support],
+[      if test x$enableval = xyes ; then
+               AC_DEFINE(USE_NNTP)
+               MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS nntp.o newsrc.o"
+               need_socket="yes"
+       fi
+])
+
+dnl -- end socket dependencies --
+
+if test "$need_socket" = "yes"
+then
+        AC_MSG_CHECKING([for socklen_t])
+        AC_EGREP_HEADER(socklen_t, sys/socket.h, AC_MSG_RESULT([yes]),
+                AC_MSG_RESULT([no])
+                AC_DEFINE(socklen_t,int,
+                        [ Define to 'int' if <sys/socket.h> doesn't have it. ]))
+        AC_CHECK_FUNC(gethostent, , AC_CHECK_LIB(nsl, gethostent))
+        AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt))
+        AC_CHECK_FUNCS(getaddrinfo)
+        AC_DEFINE(USE_SOCKET,1,
+                [ Include code for socket support. Set automatically if you enable POP3 or IMAP ])
+        MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS account.o mutt_socket.o mutt_tunnel.o"
+fi
+
+dnl -- imap dependencies --
+
+AC_ARG_WITH(gss, [    --with-gss[=PFX]         Compile in GSSAPI authentication for IMAP], 
+    gss_prefix="$withval", gss_prefix="no")
+if test "$gss_prefix" != "no"
+then
+  if test "$need_imap" = "yes"
+  then
+    MUTT_AM_PATH_GSSAPI(gss_prefix)
+    AC_MSG_CHECKING(GSSAPI implementation)
+    AC_MSG_RESULT($GSSAPI_IMPL)
+    if test "$GSSAPI_IMPL" = "none"
+    then
+      AC_CACHE_SAVE
+      AC_MSG_RESULT([GSSAPI libraries not found])
+    fi
+    if test "$GSSAPI_IMPL" = "Heimdal"
+    then
+      AC_DEFINE(HAVE_HEIMDAL,1,[ Define if your GSSAPI implementation is Heimdal ])
+    fi
+    CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS"
+    MUTTLIBS="$MUTTLIBS $GSSAPI_LIBS"
+    AC_DEFINE(USE_GSS,1,[ Define if you have GSSAPI libraries available ])
+    need_gss="yes"
+  else
+    AC_MSG_WARN([GSS was requested but IMAP is not enabled])
+  fi
+fi
+AM_CONDITIONAL(USE_GSS, test x$need_gss = xyes)
+
+dnl -- end imap dependencies --
+
+AC_ARG_WITH(ssl, [  --with-ssl[=PFX]           Compile in SSL support for POP/IMAP],
+[       if test "$with_ssl" != "no"
+        then
+          if test "$need_socket" != "yes"; then
+           AC_MSG_ERROR([SSL support is only useful with POP or IMAP support])
+          fi
+
+          if test "$with_ssl" != "yes"
+          then
+           LDFLAGS="$LDFLAGS -L$withval/lib"
+           CPPFLAGS="$CPPFLAGS -I$withval/include"
+          fi
+          saved_LIBS="$LIBS"
+
+          AC_CHECK_LIB(crypto, X509_new,, AC_MSG_ERROR([Unable to find SSL library]))
+          AC_CHECK_LIB(ssl, SSL_new,, AC_MSG_ERROR([Unable to find SSL library]), -lcrypto)
+
+          AC_CHECK_FUNCS(RAND_status RAND_egd)
+
+          AC_DEFINE(USE_SSL,1,[ Define if you want support for SSL. ])
+          LIBS="$saved_LIBS"
+          MUTTLIBS="$MUTTLIBS -lssl -lcrypto"
+          MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_ssl.o"
+          need_ssl=yes
+
+        fi
+])
+AM_CONDITIONAL(USE_SSL, test x$need_ssl = xyes)
+
+dnl SSL support via NSS
+AC_ARG_WITH(nss, [  --with-nss[=PFX]           Compile in SSL support for POP/IMAP via NSS],
+[       if test "$with_nss" != no
+        then
+          if test "$need_socket" != "yes"; then
+           AC_MSG_ERROR([SSL support is only useful with POP or IMAP support])
+          fi
+
+          if test "$with_nss" != "yes"
+          then
+           LDFLAGS="$LDFLAGS -L$withval/lib"
+           CPPFLAGS="$CPPFLAGS -I$withval/include -I$withval/public/security"
+          fi
+
+          AC_DEFINE(USE_NSS,1,[ Define if you want support for SSL via the NSS library. ])
+          MUTTLIBS="$MUTTLIBS -lssl -lnss -lcertdb -lcerthi -lcryptohi"
+          MUTTLIBS="$MUTTLIBS -lpk11wrap -lsoftoken -lsecutil -ldbm -lplds4 -lplc4 -lfreebl"
+          MUTTLIBS="$MUTTLIBS -lnspr4"
+
+          MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_ssl_nss.o"
+          need_ssl=yes
+        fi
+])
+
+AC_ARG_WITH(sasl, [  --with-sasl[=PFX]          Use Cyrus SASL library for POP/IMAP authentication],
+        [
+        if test "$need_socket" != "yes"
+        then
+          AC_MSG_ERROR([SASL support is only useful with POP or IMAP support])
+        fi
+
+        if test "$with_sasl" != "no"
+        then
+          if test "$with_sasl" != "yes"
+          then
+            CPPFLAGS="$CPPFLAGS -I$with_sasl/include"
+            LDFLAGS="$LDFLAGS -L$with_sasl/lib"
+          fi
+
+          saved_LIBS="$LIBS"
+
+          AC_CHECK_LIB(sasl, sasl_client_init,,
+            AC_MSG_ERROR([could not find libsasl]),)
+
+          MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_sasl.o"
+          MUTTLIBS="$MUTTLIBS -lsasl"
+          LIBS="$saved_LIBS"
+          AC_DEFINE(USE_SASL,1,
+                  [ Define if want to use the Cyrus SASL library for POP/IMAP authentication. ])
+          need_sasl=yes
+        fi
+        ])
+AM_CONDITIONAL(USE_SASL, test x$need_sasl = xyes)
+
+AC_ARG_WITH(sasl2, [  --with-sasl2[=PFX]         Use Cyrus SASL library version 2 for POP/IMAP authentication],
+        [
+        if test "$need_socket" != "yes"
+        then
+          AC_MSG_ERROR([SASL support is only useful with POP or IMAP support])
+        fi
+
+        if test "$with_sasl2" != "no"
+        then
+          if test "$with_sasl2" != "yes"
+          then
+            CPPFLAGS="$CPPFLAGS -I$with_sasl2/include"
+            LDFLAGS="$LDFLAGS -L$with_sasl2/lib"
+          fi
+
+          saved_LIBS="$LIBS"
+
+          AC_CHECK_LIB(sasl2, sasl_client_init,,
+            AC_MSG_ERROR([could not find libsasl]),)
+
+          MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_sasl.o"
+          MUTTLIBS="$MUTTLIBS -lsasl2"
+          LIBS="$saved_LIBS"
+          AC_DEFINE(USE_SASL,1,
+                  [ Define if want to use the Cyrus SASL library for POP/IMAP authentication. ])
+          AC_DEFINE(USE_SASL2,1,
+                  [ Define if want to use version 2 of the Cyrus SASL library. ])
+          need_sasl=yes
+        fi
+        ])
+AM_CONDITIONAL(USE_SASL, test x$need_sasl = xyes)
+
+AC_ARG_WITH(idn, [  --with-idn=[PFX]           Use GNU libidn for domain names],
+                [
+                 if test "$with_idn" != "no" ; then
+                       if test "$with_idn" != "yes" ; then
+                          CPPFLAGS="$CPPFLAGS -I$with_idn/include"
+                          LDFLAGS="$LDFLAGS -L$with_idn/lib"
+                       fi
+                 fi
+                ]
+)
+
+if test "x$with_idn" != "xno"; then
+   AC_CHECK_LIB(idn, stringprep_check_version)
+   AC_CHECK_FUNCS(idna_to_unicode_utf8_from_utf8 idna_to_unicode_8z8z)
+   AC_CHECK_FUNCS(idna_to_ascii_from_utf8 idna_to_ascii_8z)
+   AC_CHECK_FUNCS(idna_to_ascii_lz idna_to_ascii_from_locale)
+fi
+
+if test "$need_md5" = "yes"
+then
+        MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS md5c.o"
+fi
+
+dnl -- end socket --
+
+AC_ARG_ENABLE(debug, [  --enable-debug             Enable debugging support],
+        [ if test x$enableval = xyes ; then
+                AC_DEFINE(DEBUG,1,[ Define to enable debugging info. ])
+          fi
+         ])
+
+AC_ARG_ENABLE(flock, [  --enable-flock             Use flock() to lock files],
+        [if test $enableval = yes; then
+                AC_DEFINE(USE_FLOCK,1, [ Define to use flock() to lock mailboxes. ])
+        fi])
+
+mutt_cv_fcntl=yes
+AC_ARG_ENABLE(fcntl, [  --disable-fcntl            Do NOT use fcntl() to lock files ],
+        [if test $enableval = no; then mutt_cv_fcntl=no; fi])
+
+if test $mutt_cv_fcntl = yes; then
+        AC_DEFINE(USE_FCNTL,1, [ Define to use fcntl() to lock folders. ])
+fi
+
+mutt_cv_warnings=yes
+AC_ARG_ENABLE(warnings, [  --disable-warnings         Turn off compiler warnings (not recommended)],
+[if test $enableval = no; then
+        mutt_cv_warnings=no
+fi])
+
+if test x$GCC = xyes -a $mutt_cv_warnings = yes; then
+        CFLAGS="-Wall -pedantic $CFLAGS"
+fi
+
+AC_ARG_ENABLE(nfs-fix, [  --enable-nfs-fix           Work around an NFS with broken attributes caching ],
+        [if test x$enableval = xyes; then
+                AC_DEFINE(NFS_ATTRIBUTE_HACK,1,
+                  [Define if you have problems with mutt not detecting
+                   new/old mailboxes over NFS.  Some NFS implementations
+                   incorrectly cache the attributes of small files.])
+        fi])
+
+AC_ARG_ENABLE(buffy-size, [  --enable-buffy-size        Use file size attribute instead of access time ],
+        [if test x$enableval = xyes; then
+                AC_DEFINE(BUFFY_SIZE,1,[ Define to enable the "buffy_size" feature. ])
+        fi])
+
+AC_ARG_ENABLE(mailtool, [  --enable-mailtool          Enable Sun mailtool attachments support ],
+        [if test x$enableval = xyes; then
+                AC_DEFINE(SUN_ATTACHMENT,1,[ Define to enable Sun mailtool attachments support. ])
+        fi])
+
+AC_ARG_ENABLE(locales-fix, [  --enable-locales-fix       The result of isprint() is unreliable ],
+        [if test x$enableval = xyes; then
+                AC_DEFINE(LOCALES_HACK,1,[ Define if the result of isprint() is unreliable. ])
+        fi])
+
+AC_ARG_WITH(exec-shell, [  --with-exec-shell=SHELL    Specify alternate shell (ONLY if /bin/sh is broken)],
+        [if test $withval != yes; then
+                AC_DEFINE_UNQUOTED(EXECSHELL, "$withval",
+                 [program to use for shell commands])
+         else
+                AC_DEFINE_UNQUOTED(EXECSHELL, "/bin/sh")
+        fi],
+        [AC_DEFINE_UNQUOTED(EXECSHELL, "/bin/sh")])
+
+AC_ARG_ENABLE(exact-address, [  --enable-exact-address     Enable regeneration of email addresses],
+        [if test $enableval = yes; then
+                AC_DEFINE(EXACT_ADDRESS,1,
+                  [Enable exact regeneration of email addresses as parsed?
+                   NOTE: this requires significant more memory when defined.])
+
+        fi])
+
+AC_SUBST(MUTTLIBS)
+AC_SUBST(MUTT_LIB_OBJECTS)
+AC_SUBST(LIBIMAP)
+AC_SUBST(LIBIMAPDEPS)
+
+dnl -- iconv/gettext --
+
+AC_ARG_ENABLE(iconv, [  --disable-iconv            Disable iconv support],
+        [if test x$enableval = xno ; then
+                am_cv_func_iconv=no
+        fi
+])
+
+MUTT_AM_GNU_GETTEXT
+
+if test "$am_cv_func_iconv" != "yes"
+then
+  AC_MSG_WARN([Configuring without iconv support. See INSTALL for details])
+else
+
+AC_CHECK_HEADERS(iconv.h,
+        [AC_MSG_CHECKING(whether iconv.h defines iconv_t)
+         AC_EGREP_HEADER([typedef.*iconv_t],iconv.h,
+                [AC_MSG_RESULT(yes)
+                 AC_DEFINE(HAVE_ICONV_T_DEF, 1,
+                        [Define if <iconv.h> defines iconv_t.])],
+                 AC_MSG_RESULT(no))])
+
+dnl (1) Some implementations of iconv won't convert from UTF-8 to UTF-8.
+dnl (2) In glibc-2.1.2 and earlier there is a bug that messes up ob and
+dnl     obl when args 2 and 3 are 0 (fixed in glibc-2.1.3).
+AC_CACHE_CHECK([whether this iconv is good enough], mutt_cv_iconv_good,
+        mutt_save_LIBS="$LIBS"
+        LIBS="$LIBS $LIBICONV"
+        AC_TRY_RUN([
+#include <iconv.h>
+int main()
+{
+  iconv_t cd;
+changequote(, )dnl
+  char buf[4];
+changequote([, ])dnl
+  char *ob;
+  size_t obl;
+  ob = buf, obl = sizeof(buf);
+  return ((cd = iconv_open("UTF-8", "UTF-8")) != (iconv_t)(-1) &&
+          (iconv(cd, 0, 0, &ob, &obl) ||
+           !(ob == buf && obl == sizeof(buf)) ||
+           iconv_close(cd)));
+}
+                ],
+                mutt_cv_iconv_good=yes,
+                mutt_cv_iconv_good=no,
+                mutt_cv_iconv_good=yes)
+        LIBS="$mutt_save_LIBS")
+if test "$mutt_cv_iconv_good" = no; then
+  AC_MSG_ERROR(Try using libiconv instead)
+fi
+
+dnl This is to detect implementations such as the one in glibc-2.1,
+dnl which always convert exactly but return the number of characters
+dnl converted instead of the number converted inexactly.
+AC_CACHE_CHECK([whether iconv is non-transcribing], mutt_cv_iconv_nontrans,
+        mutt_save_LIBS="$LIBS"
+        LIBS="$LIBS $LIBICONV"
+        AC_TRY_RUN([
+#include <iconv.h>
+#include <string.h>
+int main()
+{
+  iconv_t cd;
+  const char *ib;
+  char *ob;
+  size_t ibl, obl;
+  const char *s = "\304\211";
+changequote(, )dnl
+  char t[3];
+changequote([, ])dnl
+  ib = s, ibl = 2, ob = t, obl = 3;
+  return ((cd = iconv_open("UTF-8", "UTF-8")) == (iconv_t)(-1) ||
+          iconv(cd, &ib, &ibl, &ob, &obl));
+}
+                ],
+                mutt_cv_iconv_nontrans=no,
+                mutt_cv_iconv_nontrans=yes,
+                mutt_cv_iconv_nontrans=no)
+        LIBS="$mutt_save_LIBS")
+if test "$mutt_cv_iconv_nontrans" = yes; then
+  AC_DEFINE(ICONV_NONTRANS, 1)
+else
+  AC_DEFINE(ICONV_NONTRANS, 0)
+fi
+
+CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/intl"
+
+if test "$BUILD_INCLUDED_LIBINTL" = "yes"; then
+  AC_DEFINE(HAVE_BIND_TEXTDOMAIN_CODESET,1,
+          [ Define if your gettext has bind_textdomain_codeset. ])
+else
+  AC_CHECK_FUNCS(bind_textdomain_codeset)
+fi
+
+fi # libiconv
+
+dnl -- locales --
+
+AC_CHECK_HEADERS(wchar.h)
+
+AC_CACHE_CHECK([for wchar_t], mutt_cv_wchar_t,
+        AC_TRY_COMPILE([
+#include <stddef.h>
+#include <stdlib.h>
+#ifdef HAVE_WCHAR_H
+#include <wchar.h>
+#endif
+                ],
+                [ wchar_t wc; return 0; ],
+                mutt_cv_wchar_t=yes,
+                mutt_cv_wchar_t=no))
+
+if test "$mutt_cv_wchar_t" = no; then
+        AC_DEFINE(wchar_t,int,[ Define to 'int' if system headers don't define. ])
+fi
+
+AC_CACHE_CHECK([for wint_t], mutt_cv_wint_t,
+        AC_TRY_COMPILE([
+#include <stddef.h>
+#include <stdlib.h>
+#ifdef HAVE_WCHAR_H
+#include <wchar.h>
+#endif
+                ],
+                [ wint_t wc; return 0; ],
+                mutt_cv_wint_t=yes,
+                mutt_cv_wint_t=no))
+
+if test "$mutt_cv_wint_t" = no; then
+        AC_DEFINE(wint_t,int,[ Define to 'int' if system headers don't define. ])
+fi
+
+AC_CHECK_HEADERS(wctype.h)
+AC_CHECK_FUNCS(iswalnum iswalpha  iswcntrl iswdigit)
+AC_CHECK_FUNCS(iswgraph iswlower iswprint iswpunct iswspace iswupper)
+AC_CHECK_FUNCS(iswxdigit towupper towlower)
+
+AC_CACHE_CHECK([for mbstate_t], mutt_cv_mbstate_t,
+        AC_TRY_COMPILE([
+#include <stddef.h>
+#include <stdlib.h>
+#ifdef HAVE_WCHAR_H
+#include <wchar.h>
+#endif
+                ],
+                [ mbstate_t s; return 0; ],
+                mutt_cv_mbstate_t=yes,
+                mutt_cv_mbstate_t=no))
+
+if test "$mutt_cv_mbstate_t" = no; then
+        AC_DEFINE(mbstate_t,int,[ Define to 'int' if system headers don't define. ])
+fi
+
+wc_funcs=maybe
+AC_ARG_WITH(wc-funcs, [  --without-wc-funcs         Do not use the system's wchar_t functions],
+        wc_funcs=$withval)
+
+if test "$wc_funcs" != yes -a "$wc_funcs" != no; then
+        AC_CACHE_CHECK([for wchar_t functions], mutt_cv_wc_funcs,
+                mutt_cv_wc_funcs=no
+                AC_TRY_LINK([
+#define _XOPEN_SOURCE 1
+#include <stddef.h>
+#include <stdlib.h>
+#ifdef HAVE_WCTYPE_H
+#include <wctype.h>
+#endif
+#ifdef HAVE_WCHAR_H
+#include <wchar.h>
+#endif],
+                        [mbrtowc(0, 0, 0, 0); wctomb(0, 0); wcwidth(0);
+        iswprint(0); iswspace(0); towlower(0); towupper(0); iswalnum(0)],
+                        mutt_cv_wc_funcs=yes))
+        wc_funcs=$mutt_cv_wc_funcs
+fi
+
+if test $wc_funcs = yes; then
+        AC_DEFINE(HAVE_WC_FUNCS,1,[ Define if you are using the system's wchar_t functions. ])
+fi
+
+AC_CACHE_CHECK([for nl_langinfo and CODESET], mutt_cv_langinfo_codeset,
+  [AC_TRY_LINK([#include <langinfo.h>],
+    [char* cs = nl_langinfo(CODESET);],
+    mutt_cv_langinfo_codeset=yes,
+    mutt_cv_langinfo_codeset=no)])
+if test $mutt_cv_langinfo_codeset = yes; then
+  AC_DEFINE(HAVE_LANGINFO_CODESET,1,[ Define if you have <langinfo.h> and nl_langinfo(CODESET). ])
+fi
+
+AC_CACHE_CHECK([for nl_langinfo and YESEXPR], mutt_cv_langinfo_yesexpr,
+  [AC_TRY_LINK([#include <langinfo.h>],
+    [char* cs = nl_langinfo(YESEXPR);],
+    mutt_cv_langinfo_yesexpr=yes,
+    mutt_cv_langinfo_yesexpr=no)])
+if test $mutt_cv_langinfo_yesexpr = yes; then
+  AC_DEFINE(HAVE_LANGINFO_YESEXPR,1,[ Define if you have <langinfo.h> and nl_langinfo(YESEXPR). ])
+fi
+
+dnl -- libesmtp --
+MUTT_AM_LIBESMTP
+if test x$use_libesmtp = xyes; then
+    CFLAGS="$CFLAGS $mutt_libesmtp_cflags"
+    MUTTLIBS="$MUTTLIBS $mutt_libesmtp_libs"
+    MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_libesmtp.o"
+
+    AC_DEFINE(USE_LIBESMTP,
+              1,
+              [Define to enable the use of libesmtp])
+fi
+dnl -- end libesmtp --
+
+AC_OUTPUT(Makefile intl/Makefile m4/Makefile
+        po/Makefile.in doc/Makefile contrib/Makefile
+        muttbug.sh
+        imap/Makefile
+        Muttrc.head
+        doc/instdoc.sh)
diff --git a/contrib/Makefile.in b/contrib/Makefile.in
new file mode 100644 (file)
index 0000000..d0c775a
--- /dev/null
@@ -0,0 +1,74 @@
+# $Id: Makefile.in,v 3.3 2003/04/02 08:47:28 roessler Exp $
+
+SHELL = /bin/sh
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+bindir = @bindir@
+libdir = @libdir@
+mandir = @mandir@
+srcdir = @srcdir@
+docdir = @docdir@
+top_srcdir = @top_srcdir@
+top_builddir = ..
+INSTALL = @INSTALL@
+VPATH = @srcdir@
+@SET_MAKE@
+
+subdir = contrib
+
+SAMPLES = Mush.rc Pine.rc gpg.rc pgp2.rc pgp5.rc pgp6.rc Tin.rc \
+       sample.muttrc  sample.mailcap sample.muttrc-tlr \
+       colors.default colors.linux smime.rc \
+       ca-bundle.crt smime_keys_test.pl
+
+DISTFILES = Makefile.in language.txt language50.txt  \
+       patch.slang-1.2.2.keypad.1      \
+       $(SAMPLES)
+
+ICONV_DISTFILES = README make.sh
+
+all clean:
+
+distclean:
+       -rm -f Makefile
+
+check:
+
+install:
+       $(top_srcdir)/mkinstalldirs $(DESTDIR)$(docdir)/samples $(DESTDIR)$(docdir)/samples/iconv
+       for f in $(SAMPLES) ; do \
+               $(INSTALL) -m 644 $(srcdir)/$$f $(DESTDIR)$(docdir)/samples ;   \
+       done
+       for f in $(srcdir)/iconv/*.rc ; do                                      \
+               $(INSTALL) -m 644 $$f $(DESTDIR)$(docdir)/samples/iconv   ;     \
+       done
+
+# Nothing needs to be done - uninstall in doc removes samples as well.
+# This is just so make uninstall doesn't fail.
+uninstall:
+
+maintainer-clean: distclean
+
+Makefile: ../config.status Makefile.in
+       cd .. \
+         && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: Makefile $(DISTFILES)
+       for file in $(DISTFILES) ; do                           \
+               ln $(srcdir)/$$file $(distdir) 2> /dev/null     \
+                       || cp -p $(srcdir)/$$file $(distdir);   \
+       done
+       mkdir -p $(distdir)/iconv
+       for file in $(ICONV_DISTFILES) ; do                                     \
+               ln $(srcdir)/iconv/$$file $(distdir)/iconv 2> /dev/null         \
+                       || cp -p $(srcdir)/iconv/$$file $(distdir)/iconv;       \
+       done
+       for file in $(srcdir)/iconv/*.rc ; do                                   \
+               ln $$file $(distdir)/iconv 2> /dev/null                         \
+                       || cp -p $$file $(distdir)/iconv ;                      \
+       done
diff --git a/contrib/Mush.rc b/contrib/Mush.rc
new file mode 100644 (file)
index 0000000..f0f7378
--- /dev/null
@@ -0,0 +1,20 @@
+#
+# Key bindings similar to those of MUSH
+#
+
+# $Id: Mush.rc,v 3.0 2002/01/24 12:11:17 roessler Exp $
+
+bind index . display-message
+bind index t display-message
+macro index n j\n
+bind index + next-entry
+bind index j next-entry
+bind index J next-entry
+bind index - previous-entry
+bind index k previous-entry
+bind index K previous-entry
+bind index { top-page
+bind index } bottom-page
+bind index f change-folder
+bind index \cu sync-mailbox
+bind index * flag-message
diff --git a/contrib/Pine.rc b/contrib/Pine.rc
new file mode 100644 (file)
index 0000000..f16ffbf
--- /dev/null
@@ -0,0 +1,44 @@
+#
+# This file contains commands to change the keybindings in Mutt to be
+# similar to those of PINE 3.95.
+#
+
+#
+# $Id: Pine.rc,v 3.0 2002/01/24 12:11:17 roessler Exp $
+#
+
+bind index v display-message
+bind index p previous-undeleted
+bind index n next-undeleted
+bind index ' ' next-page
+bind index c mail
+bind index g change-folder
+bind index w search
+bind index y print-message
+bind index x sync-mailbox
+bind index $ sort-mailbox
+bind index a tag-prefix
+bind index \; tag-entry
+
+# Not possible to simulate zoom-out...
+macro index z l~T\r
+
+bind pager p previous-undeleted
+bind pager n next-undeleted
+bind pager ' ' next-page
+bind pager g change-folder
+bind pager c mail
+bind pager w search
+bind pager y print-message
+bind pager \n noop     # PINE prints "No default action for this menu."
+bind pager <up> previous-line
+bind pager <down> next-line
+
+bind compose \cx send-message
+
+# PINE has different defaults for this variables
+set folder=~/mail
+set record=+sent-mail
+set nosave_name
+set postponed=~/postponed-msgs
+set hdr_format="%Z %3C %{%b %d} %-19.19L (%5c) %s"
diff --git a/contrib/Tin.rc b/contrib/Tin.rc
new file mode 100644 (file)
index 0000000..8f8b1de
--- /dev/null
@@ -0,0 +1,22 @@
+# From: Tom Gilbert <gilbertt@tomgilbert.freeserve.co.uk>
+# To: mutt-users@mutt.org
+# Subject: Re: Lynx-like movements
+# Date: Sat, 4 Sep 1999 21:09:00 +0000
+
+
+#
+# These key bindings may be nice for notorious lynx or tin users.
+#
+
+bind  pager   <up>     previous-line
+bind  pager   <down>   next-line
+bind  pager   <left>   exit
+bind  pager   <right>  view-attachments
+bind  attach  <left>   exit
+bind  attach  <right>  view-attach
+bind  index   <right>  display-message
+macro index   <left>   "c?"
+bind  browser <right>  select-entry
+macro browser <left>   "qc!\r"
+
+
diff --git a/contrib/ca-bundle.crt b/contrib/ca-bundle.crt
new file mode 100644 (file)
index 0000000..12b997d
--- /dev/null
@@ -0,0 +1,4599 @@
+##
+##  ca-bundle.crt -- Bundle of CA Root Certificates
+##  Last Modified: Thu Mar  2 09:32:46 CET 2000
+##
+##  This is a bundle of X.509 certificates of public
+##  Certificate Authorities (CA). These were automatically
+##  extracted from Netscape Communicator 4.72's certificate database
+##  (the file `cert7.db'). It contains the certificates in both
+##  plain text and PEM format and therefore can be directly used
+##  with an Apache+mod_ssl webserver for SSL client authentication.
+##  Just configure this file as the SSLCACertificateFile.
+##
+##  (SKIPME)
+##
+
+ABAecom (sub., Am. Bankers Assn.) Root CA
+=========================================
+MD5 Fingerprint: 82:12:F7:89:E1:0B:91:60:A4:B6:22:9F:94:68:11:92
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIID+DCCAuCgAwIBAgIRANAeQJAAACdLAAAAAQAAAAQwDQYJKoZIhvcNAQEFBQAw
+gYwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQIEwRVdGFoMRcwFQYDVQQHEw5TYWx0IExh
+a2UgQ2l0eTEYMBYGA1UEChMPWGNlcnQgRVogYnkgRFNUMRgwFgYDVQQDEw9YY2Vy
+dCBFWiBieSBEU1QxITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAe
+Fw05OTA3MTQxNjE0MThaFw0wOTA3MTExNjE0MThaMIGMMQswCQYDVQQGEwJVUzEN
+MAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxGDAWBgNVBAoT
+D1hjZXJ0IEVaIGJ5IERTVDEYMBYGA1UEAxMPWGNlcnQgRVogYnkgRFNUMSEwHwYJ
+KoZIhvcNAQkBFhJjYUBkaWdzaWd0cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQCtVBjetL/3reh0qu2LfI/C1HUa1YS5tmL8ie/kl2GS+x24
+4VpHNJ6eBiL70+o4y7iLB/caoBd3B1owHNQpOCDXJ0DYUJNDv9IYoil2BXKqa7Zp
+mKt5Hhxl9WqL/MUWqqJy2mDtTm4ZJXoKHTDjUJtCPETrobAgHtsCfv49H7/QAIrb
+QHamGKUVp1e2UsIBF5h3j4qBxhq0airmr6nWAKzP2BVJfNsbof6B+of505DBAsD5
+0ELpkWglX8a/hznplQBgKL+DLMDnXrbXNhbnYId26OcnsiUNi3rlqh3lWc3OCw5v
+xsic4xDZhTnTt5v6xrp8dNJddVardKSiUb9SfO5xAgMBAAGjUzBRMA8GA1UdEwEB
+/wQFMAMBAf8wHwYDVR0jBBgwFoAUCCBsZuuBCmxc1bWmPEHdHJaRJ3cwHQYDVR0O
+BBYEFAggbGbrgQpsXNW1pjxB3RyWkSd3MA0GCSqGSIb3DQEBBQUAA4IBAQBah1iP
+Lat2IWtUDNnxQfZOzSue4x+boy1/2St9WMhnpCn16ezVvZY/o3P4xFs2fNBjLDQ5
+m0i4PW/2FMWeY+anNG7T6DOzxzwYbiOuQ5KZP5jFaTDxNjutuTCC1rZZFpYCCykS
+YbQRifcML5SQhZgonFNsfmPdc/QZ/0qB0bJSI/08SjTOWhvgUIrtT4GV2GDn5MQN
+u1g+WPdOaG8+Z8nLepcWJ+xCYRR2uwDF6wg9FX9LtiJdhzuQ9PPA/jez6dliDMDD
+Wa9gvR8N26E0HzDEPYutsB0Ek+1f1eS/IDAE9EjpMwHRLpAnUrOb3jocq6mXf5vr
+wo3CbezcE9NGxXl8
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            d0:1e:40:90:00:00:27:4b:00:00:00:01:00:00:00:04
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Utah, L=Salt Lake City, O=Xcert EZ by DST, CN=Xcert EZ by DST/Email=ca@digsigtrust.com
+        Validity
+            Not Before: Jul 14 16:14:18 1999 GMT
+            Not After : Jul 11 16:14:18 2009 GMT
+        Subject: C=US, ST=Utah, L=Salt Lake City, O=Xcert EZ by DST, CN=Xcert EZ by DST/Email=ca@digsigtrust.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:ad:54:18:de:b4:bf:f7:ad:e8:74:aa:ed:8b:7c:
+                    8f:c2:d4:75:1a:d5:84:b9:b6:62:fc:89:ef:e4:97:
+                    61:92:fb:1d:b8:e1:5a:47:34:9e:9e:06:22:fb:d3:
+                    ea:38:cb:b8:8b:07:f7:1a:a0:17:77:07:5a:30:1c:
+                    d4:29:38:20:d7:27:40:d8:50:93:43:bf:d2:18:a2:
+                    29:76:05:72:aa:6b:b6:69:98:ab:79:1e:1c:65:f5:
+                    6a:8b:fc:c5:16:aa:a2:72:da:60:ed:4e:6e:19:25:
+                    7a:0a:1d:30:e3:50:9b:42:3c:44:eb:a1:b0:20:1e:
+                    db:02:7e:fe:3d:1f:bf:d0:00:8a:db:40:76:a6:18:
+                    a5:15:a7:57:b6:52:c2:01:17:98:77:8f:8a:81:c6:
+                    1a:b4:6a:2a:e6:af:a9:d6:00:ac:cf:d8:15:49:7c:
+                    db:1b:a1:fe:81:fa:87:f9:d3:90:c1:02:c0:f9:d0:
+                    42:e9:91:68:25:5f:c6:bf:87:39:e9:95:00:60:28:
+                    bf:83:2c:c0:e7:5e:b6:d7:36:16:e7:60:87:76:e8:
+                    e7:27:b2:25:0d:8b:7a:e5:aa:1d:e5:59:cd:ce:0b:
+                    0e:6f:c6:c8:9c:e3:10:d9:85:39:d3:b7:9b:fa:c6:
+                    ba:7c:74:d2:5d:75:56:ab:74:a4:a2:51:bf:52:7c:
+                    ee:71
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+            X509v3 Authority Key Identifier: 
+                keyid:08:20:6C:66:EB:81:0A:6C:5C:D5:B5:A6:3C:41:DD:1C:96:91:27:77
+
+            X509v3 Subject Key Identifier: 
+                08:20:6C:66:EB:81:0A:6C:5C:D5:B5:A6:3C:41:DD:1C:96:91:27:77
+    Signature Algorithm: sha1WithRSAEncryption
+        5a:87:58:8f:2d:ab:76:21:6b:54:0c:d9:f1:41:f6:4e:cd:2b:
+        9e:e3:1f:9b:a3:2d:7f:d9:2b:7d:58:c8:67:a4:29:f5:e9:ec:
+        d5:bd:96:3f:a3:73:f8:c4:5b:36:7c:d0:63:2c:34:39:9b:48:
+        b8:3d:6f:f6:14:c5:9e:63:e6:a7:34:6e:d3:e8:33:b3:c7:3c:
+        18:6e:23:ae:43:92:99:3f:98:c5:69:30:f1:36:3b:ad:b9:30:
+        82:d6:b6:59:16:96:02:0b:29:12:61:b4:11:89:f7:0c:2f:94:
+        90:85:98:28:9c:53:6c:7e:63:dd:73:f4:19:ff:4a:81:d1:b2:
+        52:23:fd:3c:4a:34:ce:5a:1b:e0:50:8a:ed:4f:81:95:d8:60:
+        e7:e4:c4:0d:bb:58:3e:58:f7:4e:68:6f:3e:67:c9:cb:7a:97:
+        16:27:ec:42:61:14:76:bb:00:c5:eb:08:3d:15:7f:4b:b6:22:
+        5d:87:3b:90:f4:f3:c0:fe:37:b3:e9:d9:62:0c:c0:c3:59:af:
+        60:bd:1f:0d:db:a1:34:1f:30:c4:3d:8b:ad:b0:1d:04:93:ed:
+        5f:d5:e4:bf:20:30:04:f4:48:e9:33:01:d1:2e:90:27:52:b3:
+        9b:de:3a:1c:ab:a9:97:7f:9b:eb:c2:8d:c2:6d:ec:dc:13:d3:
+        46:c5:79:7c
+
+ANX Network CA by DST
+=====================
+MD5 Fingerprint: A8:ED:DE:EB:93:88:66:D8:2F:C3:BD:1D:BE:45:BE:4D
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDTTCCAragAwIBAgIENm6ibzANBgkqhkiG9w0BAQUFADBSMQswCQYDVQQGEwJV
+UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMR0wGwYDVQQL
+ExREU1QgKEFOWCBOZXR3b3JrKSBDQTAeFw05ODEyMDkxNTQ2NDhaFw0xODEyMDkx
+NjE2NDhaMFIxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVy
+ZSBUcnVzdCBDby4xHTAbBgNVBAsTFERTVCAoQU5YIE5ldHdvcmspIENBMIGdMA0G
+CSqGSIb3DQEBAQUAA4GLADCBhwKBgQC0SBGAWKDVpZkP9jcsRLZu0XzzKmueEbaI
+IwRccSWeahJ3EW6/aDllqPay9qIYsokVoGe3eowiSGv2hDQftsr3G3LL8ltI04ce
+InYTBLSsbJZ/5w4IyTJRMC3VgOghZ7rzXggkLAdZnZAa7kbJtaQelrRBkdR/0o04
+JrBvQ24JfQIBA6OCATAwggEsMBEGCWCGSAGG+EIBAQQEAwIABzB0BgNVHR8EbTBr
+MGmgZ6BlpGMwYTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
+dXJlIFRydXN0IENvLjEdMBsGA1UECxMURFNUIChBTlggTmV0d29yaykgQ0ExDTAL
+BgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxNTQ2NDhagQ8yMDE4MTIw
+OTE1NDY0OFowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFIwWVXDMFgpTZMKlhKqz
+ZBdDP4I2MB0GA1UdDgQWBBSMFlVwzBYKU2TCpYSqs2QXQz+CNjAMBgNVHRMEBTAD
+AQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
+AEklyWCxDF+pORDTxTRVfc95wynr3vnCQPnoVsXwL+z02exIUbhjOF6TbhiWhbnK
+UJykuOpmJmiThW9vTHHQvnoLPDG5975pnhDX0UDorBZxq66rOOFwscqSFuBdhaYY
+gAYAnOGmGEJRp2hoWe8mlF+tMQz+KR4XAYQ3W+gSMqNd
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 913220207 (0x366ea26f)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=Digital Signature Trust Co., OU=DST (ANX Network) CA
+        Validity
+            Not Before: Dec  9 15:46:48 1998 GMT
+            Not After : Dec  9 16:16:48 2018 GMT
+        Subject: C=US, O=Digital Signature Trust Co., OU=DST (ANX Network) CA
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b4:48:11:80:58:a0:d5:a5:99:0f:f6:37:2c:44:
+                    b6:6e:d1:7c:f3:2a:6b:9e:11:b6:88:23:04:5c:71:
+                    25:9e:6a:12:77:11:6e:bf:68:39:65:a8:f6:b2:f6:
+                    a2:18:b2:89:15:a0:67:b7:7a:8c:22:48:6b:f6:84:
+                    34:1f:b6:ca:f7:1b:72:cb:f2:5b:48:d3:87:1e:22:
+                    76:13:04:b4:ac:6c:96:7f:e7:0e:08:c9:32:51:30:
+                    2d:d5:80:e8:21:67:ba:f3:5e:08:24:2c:07:59:9d:
+                    90:1a:ee:46:c9:b5:a4:1e:96:b4:41:91:d4:7f:d2:
+                    8d:38:26:b0:6f:43:6e:09:7d
+                Exponent: 3 (0x3)
+        X509v3 extensions:
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+            X509v3 CRL Distribution Points: 
+                DirName:/C=US/O=Digital Signature Trust Co./OU=DST (ANX Network) CA/CN=CRL1
+
+            X509v3 Private Key Usage Period: 
+                Not Before: Dec  9 15:46:48 1998 GMT, Not After: Dec  9 15:46:48 2018 GMT
+            X509v3 Key Usage: 
+                Certificate Sign, CRL Sign
+            X509v3 Authority Key Identifier: 
+                keyid:8C:16:55:70:CC:16:0A:53:64:C2:A5:84:AA:B3:64:17:43:3F:82:36
+
+            X509v3 Subject Key Identifier: 
+                8C:16:55:70:CC:16:0A:53:64:C2:A5:84:AA:B3:64:17:43:3F:82:36
+            X509v3 Basic Constraints: 
+                CA:TRUE
+            1.2.840.113533.7.65.0: 
+                0
+..V4.0....
+    Signature Algorithm: sha1WithRSAEncryption
+        49:25:c9:60:b1:0c:5f:a9:39:10:d3:c5:34:55:7d:cf:79:c3:
+        29:eb:de:f9:c2:40:f9:e8:56:c5:f0:2f:ec:f4:d9:ec:48:51:
+        b8:63:38:5e:93:6e:18:96:85:b9:ca:50:9c:a4:b8:ea:66:26:
+        68:93:85:6f:6f:4c:71:d0:be:7a:0b:3c:31:b9:f7:be:69:9e:
+        10:d7:d1:40:e8:ac:16:71:ab:ae:ab:38:e1:70:b1:ca:92:16:
+        e0:5d:85:a6:18:80:06:00:9c:e1:a6:18:42:51:a7:68:68:59:
+        ef:26:94:5f:ad:31:0c:fe:29:1e:17:01:84:37:5b:e8:12:32:
+        a3:5d
+
+American Express CA
+===================
+MD5 Fingerprint: 1C:D5:8E:82:BE:70:55:8E:39:61:DF:AD:51:DB:6B:A0
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIICkDCCAfkCAgCNMA0GCSqGSIb3DQEBBAUAMIGPMQswCQYDVQQGEwJVUzEnMCUG
+A1UEChMeQW1lcmljYW4gRXhwcmVzcyBDb21wYW55LCBJbmMuMSYwJAYDVQQLEx1B
+bWVyaWNhbiBFeHByZXNzIFRlY2hub2xvZ2llczEvMC0GA1UEAxMmQW1lcmljYW4g
+RXhwcmVzcyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNOTgwODE0MjIwMTAwWhcN
+MDYwODE0MjM1OTAwWjCBjzELMAkGA1UEBhMCVVMxJzAlBgNVBAoTHkFtZXJpY2Fu
+IEV4cHJlc3MgQ29tcGFueSwgSW5jLjEmMCQGA1UECxMdQW1lcmljYW4gRXhwcmVz
+cyBUZWNobm9sb2dpZXMxLzAtBgNVBAMTJkFtZXJpY2FuIEV4cHJlc3MgQ2VydGlm
+aWNhdGUgQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJ8kmS
+hcr9FSm1BrZE7PyIo/KGzv8UTyQckvnCI8HOQ99dNMi4FOzVKnCRSZXXVs2U8amT
+0Ggi3E19oApyKkfqJfCFAF82VGHPC/k3Wmed6R/pZD9wlWGn0DAC3iYopGYDBOkw
++48zB/lvYYeictvzaHhjZlmpybdm4RWySDYs+QIDAQABMA0GCSqGSIb3DQEBBAUA
+A4GBAGgXYrhzi0xs60qlPqvlnS7SzYoHV/PGWZd2Fxf4Uo4nk9hY2Chs9KIEeorC
+diSxArTfKPL386infiNIYYj0EWiuJl32oUtTJWrYKhQCDuCHIG6eGVxzkAsj4jGX
+Iz/VIqLTBnvaN/XXtUFEF3pFAtmFRWbWjsfwegyZYiJpW+3S
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 141 (0x8d)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Certificate Authority
+        Validity
+            Not Before: Aug 14 22:01:00 1998 GMT
+            Not After : Aug 14 23:59:00 2006 GMT
+        Subject: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Certificate Authority
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:c9:f2:49:92:85:ca:fd:15:29:b5:06:b6:44:ec:
+                    fc:88:a3:f2:86:ce:ff:14:4f:24:1c:92:f9:c2:23:
+                    c1:ce:43:df:5d:34:c8:b8:14:ec:d5:2a:70:91:49:
+                    95:d7:56:cd:94:f1:a9:93:d0:68:22:dc:4d:7d:a0:
+                    0a:72:2a:47:ea:25:f0:85:00:5f:36:54:61:cf:0b:
+                    f9:37:5a:67:9d:e9:1f:e9:64:3f:70:95:61:a7:d0:
+                    30:02:de:26:28:a4:66:03:04:e9:30:fb:8f:33:07:
+                    f9:6f:61:87:a2:72:db:f3:68:78:63:66:59:a9:c9:
+                    b7:66:e1:15:b2:48:36:2c:f9
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        68:17:62:b8:73:8b:4c:6c:eb:4a:a5:3e:ab:e5:9d:2e:d2:cd:
+        8a:07:57:f3:c6:59:97:76:17:17:f8:52:8e:27:93:d8:58:d8:
+        28:6c:f4:a2:04:7a:8a:c2:76:24:b1:02:b4:df:28:f2:f7:f3:
+        a8:a7:7e:23:48:61:88:f4:11:68:ae:26:5d:f6:a1:4b:53:25:
+        6a:d8:2a:14:02:0e:e0:87:20:6e:9e:19:5c:73:90:0b:23:e2:
+        31:97:23:3f:d5:22:a2:d3:06:7b:da:37:f5:d7:b5:41:44:17:
+        7a:45:02:d9:85:45:66:d6:8e:c7:f0:7a:0c:99:62:22:69:5b:
+        ed:d2
+
+American Express Global CA
+==========================
+MD5 Fingerprint: 63:1B:66:93:8C:F3:66:CB:3C:79:57:DC:05:49:EA:DB
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIEBDCCAuygAwIBAgICAIUwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNVBAYTAlVT
+MScwJQYDVQQKEx5BbWVyaWNhbiBFeHByZXNzIENvbXBhbnksIEluYy4xJjAkBgNV
+BAsTHUFtZXJpY2FuIEV4cHJlc3MgVGVjaG5vbG9naWVzMTYwNAYDVQQDEy1BbWVy
+aWNhbiBFeHByZXNzIEdsb2JhbCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNOTgw
+ODE0MTkwNjAwWhcNMTMwODE0MjM1OTAwWjCBljELMAkGA1UEBhMCVVMxJzAlBgNV
+BAoTHkFtZXJpY2FuIEV4cHJlc3MgQ29tcGFueSwgSW5jLjEmMCQGA1UECxMdQW1l
+cmljYW4gRXhwcmVzcyBUZWNobm9sb2dpZXMxNjA0BgNVBAMTLUFtZXJpY2FuIEV4
+cHJlc3MgR2xvYmFsIENlcnRpZmljYXRlIEF1dGhvcml0eTCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAPAkJmYu++tKc3FTiUfLJjxTkpRMysKFtQ34w1e9
+Lyofahi3V68MABb6oLaQpvcaoS5mJsdoo4qTaWa1RlYtHYLqkAwKIsKJUI0F89Sr
+c0HwzxKsKLRvFJSWWUuekHWG3+JH6+HpT0N+h8onGGaetcFAZX38YW+tm3LPqV7Y
+8/nabpEQ+ky16n4g3qk5L/WI5IpvNcYgnCuGRjMK/DFVpWusFkDpzTVZbzIEw3u1
+D3t3cPNIuypSgs6vKW3xEW9t5gcAAe+a8yYNpnkTZ6/4qxx1rJG1a75AsN6cDLFp
+hRlxkRNFyt/R/eayypaDedvFuKpbepALeFY+xteflEgR9a0CAwEAAaNaMFgwEgYD
+VR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAQYwFwYDVR0gBBAwDjAMBgoq
+hkiG+Q8KAQUBMBkGA1UdDgQSBBBXRzV7NicRqAj8L0Yl6yRpMA0GCSqGSIb3DQEB
+BQUAA4IBAQDHYUWoinG5vjTpIXshzVYTmNUwY+kYqkuSFb8LHbvskmnFLsNhi+gw
+RcsQRsFzOFyLGdIr80DrfHKzLh4n43WVihybLsSVBYZy0FX0oZJSeVzb9Pjc5dcS
+sUDHPIbkMWVKyjfG3nZXGWlMRmn8Kq0WN3qTrPchSy3766lQy8HRQAjaA2mHpzde
+VcHF7cTjjgwml5tcV0ty4/IDBdACOyYDQJCevgtbSQx48dVMVSng9v1MA6lUAjLR
+V1qFrEPtWzsWX6C/NdtLnnvo/+cNPDuom0lBRvVzTv+SZSGDE1Vx60k8f4gawhIo
+JaFGS0E3l3/sjvHUoZbCILZerakcHhGg
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 133 (0x85)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Global Certificate Authority
+        Validity
+            Not Before: Aug 14 19:06:00 1998 GMT
+            Not After : Aug 14 23:59:00 2013 GMT
+        Subject: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Global Certificate Authority
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:f0:24:26:66:2e:fb:eb:4a:73:71:53:89:47:cb:
+                    26:3c:53:92:94:4c:ca:c2:85:b5:0d:f8:c3:57:bd:
+                    2f:2a:1f:6a:18:b7:57:af:0c:00:16:fa:a0:b6:90:
+                    a6:f7:1a:a1:2e:66:26:c7:68:a3:8a:93:69:66:b5:
+                    46:56:2d:1d:82:ea:90:0c:0a:22:c2:89:50:8d:05:
+                    f3:d4:ab:73:41:f0:cf:12:ac:28:b4:6f:14:94:96:
+                    59:4b:9e:90:75:86:df:e2:47:eb:e1:e9:4f:43:7e:
+                    87:ca:27:18:66:9e:b5:c1:40:65:7d:fc:61:6f:ad:
+                    9b:72:cf:a9:5e:d8:f3:f9:da:6e:91:10:fa:4c:b5:
+                    ea:7e:20:de:a9:39:2f:f5:88:e4:8a:6f:35:c6:20:
+                    9c:2b:86:46:33:0a:fc:31:55:a5:6b:ac:16:40:e9:
+                    cd:35:59:6f:32:04:c3:7b:b5:0f:7b:77:70:f3:48:
+                    bb:2a:52:82:ce:af:29:6d:f1:11:6f:6d:e6:07:00:
+                    01:ef:9a:f3:26:0d:a6:79:13:67:af:f8:ab:1c:75:
+                    ac:91:b5:6b:be:40:b0:de:9c:0c:b1:69:85:19:71:
+                    91:13:45:ca:df:d1:fd:e6:b2:ca:96:83:79:db:c5:
+                    b8:aa:5b:7a:90:0b:78:56:3e:c6:d7:9f:94:48:11:
+                    f5:ad
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:TRUE, pathlen:5
+            X509v3 Key Usage: critical
+                Certificate Sign, CRL Sign
+            X509v3 Certificate Policies: 
+                Policy: 1.2.840.113807.10.1.5.1
+
+            X509v3 Subject Key Identifier: 
+                57:47:35:7B:36:27:11:A8:08:FC:2F:46:25:EB:24:69
+    Signature Algorithm: sha1WithRSAEncryption
+        c7:61:45:a8:8a:71:b9:be:34:e9:21:7b:21:cd:56:13:98:d5:
+        30:63:e9:18:aa:4b:92:15:bf:0b:1d:bb:ec:92:69:c5:2e:c3:
+        61:8b:e8:30:45:cb:10:46:c1:73:38:5c:8b:19:d2:2b:f3:40:
+        eb:7c:72:b3:2e:1e:27:e3:75:95:8a:1c:9b:2e:c4:95:05:86:
+        72:d0:55:f4:a1:92:52:79:5c:db:f4:f8:dc:e5:d7:12:b1:40:
+        c7:3c:86:e4:31:65:4a:ca:37:c6:de:76:57:19:69:4c:46:69:
+        fc:2a:ad:16:37:7a:93:ac:f7:21:4b:2d:fb:eb:a9:50:cb:c1:
+        d1:40:08:da:03:69:87:a7:37:5e:55:c1:c5:ed:c4:e3:8e:0c:
+        26:97:9b:5c:57:4b:72:e3:f2:03:05:d0:02:3b:26:03:40:90:
+        9e:be:0b:5b:49:0c:78:f1:d5:4c:55:29:e0:f6:fd:4c:03:a9:
+        54:02:32:d1:57:5a:85:ac:43:ed:5b:3b:16:5f:a0:bf:35:db:
+        4b:9e:7b:e8:ff:e7:0d:3c:3b:a8:9b:49:41:46:f5:73:4e:ff:
+        92:65:21:83:13:55:71:eb:49:3c:7f:88:1a:c2:12:28:25:a1:
+        46:4b:41:37:97:7f:ec:8e:f1:d4:a1:96:c2:20:b6:5e:ad:a9:
+        1c:1e:11:a0
+
+BelSign Object Publishing CA
+============================
+MD5 Fingerprint: 8A:02:F8:DF:B8:E1:84:9F:5A:C2:60:24:65:D1:73:FB
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDAzCCAmygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBuzELMAkGA1UEBhMCQkUx
+ETAPBgNVBAcTCEJydXNzZWxzMRMwEQYDVQQKEwpCZWxTaWduIE5WMTgwNgYDVQQL
+Ey9CZWxTaWduIE9iamVjdCBQdWJsaXNoaW5nIENlcnRpZmljYXRlIEF1dGhvcml0
+eTElMCMGA1UEAxMcQmVsU2lnbiBPYmplY3QgUHVibGlzaGluZyBDQTEjMCEGCSqG
+SIb3DQEJARYUd2VibWFzdGVyQGJlbHNpZ24uYmUwHhcNOTcwOTE5MjIwMzAwWhcN
+MDcwOTE5MjIwMzAwWjCBuzELMAkGA1UEBhMCQkUxETAPBgNVBAcTCEJydXNzZWxz
+MRMwEQYDVQQKEwpCZWxTaWduIE5WMTgwNgYDVQQLEy9CZWxTaWduIE9iamVjdCBQ
+dWJsaXNoaW5nIENlcnRpZmljYXRlIEF1dGhvcml0eTElMCMGA1UEAxMcQmVsU2ln
+biBPYmplY3QgUHVibGlzaGluZyBDQTEjMCEGCSqGSIb3DQEJARYUd2VibWFzdGVy
+QGJlbHNpZ24uYmUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMQuH7a/7oJA
+3fm3LkHVngWxWtAmfGJVA5v8y2HeS+/+6Jn+h7mIz5DaDwk8dt8Xl7bLPyVF/bS8
+WAC+sFq2FIeP7mdkrR2Ig7tnn2VhAFgIgFCfgMkx9iqQHC33SmwQ9iNDXTgJYIhX
+As0WbBj8zfuSKnfQnpOjXYhk0Mj4XVRRAgMBAAGjFTATMBEGCWCGSAGG+EIBAQQE
+AwIABzANBgkqhkiG9w0BAQQFAAOBgQBjdhd8lvBTpV0BHFPOKcJ+daxMDaIIc7Rq
+Mf0CBhSZ3FQEpL/IloafMUMyJVf2hfYluze+oXkjyVcGJXFrRU/49AJAFoIir1Tq
+Mij2De6ZuksIUQ9uhiMhTC0liIHELg7xEyw4ipUCJMM6lWPkk45IuwhHcl+u5jpa
+R9Zxxp6aUg==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Object Publishing Certificate Authority, CN=BelSign Object Publishing CA/Email=webmaster@belsign.be
+        Validity
+            Not Before: Sep 19 22:03:00 1997 GMT
+            Not After : Sep 19 22:03:00 2007 GMT
+        Subject: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Object Publishing Certificate Authority, CN=BelSign Object Publishing CA/Email=webmaster@belsign.be
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:c4:2e:1f:b6:bf:ee:82:40:dd:f9:b7:2e:41:d5:
+                    9e:05:b1:5a:d0:26:7c:62:55:03:9b:fc:cb:61:de:
+                    4b:ef:fe:e8:99:fe:87:b9:88:cf:90:da:0f:09:3c:
+                    76:df:17:97:b6:cb:3f:25:45:fd:b4:bc:58:00:be:
+                    b0:5a:b6:14:87:8f:ee:67:64:ad:1d:88:83:bb:67:
+                    9f:65:61:00:58:08:80:50:9f:80:c9:31:f6:2a:90:
+                    1c:2d:f7:4a:6c:10:f6:23:43:5d:38:09:60:88:57:
+                    02:cd:16:6c:18:fc:cd:fb:92:2a:77:d0:9e:93:a3:
+                    5d:88:64:d0:c8:f8:5d:54:51
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+    Signature Algorithm: md5WithRSAEncryption
+        63:76:17:7c:96:f0:53:a5:5d:01:1c:53:ce:29:c2:7e:75:ac:
+        4c:0d:a2:08:73:b4:6a:31:fd:02:06:14:99:dc:54:04:a4:bf:
+        c8:96:86:9f:31:43:32:25:57:f6:85:f6:25:bb:37:be:a1:79:
+        23:c9:57:06:25:71:6b:45:4f:f8:f4:02:40:16:82:22:af:54:
+        ea:32:28:f6:0d:ee:99:ba:4b:08:51:0f:6e:86:23:21:4c:2d:
+        25:88:81:c4:2e:0e:f1:13:2c:38:8a:95:02:24:c3:3a:95:63:
+        e4:93:8e:48:bb:08:47:72:5f:ae:e6:3a:5a:47:d6:71:c6:9e:
+        9a:52
+
+BelSign Secure Server CA
+========================
+MD5 Fingerprint: 3D:5E:82:C6:D9:AD:D9:8B:93:6B:0C:10:B9:49:0A:B1
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIC8zCCAlygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBszELMAkGA1UEBhMCQkUx
+ETAPBgNVBAcTCEJydXNzZWxzMRMwEQYDVQQKEwpCZWxTaWduIE5WMTQwMgYDVQQL
+EytCZWxTaWduIFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSEw
+HwYDVQQDExhCZWxTaWduIFNlY3VyZSBTZXJ2ZXIgQ0ExIzAhBgkqhkiG9w0BCQEW
+FHdlYm1hc3RlckBiZWxzaWduLmJlMB4XDTk3MDcxNjIyMDA1NFoXDTA3MDcxNjIy
+MDA1NFowgbMxCzAJBgNVBAYTAkJFMREwDwYDVQQHEwhCcnVzc2VsczETMBEGA1UE
+ChMKQmVsU2lnbiBOVjE0MDIGA1UECxMrQmVsU2lnbiBTZWN1cmUgU2VydmVyIENl
+cnRpZmljYXRlIEF1dGhvcml0eTEhMB8GA1UEAxMYQmVsU2lnbiBTZWN1cmUgU2Vy
+dmVyIENBMSMwIQYJKoZIhvcNAQkBFhR3ZWJtYXN0ZXJAYmVsc2lnbi5iZTCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1gESeJL4BEJ/yccig/x8R3AwK0kLPjZA
+kCjaIXODU/LE0RZAwFP/rqbGJLMnbaWzPTl3XagG9ubpvGMRTgZlcAqdk/miQIt/
+SoQOjRax1swIZBIM4ChLyKWEkBf7EUYu1qeFGMsYrmOasFgG9ADP+MQJGjUMofnu
+Sv1t3v4mpTsCAwEAAaMVMBMwEQYJYIZIAYb4QgEBBAQDAgCgMA0GCSqGSIb3DQEB
+BAUAA4GBAGw9mcMF4h3K5S2qaIWLQDEgZhNo5lg6idCNdbLFYth9go/32TKBd/Y1
+W4UpzmeyubwrGXjP84f9RvGVdbIJVwMwwXrNckdxgMp9ncllPEcRIn36BwsoeKGT
+6AVFSOIyMko96FMcELfHc4wHUOH5yStTQfWDjeUJOUqOA2KqQGOL
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Secure Server Certificate Authority, CN=BelSign Secure Server CA/Email=webmaster@belsign.be
+        Validity
+            Not Before: Jul 16 22:00:54 1997 GMT
+            Not After : Jul 16 22:00:54 2007 GMT
+        Subject: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Secure Server Certificate Authority, CN=BelSign Secure Server CA/Email=webmaster@belsign.be
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:d6:01:12:78:92:f8:04:42:7f:c9:c7:22:83:fc:
+                    7c:47:70:30:2b:49:0b:3e:36:40:90:28:da:21:73:
+                    83:53:f2:c4:d1:16:40:c0:53:ff:ae:a6:c6:24:b3:
+                    27:6d:a5:b3:3d:39:77:5d:a8:06:f6:e6:e9:bc:63:
+                    11:4e:06:65:70:0a:9d:93:f9:a2:40:8b:7f:4a:84:
+                    0e:8d:16:b1:d6:cc:08:64:12:0c:e0:28:4b:c8:a5:
+                    84:90:17:fb:11:46:2e:d6:a7:85:18:cb:18:ae:63:
+                    9a:b0:58:06:f4:00:cf:f8:c4:09:1a:35:0c:a1:f9:
+                    ee:4a:fd:6d:de:fe:26:a5:3b
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            Netscape Cert Type: 
+                SSL Client, S/MIME
+    Signature Algorithm: md5WithRSAEncryption
+        6c:3d:99:c3:05:e2:1d:ca:e5:2d:aa:68:85:8b:40:31:20:66:
+        13:68:e6:58:3a:89:d0:8d:75:b2:c5:62:d8:7d:82:8f:f7:d9:
+        32:81:77:f6:35:5b:85:29:ce:67:b2:b9:bc:2b:19:78:cf:f3:
+        87:fd:46:f1:95:75:b2:09:57:03:30:c1:7a:cd:72:47:71:80:
+        ca:7d:9d:c9:65:3c:47:11:22:7d:fa:07:0b:28:78:a1:93:e8:
+        05:45:48:e2:32:32:4a:3d:e8:53:1c:10:b7:c7:73:8c:07:50:
+        e1:f9:c9:2b:53:41:f5:83:8d:e5:09:39:4a:8e:03:62:aa:40:
+        63:8b
+
+Deutsche Telekom AG Root CA
+===========================
+MD5 Fingerprint: 77:DE:04:94:77:D0:0C:5F:A7:B1:F4:30:18:87:FB:55
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIICjjCCAfegAwIBAgIBBjANBgkqhkiG9w0BAQQFADBtMQswCQYDVQQGEwJERTEc
+MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEdMBsGA1UECxMUVGVsZVNlYyBU
+cnVzdCBDZW50ZXIxITAfBgNVBAMTGERldXRzY2hlIFRlbGVrb20gUm9vdCBDQTAe
+Fw05ODEyMDkwOTExMDBaFw0wNDEyMDkyMzU5MDBaMG0xCzAJBgNVBAYTAkRFMRww
+GgYDVQQKExNEZXV0c2NoZSBUZWxla29tIEFHMR0wGwYDVQQLExRUZWxlU2VjIFRy
+dXN0IENlbnRlcjEhMB8GA1UEAxMYRGV1dHNjaGUgVGVsZWtvbSBSb290IENBMIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdBSz5BbO5EtdpcffqVjAIVxRDe7sa
+nG0vV2HX4vVEa+42QZb2ZM7hwbK5pBQEmFDocPiONZp9ScFhHVmu2gYYlX2tzuyp
+vtEYD0CRdiqj5f3+iRX0V/fgVdp1rQD0LME1zLRDJlViRC4BJZyKW/DB0AA1eP41
+3pRAZHiDocw5iQIDAQABoz4wPDAPBgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQE
+AwIBBjAZBgNVHQ4EEgQQLIdZH4sTgLL5hp0+En5YljANBgkqhkiG9w0BAQQFAAOB
+gQAP/nO1B4hvoAuJ6spQH5TelCsLJ15P9RyVJtqMllStGZE3Q12ryYuzzW+YOT3t
+3TXjcbftE5OD6IblKTMTE7w1e/0oL3BZ1dO0jSgTWTvI1XT5RcIHYKq4GFT5pWj/
+1wXVj7YFMS5BSvQQH2BHGguLGU2SVyDS71AZ6M3QcLy8Ng==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 6 (0x6)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=DE, O=Deutsche Telekom AG, OU=TeleSec Trust Center, CN=Deutsche Telekom Root CA
+        Validity
+            Not Before: Dec  9 09:11:00 1998 GMT
+            Not After : Dec  9 23:59:00 2004 GMT
+        Subject: C=DE, O=Deutsche Telekom AG, OU=TeleSec Trust Center, CN=Deutsche Telekom Root CA
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:dd:05:2c:f9:05:b3:b9:12:d7:69:71:f7:ea:56:
+                    30:08:57:14:43:7b:bb:1a:9c:6d:2f:57:61:d7:e2:
+                    f5:44:6b:ee:36:41:96:f6:64:ce:e1:c1:b2:b9:a4:
+                    14:04:98:50:e8:70:f8:8e:35:9a:7d:49:c1:61:1d:
+                    59:ae:da:06:18:95:7d:ad:ce:ec:a9:be:d1:18:0f:
+                    40:91:76:2a:a3:e5:fd:fe:89:15:f4:57:f7:e0:55:
+                    da:75:ad:00:f4:2c:c1:35:cc:b4:43:26:55:62:44:
+                    2e:01:25:9c:8a:5b:f0:c1:d0:00:35:78:fe:35:de:
+                    94:40:64:78:83:a1:cc:39:89
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:TRUE, pathlen:5
+            X509v3 Key Usage: critical
+                Certificate Sign, CRL Sign
+            X509v3 Subject Key Identifier: 
+                2C:87:59:1F:8B:13:80:B2:F9:86:9D:3E:12:7E:58:96
+    Signature Algorithm: md5WithRSAEncryption
+        0f:fe:73:b5:07:88:6f:a0:0b:89:ea:ca:50:1f:94:de:94:2b:
+        0b:27:5e:4f:f5:1c:95:26:da:8c:96:54:ad:19:91:37:43:5d:
+        ab:c9:8b:b3:cd:6f:98:39:3d:ed:dd:35:e3:71:b7:ed:13:93:
+        83:e8:86:e5:29:33:13:13:bc:35:7b:fd:28:2f:70:59:d5:d3:
+        b4:8d:28:13:59:3b:c8:d5:74:f9:45:c2:07:60:aa:b8:18:54:
+        f9:a5:68:ff:d7:05:d5:8f:b6:05:31:2e:41:4a:f4:10:1f:60:
+        47:1a:0b:8b:19:4d:92:57:20:d2:ef:50:19:e8:cd:d0:70:bc:
+        bc:36
+
+Digital Signature Trust Co. Global CA 1
+=======================================
+MD5 Fingerprint: 25:7A:BA:83:2E:B6:A2:0B:DA:FE:F5:02:0F:08:D7:AD
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
+UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
+EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ
+BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
+ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg
+bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ
+j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV
+Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG
+SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
+JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
+RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw
+MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5
+fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i
++DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
+SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN
+QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+
+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 913315222 (0x36701596)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=Digital Signature Trust Co., OU=DSTCA E1
+        Validity
+            Not Before: Dec 10 18:10:23 1998 GMT
+            Not After : Dec 10 18:40:23 2018 GMT
+        Subject: C=US, O=Digital Signature Trust Co., OU=DSTCA E1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:a0:6c:81:a9:cf:34:1e:24:dd:fe:86:28:cc:de:
+                    83:2f:f9:5e:d4:42:d2:e8:74:60:66:13:98:06:1c:
+                    a9:51:12:69:6f:31:55:b9:49:72:00:08:7e:d3:a5:
+                    62:44:37:24:99:8f:d9:83:48:8f:99:6d:95:13:bb:
+                    43:3b:2e:49:4e:88:37:c1:bb:58:7f:fe:e1:bd:f8:
+                    bb:61:cd:f3:47:c0:99:a6:f1:f3:91:e8:78:7c:00:
+                    cb:61:c9:44:27:71:69:55:4a:7e:49:4d:ed:a2:a3:
+                    be:02:4c:00:ca:02:a8:ee:01:02:31:64:0f:52:2d:
+                    13:74:76:36:b5:7a:b4:2d:71
+                Exponent: 3 (0x3)
+        X509v3 extensions:
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+            X509v3 CRL Distribution Points: 
+                DirName:/C=US/O=Digital Signature Trust Co./OU=DSTCA E1/CN=CRL1
+
+            X509v3 Private Key Usage Period: 
+                Not Before: Dec 10 18:10:23 1998 GMT, Not After: Dec 10 18:10:23 2018 GMT
+            X509v3 Key Usage: 
+                Certificate Sign, CRL Sign
+            X509v3 Authority Key Identifier: 
+                keyid:6A:79:7E:91:69:46:18:13:0A:02:77:A5:59:5B:60:98:25:0E:A2:F8
+
+            X509v3 Subject Key Identifier: 
+                6A:79:7E:91:69:46:18:13:0A:02:77:A5:59:5B:60:98:25:0E:A2:F8
+            X509v3 Basic Constraints: 
+                CA:TRUE
+            1.2.840.113533.7.65.0: 
+                0
+..V4.0....
+    Signature Algorithm: sha1WithRSAEncryption
+        22:12:d8:7a:1d:dc:81:06:b6:09:65:b2:87:c8:1f:5e:b4:2f:
+        e9:c4:1e:f2:3c:c1:bb:04:90:11:4a:83:4e:7e:93:b9:4d:42:
+        c7:92:26:a0:5c:34:9a:38:72:f8:fd:6b:16:3e:20:ee:82:8b:
+        31:2a:93:36:85:23:88:8a:3c:03:68:d3:c9:09:0f:4d:fc:6c:
+        a4:da:28:72:93:0e:89:80:b0:7d:fe:80:6f:65:6d:18:33:97:
+        8b:c2:6b:89:ee:60:3d:c8:9b:ef:7f:2b:32:62:73:93:cb:3c:
+        e3:7b:e2:76:78:45:bc:a1:93:04:bb:86:9f:3a:5b:43:7a:c3:
+        8a:65
+
+Digital Signature Trust Co. Global CA 2
+=======================================
+MD5 Fingerprint: 6C:C9:A7:6E:47:F1:0C:E3:53:3B:78:4C:4D:C2:6A:C5
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQsw
+CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp
+dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE
+CxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0B
+CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4NTVaFw0wODExMjgx
+ODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO
+U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0
+IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDEx
+ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBANLGJrbnpT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdf
+WvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZPdJEjdd0IG03Ao9pk1uK
+xBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGAvqPYUrBE
+zUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F
+5X5yP4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMv
+OnNn7pTKBBMFYgZwI7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG
+9w0BAQUFAAOCAQEAojeyP2n714Z5VEkxlTMr89EJFEliYIalsBHiUMIdBlc+Legz
+ZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2vAd5ZWRzfdd5ynvVWlHG4VME
+lo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX8ngvYzZAOONG
+Dx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q
+gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2k
+Ytdo+o56T9II2pPc8JIRetDccpMMc5NihWjQ9A==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            d0:1e:40:8b:00:00:02:7c:00:00:00:02:00:00:00:01
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X1, CN=DST RootCA X1/Email=ca@digsigtrust.com
+        Validity
+            Not Before: Dec  1 18:18:55 1998 GMT
+            Not After : Nov 28 18:18:55 2008 GMT
+        Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X1, CN=DST RootCA X1/Email=ca@digsigtrust.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:d2:c6:26:b6:e7:a5:3d:c1:c4:68:d5:50:6f:53:
+                    c5:6f:49:13:09:b8:af:2c:48:8d:14:6a:a3:17:5f:
+                    5a:f9:d3:2e:75:2f:d8:28:62:d1:93:2f:fc:4d:d4:
+                    ab:87:e5:08:c7:99:e7:92:3f:75:bd:eb:25:b4:15:
+                    c1:9b:19:3d:d2:44:8d:d7:74:20:6d:37:02:8f:69:
+                    93:5b:8a:c4:19:9d:f4:b2:0e:fc:16:6c:b9:b1:05:
+                    92:83:d1:85:2c:60:94:3e:45:55:a0:d9:ab:08:21:
+                    e6:60:e8:3b:74:f2:99:50:51:68:d0:03:2d:b1:80:
+                    be:a3:d8:52:b0:44:cd:43:4a:70:8e:58:85:95:e1:
+                    4e:2c:d6:2d:41:6f:d6:84:e7:c8:98:44:ca:47:db:
+                    2c:24:a5:69:26:cf:6b:b8:27:62:c3:f4:c9:7a:92:
+                    23:ed:13:67:82:ae:45:2e:45:e5:7e:72:3f:85:9d:
+                    94:62:10:e6:3c:91:a1:ad:77:00:e0:15:ec:f3:84:
+                    80:72:7a:8e:6e:60:97:c7:24:59:10:34:83:5b:e1:
+                    a5:a4:69:b6:57:35:1c:78:59:c6:d3:2f:3a:73:67:
+                    ee:94:ca:04:13:05:62:06:70:23:b3:f4:7c:ee:45:
+                    d9:64:0b:5b:49:aa:a4:43:ce:26:c4:44:12:6c:b8:
+                    dd:79
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        a2:37:b2:3f:69:fb:d7:86:79:54:49:31:95:33:2b:f3:d1:09:
+        14:49:62:60:86:a5:b0:11:e2:50:c2:1d:06:57:3e:2d:e8:33:
+        64:be:9b:aa:ad:5f:1b:4d:d4:99:95:a2:8b:9a:c9:62:72:b5:
+        69:ea:d9:58:ab:35:ed:15:a2:43:d6:b6:bc:07:79:65:64:73:
+        7d:d7:79:ca:7b:d5:5a:51:c6:e1:53:04:96:8d:38:cf:a3:17:
+        ac:39:71:6b:01:c3:8b:53:3c:63:e9:ee:79:c0:e4:be:92:32:
+        64:7a:b3:1f:97:94:62:bd:ea:b2:20:15:95:fb:97:f2:78:2f:
+        63:36:40:38:e3:46:0f:1d:dd:ac:95:ca:e7:4b:90:7b:b1:4b:
+        a9:d4:c5:eb:9a:da:aa:d5:a3:94:14:46:8d:2d:1f:f3:3a:d6:
+        93:3a:f6:3e:79:fc:e8:e6:b0:75:ed:ee:3d:c9:70:c7:5d:aa:
+        81:4b:46:25:1c:c7:6c:15:e3:95:4e:0f:aa:32:37:94:0a:17:
+        24:92:13:84:58:d2:63:6f:2b:f7:e6:5b:62:0b:13:17:b0:0d:
+        52:4c:fe:fe:6f:5c:e2:91:6e:1d:fd:a4:62:d7:68:fa:8e:7a:
+        4f:d2:08:da:93:dc:f0:92:11:7a:d0:dc:72:93:0c:73:93:62:
+        85:68:d0:f4
+
+Digital Signature Trust Co. Global CA 3
+=======================================
+MD5 Fingerprint: 93:C2:8E:11:7B:D4:F3:03:19:BD:28:75:13:4A:45:4A
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
+UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
+EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ
+BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
+ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/
+k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso
+LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o
+TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG
+SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
+JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
+RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3
+MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C
+TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5
+WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
+SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR
+xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL
+B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 913232846 (0x366ed3ce)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=Digital Signature Trust Co., OU=DSTCA E2
+        Validity
+            Not Before: Dec  9 19:17:26 1998 GMT
+            Not After : Dec  9 19:47:26 2018 GMT
+        Subject: C=US, O=Digital Signature Trust Co., OU=DSTCA E2
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:bf:93:8f:17:92:ef:33:13:18:eb:10:7f:4e:16:
+                    bf:ff:06:8f:2a:85:bc:5e:f9:24:a6:24:88:b6:03:
+                    b7:c1:c3:5f:03:5b:d1:6f:ae:7e:42:ea:66:23:b8:
+                    63:83:56:fb:28:2d:e1:38:8b:b4:ee:a8:01:e1:ce:
+                    1c:b6:88:2a:22:46:85:fb:9f:a7:70:a9:47:14:3f:
+                    ce:de:65:f0:a8:71:f7:4f:26:6c:8c:bc:c6:b5:ef:
+                    de:49:27:ff:48:2a:7d:e8:4d:03:cc:c7:b2:52:c6:
+                    17:31:13:3b:b5:4d:db:c8:c4:f6:c3:0f:24:2a:da:
+                    0c:9d:e7:91:5b:80:cd:94:9d
+                Exponent: 3 (0x3)
+        X509v3 extensions:
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+            X509v3 CRL Distribution Points: 
+                DirName:/C=US/O=Digital Signature Trust Co./OU=DSTCA E2/CN=CRL1
+
+            X509v3 Private Key Usage Period: 
+                Not Before: Dec  9 19:17:26 1998 GMT, Not After: Dec  9 19:17:26 2018 GMT
+            X509v3 Key Usage: 
+                Certificate Sign, CRL Sign
+            X509v3 Authority Key Identifier: 
+                keyid:1E:82:4D:28:65:80:3C:C9:41:6E:AC:35:2E:5A:CB:DE:EE:F8:39:5B
+
+            X509v3 Subject Key Identifier: 
+                1E:82:4D:28:65:80:3C:C9:41:6E:AC:35:2E:5A:CB:DE:EE:F8:39:5B
+            X509v3 Basic Constraints: 
+                CA:TRUE
+            1.2.840.113533.7.65.0: 
+                0
+..V4.0....
+    Signature Algorithm: sha1WithRSAEncryption
+        47:8d:83:ad:62:f2:db:b0:9e:45:22:05:b9:a2:d6:03:0e:38:
+        72:e7:9e:fc:7b:e6:93:b6:9a:a5:a2:94:c8:34:1d:91:d1:c5:
+        d7:f4:0a:25:0f:3d:78:81:9e:0f:b1:67:c4:90:4c:63:dd:5e:
+        a7:e2:ba:9f:f5:f7:4d:a5:31:7b:9c:29:2d:4c:fe:64:3e:ec:
+        b6:53:fe:ea:9b:ed:82:db:74:75:4b:07:79:6e:1e:d8:19:83:
+        73:de:f5:3e:d0:b5:de:e7:4b:68:7d:43:2e:2a:20:e1:7e:a0:
+        78:44:9e:08:f5:98:f9:c7:7f:1b:1b:d6:06:20:02:58:a1:c3:
+        a2:03
+
+Digital Signature Trust Co. Global CA 4
+=======================================
+MD5 Fingerprint: CD:3B:3D:62:5B:09:B8:09:36:87:9E:12:2F:71:64:BA
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQsw
+CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp
+dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE
+CxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0B
+CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2MTZaFw0wODExMjcy
+MjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO
+U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0
+IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx
+ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbV
+p9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWw
+BZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl
+5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi
+3sOP17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+
+QVCvbK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG
+9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ
+2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6HE3K1GjN
+I3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV6YyDfFk/xPEL
+553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q
+10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbIN
+uBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            d0:1e:40:8b:00:00:77:6d:00:00:00:01:00:00:00:04
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X2, CN=DST RootCA X2/Email=ca@digsigtrust.com
+        Validity
+            Not Before: Nov 30 22:46:16 1998 GMT
+            Not After : Nov 27 22:46:16 2008 GMT
+        Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X2, CN=DST RootCA X2/Email=ca@digsigtrust.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:dc:75:f0:8c:c0:75:96:9a:c0:62:1f:26:f7:c4:
+                    e1:9a:ea:e0:56:73:5b:99:cd:01:44:a8:08:b6:d5:
+                    a7:da:1a:04:18:39:92:4a:78:a3:81:c2:f5:77:7a:
+                    50:b4:70:ff:9a:ab:c6:c7:ca:6e:83:4f:42:98:fb:
+                    26:0b:da:dc:6d:d6:a9:99:55:52:67:e9:28:03:92:
+                    dc:e5:b0:05:9a:0f:15:f9:6b:59:72:56:f2:fa:39:
+                    fc:aa:68:ee:0f:1f:10:83:2f:fc:9d:fa:17:96:dd:
+                    82:e3:e6:45:7d:c0:4b:80:44:1f:ed:2c:e0:84:fd:
+                    91:5c:92:54:69:25:e5:62:69:dc:e5:ee:00:52:bd:
+                    33:0b:ad:75:02:85:a7:64:50:2d:c5:19:19:30:c0:
+                    26:db:c9:d3:fd:2e:99:ad:59:b5:0b:4d:d4:41:ae:
+                    85:48:43:59:dc:b7:a8:e2:a2:de:c3:8f:d7:b8:a1:
+                    62:a6:68:50:52:e4:cf:31:a7:94:85:da:9f:46:32:
+                    17:56:e5:f2:eb:66:3d:12:ff:43:db:98:ef:77:cf:
+                    cb:81:8d:34:b1:c6:50:4a:26:d1:e4:3e:41:50:af:
+                    6c:ae:22:34:2e:d5:6b:6e:83:ba:79:b8:76:65:48:
+                    da:09:29:64:63:22:b9:fb:47:76:85:8c:86:44:cb:
+                    09:db
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        b5:36:0e:5d:e1:61:28:5a:11:65:c0:3f:83:03:79:4d:be:28:
+        a6:0b:07:02:52:85:cd:f8:91:d0:10:6c:b5:6a:20:5b:1c:90:
+        d9:30:3c:c6:48:9e:8a:5e:64:f9:a1:71:77:ef:04:27:1f:07:
+        eb:e4:26:f7:73:74:c9:44:18:1a:66:d3:e0:43:af:91:3b:d1:
+        cb:2c:d8:74:54:3a:1c:4d:ca:d4:68:cd:23:7c:1d:10:9e:45:
+        e9:f6:00:6e:a6:cd:19:ff:4f:2c:29:8f:57:4d:c4:77:92:be:
+        e0:4c:09:fb:5d:44:86:66:21:a8:b9:32:a2:56:d5:e9:8c:83:
+        7c:59:3f:c4:f1:0b:e7:9d:ec:9e:bd:9c:18:0e:3e:c2:39:79:
+        28:b7:03:0d:08:cb:c6:e7:d9:01:37:50:10:ec:cc:61:16:40:
+        d4:af:31:74:7b:fc:3f:31:a7:d0:47:73:33:39:1b:cc:4e:6a:
+        d7:49:83:11:06:fe:eb:82:58:33:32:4c:f0:56:ac:1e:9c:2f:
+        56:9a:7b:c1:4a:1c:a5:fd:55:36:ce:fc:96:4d:f4:b0:f0:ec:
+        b7:6c:82:ed:2f:31:99:42:4c:a9:b2:0d:b8:15:5d:f1:df:ba:
+        c9:b5:4a:d4:64:98:b3:26:a9:30:c8:fd:a6:ec:ab:96:21:ad:
+        7f:c2:78:b6
+
+Entrust Worldwide by DST
+========================
+MD5 Fingerprint: B4:65:22:0A:7C:AD:DF:41:B7:D5:44:D5:AD:FA:9A:75
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDRzCCArCgAwIBAgIENm3FGDANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJV
+UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRswGQYDVQQL
+ExJEU1QtRW50cnVzdCBHVEkgQ0EwHhcNOTgxMjA5MDAwMjI0WhcNMTgxMjA5MDAz
+MjI0WjBQMQswCQYDVQQGEwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUg
+VHJ1c3QgQ28uMRswGQYDVQQLExJEU1QtRW50cnVzdCBHVEkgQ0EwgZ0wDQYJKoZI
+hvcNAQEBBQADgYsAMIGHAoGBALYd90uNDxPjEvUJ/gYyDq9MQfV91Ec9KgrfgwXe
+3n3mAxb2UTrLRxpKrX7E/R20vnSKeN0Lg460hBPE+/htKa6h4Q8PQ+O1XmBp+oOU
+/Hnm3Hbt0UQrjv0Su/4XdxcMie2n71F9xO04wzujevviTaBgtfL9E2XTxuw/vjWc
+PSLvAgEDo4IBLjCCASowEQYJYIZIAYb4QgEBBAQDAgAHMHIGA1UdHwRrMGkwZ6Bl
+oGOkYTBfMQswCQYDVQQGEwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUg
+VHJ1c3QgQ28uMRswGQYDVQQLExJEU1QtRW50cnVzdCBHVEkgQ0ExDTALBgNVBAMT
+BENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkwMDAyMjRagQ8yMDE4MTIwOTAwMDIy
+NFowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFJOaRMrQeFOAKUkE38evMz+ZdV+u
+MB0GA1UdDgQWBBSTmkTK0HhTgClJBN/HrzM/mXVfrjAMBgNVHRMEBTADAQH/MBkG
+CSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GBAGSJzAOn
+3AryWCDn/RegKHLNh7DNmLUkR2MzMRAQsu+KV3KuTAPgZ5+sYEOEIsGpo+Wxp94J
+1M8NeEYjW49Je/4TIpeU6nJI4SwgeJbpZkUZywllY2E/0UmYsXYQVdVjSmZLpAdr
+3nt/ueaTWxoCW4AO3Y0Y1Iqjwmjxo+AY0U5M
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 913163544 (0x366dc518)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=Digital Signature Trust Co., OU=DST-Entrust GTI CA
+        Validity
+            Not Before: Dec  9 00:02:24 1998 GMT
+            Not After : Dec  9 00:32:24 2018 GMT
+        Subject: C=US, O=Digital Signature Trust Co., OU=DST-Entrust GTI CA
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b6:1d:f7:4b:8d:0f:13:e3:12:f5:09:fe:06:32:
+                    0e:af:4c:41:f5:7d:d4:47:3d:2a:0a:df:83:05:de:
+                    de:7d:e6:03:16:f6:51:3a:cb:47:1a:4a:ad:7e:c4:
+                    fd:1d:b4:be:74:8a:78:dd:0b:83:8e:b4:84:13:c4:
+                    fb:f8:6d:29:ae:a1:e1:0f:0f:43:e3:b5:5e:60:69:
+                    fa:83:94:fc:79:e6:dc:76:ed:d1:44:2b:8e:fd:12:
+                    bb:fe:17:77:17:0c:89:ed:a7:ef:51:7d:c4:ed:38:
+                    c3:3b:a3:7a:fb:e2:4d:a0:60:b5:f2:fd:13:65:d3:
+                    c6:ec:3f:be:35:9c:3d:22:ef
+                Exponent: 3 (0x3)
+        X509v3 extensions:
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+            X509v3 CRL Distribution Points: 
+                DirName:/C=US/O=Digital Signature Trust Co./OU=DST-Entrust GTI CA/CN=CRL1
+
+            X509v3 Private Key Usage Period: 
+                Not Before: Dec  9 00:02:24 1998 GMT, Not After: Dec  9 00:02:24 2018 GMT
+            X509v3 Key Usage: 
+                Certificate Sign, CRL Sign
+            X509v3 Authority Key Identifier: 
+                keyid:93:9A:44:CA:D0:78:53:80:29:49:04:DF:C7:AF:33:3F:99:75:5F:AE
+
+            X509v3 Subject Key Identifier: 
+                93:9A:44:CA:D0:78:53:80:29:49:04:DF:C7:AF:33:3F:99:75:5F:AE
+            X509v3 Basic Constraints: 
+                CA:TRUE
+            1.2.840.113533.7.65.0: 
+                0
+..V4.0....
+    Signature Algorithm: sha1WithRSAEncryption
+        64:89:cc:03:a7:dc:0a:f2:58:20:e7:fd:17:a0:28:72:cd:87:
+        b0:cd:98:b5:24:47:63:33:31:10:10:b2:ef:8a:57:72:ae:4c:
+        03:e0:67:9f:ac:60:43:84:22:c1:a9:a3:e5:b1:a7:de:09:d4:
+        cf:0d:78:46:23:5b:8f:49:7b:fe:13:22:97:94:ea:72:48:e1:
+        2c:20:78:96:e9:66:45:19:cb:09:65:63:61:3f:d1:49:98:b1:
+        76:10:55:d5:63:4a:66:4b:a4:07:6b:de:7b:7f:b9:e6:93:5b:
+        1a:02:5b:80:0e:dd:8d:18:d4:8a:a3:c2:68:f1:a3:e0:18:d1:
+        4e:4c
+
+Entrust.net Premium 2048 Secure Server CA
+=========================================
+MD5 Fingerprint: BA:21:EA:20:D6:DD:DB:8F:C1:57:8B:40:AD:A1:FC:FC
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
+RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
+IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
+MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
+LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
+YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
+A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
+K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
+sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
+MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
+XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
+HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
+4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
+vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
+CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
+WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
+oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
+h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
+f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
+B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
+vUxFnmG6v4SBkgPR0ml8xQ==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 946059622 (0x3863b966)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
+        Validity
+            Not Before: Dec 24 17:50:51 1999 GMT
+            Not After : Dec 24 18:20:51 2019 GMT
+        Subject: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:ad:4d:4b:a9:12:86:b2:ea:a3:20:07:15:16:64:
+                    2a:2b:4b:d1:bf:0b:4a:4d:8e:ed:80:76:a5:67:b7:
+                    78:40:c0:73:42:c8:68:c0:db:53:2b:dd:5e:b8:76:
+                    98:35:93:8b:1a:9d:7c:13:3a:0e:1f:5b:b7:1e:cf:
+                    e5:24:14:1e:b1:81:a9:8d:7d:b8:cc:6b:4b:03:f1:
+                    02:0c:dc:ab:a5:40:24:00:7f:74:94:a1:9d:08:29:
+                    b3:88:0b:f5:87:77:9d:55:cd:e4:c3:7e:d7:6a:64:
+                    ab:85:14:86:95:5b:97:32:50:6f:3d:c8:ba:66:0c:
+                    e3:fc:bd:b8:49:c1:76:89:49:19:fd:c0:a8:bd:89:
+                    a3:67:2f:c6:9f:bc:71:19:60:b8:2d:e9:2c:c9:90:
+                    76:66:7b:94:e2:af:78:d6:65:53:5d:3c:d6:9c:b2:
+                    cf:29:03:f9:2f:a4:50:b2:d4:48:ce:05:32:55:8a:
+                    fd:b2:64:4c:0e:e4:98:07:75:db:7f:df:b9:08:55:
+                    60:85:30:29:f9:7b:48:a4:69:86:e3:35:3f:1e:86:
+                    5d:7a:7a:15:bd:ef:00:8e:15:22:54:17:00:90:26:
+                    93:bc:0e:49:68:91:bf:f8:47:d3:9d:95:42:c1:0e:
+                    4d:df:6f:26:cf:c3:18:21:62:66:43:70:d6:d5:c0:
+                    07:e1
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+            X509v3 Authority Key Identifier: 
+                keyid:55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70
+
+            X509v3 Subject Key Identifier: 
+                55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70
+            1.2.840.113533.7.65.0: 
+                0...V5.0:4.0....
+    Signature Algorithm: sha1WithRSAEncryption
+        59:47:ac:21:84:8a:17:c9:9c:89:53:1e:ba:80:85:1a:c6:3c:
+        4e:3e:b1:9c:b6:7c:c6:92:5d:18:64:02:e3:d3:06:08:11:61:
+        7c:63:e3:2b:9d:31:03:70:76:d2:a3:28:a0:f4:bb:9a:63:73:
+        ed:6d:e5:2a:db:ed:14:a9:2b:c6:36:11:d0:2b:eb:07:8b:a5:
+        da:9e:5c:19:9d:56:12:f5:54:29:c8:05:ed:b2:12:2a:8d:f4:
+        03:1b:ff:e7:92:10:87:b0:3a:b5:c3:9d:05:37:12:a3:c7:f4:
+        15:b9:d5:a4:39:16:9b:53:3a:23:91:f1:a8:82:a2:6a:88:68:
+        c1:79:02:22:bc:aa:a6:d6:ae:df:b0:14:5f:b8:87:d0:dd:7c:
+        7f:7b:ff:af:1c:cf:e6:db:07:ad:5e:db:85:9d:d0:2b:0d:33:
+        db:04:d1:e6:49:40:13:2b:76:fb:3e:e9:9c:89:0f:15:ce:18:
+        b0:85:78:21:4f:6b:4f:0e:fa:36:67:cd:07:f2:ff:08:d0:e2:
+        de:d9:bf:2a:af:b8:87:86:21:3c:04:ca:b7:94:68:7f:cf:3c:
+        e9:98:d7:38:ff:ec:c0:d9:50:f0:2e:4b:58:ae:46:6f:d0:2e:
+        c3:60:da:72:55:72:bd:4c:45:9e:61:ba:bf:84:81:92:03:d1:
+        d2:69:7c:c5
+
+Entrust.net Secure Personal CA
+==============================
+MD5 Fingerprint: 0C:41:2F:13:5B:A0:54:F5:96:66:2D:7E:CD:0E:03:F4
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u
+ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh
+Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
+BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
+Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU
+MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D
+bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl
+MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq
+RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G
+CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo
+6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux
+5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm
+AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC
+ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50
+cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m
+by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp
+IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg
+Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg
+KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV
+HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E
+BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE
+FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
+BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7
+pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz
+wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a
+EkP/TOYGJqibGapEPHayXOw=
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 939758062 (0x380391ee)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=US, O=Entrust.net, OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab., OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Client Certification Authority
+        Validity
+            Not Before: Oct 12 19:24:30 1999 GMT
+            Not After : Oct 12 19:54:30 2019 GMT
+        Subject: C=US, O=Entrust.net, OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab., OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Client Certification Authority
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:c8:3a:99:5e:31:17:df:ac:27:6f:90:7b:e4:19:
+                    ff:45:a3:34:c2:db:c1:a8:4f:f0:68:ea:84:fd:9f:
+                    75:79:cf:c1:8a:51:94:af:c7:57:03:47:64:9e:ad:
+                    82:1b:5a:da:7f:37:78:47:bb:37:98:12:96:ce:c6:
+                    13:7d:ef:d2:0c:30:51:a9:39:9e:55:f8:fb:b1:e7:
+                    30:de:83:b2:ba:3e:f1:d5:89:3b:3b:85:ba:aa:74:
+                    2c:fe:3f:31:6e:af:91:95:6e:06:d4:07:4d:4b:2c:
+                    56:47:18:04:52:da:0e:10:93:bf:63:90:9b:e1:df:
+                    8c:e6:02:a4:e6:4f:5e:f7:8b
+                Exponent: 3 (0x3)
+        X509v3 extensions:
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+            X509v3 CRL Distribution Points: 
+                DirName:/C=US/O=Entrust.net/OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab./OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Client Certification Authority/CN=CRL1
+                URI:http://www.entrust.net/CRL/Client1.crl
+
+            X509v3 Private Key Usage Period: 
+                Not Before: Oct 12 19:24:30 1999 GMT, Not After: Oct 12 19:24:30 2019 GMT
+            X509v3 Key Usage: 
+                Certificate Sign, CRL Sign
+            X509v3 Authority Key Identifier: 
+                keyid:C4:FB:9C:29:7B:97:CD:4C:96:FC:EE:5B:B3:CA:99:74:8B:95:EA:4C
+
+            X509v3 Subject Key Identifier: 
+                C4:FB:9C:29:7B:97:CD:4C:96:FC:EE:5B:B3:CA:99:74:8B:95:EA:4C
+            X509v3 Basic Constraints: 
+                CA:TRUE
+            1.2.840.113533.7.65.0: 
+                0
+..V4.0....
+    Signature Algorithm: md5WithRSAEncryption
+        3f:ae:8a:f1:d7:66:03:05:9e:3e:fa:ea:1c:46:bb:a4:5b:8f:
+        78:9a:12:48:99:f9:f4:35:de:0c:36:07:02:6b:10:3a:89:14:
+        81:9c:31:a6:7c:b2:41:b2:6a:e7:07:01:a1:4b:f9:9f:25:3b:
+        96:ca:99:c3:3e:a1:51:1c:f3:c3:2e:44:f7:b0:67:46:aa:92:
+        e5:3b:da:1c:19:14:38:30:d5:e2:a2:31:25:2e:f1:ec:45:38:
+        ed:f8:06:58:03:73:62:b0:10:31:8f:40:bf:64:e0:5c:3e:c5:
+        4f:1f:da:12:43:ff:4c:e6:06:26:a8:9b:19:aa:44:3c:76:b2:
+        5c:ec
+
+Entrust.net Secure Server CA
+============================
+MD5 Fingerprint: DF:F2:80:73:CC:F1:E6:61:73:FC:F5:42:E9:C5:7C:EE
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
+MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
+ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
+b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
+bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
+U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
+A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
+I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
+wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
+AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
+oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
+BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
+dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
+MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
+b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
+dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
+MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
+E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
+MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
+hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
+95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
+2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 927650371 (0x374ad243)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority
+        Validity
+            Not Before: May 25 16:09:40 1999 GMT
+            Not After : May 25 16:39:40 2019 GMT
+        Subject: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:cd:28:83:34:54:1b:89:f3:0f:af:37:91:31:ff:
+                    af:31:60:c9:a8:e8:b2:10:68:ed:9f:e7:93:36:f1:
+                    0a:64:bb:47:f5:04:17:3f:23:47:4d:c5:27:19:81:
+                    26:0c:54:72:0d:88:2d:d9:1f:9a:12:9f:bc:b3:71:
+                    d3:80:19:3f:47:66:7b:8c:35:28:d2:b9:0a:df:24:
+                    da:9c:d6:50:79:81:7a:5a:d3:37:f7:c2:4a:d8:29:
+                    92:26:64:d1:e4:98:6c:3a:00:8a:f5:34:9b:65:f8:
+                    ed:e3:10:ff:fd:b8:49:58:dc:a0:de:82:39:6b:81:
+                    b1:16:19:61:b9:54:b6:e6:43
+                Exponent: 3 (0x3)
+        X509v3 extensions:
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+            X509v3 CRL Distribution Points: 
+                DirName:/C=US/O=Entrust.net/OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Secure Server Certification Authority/CN=CRL1
+                URI:http://www.entrust.net/CRL/net1.crl
+
+            X509v3 Private Key Usage Period: 
+                Not Before: May 25 16:09:40 1999 GMT, Not After: May 25 16:09:40 2019 GMT
+            X509v3 Key Usage: 
+                Certificate Sign, CRL Sign
+            X509v3 Authority Key Identifier: 
+                keyid:F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A
+
+            X509v3 Subject Key Identifier: 
+                F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A
+            X509v3 Basic Constraints: 
+                CA:TRUE
+            1.2.840.113533.7.65.0: 
+                0
+..V4.0....
+    Signature Algorithm: sha1WithRSAEncryption
+        90:dc:30:02:fa:64:74:c2:a7:0a:a5:7c:21:8d:34:17:a8:fb:
+        47:0e:ff:25:7c:8d:13:0a:fb:e4:98:b5:ef:8c:f8:c5:10:0d:
+        f7:92:be:f1:c3:d5:d5:95:6a:04:bb:2c:ce:26:36:65:c8:31:
+        c6:e7:ee:3f:e3:57:75:84:7a:11:ef:46:4f:18:f4:d3:98:bb:
+        a8:87:32:ba:72:f6:3c:e2:3d:9f:d7:1d:d9:c3:60:43:8c:58:
+        0e:22:96:2f:62:a3:2c:1f:ba:ad:05:ef:ab:32:78:87:a0:54:
+        73:19:b5:5c:05:f9:52:3e:6d:2d:45:0b:f7:0a:93:ea:ed:06:
+        f9:b2
+
+Equifax Premium CA
+==================
+MD5 Fingerprint: A9:E9:A8:9D:0E:73:E3:B1:2F:37:0D:E8:48:3F:86:ED
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDIzCCAoygAwIBAgIENeHvHjANBgkqhkiG9w0BAQUFADBPMQswCQYDVQQGEwJV
+UzEQMA4GA1UEChMHRXF1aWZheDEuMCwGA1UECxMlRXF1aWZheCBQcmVtaXVtIENl
+cnRpZmljYXRlIEF1dGhvcml0eTAeFw05ODA4MjQyMjU0MjNaFw0xODA4MjQyMjU0
+MjNaME8xCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFcXVpZmF4MS4wLAYDVQQLEyVF
+cXVpZmF4IFByZW1pdW0gQ2VydGlmaWNhdGUgQXV0aG9yaXR5MIGfMA0GCSqGSIb3
+DQEBAQUAA4GNADCBiQKBgQDOoQaOBswIC8GGqN4g1Q0O0Q3En+pq2bPCMkdAb4qI
+pAm9OCwd5svmpPM269rrvPxkswf2Lbyqzp8ZSGhK/PWiRX4JEPWPs0lcIwY56hOL
+uAvNkR12X9k3oUT7X5DyZ7PNGJlDH3YSawLylYM4Q8L2YjTKyXhdX9LYupr/vhBg
+WwIDAQABo4IBCjCCAQYwcQYDVR0fBGowaDBmoGSgYqRgMF4xCzAJBgNVBAYTAlVT
+MRAwDgYDVQQKEwdFcXVpZmF4MS4wLAYDVQQLEyVFcXVpZmF4IFByZW1pdW0gQ2Vy
+dGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIw
+MTgwODI0MjI1NDIzWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUFe6yKFmrbuX4
+z4uB9CThrj91G5gwHQYDVR0OBBYEFBXusihZq27l+M+LgfQk4a4/dRuYMAwGA1Ud
+EwQFMAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEB
+BQUAA4GBAL0LnCepA9so3JipS9DRjqeoGlqR4Jzx9xh8LiKeNh/JqLXNRkpu+jUH
+G4YI65/iqPmdQS06rlxctl80BOv8KmCw+3TkhellOJbuFcfGd2MSvYpoH6tsfdrK
+XBPO6snrCVzFc+cSAdXZUwee4A+W8Iu0u0VIn4bFGVWgy5bFA/xI
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 903999262 (0x35e1ef1e)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=Equifax, OU=Equifax Premium Certificate Authority
+        Validity
+            Not Before: Aug 24 22:54:23 1998 GMT
+            Not After : Aug 24 22:54:23 2018 GMT
+        Subject: C=US, O=Equifax, OU=Equifax Premium Certificate Authority
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:ce:a1:06:8e:06:cc:08:0b:c1:86:a8:de:20:d5:
+                    0d:0e:d1:0d:c4:9f:ea:6a:d9:b3:c2:32:47:40:6f:
+                    8a:88:a4:09:bd:38:2c:1d:e6:cb:e6:a4:f3:36:eb:
+                    da:eb:bc:fc:64:b3:07:f6:2d:bc:aa:ce:9f:19:48:
+                    68:4a:fc:f5:a2:45:7e:09:10:f5:8f:b3:49:5c:23:
+                    06:39:ea:13:8b:b8:0b:cd:91:1d:76:5f:d9:37:a1:
+                    44:fb:5f:90:f2:67:b3:cd:18:99:43:1f:76:12:6b:
+                    02:f2:95:83:38:43:c2:f6:62:34:ca:c9:78:5d:5f:
+                    d2:d8:ba:9a:ff:be:10:60:5b
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 CRL Distribution Points: 
+                DirName:/C=US/O=Equifax/OU=Equifax Premium Certificate Authority/CN=CRL1
+
+            X509v3 Private Key Usage Period: 
+                Not After: Aug 24 22:54:23 2018 GMT
+            X509v3 Key Usage: 
+                Certificate Sign, CRL Sign
+            X509v3 Authority Key Identifier: 
+                keyid:15:EE:B2:28:59:AB:6E:E5:F8:CF:8B:81:F4:24:E1:AE:3F:75:1B:98
+
+            X509v3 Subject Key Identifier: 
+                15:EE:B2:28:59:AB:6E:E5:F8:CF:8B:81:F4:24:E1:AE:3F:75:1B:98
+            X509v3 Basic Constraints: 
+                CA:TRUE
+            1.2.840.113533.7.65.0: 
+                0...V3.0c....
+    Signature Algorithm: sha1WithRSAEncryption
+        bd:0b:9c:27:a9:03:db:28:dc:98:a9:4b:d0:d1:8e:a7:a8:1a:
+        5a:91:e0:9c:f1:f7:18:7c:2e:22:9e:36:1f:c9:a8:b5:cd:46:
+        4a:6e:fa:35:07:1b:86:08:eb:9f:e2:a8:f9:9d:41:2d:3a:ae:
+        5c:5c:b6:5f:34:04:eb:fc:2a:60:b0:fb:74:e4:85:e9:65:38:
+        96:ee:15:c7:c6:77:63:12:bd:8a:68:1f:ab:6c:7d:da:ca:5c:
+        13:ce:ea:c9:eb:09:5c:c5:73:e7:12:01:d5:d9:53:07:9e:e0:
+        0f:96:f0:8b:b4:bb:45:48:9f:86:c5:19:55:a0:cb:96:c5:03:
+        fc:48
+
+Equifax Secure CA
+=================
+MD5 Fingerprint: 67:CB:9D:C0:13:24:8A:82:9B:B2:17:1E:D1:1B:EC:D4
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
+UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
+dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
+MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
+dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
+AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
+BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
+cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
+AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
+MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
+aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
+ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
+IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
+MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
+A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
+7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
+1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 903804111 (0x35def4cf)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority
+        Validity
+            Not Before: Aug 22 16:41:51 1998 GMT
+            Not After : Aug 22 16:41:51 2018 GMT
+        Subject: C=US, O=Equifax, OU=Equifax Secure Certificate Authority
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:c1:5d:b1:58:67:08:62:ee:a0:9a:2d:1f:08:6d:
+                    91:14:68:98:0a:1e:fe:da:04:6f:13:84:62:21:c3:
+                    d1:7c:ce:9f:05:e0:b8:01:f0:4e:34:ec:e2:8a:95:
+                    04:64:ac:f1:6b:53:5f:05:b3:cb:67:80:bf:42:02:
+                    8e:fe:dd:01:09:ec:e1:00:14:4f:fc:fb:f0:0c:dd:
+                    43:ba:5b:2b:e1:1f:80:70:99:15:57:93:16:f1:0f:
+                    97:6a:b7:c2:68:23:1c:cc:4d:59:30:ac:51:1e:3b:
+                    af:2b:d6:ee:63:45:7b:c5:d9:5f:50:d2:e3:50:0f:
+                    3a:88:e7:bf:14:fd:e0:c7:b9
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 CRL Distribution Points: 
+                DirName:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority/CN=CRL1
+
+            X509v3 Private Key Usage Period: 
+                Not After: Aug 22 16:41:51 2018 GMT
+            X509v3 Key Usage: 
+                Certificate Sign, CRL Sign
+            X509v3 Authority Key Identifier: 
+                keyid:48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4
+
+            X509v3 Subject Key Identifier: 
+                48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4
+            X509v3 Basic Constraints: 
+                CA:TRUE
+            1.2.840.113533.7.65.0: 
+                0...V3.0c....
+    Signature Algorithm: sha1WithRSAEncryption
+        58:ce:29:ea:fc:f7:de:b5:ce:02:b9:17:b5:85:d1:b9:e3:e0:
+        95:cc:25:31:0d:00:a6:92:6e:7f:b6:92:63:9e:50:95:d1:9a:
+        6f:e4:11:de:63:85:6e:98:ee:a8:ff:5a:c8:d3:55:b2:66:71:
+        57:de:c0:21:eb:3d:2a:a7:23:49:01:04:86:42:7b:fc:ee:7f:
+        a2:16:52:b5:67:67:d3:40:db:3b:26:58:b2:28:77:3d:ae:14:
+        77:61:d6:fa:2a:66:27:a0:0d:fa:a7:73:5c:ea:70:f1:94:21:
+        65:44:5f:fa:fc:ef:29:68:a9:a2:87:79:ef:79:ef:4f:ac:07:
+        77:38
+
+GTE CyberTrust Global Root
+==========================
+MD5 Fingerprint: CA:3D:D3:68:F1:03:5C:D0:32:FA:B8:2B:59:E8:5A:DB
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
+VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
+bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
+b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
+UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
+cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
+b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
+iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
+r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
+04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
+GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
+3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
+lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 421 (0x1a5)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Global Root
+        Validity
+            Not Before: Aug 13 00:29:00 1998 GMT
+            Not After : Aug 13 23:59:00 2018 GMT
+        Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Global Root
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:95:0f:a0:b6:f0:50:9c:e8:7a:c7:88:cd:dd:17:
+                    0e:2e:b0:94:d0:1b:3d:0e:f6:94:c0:8a:94:c7:06:
+                    c8:90:97:c8:b8:64:1a:7a:7e:6c:3c:53:e1:37:28:
+                    73:60:7f:b2:97:53:07:9f:53:f9:6d:58:94:d2:af:
+                    8d:6d:88:67:80:e6:ed:b2:95:cf:72:31:ca:a5:1c:
+                    72:ba:5c:02:e7:64:42:e7:f9:a9:2c:d6:3a:0d:ac:
+                    8d:42:aa:24:01:39:e6:9c:3f:01:85:57:0d:58:87:
+                    45:f8:d3:85:aa:93:69:26:85:70:48:80:3f:12:15:
+                    c7:79:b4:1f:05:2f:3b:62:99
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        6d:eb:1b:09:e9:5e:d9:51:db:67:22:61:a4:2a:3c:48:77:e3:
+        a0:7c:a6:de:73:a2:14:03:85:3d:fb:ab:0e:30:c5:83:16:33:
+        81:13:08:9e:7b:34:4e:df:40:c8:74:d7:b9:7d:dc:f4:76:55:
+        7d:9b:63:54:18:e9:f0:ea:f3:5c:b1:d9:8b:42:1e:b9:c0:95:
+        4e:ba:fa:d5:e2:7c:f5:68:61:bf:8e:ec:05:97:5f:5b:b0:d7:
+        a3:85:34:c4:24:a7:0d:0f:95:93:ef:cb:94:d8:9e:1f:9d:5c:
+        85:6d:c7:aa:ae:4f:1f:22:b5:cd:95:ad:ba:a7:cc:f9:ab:0b:
+        7a:7f
+
+GTE CyberTrust Japan Root CA
+============================
+MD5 Fingerprint: DE:AB:FF:43:2A:65:37:06:9B:28:B5:7A:E8:84:D3:8E
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIICETCCAXoCAU4wDQYJKoZIhvcNAQEEBQAwUTELMAkGA1UEBhMCSlAxHzAdBgNV
+BAoTFkN5YmVyVHJ1c3QgSmFwYW4sIEluYy4xITAfBgNVBAMTGEN5YmVyVHJ1c3Qg
+SkFQQU4gUm9vdCBDQTAeFw05ODA4MDQwNzU3MDBaFw0wMzA4MDQyMzU5MDBaMFEx
+CzAJBgNVBAYTAkpQMR8wHQYDVQQKExZDeWJlclRydXN0IEphcGFuLCBJbmMuMSEw
+HwYDVQQDExhDeWJlclRydXN0IEpBUEFOIFJvb3QgQ0EwgZ8wDQYJKoZIhvcNAQEB
+BQADgY0AMIGJAoGBALet/MpHEHaJ/Wes5HMGfIFLHda1fA5Hr+ymVHWoxP1lr+fI
+sbFsNDWN97lkVygLIVredP7ceC6GRhJMfxEf3JO9X75mmIa4t+xtSdOQ2eF5AFZo
+uq1sHyw7H8ksjEOwBELqgXOmzjN1RQ2KRXIvqldV5AfDQ+J1Og+8PNCEzrrvAgMB
+AAEwDQYJKoZIhvcNAQEEBQADgYEAt6ZkowyAPBzE2O5BO+WGpJ5gXdYBMqhqZC0g
+cEC6ck5m+gdlTgOOC/1W4K07IKcy+rISHoDfHuN6GMxX2+bJNGDvdesQFtCkLnDY
+JCO4pXdzQvkHOt0BbAiTBzUmECVgKf8J5WSfabkWSfNc3SRjRpMNsFM2dbxIILsZ
+to/QIv0=
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 78 (0x4e)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Root CA
+        Validity
+            Not Before: Aug  4 07:57:00 1998 GMT
+            Not After : Aug  4 23:59:00 2003 GMT
+        Subject: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Root CA
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b7:ad:fc:ca:47:10:76:89:fd:67:ac:e4:73:06:
+                    7c:81:4b:1d:d6:b5:7c:0e:47:af:ec:a6:54:75:a8:
+                    c4:fd:65:af:e7:c8:b1:b1:6c:34:35:8d:f7:b9:64:
+                    57:28:0b:21:5a:de:74:fe:dc:78:2e:86:46:12:4c:
+                    7f:11:1f:dc:93:bd:5f:be:66:98:86:b8:b7:ec:6d:
+                    49:d3:90:d9:e1:79:00:56:68:ba:ad:6c:1f:2c:3b:
+                    1f:c9:2c:8c:43:b0:04:42:ea:81:73:a6:ce:33:75:
+                    45:0d:8a:45:72:2f:aa:57:55:e4:07:c3:43:e2:75:
+                    3a:0f:bc:3c:d0:84:ce:ba:ef
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        b7:a6:64:a3:0c:80:3c:1c:c4:d8:ee:41:3b:e5:86:a4:9e:60:
+        5d:d6:01:32:a8:6a:64:2d:20:70:40:ba:72:4e:66:fa:07:65:
+        4e:03:8e:0b:fd:56:e0:ad:3b:20:a7:32:fa:b2:12:1e:80:df:
+        1e:e3:7a:18:cc:57:db:e6:c9:34:60:ef:75:eb:10:16:d0:a4:
+        2e:70:d8:24:23:b8:a5:77:73:42:f9:07:3a:dd:01:6c:08:93:
+        07:35:26:10:25:60:29:ff:09:e5:64:9f:69:b9:16:49:f3:5c:
+        dd:24:63:46:93:0d:b0:53:36:75:bc:48:20:bb:19:b6:8f:d0:
+        22:fd
+
+GTE CyberTrust Japan Secure Server CA
+=====================================
+MD5 Fingerprint: DD:0D:0D:B4:78:4B:7D:CE:30:0A:A6:35:C6:AB:4C:88
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIICIzCCAYwCAU8wDQYJKoZIhvcNAQEEBQAwWjELMAkGA1UEBhMCSlAxHzAdBgNV
+BAoTFkN5YmVyVHJ1c3QgSmFwYW4sIEluYy4xKjAoBgNVBAMTIUN5YmVyVHJ1c3Qg
+SkFQQU4gU2VjdXJlIFNlcnZlciBDQTAeFw05ODA4MDQwODA2MzJaFw0wMzA4MDQy
+MzU5MDBaMFoxCzAJBgNVBAYTAkpQMR8wHQYDVQQKExZDeWJlclRydXN0IEphcGFu
+LCBJbmMuMSowKAYDVQQDEyFDeWJlclRydXN0IEpBUEFOIFNlY3VyZSBTZXJ2ZXIg
+Q0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKwmo6G4b2rALBL52zEFkuf9
++tSBtLjVKtWQ+vBDZfwSFcrs27lh3jNjN0+vADx/kjcbGHPlnzyI8RoTRP558sMm
+lQ8L8J4UByFsV8Jdw+JRsM2LX81fhjj4eZc57Oi/Ui6xXqqprozt7tfIty4xi7Q5
+kjt8gScHGgFEL0lzILbJAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAaB17Eu5aeSkx
+ygGsi1CpJ5ksAPw4Ghz/wtXwE/4bpzn1gBTrUfrAjXuEG1musTVRbqE+1xvsoJ7f
+4KWCluOxP9io8ct5gI738ESZfhT1I6MR42hLBTZuiOOrhqo4UwNCO9O5+eC/BenT
+X8NKp7b9t12QSfiasq1mpoIAk65g/yA=
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 79 (0x4f)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Secure Server CA
+        Validity
+            Not Before: Aug  4 08:06:32 1998 GMT
+            Not After : Aug  4 23:59:00 2003 GMT
+        Subject: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Secure Server CA
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:ac:26:a3:a1:b8:6f:6a:c0:2c:12:f9:db:31:05:
+                    92:e7:fd:fa:d4:81:b4:b8:d5:2a:d5:90:fa:f0:43:
+                    65:fc:12:15:ca:ec:db:b9:61:de:33:63:37:4f:af:
+                    00:3c:7f:92:37:1b:18:73:e5:9f:3c:88:f1:1a:13:
+                    44:fe:79:f2:c3:26:95:0f:0b:f0:9e:14:07:21:6c:
+                    57:c2:5d:c3:e2:51:b0:cd:8b:5f:cd:5f:86:38:f8:
+                    79:97:39:ec:e8:bf:52:2e:b1:5e:aa:a9:ae:8c:ed:
+                    ee:d7:c8:b7:2e:31:8b:b4:39:92:3b:7c:81:27:07:
+                    1a:01:44:2f:49:73:20:b6:c9
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        68:1d:7b:12:ee:5a:79:29:31:ca:01:ac:8b:50:a9:27:99:2c:
+        00:fc:38:1a:1c:ff:c2:d5:f0:13:fe:1b:a7:39:f5:80:14:eb:
+        51:fa:c0:8d:7b:84:1b:59:ae:b1:35:51:6e:a1:3e:d7:1b:ec:
+        a0:9e:df:e0:a5:82:96:e3:b1:3f:d8:a8:f1:cb:79:80:8e:f7:
+        f0:44:99:7e:14:f5:23:a3:11:e3:68:4b:05:36:6e:88:e3:ab:
+        86:aa:38:53:03:42:3b:d3:b9:f9:e0:bf:05:e9:d3:5f:c3:4a:
+        a7:b6:fd:b7:5d:90:49:f8:9a:b2:ad:66:a6:82:00:93:ae:60:
+        ff:20
+
+GTE CyberTrust Root 2
+=====================
+MD5 Fingerprint: BA:ED:17:57:9A:4B:FF:7C:F9:C9:1F:A2:CD:1A:D6:87
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIICUDCCAbkCAgGbMA0GCSqGSIb3DQEBBAUAMHAxCzAJBgNVBAYTAlVTMRgwFgYD
+VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
+bHV0aW9ucywgSW5jLjEeMBwGA1UEAxMVR1RFIEN5YmVyVHJ1c3QgUm9vdCAyMB4X
+DTk4MDgxMTExMzUwN1oXDTA4MDgxMTExMjIxNlowcDELMAkGA1UEBhMCVVMxGDAW
+BgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3Qg
+U29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290IDIw
+gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANksTE4vaRoj41a6886EwAnAefFE
+XzMfFZF/iogouCRFzI8YzR900bWPcUzWMfZzloSUQMWpg2Akfa9vNLdLTMIJgDtF
+BJ7EPMQndXsADKFkR7UUXYJLUTpYu0RMPdPlBjjoYVyYeLuAs5zacoJioN+cX+v5
+T3fCzGAYAGs0giWzAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAo2SRbxDt526iQkCU
+eM74FAjR+kOF60bNkhTQ7y4tNjkY2brJJ4gp6UgXb/jBqshhbS39QC11QzCXOfgU
+ZL1v72OoK0LfsloNJex7N9jOkSmCFvnoYqLhdsQCfd0li5jh9g1gjPZZkEBRRNHC
++xkkHhc5a3QhFTPWVdeCHnAsJ6g=
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 411 (0x19b)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 2
+        Validity
+            Not Before: Aug 11 11:35:07 1998 GMT
+            Not After : Aug 11 11:22:16 2008 GMT
+        Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 2
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:d9:2c:4c:4e:2f:69:1a:23:e3:56:ba:f3:ce:84:
+                    c0:09:c0:79:f1:44:5f:33:1f:15:91:7f:8a:88:28:
+                    b8:24:45:cc:8f:18:cd:1f:74:d1:b5:8f:71:4c:d6:
+                    31:f6:73:96:84:94:40:c5:a9:83:60:24:7d:af:6f:
+                    34:b7:4b:4c:c2:09:80:3b:45:04:9e:c4:3c:c4:27:
+                    75:7b:00:0c:a1:64:47:b5:14:5d:82:4b:51:3a:58:
+                    bb:44:4c:3d:d3:e5:06:38:e8:61:5c:98:78:bb:80:
+                    b3:9c:da:72:82:62:a0:df:9c:5f:eb:f9:4f:77:c2:
+                    cc:60:18:00:6b:34:82:25:b3
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        a3:64:91:6f:10:ed:e7:6e:a2:42:40:94:78:ce:f8:14:08:d1:
+        fa:43:85:eb:46:cd:92:14:d0:ef:2e:2d:36:39:18:d9:ba:c9:
+        27:88:29:e9:48:17:6f:f8:c1:aa:c8:61:6d:2d:fd:40:2d:75:
+        43:30:97:39:f8:14:64:bd:6f:ef:63:a8:2b:42:df:b2:5a:0d:
+        25:ec:7b:37:d8:ce:91:29:82:16:f9:e8:62:a2:e1:76:c4:02:
+        7d:dd:25:8b:98:e1:f6:0d:60:8c:f6:59:90:40:51:44:d1:c2:
+        fb:19:24:1e:17:39:6b:74:21:15:33:d6:55:d7:82:1e:70:2c:
+        27:a8
+
+GTE CyberTrust Root 3
+=====================
+MD5 Fingerprint: DB:81:96:57:AE:64:61:EF:77:A7:83:C4:51:24:3C:87
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIICUDCCAbkCAgGXMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNVBAYTAlVTMRgwFgYD
+VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
+bHV0aW9ucywgSW5jLjEeMBwGA1UEAxMVR1RFIEN5YmVyVHJ1c3QgUm9vdCAzMB4X
+DTk4MDgxMDE5NTkwOFoXDTA4MDgxMDE5MzYzOVowcDELMAkGA1UEBhMCVVMxGDAW
+BgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3Qg
+U29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290IDMw
+gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHzsSsLztwU2TSXYlASVmOETFP6
+wIXP+sHdD955E39T+6oOYN3iYr/G7k6ZNKpoQzWZ+KP982O9AVRqnrI6lix7eCjG
+WrWNGhUY/eOMLqJQCVtx1g21GB8ZjgQpk5N4q18U53NC8gMMV6IbUDsLu1ngoDoD
+7icbWky5sAjKuRqJAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAheutlCAG6bKiazvy
+ZuvjS7gSJgXl9JGo3IfcmPSUwfRhvdWcbFFzlV7QvdfmRdw8z0aE1ee57ORnY24A
+KHdxXUoF6bl8hszCRLveKUja6t29F58dUQGo6BResVf3/9qPzpX+Le0yEnf/fGph
+la4xcgYI8PnzDY7i76hTXZEDg94=
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 407 (0x197)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 3
+        Validity
+            Not Before: Aug 10 19:59:08 1998 GMT
+            Not After : Aug 10 19:36:39 2008 GMT
+        Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 3
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:e1:f3:b1:2b:0b:ce:dc:14:d9:34:97:62:50:12:
+                    56:63:84:4c:53:fa:c0:85:cf:fa:c1:dd:0f:de:79:
+                    13:7f:53:fb:aa:0e:60:dd:e2:62:bf:c6:ee:4e:99:
+                    34:aa:68:43:35:99:f8:a3:fd:f3:63:bd:01:54:6a:
+                    9e:b2:3a:96:2c:7b:78:28:c6:5a:b5:8d:1a:15:18:
+                    fd:e3:8c:2e:a2:50:09:5b:71:d6:0d:b5:18:1f:19:
+                    8e:04:29:93:93:78:ab:5f:14:e7:73:42:f2:03:0c:
+                    57:a2:1b:50:3b:0b:bb:59:e0:a0:3a:03:ee:27:1b:
+                    5a:4c:b9:b0:08:ca:b9:1a:89
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        85:eb:ad:94:20:06:e9:b2:a2:6b:3b:f2:66:eb:e3:4b:b8:12:
+        26:05:e5:f4:91:a8:dc:87:dc:98:f4:94:c1:f4:61:bd:d5:9c:
+        6c:51:73:95:5e:d0:bd:d7:e6:45:dc:3c:cf:46:84:d5:e7:b9:
+        ec:e4:67:63:6e:00:28:77:71:5d:4a:05:e9:b9:7c:86:cc:c2:
+        44:bb:de:29:48:da:ea:dd:bd:17:9f:1d:51:01:a8:e8:14:5e:
+        b1:57:f7:ff:da:8f:ce:95:fe:2d:ed:32:12:77:ff:7c:6a:61:
+        95:ae:31:72:06:08:f0:f9:f3:0d:8e:e2:ef:a8:53:5d:91:03:
+        83:de
+
+GTE CyberTrust Root 4
+=====================
+MD5 Fingerprint: 33:43:02:B1:B9:E0:73:B1:B1:20:CA:CB:C7:84:03:50
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDVTCCAj0CAgGoMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNVBAYTAlVTMRgwFgYD
+VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
+bHV0aW9ucywgSW5jLjEeMBwGA1UEAxMVR1RFIEN5YmVyVHJ1c3QgUm9vdCA0MB4X
+DTk4MDgxMzEzNTEwMFoXDTEzMDgxMzIzNTkwMFowcDELMAkGA1UEBhMCVVMxGDAW
+BgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3Qg
+U29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290IDQw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6nSJuf9pmPDlCsaMqb9P3
+vK6sMVrXEZBHuZ0ZLvnzGyKgw+GnusT8XgqUS5haSybkH/Tc8/6OiNxsLXx3hyZQ
+wF5OqCih6hdpT03GAQ7amg0GViYVtqRdejWvje14Uob5OKuzAdPaBZaxtlCrwKGu
+F1P6QzkgcWUj223Etu2YRYPX0vbiqWv7+XXM78WrcZY16N+OkZuoEHUft84Tjmuz
+lneXGpEvxyxpmfAPKmgAmHZEG4wo0uuO9IO0f6QlXmw72cZo1WG41F4xB7VbkDVS
+V3sXIO0tuB6OiDk+Usvf8FyxZbulErSQY79xnTLB2r9QSpW+BjrEK+vNmHZETQvl
+AgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAEOvHIfJSbpliTRJPOoHO0eiedSgO5Bs
+3n+oVMPoTEAyvMjsHOXZrEC6/Iw/wnOc9GTq36ntTlvIAWDuOW1DJ/N/qgjS/k5v
+FDJNfeQ0gKU1xNZGULQ7oC1lH09lfjQoLcCndn0xyQ0zFvYgGSARULsDzHBtlrfv
+TKfaNhXPu03UltyITWyY7blz/ihXoO1k+AqBKXP29pcyhzm0ge/ZTRoHNPe6QjXe
+V9xc1vfF6wonDIGmwtBoTv2SW0iD9haKjzZb7TFsP0F6cfeSPzGkCkBM84biYcE8
+SYEtpbjvupcPvCsdm4ny0o4eTYbywqv2LZnAGyoNobZP+SxYTT19Nwo=
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 424 (0x1a8)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 4
+        Validity
+            Not Before: Aug 13 13:51:00 1998 GMT
+            Not After : Aug 13 23:59:00 2013 GMT
+        Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 4
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:ba:9d:22:6e:7f:da:66:3c:39:42:b1:a3:2a:6f:
+                    d3:f7:bc:ae:ac:31:5a:d7:11:90:47:b9:9d:19:2e:
+                    f9:f3:1b:22:a0:c3:e1:a7:ba:c4:fc:5e:0a:94:4b:
+                    98:5a:4b:26:e4:1f:f4:dc:f3:fe:8e:88:dc:6c:2d:
+                    7c:77:87:26:50:c0:5e:4e:a8:28:a1:ea:17:69:4f:
+                    4d:c6:01:0e:da:9a:0d:06:56:26:15:b6:a4:5d:7a:
+                    35:af:8d:ed:78:52:86:f9:38:ab:b3:01:d3:da:05:
+                    96:b1:b6:50:ab:c0:a1:ae:17:53:fa:43:39:20:71:
+                    65:23:db:6d:c4:b6:ed:98:45:83:d7:d2:f6:e2:a9:
+                    6b:fb:f9:75:cc:ef:c5:ab:71:96:35:e8:df:8e:91:
+                    9b:a8:10:75:1f:b7:ce:13:8e:6b:b3:96:77:97:1a:
+                    91:2f:c7:2c:69:99:f0:0f:2a:68:00:98:76:44:1b:
+                    8c:28:d2:eb:8e:f4:83:b4:7f:a4:25:5e:6c:3b:d9:
+                    c6:68:d5:61:b8:d4:5e:31:07:b5:5b:90:35:52:57:
+                    7b:17:20:ed:2d:b8:1e:8e:88:39:3e:52:cb:df:f0:
+                    5c:b1:65:bb:a5:12:b4:90:63:bf:71:9d:32:c1:da:
+                    bf:50:4a:95:be:06:3a:c4:2b:eb:cd:98:76:44:4d:
+                    0b:e5
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        43:af:1c:87:c9:49:ba:65:89:34:49:3c:ea:07:3b:47:a2:79:
+        d4:a0:3b:90:6c:de:7f:a8:54:c3:e8:4c:40:32:bc:c8:ec:1c:
+        e5:d9:ac:40:ba:fc:8c:3f:c2:73:9c:f4:64:ea:df:a9:ed:4e:
+        5b:c8:01:60:ee:39:6d:43:27:f3:7f:aa:08:d2:fe:4e:6f:14:
+        32:4d:7d:e4:34:80:a5:35:c4:d6:46:50:b4:3b:a0:2d:65:1f:
+        4f:65:7e:34:28:2d:c0:a7:76:7d:31:c9:0d:33:16:f6:20:19:
+        20:11:50:bb:03:cc:70:6d:96:b7:ef:4c:a7:da:36:15:cf:bb:
+        4d:d4:96:dc:88:4d:6c:98:ed:b9:73:fe:28:57:a0:ed:64:f8:
+        0a:81:29:73:f6:f6:97:32:87:39:b4:81:ef:d9:4d:1a:07:34:
+        f7:ba:42:35:de:57:dc:5c:d6:f7:c5:eb:0a:27:0c:81:a6:c2:
+        d0:68:4e:fd:92:5b:48:83:f6:16:8a:8f:36:5b:ed:31:6c:3f:
+        41:7a:71:f7:92:3f:31:a4:0a:40:4c:f3:86:e2:61:c1:3c:49:
+        81:2d:a5:b8:ef:ba:97:0f:bc:2b:1d:9b:89:f2:d2:8e:1e:4d:
+        86:f2:c2:ab:f6:2d:99:c0:1b:2a:0d:a1:b6:4f:f9:2c:58:4d:
+        3d:7d:37:0a
+
+GTE CyberTrust Root 5
+=====================
+MD5 Fingerprint: 7D:6C:86:E4:FC:4D:D1:0B:00:BA:22:BB:4E:7C:6A:8E
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDtjCCAp6gAwIBAgICAbYwDQYJKoZIhvcNAQEFBQAwcDELMAkGA1UEBhMCVVMx
+GDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1
+c3QgU29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290
+IDUwHhcNOTgwODE0MTQ1MDAwWhcNMTMwODE0MjM1OTAwWjBwMQswCQYDVQQGEwJV
+UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
+cnVzdCBTb2x1dGlvbnMsIEluYy4xHjAcBgNVBAMTFUdURSBDeWJlclRydXN0IFJv
+b3QgNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALwSbj+KfHqXAewe
+uzlaAvR4RKJIG457SVJ6uHtHs6+Um2+7lvoramVcuByUc76/iQoigO5X/IwFu3Cf
+lzkE2qOHXKjlyq/AM5rVN1xLrOSA0KYjYPv9ci6UncfOwgQy73hgXe2thw9FZR48
+mgqavl0dmezn8tHGehfZrZtUln/EfGC/haoVNR1A2hG87FQhKC0joajwzy3N3fx+
+D17hZQdWywe00lboXjHMGGPEhtIthc+Tkqtt/mg5+95zvYb45EZ66p8My/QZ/mO8
+0Sx7iDM29uThnAxTgWAc2i6rlqkWiBNQmbK9Vd8VMH7o5Zj7cH5stQf8/Ea30O03
+ln4y/iECAwEAAaNaMFgwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMC
+AQYwFwYDVR0gBBAwDjAMBgoqhkiG+GMBAgEDMBkGA1UdDgQSBBB2CkkhOEyf3vjE
+ScdxcZGdMA0GCSqGSIb3DQEBBQUAA4IBAQBBOtQYW9q43iEc4Y4J5fFoNP/elvQH
+9ac886xKsZv6kvqb7eYyIapKdsXcTzjl39WG5NXIdn2Y17HNj021kSNsi4rr6nzv
+FJTExvAfSi0ycWMrY5EmAgm2gB3t4sy4f9uHY8jh0GwmsTUdQGYQG82VVBgzYewT
+T9oT95mvPtDPjqZyorPDBZrJJ32SzH5SjbOrcG2eiZ9N6xp1wpiq1QIW1wyKvyXk
+6y28mOlYOBl8uTf+2+KZCHMGx5eDan0QAS8yuRcFSmXmL86+XlOmgumaUwqEdC2D
+ysiUFnZflGEo8IWnObvXi9moshMdVAk0JH0ggX1mfqKQdFwQxr3sqxvC
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 438 (0x1b6)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 5
+        Validity
+            Not Before: Aug 14 14:50:00 1998 GMT
+            Not After : Aug 14 23:59:00 2013 GMT
+        Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 5
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:bc:12:6e:3f:8a:7c:7a:97:01:ec:1e:bb:39:5a:
+                    02:f4:78:44:a2:48:1b:8e:7b:49:52:7a:b8:7b:47:
+                    b3:af:94:9b:6f:bb:96:fa:2b:6a:65:5c:b8:1c:94:
+                    73:be:bf:89:0a:22:80:ee:57:fc:8c:05:bb:70:9f:
+                    97:39:04:da:a3:87:5c:a8:e5:ca:af:c0:33:9a:d5:
+                    37:5c:4b:ac:e4:80:d0:a6:23:60:fb:fd:72:2e:94:
+                    9d:c7:ce:c2:04:32:ef:78:60:5d:ed:ad:87:0f:45:
+                    65:1e:3c:9a:0a:9a:be:5d:1d:99:ec:e7:f2:d1:c6:
+                    7a:17:d9:ad:9b:54:96:7f:c4:7c:60:bf:85:aa:15:
+                    35:1d:40:da:11:bc:ec:54:21:28:2d:23:a1:a8:f0:
+                    cf:2d:cd:dd:fc:7e:0f:5e:e1:65:07:56:cb:07:b4:
+                    d2:56:e8:5e:31:cc:18:63:c4:86:d2:2d:85:cf:93:
+                    92:ab:6d:fe:68:39:fb:de:73:bd:86:f8:e4:46:7a:
+                    ea:9f:0c:cb:f4:19:fe:63:bc:d1:2c:7b:88:33:36:
+                    f6:e4:e1:9c:0c:53:81:60:1c:da:2e:ab:96:a9:16:
+                    88:13:50:99:b2:bd:55:df:15:30:7e:e8:e5:98:fb:
+                    70:7e:6c:b5:07:fc:fc:46:b7:d0:ed:37:96:7e:32:
+                    fe:21
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:TRUE, pathlen:5
+            X509v3 Key Usage: critical
+                Certificate Sign, CRL Sign
+            X509v3 Certificate Policies: 
+                Policy: 1.2.840.113763.1.2.1.3
+
+            X509v3 Subject Key Identifier: 
+                76:0A:49:21:38:4C:9F:DE:F8:C4:49:C7:71:71:91:9D
+    Signature Algorithm: sha1WithRSAEncryption
+        41:3a:d4:18:5b:da:b8:de:21:1c:e1:8e:09:e5:f1:68:34:ff:
+        de:96:f4:07:f5:a7:3c:f3:ac:4a:b1:9b:fa:92:fa:9b:ed:e6:
+        32:21:aa:4a:76:c5:dc:4f:38:e5:df:d5:86:e4:d5:c8:76:7d:
+        98:d7:b1:cd:8f:4d:b5:91:23:6c:8b:8a:eb:ea:7c:ef:14:94:
+        c4:c6:f0:1f:4a:2d:32:71:63:2b:63:91:26:02:09:b6:80:1d:
+        ed:e2:cc:b8:7f:db:87:63:c8:e1:d0:6c:26:b1:35:1d:40:66:
+        10:1b:cd:95:54:18:33:61:ec:13:4f:da:13:f7:99:af:3e:d0:
+        cf:8e:a6:72:a2:b3:c3:05:9a:c9:27:7d:92:cc:7e:52:8d:b3:
+        ab:70:6d:9e:89:9f:4d:eb:1a:75:c2:98:aa:d5:02:16:d7:0c:
+        8a:bf:25:e4:eb:2d:bc:98:e9:58:38:19:7c:b9:37:fe:db:e2:
+        99:08:73:06:c7:97:83:6a:7d:10:01:2f:32:b9:17:05:4a:65:
+        e6:2f:ce:be:5e:53:a6:82:e9:9a:53:0a:84:74:2d:83:ca:c8:
+        94:16:76:5f:94:61:28:f0:85:a7:39:bb:d7:8b:d9:a8:b2:13:
+        1d:54:09:34:24:7d:20:81:7d:66:7e:a2:90:74:5c:10:c6:bd:
+        ec:ab:1b:c2
+
+GTE CyberTrust Root CA
+======================
+MD5 Fingerprint: C4:D7:F0:B2:A3:C5:7D:61:67:F0:04:CD:43:D3:BA:58
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgwFgYD
+VQQKEw9HVEUgQ29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRydXN0IFJv
+b3QwHhcNOTYwMjIzMjMwMTAwWhcNMDYwMjIzMjM1OTAwWjBFMQswCQYDVQQGEwJV
+UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMRwwGgYDVQQDExNHVEUgQ3liZXJU
+cnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC45k+625h8cXyv
+RLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8KDPufpz+iCWaEVh43KRuH6X4M
+ypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPwKfWVWgkWYXcKIiXUT0Wqx73llt/5
+1KiOQswkwB6RJ0q1bQaAYznEol44AwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABKz
+dcZfHeFhVYAA1IFLezEPI2PnPfMD+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWl
+IjeaY8JIILTbcuPI9tl8vrGvU9oUtCG41tWW4/5ODFlitppK+ULdjG+BqXH/9Apy
+bW1EDp3zdHSo1TRJ6V6e6bR64eVaH4QwnNOfpSXY
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 419 (0x1a3)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=US, O=GTE Corporation, CN=GTE CyberTrust Root
+        Validity
+            Not Before: Feb 23 23:01:00 1996 GMT
+            Not After : Feb 23 23:59:00 2006 GMT
+        Subject: C=US, O=GTE Corporation, CN=GTE CyberTrust Root
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b8:e6:4f:ba:db:98:7c:71:7c:af:44:b7:d3:0f:
+                    46:d9:64:e5:93:c1:42:8e:c7:ba:49:8d:35:2d:7a:
+                    e7:8b:bd:e5:05:31:59:c6:b1:2f:0a:0c:fb:9f:a7:
+                    3f:a2:09:66:84:56:1e:37:29:1b:87:e9:7e:0c:ca:
+                    9a:9f:a5:7f:f5:15:94:a3:d5:a2:46:82:d8:68:4c:
+                    d1:37:15:06:68:af:bd:f8:b0:b3:f0:29:f5:95:5a:
+                    09:16:61:77:0a:22:25:d4:4f:45:aa:c7:bd:e5:96:
+                    df:f9:d4:a8:8e:42:cc:24:c0:1e:91:27:4a:b5:6d:
+                    06:80:63:39:c4:a2:5e:38:03
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md5WithRSAEncryption
+        12:b3:75:c6:5f:1d:e1:61:55:80:00:d4:81:4b:7b:31:0f:23:
+        63:e7:3d:f3:03:f9:f4:36:a8:bb:d9:e3:a5:97:4d:ea:2b:29:
+        e0:d6:6a:73:81:e6:c0:89:a3:d3:f1:e0:a5:a5:22:37:9a:63:
+        c2:48:20:b4:db:72:e3:c8:f6:d9:7c:be:b1:af:53:da:14:b4:
+        21:b8:d6:d5:96:e3:fe:4e:0c:59:62:b6:9a:4a:f9:42:dd:8c:
+        6f:81:a9:71:ff:f4:0a:72:6d:6d:44:0e:9d:f3:74:74:a8:d5:
+        34:49:e9:5e:9e:e9:b4:7a:e1:e5:5a:1f:84:30:9c:d3:9f:a5:
+        25:d8
+
+GlobalSign Partners CA
+======================
+MD5 Fingerprint: 3C:75:CD:4C:BD:A9:D0:8A:79:4F:50:16:37:84:F4:2B
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDnjCCAoagAwIBAgILAgAAAAAA1ni50a8wDQYJKoZIhvcNAQEEBQAwVzELMAkG
+A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
+b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw
+MDBaFw0wOTAxMjgxMjAwMDBaMF8xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
+YWxTaWduIG52LXNhMRQwEgYDVQQLEwtQYXJ0bmVycyBDQTEfMB0GA1UEAxMWR2xv
+YmFsU2lnbiBQYXJ0bmVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBANIs+DKsShJ6N8gpkaWujG4eDsA0M4jlM3EWHHiEaMMYNFAuFj6xlIJPsZqf
+APjGETXGaXuYAq0ABohs50wzKACIJ0Yfh7NxdWO8MruI3mYYDlAGk7T2vBQ3MD0i
+3z3/dX7ZChrFn7P80KyzCHqJ0wHoAFznSgs9TXsmordiBovaRt2TFz8/WwJLC7aI
+IBGSAK27xy7U40Wu9YlafI2krYVkMsAnjMbyioCShiRWWY10aKKDQrOePVBBhm8g
+bvb9ztMZ4zLMj+2aXm0fKPVSrG4YXvg90ZLlumwBiEsK8i3eZTMFQqBMqjF2vv2/
+gXj5cRxGXi0VlS0wWY5MQdFiqz0CAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgAGMB0G
+A1UdDgQWBBRDJI1wFQhiVZxPDEAXXYZeD6JM+zAfBgNVHSMEGDAWgBRge2YaRQ2X
+yolQL30EzTSo//z9SzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IB
+AQBm7bSIaRGZgiGDrKFti5uErQ8tyB6Mynt+rarUjt4H1p5Fx6W4nAc5YCVVGsBP
+GeXPFylJiRg1ZuXrKEBOV8mvs+S4IAWjO5VQkUmUKX0s5YhBpUWIXp2CJ/fS71u1
+T5++/jVlLFVkn+FR2iJhd7pYTo/GeVlZbjCAok+QbiELrdBoOZAQm+0iZW8eETjm
+f4zS8zltR9Uh6Op1OkHRrfYWnV0LIb3zH2MGJR3BHzVxLOsgGdXBsOw95W/tAgc/
+E3tmktZEwZj3X1CLelvCb22w0fjldKBAN6MlD+Q9ymQxk5BcMHu5OTGaXkzNuUFP
+UOQ9OK7IZtnHO11RR6ybq/Kt
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            02:00:00:00:00:00:d6:78:b9:d1:af
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
+        Validity
+            Not Before: Jan 28 12:00:00 1999 GMT
+            Not After : Jan 28 12:00:00 2009 GMT
+        Subject: C=BE, O=GlobalSign nv-sa, OU=Partners CA, CN=GlobalSign Partners CA
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:d2:2c:f8:32:ac:4a:12:7a:37:c8:29:91:a5:ae:
+                    8c:6e:1e:0e:c0:34:33:88:e5:33:71:16:1c:78:84:
+                    68:c3:18:34:50:2e:16:3e:b1:94:82:4f:b1:9a:9f:
+                    00:f8:c6:11:35:c6:69:7b:98:02:ad:00:06:88:6c:
+                    e7:4c:33:28:00:88:27:46:1f:87:b3:71:75:63:bc:
+                    32:bb:88:de:66:18:0e:50:06:93:b4:f6:bc:14:37:
+                    30:3d:22:df:3d:ff:75:7e:d9:0a:1a:c5:9f:b3:fc:
+                    d0:ac:b3:08:7a:89:d3:01:e8:00:5c:e7:4a:0b:3d:
+                    4d:7b:26:a2:b7:62:06:8b:da:46:dd:93:17:3f:3f:
+                    5b:02:4b:0b:b6:88:20:11:92:00:ad:bb:c7:2e:d4:
+                    e3:45:ae:f5:89:5a:7c:8d:a4:ad:85:64:32:c0:27:
+                    8c:c6:f2:8a:80:92:86:24:56:59:8d:74:68:a2:83:
+                    42:b3:9e:3d:50:41:86:6f:20:6e:f6:fd:ce:d3:19:
+                    e3:32:cc:8f:ed:9a:5e:6d:1f:28:f5:52:ac:6e:18:
+                    5e:f8:3d:d1:92:e5:ba:6c:01:88:4b:0a:f2:2d:de:
+                    65:33:05:42:a0:4c:aa:31:76:be:fd:bf:81:78:f9:
+                    71:1c:46:5e:2d:15:95:2d:30:59:8e:4c:41:d1:62:
+                    ab:3d
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Key Usage: critical
+                Certificate Sign, CRL Sign
+            X509v3 Subject Key Identifier: 
+                43:24:8D:70:15:08:62:55:9C:4F:0C:40:17:5D:86:5E:0F:A2:4C:FB
+            X509v3 Authority Key Identifier: 
+                keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B
+
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+    Signature Algorithm: md5WithRSAEncryption
+        66:ed:b4:88:69:11:99:82:21:83:ac:a1:6d:8b:9b:84:ad:0f:
+        2d:c8:1e:8c:ca:7b:7e:ad:aa:d4:8e:de:07:d6:9e:45:c7:a5:
+        b8:9c:07:39:60:25:55:1a:c0:4f:19:e5:cf:17:29:49:89:18:
+        35:66:e5:eb:28:40:4e:57:c9:af:b3:e4:b8:20:05:a3:3b:95:
+        50:91:49:94:29:7d:2c:e5:88:41:a5:45:88:5e:9d:82:27:f7:
+        d2:ef:5b:b5:4f:9f:be:fe:35:65:2c:55:64:9f:e1:51:da:22:
+        61:77:ba:58:4e:8f:c6:79:59:59:6e:30:80:a2:4f:90:6e:21:
+        0b:ad:d0:68:39:90:10:9b:ed:22:65:6f:1e:11:38:e6:7f:8c:
+        d2:f3:39:6d:47:d5:21:e8:ea:75:3a:41:d1:ad:f6:16:9d:5d:
+        0b:21:bd:f3:1f:63:06:25:1d:c1:1f:35:71:2c:eb:20:19:d5:
+        c1:b0:ec:3d:e5:6f:ed:02:07:3f:13:7b:66:92:d6:44:c1:98:
+        f7:5f:50:8b:7a:5b:c2:6f:6d:b0:d1:f8:e5:74:a0:40:37:a3:
+        25:0f:e4:3d:ca:64:31:93:90:5c:30:7b:b9:39:31:9a:5e:4c:
+        cd:b9:41:4f:50:e4:3d:38:ae:c8:66:d9:c7:3b:5d:51:47:ac:
+        9b:ab:f2:ad
+
+GlobalSign Primary Class 1 CA
+=============================
+MD5 Fingerprint: 5C:AC:59:01:A4:86:53:CB:10:66:B5:D6:D6:71:FF:01
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDrDCCApSgAwIBAgILAgAAAAAA1ni4N88wDQYJKoZIhvcNAQEEBQAwVzELMAkG
+A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
+b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MTUxMjAw
+MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
+YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDEgQ0ExJjAkBgNV
+BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAxIENBMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAvSA1R9Eo1gijEjkjRw29cCFSDlcxlaY0V2vsfkN5
+wwZSSM28taGZvdgfMrzP125ybS53IpCCTkuPmgwBQprZcFm2nR/mY9EMrR1O+IWB
++a7vn6ZSYUR5GnVF4GFWRW1CjD1yy6akErea9dZg0GBQs46mpuy09BLNf6jO77Ph
+hTD+csTm53eznlhB1lGDiAfGtmlPNt7RC0g/vdafIXRkbycGPkv9Dqabv6RIV4yQ
+7okYCwKBGL5n/lNgiCe6o3M0S1pWtN5zBe2Yll3sSudA/EsJYuvQ4zFPhdF6q1ln
+K/uID+uqg701/WEn7GYOQlf3acIM7/xqwm5J2o9BOK5IqQIDAQABo2MwYTAOBgNV
+HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFPzgZvZaNZnrQB7SuB5DvJiOH4rDMB8GA1Ud
+IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
+KoZIhvcNAQEEBQADggEBAJujCETO8pCdcfMyswVqterPKZjeVT6gFn0GekTWr9L6
+E1iM+BzHqx20G+9paJhcCDmP4Pf7SMwh57gz2wWqNCRsSuXpe2Deg7MfCr5BdfzM
+MEi3wSYdBDOqtnjtKsu6VpcybvcxlS5G8hTuJ8f3Yom5XFrTOIpk9Te08bM0ctXV
+IT1L13iT1zFmNR6j2EdJbxyt4YB/+JgkbHOsDsIadwKjJge3x2tdvILVKkgdY89Q
+Mqb7HBhHFQpbDFw4JJoEmKgISF98NIdjqy2NTAB3lBt2uvUWGKMVry+U9ikAdsEV
+F9PpN0121MtLKVkkrNpKoOpj3l9Usfrz0UXLxWS0cyE=
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            02:00:00:00:00:00:d6:78:b8:37:cf
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
+        Validity
+            Not Before: Sep 15 12:00:00 1998 GMT
+            Not After : Jan 28 12:00:00 2009 GMT
+        Subject: C=BE, O=GlobalSign nv-sa, OU=Primary Class 1 CA, CN=GlobalSign Primary Class 1 CA
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:bd:20:35:47:d1:28:d6:08:a3:12:39:23:47:0d:
+                    bd:70:21:52:0e:57:31:95:a6:34:57:6b:ec:7e:43:
+                    79:c3:06:52:48:cd:bc:b5:a1:99:bd:d8:1f:32:bc:
+                    cf:d7:6e:72:6d:2e:77:22:90:82:4e:4b:8f:9a:0c:
+                    01:42:9a:d9:70:59:b6:9d:1f:e6:63:d1:0c:ad:1d:
+                    4e:f8:85:81:f9:ae:ef:9f:a6:52:61:44:79:1a:75:
+                    45:e0:61:56:45:6d:42:8c:3d:72:cb:a6:a4:12:b7:
+                    9a:f5:d6:60:d0:60:50:b3:8e:a6:a6:ec:b4:f4:12:
+                    cd:7f:a8:ce:ef:b3:e1:85:30:fe:72:c4:e6:e7:77:
+                    b3:9e:58:41:d6:51:83:88:07:c6:b6:69:4f:36:de:
+                    d1:0b:48:3f:bd:d6:9f:21:74:64:6f:27:06:3e:4b:
+                    fd:0e:a6:9b:bf:a4:48:57:8c:90:ee:89:18:0b:02:
+                    81:18:be:67:fe:53:60:88:27:ba:a3:73:34:4b:5a:
+                    56:b4:de:73:05:ed:98:96:5d:ec:4a:e7:40:fc:4b:
+                    09:62:eb:d0:e3:31:4f:85:d1:7a:ab:59:67:2b:fb:
+                    88:0f:eb:aa:83:bd:35:fd:61:27:ec:66:0e:42:57:
+                    f7:69:c2:0c:ef:fc:6a:c2:6e:49:da:8f:41:38:ae:
+                    48:a9
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Key Usage: critical
+                Certificate Sign, CRL Sign
+            X509v3 Subject Key Identifier: 
+                FC:E0:66:F6:5A:35:99:EB:40:1E:D2:B8:1E:43:BC:98:8E:1F:8A:C3
+            X509v3 Authority Key Identifier: 
+                keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B
+
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+    Signature Algorithm: md5WithRSAEncryption
+        9b:a3:08:44:ce:f2:90:9d:71:f3:32:b3:05:6a:b5:ea:cf:29:
+        98:de:55:3e:a0:16:7d:06:7a:44:d6:af:d2:fa:13:58:8c:f8:
+        1c:c7:ab:1d:b4:1b:ef:69:68:98:5c:08:39:8f:e0:f7:fb:48:
+        cc:21:e7:b8:33:db:05:aa:34:24:6c:4a:e5:e9:7b:60:de:83:
+        b3:1f:0a:be:41:75:fc:cc:30:48:b7:c1:26:1d:04:33:aa:b6:
+        78:ed:2a:cb:ba:56:97:32:6e:f7:31:95:2e:46:f2:14:ee:27:
+        c7:f7:62:89:b9:5c:5a:d3:38:8a:64:f5:37:b4:f1:b3:34:72:
+        d5:d5:21:3d:4b:d7:78:93:d7:31:66:35:1e:a3:d8:47:49:6f:
+        1c:ad:e1:80:7f:f8:98:24:6c:73:ac:0e:c2:1a:77:02:a3:26:
+        07:b7:c7:6b:5d:bc:82:d5:2a:48:1d:63:cf:50:32:a6:fb:1c:
+        18:47:15:0a:5b:0c:5c:38:24:9a:04:98:a8:08:48:5f:7c:34:
+        87:63:ab:2d:8d:4c:00:77:94:1b:76:ba:f5:16:18:a3:15:af:
+        2f:94:f6:29:00:76:c1:15:17:d3:e9:37:4d:76:d4:cb:4b:29:
+        59:24:ac:da:4a:a0:ea:63:de:5f:54:b1:fa:f3:d1:45:cb:c5:
+        64:b4:73:21
+
+GlobalSign Primary Class 2 CA
+=============================
+MD5 Fingerprint: A9:A9:42:59:7E:BE:5A:94:E4:2C:C6:8B:1C:2A:44:B6
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDrDCCApSgAwIBAgILAgAAAAAA1ni4jY0wDQYJKoZIhvcNAQEEBQAwVzELMAkG
+A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
+b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw
+MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
+YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDIgQ0ExJjAkBgNV
+BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAyIENBMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAkoz+7/RFjhdBbvzYvyFvqwadUsEsAJ0/joW4f0qP
+vaBjKspJJ65agvR04lWS/8LRqnmitvrVnYIET8ayxl5jpzq62O7rim+ftrsoQcAi
++05IGgaS17/Xz7nZvThPOw1EblVB/vwJ29i/844h8egStfYTpdPGTJMisAL/7h0M
+xKhrT3VoVujcKBJQ96gknS4kOfsJBd7lo2RJIdBofnEwkbFg4Dn0UPh6TZgAa3x5
+uk7OSuK6Nh23xTYVlZxkQupfxLr1QAW+4TpZvYSnGbjeTVNQzgfR0lHT7w2BbObn
+bctdfD98zOxPgycl/3BQ9oNZdYQGZlgs3omNAKZJ+aVDdwIDAQABo2MwYTAOBgNV
+HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFHznsrEs3rGna+l2DOGj/U5sx7n2MB8GA1Ud
+IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
+KoZIhvcNAQEEBQADggEBAGPdWc6KeaqYnU7FiWQ3foqTZy8Q6m8nw413bfJcVpQZ
+GmlgMEZdj/JtRTyONZd8L7hR4uiJvYjPJxwINFyIwWgk25GF5M/7+0ON6CUBG8QO
+9wBCSIYfJAhYWoyN8mtHLGiRsWlC/Q2NySbmkoamZG6Sxc4+PH1x4yOkq8fVqKnf
+gqc76IbVw08Y40TQ4NzzxWgu/qUvBYTIfkdCU2uHSv4y/14+cIy3qBXMF8L/RuzQ
+7C20bhIoqflA6evUZpdTqWlVwKmqsi7N0Wn0vvi7fGnuVKbbnvtapj7+mu+UUUt1
+7tjU4ZrxAlYTiQ6nQouWi4UMG4W+Jq6rppm8IvFz30I=
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            02:00:00:00:00:00:d6:78:b8:8d:8d
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
+        Validity
+            Not Before: Jan 28 12:00:00 1999 GMT
+            Not After : Jan 28 12:00:00 2009 GMT
+        Subject: C=BE, O=GlobalSign nv-sa, OU=Primary Class 2 CA, CN=GlobalSign Primary Class 2 CA
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:92:8c:fe:ef:f4:45:8e:17:41:6e:fc:d8:bf:21:
+                    6f:ab:06:9d:52:c1:2c:00:9d:3f:8e:85:b8:7f:4a:
+                    8f:bd:a0:63:2a:ca:49:27:ae:5a:82:f4:74:e2:55:
+                    92:ff:c2:d1:aa:79:a2:b6:fa:d5:9d:82:04:4f:c6:
+                    b2:c6:5e:63:a7:3a:ba:d8:ee:eb:8a:6f:9f:b6:bb:
+                    28:41:c0:22:fb:4e:48:1a:06:92:d7:bf:d7:cf:b9:
+                    d9:bd:38:4f:3b:0d:44:6e:55:41:fe:fc:09:db:d8:
+                    bf:f3:8e:21:f1:e8:12:b5:f6:13:a5:d3:c6:4c:93:
+                    22:b0:02:ff:ee:1d:0c:c4:a8:6b:4f:75:68:56:e8:
+                    dc:28:12:50:f7:a8:24:9d:2e:24:39:fb:09:05:de:
+                    e5:a3:64:49:21:d0:68:7e:71:30:91:b1:60:e0:39:
+                    f4:50:f8:7a:4d:98:00:6b:7c:79:ba:4e:ce:4a:e2:
+                    ba:36:1d:b7:c5:36:15:95:9c:64:42:ea:5f:c4:ba:
+                    f5:40:05:be:e1:3a:59:bd:84:a7:19:b8:de:4d:53:
+                    50:ce:07:d1:d2:51:d3:ef:0d:81:6c:e6:e7:6d:cb:
+                    5d:7c:3f:7c:cc:ec:4f:83:27:25:ff:70:50:f6:83:
+                    59:75:84:06:66:58:2c:de:89:8d:00:a6:49:f9:a5:
+                    43:77
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Key Usage: critical
+                Certificate Sign, CRL Sign
+            X509v3 Subject Key Identifier: 
+                7C:E7:B2:B1:2C:DE:B1:A7:6B:E9:76:0C:E1:A3:FD:4E:6C:C7:B9:F6
+            X509v3 Authority Key Identifier: 
+                keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B
+
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+    Signature Algorithm: md5WithRSAEncryption
+        63:dd:59:ce:8a:79:aa:98:9d:4e:c5:89:64:37:7e:8a:93:67:
+        2f:10:ea:6f:27:c3:8d:77:6d:f2:5c:56:94:19:1a:69:60:30:
+        46:5d:8f:f2:6d:45:3c:8e:35:97:7c:2f:b8:51:e2:e8:89:bd:
+        88:cf:27:1c:08:34:5c:88:c1:68:24:db:91:85:e4:cf:fb:fb:
+        43:8d:e8:25:01:1b:c4:0e:f7:00:42:48:86:1f:24:08:58:5a:
+        8c:8d:f2:6b:47:2c:68:91:b1:69:42:fd:0d:8d:c9:26:e6:92:
+        86:a6:64:6e:92:c5:ce:3e:3c:7d:71:e3:23:a4:ab:c7:d5:a8:
+        a9:df:82:a7:3b:e8:86:d5:c3:4f:18:e3:44:d0:e0:dc:f3:c5:
+        68:2e:fe:a5:2f:05:84:c8:7e:47:42:53:6b:87:4a:fe:32:ff:
+        5e:3e:70:8c:b7:a8:15:cc:17:c2:ff:46:ec:d0:ec:2d:b4:6e:
+        12:28:a9:f9:40:e9:eb:d4:66:97:53:a9:69:55:c0:a9:aa:b2:
+        2e:cd:d1:69:f4:be:f8:bb:7c:69:ee:54:a6:db:9e:fb:5a:a6:
+        3e:fe:9a:ef:94:51:4b:75:ee:d8:d4:e1:9a:f1:02:56:13:89:
+        0e:a7:42:8b:96:8b:85:0c:1b:85:be:26:ae:ab:a6:99:bc:22:
+        f1:73:df:42
+
+GlobalSign Primary Class 3 CA
+=============================
+MD5 Fingerprint: 98:12:A3:4B:95:A9:96:64:94:E7:50:8C:3E:E1:83:5A
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDrDCCApSgAwIBAgILAgAAAAAA1ni41sMwDQYJKoZIhvcNAQEEBQAwVzELMAkG
+A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
+b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw
+MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
+YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDMgQ0ExJjAkBgNV
+BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAzIENBMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAkV5WZdbAwAScv0fEXHt6MQH5WJaZ4xyEL9xWj631
+WYHVQ2ZdWpOMdcqp5xHBURAUYMks1HuvxneGq3onrm+VuQvKtkb7fhr0DRRt0slO
+sq7wVPZcQEw2SHToVIxlZhCnvSu3II0FSa14fdIkI1Dj8LR5mwE5/6870y3u4UmN
+jS88akFFL5vjPeES5JF1ns+gPjySgW+KLhjc4PKMjP2H2Qf0QJTJTk9D32dWb70D
+UHyZZ6S5PJFsAm6E1vxG98xvGD4X8O8LZBZX5qyG8UiqQ8HJJ3hzREXihX26/7Ph
++xsFpEs7mRIlAVAUaq9d6sgM7uTa7EuLXGgTldzDtTA61wIDAQABo2MwYTAOBgNV
+HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFMw2zBe0RZEv7c87MEh3+7UUmb7jMB8GA1Ud
+IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
+KoZIhvcNAQEEBQADggEBAFeyVMy9lRdkYIm2U5EMRZLDPahsw8yyGPV4QXTYfaMn
+r3cNWT6UHWn6idMMvRoB9D/o4Hcagiha5mLXt+M2yQ6feuPC08xZiQzvFovwNnci
+yqS2t8FCZwFAY8znOGSHWxSWZnstFO69SW3/d9DiTlvTgMJND8q4nYGXpzRux+Oc
+SOW0qkX19mVMSPISwtKTjMIVJPMrUv/jCK64btYsEs85yxIq56l7X5g9o+HMpmOJ
+XH0xdfnV1l3y0NQ9355xqA7c5CCXeOZ/U6QNUU+OOwOuow1aTcN55zVYcELJXqFe
+tNkio0RTNaTQz3OAxc+fVph2+RRMd4eCydx+XTTVNnU=
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            02:00:00:00:00:00:d6:78:b8:d6:c3
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
+        Validity
+            Not Before: Jan 28 12:00:00 1999 GMT
+            Not After : Jan 28 12:00:00 2009 GMT
+        Subject: C=BE, O=GlobalSign nv-sa, OU=Primary Class 3 CA, CN=GlobalSign Primary Class 3 CA
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:91:5e:56:65:d6:c0:c0:04:9c:bf:47:c4:5c:7b:
+                    7a:31:01:f9:58:96:99:e3:1c:84:2f:dc:56:8f:ad:
+                    f5:59:81:d5:43:66:5d:5a:93:8c:75:ca:a9:e7:11:
+                    c1:51:10:14:60:c9:2c:d4:7b:af:c6:77:86:ab:7a:
+                    27:ae:6f:95:b9:0b:ca:b6:46:fb:7e:1a:f4:0d:14:
+                    6d:d2:c9:4e:b2:ae:f0:54:f6:5c:40:4c:36:48:74:
+                    e8:54:8c:65:66:10:a7:bd:2b:b7:20:8d:05:49:ad:
+                    78:7d:d2:24:23:50:e3:f0:b4:79:9b:01:39:ff:af:
+                    3b:d3:2d:ee:e1:49:8d:8d:2f:3c:6a:41:45:2f:9b:
+                    e3:3d:e1:12:e4:91:75:9e:cf:a0:3e:3c:92:81:6f:
+                    8a:2e:18:dc:e0:f2:8c:8c:fd:87:d9:07:f4:40:94:
+                    c9:4e:4f:43:df:67:56:6f:bd:03:50:7c:99:67:a4:
+                    b9:3c:91:6c:02:6e:84:d6:fc:46:f7:cc:6f:18:3e:
+                    17:f0:ef:0b:64:16:57:e6:ac:86:f1:48:aa:43:c1:
+                    c9:27:78:73:44:45:e2:85:7d:ba:ff:b3:e1:fb:1b:
+                    05:a4:4b:3b:99:12:25:01:50:14:6a:af:5d:ea:c8:
+                    0c:ee:e4:da:ec:4b:8b:5c:68:13:95:dc:c3:b5:30:
+                    3a:d7
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Key Usage: critical
+                Certificate Sign, CRL Sign
+            X509v3 Subject Key Identifier: 
+                CC:36:CC:17:B4:45:91:2F:ED:CF:3B:30:48:77:FB:B5:14:99:BE:E3
+            X509v3 Authority Key Identifier: 
+                keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B
+
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+    Signature Algorithm: md5WithRSAEncryption
+        57:b2:54:cc:bd:95:17:64:60:89:b6:53:91:0c:45:92:c3:3d:
+        a8:6c:c3:cc:b2:18:f5:78:41:74:d8:7d:a3:27:af:77:0d:59:
+        3e:94:1d:69:fa:89:d3:0c:bd:1a:01:f4:3f:e8:e0:77:1a:82:
+        28:5a:e6:62:d7:b7:e3:36:c9:0e:9f:7a:e3:c2:d3:cc:59:89:
+        0c:ef:16:8b:f0:36:77:22:ca:a4:b6:b7:c1:42:67:01:40:63:
+        cc:e7:38:64:87:5b:14:96:66:7b:2d:14:ee:bd:49:6d:ff:77:
+        d0:e2:4e:5b:d3:80:c2:4d:0f:ca:b8:9d:81:97:a7:34:6e:c7:
+        e3:9c:48:e5:b4:aa:45:f5:f6:65:4c:48:f2:12:c2:d2:93:8c:
+        c2:15:24:f3:2b:52:ff:e3:08:ae:b8:6e:d6:2c:12:cf:39:cb:
+        12:2a:e7:a9:7b:5f:98:3d:a3:e1:cc:a6:63:89:5c:7d:31:75:
+        f9:d5:d6:5d:f2:d0:d4:3d:df:9e:71:a8:0e:dc:e4:20:97:78:
+        e6:7f:53:a4:0d:51:4f:8e:3b:03:ae:a3:0d:5a:4d:c3:79:e7:
+        35:58:70:42:c9:5e:a1:5e:b4:d9:22:a3:44:53:35:a4:d0:cf:
+        73:80:c5:cf:9f:56:98:76:f9:14:4c:77:87:82:c9:dc:7e:5d:
+        34:d5:36:75
+
+GlobalSign Root CA
+==================
+MD5 Fingerprint: AB:BF:EA:E3:6B:29:A6:CC:A6:78:35:99:EF:AD:2B:80
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzELMAkG
+A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
+b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
+MDBaFw0xNDAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
+YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
+aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
+jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
+xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
+1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
+snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
+U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
+9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIABjAdBgNVHQ4EFgQU
+YHtmGkUNl8qJUC99BM00qP/8/UswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B
+AQQFAAOCAQEArqqf/LfSyx9fOSkoGJ40yWxPbxrwZKJwSk8ThptgKJ7ogUmYfQq7
+5bCdPTbbjwVR/wkxKh/diXeeDy5slQTthsu0AD+EAk2AaioteAuubyuig0SDH81Q
+gkwkr733pbTIWg/050deSY43lv6aiAU62cDbKYfmGZZHpzqmjIs8d/5GY6dT2iHR
+rH5Jokvmw2dZL7OKDrssvamqQnw1wdh/1acxOk5jQzmvCLBhNIzTmKlDNPYPhyk7
+ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBgHcl5JLL2bP2o
+Zg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            02:00:00:00:00:00:d6:78:b7:94:05
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
+        Validity
+            Not Before: Sep  1 12:00:00 1998 GMT
+            Not After : Jan 28 12:00:00 2014 GMT
+        Subject: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:da:0e:e6:99:8d:ce:a3:e3:4f:8a:7e:fb:f1:8b:
+                    83:25:6b:ea:48:1f:f1:2a:b0:b9:95:11:04:bd:f0:
+                    63:d1:e2:67:66:cf:1c:dd:cf:1b:48:2b:ee:8d:89:
+                    8e:9a:af:29:80:65:ab:e9:c7:2d:12:cb:ab:1c:4c:
+                    70:07:a1:3d:0a:30:cd:15:8d:4f:f8:dd:d4:8c:50:
+                    15:1c:ef:50:ee:c4:2e:f7:fc:e9:52:f2:91:7d:e0:
+                    6d:d5:35:30:8e:5e:43:73:f2:41:e9:d5:6a:e3:b2:
+                    89:3a:56:39:38:6f:06:3c:88:69:5b:2a:4d:c5:a7:
+                    54:b8:6c:89:cc:9b:f9:3c:ca:e5:fd:89:f5:12:3c:
+                    92:78:96:d6:dc:74:6e:93:44:61:d1:8d:c7:46:b2:
+                    75:0e:86:e8:19:8a:d5:6d:6c:d5:78:16:95:a2:e9:
+                    c8:0a:38:eb:f2:24:13:4f:73:54:93:13:85:3a:1b:
+                    bc:1e:34:b5:8b:05:8c:b9:77:8b:b1:db:1f:20:91:
+                    ab:09:53:6e:90:ce:7b:37:74:b9:70:47:91:22:51:
+                    63:16:79:ae:b1:ae:41:26:08:c8:19:2b:d1:46:aa:
+                    48:d6:64:2a:d7:83:34:ff:2c:2a:c1:6c:19:43:4a:
+                    07:85:e7:d3:7c:f6:21:68:ef:ea:f2:52:9f:7f:93:
+                    90:cf
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Key Usage: critical
+                Certificate Sign, CRL Sign
+            X509v3 Subject Key Identifier: 
+                60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+    Signature Algorithm: md5WithRSAEncryption
+        ae:aa:9f:fc:b7:d2:cb:1f:5f:39:29:28:18:9e:34:c9:6c:4f:
+        6f:1a:f0:64:a2:70:4a:4f:13:86:9b:60:28:9e:e8:81:49:98:
+        7d:0a:bb:e5:b0:9d:3d:36:db:8f:05:51:ff:09:31:2a:1f:dd:
+        89:77:9e:0f:2e:6c:95:04:ed:86:cb:b4:00:3f:84:02:4d:80:
+        6a:2a:2d:78:0b:ae:6f:2b:a2:83:44:83:1f:cd:50:82:4c:24:
+        af:bd:f7:a5:b4:c8:5a:0f:f4:e7:47:5e:49:8e:37:96:fe:9a:
+        88:05:3a:d9:c0:db:29:87:e6:19:96:47:a7:3a:a6:8c:8b:3c:
+        77:fe:46:63:a7:53:da:21:d1:ac:7e:49:a2:4b:e6:c3:67:59:
+        2f:b3:8a:0e:bb:2c:bd:a9:aa:42:7c:35:c1:d8:7f:d5:a7:31:
+        3a:4e:63:43:39:af:08:b0:61:34:8c:d3:98:a9:43:34:f6:0f:
+        87:29:3b:9d:c2:56:58:98:77:c3:f7:1b:ac:f6:9d:f8:3e:aa:
+        a7:54:45:f0:f5:f9:d5:31:65:fe:6b:58:9c:71:b3:1e:d7:52:
+        ea:32:17:fc:40:60:1d:c9:79:24:b2:f6:6c:fd:a8:66:0e:82:
+        dd:98:cb:da:c2:44:4f:2e:a0:7b:f2:f7:6b:2c:76:11:84:46:
+        8a:78:a3:e3
+
+National Retail Federation by DST
+=================================
+MD5 Fingerprint: AD:8E:0F:9E:01:6B:A0:C5:74:D5:0C:D3:68:65:4F:1E
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIEAjCCAuoCEQDQHkCKAAACfAAAAAMAAAABMA0GCSqGSIb3DQEBBQUAMIG+MQsw
+CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp
+dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEjMCEGA1UE
+CxMaTmF0aW9uYWwgUmV0YWlsIEZlZGVyYXRpb24xGTAXBgNVBAMTEERTVCAoTlJG
+KSBSb290Q0ExITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05
+ODEyMTExNjE0MTZaFw0wODEyMDgxNjE0MTZaMIG+MQswCQYDVQQGEwJ1czENMAsG
+A1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0Rp
+Z2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEjMCEGA1UECxMaTmF0aW9uYWwgUmV0
+YWlsIEZlZGVyYXRpb24xGTAXBgNVBAMTEERTVCAoTlJGKSBSb290Q0ExITAfBgkq
+hkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBANmsm3f6UNPM3LlArLlyagCHI/wPliHQJq/k4rVf+tOmfSEw
+LswXgo+YdPxnpKbfiJeiQin1p9sRk/teIzDCqrwi50Eb5e0l3sg/295XRXhARoOy
+1Ro93w9FbdVjAnXYL8Zuq5WRdDcNy00JXNHUWzra3Q7Ia5nY1TnM34VVxJJTAqPh
+94DJcKPa3DPEf6JHCBw1lh+hAxwwg/TEzP+Yw7BGRKLAv63b0oH2TJgsp14k84bK
+Y9W6ffCawErQG1ju7Klnz2kCbCLAYCws0cgg6sgt+92cu8tRTNznVwQ7VJsRpTJ0
+7HQB85AVWy98LJNluWZntIGINeWekRh/gahByMsCAwEAATANBgkqhkiG9w0BAQUF
+AAOCAQEAhF4LO+ygjRyb0DwdcWnkGn9kvoFlYcWMatd8AHTgemJV7SR84GHj8t0U
+5hFugw7h6qmegK2aIL/gV37V0LWEYy3ZGOS9GzUsXq5hdqpnhTs44TGBHzF/5tf4
+W9K7Y3mGxIzF3gqu19H8AXT/trYNYoFnHLsm+CSA4Fxe2KSKOo99y/+So/18qTJp
+B1hYYUKZUgOxOD3GcW9s8uh9BqrBfFPLGi2IT8mpp6xpb/ekH9h0gfVKv7FVt9N3
+OKdvwkrI4nOJ01dy4UMvcjz2H7f4BEpuwemUF+SXF/QOE4ZvjavoXy20/2zWorQf
+7LmUaqoSTxrd9Xe1JYzyigrx/FJbWA==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            d0:1e:40:8a:00:00:02:7c:00:00:00:03:00:00:00:01
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=National Retail Federation, CN=DST (NRF) RootCA/Email=ca@digsigtrust.com
+        Validity
+            Not Before: Dec 11 16:14:16 1998 GMT
+            Not After : Dec  8 16:14:16 2008 GMT
+        Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=National Retail Federation, CN=DST (NRF) RootCA/Email=ca@digsigtrust.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:d9:ac:9b:77:fa:50:d3:cc:dc:b9:40:ac:b9:72:
+                    6a:00:87:23:fc:0f:96:21:d0:26:af:e4:e2:b5:5f:
+                    fa:d3:a6:7d:21:30:2e:cc:17:82:8f:98:74:fc:67:
+                    a4:a6:df:88:97:a2:42:29:f5:a7:db:11:93:fb:5e:
+                    23:30:c2:aa:bc:22:e7:41:1b:e5:ed:25:de:c8:3f:
+                    db:de:57:45:78:40:46:83:b2:d5:1a:3d:df:0f:45:
+                    6d:d5:63:02:75:d8:2f:c6:6e:ab:95:91:74:37:0d:
+                    cb:4d:09:5c:d1:d4:5b:3a:da:dd:0e:c8:6b:99:d8:
+                    d5:39:cc:df:85:55:c4:92:53:02:a3:e1:f7:80:c9:
+                    70:a3:da:dc:33:c4:7f:a2:47:08:1c:35:96:1f:a1:
+                    03:1c:30:83:f4:c4:cc:ff:98:c3:b0:46:44:a2:c0:
+                    bf:ad:db:d2:81:f6:4c:98:2c:a7:5e:24:f3:86:ca:
+                    63:d5:ba:7d:f0:9a:c0:4a:d0:1b:58:ee:ec:a9:67:
+                    cf:69:02:6c:22:c0:60:2c:2c:d1:c8:20:ea:c8:2d:
+                    fb:dd:9c:bb:cb:51:4c:dc:e7:57:04:3b:54:9b:11:
+                    a5:32:74:ec:74:01:f3:90:15:5b:2f:7c:2c:93:65:
+                    b9:66:67:b4:81:88:35:e5:9e:91:18:7f:81:a8:41:
+                    c8:cb
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        84:5e:0b:3b:ec:a0:8d:1c:9b:d0:3c:1d:71:69:e4:1a:7f:64:
+        be:81:65:61:c5:8c:6a:d7:7c:00:74:e0:7a:62:55:ed:24:7c:
+        e0:61:e3:f2:dd:14:e6:11:6e:83:0e:e1:ea:a9:9e:80:ad:9a:
+        20:bf:e0:57:7e:d5:d0:b5:84:63:2d:d9:18:e4:bd:1b:35:2c:
+        5e:ae:61:76:aa:67:85:3b:38:e1:31:81:1f:31:7f:e6:d7:f8:
+        5b:d2:bb:63:79:86:c4:8c:c5:de:0a:ae:d7:d1:fc:01:74:ff:
+        b6:b6:0d:62:81:67:1c:bb:26:f8:24:80:e0:5c:5e:d8:a4:8a:
+        3a:8f:7d:cb:ff:92:a3:fd:7c:a9:32:69:07:58:58:61:42:99:
+        52:03:b1:38:3d:c6:71:6f:6c:f2:e8:7d:06:aa:c1:7c:53:cb:
+        1a:2d:88:4f:c9:a9:a7:ac:69:6f:f7:a4:1f:d8:74:81:f5:4a:
+        bf:b1:55:b7:d3:77:38:a7:6f:c2:4a:c8:e2:73:89:d3:57:72:
+        e1:43:2f:72:3c:f6:1f:b7:f8:04:4a:6e:c1:e9:94:17:e4:97:
+        17:f4:0e:13:86:6f:8d:ab:e8:5f:2d:b4:ff:6c:d6:a2:b4:1f:
+        ec:b9:94:6a:aa:12:4f:1a:dd:f5:77:b5:25:8c:f2:8a:0a:f1:
+        fc:52:5b:58
+
+TC TrustCenter, Germany, Class 0 CA
+===================================
+MD5 Fingerprint: 35:85:49:8E:6E:57:FE:BD:97:F1:C9:46:23:3A:B6:7D
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIENTCCA56gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx
+EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD
+IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx
+IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDAgQ0ExKTAnBgkqhkiG9w0B
+CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTQ0OFoX
+DTA1MTIzMTEzNTQ0OFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn
+MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig
+U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz
+dENlbnRlciBDbGFzcyAwIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0
+cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA333mvr/V
+8C9tTg7R4I0LfztU6IrisJ8oxYrGubMzJ/UnyhpMVBJrtLJGsx1Ls/QhC0sCLqHC
+NJyFoMR4EdvbaycrCSoYTkDMn3EZZ5l0onw/wdiLI8hjO4ohq1zeHvSN3LQYwwVz
+9Gq0ofoBCCsBD203W6o4hmc51+Vf+uR+zKMCAwEAAaOCAUMwggE/MEAGCWCGSAGG
++EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr
+LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl
+ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw
+czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI
+AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p
+bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAw
+IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQBNB39fCTAZ
+kqoFR3qUdVQqrs/82AxC4UU4KySVssqHynnEw5eQXmIYxsk4YUxoNdNMFBHrxM2h
+qdjFnmgnMgc1RQT4XyGgYB4cAEgEWNLFy65tMm49d5WMhcflrlCddUp7/wsneepN
+pFn/7FrqJqU5g6TReM6nqX683SvKEpMDSg==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 0 CA/Email=certificate@trustcenter.de
+        Validity
+            Not Before: Mar  9 13:54:48 1998 GMT
+            Not After : Dec 31 13:54:48 2005 GMT
+        Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 0 CA/Email=certificate@trustcenter.de
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:df:7d:e6:be:bf:d5:f0:2f:6d:4e:0e:d1:e0:8d:
+                    0b:7f:3b:54:e8:8a:e2:b0:9f:28:c5:8a:c6:b9:b3:
+                    33:27:f5:27:ca:1a:4c:54:12:6b:b4:b2:46:b3:1d:
+                    4b:b3:f4:21:0b:4b:02:2e:a1:c2:34:9c:85:a0:c4:
+                    78:11:db:db:6b:27:2b:09:2a:18:4e:40:cc:9f:71:
+                    19:67:99:74:a2:7c:3f:c1:d8:8b:23:c8:63:3b:8a:
+                    21:ab:5c:de:1e:f4:8d:dc:b4:18:c3:05:73:f4:6a:
+                    b4:a1:fa:01:08:2b:01:0f:6d:37:5b:aa:38:86:67:
+                    39:d7:e5:5f:fa:e4:7e:cc:a3
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            Netscape Revocation Url: 
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+            Netscape CA Revocation Url: 
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+            Netscape Renewal Url: 
+                https://www.trustcenter.de/cgi-bin/Renew.cgi?
+            Netscape CA Policy Url: 
+                http://www.trustcenter.de/guidelines/index.html
+            Netscape Comment: 
+                TC TrustCenter Class 0 CA
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+    Signature Algorithm: md5WithRSAEncryption
+        4d:07:7f:5f:09:30:19:92:aa:05:47:7a:94:75:54:2a:ae:cf:
+        fc:d8:0c:42:e1:45:38:2b:24:95:b2:ca:87:ca:79:c4:c3:97:
+        90:5e:62:18:c6:c9:38:61:4c:68:35:d3:4c:14:11:eb:c4:cd:
+        a1:a9:d8:c5:9e:68:27:32:07:35:45:04:f8:5f:21:a0:60:1e:
+        1c:00:48:04:58:d2:c5:cb:ae:6d:32:6e:3d:77:95:8c:85:c7:
+        e5:ae:50:9d:75:4a:7b:ff:0b:27:79:ea:4d:a4:59:ff:ec:5a:
+        ea:26:a5:39:83:a4:d1:78:ce:a7:a9:7e:bc:dd:2b:ca:12:93:
+        03:4a
+
+TC TrustCenter, Germany, Class 1 CA
+===================================
+MD5 Fingerprint: 64:3F:F8:3E:52:14:4A:59:BA:93:56:04:0B:23:02:D1
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIENTCCA56gAwIBAgIBAjANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx
+EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD
+IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx
+IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDEgQ0ExKTAnBgkqhkiG9w0B
+CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTYzM1oX
+DTA1MTIzMTEzNTYzM1owgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn
+MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig
+U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz
+dENlbnRlciBDbGFzcyAxIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0
+cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsCnrtHaz
+rte2W7Re573jsZxJBFdboavZfxMb/bphq9jncd8tAJRdUUh9I+91YoSQPAofWRF0
+L46Apf0wAj0pUs1yGkkhnLzLUo5IoWOWyBCFMGlXdEXAWobG1T3gaFd9MWokjUWX
+PjF+aGYybiRt7DI2yUHK8DFEyKNhyhugNh8CAwEAAaOCAUMwggE/MEAGCWCGSAGG
++EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr
+LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl
+ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw
+czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI
+AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p
+bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAx
+IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQAFQlImpAwn
+AUSsXCUowkRCVAi5HcU+bFlmxLNOUKf4+JZ1oZZ16BY4oM1dbvp5pxt7HR7DALlm
+vlrWYg/n8nu470zgwD9Zrjm3hAmeq/GpLmtp4q3M8up4CQUgOEJxGH7Hspfm1QIF
+BlajX/GqwsRP/vfvFg+d7KqFzz0pJPEEzQ==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 2 (0x2)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 1 CA/Email=certificate@trustcenter.de
+        Validity
+            Not Before: Mar  9 13:56:33 1998 GMT
+            Not After : Dec 31 13:56:33 2005 GMT
+        Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 1 CA/Email=certificate@trustcenter.de
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b0:29:eb:b4:76:b3:ae:d7:b6:5b:b4:5e:e7:bd:
+                    e3:b1:9c:49:04:57:5b:a1:ab:d9:7f:13:1b:fd:ba:
+                    61:ab:d8:e7:71:df:2d:00:94:5d:51:48:7d:23:ef:
+                    75:62:84:90:3c:0a:1f:59:11:74:2f:8e:80:a5:fd:
+                    30:02:3d:29:52:cd:72:1a:49:21:9c:bc:cb:52:8e:
+                    48:a1:63:96:c8:10:85:30:69:57:74:45:c0:5a:86:
+                    c6:d5:3d:e0:68:57:7d:31:6a:24:8d:45:97:3e:31:
+                    7e:68:66:32:6e:24:6d:ec:32:36:c9:41:ca:f0:31:
+                    44:c8:a3:61:ca:1b:a0:36:1f
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            Netscape Revocation Url: 
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+            Netscape CA Revocation Url: 
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+            Netscape Renewal Url: 
+                https://www.trustcenter.de/cgi-bin/Renew.cgi?
+            Netscape CA Policy Url: 
+                http://www.trustcenter.de/guidelines/index.html
+            Netscape Comment: 
+                TC TrustCenter Class 1 CA
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+    Signature Algorithm: md5WithRSAEncryption
+        05:42:52:26:a4:0c:27:01:44:ac:5c:25:28:c2:44:42:54:08:
+        b9:1d:c5:3e:6c:59:66:c4:b3:4e:50:a7:f8:f8:96:75:a1:96:
+        75:e8:16:38:a0:cd:5d:6e:fa:79:a7:1b:7b:1d:1e:c3:00:b9:
+        66:be:5a:d6:62:0f:e7:f2:7b:b8:ef:4c:e0:c0:3f:59:ae:39:
+        b7:84:09:9e:ab:f1:a9:2e:6b:69:e2:ad:cc:f2:ea:78:09:05:
+        20:38:42:71:18:7e:c7:b2:97:e6:d5:02:05:06:56:a3:5f:f1:
+        aa:c2:c4:4f:fe:f7:ef:16:0f:9d:ec:aa:85:cf:3d:29:24:f1:
+        04:cd
+
+TC TrustCenter, Germany, Class 2 CA
+===================================
+MD5 Fingerprint: E1:E9:96:53:77:E1:F0:38:A0:02:AB:94:C6:95:7B:FC
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIENTCCA56gAwIBAgIBAzANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx
+EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD
+IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx
+IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExKTAnBgkqhkiG9w0B
+CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTc0NFoX
+DTA1MTIzMTEzNTc0NFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn
+MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig
+U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz
+dENlbnRlciBDbGFzcyAyIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0
+cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA2jjo7TIA
+KXGDAQ2/jAHc2satOaSpii/Vi1xoX1DGYvVmvcqRIuyqHVHXPbNRsoNOXctJsPBM
+VeVrLceFCzAckk6C1MoC7fdvvtzg4xS4BVPymvRWi1qehZPRtIJWrk27qEtXFrz+
++Fie+CmNsHvNeMlPrItnDPGc+/xXm1dcTw0CAwEAAaOCAUMwggE/MEAGCWCGSAGG
++EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr
+LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl
+ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw
+czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI
+AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p
+bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAy
+IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCJG/Tv6Tji
+bAz2zW9JzinM+6YP+Y0+lUbW/EcyibLIBmF60ucNEwKUC9mLVkf0u+fFX3v0Y0yu
+fDTqDaKpsyyF8+P+J1QQkrCPksGYQhhwSNtOLOsNJGjk0fe+Cakph7vo2tw+o4hC
+MfXR43+u2I4AWnSYsE/G/yN7XHMAeMnbTg==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 3 (0x3)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 2 CA/Email=certificate@trustcenter.de
+        Validity
+            Not Before: Mar  9 13:57:44 1998 GMT
+            Not After : Dec 31 13:57:44 2005 GMT
+        Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 2 CA/Email=certificate@trustcenter.de
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:da:38:e8:ed:32:00:29:71:83:01:0d:bf:8c:01:
+                    dc:da:c6:ad:39:a4:a9:8a:2f:d5:8b:5c:68:5f:50:
+                    c6:62:f5:66:bd:ca:91:22:ec:aa:1d:51:d7:3d:b3:
+                    51:b2:83:4e:5d:cb:49:b0:f0:4c:55:e5:6b:2d:c7:
+                    85:0b:30:1c:92:4e:82:d4:ca:02:ed:f7:6f:be:dc:
+                    e0:e3:14:b8:05:53:f2:9a:f4:56:8b:5a:9e:85:93:
+                    d1:b4:82:56:ae:4d:bb:a8:4b:57:16:bc:fe:f8:58:
+                    9e:f8:29:8d:b0:7b:cd:78:c9:4f:ac:8b:67:0c:f1:
+                    9c:fb:fc:57:9b:57:5c:4f:0d
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            Netscape Revocation Url: 
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+            Netscape CA Revocation Url: 
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+            Netscape Renewal Url: 
+                https://www.trustcenter.de/cgi-bin/Renew.cgi?
+            Netscape CA Policy Url: 
+                http://www.trustcenter.de/guidelines/index.html
+            Netscape Comment: 
+                TC TrustCenter Class 2 CA
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+    Signature Algorithm: md5WithRSAEncryption
+        89:1b:f4:ef:e9:38:e2:6c:0c:f6:cd:6f:49:ce:29:cc:fb:a6:
+        0f:f9:8d:3e:95:46:d6:fc:47:32:89:b2:c8:06:61:7a:d2:e7:
+        0d:13:02:94:0b:d9:8b:56:47:f4:bb:e7:c5:5f:7b:f4:63:4c:
+        ae:7c:34:ea:0d:a2:a9:b3:2c:85:f3:e3:fe:27:54:10:92:b0:
+        8f:92:c1:98:42:18:70:48:db:4e:2c:eb:0d:24:68:e4:d1:f7:
+        be:09:a9:29:87:bb:e8:da:dc:3e:a3:88:42:31:f5:d1:e3:7f:
+        ae:d8:8e:00:5a:74:98:b0:4f:c6:ff:23:7b:5c:73:00:78:c9:
+        db:4e
+
+TC TrustCenter, Germany, Class 3 CA
+===================================
+MD5 Fingerprint: 62:AB:B6:15:4A:B4:B0:16:77:FF:AE:CF:16:16:2B:8C
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIENTCCA56gAwIBAgIBBDANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx
+EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD
+IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx
+IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExKTAnBgkqhkiG9w0B
+CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTg0OVoX
+DTA1MTIzMTEzNTg0OVowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn
+MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig
+U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz
+dENlbnRlciBDbGFzcyAzIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0
+cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtrTBNQUu
+DY3soEBqHA4nplCSa1AbB94u53bM4Nr8hKhejGNqK03ZTgJ2EcEL8o15ygC28bAO
+1/ukFz2vq2l6lie/rzOhmipZqsS1NwjyEqUxtkP1MpZxKCirjSiG37vu4wx9MNbD
+UquPXSeca8Cj5wVrV0lEs27qZM/SjnpQd3cCAwEAAaOCAUMwggE/MEAGCWCGSAGG
++EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr
+LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl
+ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw
+czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI
+AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p
+bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAz
+IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCEhlBieaAn
+4SW6CbE0DxMJ7S3Ko+aV+TCszRelzj2Xnex8jyZ/wGHKIveR3Tw2WZqbdfe85Mjt
+7AK2IqfzLPHIknhttu7FKOyAIE+5awjnL6eGHn2xCJ9UuQA3PKDYGsiWHPQyFJw5
+lbfu8ENJwl7oy3lvU7/7SYos2EvZVfIScA==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 4 (0x4)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 3 CA/Email=certificate@trustcenter.de
+        Validity
+            Not Before: Mar  9 13:58:49 1998 GMT
+            Not After : Dec 31 13:58:49 2005 GMT
+        Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 3 CA/Email=certificate@trustcenter.de
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b6:b4:c1:35:05:2e:0d:8d:ec:a0:40:6a:1c:0e:
+                    27:a6:50:92:6b:50:1b:07:de:2e:e7:76:cc:e0:da:
+                    fc:84:a8:5e:8c:63:6a:2b:4d:d9:4e:02:76:11:c1:
+                    0b:f2:8d:79:ca:00:b6:f1:b0:0e:d7:fb:a4:17:3d:
+                    af:ab:69:7a:96:27:bf:af:33:a1:9a:2a:59:aa:c4:
+                    b5:37:08:f2:12:a5:31:b6:43:f5:32:96:71:28:28:
+                    ab:8d:28:86:df:bb:ee:e3:0c:7d:30:d6:c3:52:ab:
+                    8f:5d:27:9c:6b:c0:a3:e7:05:6b:57:49:44:b3:6e:
+                    ea:64:cf:d2:8e:7a:50:77:77
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            Netscape Revocation Url: 
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+            Netscape CA Revocation Url: 
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+            Netscape Renewal Url: 
+                https://www.trustcenter.de/cgi-bin/Renew.cgi?
+            Netscape CA Policy Url: 
+                http://www.trustcenter.de/guidelines/index.html
+            Netscape Comment: 
+                TC TrustCenter Class 3 CA
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+    Signature Algorithm: md5WithRSAEncryption
+        84:86:50:62:79:a0:27:e1:25:ba:09:b1:34:0f:13:09:ed:2d:
+        ca:a3:e6:95:f9:30:ac:cd:17:a5:ce:3d:97:9d:ec:7c:8f:26:
+        7f:c0:61:ca:22:f7:91:dd:3c:36:59:9a:9b:75:f7:bc:e4:c8:
+        ed:ec:02:b6:22:a7:f3:2c:f1:c8:92:78:6d:b6:ee:c5:28:ec:
+        80:20:4f:b9:6b:08:e7:2f:a7:86:1e:7d:b1:08:9f:54:b9:00:
+        37:3c:a0:d8:1a:c8:96:1c:f4:32:14:9c:39:95:b7:ee:f0:43:
+        49:c2:5e:e8:cb:79:6f:53:bf:fb:49:8a:2c:d8:4b:d9:55:f2:
+        12:70
+
+TC TrustCenter, Germany, Class 4 CA
+===================================
+MD5 Fingerprint: BF:AF:EC:C4:DA:F9:30:F9:CA:35:CA:25:E4:3F:8D:89
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIENTCCA56gAwIBAgIBBTANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx
+EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD
+IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx
+IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDQgQ0ExKTAnBgkqhkiG9w0B
+CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTE0MDAyMFoX
+DTA1MTIzMTE0MDAyMFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn
+MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig
+U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz
+dENlbnRlciBDbGFzcyA0IENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0
+cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvy9j1jZ7
+sg3TVfVkbOYlXca0yBS6JTiD61ZipVWpZaP0I5nCS7nQzVRnpqOgo6kzK3bkva13
+su1cEnTDxbYPUppyk0OQYmYVD0Wl3eDduG9AblfBeXKjYKq6dh0SiVNa/AK+4QkT
+xUov3D2LGa3XiyRF+0z0zVw1HSlMUfPybFUCAwEAAaOCAUMwggE/MEAGCWCGSAGG
++EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr
+LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl
+ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw
+czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI
+AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p
+bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyA0
+IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCUaBQbJZ4p
+mbGyI9JEs5Wf0Z5VBN3jL4IzVZZ3GZ0rnmUc+orjx48l/LEeVUYPj/9PNy+kdlmm
+ZOvVFnC93ZUzDKQNJOtkULRDEfJDvg1xmCLsAa/s98dcccN1kVgZ6N2g9LTxvBBK
+85O0Bkm7H2bSvXRH4Zr569erbR+64R0s2g==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 5 (0x5)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 4 CA/Email=certificate@trustcenter.de
+        Validity
+            Not Before: Mar  9 14:00:20 1998 GMT
+            Not After : Dec 31 14:00:20 2005 GMT
+        Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 4 CA/Email=certificate@trustcenter.de
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:bf:2f:63:d6:36:7b:b2:0d:d3:55:f5:64:6c:e6:
+                    25:5d:c6:b4:c8:14:ba:25:38:83:eb:56:62:a5:55:
+                    a9:65:a3:f4:23:99:c2:4b:b9:d0:cd:54:67:a6:a3:
+                    a0:a3:a9:33:2b:76:e4:bd:ad:77:b2:ed:5c:12:74:
+                    c3:c5:b6:0f:52:9a:72:93:43:90:62:66:15:0f:45:
+                    a5:dd:e0:dd:b8:6f:40:6e:57:c1:79:72:a3:60:aa:
+                    ba:76:1d:12:89:53:5a:fc:02:be:e1:09:13:c5:4a:
+                    2f:dc:3d:8b:19:ad:d7:8b:24:45:fb:4c:f4:cd:5c:
+                    35:1d:29:4c:51:f3:f2:6c:55
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            Netscape Revocation Url: 
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+            Netscape CA Revocation Url: 
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+            Netscape Renewal Url: 
+                https://www.trustcenter.de/cgi-bin/Renew.cgi?
+            Netscape CA Policy Url: 
+                http://www.trustcenter.de/guidelines/index.html
+            Netscape Comment: 
+                TC TrustCenter Class 4 CA
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+    Signature Algorithm: md5WithRSAEncryption
+        94:68:14:1b:25:9e:29:99:b1:b2:23:d2:44:b3:95:9f:d1:9e:
+        55:04:dd:e3:2f:82:33:55:96:77:19:9d:2b:9e:65:1c:fa:8a:
+        e3:c7:8f:25:fc:b1:1e:55:46:0f:8f:ff:4f:37:2f:a4:76:59:
+        a6:64:eb:d5:16:70:bd:dd:95:33:0c:a4:0d:24:eb:64:50:b4:
+        43:11:f2:43:be:0d:71:98:22:ec:01:af:ec:f7:c7:5c:71:c3:
+        75:91:58:19:e8:dd:a0:f4:b4:f1:bc:10:4a:f3:93:b4:06:49:
+        bb:1f:66:d2:bd:74:47:e1:9a:f9:eb:d7:ab:6d:1f:ba:e1:1d:
+        2c:da
+
+Thawte Personal Basic CA
+========================
+MD5 Fingerprint: E6:0B:D2:C9:CA:2D:88:DB:1A:71:0E:4B:78:EB:02:41
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
+VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
+ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj
+IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X
+DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw
+EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE
+ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
+dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD
+QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53
+dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK
+wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7
+G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF
+AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7
+c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P
+9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 0 (0x0)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Basic CA/Email=personal-basic@thawte.com
+        Validity
+            Not Before: Jan  1 00:00:00 1996 GMT
+            Not After : Dec 31 23:59:59 2020 GMT
+        Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Basic CA/Email=personal-basic@thawte.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:bc:bc:93:53:6d:c0:50:4f:82:15:e6:48:94:35:
+                    a6:5a:be:6f:42:fa:0f:47:ee:77:75:72:dd:8d:49:
+                    9b:96:57:a0:78:d4:ca:3f:51:b3:69:0b:91:76:17:
+                    22:07:97:6a:c4:51:93:4b:e0:8d:ef:37:95:a1:0c:
+                    4d:da:34:90:1d:17:89:97:e0:35:38:57:4a:c0:f4:
+                    08:70:e9:3c:44:7b:50:7e:61:9a:90:e3:23:d3:88:
+                    11:46:27:f5:0b:07:0e:bb:dd:d1:7f:20:0a:88:b9:
+                    56:0b:2e:1c:80:da:f1:e3:9e:29:ef:14:bd:0a:44:
+                    fb:1b:5b:18:d1:bf:23:93:21
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+    Signature Algorithm: md5WithRSAEncryption
+        2d:e2:99:6b:b0:3d:7a:89:d7:59:a2:94:01:1f:2b:dd:12:4b:
+        53:c2:ad:7f:aa:a7:00:5c:91:40:57:25:4a:38:aa:84:70:b9:
+        d9:80:0f:a5:7b:5c:fb:73:c6:bd:d7:8a:61:5c:03:e3:2d:27:
+        a8:17:e0:84:85:42:dc:5e:9b:c6:b7:b2:6d:bb:74:af:e4:3f:
+        cb:a7:b7:b0:e0:5d:be:78:83:25:94:d2:db:81:0f:79:07:6d:
+        4f:f4:39:15:5a:52:01:7b:de:32:d6:4d:38:f6:12:5c:06:50:
+        df:05:5b:bd:14:4b:a1:df:29:ba:3b:41:8d:f7:63:56:a1:df:
+        22:b1
+
+Thawte Personal Freemail CA
+===========================
+MD5 Fingerprint: 1E:74:C3:86:3C:0C:35:C5:3E:C2:7F:EF:3C:AA:3C:D9
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
+VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
+ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt
+YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu
+Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT
+AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa
+MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp
+b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG
+cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh
+d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY
+DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E
+rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq
+uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN
+BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP
+MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa
+/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei
+gQ==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 0 (0x0)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Freemail CA/Email=personal-freemail@thawte.com
+        Validity
+            Not Before: Jan  1 00:00:00 1996 GMT
+            Not After : Dec 31 23:59:59 2020 GMT
+        Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Freemail CA/Email=personal-freemail@thawte.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:d4:69:d7:d4:b0:94:64:5b:71:e9:47:d8:0c:51:
+                    b6:ea:72:91:b0:84:5e:7d:2d:0d:8f:7b:12:df:85:
+                    25:75:28:74:3a:42:2c:63:27:9f:95:7b:4b:ef:7e:
+                    19:87:1d:86:ea:a3:dd:b9:ce:96:64:1a:c2:14:6e:
+                    44:ac:7c:e6:8f:e8:4d:0f:71:1f:40:38:a6:00:a3:
+                    87:78:f6:f9:94:86:5e:ad:ea:c0:5e:76:eb:d9:14:
+                    a3:5d:6e:7a:7c:0c:a5:4b:55:7f:06:19:29:7f:9e:
+                    9a:26:d5:6a:bb:38:24:08:6a:98:c7:b1:da:a3:98:
+                    91:fd:79:db:e5:5a:c4:1c:b9
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+    Signature Algorithm: md5WithRSAEncryption
+        c7:ec:92:7e:4e:f8:f5:96:a5:67:62:2a:a4:f0:4d:11:60:d0:
+        6f:8d:60:58:61:ac:26:bb:52:35:5c:08:cf:30:fb:a8:4a:96:
+        8a:1f:62:42:23:8c:17:0f:f4:ba:64:9c:17:ac:47:29:df:9d:
+        98:5e:d2:6c:60:71:5c:a2:ac:dc:79:e3:e7:6e:00:47:1f:b5:
+        0d:28:e8:02:9d:e4:9a:fd:13:f4:a6:d9:7c:b1:f8:dc:5f:23:
+        26:09:91:80:73:d0:14:1b:de:43:a9:83:25:f2:e6:9c:2f:15:
+        ca:fe:a6:ab:8a:07:75:8b:0c:dd:51:84:6b:e4:f8:d1:ce:77:
+        a2:81
+
+Thawte Personal Premium CA
+==========================
+MD5 Fingerprint: 3A:B2:DE:22:9A:20:93:49:F9:ED:C8:D2:8A:E7:68:0D
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
+VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
+ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p
+dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv
+bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa
+QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY
+BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u
+IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl
+bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu
+Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs
+Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI
+Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD
+ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
+SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH
+b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh
+KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 0 (0x0)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Premium CA/Email=personal-premium@thawte.com
+        Validity
+            Not Before: Jan  1 00:00:00 1996 GMT
+            Not After : Dec 31 23:59:59 2020 GMT
+        Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Premium CA/Email=personal-premium@thawte.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:c9:66:d9:f8:07:44:cf:b9:8c:2e:f0:a1:ef:13:
+                    45:6c:05:df:de:27:16:51:36:41:11:6c:6c:3b:ed:
+                    fe:10:7d:12:9e:e5:9b:42:9a:fe:60:31:c3:66:b7:
+                    73:3a:48:ae:4e:d0:32:37:94:88:b5:0d:b6:d9:f3:
+                    f2:44:d9:d5:88:12:dd:76:4d:f2:1a:fc:6f:23:1e:
+                    7a:f1:d8:98:45:4e:07:10:ef:16:42:d0:43:75:6d:
+                    4a:de:e2:aa:c9:31:ff:1f:00:70:7c:66:cf:10:25:
+                    08:ba:fa:ee:00:e9:46:03:66:27:11:15:3b:aa:5b:
+                    f2:98:dd:36:42:b2:da:88:75
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+    Signature Algorithm: md5WithRSAEncryption
+        69:36:89:f7:34:2a:33:72:2f:6d:3b:d4:22:b2:b8:6f:9a:c5:
+        36:66:0e:1b:3c:a1:b1:75:5a:e6:fd:35:d3:f8:a8:f2:07:6f:
+        85:67:8e:de:2b:b9:e2:17:b0:3a:a0:f0:0e:a2:00:9a:df:f3:
+        14:15:6e:bb:c8:85:5a:98:80:f9:ff:be:74:1d:3d:f3:fe:30:
+        25:d1:37:34:67:fa:a5:71:79:30:61:29:72:c0:e0:2c:4c:fb:
+        56:e4:3a:a8:6f:e5:32:59:52:db:75:28:50:59:0c:f8:0b:19:
+        e4:ac:d9:af:96:8d:2f:50:db:07:c3:ea:1f:ab:33:e0:f5:2b:
+        31:89
+
+Thawte Premium Server CA
+========================
+MD5 Fingerprint: 06:9F:69:79:16:66:90:02:1B:8C:8C:A2:C3:07:6F:3A
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
+VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
+biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
+dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
+MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
+MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
+A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
+b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
+cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
+bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
+VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
+ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
+uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
+9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
+hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
+pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/Email=premium-server@thawte.com
+        Validity
+            Not Before: Aug  1 00:00:00 1996 GMT
+            Not After : Dec 31 23:59:59 2020 GMT
+        Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/Email=premium-server@thawte.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:d2:36:36:6a:8b:d7:c2:5b:9e:da:81:41:62:8f:
+                    38:ee:49:04:55:d6:d0:ef:1c:1b:95:16:47:ef:18:
+                    48:35:3a:52:f4:2b:6a:06:8f:3b:2f:ea:56:e3:af:
+                    86:8d:9e:17:f7:9e:b4:65:75:02:4d:ef:cb:09:a2:
+                    21:51:d8:9b:d0:67:d0:ba:0d:92:06:14:73:d4:93:
+                    cb:97:2a:00:9c:5c:4e:0c:bc:fa:15:52:fc:f2:44:
+                    6e:da:11:4a:6e:08:9f:2f:2d:e3:f9:aa:3a:86:73:
+                    b6:46:53:58:c8:89:05:bd:83:11:b8:73:3f:aa:07:
+                    8d:f4:42:4d:e7:40:9d:1c:37
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+    Signature Algorithm: md5WithRSAEncryption
+        26:48:2c:16:c2:58:fa:e8:16:74:0c:aa:aa:5f:54:3f:f2:d7:
+        c9:78:60:5e:5e:6e:37:63:22:77:36:7e:b2:17:c4:34:b9:f5:
+        08:85:fc:c9:01:38:ff:4d:be:f2:16:42:43:e7:bb:5a:46:fb:
+        c1:c6:11:1f:f1:4a:b0:28:46:c9:c3:c4:42:7d:bc:fa:ab:59:
+        6e:d5:b7:51:88:11:e3:a4:85:19:6b:82:4c:a4:0c:12:ad:e9:
+        a4:ae:3f:f1:c3:49:65:9a:8c:c5:c8:3e:25:b7:94:99:bb:92:
+        32:71:07:f0:86:5e:ed:50:27:a6:0d:a6:23:f9:bb:cb:a6:07:
+        14:42
+
+Thawte Server CA
+================
+MD5 Fingerprint: C5:70:C4:A2:ED:53:78:0C:C8:10:53:81:64:CB:D0:1D
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
+VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
+biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
+MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
+MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
+DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
+dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
+cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
+DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
+gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
+yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
+L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
+EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
+7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
+QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
+qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/Email=server-certs@thawte.com
+        Validity
+            Not Before: Aug  1 00:00:00 1996 GMT
+            Not After : Dec 31 23:59:59 2020 GMT
+        Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/Email=server-certs@thawte.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:d3:a4:50:6e:c8:ff:56:6b:e6:cf:5d:b6:ea:0c:
+                    68:75:47:a2:aa:c2:da:84:25:fc:a8:f4:47:51:da:
+                    85:b5:20:74:94:86:1e:0f:75:c9:e9:08:61:f5:06:
+                    6d:30:6e:15:19:02:e9:52:c0:62:db:4d:99:9e:e2:
+                    6a:0c:44:38:cd:fe:be:e3:64:09:70:c5:fe:b1:6b:
+                    29:b6:2f:49:c8:3b:d4:27:04:25:10:97:2f:e7:90:
+                    6d:c0:28:42:99:d7:4c:43:de:c3:f5:21:6d:54:9f:
+                    5d:c3:58:e1:c0:e4:d9:5b:b0:b8:dc:b4:7b:df:36:
+                    3a:c2:b5:66:22:12:d6:87:0d
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+    Signature Algorithm: md5WithRSAEncryption
+        07:fa:4c:69:5c:fb:95:cc:46:ee:85:83:4d:21:30:8e:ca:d9:
+        a8:6f:49:1a:e6:da:51:e3:60:70:6c:84:61:11:a1:1a:c8:48:
+        3e:59:43:7d:4f:95:3d:a1:8b:b7:0b:62:98:7a:75:8a:dd:88:
+        4e:4e:9e:40:db:a8:cc:32:74:b9:6f:0d:c6:e3:b3:44:0b:d9:
+        8a:6f:9a:29:9b:99:18:28:3b:d1:e3:40:28:9a:5a:3c:d5:b5:
+        e7:20:1b:8b:ca:a4:ab:8d:e9:51:d9:e2:4c:2c:59:a9:da:b9:
+        b2:75:1b:f6:42:f2:ef:c7:f2:18:f9:89:bc:a3:ff:8a:23:2e:
+        70:47
+
+Thawte Universal CA Root
+========================
+MD5 Fingerprint: 17:AF:71:16:52:7B:73:65:22:05:29:28:84:71:9D:13
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIRIjCCCQoCAQAwDQYJKoZIhvcNAQEFBQAwVzEPMA0GA1UEChMGVGhhd3RlMSEw
+HwYDVQQLExhUaGF3dGUgVW5pdmVyc2FsIENBIFJvb3QxITAfBgNVBAMTGFRoYXd0
+ZSBVbml2ZXJzYWwgQ0EgUm9vdDAeFw05OTEyMDUxMzU2MDVaFw0zNzA0MDMxMzU2
+MDVaMFcxDzANBgNVBAoTBlRoYXd0ZTEhMB8GA1UECxMYVGhhd3RlIFVuaXZlcnNh
+bCBDQSBSb290MSEwHwYDVQQDExhUaGF3dGUgVW5pdmVyc2FsIENBIFJvb3Qwgggi
+MA0GCSqGSIb3DQEBAQUAA4IIDwAwgggKAoIIAQDiiQVtw3+tpok6/7vHzZ03seHS
+IR6bYSoV53tXT1U80Lv52T0+przstK1TmhYC6wty/Yryj0QFxevT5b22RDnm+0e/
+ap4KlRjiaOLWltYhrYj99Rf109pCpZDtKZWWdTrah6HU9dOH3gVipuNmdJLPpby7
+32j/cXVWQVk16zNaZlHy0qMKwYzOc1wRby2MlYyRsf3P5a1WlcyFkoOQVUHJwnft
++aN0QgpoCPPQ0WX9Zyw0/yR/53nIBzslV92kDJg9vuDMGWXb8lSir0LUneKuhCMl
+CTMStWoedsSL2UkAbF66H/Ib2mfKJ6qjRCMbg4LO8qsz7VSk3MmrWWXROA7BPhtn
+j9Z1AeBVIt12d+yO3fTPeSJtuVcD9ZkIpzw+NPvEF64jWM0k8yPKagIolAGBNLRs
+a66LGsOj0gk8FlT1Nl8k459KoeJkxhbDpoF6JDZHjsFeDvv5FXgE1g5Z2Z1YZmLS
+lCkyMsh4uWb2tVbhbMYUS5ZSWZECJGpVR9c/tiMaYHeXLuJAr54EV56tEcXJQ3Dv
+SLRerBxpLi6C1VuLvoK+GRRe5w0ix1Eb/x6b8TCPcTEGszQnj196ZoJPii0Tq0LP
+IVael45mNg+Wm+Ur9AKpKmqMLMTDuHAsLSkeP1B3Hm0qVORVCpE4ocW1ZqJ2Wu4P
+v7Rn4ShuD+E2oYLRv9R34cRnMpN4yOdUU/4jeeZozCaQ9hBjXSpvkS2kczJRIfK7
+Fd+qJAhIBt6hnia/uoO/fKTIoIy90v+8hGknEyQYxEUYIyZeGBTKLoiHYqNT5iG3
+uIV7moW7FSZy+Ln3anQPST+SvqkFt5knv78JF0uZTK0REHzfdDH2jyZfqoiuOFfI
+VS3T+9gbUZm+JRs6usB9G+3O0km5z/PFfYmQgdhpSCAQo/jvklEYMosRGMA/G4VW
+zlfJ8oJkxt8CCS5KES+xJ203UvDwFmHxZ43fh3Kvh9rP+1CUbtSUheuKLOoh9ZZK
+RNXgzmp0RE3QBdOHFe020KSLZlVwk+5HBsF+LqUYeWfzKIXxcPcOg6R+VJ5adjLL
+ZRu4zfvIKAPSVJHRp8WFQwgXdqXmL2cI2KGigi0M+MGvY9RQd21rRkpBhdWQX3kt
+xOzXEYdAiuFo4mT4VTL7b5Ms2nfZIcEX5TYsTn6Qf6yUKzJnvjhQdriuQbnXIcUJ
+TGDIo1HENJtXN9/LyTNXi+v7dp8ZTcVqHypFrivtL42npQDLBPolYi50SBvKKoy6
+27Z+9rsCfKnD21h4ob/w/hoQVRHO6GlOlmXGFwPWB2iMVIKuHCJVP/H0CZcowEb3
+TgslHfcH1wkdOhhXODvoMwbnj3hGHlv1BrbsuKYN8boTS9YYIN1pM0ozFa64yJiK
+JyyTvC377jO/ZuZNurabBlVgl0u8RM1+9KHYqi/AAighFmJ42whU8vz0NOPGjxxD
+V86QGkvcLjsokYk/eto1HY4s7kns9DOtyVOojJ8EUz4kHFLJEvliV6O87izrQHwg
+I3ArlflzF4rRwRxpprc4mmf3cB16WgxAz2IPhTzCAk5+tfbFKimEsx83KuGqckLE
+7Wsaj5IcXb7R8lvyq6qp0vW4pEErK5FuEkjKmNg3jcjtADC1tgROfpzahOzA+nvl
+HYikU0awlORcG6ElLA9IUneXCWzsWxgzgwLlgn7NhSEwEf0nT8/kHuw/pVds6Sow
+GSqI5cNpOKtvOXF/hOFBw+HMKokgUi6DD2w5P0stFqwt8CSsAHP0m7MGPwW4FIUf
+q55cPJ5inQ5tO4AJ/ALqopd0ysf541bhw8qlpprAkOAkElPSwovavu0CQ15n4YmY
+ee7LqsrDG9znpUalfGsWh7ZaKNfbJzxepb22Ud0fQ887Jsg6jSVhwUn0PBvJROqv
+HMIrlAEqDjDRW4srR+XD0QQDmw45LNYn1OZwWtl1zyrYyQAF5BOI7MM5+4dhMDZD
+A8ienKIGwi/F/PCAY7FUBKBMqS7G9XZ62NDk1JQR5RW1eAbcuICPmakgMz0QhUxl
+Cco+WF5gk5qqYl3AUQYcXWCgDZxLQ/anFiGkh6rywS7ukjC4nt/fEAGLhglw2Gyo
+t1AeFpa092f9NTohkCoyxwB7TQcQCbkvc9gYfmeZBE8G/FDHhZudQJ2zljf6pdyy
+ck7vTgks/ZH9Tfe7pqE+q3uiA0CmqVUn4vr5Gc6HdarxdTbz87iR+JHDi3UTjkxl
+mhY5auU06HqWWX81sAD9W2n8Qyb69Shu/ofZfiT7tKCCblSi/66/YrT0cgHCy5hH
+mOFMtReAgM6PpijuHkVq+9/xHfxaO9bq9GwdYklXO4qPhurwUwTOnBZo/7q5/IgP
+R/cCRHJAuMo7LVOd3DxWjFl7aBosjXG7bADHGs5vQJKxoy8P2UTyo3Aunu4OrjLQ
+Oz6LB+rmebNcKeJ9a6he+Vox6AiWoowDmEbxuH2QVCbtdmL+numabl7JScdcNFMp
+VNns5EbhgDt12d/7edWH8bqe6xnOTFJz5luHriVPOXnMxrj5EHvs8JtxpAWg0ynT
+Tn8f9C0oeMxVlXsekS/MVhhzi7LbvGkH5tDYT+2i/1iFo23gSlO3Z32NDFxbe3co
+AjVEegTTKEPIazAXXTK4KTW6dto7FEp2GFik+JI8nk0zb0ZrCNkxSGjd9PskVjSy
+z2lmvkjSimYizfJpzcJTE0UpQSLWXZgftqSyo8LuAi9RG9yDpOxwJajUCGEyb+Sh
+gS58Y3L6KWW8cETPXQIDAQABMA0GCSqGSIb3DQEBBQUAA4IIAQBVmjRqIgZpCUUz
+x66pXMcJTpuGvEGQ1JRS9s0jKZRLIs3ovf6dzVLyve2rh8mrq0YEtL2iPyIwR1DA
+S4x2DwP1ktKxLcR6NZzJc4frpp/eD3ON03+Z2LqPb8Tzvhqui6KUNpDi5euNBfT8
+Zd+V8cSUTRdW1588j1A853e/lYYmZPtq/8ba6YyuQrtp5TPG2OkNxlUhScEMtKP5
+m0tc3oNPQQPOKnloOH3wVEkg9bYQ/wjcM2aWm/8G3gCe185WQ5pR/HDN9vBRo7fN
+tFyFYs1xt8YrIyvdw25AQvo3/zcc9npXlIeFI9fUycdfwU0vyQ3XXOycJe6eMIKR
+lnK4dR34CWhXl7ItS+4l7HokKe5y1JwT26vcAwrYShTJCFdEXaG1U4A08hSXz1Le
+og6KEOkU79BgvmGh8SVd1RhzP5MQypbus0DS26NVz1dapQ5PdUff6veQmm31cC4d
+FBw3ZARZULDccoZvnDc9XSivc1Xv0u4kdHQT79zbMUn7P2P10wg+M6XnnQreUyxR
+jmfbm0FlQVC91KSWbIe8EuCUx9PA5MtzWACD4awnhdadU51cvQo+A0OcDJH1bXv4
+QHJ1qxF2kSvhxqofcGl2cBUJ/pPQ1i23FWqbZ1y0aZ8lpn2K+30iqXHyzk6MuCEt
+3v5BcQ3/nexzprsHT4gOWEcufqnCx3jdunqeTuAwTmNvhdQgQen6/kNF5/uverLO
+pAUdIppYht/kzkyp/tgWpW/72M5We/XWIO/kR81jJP+5vvFIo8EBcua9wK3tJg3K
+NJ/8Ai0gTwUgriE9DMIgPD/wBITcz4n9uSWRjtBD5rMgq1wt1UCeoEvY9LLMffFY
+Co6H7YisNpbkVqARivKa0LNXozS7Gas44XRrIsQxzgHVGzbjHjhMM5PfQONZV06s
+bnseWj3FHVusyBCCNQIisvx16BCRjcR9eJNHnhydrGtiAliM1hwj1q94woCcpKok
+VBS1FJjG+CsaJMtxMgrimw5pa91+jGTRLmPvDn+xPohMnVXlyW4XBLdB/72KQcsl
+MW9Edz9HsfyBiAeOBUkgtxHZaQMqA525M4Sa399640Zzo9iijFMZiFVMdLj2RIQr
+0RQtTjkukmj/afyFYhvrVU/vJYRiRZnW2E5vP1MIfR0GlYGAf09OdDaYteKHcJjc
+1/XcUhXmxtZ5ljl/j5XPq4BTrRsLRUAO1Bi9LN6Kd3b98kRHxiHQ5HTw2BgFyHww
+csff8bv8AjCp9EImWQ2TBYKhc+005ThdzVCQ/pT8E7y9/KiiiKdzxLKo0V2IxAKi
+evEEyf6MdMnvHWRBn6welmdkrKsoQced98CYG24HwmR9WoNmVig2nOf7HHcOKKDE
+92t5OQQghMdXk7wboOq860LlqBH+/KxlzP34KIj0pZrlc1HgqJsNA3dO5eCYs4ja
+febGnnwUZsEuU0qSBzegfuk9CeQVfM/9uEGl755mncReBx2H+EGt6ucv0kFjGDf5
+FONN0OX3Q/0V4/k2cwYm3wFPqcNO3iBGd5i0eiQrO3UrTliNm12kxxagvDKIP6GD
+8wDI+NhY6WNdTCu18HJB2Kt3N9ZydK62NpzIpoNJS+DJVgspvgAwy93WyEKKANns
+FdE0cfJbZIf2J9K364awkL8p2yGeNozjIC+VI1FsG8Kk1ebYAkNnoP6bUANEf7vk
+ctXR5NqPkhRk+10UEBJKlQbJZQgpyiGjJjgRySffcGcE/cpIMn9jskV0MVBPh9kg
+cNIhcLHWEJ0zXXiDkW1Vguza5GJjx4FG1xllcipDGZC41yNNTBzgRKlmZ6zucXkn
+Jnhtcg71XUsjtXx8ZekXxjoLDd1eHlHDhrjsf8cnSqVG6GotGcGHo8uZk4dkolUU
+TLdDpZPX59JOeUDKZZlGPT96gHqIaswe5WszRvRQwNUfCbjNii6hJ+tdc6foawrl
+V4IqsPziVFJW8KupEsYjlgcknOC8RqW0IATaCZNj5dQuwn7FMe21FXSGF7mz8yaK
+HQJq2ho/6LrxBG2UUVTiWrRZgx1g0C1zzAe1Joz518aIke+Az10PoWDLRdRCItGx
+cB390LcwkDrGSG1n5TLaj9vjqOMdICWiHOFMuaT2xj9cWA27xrJ3ARaRnxcGDbdA
+PsyPjpxL4J1+mx4Fq4gi+tMoG1cUZEo+JCw4TSFpAHMu0FUtdPIV6JRDPkAqxsa5
+alveoswYUFRdTiqFbPaSiykZfufqSuAiKyW892bPd5pBdPI8FA10afVQg83NLyHb
+IkaK0PdRGpVX8gWLGhntO0XoNsJufvtXIgAfBlOprpPGj3EqMUWS545t5pkiwIP8
+79xXZndPojYx+6ETjeXKo5V9AQxkcDtTQmiAx7udqAA1aZgMqGfYQ+Wqz5XgUZWk
+Fz9CnbgEztN5ecjTihYykuDXou7XN0wvrLh7vkX28RgznHs3piTZvECrAOnDN4ur
+2LbzXoFOsBRrBz4f7ML2RCKVu7Pmb9b5cGW6CoNlqg4TL4MTI1OLQBb6zi/8TQT4
+69isxTbCFVdIOOxVs7Qeuq3SQgYXDXPIV6a+lk2p8sD7eiEc9clwqYKQtfEM1HkQ
+voGm6VxhnHd5mqTDNyZXN8lSLPoI/9BfxmHA9Ha+/N5Oz6tRmXHH33701s8GVhkT
+UwttdFlIGZtTBS2dMlTT5SxTi2Q+1GR744AJFMz+FkZja3Fp+PnLJ/aIVLxFs84C
+yJTuQFv5QgLC/7DYLOsof17JJgGZpw==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 0 (0x0)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: O=Thawte, OU=Thawte Universal CA Root, CN=Thawte Universal CA Root
+        Validity
+            Not Before: Dec  5 13:56:05 1999 GMT
+            Not After : Apr  3 13:56:05 2037 GMT
+        Subject: O=Thawte, OU=Thawte Universal CA Root, CN=Thawte Universal CA Root
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (16384 bit)
+                Modulus (16384 bit):
+                    00:e2:89:05:6d:c3:7f:ad:a6:89:3a:ff:bb:c7:cd:
+                    9d:37:b1:e1:d2:21:1e:9b:61:2a:15:e7:7b:57:4f:
+                    55:3c:d0:bb:f9:d9:3d:3e:a6:bc:ec:b4:ad:53:9a:
+                    16:02:eb:0b:72:fd:8a:f2:8f:44:05:c5:eb:d3:e5:
+                    bd:b6:44:39:e6:fb:47:bf:6a:9e:0a:95:18:e2:68:
+                    e2:d6:96:d6:21:ad:88:fd:f5:17:f5:d3:da:42:a5:
+                    90:ed:29:95:96:75:3a:da:87:a1:d4:f5:d3:87:de:
+                    05:62:a6:e3:66:74:92:cf:a5:bc:bb:df:68:ff:71:
+                    75:56:41:59:35:eb:33:5a:66:51:f2:d2:a3:0a:c1:
+                    8c:ce:73:5c:11:6f:2d:8c:95:8c:91:b1:fd:cf:e5:
+                    ad:56:95:cc:85:92:83:90:55:41:c9:c2:77:ed:f9:
+                    a3:74:42:0a:68:08:f3:d0:d1:65:fd:67:2c:34:ff:
+                    24:7f:e7:79:c8:07:3b:25:57:dd:a4:0c:98:3d:be:
+                    e0:cc:19:65:db:f2:54:a2:af:42:d4:9d:e2:ae:84:
+                    23:25:09:33:12:b5:6a:1e:76:c4:8b:d9:49:00:6c:
+                    5e:ba:1f:f2:1b:da:67:ca:27:aa:a3:44:23:1b:83:
+                    82:ce:f2:ab:33:ed:54:a4:dc:c9:ab:59:65:d1:38:
+                    0e:c1:3e:1b:67:8f:d6:75:01:e0:55:22:dd:76:77:
+                    ec:8e:dd:f4:cf:79:22:6d:b9:57:03:f5:99:08:a7:
+                    3c:3e:34:fb:c4:17:ae:23:58:cd:24:f3:23:ca:6a:
+                    02:28:94:01:81:34:b4:6c:6b:ae:8b:1a:c3:a3:d2:
+                    09:3c:16:54:f5:36:5f:24:e3:9f:4a:a1:e2:64:c6:
+                    16:c3:a6:81:7a:24:36:47:8e:c1:5e:0e:fb:f9:15:
+                    78:04:d6:0e:59:d9:9d:58:66:62:d2:94:29:32:32:
+                    c8:78:b9:66:f6:b5:56:e1:6c:c6:14:4b:96:52:59:
+                    91:02:24:6a:55:47:d7:3f:b6:23:1a:60:77:97:2e:
+                    e2:40:af:9e:04:57:9e:ad:11:c5:c9:43:70:ef:48:
+                    b4:5e:ac:1c:69:2e:2e:82:d5:5b:8b:be:82:be:19:
+                    14:5e:e7:0d:22:c7:51:1b:ff:1e:9b:f1:30:8f:71:
+                    31:06:b3:34:27:8f:5f:7a:66:82:4f:8a:2d:13:ab:
+                    42:cf:21:56:9e:97:8e:66:36:0f:96:9b:e5:2b:f4:
+                    02:a9:2a:6a:8c:2c:c4:c3:b8:70:2c:2d:29:1e:3f:
+                    50:77:1e:6d:2a:54:e4:55:0a:91:38:a1:c5:b5:66:
+                    a2:76:5a:ee:0f:bf:b4:67:e1:28:6e:0f:e1:36:a1:
+                    82:d1:bf:d4:77:e1:c4:67:32:93:78:c8:e7:54:53:
+                    fe:23:79:e6:68:cc:26:90:f6:10:63:5d:2a:6f:91:
+                    2d:a4:73:32:51:21:f2:bb:15:df:aa:24:08:48:06:
+                    de:a1:9e:26:bf:ba:83:bf:7c:a4:c8:a0:8c:bd:d2:
+                    ff:bc:84:69:27:13:24:18:c4:45:18:23:26:5e:18:
+                    14:ca:2e:88:87:62:a3:53:e6:21:b7:b8:85:7b:9a:
+                    85:bb:15:26:72:f8:b9:f7:6a:74:0f:49:3f:92:be:
+                    a9:05:b7:99:27:bf:bf:09:17:4b:99:4c:ad:11:10:
+                    7c:df:74:31:f6:8f:26:5f:aa:88:ae:38:57:c8:55:
+                    2d:d3:fb:d8:1b:51:99:be:25:1b:3a:ba:c0:7d:1b:
+                    ed:ce:d2:49:b9:cf:f3:c5:7d:89:90:81:d8:69:48:
+                    20:10:a3:f8:ef:92:51:18:32:8b:11:18:c0:3f:1b:
+                    85:56:ce:57:c9:f2:82:64:c6:df:02:09:2e:4a:11:
+                    2f:b1:27:6d:37:52:f0:f0:16:61:f1:67:8d:df:87:
+                    72:af:87:da:cf:fb:50:94:6e:d4:94:85:eb:8a:2c:
+                    ea:21:f5:96:4a:44:d5:e0:ce:6a:74:44:4d:d0:05:
+                    d3:87:15:ed:36:d0:a4:8b:66:55:70:93:ee:47:06:
+                    c1:7e:2e:a5:18:79:67:f3:28:85:f1:70:f7:0e:83:
+                    a4:7e:54:9e:5a:76:32:cb:65:1b:b8:cd:fb:c8:28:
+                    03:d2:54:91:d1:a7:c5:85:43:08:17:76:a5:e6:2f:
+                    67:08:d8:a1:a2:82:2d:0c:f8:c1:af:63:d4:50:77:
+                    6d:6b:46:4a:41:85:d5:90:5f:79:2d:c4:ec:d7:11:
+                    87:40:8a:e1:68:e2:64:f8:55:32:fb:6f:93:2c:da:
+                    77:d9:21:c1:17:e5:36:2c:4e:7e:90:7f:ac:94:2b:
+                    32:67:be:38:50:76:b8:ae:41:b9:d7:21:c5:09:4c:
+                    60:c8:a3:51:c4:34:9b:57:37:df:cb:c9:33:57:8b:
+                    eb:fb:76:9f:19:4d:c5:6a:1f:2a:45:ae:2b:ed:2f:
+                    8d:a7:a5:00:cb:04:fa:25:62:2e:74:48:1b:ca:2a:
+                    8c:ba:db:b6:7e:f6:bb:02:7c:a9:c3:db:58:78:a1:
+                    bf:f0:fe:1a:10:55:11:ce:e8:69:4e:96:65:c6:17:
+                    03:d6:07:68:8c:54:82:ae:1c:22:55:3f:f1:f4:09:
+                    97:28:c0:46:f7:4e:0b:25:1d:f7:07:d7:09:1d:3a:
+                    18:57:38:3b:e8:33:06:e7:8f:78:46:1e:5b:f5:06:
+                    b6:ec:b8:a6:0d:f1:ba:13:4b:d6:18:20:dd:69:33:
+                    4a:33:15:ae:b8:c8:98:8a:27:2c:93:bc:2d:fb:ee:
+                    33:bf:66:e6:4d:ba:b6:9b:06:55:60:97:4b:bc:44:
+                    cd:7e:f4:a1:d8:aa:2f:c0:02:28:21:16:62:78:db:
+                    08:54:f2:fc:f4:34:e3:c6:8f:1c:43:57:ce:90:1a:
+                    4b:dc:2e:3b:28:91:89:3f:7a:da:35:1d:8e:2c:ee:
+                    49:ec:f4:33:ad:c9:53:a8:8c:9f:04:53:3e:24:1c:
+                    52:c9:12:f9:62:57:a3:bc:ee:2c:eb:40:7c:20:23:
+                    70:2b:95:f9:73:17:8a:d1:c1:1c:69:a6:b7:38:9a:
+                    67:f7:70:1d:7a:5a:0c:40:cf:62:0f:85:3c:c2:02:
+                    4e:7e:b5:f6:c5:2a:29:84:b3:1f:37:2a:e1:aa:72:
+                    42:c4:ed:6b:1a:8f:92:1c:5d:be:d1:f2:5b:f2:ab:
+                    aa:a9:d2:f5:b8:a4:41:2b:2b:91:6e:12:48:ca:98:
+                    d8:37:8d:c8:ed:00:30:b5:b6:04:4e:7e:9c:da:84:
+                    ec:c0:fa:7b:e5:1d:88:a4:53:46:b0:94:e4:5c:1b:
+                    a1:25:2c:0f:48:52:77:97:09:6c:ec:5b:18:33:83:
+                    02:e5:82:7e:cd:85:21:30:11:fd:27:4f:cf:e4:1e:
+                    ec:3f:a5:57:6c:e9:2a:30:19:2a:88:e5:c3:69:38:
+                    ab:6f:39:71:7f:84:e1:41:c3:e1:cc:2a:89:20:52:
+                    2e:83:0f:6c:39:3f:4b:2d:16:ac:2d:f0:24:ac:00:
+                    73:f4:9b:b3:06:3f:05:b8:14:85:1f:ab:9e:5c:3c:
+                    9e:62:9d:0e:6d:3b:80:09:fc:02:ea:a2:97:74:ca:
+                    c7:f9:e3:56:e1:c3:ca:a5:a6:9a:c0:90:e0:24:12:
+                    53:d2:c2:8b:da:be:ed:02:43:5e:67:e1:89:98:79:
+                    ee:cb:aa:ca:c3:1b:dc:e7:a5:46:a5:7c:6b:16:87:
+                    b6:5a:28:d7:db:27:3c:5e:a5:bd:b6:51:dd:1f:43:
+                    cf:3b:26:c8:3a:8d:25:61:c1:49:f4:3c:1b:c9:44:
+                    ea:af:1c:c2:2b:94:01:2a:0e:30:d1:5b:8b:2b:47:
+                    e5:c3:d1:04:03:9b:0e:39:2c:d6:27:d4:e6:70:5a:
+                    d9:75:cf:2a:d8:c9:00:05:e4:13:88:ec:c3:39:fb:
+                    87:61:30:36:43:03:c8:9e:9c:a2:06:c2:2f:c5:fc:
+                    f0:80:63:b1:54:04:a0:4c:a9:2e:c6:f5:76:7a:d8:
+                    d0:e4:d4:94:11:e5:15:b5:78:06:dc:b8:80:8f:99:
+                    a9:20:33:3d:10:85:4c:65:09:ca:3e:58:5e:60:93:
+                    9a:aa:62:5d:c0:51:06:1c:5d:60:a0:0d:9c:4b:43:
+                    f6:a7:16:21:a4:87:aa:f2:c1:2e:ee:92:30:b8:9e:
+                    df:df:10:01:8b:86:09:70:d8:6c:a8:b7:50:1e:16:
+                    96:b4:f7:67:fd:35:3a:21:90:2a:32:c7:00:7b:4d:
+                    07:10:09:b9:2f:73:d8:18:7e:67:99:04:4f:06:fc:
+                    50:c7:85:9b:9d:40:9d:b3:96:37:fa:a5:dc:b2:72:
+                    4e:ef:4e:09:2c:fd:91:fd:4d:f7:bb:a6:a1:3e:ab:
+                    7b:a2:03:40:a6:a9:55:27:e2:fa:f9:19:ce:87:75:
+                    aa:f1:75:36:f3:f3:b8:91:f8:91:c3:8b:75:13:8e:
+                    4c:65:9a:16:39:6a:e5:34:e8:7a:96:59:7f:35:b0:
+                    00:fd:5b:69:fc:43:26:fa:f5:28:6e:fe:87:d9:7e:
+                    24:fb:b4:a0:82:6e:54:a2:ff:ae:bf:62:b4:f4:72:
+                    01:c2:cb:98:47:98:e1:4c:b5:17:80:80:ce:8f:a6:
+                    28:ee:1e:45:6a:fb:df:f1:1d:fc:5a:3b:d6:ea:f4:
+                    6c:1d:62:49:57:3b:8a:8f:86:ea:f0:53:04:ce:9c:
+                    16:68:ff:ba:b9:fc:88:0f:47:f7:02:44:72:40:b8:
+                    ca:3b:2d:53:9d:dc:3c:56:8c:59:7b:68:1a:2c:8d:
+                    71:bb:6c:00:c7:1a:ce:6f:40:92:b1:a3:2f:0f:d9:
+                    44:f2:a3:70:2e:9e:ee:0e:ae:32:d0:3b:3e:8b:07:
+                    ea:e6:79:b3:5c:29:e2:7d:6b:a8:5e:f9:5a:31:e8:
+                    08:96:a2:8c:03:98:46:f1:b8:7d:90:54:26:ed:76:
+                    62:fe:9e:e9:9a:6e:5e:c9:49:c7:5c:34:53:29:54:
+                    d9:ec:e4:46:e1:80:3b:75:d9:df:fb:79:d5:87:f1:
+                    ba:9e:eb:19:ce:4c:52:73:e6:5b:87:ae:25:4f:39:
+                    79:cc:c6:b8:f9:10:7b:ec:f0:9b:71:a4:05:a0:d3:
+                    29:d3:4e:7f:1f:f4:2d:28:78:cc:55:95:7b:1e:91:
+                    2f:cc:56:18:73:8b:b2:db:bc:69:07:e6:d0:d8:4f:
+                    ed:a2:ff:58:85:a3:6d:e0:4a:53:b7:67:7d:8d:0c:
+                    5c:5b:7b:77:28:02:35:44:7a:04:d3:28:43:c8:6b:
+                    30:17:5d:32:b8:29:35:ba:76:da:3b:14:4a:76:18:
+                    58:a4:f8:92:3c:9e:4d:33:6f:46:6b:08:d9:31:48:
+                    68:dd:f4:fb:24:56:34:b2:cf:69:66:be:48:d2:8a:
+                    66:22:cd:f2:69:cd:c2:53:13:45:29:41:22:d6:5d:
+                    98:1f:b6:a4:b2:a3:c2:ee:02:2f:51:1b:dc:83:a4:
+                    ec:70:25:a8:d4:08:61:32:6f:e4:a1:81:2e:7c:63:
+                    72:fa:29:65:bc:70:44:cf:5d
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        55:9a:34:6a:22:06:69:09:45:33:c7:ae:a9:5c:c7:09:4e:9b:
+        86:bc:41:90:d4:94:52:f6:cd:23:29:94:4b:22:cd:e8:bd:fe:
+        9d:cd:52:f2:bd:ed:ab:87:c9:ab:ab:46:04:b4:bd:a2:3f:22:
+        30:47:50:c0:4b:8c:76:0f:03:f5:92:d2:b1:2d:c4:7a:35:9c:
+        c9:73:87:eb:a6:9f:de:0f:73:8d:d3:7f:99:d8:ba:8f:6f:c4:
+        f3:be:1a:ae:8b:a2:94:36:90:e2:e5:eb:8d:05:f4:fc:65:df:
+        95:f1:c4:94:4d:17:56:d7:9f:3c:8f:50:3c:e7:77:bf:95:86:
+        26:64:fb:6a:ff:c6:da:e9:8c:ae:42:bb:69:e5:33:c6:d8:e9:
+        0d:c6:55:21:49:c1:0c:b4:a3:f9:9b:4b:5c:de:83:4f:41:03:
+        ce:2a:79:68:38:7d:f0:54:49:20:f5:b6:10:ff:08:dc:33:66:
+        96:9b:ff:06:de:00:9e:d7:ce:56:43:9a:51:fc:70:cd:f6:f0:
+        51:a3:b7:cd:b4:5c:85:62:cd:71:b7:c6:2b:23:2b:dd:c3:6e:
+        40:42:fa:37:ff:37:1c:f6:7a:57:94:87:85:23:d7:d4:c9:c7:
+        5f:c1:4d:2f:c9:0d:d7:5c:ec:9c:25:ee:9e:30:82:91:96:72:
+        b8:75:1d:f8:09:68:57:97:b2:2d:4b:ee:25:ec:7a:24:29:ee:
+        72:d4:9c:13:db:ab:dc:03:0a:d8:4a:14:c9:08:57:44:5d:a1:
+        b5:53:80:34:f2:14:97:cf:52:de:a2:0e:8a:10:e9:14:ef:d0:
+        60:be:61:a1:f1:25:5d:d5:18:73:3f:93:10:ca:96:ee:b3:40:
+        d2:db:a3:55:cf:57:5a:a5:0e:4f:75:47:df:ea:f7:90:9a:6d:
+        f5:70:2e:1d:14:1c:37:64:04:59:50:b0:dc:72:86:6f:9c:37:
+        3d:5d:28:af:73:55:ef:d2:ee:24:74:74:13:ef:dc:db:31:49:
+        fb:3f:63:f5:d3:08:3e:33:a5:e7:9d:0a:de:53:2c:51:8e:67:
+        db:9b:41:65:41:50:bd:d4:a4:96:6c:87:bc:12:e0:94:c7:d3:
+        c0:e4:cb:73:58:00:83:e1:ac:27:85:d6:9d:53:9d:5c:bd:0a:
+        3e:03:43:9c:0c:91:f5:6d:7b:f8:40:72:75:ab:11:76:91:2b:
+        e1:c6:aa:1f:70:69:76:70:15:09:fe:93:d0:d6:2d:b7:15:6a:
+        9b:67:5c:b4:69:9f:25:a6:7d:8a:fb:7d:22:a9:71:f2:ce:4e:
+        8c:b8:21:2d:de:fe:41:71:0d:ff:9d:ec:73:a6:bb:07:4f:88:
+        0e:58:47:2e:7e:a9:c2:c7:78:dd:ba:7a:9e:4e:e0:30:4e:63:
+        6f:85:d4:20:41:e9:fa:fe:43:45:e7:fb:af:7a:b2:ce:a4:05:
+        1d:22:9a:58:86:df:e4:ce:4c:a9:fe:d8:16:a5:6f:fb:d8:ce:
+        56:7b:f5:d6:20:ef:e4:47:cd:63:24:ff:b9:be:f1:48:a3:c1:
+        01:72:e6:bd:c0:ad:ed:26:0d:ca:34:9f:fc:02:2d:20:4f:05:
+        20:ae:21:3d:0c:c2:20:3c:3f:f0:04:84:dc:cf:89:fd:b9:25:
+        91:8e:d0:43:e6:b3:20:ab:5c:2d:d5:40:9e:a0:4b:d8:f4:b2:
+        cc:7d:f1:58:0a:8e:87:ed:88:ac:36:96:e4:56:a0:11:8a:f2:
+        9a:d0:b3:57:a3:34:bb:19:ab:38:e1:74:6b:22:c4:31:ce:01:
+        d5:1b:36:e3:1e:38:4c:33:93:df:40:e3:59:57:4e:ac:6e:7b:
+        1e:5a:3d:c5:1d:5b:ac:c8:10:82:35:02:22:b2:fc:75:e8:10:
+        91:8d:c4:7d:78:93:47:9e:1c:9d:ac:6b:62:02:58:8c:d6:1c:
+        23:d6:af:78:c2:80:9c:a4:aa:24:54:14:b5:14:98:c6:f8:2b:
+        1a:24:cb:71:32:0a:e2:9b:0e:69:6b:dd:7e:8c:64:d1:2e:63:
+        ef:0e:7f:b1:3e:88:4c:9d:55:e5:c9:6e:17:04:b7:41:ff:bd:
+        8a:41:cb:25:31:6f:44:77:3f:47:b1:fc:81:88:07:8e:05:49:
+        20:b7:11:d9:69:03:2a:03:9d:b9:33:84:9a:df:df:7a:e3:46:
+        73:a3:d8:a2:8c:53:19:88:55:4c:74:b8:f6:44:84:2b:d1:14:
+        2d:4e:39:2e:92:68:ff:69:fc:85:62:1b:eb:55:4f:ef:25:84:
+        62:45:99:d6:d8:4e:6f:3f:53:08:7d:1d:06:95:81:80:7f:4f:
+        4e:74:36:98:b5:e2:87:70:98:dc:d7:f5:dc:52:15:e6:c6:d6:
+        79:96:39:7f:8f:95:cf:ab:80:53:ad:1b:0b:45:40:0e:d4:18:
+        bd:2c:de:8a:77:76:fd:f2:44:47:c6:21:d0:e4:74:f0:d8:18:
+        05:c8:7c:30:72:c7:df:f1:bb:fc:02:30:a9:f4:42:26:59:0d:
+        93:05:82:a1:73:ed:34:e5:38:5d:cd:50:90:fe:94:fc:13:bc:
+        bd:fc:a8:a2:88:a7:73:c4:b2:a8:d1:5d:88:c4:02:a2:7a:f1:
+        04:c9:fe:8c:74:c9:ef:1d:64:41:9f:ac:1e:96:67:64:ac:ab:
+        28:41:c7:9d:f7:c0:98:1b:6e:07:c2:64:7d:5a:83:66:56:28:
+        36:9c:e7:fb:1c:77:0e:28:a0:c4:f7:6b:79:39:04:20:84:c7:
+        57:93:bc:1b:a0:ea:bc:eb:42:e5:a8:11:fe:fc:ac:65:cc:fd:
+        f8:28:88:f4:a5:9a:e5:73:51:e0:a8:9b:0d:03:77:4e:e5:e0:
+        98:b3:88:da:7d:e6:c6:9e:7c:14:66:c1:2e:53:4a:92:07:37:
+        a0:7e:e9:3d:09:e4:15:7c:cf:fd:b8:41:a5:ef:9e:66:9d:c4:
+        5e:07:1d:87:f8:41:ad:ea:e7:2f:d2:41:63:18:37:f9:14:e3:
+        4d:d0:e5:f7:43:fd:15:e3:f9:36:73:06:26:df:01:4f:a9:c3:
+        4e:de:20:46:77:98:b4:7a:24:2b:3b:75:2b:4e:58:8d:9b:5d:
+        a4:c7:16:a0:bc:32:88:3f:a1:83:f3:00:c8:f8:d8:58:e9:63:
+        5d:4c:2b:b5:f0:72:41:d8:ab:77:37:d6:72:74:ae:b6:36:9c:
+        c8:a6:83:49:4b:e0:c9:56:0b:29:be:00:30:cb:dd:d6:c8:42:
+        8a:00:d9:ec:15:d1:34:71:f2:5b:64:87:f6:27:d2:b7:eb:86:
+        b0:90:bf:29:db:21:9e:36:8c:e3:20:2f:95:23:51:6c:1b:c2:
+        a4:d5:e6:d8:02:43:67:a0:fe:9b:50:03:44:7f:bb:e4:72:d5:
+        d1:e4:da:8f:92:14:64:fb:5d:14:10:12:4a:95:06:c9:65:08:
+        29:ca:21:a3:26:38:11:c9:27:df:70:67:04:fd:ca:48:32:7f:
+        63:b2:45:74:31:50:4f:87:d9:20:70:d2:21:70:b1:d6:10:9d:
+        33:5d:78:83:91:6d:55:82:ec:da:e4:62:63:c7:81:46:d7:19:
+        65:72:2a:43:19:90:b8:d7:23:4d:4c:1c:e0:44:a9:66:67:ac:
+        ee:71:79:27:26:78:6d:72:0e:f5:5d:4b:23:b5:7c:7c:65:e9:
+        17:c6:3a:0b:0d:dd:5e:1e:51:c3:86:b8:ec:7f:c7:27:4a:a5:
+        46:e8:6a:2d:19:c1:87:a3:cb:99:93:87:64:a2:55:14:4c:b7:
+        43:a5:93:d7:e7:d2:4e:79:40:ca:65:99:46:3d:3f:7a:80:7a:
+        88:6a:cc:1e:e5:6b:33:46:f4:50:c0:d5:1f:09:b8:cd:8a:2e:
+        a1:27:eb:5d:73:a7:e8:6b:0a:e5:57:82:2a:b0:fc:e2:54:52:
+        56:f0:ab:a9:12:c6:23:96:07:24:9c:e0:bc:46:a5:b4:20:04:
+        da:09:93:63:e5:d4:2e:c2:7e:c5:31:ed:b5:15:74:86:17:b9:
+        b3:f3:26:8a:1d:02:6a:da:1a:3f:e8:ba:f1:04:6d:94:51:54:
+        e2:5a:b4:59:83:1d:60:d0:2d:73:cc:07:b5:26:8c:f9:d7:c6:
+        88:91:ef:80:cf:5d:0f:a1:60:cb:45:d4:42:22:d1:b1:70:1d:
+        fd:d0:b7:30:90:3a:c6:48:6d:67:e5:32:da:8f:db:e3:a8:e3:
+        1d:20:25:a2:1c:e1:4c:b9:a4:f6:c6:3f:5c:58:0d:bb:c6:b2:
+        77:01:16:91:9f:17:06:0d:b7:40:3e:cc:8f:8e:9c:4b:e0:9d:
+        7e:9b:1e:05:ab:88:22:fa:d3:28:1b:57:14:64:4a:3e:24:2c:
+        38:4d:21:69:00:73:2e:d0:55:2d:74:f2:15:e8:94:43:3e:40:
+        2a:c6:c6:b9:6a:5b:de:a2:cc:18:50:54:5d:4e:2a:85:6c:f6:
+        92:8b:29:19:7e:e7:ea:4a:e0:22:2b:25:bc:f7:66:cf:77:9a:
+        41:74:f2:3c:14:0d:74:69:f5:50:83:cd:cd:2f:21:db:22:46:
+        8a:d0:f7:51:1a:95:57:f2:05:8b:1a:19:ed:3b:45:e8:36:c2:
+        6e:7e:fb:57:22:00:1f:06:53:a9:ae:93:c6:8f:71:2a:31:45:
+        92:e7:8e:6d:e6:99:22:c0:83:fc:ef:dc:57:66:77:4f:a2:36:
+        31:fb:a1:13:8d:e5:ca:a3:95:7d:01:0c:64:70:3b:53:42:68:
+        80:c7:bb:9d:a8:00:35:69:98:0c:a8:67:d8:43:e5:aa:cf:95:
+        e0:51:95:a4:17:3f:42:9d:b8:04:ce:d3:79:79:c8:d3:8a:16:
+        32:92:e0:d7:a2:ee:d7:37:4c:2f:ac:b8:7b:be:45:f6:f1:18:
+        33:9c:7b:37:a6:24:d9:bc:40:ab:00:e9:c3:37:8b:ab:d8:b6:
+        f3:5e:81:4e:b0:14:6b:07:3e:1f:ec:c2:f6:44:22:95:bb:b3:
+        e6:6f:d6:f9:70:65:ba:0a:83:65:aa:0e:13:2f:83:13:23:53:
+        8b:40:16:fa:ce:2f:fc:4d:04:f8:eb:d8:ac:c5:36:c2:15:57:
+        48:38:ec:55:b3:b4:1e:ba:ad:d2:42:06:17:0d:73:c8:57:a6:
+        be:96:4d:a9:f2:c0:fb:7a:21:1c:f5:c9:70:a9:82:90:b5:f1:
+        0c:d4:79:10:be:81:a6:e9:5c:61:9c:77:79:9a:a4:c3:37:26:
+        57:37:c9:52:2c:fa:08:ff:d0:5f:c6:61:c0:f4:76:be:fc:de:
+        4e:cf:ab:51:99:71:c7:df:7e:f4:d6:cf:06:56:19:13:53:0b:
+        6d:74:59:48:19:9b:53:05:2d:9d:32:54:d3:e5:2c:53:8b:64:
+        3e:d4:64:7b:e3:80:09:14:cc:fe:16:46:63:6b:71:69:f8:f9:
+        cb:27:f6:88:54:bc:45:b3:ce:02:c8:94:ee:40:5b:f9:42:02:
+        c2:ff:b0:d8:2c:eb:28:7f:5e:c9:26:01:99:a7
+
+UPS Document Exchange by DST
+============================
+MD5 Fingerprint: 78:A5:FB:10:4B:E4:63:2E:D2:6B:FB:F2:B6:C2:4B:8E
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIID+DCCAuACEQDQHkCLAAACfAAAAAcAAAABMA0GCSqGSIb3DQEBBQUAMIG5MQsw
+CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp
+dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEeMBwGA1UE
+CxMVVW5pdGVkIFBhcmNlbCBTZXJ2aWNlMRkwFwYDVQQDExBEU1QgKFVQUykgUm9v
+dENBMSEwHwYJKoZIhvcNAQkBFhJjYUBkaWdzaWd0cnVzdC5jb20wHhcNOTgxMjEw
+MDAyNTQ2WhcNMDgxMjA3MDAyNTQ2WjCBuTELMAkGA1UEBhMCdXMxDTALBgNVBAgT
+BFV0YWgxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MSQwIgYDVQQKExtEaWdpdGFs
+IFNpZ25hdHVyZSBUcnVzdCBDby4xHjAcBgNVBAsTFVVuaXRlZCBQYXJjZWwgU2Vy
+dmljZTEZMBcGA1UEAxMQRFNUIChVUFMpIFJvb3RDQTEhMB8GCSqGSIb3DQEJARYS
+Y2FAZGlnc2lndHJ1c3QuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEA7xfsrynm2SsnwNt7JJ9m9ASjwq0KyrDNhCuqN/OAoWDvQo/lXXdfV0JU3Svb
+YbJxXpN7b1/rJCvnpPLr8XOzC431Wdcy36yQjk4xuiVNtgym8eWvDOHlb1IDFcHf
+vn5KpqYYRnA/76dNqNz1dNlhekA8oZQo6sKUiMs3FQUZPJViuhwt+yiM0ciekjxb
+EVQ7eNlHO5stSuY+e2vf9PYFzyj2upg2AJ48N4UKnN63pIXFY/23YhRtFx7MioCF
+QjIRsCHinXfJgBZBnuvlFIl/t8O8T8Gfh5uW7GP2+ZBWDpWjIwqMZNqbuxx3sExd
+5sjo9X15LVckP8zjPSyYzxKfFwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQC7OI4E
+IiZYDiFEVsy9WXwpaMtcD8iGVD+BeKetj8xG9xxUuHktW3IFaugh0OwdHf6kNFG+
+7u3OzJwWaOJddXMIQzGRahArEMJLafjJrZio/bjv9qvwXyHvy4VrCe0vSGa1YHLA
+6KDHmNsO9xtzjTQICnvFd2KqMCObsB6LgJhU3AWHs6liWfyLtxWarETszzUa9w8u
+XZJLAch77qA37eQdgg2ZQUMXrdTVyuP5fReiAdAwD0C53LkEgmmDtvkP+gaS96j0
+1hcc8F5/xCnI5uHi/zZoIVGu/6m6hJKtinsz2JDSwXltMzM5dKwbOHGfLAeQ6h3g
+04lfy+8UjSdUpb1G
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            d0:1e:40:8b:00:00:02:7c:00:00:00:07:00:00:00:01
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=United Parcel Service, CN=DST (UPS) RootCA/Email=ca@digsigtrust.com
+        Validity
+            Not Before: Dec 10 00:25:46 1998 GMT
+            Not After : Dec  7 00:25:46 2008 GMT
+        Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=United Parcel Service, CN=DST (UPS) RootCA/Email=ca@digsigtrust.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:ef:17:ec:af:29:e6:d9:2b:27:c0:db:7b:24:9f:
+                    66:f4:04:a3:c2:ad:0a:ca:b0:cd:84:2b:aa:37:f3:
+                    80:a1:60:ef:42:8f:e5:5d:77:5f:57:42:54:dd:2b:
+                    db:61:b2:71:5e:93:7b:6f:5f:eb:24:2b:e7:a4:f2:
+                    eb:f1:73:b3:0b:8d:f5:59:d7:32:df:ac:90:8e:4e:
+                    31:ba:25:4d:b6:0c:a6:f1:e5:af:0c:e1:e5:6f:52:
+                    03:15:c1:df:be:7e:4a:a6:a6:18:46:70:3f:ef:a7:
+                    4d:a8:dc:f5:74:d9:61:7a:40:3c:a1:94:28:ea:c2:
+                    94:88:cb:37:15:05:19:3c:95:62:ba:1c:2d:fb:28:
+                    8c:d1:c8:9e:92:3c:5b:11:54:3b:78:d9:47:3b:9b:
+                    2d:4a:e6:3e:7b:6b:df:f4:f6:05:cf:28:f6:ba:98:
+                    36:00:9e:3c:37:85:0a:9c:de:b7:a4:85:c5:63:fd:
+                    b7:62:14:6d:17:1e:cc:8a:80:85:42:32:11:b0:21:
+                    e2:9d:77:c9:80:16:41:9e:eb:e5:14:89:7f:b7:c3:
+                    bc:4f:c1:9f:87:9b:96:ec:63:f6:f9:90:56:0e:95:
+                    a3:23:0a:8c:64:da:9b:bb:1c:77:b0:4c:5d:e6:c8:
+                    e8:f5:7d:79:2d:57:24:3f:cc:e3:3d:2c:98:cf:12:
+                    9f:17
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        bb:38:8e:04:22:26:58:0e:21:44:56:cc:bd:59:7c:29:68:cb:
+        5c:0f:c8:86:54:3f:81:78:a7:ad:8f:cc:46:f7:1c:54:b8:79:
+        2d:5b:72:05:6a:e8:21:d0:ec:1d:1d:fe:a4:34:51:be:ee:ed:
+        ce:cc:9c:16:68:e2:5d:75:73:08:43:31:91:6a:10:2b:10:c2:
+        4b:69:f8:c9:ad:98:a8:fd:b8:ef:f6:ab:f0:5f:21:ef:cb:85:
+        6b:09:ed:2f:48:66:b5:60:72:c0:e8:a0:c7:98:db:0e:f7:1b:
+        73:8d:34:08:0a:7b:c5:77:62:aa:30:23:9b:b0:1e:8b:80:98:
+        54:dc:05:87:b3:a9:62:59:fc:8b:b7:15:9a:ac:44:ec:cf:35:
+        1a:f7:0f:2e:5d:92:4b:01:c8:7b:ee:a0:37:ed:e4:1d:82:0d:
+        99:41:43:17:ad:d4:d5:ca:e3:f9:7d:17:a2:01:d0:30:0f:40:
+        b9:dc:b9:04:82:69:83:b6:f9:0f:fa:06:92:f7:a8:f4:d6:17:
+        1c:f0:5e:7f:c4:29:c8:e6:e1:e2:ff:36:68:21:51:ae:ff:a9:
+        ba:84:92:ad:8a:7b:33:d8:90:d2:c1:79:6d:33:33:39:74:ac:
+        1b:38:71:9f:2c:07:90:ea:1d:e0:d3:89:5f:cb:ef:14:8d:27:
+        54:a5:bd:46
+
+ValiCert Class 1 VA
+===================
+MD5 Fingerprint: 65:58:AB:15:AD:57:6C:1E:A8:A7:B5:69:AC:BF:FF:EB
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
+IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
+BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
+aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
+9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy
+NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
+azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
+Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
+cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y
+LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+
+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y
+TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0
+LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW
+I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
+nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 1 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com
+        Validity
+            Not Before: Jun 25 22:23:48 1999 GMT
+            Not After : Jun 25 22:23:48 2019 GMT
+        Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 1 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:d8:59:82:7a:89:b8:96:ba:a6:2f:68:6f:58:2e:
+                    a7:54:1c:06:6e:f4:ea:8d:48:bc:31:94:17:f0:f3:
+                    4e:bc:b2:b8:35:92:76:b0:d0:a5:a5:01:d7:00:03:
+                    12:22:19:08:f8:ff:11:23:9b:ce:07:f5:bf:69:1a:
+                    26:fe:4e:e9:d1:7f:9d:2c:40:1d:59:68:6e:a6:f8:
+                    58:b0:9d:1a:8f:d3:3f:f1:dc:19:06:81:a8:0e:e0:
+                    3a:dd:c8:53:45:09:06:e6:0f:70:c3:fa:40:a6:0e:
+                    e2:56:05:0f:18:4d:fc:20:82:d1:73:55:74:8d:76:
+                    72:a0:1d:9d:1d:c0:dd:3f:71
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        50:68:3d:49:f4:2c:1c:06:94:df:95:60:7f:96:7b:17:fe:4f:
+        71:ad:64:c8:dd:77:d2:ef:59:55:e8:3f:e8:8e:05:2a:21:f2:
+        07:d2:b5:a7:52:fe:9c:b1:b6:e2:5b:77:17:40:ea:72:d6:23:
+        cb:28:81:32:c3:00:79:18:ec:59:17:89:c9:c6:6a:1e:71:c9:
+        fd:b7:74:a5:25:45:69:c5:48:ab:19:e1:45:8a:25:6b:19:ee:
+        e5:bb:12:f5:7f:f7:a6:8d:51:c3:f0:9d:74:b7:a9:3e:a0:a5:
+        ff:b6:49:03:13:da:22:cc:ed:71:82:2b:99:cf:3a:b7:f5:2d:
+        72:c8
+
+ValiCert Class 2 VA
+===================
+MD5 Fingerprint: A9:23:75:9B:BA:49:36:6E:31:C2:DB:F2:E7:66:BA:87
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
+IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
+BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
+aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
+9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
+NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
+azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
+Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
+cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
+dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
+WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
+v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
+UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
+IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
+W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com
+        Validity
+            Not Before: Jun 26 00:19:54 1999 GMT
+            Not After : Jun 26 00:19:54 2019 GMT
+        Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:ce:3a:71:ca:e5:ab:c8:59:92:55:d7:ab:d8:74:
+                    0e:f9:ee:d9:f6:55:47:59:65:47:0e:05:55:dc:eb:
+                    98:36:3c:5c:53:5d:d3:30:cf:38:ec:bd:41:89:ed:
+                    25:42:09:24:6b:0a:5e:b3:7c:dd:52:2d:4c:e6:d4:
+                    d6:7d:5a:59:a9:65:d4:49:13:2d:24:4d:1c:50:6f:
+                    b5:c1:85:54:3b:fe:71:e4:d3:5c:42:f9:80:e0:91:
+                    1a:0a:5b:39:36:67:f3:3f:55:7c:1b:3f:b4:5f:64:
+                    73:34:e3:b4:12:bf:87:64:f8:da:12:ff:37:27:c1:
+                    b3:43:bb:ef:7b:6e:2e:69:f7
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        3b:7f:50:6f:6f:50:94:99:49:62:38:38:1f:4b:f8:a5:c8:3e:
+        a7:82:81:f6:2b:c7:e8:c5:ce:e8:3a:10:82:cb:18:00:8e:4d:
+        bd:a8:58:7f:a1:79:00:b5:bb:e9:8d:af:41:d9:0f:34:ee:21:
+        81:19:a0:32:49:28:f4:c4:8e:56:d5:52:33:fd:50:d5:7e:99:
+        6c:03:e4:c9:4c:fc:cb:6c:ab:66:b3:4a:21:8c:e5:b5:0c:32:
+        3e:10:b2:cc:6c:a1:dc:9a:98:4c:02:5b:f3:ce:b9:9e:a5:72:
+        0e:4a:b7:3f:3c:e6:16:68:f8:be:ed:74:4c:bc:5b:d5:62:1f:
+        43:dd
+
+ValiCert Class 3 VA
+===================
+MD5 Fingerprint: A2:6F:53:B7:EE:40:DB:4A:68:E7:FA:18:D9:10:4B:72
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
+IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
+BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
+aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
+9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
+NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
+azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
+Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
+cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
+cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
+2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
+JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
+Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
+n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
+PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com
+        Validity
+            Not Before: Jun 26 00:22:33 1999 GMT
+            Not After : Jun 26 00:22:33 2019 GMT
+        Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:e3:98:51:96:1c:e8:d5:b1:06:81:6a:57:c3:72:
+                    75:93:ab:cf:9e:a6:fc:f3:16:52:d6:2d:4d:9f:35:
+                    44:a8:2e:04:4d:07:49:8a:38:29:f5:77:37:e7:b7:
+                    ab:5d:df:36:71:14:99:8f:dc:c2:92:f1:e7:60:92:
+                    97:ec:d8:48:dc:bf:c1:02:20:c6:24:a4:28:4c:30:
+                    5a:76:6d:b1:5c:f3:dd:de:9e:10:71:a1:88:c7:5b:
+                    9b:41:6d:ca:b0:b8:8e:15:ee:ad:33:2b:cf:47:04:
+                    5c:75:71:0a:98:24:98:29:a7:49:59:a5:dd:f8:b7:
+                    43:62:61:f3:d3:e2:d0:55:3f
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        56:bb:02:58:84:67:08:2c:df:1f:db:7b:49:33:f5:d3:67:9d:
+        f4:b4:0a:10:b3:c9:c5:2c:e2:92:6a:71:78:27:f2:70:83:42:
+        d3:3e:cf:a9:54:f4:f1:d8:92:16:8c:d1:04:cb:4b:ab:c9:9f:
+        45:ae:3c:8a:a9:b0:71:33:5d:c8:c5:57:df:af:a8:35:b3:7f:
+        89:87:e9:e8:25:92:b8:7f:85:7a:ae:d6:bc:1e:37:58:2a:67:
+        c9:91:cf:2a:81:3e:ed:c6:39:df:c0:3e:19:9c:19:cc:13:4d:
+        82:41:b5:8c:de:e0:3d:60:08:20:0f:45:7e:6b:a2:7f:a3:8c:
+        15:ee
+
+VeriSign Class 4 Primary CA
+===========================
+MD5 Fingerprint: 1B:D1:AD:17:8B:7F:22:13:24:F5:26:E2:5D:4E:B9:10
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIICMTCCAZoCBQKmAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
+FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMg
+UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
+Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
+biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
+Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LJ1
+9njQrlpQ9OlQqZ+M1++RlHDo0iSQdomF1t+s5gEXMoDwnZNHvJplnR+Xrr/phnVj
+IIm9gFidBAydqMEk6QvlMXi9/C0MN2qeeIDpRnX57aP7E3vIwUzSo+/1PLBij0pd
+O92VZ48TucE81qcmm+zDO3rZTbxtm+gVAePwR6kCAwEAATANBgkqhkiG9w0BAQIF
+AAOBgQBT3dPwnCR+QKri/AAa19oM/DJhuBUNlvP6Vxt/M3yv6ZiaYch6s7f/sdyZ
+g9ysEvxwyR84Qu1E9oAuW2szaayc01znX1oYx7EteQSWQZGZQbE8DbqEOcY7l/Am
+yY7uvcxClf8exwI/VAx49byqYHwCaejcrOICdmHEPgPq0ook0Q==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            02:a6:00:00:01
+        Signature Algorithm: md2WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority
+        Validity
+            Not Before: Jan 29 00:00:00 1996 GMT
+            Not After : Dec 31 23:59:59 1999 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:d0:b2:75:f6:78:d0:ae:5a:50:f4:e9:50:a9:9f:
+                    8c:d7:ef:91:94:70:e8:d2:24:90:76:89:85:d6:df:
+                    ac:e6:01:17:32:80:f0:9d:93:47:bc:9a:65:9d:1f:
+                    97:ae:bf:e9:86:75:63:20:89:bd:80:58:9d:04:0c:
+                    9d:a8:c1:24:e9:0b:e5:31:78:bd:fc:2d:0c:37:6a:
+                    9e:78:80:e9:46:75:f9:ed:a3:fb:13:7b:c8:c1:4c:
+                    d2:a3:ef:f5:3c:b0:62:8f:4a:5d:3b:dd:95:67:8f:
+                    13:b9:c1:3c:d6:a7:26:9b:ec:c3:3b:7a:d9:4d:bc:
+                    6d:9b:e8:15:01:e3:f0:47:a9
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md2WithRSAEncryption
+        53:dd:d3:f0:9c:24:7e:40:aa:e2:fc:00:1a:d7:da:0c:fc:32:
+        61:b8:15:0d:96:f3:fa:57:1b:7f:33:7c:af:e9:98:9a:61:c8:
+        7a:b3:b7:ff:b1:dc:99:83:dc:ac:12:fc:70:c9:1f:38:42:ed:
+        44:f6:80:2e:5b:6b:33:69:ac:9c:d3:5c:e7:5f:5a:18:c7:b1:
+        2d:79:04:96:41:91:99:41:b1:3c:0d:ba:84:39:c6:3b:97:f0:
+        26:c9:8e:ee:bd:cc:42:95:ff:1e:c7:02:3f:54:0c:78:f5:bc:
+        aa:60:7c:02:69:e8:dc:ac:e2:02:76:61:c4:3e:03:ea:d2:8a:
+        24:d1
+
+Verisign Class 1 Public Primary Certification Authority
+=======================================================
+MD5 Fingerprint: 97:60:E8:57:5F:D3:50:47:E5:43:0C:94:36:8A:B0:62
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
+c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
+NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
+VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp
+bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
+jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N
+H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR
+4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN
+BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo
+EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5
+FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx
+lA==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            cd:ba:7f:56:f0:df:e4:bc:54:fe:22:ac:b3:72:aa:55
+        Signature Algorithm: md2WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority
+        Validity
+            Not Before: Jan 29 00:00:00 1996 GMT
+            Not After : Aug  1 23:59:59 2028 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:e5:19:bf:6d:a3:56:61:2d:99:48:71:f6:67:de:
+                    b9:8d:eb:b7:9e:86:80:0a:91:0e:fa:38:25:af:46:
+                    88:82:e5:73:a8:a0:9b:24:5d:0d:1f:cc:65:6e:0c:
+                    b0:d0:56:84:18:87:9a:06:9b:10:a1:73:df:b4:58:
+                    39:6b:6e:c1:f6:15:d5:a8:a8:3f:aa:12:06:8d:31:
+                    ac:7f:b0:34:d7:8f:34:67:88:09:cd:14:11:e2:4e:
+                    45:56:69:1f:78:02:80:da:dc:47:91:29:bb:36:c9:
+                    63:5c:c5:e0:d7:2d:87:7b:a1:b7:32:b0:7b:30:ba:
+                    2a:2f:31:aa:ee:a3:67:da:db
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md2WithRSAEncryption
+        4c:3f:b8:8b:c6:68:df:ee:43:33:0e:5d:e9:a6:cb:07:84:4d:
+        7a:33:ff:92:1b:f4:36:ad:d8:95:22:36:68:11:6c:7c:42:cc:
+        f3:9c:2e:c4:07:3f:14:b0:0f:4f:ff:90:92:76:f9:e2:bc:4a:
+        e9:8f:cd:a0:80:0a:f7:c5:29:f1:82:22:5d:b8:b1:dd:81:23:
+        a3:7b:25:15:46:30:79:16:f8:ea:05:4b:94:7f:1d:c2:1c:c8:
+        e3:b7:f4:10:40:3c:13:c3:5f:1f:53:e8:48:e4:86:b4:7b:a1:
+        35:b0:7b:25:ba:b8:d3:8e:ab:3f:38:9d:00:34:00:98:f3:d1:
+        71:94
+
+Verisign Class 1 Public Primary Certification Authority - G2
+============================================================
+MD5 Fingerprint: F2:7D:E9:54:E4:A3:22:0D:76:9F:E7:0B:BB:B3:24:2B
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDAjCCAmsCEDnKVIn+UCIy/jLZ2/sbhBkwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
+c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
+MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
+emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
+DTk4MDUxODAwMDAwMFoXDTE4MDUxODIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
+FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
+UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
+YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
+MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
+VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
+Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
+AQABMA0GCSqGSIb3DQEBBQUAA4GBAIv3GhDOdlwHq4OZ3BeAbzQ5XZg+a3Is4cei
+e0ApuXiIukzFo2penm574/ICQQxmvq37rqIUzpLzojSLtLK2JPLl1eDI5WJthHvL
+vrsDi3xXyvA3qZCviu4Dvh0onNkmdqDNxJ1O8K4HFtW+r1cIatCgQkJCHvQgzKV4
+gpUmOIpH
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            39:ca:54:89:fe:50:22:32:fe:32:d9:db:fb:1b:84:19
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network
+        Validity
+            Not Before: May 18 00:00:00 1998 GMT
+            Not After : May 18 23:59:59 2018 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:aa:d0:ba:be:16:2d:b8:83:d4:ca:d2:0f:bc:76:
+                    31:ca:94:d8:1d:93:8c:56:02:bc:d9:6f:1a:6f:52:
+                    36:6e:75:56:0a:55:d3:df:43:87:21:11:65:8a:7e:
+                    8f:bd:21:de:6b:32:3f:1b:84:34:95:05:9d:41:35:
+                    eb:92:eb:96:dd:aa:59:3f:01:53:6d:99:4f:ed:e5:
+                    e2:2a:5a:90:c1:b9:c4:a6:15:cf:c8:45:eb:a6:5d:
+                    8e:9c:3e:f0:64:24:76:a5:cd:ab:1a:6f:b6:d8:7b:
+                    51:61:6e:a6:7f:87:c8:e2:b7:e5:34:dc:41:88:ea:
+                    09:40:be:73:92:3d:6b:e7:75
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        8b:f7:1a:10:ce:76:5c:07:ab:83:99:dc:17:80:6f:34:39:5d:
+        98:3e:6b:72:2c:e1:c7:a2:7b:40:29:b9:78:88:ba:4c:c5:a3:
+        6a:5e:9e:6e:7b:e3:f2:02:41:0c:66:be:ad:fb:ae:a2:14:ce:
+        92:f3:a2:34:8b:b4:b2:b6:24:f2:e5:d5:e0:c8:e5:62:6d:84:
+        7b:cb:be:bb:03:8b:7c:57:ca:f0:37:a9:90:af:8a:ee:03:be:
+        1d:28:9c:d9:26:76:a0:cd:c4:9d:4e:f0:ae:07:16:d5:be:af:
+        57:08:6a:d0:a0:42:42:42:1e:f4:20:cc:a5:78:82:95:26:38:
+        8a:47
+
+Verisign Class 1 Public Primary Certification Authority - G3
+============================================================
+MD5 Fingerprint: B1:47:BC:18:57:D1:18:A0:78:2D:EC:71:E8:2A:95:73
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
+nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
+8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
+ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
+PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
+6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
+n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
+qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
+wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
+ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
+pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
+E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            8b:5b:75:56:84:54:85:0b:00:cf:af:38:48:ce:b1:a4
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 1 Public Primary Certification Authority - G3
+        Validity
+            Not Before: Oct  1 00:00:00 1999 GMT
+            Not After : Jul 16 23:59:59 2036 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 1 Public Primary Certification Authority - G3
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:dd:84:d4:b9:b4:f9:a7:d8:f3:04:78:9c:de:3d:
+                    dc:6c:13:16:d9:7a:dd:24:51:66:c0:c7:26:59:0d:
+                    ac:06:08:c2:94:d1:33:1f:f0:83:35:1f:6e:1b:c8:
+                    de:aa:6e:15:4e:54:27:ef:c4:6d:1a:ec:0b:e3:0e:
+                    f0:44:a5:57:c7:40:58:1e:a3:47:1f:71:ec:60:f6:
+                    6d:94:c8:18:39:ed:fe:42:18:56:df:e4:4c:49:10:
+                    78:4e:01:76:35:63:12:36:dd:66:bc:01:04:36:a3:
+                    55:68:d5:a2:36:09:ac:ab:21:26:54:06:ad:3f:ca:
+                    14:e0:ac:ca:ad:06:1d:95:e2:f8:9d:f1:e0:60:ff:
+                    c2:7f:75:2b:4c:cc:da:fe:87:99:21:ea:ba:fe:3e:
+                    54:d7:d2:59:78:db:3c:6e:cf:a0:13:00:1a:b8:27:
+                    a1:e4:be:67:96:ca:a0:c5:b3:9c:dd:c9:75:9e:eb:
+                    30:9a:5f:a3:cd:d9:ae:78:19:3f:23:e9:5c:db:29:
+                    bd:ad:55:c8:1b:54:8c:63:f6:e8:a6:ea:c7:37:12:
+                    5c:a3:29:1e:02:d9:db:1f:3b:b4:d7:0f:56:47:81:
+                    15:04:4a:af:83:27:d1:c5:58:88:c1:dd:f6:aa:a7:
+                    a3:18:da:68:aa:6d:11:51:e1:bf:65:6b:9f:96:76:
+                    d1:3d
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        ab:66:8d:d7:b3:ba:c7:9a:b6:e6:55:d0:05:f1:9f:31:8d:5a:
+        aa:d9:aa:46:26:0f:71:ed:a5:ad:53:56:62:01:47:2a:44:e9:
+        fe:3f:74:0b:13:9b:b9:f4:4d:1b:b2:d1:5f:b2:b6:d2:88:5c:
+        b3:9f:cd:cb:d4:a7:d9:60:95:84:3a:f8:c1:37:1d:61:ca:e7:
+        b0:c5:e5:91:da:54:a6:ac:31:81:ae:97:de:cd:08:ac:b8:c0:
+        97:80:7f:6e:72:a4:e7:69:13:95:65:1f:c4:93:3c:fd:79:8f:
+        04:d4:3e:4f:ea:f7:9e:ce:cd:67:7c:4f:65:02:ff:91:85:54:
+        73:c7:ff:36:f7:86:2d:ec:d0:5e:4f:ff:11:9f:72:06:d6:b8:
+        1a:f1:4c:0d:26:65:e2:44:80:1e:c7:9f:e3:dd:e8:0a:da:ec:
+        a5:20:80:69:68:a1:4f:7e:e1:6b:cf:07:41:fa:83:8e:bc:38:
+        dd:b0:2e:11:b1:6b:b2:42:cc:9a:bc:f9:48:22:79:4a:19:0f:
+        b2:1c:3e:20:74:d9:6a:c3:be:f2:28:78:13:56:79:4f:6d:50:
+        ea:1b:b0:b5:57:b1:37:66:58:23:f3:dc:0f:df:0a:87:c4:ef:
+        86:05:d5:38:14:60:99:a3:4b:de:06:96:71:2c:f2:db:b6:1f:
+        a4:ef:3f:ee
+
+Verisign Class 2 Public Primary Certification Authority
+=======================================================
+MD5 Fingerprint: B3:9C:25:B1:C3:2E:32:53:80:15:30:9D:4D:02:77:3E
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh
+YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7
+FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G
+CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg
+J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc
+r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            2d:1b:fc:4a:17:8d:a3:91:eb:e7:ff:f5:8b:45:be:0b
+        Signature Algorithm: md2WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority
+        Validity
+            Not Before: Jan 29 00:00:00 1996 GMT
+            Not After : Aug  1 23:59:59 2028 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b6:5a:8b:a3:0d:6a:23:83:80:6b:cf:39:87:f4:
+                    21:13:33:06:4c:25:a2:ed:55:12:97:c5:a7:80:b9:
+                    fa:83:c1:20:a0:fa:2f:15:0d:7c:a1:60:6b:7e:79:
+                    2c:fa:06:0f:3a:ae:f6:1b:6f:b1:d2:ff:2f:28:52:
+                    5f:83:7d:4b:c4:7a:b7:f8:66:1f:80:54:fc:b7:c2:
+                    8e:59:4a:14:57:46:d1:9a:93:be:41:91:03:bb:15:
+                    80:93:5c:eb:e7:cc:08:6c:3f:3e:b3:4a:fc:ff:4b:
+                    6c:23:d5:50:82:26:44:19:8e:23:c3:71:ea:19:24:
+                    47:04:9e:75:bf:c8:a6:00:1f
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md2WithRSAEncryption
+        8a:1b:2b:fa:39:c1:74:d7:5e:d8:19:64:a2:58:4a:2d:37:e0:
+        33:47:0f:ac:ed:f7:aa:db:1e:e4:8b:06:5c:60:27:ca:45:52:
+        ce:16:ef:3f:06:64:e7:94:68:7c:60:33:15:11:69:af:9d:62:
+        8d:a3:03:54:6b:a6:be:e5:ee:05:18:60:04:bf:42:80:fd:d0:
+        a8:a8:1e:01:3b:f7:a3:5c:af:a3:dc:e6:26:80:23:3c:b8:44:
+        74:f7:0a:ae:49:8b:61:78:cc:24:bf:88:8a:a7:0e:ea:73:19:
+        41:fd:4d:03:f0:88:d1:e5:78:8d:a5:2a:4f:f6:97:0d:17:77:
+        ca:d8
+
+Verisign Class 2 Public Primary Certification Authority - G2
+============================================================
+MD5 Fingerprint: 2D:BB:E5:25:D3:D1:65:82:3A:B7:0E:FA:E6:EB:E2:E1
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
+YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
+MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
+aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
+Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
+MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
+IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
+KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
+eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
+AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
+HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
+DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
+AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
+nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
+rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
+jBJ7xUS0rg==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            b9:2f:60:cc:88:9f:a1:7a:46:09:b8:5b:70:6c:8a:af
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network
+        Validity
+            Not Before: May 18 00:00:00 1998 GMT
+            Not After : Aug  1 23:59:59 2028 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:a7:88:01:21:74:2c:e7:1a:03:f0:98:e1:97:3c:
+                    0f:21:08:f1:9c:db:97:e9:9a:fc:c2:04:06:13:be:
+                    5f:52:c8:cc:1e:2c:12:56:2c:b8:01:69:2c:cc:99:
+                    1f:ad:b0:96:ae:79:04:f2:13:39:c1:7b:98:ba:08:
+                    2c:e8:c2:84:13:2c:aa:69:e9:09:f4:c7:a9:02:a4:
+                    42:c2:23:4f:4a:d8:f0:0e:a2:fb:31:6c:c9:e6:6f:
+                    99:27:07:f5:e6:f4:4c:78:9e:6d:eb:46:86:fa:b9:
+                    86:c9:54:f2:b2:c4:af:d4:46:1c:5a:c9:15:30:ff:
+                    0d:6c:f5:2d:0e:6d:ce:7f:77
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        72:2e:f9:7f:d1:f1:71:fb:c4:9e:f6:c5:5e:51:8a:40:98:b8:
+        68:f8:9b:1c:83:d8:e2:9d:bd:ff:ed:a1:e6:66:ea:2f:09:f4:
+        ca:d7:ea:a5:2b:95:f6:24:60:86:4d:44:2e:83:a5:c4:2d:a0:
+        d3:ae:78:69:6f:72:da:6c:ae:08:f0:63:92:37:e6:bb:c4:30:
+        17:ad:77:cc:49:35:aa:cf:d8:8f:d1:be:b7:18:96:47:73:6a:
+        54:22:34:64:2d:b6:16:9b:59:5b:b4:51:59:3a:b3:0b:14:f4:
+        12:df:67:a0:f4:ad:32:64:5e:b1:46:72:27:8c:12:7b:c5:44:
+        b4:ae
+
+Verisign Class 2 Public Primary Certification Authority - G3
+============================================================
+MD5 Fingerprint: F8:BE:C4:63:22:C9:A8:46:74:8B:B8:1D:1E:4A:2B:F6
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
+aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
+IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
+Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
+BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
+Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
+Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
+Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
+IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
+J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
+JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
+wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
+koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
+qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
+Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
+xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
+7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
+sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
+sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
+cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            61:70:cb:49:8c:5f:98:45:29:e7:b0:a6:d9:50:5b:7a
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 2 Public Primary Certification Authority - G3
+        Validity
+            Not Before: Oct  1 00:00:00 1999 GMT
+            Not After : Jul 16 23:59:59 2036 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 2 Public Primary Certification Authority - G3
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:af:0a:0d:c2:d5:2c:db:67:b9:2d:e5:94:27:dd:
+                    a5:be:e0:b0:4d:8f:b3:61:56:3c:d6:7c:c3:f4:cd:
+                    3e:86:cb:a2:88:e2:e1:d8:a4:69:c5:b5:e2:bf:c1:
+                    a6:47:50:5e:46:39:8b:d5:96:ba:b5:6f:14:bf:10:
+                    ce:27:13:9e:05:47:9b:31:7a:13:d8:1f:d9:d3:02:
+                    37:8b:ad:2c:47:f0:8e:81:06:a7:0d:30:0c:eb:f7:
+                    3c:0f:20:1d:dc:72:46:ee:a5:02:c8:5b:c3:c9:56:
+                    69:4c:c5:18:c1:91:7b:0b:d5:13:00:9b:bc:ef:c3:
+                    48:3e:46:60:20:85:2a:d5:90:b6:cd:8b:a0:cc:32:
+                    dd:b7:fd:40:55:b2:50:1c:56:ae:cc:8d:77:4d:c7:
+                    20:4d:a7:31:76:ef:68:92:8a:90:1e:08:81:56:b2:
+                    ad:69:a3:52:d0:cb:1c:c4:23:3d:1f:99:fe:4c:e8:
+                    16:63:8e:c6:08:8e:f6:31:f6:d2:fa:e5:76:dd:b5:
+                    1c:92:a3:49:cd:cd:01:cd:68:cd:a9:69:ba:a3:eb:
+                    1d:0d:9c:a4:20:a6:c1:a0:c5:d1:46:4c:17:6d:d2:
+                    ac:66:3f:96:8c:e0:84:d4:36:ff:22:59:c5:f9:11:
+                    60:a8:5f:04:7d:f2:1a:f6:25:42:61:0f:c4:4a:b8:
+                    3e:89
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        34:26:15:3c:c0:8d:4d:43:49:1d:bd:e9:21:92:d7:66:9c:b7:
+        de:c5:b8:d0:e4:5d:5f:76:22:c0:26:f9:84:3a:3a:f9:8c:b5:
+        fb:ec:60:f1:e8:ce:04:b0:c8:dd:a7:03:8f:30:f3:98:df:a4:
+        e6:a4:31:df:d3:1c:0b:46:dc:72:20:3f:ae:ee:05:3c:a4:33:
+        3f:0b:39:ac:70:78:73:4b:99:2b:df:30:c2:54:b0:a8:3b:55:
+        a1:fe:16:28:cd:42:bd:74:6e:80:db:27:44:a7:ce:44:5d:d4:
+        1b:90:98:0d:1e:42:94:b1:00:2c:04:d0:74:a3:02:05:22:63:
+        63:cd:83:b5:fb:c1:6d:62:6b:69:75:fd:5d:70:41:b9:f5:bf:
+        7c:df:be:c1:32:73:22:21:8b:58:81:7b:15:91:7a:ba:e3:64:
+        48:b0:7f:fb:36:25:da:95:d0:f1:24:14:17:dd:18:80:6b:46:
+        23:39:54:f5:8e:62:09:04:1d:94:90:a6:9b:e6:25:e2:42:45:
+        aa:b8:90:ad:be:08:8f:a9:0b:42:18:94:cf:72:39:e1:b1:43:
+        e0:28:cf:b7:e7:5a:6c:13:6b:49:b3:ff:e3:18:7c:89:8b:33:
+        5d:ac:33:d7:a7:f9:da:3a:55:c9:58:10:f9:aa:ef:5a:b6:cf:
+        4b:4b:df:2a
+
+Verisign Class 3 Public Primary Certification Authority
+=======================================================
+MD5 Fingerprint: 10:FC:63:5D:F6:26:3E:0D:F3:25:BE:5F:79:CD:67:67
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
+BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
+I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
+CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
+lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
+AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            70:ba:e4:1d:10:d9:29:34:b6:38:ca:7b:03:cc:ba:bf
+        Signature Algorithm: md2WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority
+        Validity
+            Not Before: Jan 29 00:00:00 1996 GMT
+            Not After : Aug  1 23:59:59 2028 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:c9:5c:59:9e:f2:1b:8a:01:14:b4:10:df:04:40:
+                    db:e3:57:af:6a:45:40:8f:84:0c:0b:d1:33:d9:d9:
+                    11:cf:ee:02:58:1f:25:f7:2a:a8:44:05:aa:ec:03:
+                    1f:78:7f:9e:93:b9:9a:00:aa:23:7d:d6:ac:85:a2:
+                    63:45:c7:72:27:cc:f4:4c:c6:75:71:d2:39:ef:4f:
+                    42:f0:75:df:0a:90:c6:8e:20:6f:98:0f:f8:ac:23:
+                    5f:70:29:36:a4:c9:86:e7:b1:9a:20:cb:53:a5:85:
+                    e7:3d:be:7d:9a:fe:24:45:33:dc:76:15:ed:0f:a2:
+                    71:64:4c:65:2e:81:68:45:a7
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md2WithRSAEncryption
+        bb:4c:12:2b:cf:2c:26:00:4f:14:13:dd:a6:fb:fc:0a:11:84:
+        8c:f3:28:1c:67:92:2f:7c:b6:c5:fa:df:f0:e8:95:bc:1d:8f:
+        6c:2c:a8:51:cc:73:d8:a4:c0:53:f0:4e:d6:26:c0:76:01:57:
+        81:92:5e:21:f1:d1:b1:ff:e7:d0:21:58:cd:69:17:e3:44:1c:
+        9c:19:44:39:89:5c:dc:9c:00:0f:56:8d:02:99:ed:a2:90:45:
+        4c:e4:bb:10:a4:3d:f0:32:03:0e:f1:ce:f8:e8:c9:51:8c:e6:
+        62:9f:e6:9f:c0:7d:b7:72:9c:c9:36:3a:6b:9f:4e:a8:ff:64:
+        0d:64
+
+Verisign Class 3 Public Primary Certification Authority - G2
+============================================================
+MD5 Fingerprint: A2:33:9B:4C:74:78:73:D4:6C:E7:C1:F3:8D:CB:5C:E9
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
+c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
+MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
+emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
+DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
+FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
+UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
+YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
+MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
+pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
+13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
+AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
+U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
+F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
+oJ2daZH9
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            7d:d9:fe:07:cf:a8:1e:b7:10:79:67:fb:a7:89:34:c6
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network
+        Validity
+            Not Before: May 18 00:00:00 1998 GMT
+            Not After : Aug  1 23:59:59 2028 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:cc:5e:d1:11:5d:5c:69:d0:ab:d3:b9:6a:4c:99:
+                    1f:59:98:30:8e:16:85:20:46:6d:47:3f:d4:85:20:
+                    84:e1:6d:b3:f8:a4:ed:0c:f1:17:0f:3b:f9:a7:f9:
+                    25:d7:c1:cf:84:63:f2:7c:63:cf:a2:47:f2:c6:5b:
+                    33:8e:64:40:04:68:c1:80:b9:64:1c:45:77:c7:d8:
+                    6e:f5:95:29:3c:50:e8:34:d7:78:1f:a8:ba:6d:43:
+                    91:95:8f:45:57:5e:7e:c5:fb:ca:a4:04:eb:ea:97:
+                    37:54:30:6f:bb:01:47:32:33:cd:dc:57:9b:64:69:
+                    61:f8:9b:1d:1c:89:4f:5c:67
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        51:4d:cd:be:5c:cb:98:19:9c:15:b2:01:39:78:2e:4d:0f:67:
+        70:70:99:c6:10:5a:94:a4:53:4d:54:6d:2b:af:0d:5d:40:8b:
+        64:d3:d7:ee:de:56:61:92:5f:a6:c4:1d:10:61:36:d3:2c:27:
+        3c:e8:29:09:b9:11:64:74:cc:b5:73:9f:1c:48:a9:bc:61:01:
+        ee:e2:17:a6:0c:e3:40:08:3b:0e:e7:eb:44:73:2a:9a:f1:69:
+        92:ef:71:14:c3:39:ac:71:a7:91:09:6f:e4:71:06:b3:ba:59:
+        57:26:79:00:f6:f8:0d:a2:33:30:28:d4:aa:58:a0:9d:9d:69:
+        91:fd
+
+Verisign Class 3 Public Primary Certification Authority - G3
+============================================================
+MD5 Fingerprint: CD:68:B6:A7:C7:C4:CE:75:E0:1D:4F:57:44:61:92:09
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
+N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
+KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
+kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
+CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
+Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
+imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
+2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
+DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
+/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
+F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
+TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            9b:7e:06:49:a3:3e:62:b9:d5:ee:90:48:71:29:ef:57
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G3
+        Validity
+            Not Before: Oct  1 00:00:00 1999 GMT
+            Not After : Jul 16 23:59:59 2036 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G3
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:cb:ba:9c:52:fc:78:1f:1a:1e:6f:1b:37:73:bd:
+                    f8:c9:6b:94:12:30:4f:f0:36:47:f5:d0:91:0a:f5:
+                    17:c8:a5:61:c1:16:40:4d:fb:8a:61:90:e5:76:20:
+                    c1:11:06:7d:ab:2c:6e:a6:f5:11:41:8e:fa:2d:ad:
+                    2a:61:59:a4:67:26:4c:d0:e8:bc:52:5b:70:20:04:
+                    58:d1:7a:c9:a4:69:bc:83:17:64:ad:05:8b:bc:d0:
+                    58:ce:8d:8c:f5:eb:f0:42:49:0b:9d:97:27:67:32:
+                    6e:e1:ae:93:15:1c:70:bc:20:4d:2f:18:de:92:88:
+                    e8:6c:85:57:11:1a:e9:7e:e3:26:11:54:a2:45:96:
+                    55:83:ca:30:89:e8:dc:d8:a3:ed:2a:80:3f:7f:79:
+                    65:57:3e:15:20:66:08:2f:95:93:bf:aa:47:2f:a8:
+                    46:97:f0:12:e2:fe:c2:0a:2b:51:e6:76:e6:b7:46:
+                    b7:e2:0d:a6:cc:a8:c3:4c:59:55:89:e6:e8:53:5c:
+                    1c:ea:9d:f0:62:16:0b:a7:c9:5f:0c:f0:de:c2:76:
+                    ce:af:f7:6a:f2:fa:41:a6:a2:33:14:c9:e5:7a:63:
+                    d3:9e:62:37:d5:85:65:9e:0e:e6:53:24:74:1b:5e:
+                    1d:12:53:5b:c7:2c:e7:83:49:3b:15:ae:8a:68:b9:
+                    57:97
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        11:14:96:c1:ab:92:08:f7:3f:2f:c9:b2:fe:e4:5a:9f:64:de:
+        db:21:4f:86:99:34:76:36:57:dd:d0:15:2f:c5:ad:7f:15:1f:
+        37:62:73:3e:d4:e7:5f:ce:17:03:db:35:fa:2b:db:ae:60:09:
+        5f:1e:5f:8f:6e:bb:0b:3d:ea:5a:13:1e:0c:60:6f:b5:c0:b5:
+        23:22:2e:07:0b:cb:a9:74:cb:47:bb:1d:c1:d7:a5:6b:cc:2f:
+        d2:42:fd:49:dd:a7:89:cf:53:ba:da:00:5a:28:bf:82:df:f8:
+        ba:13:1d:50:86:82:fd:8e:30:8f:29:46:b0:1e:3d:35:da:38:
+        62:16:18:4a:ad:e6:b6:51:6c:de:af:62:eb:01:d0:1e:24:fe:
+        7a:8f:12:1a:12:68:b8:fb:66:99:14:14:45:5c:ae:e7:ae:69:
+        17:81:2b:5a:37:c9:5e:2a:f4:c6:e2:a1:5c:54:9b:a6:54:00:
+        cf:f0:f1:c1:c7:98:30:1a:3b:36:16:db:a3:6e:ea:fd:ad:b2:
+        c2:da:ef:02:47:13:8a:c0:f1:b3:31:ad:4f:1c:e1:4f:9c:af:
+        0f:0c:9d:f7:78:0d:d8:f4:35:56:80:da:b7:6d:17:8f:9d:1e:
+        81:64:e1:fe:c5:45:ba:ad:6b:b9:0a:7a:4e:4f:4b:84:ee:4b:
+        f1:7d:dd:11
+
+Verisign Class 4 Public Primary Certification Authority - G2
+============================================================
+MD5 Fingerprint: 26:6D:2C:19:98:B6:70:68:38:50:54:19:EC:90:34:60
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
+c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
+MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
+emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
+DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
+FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg
+UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
+YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
+MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM
+HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK
+qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID
+AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj
+cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y
+cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP
+T8qAkbYp
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            32:88:8e:9a:d2:f5:eb:13:47:f8:7f:c4:20:37:25:f8
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network
+        Validity
+            Not Before: May 18 00:00:00 1998 GMT
+            Not After : Aug  1 23:59:59 2028 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:ba:f0:e4:cf:f9:c4:ae:85:54:b9:07:57:f9:8f:
+                    c5:7f:68:11:f8:c4:17:b0:44:dc:e3:30:73:d5:2a:
+                    62:2a:b8:d0:cc:1c:ed:28:5b:7e:bd:6a:dc:b3:91:
+                    24:ca:41:62:3c:fc:02:01:bf:1c:16:31:94:05:97:
+                    76:6e:a2:ad:bd:61:17:6c:4e:30:86:f0:51:37:2a:
+                    50:c7:a8:62:81:dc:5b:4a:aa:c1:a0:b4:6e:eb:2f:
+                    e5:57:c5:b1:2b:40:70:db:5a:4d:a1:8e:1f:bd:03:
+                    1f:d8:03:d4:8f:4c:99:71:bc:e2:82:cc:58:e8:98:
+                    3a:86:d3:86:38:f3:00:29:1f
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        85:8c:12:c1:a7:b9:50:15:7a:cb:3e:ac:b8:43:8a:dc:aa:dd:
+        14:ba:89:81:7e:01:3c:23:71:21:88:2f:82:dc:63:fa:02:45:
+        ac:45:59:d7:2a:58:44:5b:b7:9f:81:3b:92:68:3d:e2:37:24:
+        f5:7b:6c:8f:76:35:96:09:a8:59:9d:b9:ce:23:ab:74:d6:83:
+        fd:32:73:27:d8:69:3e:43:74:f6:ae:c5:89:9a:e7:53:7c:e9:
+        7b:f6:4b:f3:c1:65:83:de:8d:8a:9c:3c:88:8d:39:59:fc:aa:
+        3f:22:8d:a1:c1:66:50:81:72:4c:ed:22:64:4f:4f:ca:80:91:
+        b6:29
+
+Verisign Class 4 Public Primary Certification Authority - G3
+============================================================
+MD5 Fingerprint: DB:C8:F2:27:2E:B1:EA:6A:29:23:5D:FE:56:3E:33:DF
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
+GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
++mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
+U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
+NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
+ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
+ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
+CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
+g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
+fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
+2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
+bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            ec:a0:a7:8b:6e:75:6a:01:cf:c4:7c:cc:2f:94:5e:d7
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 4 Public Primary Certification Authority - G3
+        Validity
+            Not Before: Oct  1 00:00:00 1999 GMT
+            Not After : Jul 16 23:59:59 2036 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 4 Public Primary Certification Authority - G3
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:ad:cb:a5:11:69:c6:59:ab:f1:8f:b5:19:0f:56:
+                    ce:cc:b5:1f:20:e4:9e:26:25:4b:e0:73:65:89:59:
+                    de:d0:83:e4:f5:0f:b5:bb:ad:f1:7c:e8:21:fc:e4:
+                    e8:0c:ee:7c:45:22:19:76:92:b4:13:b7:20:5b:09:
+                    fa:61:ae:a8:f2:a5:8d:85:c2:2a:d6:de:66:36:d2:
+                    9b:02:f4:a8:92:60:7c:9c:69:b4:8f:24:1e:d0:86:
+                    52:f6:32:9c:41:58:1e:22:bd:cd:45:62:95:08:6e:
+                    d0:66:dd:53:a2:cc:f0:10:dc:54:73:8b:04:a1:46:
+                    33:33:5c:17:40:b9:9e:4d:d3:f3:be:55:83:e8:b1:
+                    89:8e:5a:7c:9a:96:22:90:3b:88:25:f2:d2:53:88:
+                    02:0c:0b:78:f2:e6:37:17:4b:30:46:07:e4:80:6d:
+                    a6:d8:96:2e:e8:2c:f8:11:b3:38:0d:66:a6:9b:ea:
+                    c9:23:5b:db:8e:e2:f3:13:8e:1a:59:2d:aa:02:f0:
+                    ec:a4:87:66:dc:c1:3f:f5:d8:b9:f4:ec:82:c6:d2:
+                    3d:95:1d:e5:c0:4f:84:c9:d9:a3:44:28:06:6a:d7:
+                    45:ac:f0:6b:6a:ef:4e:5f:f8:11:82:1e:38:63:34:
+                    66:50:d4:3e:93:73:fa:30:c3:66:ad:ff:93:2d:97:
+                    ef:03
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        8f:fa:25:6b:4f:5b:e4:a4:4e:27:55:ab:22:15:59:3c:ca:b5:
+        0a:d4:4a:db:ab:dd:a1:5f:53:c5:a0:57:39:c2:ce:47:2b:be:
+        3a:c8:56:bf:c2:d9:27:10:3a:b1:05:3c:c0:77:31:bb:3a:d3:
+        05:7b:6d:9a:1c:30:8c:80:cb:93:93:2a:83:ab:05:51:82:02:
+        00:11:67:6b:f3:88:61:47:5f:03:93:d5:5b:0d:e0:f1:d4:a1:
+        32:35:85:b2:3a:db:b0:82:ab:d1:cb:0a:bc:4f:8c:5b:c5:4b:
+        00:3b:1f:2a:82:a6:7e:36:85:dc:7e:3c:67:00:b5:e4:3b:52:
+        e0:a8:eb:5d:15:f9:c6:6d:f0:ad:1d:0e:85:b7:a9:9a:73:14:
+        5a:5b:8f:41:28:c0:d5:e8:2d:4d:a4:5e:cd:aa:d9:ed:ce:dc:
+        d8:d5:3c:42:1d:17:c1:12:5d:45:38:c3:38:f3:fc:85:2e:83:
+        46:48:b2:d7:20:5f:92:36:8f:e7:79:0f:98:5e:99:e8:f0:d0:
+        a4:bb:f5:53:bd:2a:ce:59:b0:af:6e:7f:6c:bb:d2:1e:00:b0:
+        21:ed:f8:41:62:82:b9:d8:b2:c4:bb:46:50:f3:31:c5:8f:01:
+        a8:74:eb:f5:78:27:da:e7:f7:66:43:f3:9e:83:3e:20:aa:c3:
+        35:60:91:ce
+
+Verisign/RSA Commercial CA
+==========================
+MD5 Fingerprint: 5A:0B:DD:42:9E:B2:B4:62:97:32:7F:7F:0A:AA:9A:39
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIICIzCCAZACBQJBAAAWMA0GCSqGSIb3DQEBAgUAMFwxCzAJBgNVBAYTAlVTMSAw
+HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVy
+Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDQxODU4MzRaFw05
+OTExMDMxODU4MzRaMFwxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBT
+ZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9u
+IEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCk+4Fie84QJ93o
+975sbsZwmdu41QUDaSiCnHJ/lj+O7Kwpkj+KFPhCdr69XQO5kNTQvAayUTNfxMK/
+touPmbZiImDd298ggrTKoi8tUO2UMt7gVY3UaOLgTNLNBRYulWZcYVI4HlGogqHE
+7yXpCuaLK44xZtn42f29O2nZ6wIDAQABMA0GCSqGSIb3DQEBAgUAA34AdrW2EP4j
+9/dZYkuwX5zBaLxJu7NJbyFHXSudVMQAKD+YufKKg5tgf+tQx6sFEC097TgCwaVI
+0v5loMC86qYjFmZsGySp8+x5NRhPJsjjr1BKx6cxa9B8GJ1Qv6km+iYrRpwUqbtb
+MJhCKLVLU7tDCZJAuqiqWqTGtotXTcU=
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            02:41:00:00:16
+        Signature Algorithm: md2WithRSAEncryption
+        Issuer: C=US, O=RSA Data Security, Inc., OU=Commercial Certification Authority
+        Validity
+            Not Before: Nov  4 18:58:34 1994 GMT
+            Not After : Nov  3 18:58:34 1999 GMT
+        Subject: C=US, O=RSA Data Security, Inc., OU=Commercial Certification Authority
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1000 bit)
+                Modulus (1000 bit):
+                    00:a4:fb:81:62:7b:ce:10:27:dd:e8:f7:be:6c:6e:
+                    c6:70:99:db:b8:d5:05:03:69:28:82:9c:72:7f:96:
+                    3f:8e:ec:ac:29:92:3f:8a:14:f8:42:76:be:bd:5d:
+                    03:b9:90:d4:d0:bc:06:b2:51:33:5f:c4:c2:bf:b6:
+                    8b:8f:99:b6:62:22:60:dd:db:df:20:82:b4:ca:a2:
+                    2f:2d:50:ed:94:32:de:e0:55:8d:d4:68:e2:e0:4c:
+                    d2:cd:05:16:2e:95:66:5c:61:52:38:1e:51:a8:82:
+                    a1:c4:ef:25:e9:0a:e6:8b:2b:8e:31:66:d9:f8:d9:
+                    fd:bd:3b:69:d9:eb
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md2WithRSAEncryption
+        76:b5:b6:10:fe:23:f7:f7:59:62:4b:b0:5f:9c:c1:68:bc:49:
+        bb:b3:49:6f:21:47:5d:2b:9d:54:c4:00:28:3f:98:b9:f2:8a:
+        83:9b:60:7f:eb:50:c7:ab:05:10:2d:3d:ed:38:02:c1:a5:48:
+        d2:fe:65:a0:c0:bc:ea:a6:23:16:66:6c:1b:24:a9:f3:ec:79:
+        35:18:4f:26:c8:e3:af:50:4a:c7:a7:31:6b:d0:7c:18:9d:50:
+        bf:a9:26:fa:26:2b:46:9c:14:a9:bb:5b:30:98:42:28:b5:4b:
+        53:bb:43:09:92:40:ba:a8:aa:5a:a4:c6:b6:8b:57:4d:c5
+
+Verisign/RSA Secure Server CA
+=============================
+MD5 Fingerprint: 74:7B:82:03:43:F0:00:9E:6B:B3:EC:47:BF:85:A5:93
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG
+A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD
+VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0
+MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV
+BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy
+dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ
+ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII
+0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI
+uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI
+hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3
+YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc
+1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            02:ad:66:7e:4e:45:fe:5e:57:6f:3c:98:19:5e:dd:c0
+        Signature Algorithm: md2WithRSAEncryption
+        Issuer: C=US, O=RSA Data Security, Inc., OU=Secure Server Certification Authority
+        Validity
+            Not Before: Nov  9 00:00:00 1994 GMT
+            Not After : Jan  7 23:59:59 2010 GMT
+        Subject: C=US, O=RSA Data Security, Inc., OU=Secure Server Certification Authority
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1000 bit)
+                Modulus (1000 bit):
+                    00:92:ce:7a:c1:ae:83:3e:5a:aa:89:83:57:ac:25:
+                    01:76:0c:ad:ae:8e:2c:37:ce:eb:35:78:64:54:03:
+                    e5:84:40:51:c9:bf:8f:08:e2:8a:82:08:d2:16:86:
+                    37:55:e9:b1:21:02:ad:76:68:81:9a:05:a2:4b:c9:
+                    4b:25:66:22:56:6c:88:07:8f:f7:81:59:6d:84:07:
+                    65:70:13:71:76:3e:9b:77:4c:e3:50:89:56:98:48:
+                    b9:1d:a7:29:1a:13:2e:4a:11:59:9c:1e:15:d5:49:
+                    54:2c:73:3a:69:82:b1:97:39:9c:6d:70:67:48:e5:
+                    dd:2d:d6:c8:1e:7b
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: md2WithRSAEncryption
+        65:dd:7e:e1:b2:ec:b0:e2:3a:e0:ec:71:46:9a:19:11:b8:d3:
+        c7:a0:b4:03:40:26:02:3e:09:9c:e1:12:b3:d1:5a:f6:37:a5:
+        b7:61:03:b6:5b:16:69:3b:c6:44:08:0c:88:53:0c:6b:97:49:
+        c7:3e:35:dc:6c:b9:bb:aa:df:5c:bb:3a:2f:93:60:b6:a9:4b:
+        4d:f2:20:f7:cd:5f:7f:64:7b:8e:dc:00:5c:d7:fa:77:ca:39:
+        16:59:6f:0e:ea:d3:b5:83:7f:4d:4d:42:56:76:b4:c9:5f:04:
+        f8:38:f8:eb:d2:5f:75:5f:cd:7b:fc:e5:8e:80:7c:fc:50
+
+CA WEB.DE TrustCenter
+=======================================
+MD5 Fingerprint=BD:D4:F5:1A:7D:70:46:50:DB:6F:4D:68:41:83:99:93
+PEM-Data:
+-----BEGIN CERTIFICATE-----
+MIIH1TCCBb2gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBjTELMAkGA1UEBhMCREUx
+GjAYBgNVBAcTEUQtNzYyMjcgS2FybHNydWhlMRIwEAYDVQQKEwlXRUIuREUgQUcx
+FDASBgNVBAsTC1RydXN0Q2VudGVyMRswGQYDVQQDExJXRUIuREUgVHJ1c3RDZW50
+ZXIxGzAZBgkqhkiG9w0BCQEWDHRydXN0QHdlYi5kZTAeFw05OTA2MjMwOTE5NTRa
+Fw0wOTA2MjAwOTE5NTRaMIGNMQswCQYDVQQGEwJERTEaMBgGA1UEBxMRRC03NjIy
+NyBLYXJsc3J1aGUxEjAQBgNVBAoTCVdFQi5ERSBBRzEUMBIGA1UECxMLVHJ1c3RD
+ZW50ZXIxGzAZBgNVBAMTEldFQi5ERSBUcnVzdENlbnRlcjEbMBkGCSqGSIb3DQEJ
+ARYMdHJ1c3RAd2ViLmRlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
+wSWKmSp6XW+aYJsfYWhvxNgo3uViORtbNcpnkcLeAA4zobLEdqno80YInjFgWq8d
+f5U6jOFIAzPdRCFqsj6LQDppQq22q/sal4rOVVt3t6XlWgDBfF8K+iQEQQd2TNMS
+J7pd+MUY2IyBGjGqGINRKsoU/sd1nwPRm2tv3VhIlDOcxhJIx9pm2+hNmaJEz55a
+ma+sQl8+odtfsNNrYv1LitbqELP/hsRwWzE30m1cHvcy6yczH0GmKB8seSD69qjK
+HJlYa+qPrSjIwEhhUNOcoNx227B9ZJFETrTdW2q5vp4BAPoX2nvRm5ynAdaHn0LI
+pYrhwpEiTb121ksguyDH+AasBMZ6gVP0qTvI9awRfUPyZsxWXeBDaNpw2zkqnIaj
+QIlXzVYKSBaR4TSDQ9L+bYNDSCyERdSFyJeQ2UPL/jxuS94jIbGiWE07X7wuSoA2
+BB0NKtUviZT/jyNzOGfu2TNcHkjc6x6NQMJanxKO5VZDfnfQUyWshQb99IelpjsS
+tPc//U04zMfEoJFvhosBIXKwthN7F7WE7KRhILTBwX2i+4d2doVA25OZHlcZI1L5
+K391IzzqeJdrM4Nrc0MnAsRY+sZJVmUi8u9lHsxCjMht3DpJ1JALGhj7hTDPsxjX
+eGAUZIbq9rQ/fhN0UxXkO/wQfWVsq1ZO3XfgL4tE5OkCAwEAAaOCAjwwggI4MAwG
+A1UdEwQFMAMBAf8wSQYDVR0gBEIwQDA+BgtghkgBhvhFAQcBATAvMC0GCCsGAQUF
+BwIBFiFodHRwOi8vdHJ1c3Qud2ViLmRlL0hpbGZlL1BvbGljeS8wggEpBglghkgB
+hvhCAQ0EggEaFoIBFlRydXN0Q2VudGVyIHZvbiBXRUIuREUgLSBSb290LVplcnRp
+ZmlrYXQKCkRpZSBOdXR6dW5nIGRpZXNlcyBaZXJ0aWZpa2F0ZXMgd2lyZCB2b24g
+ZGVuIEFsbGdlbWVpbmVuIEdlc2No5GZ0c2JlZGluZ3VuZ2VuIChBR0IpIC8gWmVy
+dGlmaXppZXJ1bmdzcmljaHRsaW5pZW4gZGVzIFdFQi5ERSBUcnVzdENlbnRlcnMg
+Z2VyZWdlbHQuCkRpZSBBR0JzIHVuZCBaZXJ0aWZpemllcnVuZ3NyaWNodGxpbmll
+biBzaW5kIHVudGVyIGh0dHA6Ly90cnVzdC53ZWIuZGUvSGlsZmUvIGVpbnNlaGJh
+ci4KMBoGCWCGSAGG+EIBCAQNFgsvSGlsZmUvQUdCLzAWBglghkgBhvhCAQcECRYH
+L3JuLz9zPTAWBglghkgBhvhCAQMECRYHL3J2Lz9zPTAjBglghkgBhvhCAQIEFhYU
+aHR0cHM6Ly90cnVzdC53ZWIuZGUwEQYJYIZIAYb4QgEBBAQDAgAHMCwGCWCGSAGG
++EIBBAQfFh1odHRwczovL3RydXN0LndlYi5kZS9ydkNBLz9zPTANBgkqhkiG9w0B
+AQQFAAOCAgEALT0XbRQJA+pMrUUT4tm1nCnPkm3+iz6Av2tf3BcONJrNVDgQGDN4
+HL3iRMfLZvzSuvJ06BXl3ogqAkSUJxfBd7fYRi+rhgjKxuJZwUNS06a0eGlo12ol
+G4DOz2VrNFDmRzEIRv6DgnnIj7cjo9MPefFi/RJgRHQYP33dyP9dycKKsA0Q7xAI
+6JvBduOaeAx/LrGE2JkcPk26oDkpPDFOh5FoQ6LffwFv5086IIa6uK6X9QPdwtzy
+apBp0YXeB/S+o2ggwA4n88Ht+U/aBbsCEoy6tbdosLqmLD2SkE4rFNJNBPLcw37o
+ITLKogpZnIEYWaz0Tcavvk90ytaCP5vXmSaQSjmeUQCgK/cXJwfp1QRUhkG4UU+U
+CvsmnhmGnwQLrnpUgQehw1M/KP2bRr9akBVIabic+yjKOUJuap1uhOosaQjsThgq
+9uqYIYZGS9YjN50kRjxndbNuJVuhMgJSDCPE+74feCcySfjhVxGVJVnJUDQZoqVW
+/NqHaR07wAB6D1b+inaaKyz58Nw3D6yzBxpttZDTguWn+ry5eN6Um1Ez22Fs65Uo
+eszLk3hHFUnImzdd5QtFJ40JGxuiZoCpZhyJNpAvGUwUMsbdrY+iEqisKGVF07rQ
+D2H0VMBBKfqZr4BilkYTmnnciBN7OhOg2VDnyUNHxiIr3dT12oviZU8=
+-----END CERTIFICATE-----
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=DE, L=D-76227 Karlsruhe, O=WEB.DE AG, OU=TrustCenter, CN=WEB.DE TrustCenter/Email=trust@web.de
+        Validity
+            Not Before: Jun 23 09:19:54 1999 GMT
+            Not After : Jun 20 09:19:54 2009 GMT
+        Subject: C=DE, L=D-76227 Karlsruhe, O=WEB.DE AG, OU=TrustCenter, CN=WEB.DE TrustCenter/Email=trust@web.de
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (4096 bit)
+                Modulus (4096 bit):
+                    00:c1:25:8a:99:2a:7a:5d:6f:9a:60:9b:1f:61:68:
+                    6f:c4:d8:28:de:e5:62:39:1b:5b:35:ca:67:91:c2:
+                    de:00:0e:33:a1:b2:c4:76:a9:e8:f3:46:08:9e:31:
+                    60:5a:af:1d:7f:95:3a:8c:e1:48:03:33:dd:44:21:
+                    6a:b2:3e:8b:40:3a:69:42:ad:b6:ab:fb:1a:97:8a:
+                    ce:55:5b:77:b7:a5:e5:5a:00:c1:7c:5f:0a:fa:24:
+                    04:41:07:76:4c:d3:12:27:ba:5d:f8:c5:18:d8:8c:
+                    81:1a:31:aa:18:83:51:2a:ca:14:fe:c7:75:9f:03:
+                    d1:9b:6b:6f:dd:58:48:94:33:9c:c6:12:48:c7:da:
+                    66:db:e8:4d:99:a2:44:cf:9e:5a:99:af:ac:42:5f:
+                    3e:a1:db:5f:b0:d3:6b:62:fd:4b:8a:d6:ea:10:b3:
+                    ff:86:c4:70:5b:31:37:d2:6d:5c:1e:f7:32:eb:27:
+                    33:1f:41:a6:28:1f:2c:79:20:fa:f6:a8:ca:1c:99:
+                    58:6b:ea:8f:ad:28:c8:c0:48:61:50:d3:9c:a0:dc:
+                    76:db:b0:7d:64:91:44:4e:b4:dd:5b:6a:b9:be:9e:
+                    01:00:fa:17:da:7b:d1:9b:9c:a7:01:d6:87:9f:42:
+                    c8:a5:8a:e1:c2:91:22:4d:bd:76:d6:4b:20:bb:20:
+                    c7:f8:06:ac:04:c6:7a:81:53:f4:a9:3b:c8:f5:ac:
+                    11:7d:43:f2:66:cc:56:5d:e0:43:68:da:70:db:39:
+                    2a:9c:86:a3:40:89:57:cd:56:0a:48:16:91:e1:34:
+                    83:43:d2:fe:6d:83:43:48:2c:84:45:d4:85:c8:97:
+                    90:d9:43:cb:fe:3c:6e:4b:de:23:21:b1:a2:58:4d:
+                    3b:5f:bc:2e:4a:80:36:04:1d:0d:2a:d5:2f:89:94:
+                    ff:8f:23:73:38:67:ee:d9:33:5c:1e:48:dc:eb:1e:
+                    8d:40:c2:5a:9f:12:8e:e5:56:43:7e:77:d0:53:25:
+                    ac:85:06:fd:f4:87:a5:a6:3b:12:b4:f7:3f:fd:4d:
+                    38:cc:c7:c4:a0:91:6f:86:8b:01:21:72:b0:b6:13:
+                    7b:17:b5:84:ec:a4:61:20:b4:c1:c1:7d:a2:fb:87:
+                    76:76:85:40:db:93:99:1e:57:19:23:52:f9:2b:7f:
+                    75:23:3c:ea:78:97:6b:33:83:6b:73:43:27:02:c4:
+                    58:fa:c6:49:56:65:22:f2:ef:65:1e:cc:42:8c:c8:
+                    6d:dc:3a:49:d4:90:0b:1a:18:fb:85:30:cf:b3:18:
+                    d7:78:60:14:64:86:ea:f6:b4:3f:7e:13:74:53:15:
+                    e4:3b:fc:10:7d:65:6c:ab:56:4e:dd:77:e0:2f:8b:
+                    44:e4:e9
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:TRUE
+            X509v3 Certificate Policies: 
+                Policy: 2.16.840.1.113733.1.7.1.1
+                  CPS: http://trust.web.de/Hilfe/Policy/
+
+            Netscape Comment: 
+                TrustCenter von WEB.DE - Root-Zertifikat
+
+Die Nutzung dieses Zertifikates wird von den Allgemeinen Geschäftsbedingungen (AGB) / Zertifizierungsrichtlinien des WEB.DE TrustCenters geregelt.
+Die AGBs und Zertifizierungsrichtlinien sind unter http://trust.web.de/Hilfe/ einsehbar.
+
+            Netscape CA Policy Url: 
+                /Hilfe/AGB/
+            Netscape Renewal Url: 
+                /rn/?s=
+            Netscape Revocation Url: 
+                /rv/?s=
+            Netscape Base Url: 
+                https://trust.web.de
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+            Netscape CA Revocation Url: 
+                https://trust.web.de/rvCA/?s=
+    Signature Algorithm: md5WithRSAEncryption
+        2d:3d:17:6d:14:09:03:ea:4c:ad:45:13:e2:d9:b5:9c:29:cf:
+        92:6d:fe:8b:3e:80:bf:6b:5f:dc:17:0e:34:9a:cd:54:38:10:
+        18:33:78:1c:bd:e2:44:c7:cb:66:fc:d2:ba:f2:74:e8:15:e5:
+        de:88:2a:02:44:94:27:17:c1:77:b7:d8:46:2f:ab:86:08:ca:
+        c6:e2:59:c1:43:52:d3:a6:b4:78:69:68:d7:6a:25:1b:80:ce:
+        cf:65:6b:34:50:e6:47:31:08:46:fe:83:82:79:c8:8f:b7:23:
+        a3:d3:0f:79:f1:62:fd:12:60:44:74:18:3f:7d:dd:c8:ff:5d:
+        c9:c2:8a:b0:0d:10:ef:10:08:e8:9b:c1:76:e3:9a:78:0c:7f:
+        2e:b1:84:d8:99:1c:3e:4d:ba:a0:39:29:3c:31:4e:87:91:68:
+        43:a2:df:7f:01:6f:e7:4f:3a:20:86:ba:b8:ae:97:f5:03:dd:
+        c2:dc:f2:6a:90:69:d1:85:de:07:f4:be:a3:68:20:c0:0e:27:
+        f3:c1:ed:f9:4f:da:05:bb:02:12:8c:ba:b5:b7:68:b0:ba:a6:
+        2c:3d:92:90:4e:2b:14:d2:4d:04:f2:dc:c3:7e:e8:21:32:ca:
+        a2:0a:59:9c:81:18:59:ac:f4:4d:c6:af:be:4f:74:ca:d6:82:
+        3f:9b:d7:99:26:90:4a:39:9e:51:00:a0:2b:f7:17:27:07:e9:
+        d5:04:54:86:41:b8:51:4f:94:0a:fb:26:9e:19:86:9f:04:0b:
+        ae:7a:54:81:07:a1:c3:53:3f:28:fd:9b:46:bf:5a:90:15:48:
+        69:b8:9c:fb:28:ca:39:42:6e:6a:9d:6e:84:ea:2c:69:08:ec:
+        4e:18:2a:f6:ea:98:21:86:46:4b:d6:23:37:9d:24:46:3c:67:
+        75:b3:6e:25:5b:a1:32:02:52:0c:23:c4:fb:be:1f:78:27:32:
+        49:f8:e1:57:11:95:25:59:c9:50:34:19:a2:a5:56:fc:da:87:
+        69:1d:3b:c0:00:7a:0f:56:fe:8a:76:9a:2b:2c:f9:f0:dc:37:
+        0f:ac:b3:07:1a:6d:b5:90:d3:82:e5:a7:fa:bc:b9:78:de:94:
+        9b:51:33:db:61:6c:eb:95:28:7a:cc:cb:93:78:47:15:49:c8:
+        9b:37:5d:e5:0b:45:27:8d:09:1b:1b:a2:66:80:a9:66:1c:89:
+        36:90:2f:19:4c:14:32:c6:dd:ad:8f:a2:12:a8:ac:28:65:45:
+        d3:ba:d0:0f:61:f4:54:c0:41:29:fa:99:af:80:62:96:46:13:
+        9a:79:dc:88:13:7b:3a:13:a0:d9:50:e7:c9:43:47:c6:22:2b:
+        dd:d4:f5:da:8b:e2:65:4f
diff --git a/contrib/colors.default b/contrib/colors.default
new file mode 100644 (file)
index 0000000..84298e9
--- /dev/null
@@ -0,0 +1,23 @@
+# -*-muttrc-*-
+
+# Colors for use with xterm and the like, white background.
+
+color hdrdefault blue white
+color quoted blue white
+color signature red white
+color attachment red white
+color message brightred white
+color error brightred white
+color indicator brightyellow red
+color status brightgreen blue
+color tree black white
+color normal black white
+color markers red white
+color search white black
+color tilde brightmagenta white
+color index blue white ~F
+color index red white "~N|~O"
+
+
+# color body brightblack white '\*+[^*]+\*+'
+# color body brightblack white '_+[^_]+_+'
diff --git a/contrib/colors.linux b/contrib/colors.linux
new file mode 100644 (file)
index 0000000..1366a9c
--- /dev/null
@@ -0,0 +1,22 @@
+# -*-muttrc-*-
+
+# Palette for use with the Linux console.  Black background.
+
+color hdrdefault blue black
+color quoted blue black
+color signature blue black
+color attachment red black
+color message brightred black
+color error brightred black
+color indicator black red
+color status brightgreen blue
+color tree white black
+color normal white black
+color markers red black
+color search white black
+color tilde brightmagenta black
+color index blue black ~F
+color index red black "~N|~O"
+
+# color body brightwhite black '\*+[^*]+\*+'
+# color body brightwhite black '_+[^_]+_+'
diff --git a/contrib/gpg.rc b/contrib/gpg.rc
new file mode 100644 (file)
index 0000000..8b567ef
--- /dev/null
@@ -0,0 +1,82 @@
+# -*-muttrc-*-
+#
+# Command formats for gpg.
+# 
+# This version uses gpg-2comp from 
+#   http://muppet.faveve.uni-stuttgart.de/~gero/gpg-2comp.tar.gz
+#
+# $Id: gpg.rc,v 3.1 2002/03/26 22:23:58 roessler Exp $
+#
+# %p    The empty string when no passphrase is needed,
+#       the string "PGPPASSFD=0" if one is needed.
+#
+#       This is mostly used in conditional % sequences.
+#
+# %f    Most PGP commands operate on a single file or a file
+#       containing a message.  %f expands to this file's name.
+#
+# %s    When verifying signatures, there is another temporary file
+#       containing the detached signature.  %s expands to this
+#       file's name.
+#
+# %a    In "signing" contexts, this expands to the value of the
+#       configuration variable $pgp_sign_as.  You probably need to
+#       use this within a conditional % sequence.
+#
+# %r    In many contexts, mutt passes key IDs to pgp.  %r expands to
+#       a list of key IDs.
+
+# Note that we explicitly set the comment armor header since GnuPG, when used
+# in some localiaztion environments, generates 8bit data in that header, thereby
+# breaking PGP/MIME.
+
+# decode application/pgp
+set pgp_decode_command="/usr/bin/gpg  --charset utf-8   %?p?--passphrase-fd 0? --no-verbose --quiet  --batch  --output - %f"
+
+# verify a pgp/mime signature
+set pgp_verify_command="/usr/bin/gpg   --no-verbose --quiet  --batch  --output - --verify %s %f"
+
+# decrypt a pgp/mime attachment
+set pgp_decrypt_command="/usr/bin/gpg   --passphrase-fd 0 --no-verbose --quiet  --batch  --output - %f"
+
+# create a pgp/mime signed attachment
+# set pgp_sign_command="/usr/bin/gpg-2comp --comment '' --no-verbose --batch  --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
+set pgp_sign_command="/usr/bin/gpg    --no-verbose --batch --quiet   --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
+
+# create a application/pgp signed (old-style) message
+# set pgp_clearsign_command="/usr/bin/gpg-2comp --comment ''  --no-verbose --batch  --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
+set pgp_clearsign_command="/usr/bin/gpg   --charset utf-8 --no-verbose --batch --quiet   --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
+
+# create a pgp/mime encrypted attachment
+# set pgp_encrypt_only_command="pgpewrap gpg-2comp  -v --batch  --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f"
+set pgp_encrypt_only_command="pgpewrap /usr/bin/gpg  --charset utf-8    --batch  --quiet  --no-verbose --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f"
+
+# create a pgp/mime encrypted and signed attachment
+# set pgp_encrypt_sign_command="pgpewrap gpg-2comp  --passphrase-fd 0 -v --batch  --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f"
+set pgp_encrypt_sign_command="pgpewrap /usr/bin/gpg  --charset utf-8 --passphrase-fd 0  --batch --quiet  --no-verbose  --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f"
+
+# import a key into the public key ring
+set pgp_import_command="/usr/bin/gpg  --no-verbose --import -v %f"
+
+# export a key from the public key ring
+set pgp_export_command="/usr/bin/gpg   --no-verbose --export --armor %r"
+
+# verify a key
+set pgp_verify_key_command="/usr/bin/gpg   --verbose --batch  --fingerprint --check-sigs %r"
+
+# read in the public key ring
+set pgp_list_pubring_command="/usr/bin/gpg   --no-verbose --batch --quiet   --with-colons --list-keys %r" 
+
+# read in the secret key ring
+set pgp_list_secring_command="/usr/bin/gpg   --no-verbose --batch --quiet   --with-colons --list-secret-keys %r" 
+
+# fetch keys
+# set pgp_getkeys_command="pkspxycwrap %r"
+
+# pattern for good signature - may need to be adapted to locale!
+
+# set pgp_good_sign="^gpg: Good signature from"
+
+# OK, here's a version which uses gnupg's message catalog:
+set pgp_good_sign="`gettext -d gnupg -s 'Good signature from "' | tr -d '"'`"
+
diff --git a/contrib/iconv/README b/contrib/iconv/README
new file mode 100644 (file)
index 0000000..1a3135c
--- /dev/null
@@ -0,0 +1,15 @@
+This directory contains sample collections of iconv-hooks for
+various platforms.  The files have been auto-generated from the
+source code of Bruno Haible's libiconv implementation, version 1.5.1.
+
+libiconv is available from <http://clisp.cons.org/~haible/packages-libiconv.html>.
+
+If you want to re-generate the files from a newer version of
+libiconv, just type:
+
+       rm -f *.rc
+       ./make.sh <top-level iconv directory>
+
+Note, however, that make.sh isn't guaranteed to run on any system
+but the one used for generating these files.
+
diff --git a/contrib/iconv/iconv.aix-3.2.5.rc b/contrib/iconv/iconv.aix-3.2.5.rc
new file mode 100644 (file)
index 0000000..45fe632
--- /dev/null
@@ -0,0 +1,2 @@
+iconv-hook CP850 IBM-850
+iconv-hook ISO-8859-1 ISO8859-1
diff --git a/contrib/iconv/iconv.aix-4.1.5.rc b/contrib/iconv/iconv.aix-4.1.5.rc
new file mode 100644 (file)
index 0000000..6481a25
--- /dev/null
@@ -0,0 +1,13 @@
+iconv-hook CP1046 IBM-1046
+iconv-hook CP850 IBM-850
+iconv-hook CP856 IBM-856
+iconv-hook CP932 IBM-932
+iconv-hook EUC-CN IBM-eucCN
+iconv-hook EUC-JP IBM-eucJP
+iconv-hook EUC-KR IBM-eucKR
+iconv-hook EUC-TW IBM-eucTW
+iconv-hook ISO-8859-1 ISO8859-1
+iconv-hook ISO-8859-2 ISO8859-2
+iconv-hook ISO-8859-5 ISO8859-5
+iconv-hook ISO-8859-6 ISO8859-6
+iconv-hook ISO-8859-8 ISO8859-8
diff --git a/contrib/iconv/iconv.aix-4.2.0.rc b/contrib/iconv/iconv.aix-4.2.0.rc
new file mode 100644 (file)
index 0000000..aeb5327
--- /dev/null
@@ -0,0 +1,18 @@
+iconv-hook BIG5 big5
+iconv-hook CP1046 IBM-1046
+iconv-hook CP850 IBM-850
+iconv-hook CP856 IBM-856
+iconv-hook CP922 IBM-922
+iconv-hook CP932 IBM-932
+iconv-hook EUC-CN IBM-eucCN
+iconv-hook EUC-JP IBM-eucJP
+iconv-hook EUC-KR IBM-eucKR
+iconv-hook EUC-TW IBM-eucTW
+iconv-hook ISO-8859-13 IBM-921
+iconv-hook ISO-8859-1 ISO8859-1
+iconv-hook ISO-8859-2 ISO8859-2
+iconv-hook ISO-8859-5 ISO8859-5
+iconv-hook ISO-8859-6 ISO8859-6
+iconv-hook ISO-8859-7 ISO8859-7
+iconv-hook ISO-8859-8 ISO8859-8
+iconv-hook ISO-8859-9 ISO8859-9
diff --git a/contrib/iconv/iconv.aix-4.3.2.rc b/contrib/iconv/iconv.aix-4.3.2.rc
new file mode 100644 (file)
index 0000000..f0aa365
--- /dev/null
@@ -0,0 +1,23 @@
+iconv-hook BIG5 big5
+iconv-hook CP1046 IBM-1046
+iconv-hook CP1124 IBM-1124
+iconv-hook CP1129 IBM-1129
+iconv-hook CP1252 IBM-1252
+iconv-hook CP850 IBM-850
+iconv-hook CP856 IBM-856
+iconv-hook CP922 IBM-922
+iconv-hook CP932 IBM-932
+iconv-hook CP943 IBM-943
+iconv-hook EUC-CN IBM-eucCN
+iconv-hook EUC-JP IBM-eucJP
+iconv-hook EUC-KR IBM-eucKR
+iconv-hook EUC-TW IBM-eucTW
+iconv-hook ISO-8859-13 IBM-921
+iconv-hook ISO-8859-15 ISO8859-15
+iconv-hook ISO-8859-1 ISO8859-1
+iconv-hook ISO-8859-2 ISO8859-2
+iconv-hook ISO-8859-5 ISO8859-5
+iconv-hook ISO-8859-6 ISO8859-6
+iconv-hook ISO-8859-7 ISO8859-7
+iconv-hook ISO-8859-8 ISO8859-8
+iconv-hook ISO-8859-9 ISO8859-9
diff --git a/contrib/iconv/iconv.freebsd-3.3.rc b/contrib/iconv/iconv.freebsd-3.3.rc
new file mode 100644 (file)
index 0000000..24e8bbb
--- /dev/null
@@ -0,0 +1,6 @@
+iconv-hook ASCII <error>
+iconv-hook CP866 <error>
+iconv-hook ISO-8859-15 <error>
+iconv-hook ISO-8859-1 <error>
+iconv-hook ISO-8859-2 <error>
+iconv-hook KOI8-R <error>
diff --git a/contrib/iconv/iconv.glibc-2.1.3.rc b/contrib/iconv/iconv.glibc-2.1.3.rc
new file mode 100644 (file)
index 0000000..4003291
--- /dev/null
@@ -0,0 +1 @@
+iconv-hook ISO-8859-1 ANSI_X3.4-1968
diff --git a/contrib/iconv/iconv.glibc-2.1.90.rc b/contrib/iconv/iconv.glibc-2.1.90.rc
new file mode 100644 (file)
index 0000000..3ba121e
--- /dev/null
@@ -0,0 +1 @@
+iconv-hook ASCII ANSI_X3.4-1968
diff --git a/contrib/iconv/iconv.hpux-10.01.rc b/contrib/iconv/iconv.hpux-10.01.rc
new file mode 100644 (file)
index 0000000..adf5e19
--- /dev/null
@@ -0,0 +1,15 @@
+iconv-hook EUC-CN hp15CN
+iconv-hook EUC-TW eucTW
+iconv-hook HP-ARABIC8 arabic8
+iconv-hook HP-GREEK8 greek8
+iconv-hook HP-HEBREW8 hebrew8
+iconv-hook HP-ROMAN8 roman8
+iconv-hook HP-TURKISH8 turkish8
+iconv-hook ISO-8859-1 iso88591
+iconv-hook ISO-8859-2 iso88592
+iconv-hook ISO-8859-5 iso88595
+iconv-hook ISO-8859-6 iso88596
+iconv-hook ISO-8859-7 iso88597
+iconv-hook ISO-8859-8 iso88598
+iconv-hook ISO-8859-9 iso88599
+iconv-hook TIS-620 tis620
diff --git a/contrib/iconv/iconv.hpux-10.20.rc b/contrib/iconv/iconv.hpux-10.20.rc
new file mode 100644 (file)
index 0000000..38bc1a1
--- /dev/null
@@ -0,0 +1,15 @@
+iconv-hook HP-ARABIC8 arabic8
+iconv-hook HP-GREEK8 greek8
+iconv-hook HP-HEBREW8 hebrew8
+iconv-hook HP-ROMAN8 roman8
+iconv-hook HP-TURKISH8 turkish8
+iconv-hook ISO-8859-15 iso885915
+iconv-hook ISO-8859-1 iso88591
+iconv-hook ISO-8859-2 iso88592
+iconv-hook ISO-8859-5 iso88595
+iconv-hook ISO-8859-6 iso88596
+iconv-hook ISO-8859-7 iso88597
+iconv-hook ISO-8859-8 iso88598
+iconv-hook ISO-8859-9 iso88599
+iconv-hook TIS-620 tis620
+iconv-hook UTF-8 utf8
diff --git a/contrib/iconv/iconv.hpux-11.00.rc b/contrib/iconv/iconv.hpux-11.00.rc
new file mode 100644 (file)
index 0000000..81bda2f
--- /dev/null
@@ -0,0 +1,21 @@
+iconv-hook BIG5 big5
+iconv-hook EUC-CN hp15CN
+iconv-hook EUC-JP eucJP
+iconv-hook EUC-KR eucKR
+iconv-hook EUC-TW eucTW
+iconv-hook HP-ARABIC8 arabic8
+iconv-hook HP-GREEK8 greek8
+iconv-hook HP-HEBREW8 hebrew8
+iconv-hook HP-KANA8 kana8
+iconv-hook HP-ROMAN8 roman8
+iconv-hook HP-TURKISH8 turkish8
+iconv-hook ISO-8859-15 iso885915
+iconv-hook ISO-8859-1 iso88591
+iconv-hook ISO-8859-2 iso88592
+iconv-hook ISO-8859-5 iso88595
+iconv-hook ISO-8859-6 iso88596
+iconv-hook ISO-8859-7 iso88597
+iconv-hook ISO-8859-8 iso88598
+iconv-hook ISO-8859-9 iso88599
+iconv-hook TIS-620 tis620
+iconv-hook UTF-8 utf8
diff --git a/contrib/iconv/iconv.irix-6.5.rc b/contrib/iconv/iconv.irix-6.5.rc
new file mode 100644 (file)
index 0000000..4cdba04
--- /dev/null
@@ -0,0 +1,9 @@
+iconv-hook EUC-CN eucCN
+iconv-hook EUC-JP eucJP
+iconv-hook EUC-KR eucKR
+iconv-hook EUC-TW eucTW
+iconv-hook ISO-8859-1 ISO8859-1
+iconv-hook ISO-8859-2 ISO8859-2
+iconv-hook ISO-8859-5 ISO8859-5
+iconv-hook ISO-8859-7 ISO8859-7
+iconv-hook ISO-8859-9 ISO8859-9
diff --git a/contrib/iconv/iconv.osf1-4.0a.rc b/contrib/iconv/iconv.osf1-4.0a.rc
new file mode 100644 (file)
index 0000000..3e4bbdd
--- /dev/null
@@ -0,0 +1,3 @@
+iconv-hook ISO-8859-1 ISO8859-1
+iconv-hook ISO-8859-7 ISO8859-7
+iconv-hook ISO-8859-9 ISO8859-9
diff --git a/contrib/iconv/iconv.osf1-4.0d.rc b/contrib/iconv/iconv.osf1-4.0d.rc
new file mode 100644 (file)
index 0000000..837b02f
--- /dev/null
@@ -0,0 +1,4 @@
+iconv-hook CP850 cp850
+iconv-hook ISO-8859-1 ISO8859-1
+iconv-hook ISO-8859-7 ISO8859-7
+iconv-hook ISO-8859-9 ISO8859-9
diff --git a/contrib/iconv/iconv.solaris-2.4.rc b/contrib/iconv/iconv.solaris-2.4.rc
new file mode 100644 (file)
index 0000000..7981bf0
--- /dev/null
@@ -0,0 +1 @@
+iconv-hook  bug
diff --git a/contrib/iconv/iconv.solaris-2.5.1.rc b/contrib/iconv/iconv.solaris-2.5.1.rc
new file mode 100644 (file)
index 0000000..673e46b
--- /dev/null
@@ -0,0 +1 @@
+iconv-hook ISO-8859-1 ISO8859-1
diff --git a/contrib/iconv/iconv.solaris-2.6-cjk.rc b/contrib/iconv/iconv.solaris-2.6-cjk.rc
new file mode 100644 (file)
index 0000000..d0cb0b2
--- /dev/null
@@ -0,0 +1,11 @@
+iconv-hook EUC-CN gb2312
+iconv-hook EUC-JP eucJP
+iconv-hook EUC-KR 5601
+iconv-hook EUC-TW cns11643
+iconv-hook ISO-8859-1 ISO8859-1
+iconv-hook ISO-8859-2 ISO8859-2
+iconv-hook ISO-8859-4 ISO8859-4
+iconv-hook ISO-8859-5 ISO8859-5
+iconv-hook ISO-8859-7 ISO8859-7
+iconv-hook ISO-8859-9 ISO8859-9
+iconv-hook Shift_JIS PCK
diff --git a/contrib/iconv/iconv.solaris-2.6.rc b/contrib/iconv/iconv.solaris-2.6.rc
new file mode 100644 (file)
index 0000000..8ecdb4d
--- /dev/null
@@ -0,0 +1,6 @@
+iconv-hook ISO-8859-1 ISO8859-1
+iconv-hook ISO-8859-2 ISO8859-2
+iconv-hook ISO-8859-4 ISO8859-4
+iconv-hook ISO-8859-5 ISO8859-5
+iconv-hook ISO-8859-7 ISO8859-7
+iconv-hook ISO-8859-9 ISO8859-9
diff --git a/contrib/iconv/iconv.solaris-2.7.rc b/contrib/iconv/iconv.solaris-2.7.rc
new file mode 100644 (file)
index 0000000..e4850b1
--- /dev/null
@@ -0,0 +1,12 @@
+iconv-hook ASCII 646
+iconv-hook ISO-8859-15 ISO8859-15
+iconv-hook ISO-8859-1 ISO8859-1
+iconv-hook ISO-8859-2 ISO8859-2
+iconv-hook ISO-8859-4 ISO8859-4
+iconv-hook ISO-8859-5 ISO8859-5
+iconv-hook ISO-8859-6 ISO8859-6
+iconv-hook ISO-8859-7 ISO8859-7
+iconv-hook ISO-8859-8 ISO8859-8
+iconv-hook ISO-8859-9 ISO8859-9
+iconv-hook KOI8-R koi8-r
+iconv-hook TIS-620 TIS620.2533
diff --git a/contrib/iconv/make.sh b/contrib/iconv/make.sh
new file mode 100755 (executable)
index 0000000..777d002
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh --
+
+#
+# Create sample configuration files from the tables contained with libiconv.
+# Copyright (C) 2001 Thomas Roessler <roessler@does-not-exist.org>
+#
+# This ugly shell script is free software; you can distribute and/or modify
+# it under the terms of the GNU General Public License version 2 or later.
+#
+
+LIBICONV="$1"
+test -d $LIBICONV/libcharset/tools || {
+       echo "Sorry, I can't find libiconv's source!" >&2 ; 
+       exit 1 ;
+}
+
+for f in $LIBICONV/libcharset/tools/* ; do
+       rm -f tmp.rc.
+       ( head -3 $f | grep -q 'locale name.*locale charmap.*locale_charset' ) && (
+               sed '1,/^$/d' $f | awk '($4 != $3) { printf ("iconv-hook %s %s\n", $4, $3); }' | \
+                       sed -e 's/^iconv-hook SJIS /iconv-hook Shift_JIS /gi' |
+                       sort -u > tmp.rc )
+       test -s tmp.rc && mv tmp.rc iconv.`basename $f`.rc
+       rm -f tmp.rc
+done
diff --git a/contrib/language.txt b/contrib/language.txt
new file mode 100644 (file)
index 0000000..a09add2
--- /dev/null
@@ -0,0 +1,3261 @@
+# Translation file for PGP 2.6.3(i)n.
+
+# $Id: language.txt,v 3.0 2002/01/24 12:11:17 roessler Exp $
+
+# ------------------------------------------------------------------
+# Character set:  ISO-Latin/1 (ISO 8859/1)
+# Date revised:   7 October 1997
+# ------------------------------------------------------------------
+# Language:       German/Deutsch (de)
+# Translator:     Frank Pruefer <F.PRUEFER@LINK-L.cl.sub.de>
+#                 (based on the German translation for PGP 2.3a by
+#                 Marc Aurel <4-tea-2@bong.saar.de>)
+# ------------------------------------------------------------------
+# Language:       Spanish/Español (es)
+# Translator:     Armando Ramos <armando@clerval.org>
+# ------------------------------------------------------------------
+# Language:       French/Francais (fr)
+# Translator:     Yanik Crépeau <yanik@mlink.net>
+#                 (based on the French translation for PGP 2.3a by
+#                 Jean-loup Gailly <jloup@chorus.fr>)
+# ------------------------------------------------------------------
+#
+# Additional language files may be obtained from:
+#
+# http://www.ifi.uio.no/pgp/modules.shtml
+# ftp://ftp.ifi.uio.no/pub/pgp/lang/
+#
+# ------------------------------------------------------------------
+
+"\nClear signature file: %s\n"
+de: "\nDateiname der Klartext-Unterschrift: %s\n"
+es: "\nFichero normal con firma: %s\n"
+fr: "\nFichier de signature en clair: %s\n"
+muttde: "\nDateiname der Klartext-Unterschrift: %s\n"
+
+"\nTransport armor file: %s\n"
+de: "\nDateiname der Versandhülle: %s\n"
+es: "\nFichero con armadura: %s\n"
+fr: "\nFichier de transport armure: %s\n"
+muttde: "\nDateiname der Versandhülle: %s\n"
+
+"\nTransport armor files: "
+de: "\nDateinamen der Versandhüllen: "
+es: "\nFicheros con armadura: "
+fr: "\nFichiers de transport armure: "
+muttde: "\nDateinamen der Versandhüllen: "
+
+"Invalid ASCII armor header line: \"%.40s\"\n\
+ASCII armor corrupted.\n"
+de: "\nUnzulässige Kopfzeile \"%.40s\"\n\
+in der ASCII-Versandhülle. Die Versandhülle ist deshalb ungültig.\n"
+es: "Línea incorrecta en la cabecera de la armadura ASCII:\n\
+\"%.40s\"\n\
+Armadura dañada\n"
+fr: "Entête enveloppe ASCII invalide: \"%.40s\"\n\
+l'enveloppe ASCII est corrompue"
+muttde: "\nUnzulässige Kopfzeile \"%.40s\"\n\
+in der ASCII-Versandhülle. Die Versandhülle ist deshalb ungültig.\n"
+
+"Warning: Unrecognized ASCII armor header label \"%.*s:\" ignored.\n"
+de: "\nWARNUNG: Der unbekannte Bezeichner \"%.*s:\"\n\
+in der ASCII-Versandhülle wurde überlesen.\n"
+es: "Advertencia: Se ignora la etiqueta  \"%.*s:\"\n\
+No se reconoce como cabecera de armadura ASCII\n"
+fr: "Avertissement: Type d'entête de l'envloppe ASCII \"%.*s:\" ignoré\n"
+muttde: "\nWARNUNG: Der unbekannte Bezeichner \"%.*s:\"\n\
+in der ASCII-Versandhülle wurde überlesen.\n"
+
+"ERROR: Bad ASCII armor checksum in section %d.\n"
+de: "\nFEHLER: Falsche Prüfsumme im Abschnitt %d der Versandhülle.\n"
+es: "ERROR: Suma incorrecta de comprobación en armadura ASCII,\n\
+sección %d.\n"
+fr: "ERREUR: mauvaise vérification de l'armure ASCII dans la section %d.\n"
+muttde: "\nFEHLER: Falsche Prüfsumme im Abschnitt %d der Versandhülle.\n"
+
+"Can't find section %d.\n"
+de: "\nAbschnitt %d nicht gefunden.\n"
+es: "No se encuentra la sección %d.\n"
+fr: "Section %d introuvable.\n"
+muttde: "\nAbschnitt %d nicht gefunden.\n"
+
+"Badly formed section delimiter, part %d.\n"
+de: "\nFehlerhafter Abschnitts-Begrenzer im Teil %d.\n"
+es: "Delimitador de sección mal formado, parte %d.\n"
+fr: "Séparateurs de section mal formés"
+muttde: "\nFehlerhafter Abschnitts-Begrenzer im Teil %d.\n"
+
+"Sections out of order, expected part %d"
+de: "\nAbschnitte in falscher Reihenfolge.\nErwartet wurde Teil %d"
+es: "Las secciones están desordenadas: se esperaba la parte %d"
+fr: "Sections en désordre, partie %d attendue"
+muttde: "\nAbschnitte in falscher Reihenfolge.\nErwartet wurde Teil %d"
+
+", got part %d\n"
+de: ", angekommen ist Teil %d.\n"
+es: ", se encuentra la parte %d\n"
+fr: ", partie %d obtenue\n"
+muttde: ", angekommen ist Teil %d.\n"
+
+"ERROR: Hit EOF in header of section %d.\n"
+de: "\nFEHLER: EOF (Dateiende) im Header von Abschnitt %d.\n"
+es: "ERROR: Hay un EOF (fin de fichero) en la cabecera de\
+la sección %d.\n"
+fr: "ERREUR: find de fichier dans l'en-tête de la section %d.\n"
+muttde: "\nFEHLER: EOF (Dateiende) im Header von Abschnitt %d.\n"
+
+"ERROR: Badly formed ASCII armor checksum, line %d.\n"
+de: "\nFEHLER: Falsche Prüfsumme in Zeile %d der Versandhülle.\n"
+es: "ERROR: Suma de comprobación mal construida en la armadura ASCII,\n\
+línea %d.\n"
+fr: "ERREUR: Verification de l'armure ASCII mal formée, ligne %d.\n"
+muttde: "\nFEHLER: Falsche Prüfsumme in Zeile %d der Versandhülle.\n"
+
+"WARNING: No ASCII armor `END' line.\n"
+de: "\nWARNUNG: Keine 'END'-Zeile in der Versandhülle.\n"
+es: "ADVERTENCIA: No hay línea `END' en la armadura ASCII.\n"
+fr: "ATTENTION: Pas de ligne `END' dans l'armure ASCII.\n"
+muttde: "\nWARNUNG: Keine 'END'-Zeile in der Versandhülle.\n"
+
+"ERROR: Bad ASCII armor character, line %d.\n"
+de: "\nFEHLER: Unerlaubtes Zeichen in Zeile %d der Versandhülle.\n"
+es: "ERROR: Carácter incorrecto en la armadura ASCII, línea %d.\n"
+fr: "ERREUR: Mauvais charactère dans l'armure ASCII, ligne %d.\n"
+muttde: "\nFEHLER: Unerlaubtes Zeichen in Zeile %d der Versandhülle.\n"
+
+"ERROR: Bad ASCII armor line length %d on line %d.\n"
+de: "\nFEHLER: Falsche Zeilenlänge (%d) in Zeile %d der Versandhülle.\n"
+es: "ERROR: Longitud incorrecta (%d) de línea en la armadura ASCII,\n\
+línea %d.\n"
+fr: "ERREUR: Mauvais longueur de ligne %d dans l'armure ASCII, ligne %d.\n"
+muttde: "\nFEHLER: Falsche Zeilenlänge (%d) in Zeile %d der Versandhülle.\n"
+
+"ERROR: Bad ASCII armor checksum"
+de: "\nFEHLER: Falsche Prüfsumme der Versandhülle"
+es: "ERROR: Suma incorrecta de comprobación en la armadura ASCII"
+fr: "ERREUR de vérification dans l'armure ASCII"
+muttde: "\nFEHLER: Falsche Prüfsumme der Versandhülle"
+
+" in section %d"
+de: " im Abschnitt %d.\n"
+es: " en la sección %d"
+fr: " dans la section %d"
+muttde: " im Abschnitt %d.\n"
+
+"Warning: Transport armor lacks a checksum.\n"
+de: "\nWARNUNG: Die Prüfsumme der Versandhülle fehlt.\n"
+es: "Advertencia: La armadura de transporte no lleva suma de\
+comprobación.\n"
+fr: "Attention: l'armure de transport n'a pas de vérification.\n"
+muttde: "\nWARNUNG: Die Prüfsumme der Versandhülle fehlt.\n"
+
+"ERROR: Can't find file %s\n"
+de: "\nFEHLER: Datei '%s' nicht gefunden.\n"
+es: "ERROR: No se encuentra el fichero %s\n"
+fr: "ERREUR: Fichier %s introuvable\n"
+muttde: "\nFEHLER: Datei '%s' nicht gefunden.\n"
+
+"ERROR: No ASCII armor `BEGIN' line!\n"
+de: "\nFEHLER: Keine 'BEGIN'-Zeile in der Versandhülle!\n"
+es: "ERROR: No hay línea 'BEGIN' en la armadura ASCII\n"
+fr: "ERREUR: Pas de ligne `BEGIN' dans l'armure ASCII!\n"
+muttde: "\nFEHLER: Keine 'BEGIN'-Zeile in der Versandhülle!\n"
+
+"ERROR: ASCII armor decode input ended unexpectedly!\n"
+de: "\nFEHLER: Vorzeitiges Ende der Versandhülle!\n"
+es: "ERROR: La entrada con armadura ASCII termina antes de tiempo\n"
+fr: "ERREUR: fin prématurée du fichier armure ASCII!\n"
+muttde: "\nFEHLER: Vorzeitiges Ende der Versandhülle!\n"
+
+"ERROR: Header line added to ASCII armor: \"%s\"\n\
+ASCII armor corrupted.\n"
+de: "\nFEHLER: Eine Kopfzeile \"%s\" ist\n\
+in der ASCII-Versandhülle enthalten. Die Versandhülle ist deshalb ungültig.\n"
+es: "ERROR: Línea de cabecera añadida a la armadura ASCII:\n\
+\"%s\" Armadura dañada\n"
+fr: "Ligne d'entête ajoutée à l'enveloppe ASCII: \"%s\"\n\
+enveloppe ASCII corrompue"
+muttde: "\nFEHLER: Eine Kopfzeile \"%s\" ist\n\
+in der ASCII-Versandhülle enthalten. Die Versandhülle ist deshalb ungültig.\n"
+
+"\n\007Unable to write ciphertext output file '%s'.\n"
+de: "\n\007FEHLER beim Schreiben der verschlüsselten\nAusgabedatei '%s'.\n"
+es: "\n\007No puede escribirse el fichero de salida cifrado '%s'.\n"
+fr: "\n\007Ecriture impossible dans le fichier de sortie chiffré '%s'.\n"
+mutt: "\nUnable to write ciphertext output file '%s'.\n"
+muttde: "\nFEHLER beim Schreiben der verschlüsselten\nAusgabedatei '%s'.\n"
+
+"ERROR: Hit EOF in header.\n"
+de: "\nFEHLER: EOF (Dateiende) im Header.\n"
+es: "ERROR: Hay un EOF (fin de fichero) en la cabecera.\n"
+fr: "ERREUR: fin de fichier dans l'en-tête.\n"
+muttde: "\nFEHLER: EOF (Dateiende) im Header.\n"
+
+"Unsupported character set: '%s'\n"
+de: "\nKeine Unterstützung für Zeichensatz '%s'.\n"
+es: "Conjunto de caracteres no admitido: '%s'\n"
+fr: "Table de caractères non supportée: '%s'\n"
+muttde: "\nKeine Unterstützung für Zeichensatz '%s'.\n"
+
+"The legal_kludge cannot be disabled in US version.\n"
+de: "LEGAL_KLUDGE kann in der USA-Version nicht abgeschaltet werden!\n"
+es: "'legal_kludge' no puede desactivarse en la versión para los EE.UU.\n"
+fr: "Les embarras légaux ne peuvent pas être désactivés aux Etats-Unis.\n"
+muttde: "LEGAL_KLUDGE kann in der USA-Version nicht abgeschaltet werden!\n"
+
+"The multiple_recipients flag is unnecessary in this \
+version of MacPGP.\
+\nPlease remove this entry from your configuration file.\n"
+de: "Die Kennung \"multiple_recipients\" ist in dieser Version von MacPGP nicht\
+\nnötig. Bitte entferne diesen Eintrag aus Deiner Konfigurationsdatei.\n"
+es: "No se necesita la bandera 'multiple_recipients' en esta versión\n\
+de MacPGP.\
+\nElimina esa entrada del fichero de configuración.\n"
+fr: "L'indicateur de destinataires multiples n'est pas nécessaire dans \
+version de MacPGP. \
+\nS.V.P. supprimez cette entrée de votre fichier de configuration. \n"
+muttde: "Die Kennung \"multiple_recipients\" ist in dieser Version von MacPGP nicht\
+\nnötig. Bitte entferne diesen Eintrag aus Deiner Konfigurationsdatei.\n"
+
+"\007\nWARNING:  This key has been revoked by its owner,\n\
+possibly because the secret key was compromised.\n"
+de: "\007\nWARNUNG: Dieser Schlüssel wurde von seinem Besitzer zurückgezogen,\n\
+möglicherweise, weil sein privater Schlüssel nicht mehr sicher ist.\n"
+es: "\007\nADVERTENCIA: Esta clave ha sido revocada por su propietario;\n\
+es posible que la clave secreta se haya visto comprometida.\n"
+fr: "\007\nATTENTION: cette clé a été révoquée par son propriétaire,\n\
+probablement parce que la clé secrète a été compromise.\n"
+mutt: "\nWARNING:  This key has been revoked by its owner,\n\
+possibly because the secret key was compromised.\n"
+muttde: "\nWARNUNG: Dieser Schlüssel wurde von seinem Besitzer zurückgezogen,\n\
+möglicherweise, weil sein privater Schlüssel nicht mehr sicher ist.\n"
+
+"This could mean that this signature is a forgery.\n"
+de: "Dies könnte bedeuten, daß diese Unterschrift eine Fälschung ist.\n"
+es: "Puede significar que la firma está falsificada.\n"
+fr: "Ceci peut signifier que cette signature est un faux.\n"
+muttde: "Dies könnte bedeuten, daß diese Unterschrift eine Fälschung ist.\n"
+
+"You cannot use this revoked key.\n"
+de: "Du kannst diesen Schlüssel nicht benutzen, weil er zurückgezogen wurde.\n"
+es: "No puedes utilizar esta clave revocada.\n"
+fr: "Vous ne pouvez pas utiliser cette clé révoquée.\n"
+muttde: "Du kannst diesen Schlüssel nicht benutzen, weil er zurückgezogen wurde.\n"
+
+"\007\nWARNING:  Because this public key is not certified with \
+a trusted\nsignature, it is not known with high confidence that this \
+public key\nactually belongs to: \"%s\".\n"
+de: "\007\nWARNUNG: Da dieser öffentliche Schlüssel nicht mit einer vertrauenswürdigen\n\
+Unterschrift beglaubigt ist, ist nicht sicher, daß er wirklich zu\n\"%s\" gehört.\n"
+es: "\nAVISO: Esta clave pública no está certificada con una firma\
+de confianza,\n\
+por lo que no se sabe con seguridad si realmente pertenece a:\n\
+ \"%s\".\n"
+fr: "\007\nATTENTION: Cette clé publique n'est pas certifiée avec une\n\
+signature fiable. Il n'est donc pas reconnu avec un haut degré de confiance\n\
+que cette signature appartient effectivement à: \"%s\".\n"
+mutt: "\nWARNING:  Because this public key is not certified with \
+a trusted\nsignature, it is not known with high confidence that this \
+public key\nactually belongs to: \"%s\".\n"
+muttde: "\nWARNUNG: Da dieser öffentliche Schlüssel nicht mit einer vertrauenswürdigen\n\
+Unterschrift beglaubigt ist, ist nicht sicher, daß er wirklich zu\n\"%s\" gehört.\n"
+
+"\007\nWARNING:  This public key is not trusted to actually belong \
+to:\n\"%s\".\n"
+de: "\007\nWARNUNG: Es ist nicht sicher, daß dieser öffentliche Schlüssel wirklich\n\
+zu \"%s\" gehört.\n"
+es: "\nADVERTENCIA:  No se sabe con seguridad si esta clave pública\n\
+pertenece realmente a: \"%s\".\n"
+fr: "\007\nATTENTION: Cette clé publique n'est pas reconnue comme\n\
+appartenant à: \"%s\".\n"
+mutt: "\nWARNING:  This public key is not trusted to actually belong \
+to:\n\"%s\".\n"
+muttde: "\nWARNUNG: Es ist nicht sicher, daß dieser öffentliche Schlüssel wirklich\n\
+zu \"%s\" gehört.\n"
+
+"\007\nWARNING:  Because this public key is not certified with enough \
+trusted\nsignatures, it is not known with high confidence that this \
+public key\nactually belongs to: \"%s\".\n"
+de: "\007\nWARNUNG: Da dieser öffentliche Schlüssel nicht mit einer ausreichenden\n\
+Anzahl vertrauenswürdiger Unterschriften beglaubigt ist, ist nicht sicher,\n\
+daß er wirklich zu \"%s\" gehört.\n"
+es: "\nADVERTENCIA: Como esta clave no está certificada con suficientes\n\
+firmas fiables, no se sabe con seguridad si realmente pertenece a:\n\
+ \"%s\".\n"
+fr: "\007\nATTENTION: puisque cette clé publique n'est pas certifiée avec\n\
+suffisament de signatures, il n'est pas connu avec un haut niveau de confiance\
+\nque cette clé appartient effectivement à: \"%s\".\n"
+mutt: "\nWARNING:  Because this public key is not certified with enough \
+trusted\nsignatures, it is not known with high confidence that this \
+public key\nactually belongs to: \"%s\".\n"
+muttde: "\nWARNUNG: Da dieser öffentliche Schlüssel nicht mit einer ausreichenden\n\
+Anzahl vertrauenswürdiger Unterschriften beglaubigt ist, ist nicht sicher,\n\
+daß er wirklich zu \"%s\" gehört.\n"
+
+"But you previously approved using this public key anyway.\n"
+de: "Aber Du hast diesen Schlüssel trotzdem bereits benutzt...\n"
+es: "Ya has permitido antes que se utilice esta clave p\372blica.\n"
+fr: "Mais vous avez déjà accepté l'usage de cette clé publique.\n"
+muttde: "Aber Du hast diesen Schlüssel trotzdem bereits benutzt...\n"
+
+"\nAre you sure you want to use this public key (y/N)? "
+de: "\nBist Du sicher, daß Du diesen Schlüssel benutzen willst? (j/N) "
+es: "\n¿Estás seguro de querer utilizar esta clave pública (s/N)? "
+fr: "\nEtes vous sûr(e) de vouloir utiliser cette clé publique (o/N)? "
+muttde: "\nBist Du sicher, daß Du diesen Schlüssel benutzen willst? (j/N) "
+
+"\n\007Unsupported packet format - you need a newer version of PGP \
+for this file.\n"
+de: "\n\007WARNUNG: nicht unterstütztes Datenformat!\n\
+Du brauchst eine neuere PGP-Version für diese Datei.\n"
+es: "\n\007Formato desconocido -\
+se necesita una versión más reciente de PGP"
+fr: "\n\007Format non-supporté - vous devez utiliser un version nouvelle de PGP
+pour ce fichier.\n"
+mutt: "\nUnsupported packet format - you need a newer version of PGP \
+for this file.\n"
+muttde: "\nWARNUNG: nicht unterstütztes Datenformat!\n\
+Du brauchst eine neuere PGP-Version für diese Datei.\n"
+
+"Preparing random session key..."
+de: "\nVorbereitung des zufälligen IDEA-Schlüssels..."
+es: "Preparando la clave aleatoria de la sesión..."
+fr: "Préparation de la clé aléatoire..."
+muttde: "\nVorbereitung des zufälligen IDEA-Schlüssels..."
+
+"\n\007Error: System clock/calendar is set wrong.\n"
+de: "\n\007FEHLER: Die System-Zeit und/oder das System-Datum sind falsch.\n"
+es: "\n\007Error: El reloj/calendario del sistema está equivocado.\n"
+fr: "\n\007Erreur: L'horloge du système est incorrecte.\n"
+mutt: "\nError: System clock/calendar is set wrong.\n"
+muttde: "\nFEHLER: Die System-Zeit und/oder das System-Datum sind falsch.\n"
+
+"Just a moment..."
+de: "\nEinen Augenblick, bitte..."
+es: "Un momento..."
+fr: "Un moment..."
+muttde: "\nEinen Augenblick, bitte..."
+
+"\n\007Can't open input plaintext file '%s'\n"
+de: "\n\007FEHLER beim Öffnen der Eingabedatei '%s'.\n"
+es: "\n\007No puede abrirse el fichero normal de entrada '%s'\n"
+fr: "\n\007Ouverture du fichier en clair '%s' impossible.\n"
+mutt: "\nCan't open input plaintext file '%s'\n"
+muttde: "\nFEHLER beim Öffnen der Eingabedatei '%s'.\n"
+
+"\n\007Can't open plaintext file '%s'\n"
+de: "\n\007FEHLER beim Öffnen der Klartextdatei '%s'.\n"
+es: "\n\007No puede abrirse el fichero normal '%s'\n"
+fr: "\n\007Ouverture du fichier en clair '%s' impossible\n"
+mutt: "\nCan't open plaintext file '%s'\n"
+muttde: "\nFEHLER beim Öffnen der Klartextdatei '%s'.\n"
+
+"\n\007Can't create signature file '%s'\n"
+de: "\n\007FEHLER beim Erzeugen der Unterschriftsdatei '%s'.\n"
+es: "\n\007No puede crearse el fichero de firma '%s'\n"
+fr: "\n\007Création du fichier de signature '%s' impossible\n"
+mutt: "\nCan't create signature file '%s'\n"
+muttde: "\nFEHLER beim Erzeugen der Unterschriftsdatei '%s'.\n"
+
+"\n\007Can't open key ring file '%s'\n"
+de: "\n\007FEHLER beim Öffnen des Schlüsselbunds '%s'.\n"
+es: "\n\007No puede abrirse el anillo de claves '%s'\n"
+fr: "\n\007Ouverture du fichier de clé '%s' impossible\n"
+mutt: "\nCan't open key ring file '%s'\n"
+muttde: "\nFEHLER beim Öffnen des Schlüsselbunds '%s'.\n"
+
+"This key has already been revoked.\n"
+de: "Dieser Schlüssel wurde bereits zurückgezogen.\n"
+es: "Esta clave ya se había revocado.\n"
+fr: "Cette clé a déjà été révoquée.\n"
+muttde: "Dieser Schlüssel wurde bereits zurückgezogen.\n"
+
+"\n\007Can't create output file to update key ring.\n"
+de: "\n\007Dateifehler bei der Aktualisierung des Schlüsselbunds.\n"
+es: "\n\007No puede crearse el fichero de salida para actualizar\
+el anillo.\n"
+fr: "\n\007Impossible de créer le fichier de sortie pour modifier le\
+\nfichier de clés\n"
+mutt: "\nCan't create output file to update key ring.\n"
+muttde: "\nDateifehler bei der Aktualisierung des Schlüsselbunds.\n"
+
+"\nKey compromise certificate created.\n"
+de: "\nDie Urkunde zum Zurückziehen des Schlüssels wurde erzeugt.\n"
+es: "\nCreado el certificado de compromiso de clave.\n"
+fr: "\nCertificat de compromission de clé créé.\n"
+muttde: "\nDie Urkunde zum Zurückziehen des Schlüssels wurde erzeugt.\n"
+
+"\n\007Key is already signed by user '%s'.\n"
+de: "\n\007Der Schlüssel wurde von \"%s\"\nbereits unterschrieben.\n"
+es: "\n\007La clave ya ha sido firmada por '%s'.\n"
+fr: "\n\007La clé est déjà signée par l'utilisateur '%s'.\n"
+mutt: "\nKey is already signed by user '%s'.\n"
+muttde: "\nDer Schlüssel wurde von \"%s\"\nbereits unterschrieben.\n"
+
+"\n\nREAD CAREFULLY:  Based on your own direct first-hand knowledge, \
+are\nyou absolutely certain that you are prepared to solemnly certify \
+that\nthe above public key actually belongs to the user specified by \
+the\nabove user ID (y/N)? "
+de: "\nSORGFÄLTIG LESEN: Bist Du, gestützt auf eigenes, direktes Wissen aus\n\
+erster Hand, absolut sicher, daß Du zuverlässig beglaubigen kannst, daß der\n\
+oben angezeigte öffentliche Schlüssel wirklich zu der oben genannten Person\n\
+gehört? (j/N) "
+es: "\n\nLEE ATENTAMENTE: Según tu conocimiento directo,\n\
+¿estás absolutamente seguro de poder certificar solemnemente que la\n\
+clave pública pertenece realmente al usuario especificado por\n\
+este identificador (s/N)? "
+fr: "\n\nLIRE ATTENTIVEMENT: Selon votre propre connaissance directe,\n\
+êtes vous absoluement certain(e) d'être prêt(e) à certifier\n\
+solennellement que la clé publique ci-dessus appartient effectivement à\n\
+la personne spécifiée par le nom d'utilisateur ci-dessus (o/N)? "
+muttde: "\nSORGFÄLTIG LESEN: Bist Du, gestützt auf eigenes, direktes Wissen aus\n\
+erster Hand, absolut sicher, daß Du zuverlässig beglaubigen kannst, daß der\n\
+oben angezeigte öffentliche Schlüssel wirklich zu der oben genannten Person\n\
+gehört? (j/N) "
+
+"\nKey signature certificate added.\n"
+de: "\n\nDer Schlüssel wurde mit Deiner Unterschrift beglaubigt.\n"
+es: "\nSe ha añadido el certificado de firma.\n"
+fr: "\nCertificat de signature de clé ajouté.\n"
+muttde: "\n\nDer Schlüssel wurde mit Deiner Unterschrift beglaubigt.\n"
+
+"\nError: Key for signing userid '%s'\n\
+does not appear in public keyring '%s'.\n\
+Thus, a signature made with this key cannot be checked on this keyring.\n"
+de: "\nFEHLER: Der Schlüssel für eine Unterschrift unter die Benutzer-ID\n\
+\"%s\" ist nicht im öffentlichen\n\
+Schlüsselbund '%s' enthalten. Deshalb ist eine mit diesem\n\
+Schlüssel erzeugte Unterschrift mit diesem Schlüsselbund nicht überprüfbar.\n"
+es: "\nError: La clave del firmante '%s'\n\
+no se encuentra en el anillo '%s'.\n\
+No puede comprobarse la firma realizada con esa clave.\n"
+fr: "\nErreur: La clef du signataire id '%s'\n\
+est absente du fichier de clefs publiques '%s'\n\
+en consequence, une signature faite avec cette clef ne peut etre verifiee.\n"
+muttde: "\nFEHLER: Der Schlüssel für eine Unterschrift unter die Benutzer-ID\n\
+\"%s\" ist nicht im öffentlichen\n\
+Schlüsselbund '%s' enthalten. Deshalb ist eine mit diesem\n\
+Schlüssel erzeugte Unterschrift mit diesem Schlüsselbund nicht überprüfbar.\n"
+
+"\nLooking for key for user '%s':\n"
+de: "\nSuche den Schlüssel für \"%s\":\n"
+es: "\nBuscando la clave del usuario '%s':\n"
+fr: "\nRecherche de la clé pour l'utilisateur '%s':\n"
+muttde: "\nSuche den Schlüssel für \"%s\":\n"
+
+"\n\007Can't open ciphertext file '%s'\n"
+de: "\n\007FEHLER beim Öffnen der verschlüsselten Datei '%s'.\n"
+es: "\n\007No puede abrirse el fichero cifrado '%s'\n"
+fr: "\n\007Ouverture du fichier chiffré '%s' impossible\n"
+mutt: "\nCan't open ciphertext file '%s'\n"
+muttde: "\nFEHLER beim Öffnen der verschlüsselten Datei '%s'.\n"
+
+"\nFile '%s' has signature, but with no text."
+de: "\nDie Datei '%s' enthält eine Unterschrift, aber keinen Text."
+es: "\nEl fichero '%s' tiene firma, pero no texto."
+fr: "\nLe fichier '%s' à une signature, mais pas de texte."
+mutt: " "
+muttde: " "
+
+"\nText is assumed to be in file '%s'.\n"
+de: "\nDer Text könnte sich in der Datei '%s' befinden.\n"
+es: "\nSe asume que el texto se encuentra en el fichero '%s'.\n"
+fr: "\nLe texte est supposé être dans le fichier '%s'.\n"
+mutt: " "
+muttde: " "
+
+"\nPlease enter filename of material that signature applies to: "
+de: "\nName der Datei, zu der die Unterschrift gehört: "
+es: "\nIntroduzca el nombre del fichero al que se aplica la firma: "
+fr: "SVP indiques le nom du fichier que vous voulez signer: "
+muttde: "\nName der Datei, zu der die Unterschrift gehört: "
+
+"File signature applies to?"
+de: "Die Unterschrift gehört zu welcher Datei?"
+es: "¿Dónde se aplica la firma?"
+fr: "Ce fichier signataire s'applique à quoi? "
+muttde: "Die Unterschrift gehört zu welcher Datei?"
+
+"\n\007Can't open file '%s'\n"
+de: "\n\007FEHLER beim Öffnen der Datei '%s'.\n"
+es: "\n\007No puede abrirse el fichero '%s'\n"
+fr: "\n\007Ouverture du fichier '%s' impossible\n"
+mutt: "\nCan't open file '%s'\n"
+muttde: "\nFEHLER beim Öffnen der Datei '%s'.\n"
+
+"File type: '%c'\n"
+de: "\nDateityp: '%c'\n"
+es: "\nTipo de fichero: '%c'\n"
+fr: "Type de fichier: '%c'\n"
+muttde: "\nDateityp: '%c'\n"
+
+"Original plaintext file name was: '%s'\n"
+de: "Der ursprüngliche Name der Klartextdatei war: '%s'.\n"
+es: "El nombre del fichero original era: '%s'\n"
+fr: "Le nom originel du fichier en clair était: '%s'\n"
+muttde: "Der ursprüngliche Name der Klartextdatei war: '%s'.\n"
+
+"\nWARNING: Can't find the right public key-- can't check signature \
+integrity.\n"
+de: "\nWARNUNG: Der passende öffentliche Schlüssel wurde nicht gefunden.\n\
+Eine Überprüfung der Unterschrift ist nicht möglich.\n"
+es: "\nAVISO: No se encuentra la clave pública necesaria para comprobar\n\
+la integridad de la firma.\n"
+fr: "\nATTENTION: impossible de trouver la clé publique adéquate et de\n\
+vérifier l'integrité de la signature.\n"
+muttde: "\nWARNUNG: Der passende öffentliche Schlüssel wurde nicht gefunden.\n\
+Eine Überprüfung der Unterschrift ist nicht möglich.\n"
+
+"\007\nUnrecognized message digest algorithm.\n\
+This may require a newer version of PGP.\n\
+Can't check signature integrity.\n"
+de: "\007\nDer Algorithmus für die Textprüfsumme ist unbekannt.\n\
+Du brauchst wahrscheinlich eine neuere Version von PGP.\n\
+Eine Überprüfung der Unterschrift ist nicht möglich.\n"
+es: "\007\nAlgoritmo desconocido de resumen de mensaje.\n\
+Puede necesitarse una nueva versión de PGP.\n\
+No puede comprobarse la integridad de la firma.\n"
+fr: "\007Algorithme de digest inconnu.\n\
+Ceci peut vouloir dire que vous avez besoin d'une version plus récente\n\
+de PGP. Incapable de vérifier la signature.\n"
+mutt: "\nUnrecognized message digest algorithm.\n\
+This may require a newer version of PGP.\n\
+Can't check signature integrity.\n"
+muttde: "\nDer Algorithmus für die Textprüfsumme ist unbekannt.\n\
+Du brauchst wahrscheinlich eine neuere Version von PGP.\n\
+Eine Überprüfung der Unterschrift ist nicht möglich.\n"
+
+"\a\nMalformed or obsolete signature.  Can't check signature \
+integrity.\n"
+de: "\a\nFehlerhafte oder veraltete Unterschrift! Überprüfung nicht möglich.\n"
+es: "\a\nFirma incorrecta u obsoleta.\n\
+No puede comprobarse su integridad.\n"
+fr: "\a\nSignature déformée ou obsolète. Vérification impossible. \n"
+muttde: "\a\nFehlerhafte oder veraltete Unterschrift! Überprüfung nicht möglich.\n"
+
+"\a\nSigning key is too large.  Can't check signature integrity.\n"
+de: "\a\nDer unterschreibende Schlüssel ist zu lang! Eine Überprüfung der\n\
+Unterschrift ist deshalb nicht möglich.\n"
+es: "\a\nLa clave para firmar es demasiado grande.\n\
+No puede comprobarse la integridad de la firma."
+fr: "La clef signataire est trop grande. Incapable d'en vérifier l'intégrité. \n"
+muttde: "\a\nDer unterschreibende Schlüssel ist zu lang! Eine Überprüfung der\n\
+Unterschrift ist deshalb nicht möglich.\n"
+
+"\n\007Error: RSA-decrypted block is corrupted.\n\
+This may be caused either by corrupted data or by using the wrong RSA key.\n\
+"
+de: "\n\007FEHLER: Die mit RSA entschlüsselten Daten sind fehlerhaft.\n\
+Ursache: beschädigte Daten oder ein falscher RSA-Schlüssel.\n"
+es: "\n\007Error: El bloque desencriptado RSA está dañado.\n\
+Puede deberse a un problema en los datos o a una clave RSA equivocada.\n"
+fr: "\n\007Erreur: le block dechiffré par RSA est endommagé.\n\
+Ceci est peut être causé par des données endommagées our par\n\
+l'utilisation d'une mauvaise clé RSA.\n"
+mutt: "\nError: RSA-decrypted block is corrupted.\n\
+This may be caused either by corrupted data or by using the wrong RSA key.\n\
+"
+muttde: "\nFEHLER: Die mit RSA entschlüsselten Daten sind fehlerhaft.\n\
+Ursache: beschädigte Daten oder ein falscher RSA-Schlüssel.\n"
+
+"WARNING: Bad signature, doesn't match file contents!"
+de: "WARNUNG: Die Unterschrift stimmt nicht mit dem Datei-Inhalt überein!"
+es: "ADVERTENCIA: Firma incorrecta, no coincide con el contenido\
+del fichero\n"
+fr: "ATTENTION: Mauvaise signature, ne correspond pas au contenu!"
+muttde: "WARNUNG: Die Unterschrift stimmt nicht mit dem Datei-Inhalt überein!"
+
+"\nBad signature from user \"%s\".\n"
+de: "\nFEHLERHAFTE Unterschrift von \"%s\",\n"
+es: "\nFirma incorrecta de \"%s\".\n"
+fr: "\nMauvaise signature de l'utilisateur \"%s\".\n"
+muttde: "\nFEHLERHAFTE Unterschrift von \"%s\",\n"
+
+"Signature made %s using %d-bit key, key ID %s\n"
+de: "Unterschrift erzeugt am %s mit %d-Bit-Schlüssel 0x%s.\n"
+es: "Firma realizada el %s con una clave de %d bits, identificador %s\n"
+fr: "Signature faite %s en utilisant un clef de %d bits. Id de la clef:%s\n"
+muttde: "Unterschrift erzeugt am %s mit %d-Bit-Schlüssel 0x%s.\n"
+
+"\nPress ENTER to continue..."
+de: "\nWeiter mit Return..."
+es: "\nPulse 'Enter' para continuar..."
+fr: "\nAppuyez sur la touche Retour ou Entrée pour continuer..."
+muttde: "\nWeiter mit Return..."
+
+"\nGood signature from user \"%s\".\n"
+de: "\nBESTÄTIGTE Unterschrift von \"%s\",\n"
+es: "\nFirma correcta de \"%s\".\n"
+fr: "\nBonne signature de l'utilisateur \"%s\".\n"
+muttde: "\nBESTÄTIGTE Unterschrift von \"%s\",\n"
+
+"\nSignature and text are separate.  No output file produced. "
+de: "\nUnterschrift und Text sind getrennt. Es wurde keine Ausgabedatei erzeugt."
+es: "\nLa firma y el texto están separados.\n\
+No se produce fichero de salida. "
+fr: "\nLa signature et le texte sont séparés. Fichier de sortie non produit."
+muttde: "\nUnterschrift und Text sind getrennt. Es wurde keine Ausgabedatei erzeugt."
+
+"\n\007Can't create plaintext file '%s'\n"
+de: "\n\007FEHLER beim Erzeugen der Klartextdatei '%s'.\n"
+es: "\n\007No puede crearse el fichero normal '%s'\n"
+fr: "\n\007Creation du fichier en clair '%s' impossible.\n"
+mutt: "\nCan't create plaintext file '%s'\n"
+muttde: "\nFEHLER beim Erzeugen der Klartextdatei '%s'.\n"
+
+"\n\007Signature file '%s' already exists.  Overwrite (y/N)? "
+de: "\n\007Die Unterschriftsdatei '%s'\nexistiert bereits. Überschreiben? (j/N) "
+es: "\n\007El fichero de firma '%s' ya existe.\n\
+¿Se sobreescribe (s/N)? "
+fr: "\n\007Le fichier de signature '%s' existe déjà.  A écraser (o/N)? "
+mutt: "\nSignature file '%s' already exists.  Overwrite (y/N)? "
+muttde: "\nDie Unterschriftsdatei '%s'\nexistiert bereits. Überschreiben? (j/N) "
+
+"\nWriting signature certificate to '%s'\n"
+de: "\nDie Unterschrift wird in die Datei '%s' geschrieben.\n"
+es: "\nEscribiendo el certificado de firma para '%s'\n"
+fr: "\nEcriture du certificat de signature dans '%s'\n"
+muttde: "\nDie Unterschrift wird in die Datei '%s' geschrieben.\n"
+
+"\n\007Error: Badly-formed or corrupted signature certificate.\n"
+de: "\n\007FEHLER: Format- oder Datenfehler in der Unterschrift.\n"
+es: "\n\007Error: Certificado de firma incorrecto o dañado.\n"
+fr: "\n\007Erreur: certificat de signature mal formé ou endommagé\n"
+mutt: "\nError: Badly-formed or corrupted signature certificate.\n"
+muttde: "\nFEHLER: Format- oder Datenfehler in der Unterschrift.\n"
+
+"File \"%s\" does not have a properly-formed signature.\n"
+de: "Die Datei '%s' hat keine formal korrekte Unterschrift.\n"
+es: "El fichero \"%s\" no tiene una firma construida correctamente.\n"
+fr: "Le fichier \"%s\" n'a pas une signature correctement formée.\n"
+muttde: "Die Datei '%s' hat keine formal korrekte Unterschrift.\n"
+
+"compressed.  "
+de: "gepackt.  "
+es: "comprimido.  "
+fr: "comprimé.  "
+muttde: "gepackt.  "
+
+"\n\007Can't create compressed file '%s'\n"
+de: "\n\007FEHLER beim Erzeugen der gepackten Datei '%s'.\n"
+es: "\n\007No puede crearse el fichero comprimido '%s'\n"
+fr: "\n\007Création du fichier compressé '%s' impossible\n"
+mutt: "\nCan't create compressed file '%s'\n"
+muttde: "\nFEHLER beim Erzeugen der gepackten Datei '%s'.\n"
+
+"Compressing file..."
+de: "Packen der Datei..."
+es: "Comprimiendo el fichero..."
+fr: "Compression du fichier..."
+muttde: "Packen der Datei..."
+
+"\n\007Can't create ciphertext file '%s'\n"
+de: "\n\007FEHLER beim Erzeugen der verschlüsselten\nAusgabedatei '%s'.\n"
+es: "\n\007No puede crearse el fichero cifrado '%s'\n"
+fr: "\n\007Création du fichier chiffré '%s' impossible.\n"
+mutt: "\nCan't create ciphertext file '%s'\n"
+muttde: "\nFEHLER beim Erzeugen der verschlüsselten\nAusgabedatei '%s'.\n"
+
+"\nYou need a pass phrase to encrypt the file. "
+de: "\nDu brauchst ein Mantra zum Verschlüsseln der Datei."
+es: "\nSe necesita una contraseña para encriptar el fichero. "
+fr: "\nUn mot de passe est nécessaire pour chiffrer ce fichier. "
+muttde: "\nDu brauchst ein Mantra zum Verschlüsseln der Datei."
+
+"\n\007Cannot find the public key matching userid '%s'\n\
+This user will not be able to decrypt this message.\n"
+de: "\n\007Der öffentliche Schlüssel zu Benutzer-ID \"%s\"\n\
+ist nicht aufzufinden. Dieser Empfänger wird diese Nachricht nicht\n\
+entschlüsseln können.\n"
+es: "\n\007No puede encontrarse la clave pública de '%s'\n\
+Ese usuario no podrá descifrar el mensaje.\n"
+fr: "\n\007Impossible de trouver la clé publique pour l'utilisateur '%s'\n\
+Cet utilisateur ne pourra pas déchiffrer ce message.\n"
+mutt: "\nCannot find the public key matching userid '%s'\n\
+This user will not be able to decrypt this message.\n"
+muttde: "\nDer öffentliche Schlüssel zu Benutzer-ID \"%s\"\n\
+ist nicht aufzufinden. Dieser Empfänger wird diese Nachricht nicht\n\
+entschlüsseln können.\n"
+
+"Skipping userid %s\n"
+de: "Die Benutzer-ID \"%s\" wird übersprungen.\n"
+es: "Saltando el identificador %s\n"
+fr: "je passe l'utiliateur %s\n"
+muttde: "Die Benutzer-ID \"%s\" wird übersprungen.\n"
+
+"\n\007'%s' is not a cipher file.\n"
+de: "\n\007'%s' ist keine verschlüsselte Datei.\n"
+es: "\n\007'%s' no es un fichero cifrado.\n"
+fr: "\n\007'%s' n'est pas un fichier chiffré.\n"
+mutt: "\n'%s' is not a cipher file.\n"
+muttde: "\n'%s' ist keine verschlüsselte Datei.\n"
+
+"\n\007Error: RSA block is possibly malformed.  Old format, maybe?\n"
+de: "\n\007FEHLER: RSA-Block möglicherweise fehlerhaft. Vielleicht altes Format?\n"
+es: "\n\007Error: El bloque RSA está mal formado.\n\
+Quizá se trate de un formato antiguo.\n"
+fr: "\n\007Erreur: Block RSA malformé, vieux format ???"
+mutt: "\nError: RSA block is possibly malformed.  Old format, maybe?\n"
+muttde: "\nFEHLER: RSA-Block möglicherweise fehlerhaft. Vielleicht altes Format?\n"
+
+"\nThis message can only be read by:\n"
+de: "\nDiese Nachricht kann nur gelesen werden von:\n"
+es: "\nEste mensaje sólo puede leerlo:\n"
+fr: "\nCe message ne peut être lu que par:\n"
+muttde: "\nDiese Nachricht kann nur gelesen werden von:\n"
+
+"  keyID: %s\n"
+de: "  Schlüssel-ID: %s\n"
+es: "  identificador: %s\n"
+fr: "   Id de la clef: %s \n"
+muttde: "  Schlüssel-ID: %s\n"
+
+"\n\007You do not have the secret key needed to decrypt this file.\n"
+de: "\n\007Dir fehlt der private Schlüssel zum Entschlüsseln dieser Datei.\n"
+es: "\n\007No tienes la clave secreta necesaria para descifrar\
+este fichero.\n"
+fr: "\n\007Vous n'avez pas la clé secrète requise pour déchiffrer\
+\nce fichier.\n"
+mutt: "\nYou do not have the secret key needed to decrypt this file.\n"
+muttde: "\nDir fehlt der private Schlüssel zum Entschlüsseln dieser Datei.\n"
+
+"\n\007Error: Decrypted plaintext is corrupted.\n"
+de: "\n\007FEHLER: Der entschlüsselte Klartext ist fehlerhaft.\n"
+es: "\n\007Error: El texto en claro desencriptado está dañado.\n"
+fr: "\n\007Erreur: le fichier déchiffré est endommagé.\n"
+mutt: "\nError: Decrypted plaintext is corrupted.\n"
+muttde: "\nFEHLER: Der entschlüsselte Klartext ist fehlerhaft.\n"
+
+"\nYou need a pass phrase to decrypt this file. "
+de: "\nDu brauchst ein Mantra zum Entschlüsseln dieser Datei."
+es: "\nSe necesita la contraseña para desencriptar este fichero. "
+fr: "\nUn mot de passe est nécessaire pour déchiffrer ce fichier. "
+muttde: "\nDu brauchst ein Mantra zum Entschlüsseln dieser Datei."
+
+"\n\007Error:  Bad pass phrase.\n"
+de: "\n\007FEHLER: Falsches Mantra!\n"
+es: "\n\007Error:  Contraseña incorrecta.\n"
+fr: "\n\007Erreur:  Mauvais mot de passe.\n"
+mutt: "\nError:  Bad pass phrase.\n"
+muttde: "\nFEHLER: Falsches Mantra!\n"
+
+"Pass phrase appears good. "
+de: "\nDas Mantra scheint zu stimmen.\n"
+es: "Parece correcta. "
+fr: "Le mot de passe semble correct. "
+muttde: "\nDas Mantra scheint zu stimmen.\n"
+
+"Decompressing plaintext..."
+de: "Entpacken des Klartextes..."
+es: "Descomprimiendo el texto normal..."
+fr: "Decompression du texte en clair..."
+muttde: "Entpacken des Klartextes..."
+
+"\n\007Can't open compressed file '%s'\n"
+de: "\n\007FEHLER beim Öffnen der gepackten Datei '%s'.\n"
+es: "\n\007No puede abrirse el fichero comprimido '%s'\n"
+fr: "\n\007Ouverture du fichier compressé '%s' impossible.\n"
+mutt: "\nCan't open compressed file '%s'\n"
+muttde: "\nFEHLER beim Öffnen der gepackten Datei '%s'.\n"
+
+"\007\nUnrecognized compression algorithm.\n\
+This may require a newer version of PGP.\n"
+de: "\007\nUnbekanntes Pack-Verfahren. Eine neuere Version von PGP könnte notwendig sein.\n"
+es: "\007\nAlgoritmo de compresión no reconocido.\n\
+Puede necesitarse una nueva versión de PGP.\n"
+fr: "\007\nAlgorithme de compression non reconnu.\n\
+Ceci peut nécessiter une nouvelle version de PGP.\n"
+mutt: "\nUnrecognized compression algorithm.\n\
+This may require a newer version of PGP.\n"
+muttde: "\nUnbekanntes Pack-Verfahren. Eine neuere Version von PGP könnte notwendig sein.\n"
+
+"\n\007Can't create decompressed file '%s'\n"
+de: "\n\007FEHLER beim Erzeugen der entpackten Datei '%s'.\n"
+es: "\n\007No puede crearse el fichero descomprimido '%s'\n"
+fr: "\n\007Création du fichier décompressé '%s' impossible.\n"
+mutt: "\nCan't create decompressed file '%s'\n"
+muttde: "\nFEHLER beim Erzeugen der entpackten Datei '%s'.\n"
+
+"\n\007Decompression error.  Probable corrupted input.\n"
+de: "\n\007FEHLER beim Entpacken! Wahrscheinlich beschädigte Eingangsdaten.\n"
+es: "\n007Error en descompresión. Probable entrada dañada.\n"
+fr: "\n\007Erreur de Decompression, entrée probablement corrompue"
+mutt: "\nDecompression error.  Probable corrupted input.\n"
+muttde: "\nFEHLER beim Entpacken! Wahrscheinlich beschädigte Eingangsdaten.\n"
+
+"done.  "
+de: "fertig.  "
+es: "finalizado.  "
+fr: "terminé.  "
+muttde: "fertig.  "
+
+"Truncating filename '%s' "
+de: "Kürzung des Dateinamens '%s' "
+es: "Truncando el nombre de fichero '%s' "
+fr: "troncation du fichier '%s'"
+muttde: "Kürzung des Dateinamens '%s' "
+
+"y"
+de: "j"
+es: "s"
+fr: "o"
+muttde: "j"
+
+"n"
+de: "n"
+es: "n"
+fr: "n"
+muttde: "n"
+
+"\nShould '%s' be renamed to '%s' (Y/n)? "
+de: "\nSoll '%s' in '%s' umbenannt werden? (J/n) "
+es: "\n¿Renombrar '%s' como '%s' (S/n)? "
+fr: "\nEst-ce que '%s' doit être renommé '%s' (O/n)? "
+muttde: "\nSoll '%s' in '%s' umbenannt werden? (J/n) "
+
+"\nDisk full.\n"
+de: "\nDie Platte ist voll!\n"
+es: "\nDisco lleno.\n"
+fr: "\nDisque plein.\n"
+muttde: "\nDie Platte ist voll!\n"
+
+"\nFile write error.\n"
+de: "\nFEHLER beim Schreiben einer Datei.\n"
+es: "\nError de escritura del fichero.\n"
+fr: "\nErreur d'écriture sur fichier.\n"
+muttde: "\nFEHLER beim Schreiben einer Datei.\n"
+
+"\007Write error on stdout.\n"
+de: "\n\007FEHLER beim Schreiben auf stdout (Standard-Ausgabe).\n"
+es: "\007Error de escritura en la salida estándar (\"stdout\").\n"
+fr: "\007Erreur d'écriture sur la sortie standard.\n"
+mutt: "Write error on stdout.\n"
+muttde: "\nFEHLER beim Schreiben auf stdout (Standard-Ausgabe).\n"
+
+"\n\007Cannot create temporary file '%s'\n"
+de: "\n\007FEHLER beim Erzeugen der Temporärdatei '%s'.\n"
+es: "\n\007No puede crearse el fichero temporal '%s'\n"
+fr: "\n\007Création du fichier temporaire '%s' impossible\n"
+mutt: "\nCannot create temporary file '%s'\n"
+muttde: "\nFEHLER beim Erzeugen der Temporärdatei '%s'.\n"
+
+"Can't create output file '%s'\n"
+de: "\nFEHLER beim Erzeugen der Ausgabedatei '%s'.\n"
+es: "No puede crearse el fichero '%s'\n"
+fr: "Création du fichier '%s' impossible.\n"
+muttde: "\nFEHLER beim Erzeugen der Ausgabedatei '%s'.\n"
+
+"\n\007Output file '%s' already exists.\n"
+de: "\n\007Die Ausgabedatei '%s' existiert bereits.\n"
+es: "\n\007El fichero de salida '%s' ya existe.\n"
+fr: "\n\007Le ficher de sortie '%s' existe déjà.\n"
+mutt: "\nOutput file '%s' already exists.\n"
+muttde: "\nDie Ausgabedatei '%s' existiert bereits.\n"
+
+"\n\007Output file '%s' already exists.  Overwrite (y/N)? "
+de: "\n\007Die Ausgabedatei '%s' existiert bereits. Überschreiben? (j/N) "
+es: "\n\007El fichero de salida '%s' ya existe. ¿Sobrescribir (s/N)? "
+fr: "\n\007Le fichier de sortie '%s' existe déjà.  A écraser (o/N)? "
+mutt: "\nOutput file '%s' already exists.  Overwrite (y/N)? "
+muttde: "\nDie Ausgabedatei '%s' existiert bereits. Überschreiben? (j/N) "
+
+"Enter new file name:"
+de: "Gib den neuen Dateinamen ein:"
+es: "Introduzca el nuevo nombre de fichero: "
+fr: "Donnez un nouveau nom de fichier:"
+muttde: "Gib den neuen Dateinamen ein:"
+
+"Replacing signature from keyID %s on userid \"%s\"\n"
+de: "Die Unterschrift von der Schlüssel-ID %s unter der\n\
+Benutzer-ID \"%s\" wird ersetzt.\n"
+es: "Sustituyendo la firma de la clave %s para el usuario\n\
+\"%s\"\n"
+fr: "Remplacement la signature de keyID %s de l'utilisateur '%s'\n"
+muttde: "Die Unterschrift von der Schlüssel-ID %s unter der\n\
+Benutzer-ID \"%s\" wird ersetzt.\n"
+
+"Verifying signature from %s\n"
+de: "Überprüfung der Unterschrift von \"%s\"\n"
+es: "Verificando la firma de %s\n"
+fr: "Vérification de la signature de %s\n"
+muttde: "Überprüfung der Unterschrift von \"%s\"\n"
+
+"on userid \"%s\"\n"
+de: "unter \"%s\".\n"
+es: "en el identificador \"%s\"\n"
+fr: "pour le nom d'utilisateur \"%s\"\n"
+muttde: "unter \"%s\".\n"
+
+"Replacing signature from %s\n"
+de: "Ersetzung der Unterschrift von \"%s\"\n"
+es: "Sustituyendo la firma de %s\n"
+fr: "Remplacement de la signature de %s"
+muttde: "Ersetzung der Unterschrift von \"%s\"\n"
+
+"Verification Failed\n"
+de: "\nDie Überprüfung ist fehlgeschlagen!\n"
+es: "Verificación fallida\n"
+fr: "Echec de la vérification"
+muttde: "\nDie Überprüfung ist fehlgeschlagen!\n"
+
+"New signature from keyID %s on userid \"%s\"\n"
+de: "Neue Unterschrift von %s unter \"%s\".\n"
+es: "Nueva firma de la clave %s para el usuario \"%s\"\n"
+fr: "Nouvelle signature de la clé %s sur l'utilisateur \"%s\"\n"
+muttde: "Neue Unterschrift von %s unter \"%s\".\n"
+
+"New signature from %s\n"
+de: "Neue Unterschrift von \"%s\"\n"
+es: "Nueva firma de %s\n"
+fr: "\nNouvelle signature de %s\n"
+muttde: "Neue Unterschrift von \"%s\"\n"
+
+"Key revocation certificate from \"%s\".\n"
+de: "Urkunde zum Zurückziehen eines Schlüssels\nvon \"%s\".\n"
+es: "Certificado de revocación de clave de \"%s\".\n"
+fr: "Certificat de révocation de clé de \"%s\".\n"
+muttde: "Urkunde zum Zurückziehen eines Schlüssels\nvon \"%s\".\n"
+
+"\n\007WARNING:  File '%s' contains bad revocation certificate.\n"
+de: "\n\007WARNUNG: Die Datei '%s' enthält eine\n\
+fehlerhafte Urkunde zum Zurückziehen eines Schlüssels.\n"
+es: "\n\007AVISO: El fichero '%s' tiene un certificado de revocación\
+incorrecto.\n"
+fr: "\n\007ATTENTION: the fichier '%s' contient de mauvais certificats\n\
+de révocation.\n"
+mutt: "\nWARNING:  File '%s' contains bad revocation certificate.\n"
+muttde: "\nWARNUNG: Die Datei '%s' enthält eine\n\
+fehlerhafte Urkunde zum Zurückziehen eines Schlüssels.\n"
+
+"New userid: \"%s\".\n"
+de: "Neue Benutzer-ID: \"%s\".\n"
+es: "Nuevo identificador: \"%s\".\n"
+fr: "Nouveau nom d'utilisateur: \"%s\".\n"
+muttde: "Neue Benutzer-ID: \"%s\".\n"
+
+"\nWill be added to the following key:\n"
+de: "Sie wird zu dem folgenden Schlüssel hinzugefügt:\n"
+es: "\nSe añadirá a la clave siguiente:\n"
+fr: "\nSera ajouté(e) à la clé suivante:\n"
+muttde: "Sie wird zu dem folgenden Schlüssel hinzugefügt:\n"
+
+"\nAdd this userid (y/N)? "
+de: "\nSoll diese Benutzer-ID hinzugefügt werden? (j/N) "
+es: "\n¿Añadir este identificador (s/N)? "
+fr: "\nAjouter ce nom d'utilisateur (o/N)? "
+muttde: "\nSoll diese Benutzer-ID hinzugefügt werden? (j/N) "
+
+"\n\007Can't open key file '%s'\n"
+de: "\n\007FEHLER beim Öffnen der Schlüsseldatei '%s'.\n"
+es: "\n\007No puede abrirse el fichero de claves '%s'\n"
+fr: "\n\007Ouverture du fichier de clé '%s' impossible\n"
+mutt: "\nCan't open key file '%s'\n"
+muttde: "\nFEHLER beim Öffnen der Schlüsseldatei '%s'.\n"
+
+"\nKey ring file '%s' cannot be created.\n"
+de: "\nFEHLER beim Anlegen des Schlüsselbunds '%s'.\n"
+es: "\nNo se puede crear el anillo de claves '%s'.\n"
+fr: "\nCréation du fichier de clés '%s' impossible.\n"
+muttde: "\nFEHLER beim Anlegen des Schlüsselbunds '%s'.\n"
+
+"\nLooking for new keys...\n"
+de: "\nSuche nach neuen Schlüsseln...\n"
+es: "\nBuscando nuevas claves...\n"
+fr: "\nRecherche des nouvelles clés...\n"
+muttde: "\nSuche nach neuen Schlüsseln...\n"
+
+"\n\007Could not read key from file '%s'.\n"
+de: "\n\007FEHLER beim Lesen des Schlüssels aus Datei '%s'.\n"
+es: "\n\007No ha podido leerse la clave en el fichero '%s'.\n"
+fr: "\n\007Lecture impossible de la clé dans le fichier '%s'.\n"
+mutt: "\nCould not read key from file '%s'.\n"
+muttde: "\nFEHLER beim Lesen des Schlüssels aus Datei '%s'.\n"
+
+"\n\007Warning: Key ID %s matches key ID of key already on \n\
+key ring '%s', but the keys themselves differ.\n\
+This is highly suspicious.  This key will not be added to ring.\n\
+Acknowledge by pressing return: "
+de: "\n\007WARNUNG: Die Schlüssel-ID %s stimmt mit einem schon\n\
+im Schlüsselbund '%s' vorhandenen Schlüssel\n\
+überein, aber die Schlüssel selbst sind nicht identisch.\n\
+Das ist höchst verdächtig! Dieser Schlüssel wird nicht zum\n\
+Schlüsselbund hinzugefügt. Mit Return bestätigen: "
+es: "\n\007Advertencia: El identificador de clave %s coincide con otro\n\
+en el anillo '%s', pero las claves son distintas.\n\
+Es muy sospechoso. Esta clave no se incluirá en el anillo.\n\
+Confirmar pulsando 'retorno': "
+fr: "\n\007Attention: l'identificateur de clé %s correspond à une clé\
+\ndéjà dans le fichier de clés '%s', mais les clés sont différentes.\
+\nCeci est très suspect. Cette clé ne sera pas ajoutée au fichier de clés.\
+\nAppuyez sur la touche Retour ou Entrée: "
+mutt: "\nWarning: Key ID %s matches key ID of key already on \n\
+key ring '%s', but the keys themselves differ.\n\
+This is highly suspicious.  This key will not be added to ring.\n\
+Acknowledge by pressing return: "
+muttde: "\nWARNUNG: Die Schlüssel-ID %s stimmt mit einem schon\n\
+im Schlüsselbund '%s' vorhandenen Schlüssel\n\
+überein, aber die Schlüssel selbst sind nicht identisch.\n\
+Das ist höchst verdächtig! Dieser Schlüssel wird nicht zum\n\
+Schlüsselbund hinzugefügt. Mit Return bestätigen: "
+
+"\nDo you want to add this key to keyring '%s' (y/N)? "
+de: "\nMöchtest Du diesen Schlüssel zum Schlüsselbund\n'%s' hinzufügen? (j/N) "
+es: "\n¿Quieres añadir esta clave al anillo '%s' (s/N)? "
+fr: "\nVoulez vous ajouter cette clé au fichier de clés '%s' (o/N)? "
+muttde: "\nMöchtest Du diesen Schlüssel zum Schlüsselbund\n'%s' hinzufügen? (j/N) "
+
+"Key has been revoked.\n"
+de: "Der Schlüssel wurde zurückgezogen.\n"
+es: "La clave se ha revocado.\n"
+fr: "La clé a été révoquée.\n"
+muttde: "Der Schlüssel wurde zurückgezogen.\n"
+
+"\n\007Key file contains duplicate keys: cannot be added to keyring\n"
+de: "\n\007Die Datei enthält doppelte Schlüssel, die nicht zum Schlüsselbund\n\
+hinzugefügt werden.\n"
+es: "\n\007El fichero contiene claves duplicadas: \
+no puede añadirse al anillo\n"
+fr: "\n\007Le fichier contient des clés dupliquées: impossible\n\
+de l'ajouter au fichier de clés\n"
+mutt: "\nKey file contains duplicate keys: cannot be added to keyring\n"
+muttde: "\nDie Datei enthält doppelte Schlüssel, die nicht zum Schlüsselbund\n\
+hinzugefügt werden.\n"
+
+"No new keys or signatures in keyfile.\n"
+de: "Keine neuen Schlüssel oder Unterschriften in der Datei.\n"
+es: "No hay nuevas claves ni nuevas firmas en el fichero.\n"
+fr: "Pas de nouvelles clés ou signatures dans le fichier de clés.\n"
+muttde: "Keine neuen Schlüssel oder Unterschriften in der Datei.\n"
+
+"\nKeyfile contains:\n"
+de: "\nDie Datei enthält folgende Schlüssel:\n"
+es: "\nEl fichero de claves contiene:\n"
+fr: "\nLe fichier de clés contient:\n"
+muttde: "\nDie Datei enthält folgende Schlüssel:\n"
+
+"%4d new key(s)\n"
+de: "%4d neue(n) Schlüssel\n"
+es: "%4d nueva(s) clave(s)\n"
+fr: "%4d nouvelle(s) clé(s)\n"
+muttde: "%4d neue(n) Schlüssel\n"
+
+"%4d new signatures(s)\n"
+de: "%4d neue Unterschrift(en)\n"
+es: "%4d nueva(s) firma(s)\n"
+fr: "%4d nouvelle(s) signatures(s)\n"
+muttde: "%4d neue Unterschrift(en)\n"
+
+"%4d new user ID(s)\n"
+de: "%4d neue Benutzer-ID(s)\n"
+es: "%4d nuevo(s) identificador(es) de usuario\n"
+fr: "%4d nouveau(x) nom(s) d'utilisateur\n"
+muttde: "%4d neue Benutzer-ID(s)\n"
+
+"%4d new revocation(s)\n"
+de: "%4d neue Urkunde(n) zum Zurückziehen von Schlüsseln\n"
+es: "%4d nueva(s) revocacion(es)\n"
+fr: "%4d nouvelle(s) révocation(s)\n"
+muttde: "%4d neue Urkunde(n) zum Zurückziehen von Schlüsseln\n"
+
+"\nNo keys found in '%s'.\n"
+de: "\nKeine Schlüssel in '%s' gefunden.\n"
+es: "\nNo se encuentran claves en '%s'.\n"
+fr: "\nPas de clés trouvées dans '%s'.\n"
+muttde: "\nKeine Schlüssel in '%s' gefunden.\n"
+
+"\nOne or more of the new keys are not fully certified.\n\
+Do you want to certify any of these keys yourself (y/N)? "
+de: "\nEin oder mehrere neue Schlüssel sind nicht ausreichend beglaubigt.\n\
+Willst Du sie selbst beglaubigen? (j/N) "
+es: "\nUna o más de las nuevas claves no están completamente certificadas.\n\
+¿Quieres certificar alguna de ellas tú mismo (s/N)? "
+fr: "\nUne ou plusieurs des nouvelles clés ne sont pas complètement\
+\ncertifiées. Voulez vous certifier ces clés vous même (o/N)? "
+muttde: "\nEin oder mehrere neue Schlüssel sind nicht ausreichend beglaubigt.\n\
+Willst Du sie selbst beglaubigen? (j/N) "
+
+"\nDo you want to certify this key yourself (y/N)? "
+de: "\nWillst Du diesen Schlüssel selbst beglaubigen? (j/N) "
+es: "\n¿Quieres certificar esta clave tú mismo (s/N)? "
+fr: "\nVoulez vous certifier cette clé vous même (o/N)? "
+muttde: "\nWillst Du diesen Schlüssel selbst beglaubigen? (j/N) "
+
+"undefined"
+de: "undefin."
+es: "sin definir"
+fr: "indéfinie"
+muttde: "undefin."
+
+"unknown"
+de: "unbekannt"
+es: "desconocida"
+fr: "inconnu"
+muttde: "unbekannt"
+
+"untrusted"
+de: "kein"
+es: "no fiable"
+fr: "non sûr"
+muttde: "kein"
+
+"marginal"
+de: "teilweise"
+es: "relativa"
+fr: "marginal"
+muttde: "teilweise"
+
+"complete"
+de: "voll"
+es: "completa"
+fr: "complète"
+muttde: "voll"
+
+"ultimate"
+de: "absolut"
+es: "fundamental"
+fr: "ultime"
+muttde: "absolut"
+
+"\nCan't open backup key ring file '%s'\n"
+de: "\nFEHLER beim Öffnen der Schlüsselbund-Kopie '%s'.\n"
+es: "\nNo se puede abrir la copia de seguridad del anillo '%s'\n"
+fr: "\nImpossible d'ouvrir le fichier de clé de sauvegarde '%s'\n"
+muttde: "\nFEHLER beim Öffnen der Schlüsselbund-Kopie '%s'.\n"
+
+"\n%d \"trust parameter(s)\" need to be changed.\n"
+de: "\n%d 'Vertrauens-Einstellung(en)' muß/müssen geändert werden.\n"
+es: "\n%d \"parámetro(s) de confianza\" debe(n) cambiarse.\n"
+fr: "\n%d \"paramètre(s) de confiance\" doi(ven)t être changé(s).\n"
+muttde: "\n%d 'Vertrauens-Einstellung(en)' muß/müssen geändert werden.\n"
+
+"Continue with '%s' (Y/n)? "
+de: "Weiter mit '%s'? (J/n) "
+es: "¿Seguir con '%s' (S/n)? "
+fr: "Continuer avec '%s' (O/n)? "
+muttde: "Weiter mit '%s'? (J/n) "
+
+"\n%d \"trust parameter(s)\" changed.\n"
+de: "\n%d 'Vertrauens-Einstellung(en)' geändert.\n"
+es: "\nCambiados %d \"parámetro(s) de confianza.\n"
+fr: "\n%d \"paramètre(s) de confiance\" changé(s).\n"
+muttde: "\n%d 'Vertrauens-Einstellung(en)' geändert.\n"
+
+"Update public keyring '%s' (Y/n)? "
+de: "Öffentlichen Schlüsselbund '%s' aktualisieren? (J/n) "
+es: "¿Actualizar el anillo de claves públicas '%s' (S/n)? "
+fr: "Modifier le fichier de clés publiques '%s' (O/n)? "
+muttde: "Öffentlichen Schlüsselbund '%s' aktualisieren? (J/n) "
+
+"\nCan't open secret key ring file '%s'\n"
+de: "\nFEHLER beim Öffnen des privaten Schlüsselbunds '%s'.\n"
+es: "\nNo puede abrirse el anillo de claves secretas '%s'\n"
+fr: "\nOuverture du fichier de clés secrètes '%s' impossible.\n"
+muttde: "\nFEHLER beim Öffnen des privaten Schlüsselbunds '%s'.\n"
+
+"\nPass 1: Looking for the \"ultimately-trusted\" keys...\n"
+de: "\nDurchlauf 1: Suche nach 'absolut vertrauenswürdigen' Schlüsseln...\n"
+es: "\nProceso 1: Búsqueda de las claves \"fundamentalmente fiables\" ...\n"
+fr: "\nPasse 1: Recherche des clés \"de confiance ultime\"...\n"
+muttde: "\nDurchlauf 1: Suche nach 'absolut vertrauenswürdigen' Schlüsseln...\n"
+
+"\nPass 2: Tracing signature chains...\n"
+de: "\nDurchlauf 2: Überprüfung von verketteten Unterschriften...\n"
+es: "\nProceso 2: Seguimiento de las cadenas de firmas...\n"
+fr: "\nPasse 2: Vérification des chaines de signatures...\n"
+muttde: "\nDurchlauf 2: Überprüfung von verketteten Unterschriften...\n"
+
+"Keyring contains duplicate key: %s\n"
+de: "\nDer Schlüsselbund enthält den Schlüssel %s doppelt.\n"
+es: "El anillo contiene una clave duplicada: %s\n"
+fr: "Le fichier de clés contient des clés dupliquées: %s\n"
+muttde: "\nDer Schlüsselbund enthält den Schlüssel %s doppelt.\n"
+
+"No ultimately-trusted keys.\n"
+de: "Keine absolut vertrauenswürdigen Schlüssel gefunden.\n"
+es: "No hay ninguna clave fundamentalmente fiable.\n"
+fr: "Pas de clés de confiance ultime.\n"
+muttde: "Keine absolut vertrauenswürdigen Schlüssel gefunden.\n"
+
+"  KeyID    Trust     Validity  User ID\n"
+de: "\n     ID    Vertrauen Gültigk.  Benutzer\n"
+es: "  Clave    Confianza Validez   Identificador\n"
+fr: "  IDcle    Conf.     Validité  Utilisateur\n"
+muttde: "\n     ID    Vertrauen Gültigk.  Benutzer\n"
+
+"(KeyID: %s)\n"
+de: "(Schlüssel-ID: %s)\n"
+es: "(Identificador: %s)\n"
+fr: "(IDclef: %s)\n"
+muttde: "(Schlüssel-ID: %s)\n"
+
+"\nAn \"axiomatic\" key is one which does not need certifying by\n\
+anyone else.  Usually this special status is reserved only for your\n\
+own keys, which should also appear on your secret keyring.  The owner\n\
+of an axiomatic key (who is typically yourself) is \"ultimately trusted\"\n\
+by you to certify any or all other keys.\n"
+de: "\nEin 'definitionsgemäß vertrauenswürdiger' Schlüssel braucht nicht von einer\n\
+anderen Person beglaubigt zu werden. Normalerweise ist dieser spezielle Status\n\
+nur für Deine eigenen Schlüssel reserviert, die sich auch in Deinem privaten\n\
+Schlüsselbund befinden sollten. Der Besitzer eines 'definitionsgemäß vertrau-\n\
+enswürdigen' Schlüssels (das bist in der Regel Du selbst) wird von Dir als\n\
+'absolut vertrauenswürdig' betrachtet, beliebige oder sogar alle anderen\n\
+Schlüssel Dir gegenüber zu beglaubigen.\n"
+es: "\nUna clave \"axiomatica\" es aquella que no necesita certificación.\n\
+Normalmente este estado se reserva para tus propias claves, que deben\n\
+aparecer también en tu anillo de claves secretas. El propietario de una\n\
+clave axiomática (normalmente tú mismo) es \"fundamentalmente fiable\"\n\
+para certificar cualquier clave.\n"
+fr: "\n Une clef 'axiomatique' est un clef qui n'a pas besoin d'être\n\
+signé par personne. Habituellement ce statut est reservé à vos propres \n\
+clefs, celles qui apparaissent dans votre tousseau de clefs secrètes. \n\
+Le propriétaire de ces clefs (vous-même) possède votre 'confiance ultime'\n\
+pour accorder un certificat à l'une au l'autre des autres clefs.\n"
+muttde: "\nEin 'definitionsgemäß vertrauenswürdiger' Schlüssel braucht nicht von einer\n\
+anderen Person beglaubigt zu werden. Normalerweise ist dieser spezielle Status\n\
+nur für Deine eigenen Schlüssel reserviert, die sich auch in Deinem privaten\n\
+Schlüsselbund befinden sollten. Der Besitzer eines 'definitionsgemäß vertrau-\n\
+enswürdigen' Schlüssels (das bist in der Regel Du selbst) wird von Dir als\n\
+'absolut vertrauenswürdig' betrachtet, beliebige oder sogar alle anderen\n\
+Schlüssel Dir gegenüber zu beglaubigen.\n"
+
+"\nKey for user ID \"%s\"\n\
+is designated as an \"ultimately-trusted\" introducer, but the key\n\
+does not appear in the secret keyring.\n\
+Use this key as an ultimately-trusted introducer (y/N)? "
+de: "\nDer Schlüssel von \"%s\"\n\
+soll ein 'absolut vertrauenswürdiger Einführer' werden, aber er befindet\n\
+sich nicht im privaten Schlüsselbund. Soll ich diesen Schlüssel trotzdem\n\
+als 'absolut vertrauenswürdigen Einführer' behandeln? (j/N) "
+es: "\nLa clave del usuario \"%s\"\n\
+está designada como referencia \"fundamentalmente fiable\", pero 
+la clave no aparece en el anillo de claves secretas.\n\
+¿Se utiliza como referencia fundamentalmente fiable (s/N)? "
+fr: "\nLa clef de l'utilisateur '%s' \n\
+a été désigné comme ayant la 'confiance ulime', mais cette clef \n\
+n'apparraît pas dans le trousseau des clefs secrètes. \n\
+Voulez-vous utiliser cette clef comme ayant la 'confiance ultime'? (o/N) "
+muttde: "\nDer Schlüssel von \"%s\"\n\
+soll ein 'absolut vertrauenswürdiger Einführer' werden, aber er befindet\n\
+sich nicht im privaten Schlüsselbund. Soll ich diesen Schlüssel trotzdem\n\
+als 'absolut vertrauenswürdigen Einführer' behandeln? (j/N) "
+
+"\n\007Cannot read from secret keyring.\n"
+de: "\n\007FEHLER beim Lesen des privaten Schlüsselbunds.\n"
+es: "\n\007No puede leerse el anillo de claves secretas.\n"
+fr: "\n\007Lecture du fichier de clés secrètes impossible.\n"
+mutt: "\nCannot read from secret keyring.\n"
+muttde: "\nFEHLER beim Lesen des privaten Schlüsselbunds.\n"
+
+"\n\007WARNING: Public key for user ID: \"%s\"\n\
+does not match the corresponding key in the secret keyring.\n"
+de: "\n\007WARNUNG: Der öffentliche Schlüssel\nvon \"%s\" stimmt nicht\n\
+mit dem Gegenstück im privaten Schlüsselbund überein.\n"
+es: "\n\007AVISO: La clave pública de \"%s\"\n\
+no coincide con la clave correspondiente en el anillo de claves secretas.\n"
+fr: "\n\007ATTENTION: la clé publique pour l'utilisateur: \"%s\"\n\
+ne correspond pas avec la clé respective dans le fichier de clés\
+secrètes.\n"
+mutt: "\nWARNING: Public key for user ID: \"%s\"\n\
+does not match the corresponding key in the secret keyring.\n"
+muttde: "\nWARNUNG: Der öffentliche Schlüssel\nvon \"%s\" stimmt nicht\n\
+mit dem Gegenstück im privaten Schlüsselbund überein.\n"
+
+"This is a serious condition, indicating possible keyring tampering.\n"
+de: "Dies könnte bedeuten, daß die Schlüsselbunde manipuliert wurden!\n"
+es: "Es una situación grave: posible manipulación de anillos.\n"
+fr: "Ceci est une condition sérieuse,  indiquant une possible manipulation\n\
+du fichier de clés.\n"
+muttde: "Dies könnte bedeuten, daß die Schlüsselbunde manipuliert wurden!\n"
+
+"\nKey for user ID \"%s\"\n\
+also appears in the secret key ring."
+de: "\nDer Schlüssel für die Benutzer-ID \"%s\"\n\
+ist auch im privaten Schlüsselbund vorhanden."
+es: "\nLa clave del identificador \"%s\"\n\
+también aparece en el anillo de claves secretas."
+fr: "\nLa clef pour l'utilisateur avec id: \"%s\"\n\
+apparait egalement dans le repertoire des clefs secretes."
+muttde: "\nDer Schlüssel für die Benutzer-ID \"%s\"\n\
+ist auch im privaten Schlüsselbund vorhanden."
+
+"\nUse this key as an ultimately-trusted introducer (y/N)? "
+de: "\nSoll dieser Schlüssel als 'absolut vertrauenswürdigen Einführer'\n\
+behandelt werden? (j/N) "
+es: "\n¿Se utiliza esta clave como referencia fundamentalmente fiable (s/N)? "
+fr: "\nUtiliser cette clé comme introducteur de confiance ultime (o/N)? "
+muttde: "\nSoll dieser Schlüssel als 'absolut vertrauenswürdigen Einführer'\n\
+behandelt werden? (j/N) "
+
+"Public key for: \"%s\"\n\
+is not present in the backup keyring '%s'.\n"
+de: "Der öffentliche Schlüssel von \"%s\"\n\
+ist nicht in der Schlüsselbund-Kopie '%s' enthalten.\n"
+es: "La clave pública de: \"%s\"\n\
+no se encuentra en la copia de seguridad del anillo '%s'.\n"
+fr: "La clé publique pour: \"%s\"\n\
+n'est pas présente dans le fichier de clés de sauvegarde '%s'.\n"
+muttde: "Der öffentliche Schlüssel von \"%s\"\n\
+ist nicht in der Schlüsselbund-Kopie '%s' enthalten.\n"
+
+"\n\007WARNING: Secret key for: \"%s\"\n\
+does not match the key in the backup keyring '%s'.\n"
+de: "\n\007WARNUNG: Der private Schlüssel von \"%s\"\n\
+entspricht nicht der Kopie im Schlüsselbund '%s'.\n"
+es: "\n\007AVISO: La clave secreta de: \"%s\"\n\
+no coincide con la clave en la copia de seguridad del anillo '%s'.\n"
+fr: "\n\007ATTENTION: la clé secrète pour: \"%s\"\n\
+ne correspond pas avec la clé dans le fichier de clés de sauvegarde.\n"
+mutt: "\nWARNING: Secret key for: \"%s\"\n\
+does not match the key in the backup keyring '%s'.\n"
+muttde: "\nWARNUNG: Der private Schlüssel von \"%s\"\n\
+entspricht nicht der Kopie im Schlüsselbund '%s'.\n"
+
+"\nMake a determination in your own mind whether this key actually\n\
+belongs to the person whom you think it belongs to, based on available\n\
+evidence.  If you think it does, then based on your estimate of\n\
+that person's integrity and competence in key management, answer\n\
+the following question:\n"
+de: "\nEntscheide für Dich, ob dieser Schlüssel tatsächlich zu dieser Person gehört.\n\
+Triff diese Entscheidung unter Berücksichtigung der zur Verfügung stehenden\n\
+Informationen. Wenn Du glaubst, daß der Schlüssel echt ist, dann beantworte\n\
+folgende Frage aufgrund Deiner Einschätzung der Vertrauenswürdigkeit der\n\
+Person und ihrer Kompetenz beim Umgang mit PGP-Schlüsseln:\n"
+es: "\nDecide tú mismo si esta clave realmente pertenece, según la\n\
+evidencia a tu alcance, a la persona que crees.  Si es así,\n\
+contesta a la siguiente pregunta, basándote en tu estimación de la\n\
+integridad de esa persona y de su conocimiento sobre gestión de claves:\n"
+fr: "\nDeterminez vous même si cette clé appartient vraiment à la personne\
+\nà qui vous croyez qu'elle appartient, selon les informations disponibles.\
+\nSi vous le croyez, alors selon votre estimation de l'intégrité de cette\
+\npersonne et de sa compétence dans la gestion de clés, répondez à la\
+\nquestion suivante:\n"
+muttde: "\nEntscheide für Dich, ob dieser Schlüssel tatsächlich zu dieser Person gehört.\n\
+Triff diese Entscheidung unter Berücksichtigung der zur Verfügung stehenden\n\
+Informationen. Wenn Du glaubst, daß der Schlüssel echt ist, dann beantworte\n\
+folgende Frage aufgrund Deiner Einschätzung der Vertrauenswürdigkeit der\n\
+Person und ihrer Kompetenz beim Umgang mit PGP-Schlüsseln:\n"
+
+"\nWould you trust \"%s\"\n\
+to act as an introducer and certify other people's public keys to you?\n\
+(1=I don't know. 2=No. 3=Usually. 4=Yes, always.) ? "
+de: "\nWürdest Du \"%s\" als 'Einführer'\n\
+und 'Beglaubiger' für die öffentlichen Schlüssel Dritter vertrauen?\n\
+(1=Ich weiß nicht; 2=Nein; 3=In der Regel; 4=Ja, immer) : "
+es: "\n¿Confiarías en \"%s\"\n\
+como referencia y para certificar ante ti otras claves públicas?\n\
+(1=No sé. 2=No. 3=Normalmente. 4=Sí, siempre.) ? "
+fr: "\nAuriez vous confiance en \"%s\"\n\
+pour servir d'introducteur et certifier pour vous les clés publiques d'autres\
+\npersonnes? (1=Ne sais pas. 2=Non. 3=Généralement. 4=Oui, toujours.) ? "
+muttde: "\nWürdest Du \"%s\" als 'Einführer'\n\
+und 'Beglaubiger' für die öffentlichen Schlüssel Dritter vertrauen?\n\
+(1=Ich weiß nicht; 2=Nein; 3=In der Regel; 4=Ja, immer) : "
+
+"This user is untrusted to certify other keys.\n"
+de: "Dieser Benutzer ist nicht vertrauenswürdig genug,\n\
+um andere Schlüssel zu beglaubigen.\n"
+es: "Este usuario no es fiable para certificar otras claves.\n"
+fr: "Cet utilisateur n'est pas de confiance pour certifier d'autres clés.\n"
+muttde: "Dieser Benutzer ist nicht vertrauenswürdig genug,\n\
+um andere Schlüssel zu beglaubigen.\n"
+
+"This user is generally trusted to certify other keys.\n"
+de: "Dieser Benutzer ist in der Regel vertrauenswürdig genug,\n\
+um andere Schlüssel zu beglaubigen.\n"
+es: "Este usuario es de relativa confianza para certificar otras claves.\n"
+fr: "Cet utilisateur est généralement de confiance pour certifier d'autres\
+ clés.\n"
+muttde: "Dieser Benutzer ist in der Regel vertrauenswürdig genug,\n\
+um andere Schlüssel zu beglaubigen.\n"
+
+"This user is completely trusted to certify other keys.\n"
+de: "Dieser Benutzer ist immer vertrauenswürdig genug,\n\
+um andere Schlüssel zu beglaubigen.\n"
+es: "Este usuario es de completa confianza para certificar otras claves.\n"
+fr: "Cet utilisateur est de confiance totale pour certifier d'autres clés.\n"
+muttde: "Dieser Benutzer ist immer vertrauenswürdig genug,\n\
+um andere Schlüssel zu beglaubigen.\n"
+
+"This axiomatic key is ultimately trusted to certify other keys.\n"
+de: "Dieser Schlüssel ist definitionsgemäß vertrauenswürdig genug,\n\
+um andere Schlüssel zu beglaubigen.\n"
+es: "Esta clave axiomática es absolutamente fiable para certificar otras.\n"
+fr: "Cette clé axiomatique est de confiance ultime pour certifier\n\
+d'autres clés\n"
+muttde: "Dieser Schlüssel ist definitionsgemäß vertrauenswürdig genug,\n\
+um andere Schlüssel zu beglaubigen.\n"
+
+"This key/userID association is not certified.\n"
+de: "Diese Schlüssel-/Benutzer-Zuordnung ist nicht bestätigt.\n"
+es: "Esta asociación clave/usuario no está certificada.\n"
+fr: "Cette association clé/utilisateur n'est pas certifiée.\n"
+muttde: "Diese Schlüssel-/Benutzer-Zuordnung ist nicht bestätigt.\n"
+
+"This key/userID association is marginally certified.\n"
+de: "Diese Schlüssel-/Benutzer-Zuordnung ist teilweise bestätigt.\n"
+es: "Esta asociación clave/usuario está relativamente certificada.\n"
+fr: "Cette association clé/utilisateur est marginalement certifiée.\n"
+muttde: "Diese Schlüssel-/Benutzer-Zuordnung ist teilweise bestätigt.\n"
+
+"This key/userID association is fully certified.\n"
+de: "Diese Schlüssel-/Benutzer-Zuordnung ist voll bestätigt.\n"
+es: "Esta asociación clave/usuario está completamente certificada.\n"
+fr: "Cette association clé/utilisateur est complètement certifiée.\n"
+muttde: "Diese Schlüssel-/Benutzer-Zuordnung ist voll bestätigt.\n"
+
+"  Questionable certification from:\n  "
+de: "  Fragwürdige Beglaubigung von:\n  "
+es: "  Certificación cuestionable de:\n  "
+fr: "  Certificat de confiance douteux de:\n  "
+muttde: "  Fragwürdige Beglaubigung von:\n  "
+
+"  Untrusted certification from:\n  "
+de: "  Unglaubwürdige Beglaubigung von:\n  "
+es: "  Certificación no fiable de:\n  "
+fr: "  Certificat non sûr de:\n  "
+muttde: "  Unglaubwürdige Beglaubigung von:\n  "
+
+"  Generally trusted certification from:\n  "
+de: "  Glaubwürdige Beglaubigung von:\n  "
+es: "  Certificación relativamente fiable de:\n  "
+fr: "  Certificat de confiance relatif de:\n  "
+muttde: "  Glaubwürdige Beglaubigung von:\n  "
+
+"  Completely trusted certification from:\n  "
+de: "  Voll glaubwürdige Beglaubigung von:\n  "
+es: "  Certificación completamente fiable de:\n  "
+fr: "  Certificat de confiance complet de:\n  "
+muttde: "  Voll glaubwürdige Beglaubigung von:\n  "
+
+"  Axiomatically trusted certification from:\n  "
+de: "  Definitionsgemäß glaubwürdige Beglaubigung von:\n  "
+es: "  Certificación axiomáticamente fiable de:\n  "
+fr: "  Certificat de confiance par axiome de:\n  "
+muttde: "  Definitionsgemäß glaubwürdige Beglaubigung von:\n  "
+
+"\nKey for user ID: %s\n"
+de: "\nSchlüssel für Benutzer-ID \"%s\",\n"
+es: "\nClave del usuario: %s\n"
+fr: "\nClé pour le nom d'utilisateur: %s\n"
+muttde: "\nSchlüssel für Benutzer-ID \"%s\",\n"
+
+"%d-bit key, key ID %s, created %s\n"
+de: "%d-Bit-Schlüssel, Schlüssel-ID: %s, erzeugt am: %s.\n"
+es: "Clave de %d bits, con identificador %s, creada el %\n"
+fr: "Clef de %d bits. Id clef %s créé %s\n"
+muttde: "%d-Bit-Schlüssel, Schlüssel-ID: %s, erzeugt am: %s.\n"
+
+"Bad key format.\n"
+de: "Falsches Schlüssel-Format.\n"
+es: "Formato incorrecto de clave.\n"
+fr: "Mauvais format de clé\n"
+muttde: "Falsches Schlüssel-Format.\n"
+
+"Unrecognized version.\n"
+de: "Unbekannte Version.\n"
+es: "Versión no reconocida.\n"
+fr: "Version non reconnue.\n"
+muttde: "Unbekannte Version.\n"
+
+"Key is disabled.\n"
+de: "Der Schlüssel ist gesperrt.\n"
+es: "La clave está desactivada.\n"
+fr: "La clé est inactivée.\n"
+muttde: "Der Schlüssel ist gesperrt.\n"
+
+"Also known as: %s\n"
+de: "Alternative Benutzer-ID: %s\n"
+es: "También conocido como: %s\n"
+fr: "Egalement connu(e) en tant que: %s\n"
+muttde: "Alternative Benutzer-ID: %s\n"
+
+"  Certified by: "
+de: "  Beglaubigt von: "
+es: "  Certificado por: "
+fr: "  Certifiée par: "
+muttde: "  Beglaubigt von: "
+
+"\nWarning: keyid %4d/%s %s  has no user id!\n"
+de: "\nWARNUNG: Der Schlüssel '%4d/%s %s' hat keine Benutzer-ID!\n"
+es: "\nAdvertencia: la clave %4d/%s %s no tiene identificador\n"
+fr: "\nAttention: IDclef %4d/%s %s  n'est pas associé à un utilisateur!\n"
+muttde: "\nWARNUNG: Der Schlüssel '%4d/%s %s' hat keine Benutzer-ID!\n"
+
+"Updated keyID: 0x%s\n"
+de: "Die Schlüssel-ID 0x%s wurde aktualisiert.\n"
+es: "Identificador actualizado: 0x%s\n"
+fr: "Mise à jour de la clef ID: 0x%s\n"
+muttde: "Die Schlüssel-ID 0x%s wurde aktualisiert.\n"
+
+"\n\007Unable to create key file '%s'.\n"
+de: "\n\007FEHLER beim Erzeugen der Schlüsseldatei '%s'.\n"
+es: "\n\007No puede crearse el fichero de claves '%s'.\n"
+fr: "\n\007Impossible de créer le fichier de clés '%s'.\n"
+mutt: "\nUnable to create key file '%s'.\n"
+muttde: "\nFEHLER beim Erzeugen der Schlüsseldatei '%s'.\n"
+
+"\n\007Keyring file '%s' does not exist. "
+de: "\n\007Der Schlüsselbund '%s' existiert nicht.\n"
+es: "\n\007El anillo '%s' no existe. "
+fr: "\n\007Le fichier de clés '%s' n'existe pas. "
+mutt: "\nKeyring file '%s' does not exist. "
+muttde: "\nDer Schlüsselbund '%s' existiert nicht.\n"
+
+"\n\007Sorry, this key has been revoked by its owner.\n"
+de: "\n\007Dieser Schlüssel wurde von seinem Besitzer zurückgezogen.\n"
+es: "\n\007Esa clave ha sido revocada por su propietario.\n"
+fr: "\n\007Désolé, cette clé a été révoquée par son propriétaire.\n"
+mutt: "\nSorry, this key has been revoked by its owner.\n"
+muttde: "\nDieser Schlüssel wurde von seinem Besitzer zurückgezogen.\n"
+
+"\nKey for user ID \"%s\"\n\
+has been revoked.  You cannot use this key.\n"
+de: "\nDer Schlüssel von \"%s\"\n\
+wurde zurückgezogen und kann nicht verwendet werden.\n"
+es: "\nLa clave del usuario \"%s\"\n\
+ha sido revocada.  No puede utilizarse.\n"
+fr: "\nLa clé pour l'utilisateur \"%s\"\n\
+a été révoquée. Vous ne pouvez utiliser cette clé.\n"
+muttde: "\nDer Schlüssel von \"%s\"\n\
+wurde zurückgezogen und kann nicht verwendet werden.\n"
+
+"\n\007Key matching expected Key ID %s not found in file '%s'.\n"
+de: "\n\007Der zur erwarteten Schlüssel-ID %s passende Schlüssel\n\
+ist nicht in der Datei '%s' enthalten.\n"
+es: "\n\007Se esperaba una clave %s que no se encuentra en '%s'.\n"
+fr: "\n\007Clé correspondant à l'identificateur %s non trouvée\
+\ndans le fichier '%s'.\n"
+mutt: "\nKey matching expected Key ID %s not found in file \n\
+'%s'.\n"
+muttde: "\nDer zur erwarteten Schlüssel-ID %s passende Schlüssel\n\
+ist nicht in der Datei '%s' enthalten.\n"
+
+"\n\007Key matching userid '%s' not found in file '%s'.\n"
+de: "\n\007Der zur Benutzer-ID \"%s\" passende Schlüssel\n\
+ist nicht in der Datei '%s' enthalten.\n"
+es: "\n\007La clave del usuario '%s' no se encuentra en el fichero '%s'.\n"
+fr: "\n\007Clé correspondant à l'utilisateur '%s' introuvable\n\
+dans le fichier '%s'.\n"
+mutt: "\nKey matching userid '%s' not found in file '%s'.\n"
+muttde: "\nDer zur Benutzer-ID \"%s\" passende Schlüssel\n\
+ist nicht in der Datei '%s' enthalten.\n"
+
+"Enter secret key filename: "
+de: "Dateiname des privaten Schlüssels: "
+es: "Introduzca el nombre del anillo de claves secretas: "
+fr: "Entrez le nom du fichier de clés secrètes: "
+muttde: "Dateiname des privaten Schlüssels: "
+
+"Enter public key filename: "
+de: "Dateiname des öffentlichen Schlüssels: "
+es: "Introduzca el nombre del anillo de claves públicas: "
+fr: "Entrez le nom du fichier de clés publiques: "
+muttde: "Dateiname des öffentlichen Schlüssels: "
+
+"\nYou need a pass phrase to unlock your RSA secret key. "
+de: "\nDu brauchst ein Mantra, um Deinen privaten RSA-Schlüssel zu benutzen."
+es: "\nSe necesita la contraseña para abrir la clave secreta RSA. "
+fr: "\nVous devez avoir un mot de passe pour utiliser votre clé secrète RSA."
+muttde: "\nDu brauchst ein Mantra, um Deinen privaten RSA-Schlüssel zu benutzen."
+
+"No passphrase; secret key unavailable.\n"
+de: "\nKein Mantra; der private Schlüssel kann nicht benutzt werden.\n"
+es: "\nSin contraseña; la clave secreta no está disponible.\n"
+fr: "\nSans la phrase secrete, pas de clef secrete disponible.\n"
+muttde: "\nKein Mantra; der private Schlüssel kann nicht benutzt werden.\n"
+
+"\nAdvisory warning: This RSA secret key is not protected by a \
+passphrase.\n"
+de: "\nHinweis: Dieser private Schlüssel ist nicht durch ein Mantra geschützt.\n"
+es: "\nAdvertencia: Esta clave secreta RSA no tiene contraseña.\n"
+fr: "\nAttention: cette clé secrète RSA n'est pas protégée par un mot \
+de passe"
+muttde: "\nHinweis: Dieser private Schlüssel ist nicht durch ein Mantra geschützt.\n"
+
+"Pass phrase is good.  "
+de: "\nDas Mantra ist richtig.\n"
+es: "La contraseña es correcta.  "
+fr: "Le mot de passe est correct.  "
+muttde: "\nDas Mantra ist richtig.\n"
+
+"\n\007Key file '%s' is not a secret key file.\n"
+de: "\n\007Die Datei '%s' ist keine private Schlüsseldatei.\n"
+es: "\n\007El fichero '%s' no tiene claves secretas.\n"
+fr: "\n\007Le fichier de clé '%s' n'est pas un fichier de clés secrètes.\n"
+mutt: "\nKey file '%s' is not a secret key file.\n"
+muttde: "\nDie Datei '%s' ist keine private Schlüsseldatei.\n"
+
+"Key fingerprint ="
+de: "Fingerabdruck des Schlüssels:"
+es: "Huella dactilar ="
+fr: "Empreinte de la clé ="
+muttde: "Fingerabdruck des Schlüssels:"
+
+"\nKey ring: '%s'"
+de: "\nSchlüsselbund '%s':\n"
+es: "\nAnillo de claves: '%s',\n"
+fr: "\nFichier de clé: '%s'"
+muttde: "\nSchlüsselbund '%s':\n"
+
+", looking for user ID \"%s\"."
+de: "Suche nach Benutzer-ID \"%s\":\n"
+es: "buscando el usuario \"%s\"\n"
+fr: ", recherche du nom d'utilisateur \"%s\"."
+muttde: "Suche nach Benutzer-ID \"%s\":\n"
+
+"1 matching key found.\n"
+de: "Es wurde ein passender Schlüssel gefunden.\n"
+es: "Se ha encontrado una clave.\n"
+fr: "1 clef trouvée.\n"
+muttde: "Es wurde ein passender Schlüssel gefunden.\n"
+
+"%d matching keys found.\n"
+de: "Es wurden %d passende Schlüssel gefunden.\n"
+es: "Se han encontrado %d claves.\n"
+fr: "%d clefs trouvées. \n"
+muttde: "Es wurden %d passende Schlüssel gefunden.\n"
+
+"\nChecking signatures...\n"
+de: "\nÜberprüfung der Unterschriften...\n"
+es: "\nComprobando las firmas...\n"
+fr: "\nVérification des signatures...\n"
+muttde: "\nÜberprüfung der Unterschriften...\n"
+
+"*** KEY REVOKED ***\n"
+de: "*** ZURÜCKGEZOGEN ***\n"
+es: "*** CLAVE REVOCADA ***\n"
+fr: "*** CLEF REVOQUÉE ***\n"
+muttde: "*** ZURÜCKGEZOGEN ***\n"
+
+"(Unknown signator, can't be checked)"
+de: "(Unterschreibender unbekannt, keine Prüfung)"
+es: "(Firmante desconocido, no puede comprobarse)"
+fr: "(Signataire inconnu, ne peut être vérifié)"
+muttde: "(Unterschreibender unbekannt, keine Prüfung)"
+
+"(Key too long, can't be checked)"
+de: "(Schlüssel zu lang, keine Prüfung)"
+es: "(Clave demasiado larga, no puede comprobarse)"
+fr: "(Clef trop longue, ne peut etre verifiée)"
+muttde: "(Schlüssel zu lang, keine Prüfung)"
+
+"(Malformed or obsolete signature format)"
+de: "(Unterschriftsformat fehlerhaft oder veraltet)"
+es: "(Formato de firma obsoleto o incorrecto)"
+fr: "(Signature malformee ou obsolete)"
+muttde: "(Unterschriftsformat fehlerhaft oder veraltet)"
+
+"(Unknown public-key algorithm)"
+de: "(unbek. Algorithmus des öffentl. Schlüssels)"
+es: "(Algoritmo desconocido de clave pública)"
+fr: "(Algorithme de clef publique inconnu)"
+muttde: "(unbek. Algorithmus des öffentl. Schlüssels)"
+
+"(Unknown hash algorithm)"
+de: "(unbekannter Prüfsummen-Algorithmus)"
+es: "(Algoritmo desconocido de distribución [hash])"
+fr: "(Algorithme de hash inconnu)"
+muttde: "(unbekannter Prüfsummen-Algorithmus)"
+
+"(Unknown signature packet version)"
+de: "(unbekannte Version des Unterschriftsblocks)"
+es: "(Versión desconocida de firma)"
+fr: "Version de paquet de signature inconnue"
+muttde: "(unbekannte Version des Unterschriftsblocks)"
+
+"(Malformed signature)"
+de: "(fehlerhafte Unterschrift)"
+es: "(Firma mal formada)"
+fr: "(Signature deformée)"
+muttde: "(fehlerhafte Unterschrift)"
+
+"(Corrupted signature packet)"
+de: "(beschädigter Unterschriftsblock)"
+es: "(Firma dañada)"
+fr: "(Signature corrompue)"
+muttde: "(beschädigter Unterschriftsblock)"
+
+"\007**** BAD SIGNATURE! ****"
+de: "\007**** FALSCHE UNTERSCHRIFT! ****"
+es: "\007**** FIRMA INCORRECTA ****"
+fr: "\007**** MAUVAISE SIGNATURE! ****"
+mutt: "**** BAD SIGNATURE! ****"
+muttde: "**** FALSCHE UNTERSCHRIFT! ****"
+
+"Remove bad signatures (Y/n)? "
+de: "Falsche Unterschriften löschen? (J/n) "
+es: "¿Suprimir las firmas incorrectas (S/n)? "
+fr: "Supprimer les mauvaises signatures (O/n)? "
+muttde: "Falsche Unterschriften löschen? (J/n) "
+
+"\nRemoving signatures from userid '%s' in key ring '%s'\n"
+de: "\nLöschen der Unterschriften unter ID \"%s\"\naus dem Schlüsselbund '%s'.\n"
+es: "\nSuprimiendo las firmas del usuario '%s' del\n\
+anillo de claves '%s'\n"
+fr: "\nSuppression des signatures de l'utilisateur '%s'\n\
+dans le fichier de clés '%s'\n"
+muttde: "\nLöschen der Unterschriften unter ID \"%s\"\naus dem Schlüsselbund '%s'.\n"
+
+"\n\007Key not found in key ring '%s'.\n"
+de: "\n\007Der Schlüssel ist nicht im Schlüsselbund\n'%s' enthalten.\n"
+es: "\n\007No se ha encontrado la clave en el anillo '%s'.\n"
+fr: "\n\007Clé introuvable dans le fichier de clés '%s'.\n"
+mutt: "\nKey not found in key ring '%s'.\n"
+muttde: "\nDer Schlüssel ist nicht im Schlüsselbund\n'%s' enthalten.\n"
+
+"\nKey has no signatures to remove.\n"
+de: "\nDer Schlüssel trägt keine Unterschriften, die gelöscht werden könnten.\n"
+es: "\nLa clave no tiene ninguna firma por borrar.\n"
+fr: "\nLa clé n'a pas de signatures à supprimer.\n"
+muttde: "\nDer Schlüssel trägt keine Unterschriften, die gelöscht werden könnten.\n"
+
+"\nKey has %d signature(s):\n"
+de: "\nDer Schlüssel trägt %d Unterschrift(en):\n"
+es: "\nLa clave tiene %d firma(s):\n"
+fr: "\nLa clé a %d signature(s):\n"
+muttde: "\nDer Schlüssel trägt %d Unterschrift(en):\n"
+
+"(Unknown signator, can't be checked)\n"
+de: "(Unterschreibender unbekannt, keine Prüfung)\n"
+es: "(Firmante desconocido, no puede comprobarse)\n"
+fr: "(Signataire inconnu, ne peut être vérifié)\n"
+muttde: "(Unterschreibender unbekannt, keine Prüfung)\n"
+
+"Remove this signature (y/N)? "
+de: "Diese Unterschrift löschen? (j/N) "
+es: "\277Suprimir esta firma (s/N)? "
+fr: "Suppression de cette signature (o/N)? "
+muttde: "Diese Unterschrift löschen? (j/N) "
+
+"\nNo key signatures removed.\n"
+de: "\nKeine Unterschriften gelöscht.\n"
+es: "\nNo se ha suprimido ninguna firma.\n"
+fr: "\nPas de supression de signature de clé.\n"
+muttde: "\nKeine Unterschriften gelöscht.\n"
+
+"\n%d key signature(s) removed.\n"
+de: "\n%d Unterschrift(en) gelöscht.\n"
+es: "\nSuprimidas %d firma(s) de clave.\n"
+fr: "\n%d signature(s) de clé supprimée(s).\n"
+muttde: "\n%d Unterschrift(en) gelöscht.\n"
+
+"\nRemoving from key ring: '%s'"
+de: "\nLöschen aus Schlüsselbund '%s'\n"
+es: "\nSuprimiendo del anillo: '%s'"
+fr: "\nSuppression du ficher de clés: '%s'"
+muttde: "\nLöschen aus Schlüsselbund '%s'\n"
+
+", userid \"%s\".\n"
+de: "Benutzer-ID \"%s\".\n"
+es: ", identificador \"%s\".\n"
+fr: ", utilisateur \"%s\".\n"
+muttde: "Benutzer-ID \"%s\".\n"
+
+"\nKey has more than one user ID.\n\
+Do you want to remove the whole key (y/N)? "
+de: "\nDer Schlüssel hat mehr als eine Benutzer-ID.\n\
+Soll der ganze Schlüssel vollständig gelöscht werden? (j/N) "
+es: "\nLa clave tiene más de un identificador de usuario.\n\
+¿Quieres suprimirla por completo (s/N)? "
+fr: "\nLa clé a plus d'un nom d'utilisateur.\n\
+Voulez vous supprimier toute la clé (o/N)? "
+muttde: "\nDer Schlüssel hat mehr als eine Benutzer-ID.\n\
+Soll der ganze Schlüssel vollständig gelöscht werden? (j/N) "
+
+"\nNo more user ID's\n"
+de: "\nKeine weiteren Benutzer-IDs.\n"
+es: "\nNo hay más identificadores de usuario\n"
+fr: "\nPlus de noms d'utilisateur\n"
+muttde: "\nKeine weiteren Benutzer-IDs.\n"
+
+"Remove \"%s\" (y/N)? "
+de: "\"%s\" löschen? (j/N) "
+es: "¿Suprimir \"%s\" (s/N)? "
+fr: "Supprimer \"%s\" (o/N)? "
+muttde: "\"%s\" löschen? (j/N) "
+
+"\nAre you sure you want this key removed (y/N)? "
+de: "\nBist Du sicher, daß Du diesen Schlüssel löschen willst? (j/N) "
+es: "\n¿Estás seguro de querer suprimir esta clave (s/N)? "
+fr: "\nEtes vous sûr(e) de vouloir supprimer cette clé (o/N)? "
+muttde: "\nBist Du sicher, daß Du diesen Schlüssel löschen willst? (j/N) "
+
+"\nUser ID removed from key ring.\n"
+de: "\nDie Benutzer-ID wurde aus dem Schlüsselbund gelöscht.\n"
+es: "\nIdentificador suprimido del anillo.\n"
+fr: "\nNom d'utilisateur supprimé du fichier de clés.\n"
+muttde: "\nDie Benutzer-ID wurde aus dem Schlüsselbund gelöscht.\n"
+
+"\nKey removed from key ring.\n"
+de: "\nDer Schlüssel wurde aus dem Schlüsselbund gelöscht.\n"
+es: "\nClave suprimida del anillo.\n"
+fr: "\nClé supprimée du fichier de clés.\n"
+muttde: "\nDer Schlüssel wurde aus dem Schlüsselbund gelöscht.\n"
+
+"\nKey or user ID is also present in secret keyring.\n\
+Do you also want to remove it from the secret keyring (y/N)? "
+de: "\nDer Schlüssel oder die Benutzer-ID sind auch im privaten Schlüsselbund\n\
+enthalten. Sollen sie dort ebenfalls gelöscht werden? (j/N) "
+es: "\nEl identificador se encuentra además en el anillo de\n\
+claves secretas. ¿Quieres borrarlo también de ahí (s/N)? "
+fr: "\nLa clé ou le nom d'utilisateur est aussi dans le fichier de clés\n\
+secrètes. Voulez vous l'enlever du ficher de clés secrètes (o/N)? "
+muttde: "\nDer Schlüssel oder die Benutzer-ID sind auch im privaten Schlüsselbund\n\
+enthalten. Sollen sie dort ebenfalls gelöscht werden? (j/N) "
+
+"\nExtracting from key ring: '%s'"
+de: "\nExtrahieren aus dem Schlüsselbund: '%s'\n"
+es: "\nExtrayendo del anillo de claves: '%s'"
+fr: "\nExtraction du fichier de clés: '%s'"
+muttde: "\nExtrahieren aus dem Schlüsselbund: '%s'\n"
+
+"Extract the above key into which file?"
+de: "Dateiname dieses extrahierten Schlüssels?"
+es: "¿En qué fichero se extrae la clave anterior?"
+fr: "Extraire la clef suivant de quel fichier?"
+muttde: "Dateiname dieses extrahierten Schlüssels?"
+
+"Key ID %s is already included in key ring '%s'.\n"
+de: "Die Schlüssel-ID %s ist bereits im Schlüsselbund\n'%s' enthalten.\n"
+es: "La clave %s ya está en el anillo '%s'.\n"
+fr: "L'identificateur de clé %s est déjà présent\
+\ndans le fichier de clés '%s'.\n"
+muttde: "Die Schlüssel-ID %s ist bereits im Schlüsselbund\n'%s' enthalten.\n"
+
+"\nKey extracted to file '%s'.\n"
+de: "\nSchlüssel extrahiert in Datei '%s'.\n"
+es: "\nClave extraída en el fichero '%s'.\n"
+fr: "\nClé mise dans le fichier '%s'.\n"
+muttde: "\nSchlüssel extrahiert in Datei '%s'.\n"
+
+"\nThis operation may not be performed on a secret keyring.\n\
+Defaulting to public keyring."
+de: "\nDiese Operation kann mit einem privaten Schlüsselbund nicht ausgeführt\n\
+werden. Der öffentliche Schlüsselbund wird versucht."
+es: "\nEsta operacion no puede realizarse sobre el anillo de \
+claves secretas.\nSe pasa al anillo de claves públicas."
+fr: "\nCette operation ne peut pas être effectuée sur un fichier de clés\n\
+secrètes. Le fichier de clés publiques sera utilisé à la place."
+muttde: "\nDiese Operation kann mit einem privaten Schlüsselbund nicht ausgeführt\n\
+werden. Der öffentliche Schlüsselbund wird versucht."
+
+"\nEditing userid \"%s\" in key ring: '%s'.\n"
+de: "\nBearbeitung der Benutzer-ID \"%s\"\nim Schlüsselbund '%s'.\n"
+es: "\nModificación del identificador \"%s\"\n\
+en el anillo: '%s'.\n"
+fr: "\nModification du nom d'utilsateur \"%s\"\n\
+dans le fichier de clé: '%s'.\n"
+muttde: "\nBearbeitung der Benutzer-ID \"%s\"\nim Schlüsselbund '%s'.\n"
+
+"\nCan't open public key ring file '%s'\n"
+de: "\nFEHLER beim Öffnen des öffentlichen Schlüsselbunds '%s'.\n"
+es: "\nNo puede abrirse el anillo de claves públicas '%s'\n"
+fr: "\nOuverture du fichier de clés publiques '%s' impossible.\n"
+muttde: "\nFEHLER beim Öffnen des öffentlichen Schlüsselbunds '%s'.\n"
+
+"\n\007File '%s' is not a public keyring.\n"
+de: "\n\007Die Datei '%s' ist kein öffentlicher Schlüsselbund.\n"
+es: "\n\007El fichero '%s' no es un anillo de claves públicas.\n"
+fr: "\n\007Le fichier '%s' n'est pas un fichier de clés publiques.\n"
+mutt: "\nFile '%s' is not a public keyring.\n"
+muttde: "\nDie Datei '%s' ist kein öffentlicher Schlüsselbund.\n"
+
+"\n\007This key has been revoked by its owner.\n"
+de: "\n\007Dieser Schlüssel wurde von seinem Besitzer zurückgezogen.\n"
+es: "\n\007Esta clave ha sido revocada por su propietario.\n"
+fr: "\n\007Cette clé a été révoquée par son propriétaire.\n"
+mutt: "\nThis key has been revoked by its owner.\n"
+muttde: "\nDieser Schlüssel wurde von seinem Besitzer zurückgezogen.\n"
+
+"\nNo secret key available.  Editing public key trust parameter.\n"
+de: "\nKein privater Schlüssel vorhanden. Die 'Vertrauens-Einstellungen' des\n\
+öffentlichen Schlüssels werden bearbeitet.\n"
+es: "\nNo hay clave secreta disponible. Modificando el parámetro \
+de confianza\n\
+de la clave pública.\n"
+fr: "\nPas de clé secrète disponible. Modification du paramètre de\n\
+confiance de la clé publique.\n"
+muttde: "\nKein privater Schlüssel vorhanden. Die 'Vertrauens-Einstellungen' des\n\
+öffentlichen Schlüssels werden bearbeitet.\n"
+
+"Current trust for this key's owner is: %s\n"
+de: "\nAktuelles 'Vertrauen' zum Besitzer dieses Schlüssels: %s\n"
+es: "La confianza actual en el propietario de esta clave es: %s\n"
+fr: "Le niveau de confiance courant pour le propriétaire de\n\
+cette clé est: %s\n"
+muttde: "\nAktuelles 'Vertrauen' zum Besitzer dieses Schlüssels: %s\n"
+
+"Public key ring updated.\n"
+de: "\nDer öffentliche Schlüsselbund wurde aktualisiert.\n"
+es: "Actualizado el anillo de claves públicas.\n"
+fr: "Fichier de clés publiques modifié...\n"
+muttde: "\nDer öffentliche Schlüsselbund wurde aktualisiert.\n"
+
+"\nCurrent user ID: %s"
+de: "\nAktuelle Benutzer-ID: %s"
+es: "\nIdentificador actual de usuario: %s"
+fr: "\nNom d'utilisateur courant: %s"
+muttde: "\nAktuelle Benutzer-ID: %s"
+
+"\nDo you want to add a new user ID (y/N)? "
+de: "\nWillst Du eine neue Benutzer-ID hinzufügen? (j/N) "
+es: "\n¿Quieres añadir un nuevo identificador de usuario (s/N)? "
+fr: "\nVoulez-vous ajouter ce nouvel ID (o/N)?"
+muttde: "\nWillst Du eine neue Benutzer-ID hinzufügen? (j/N) "
+
+"\nEnter the new user ID: "
+de: "\nGib die neue Benutzer-ID ein: "
+es: "\nIntroduzca el nuevo identificador: "
+fr: "\nEntrez le nouveau nom d'utilisateur: "
+muttde: "\nGib die neue Benutzer-ID ein: "
+
+"\nMake this user ID the primary user ID for this key (y/N)? "
+de: "\nSoll dies die vorrangige Benutzer-ID für diesen Schlüssel werden? (j/N) "
+es: "\n¿Se establece este identificador como primario para esta clave (s/N)? "
+fr: "\nEtablir ce nom d'utilisateur comme nom principal pour cette clé \
+(o/N)? "
+muttde: "\nSoll dies die vorrangige Benutzer-ID für diesen Schlüssel werden? (j/N) "
+
+"\nDo you want to change your pass phrase (y/N)? "
+de: "\nWillst Du Dein Mantra ändern? (j/N) "
+es: "\n¿Quieres cambiar la contraseña (s/N)? "
+fr: "\nVoulez vous changer votre mot de passe (o/N)? "
+muttde: "\nWillst Du Dein Mantra ändern? (j/N) "
+
+"(No changes will be made.)\n"
+de: "\n(Es werden keine Änderungen vorgenommen.)\n"
+es: "(No se efectuará ningún cambio.)\n"
+fr: "(Aucun changement ne sera effectué.)\n"
+muttde: "\n(Es werden keine Änderungen vorgenommen.)\n"
+
+"\n\007Unable to update secret key ring.\n"
+de: "\n\007FEHLER beim Aktualisieren des privaten Schlüsselbunds.\n"
+es: "\n\007No puede actualizarse el anillo de claves secretas.\n"
+fr: "\n\007Impossible de modifier le fichier de clés secrètes.\n"
+mutt: "\nUnable to update secret key ring.\n"
+muttde: "\nFEHLER beim Aktualisieren des privaten Schlüsselbunds.\n"
+
+"\nSecret key ring updated...\n"
+de: "\n\nDer private Schlüsselbund wurde aktualisiert.\n"
+es: "\nActualizado el anillo de claves secretas ...\n"
+fr: "\nFichier de clés secrètes modifié...\n"
+muttde: "\n\nDer private Schlüsselbund wurde aktualisiert.\n"
+
+"\n\007Unable to update public key ring.\n"
+de: "\n\007FEHLER beim Aktualisieren des öffentlichen Schlüsselbunds.\n"
+es: "\n\007No puede actualizarse el anillo de claves públicas.\n"
+fr: "\n\007Impossible de modifier le fichier de clés publiques.\n"
+mutt: "\nUnable to update public key ring.\n"
+muttde: "\nFEHLER beim Aktualisieren des öffentlichen Schlüsselbunds.\n"
+
+"(No need to update public key ring)\n"
+de: "\n(Keine Änderung am öffentlichen Schlüsselbund notwendig.)\n"
+es: "(No es necesario actualizar el anillo de claves públicas)\n"
+fr: "(Pas besoin de modifier le fichier de clés publiques)\n"
+muttde: "\n(Keine Änderung am öffentlichen Schlüsselbund notwendig.)\n"
+
+"\nDo you want to permanently revoke your public key\n\
+by issuing a secret key compromise certificate\n\
+for \"%s\" (y/N)? "
+de: "\nWillst Du Deinen öffentlichen Schlüssel wirklich durch das Versenden\n\
+einer Widerrufs-Urkunde für \"%s\"\nzurückziehen, d.h. für ungültig erklären? (j/N) "
+es: "\n¿Quieres revocar permanentemente tu clave pública\n\
+emitiendo un certificado de compromiso de clave secreta\n\
+para \"%s\" (s/N)? "
+fr: "\nVoulez vous révoquer de façon permanente votre clé publique\n\
+en émettant un certificat de compromission de clé secrète\n\
+pour \"%s\" (o/N)? "
+muttde: "\nWillst Du Deinen öffentlichen Schlüssel wirklich durch das Versenden\n\
+einer Widerrufs-Urkunde für \"%s\"\nzurückziehen, d.h. für ungültig erklären? (j/N) "
+
+"You can only disable keys on your public keyring.\n"
+de: "Du kannst nur Schlüssel aus Deinem öffentlichen Schlüsselbund sperren.\n"
+es: "Sólo puedes desactivar claves en el anillo de claves públicas.\n"
+fr: "Vous ne pouvez inactiver des clés que sur votre fichier de clés\
+\npubliques.\n"
+muttde: "Du kannst nur Schlüssel aus Deinem öffentlichen Schlüsselbund sperren.\n"
+
+"\nKey is already disabled.\n\
+Do you want to enable this key again (y/N)? "
+de: "\nDieser Schlüssel ist schon gesperrt.\nMöchtest Du ihn wieder freigeben? (j/N) "
+es: "\nLa clave ya está desactivada.\n\
+¿Quieres activarla otra vez (s/N)? "
+fr: "\nLa clé est déjà inactivée.\n\
+Voulez vous réactiver cette clé (o/N)? "
+muttde: "\nDieser Schlüssel ist schon gesperrt.\nMöchtest Du ihn wieder freigeben? (j/N) "
+
+"\nDisable this key (y/N)? "
+de: "\nSoll dieser Schlüssel gesperrt werden? (j/N) "
+es: "\n¿Desactivar esta clave (s/N)? "
+fr: "Désactiver cette clé (o/N)? "
+muttde: "\nSoll dieser Schlüssel gesperrt werden? (j/N) "
+
+"Pick your RSA key size:\n\
+    1)  1024 bits- User grade, fast but less secure\n\
+    2)  1535 bits- Regional CA grade, medium speed, good security\n\
+    3)  2048 bits- Root CA grade, slow, high security\n\
+Choose 1, 2, or 3, or enter desired number of bits (384...8192): "
+de: "Wähle die Länge Deines RSA-Schlüssels aus:\
+\n   1) 1024 Bits: für Nutzer: schnell, aber nicht ganz so sicher\
+\n   2) 1535 Bits: für regionale CAs: mittelmäßig schnell, recht sicher\
+\n   3) 2048 Bits: für Root CAs: langsam, jedoch sehr sicher\
+\nAuswahl (1, 2, 3 oder die Länge des Schlüssels in Bits (384...8192)): "
+es: "Elija un tamaño de clave RSA:\n\
+    1)  1024 bits- Nivel comercial bajo, r\0341pido pero menos seguro\n\
+    2)  1535 bits- Nivel comercial alto, velocidad media con buena seguridad\n\
+    3)  2048 bits- Nivel \"militar\", lento con alta seguridad\n\
+Escoge 1, 2, 3, o el número requerido de bits (384...8192): "
+fr: "Choisissez la taille de votre clef RSA:\n\
+    1)  1024 bits- Niveau de base, rapide mais moins securitaire\n\
+    2)  1535 bits- Niveau de securité eleve - vitesse moyenne \n\
+    3)  2048 bits- Pour les militaires, les diplomates... les paranoiaques \n\
+Choisissez 1, 2, ou 3, ou entrez le nombre de bits desires (384...8192): "
+muttde: "Wähle die Länge Deines RSA-Schlüssels aus:\
+\n   1) 1024 Bits: für Nutzer: schnell, aber nicht ganz so sicher\
+\n   2) 1535 Bits: für regionale CAs: mittelmäßig schnell, recht sicher\
+\n   3) 2048 Bits: für Root CAs: langsam, jedoch sehr sicher\
+\nAuswahl (1, 2, 3 oder die Länge des Schlüssels in Bits (384...8192)): "
+
+"Generating an RSA key with a %d-bit modulus.\n"
+de: "Erzeugung eines RSA-Schlüssels mit einem %d-Bit-Modulus.\n"
+es: "Generando una clave RSA con módulo de %d bits.\n"
+fr: "Generation d'une clé RSA avec un module de %d bits.\n"
+muttde: "Erzeugung eines RSA-Schlüssels mit einem %d-Bit-Modulus.\n"
+
+"\nYou need a user ID for your public key.  The desired form for this\n\
+user ID is your name, followed by your E-mail address enclosed in\n\
+<angle brackets>, if you have an E-mail address.\n\
+Form: Real Name (comment) <email> (options)\n\
+  Optional options: ENCR, SIGN, EXPIRE:yyyy-mm-dd\n\
+Enter a user ID for your public key: \n"
+de: "\nDu brauchst eine Benutzer-ID für Deinen öffentlichen Schlüssel. Das übliche\n\
+Format für diese Benutzer-ID ist Dein Realname, gefolgt von Deinem Usernamen\n\
+in <spitzen Klammern>, falls Du per E-Mail erreichbar bist.\n\
+Format: Bürgerlicher Name (Kommentar) <email> (Optionen)\n\
+  Freiwillige Optionen: ENCR, SIGN, EXPIRE:yyyy-mm-dd\n\
+Gib die Benutzer-ID für Deinen öffentlichen Schlüssel ein:\n"
+es: "\nNecesitas un identificador para tu clave pública. El formato preferido\n\
+consiste en tu nombre, seguido de tu dirección de correo electrónico,\n\
+si tienes, entre <ángulos>.\n\
+Form: Real Name (comment) <email> (options)\n\
+  Optional options: ENCR, SIGN, EXPIRE:yyyy-mm-dd\n\
+Introduce un identificador de usuario para tu clave pública: \n"
+fr: "\nIl vous faut un nom d'utilisateur pour votre clé publique. La forme\n\
+désirée pour ce nom d'utilisateur est votre nom, suivi de votre addresse\n\
+de courrier électronique entre <crochets>, si vous en avez une.\n\
+Form: Real Name (comment) <email> (options)\n\
+  Optional options: ENCR, SIGN, EXPIRE:yyyy-mm-dd\n\
+Entrez un nom d'utilisateur pour votre clé publique\n\
+(votre nom): "
+muttde: "\nDu brauchst eine Benutzer-ID für Deinen öffentlichen Schlüssel. Das übliche\n\
+Format für diese Benutzer-ID ist Dein Realname, gefolgt von Deinem Usernamen\n\
+in <spitzen Klammern>, falls Du per E-Mail erreichbar bist.\n\
+Format: Bürgerlicher Name (Kommentar) <email> (Optionen)\n\
+  Freiwillige Optionen: ENCR, SIGN, EXPIRE:yyyy-mm-dd\n\
+Gib die Benutzer-ID für Deinen öffentlichen Schlüssel ein:\n"
+
+"Generating RSA key-pair with UserID \"%s\".\n"
+de: "Erzeugung eines RSA-Schlüsselpaares mit der\nBenutzer-ID \"%s\".\n"
+es: "Generando el par de claves RSA con identificador \"%s\".\n"
+fr: "Génération d'une paire de clefs RSA de l'utilisateur '%s'.\n"
+muttde: "Erzeugung eines RSA-Schlüsselpaares mit der\nBenutzer-ID \"%s\".\n"
+
+"\nYou need a pass phrase to protect your RSA secret key.\n\
+Your pass phrase can be any sentence or phrase and may have many\n\
+words, spaces, punctuation, or any other printable characters.\n"
+de: "\nDu brauchst ein Mantra, um Deinen privaten RSA-Schlüssel zu schützen.\n\
+Dein Mantra kann jeder beliebige Satz oder Zeichenfolge sein und darf aus\n\
+vielen Worten, Leerzeichen oder anderen druckbaren Zeichen bestehen.\n"
+es: "\nNecesitas una contraseña para proteger tu clave secreta RSA.\n\
+Puede ser cualquier expresión formada por varias palabras, espacios,\n\
+signos de puntuación o cualquier otro carácter imprimible.\n"
+fr: "\nVous devez avoir un mot de passe pour protéger votre clé RSA \n\
+secrète. Votre mot de passe peut être n'importe quelle phrase ou portion\n\
+de phrase et peut avoir plusieurs mots, espaces, caractères de ponctuation\n\
+ou tout autre caractère imprimable.\n"
+muttde: "\nDu brauchst ein Mantra, um Deinen privaten RSA-Schlüssel zu schützen.\n\
+Dein Mantra kann jeder beliebige Satz oder Zeichenfolge sein und darf aus\n\
+vielen Worten, Leerzeichen oder anderen druckbaren Zeichen bestehen.\n"
+
+"\nNote that key generation is a lengthy process.\n"
+de: "\n\nBeachte, daß die Schlüsselerzeugung eine zeitaufwendige Sache ist.\n"
+es: "\nTen en cuenta que la generación de claves es un proceso lento.\n"
+fr: "\nNotez que la génération de clé est une procédure lente.\n"
+muttde: "\n\nBeachte, daß die Schlüsselerzeugung eine zeitaufwendige Sache ist.\n"
+
+"Key generation stopped at user request.\n"
+de: "Die Schlüsselerzeugung wurde durch den Benutzer abgebrochen!\n"
+es: "Generación de claves interrumpida a petición del usuario.\n"
+fr: "Le génération de la clef a été stoppée à la demande de l'utilisateur.\n"
+muttde: "Die Schlüsselerzeugung wurde durch den Benutzer abgebrochen!\n"
+
+"\n\007Keygen failed!\n"
+de: "\n\007FEHLER bei der Schlüssel-Erzeugung!\n"
+es: "\n\007Error en la generación de claves\n"
+fr: "\n\007Generation de clé non réussie!\n"
+mutt: "\nKeygen failed!\n"
+muttde: "\nFEHLER bei der Schlüssel-Erzeugung!\n"
+
+"Key ID %s\n"
+de: "Schlüssel-ID: %s\n"
+es: "Identificador de clave %s\n"
+fr: "Identificateur de clé %s\n"
+muttde: "Schlüssel-ID: %s\n"
+
+"Display secret components (y/N)?"
+de: "Geheime Bestandteile anzeigen? (j/N) "
+es: "¿Mostrar los componentes secretos (s/N)?"
+fr: "Affichier les composantes secretes (o/N)?"
+muttde: "Geheime Bestandteile anzeigen? (j/N) "
+
+"\007Key generation completed.\n"
+de: "\n\007Die Erzeugung des Schlüssels ist beendet.\n"
+es: "\007Finalizada la generación de claves.\n"
+fr: "\007Génération de clé terminée.\n"
+mutt: "Key generation completed.\n"
+muttde: "\nDie Erzeugung des Schlüssels ist beendet.\n"
+
+"Type Bits/KeyID    Date       User ID\n"
+de: "Typ  Bits/KeyID    Datum      NutzerID\n"
+es: "Tipo Bits/Clave    Fecha      Identificador\n"
+fr: "Type Bits/Clef     Date       ID utilisateur\n"
+muttde: "Typ  Bits/KeyID    Datum      NutzerID\n"
+
+"\n\007File '%s' is not a text file; cannot display.\n"
+de: "\n\007Die Datei '%s' ist keine Textdatei\n\
+und kann deshalb nicht angezeigt werden!\n"
+es: "\n\007El fichero '%s' no es de texto; no puede mostrarse.\n"
+fr: "\n\007Le fichier '%s' n'est pas un fichier de texte et ne peut être \
+visualisé\n"
+mutt: "\nFile '%s' is not a text file; cannot display.\n"
+muttde: "\nDie Datei '%s' ist keine Textdatei\n\
+und kann deshalb nicht angezeigt werden!\n"
+
+"\nDone...hit any key\r"
+de: "\nFertig... Bitte drücke eine Taste.\r"
+es: "\nFinalizado...pulse cualquier tecla\r"
+fr: "\nTerminé... appuyez sur n'importe quelle touche \r"
+muttde: "\nFertig... Bitte drücke eine Taste.\r"
+
+"-- More -- Space: next screen, Enter: next line\
+, 'B': back, 'Q': quit --\r"
+de: "-- Weiter -- Vorwärts: Leertaste oder Return; Rückwärts: 'B'; Ende: 'Q' --\r"
+es: "-- más -- espacio: otra pantalla, enter: otra línea,\
+ B: atrás, Q: salir\r"
+fr: "- Plus - Espace: procahin écran , Chariot: prochaine ligne\
+, 'B': retour, 'Q': quitter - \r"
+muttde: "-- Weiter -- Vorwärts: Leertaste oder Return; Rückwärts: 'B'; Ende: 'Q' --\r"
+
+"More -- %d%% -- Space: next screen, Enter: next line\
+, 'B': back, 'Q': quit --\r"
+de: "Weiter -- %d%% -- Vorwärts: Leertaste oder Return; Rückwärts: 'B'; Ende: 'Q' --\r"
+es: "Más -- %d%% -- espacio: otra pantalla, enter: otra línea,\
+ B: atrás, Q: salir\r"
+fr: "- Plus -  %D%% - Espace: procahin écran , Chariot: prochaine ligne\
+, 'B': retour, 'Q': quitter - \r"
+muttde: "Weiter -- %d%% -- Vorwärts: Leertaste oder Return; Rückwärts: 'B'; Ende: 'Q' --\r"
+
+"\nEnter pass phrase: "
+de: "\nGib das Mantra ein: "
+es: "\nIntroduce la contraseña: "
+fr: "\nEntrez votre mot de passe: "
+muttde: "\nGib das Mantra ein: "
+
+"\nEnter same pass phrase again: "
+de: "\nWiederhole das Mantra: "
+es: "\nEscríbela otra vez: "
+fr: "\nEntrez le même mot de passe de nouveau: "
+muttde: "\nWiederhole das Mantra: "
+
+"\n\007Error: Pass phrases were different.  Try again."
+de: "\n\007FEHLER: Die beiden Eingaben waren unterschiedlich! Bitte noch einmal."
+es: "\n\007Error: Las contraseñas son diferentes. Prueba otra vez."
+fr: "\n\007Erreur: Les mots de passe étaient différents. Essayez encore."
+mutt: "\nError: Pass phrases were different.  Try again."
+muttde: "\nFEHLER: Die beiden Eingaben waren unterschiedlich! Bitte noch einmal."
+
+"\nStopped at user request\n"
+de: "\nAbbruch durch Benutzer\n"
+es: "\nInterrupción por petición del usuario\n"
+fr: "\nArrêt par demande de l'utilisateur\n"
+muttde: "\nAbbruch durch Benutzer\n"
+
+"Pretty Good Privacy(tm) %s - Public-key encryption for the masses.\n"
+de: "Pretty Good Privacy(tm) %s - Public-key-Verschlüsselung für die Massen.\n"
+es: "Pretty Good Privacy(tm) %s - Criptografía de clave pública para todos.\n"
+fr: "Pretty Good Privacy(tm) %s - Cryptographie à clé publique pour tous.\n"
+muttde: "Pretty Good Privacy(tm) %s - Public-key-Verschlüsselung für die Massen.\n"
+
+"(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software."
+de: "(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software."
+es: "(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software."
+fr: "( c ) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. "
+muttde: "(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software."
+
+"Export of this software may be restricted by the U.S. government.\n"
+de: "Der Export dieser Software aus den USA kann Beschränkungen unterliegen.\n"
+es: "La exportación de este programa puede estar restringida por\n\
+el gobierno de los EE.UU."
+fr: "L'exportation de ce logiciel peut être restreint par le \
+gouvernement des États-Unis"
+muttde: "Der Export dieser Software aus den USA kann Beschränkungen unterliegen.\n"
+
+"International version - not for use in the USA. Does not use RSAREF.\n"
+de: "Internationale Version - nicht in den USA verwenden!  Benutzt nicht RSAREF.\n"
+es: "Versión internacional - no apta para los EE.UU. No utiliza RSAREF.\n"
+fr: "Version internationale - ne pas utiliser aux Etats-Unis. N'utilise pas le
+RSAREF.\n"
+muttde: "Internationale Version - nicht in den USA verwenden!  Benutzt nicht RSAREF.\n"
+
+"Current time: %s\n"
+de: "Aktuelles Datum und Uhrzeit: %s\n"
+es: "Hora actual: %s\n"
+fr: "Heure actuelle: %s\n"
+muttde: "Aktuelles Datum und Uhrzeit: %s\n"
+
+"\007No configuration file found.\n"
+de: "\007Keine Konfigurationsdatei gefunden!\n"
+es: "\007No se encuentra el fichero de configuración.\n"
+fr: "\007Fichier de configuration introuvable.\n"
+mutt: "No configuration file found.\n"
+muttde: "Keine Konfigurationsdatei gefunden!\n"
+
+"\007WARNING: Environmental variable TZ is not \
+defined, so GMT timestamps\n\
+may be wrong.  See the PGP User's Guide to properly define TZ\n\
+in AUTOEXEC.BAT file.\n"
+de: "\007WARNUNG: Die Umgebungsvariable TZ ist nicht definiert, daher könnten\n\
+die GMT-Zeitangaben falsch sein. Beachte den Abschnitt in der PGP-Anleitung\n\
+über das richtige Setzen von TZ in AUTOEXEC.BAT.\n\n"
+es: "\007ADVERTENCIA: La variable TZ no está definida, por lo que\n\
+los sellos de fecha GMT pueden estar equivocados. Consulta la Guía del\n\
+usuario de PGP para definir adecuadamente TZ en AUTOEXEC.BAT.\n"
+fr: "\007ATTENTION: La variable d'environnement TZ n'est pas définie, les\n\
+temps GMT peuvent donc êtres faussés. Voir le guide de l'utilisateur PGP pour\n\
+définir correctement TZ dans le fichier AUTOEXEC.BAT.\n"
+mutt: "WARNING: Environmental variable TZ is not \
+defined, so GMT timestamps\n\
+may be wrong.  See the PGP User's Guide to properly define TZ\n\
+in AUTOEXEC.BAT file.\n"
+muttde: "WARNUNG: Die Umgebungsvariable TZ ist nicht definiert, daher könnten\n\
+die GMT-Zeitangaben falsch sein. Beachte den Abschnitt in der PGP-Anleitung\n\
+über das richtige Setzen von TZ in AUTOEXEC.BAT.\n\n"
+
+"\nFile %s wiped and deleted. "
+de: "\nDie Datei '%s' wurde überschrieben und gelöscht."
+es: "\nEl fichero %s ha sido borrado y destruido. "
+fr: "\nFichier %s effacé et détruit. "
+muttde: "\nDie Datei '%s' wurde überschrieben und gelöscht."
+
+"\n\007Error: Can't wipe out file '%s' - read only, maybe?\n"
+de: "\n\007FEHLER: Die Datei '%s' kann nicht überschrieben werden.\n\
+Ist sie vielleicht schreibgeschützt?\n"
+es: "\n\007Error: No puede eliminarse el fichero '%s' - \
+quizá sea sólo de lectura\n"
+fr: "\n\007Erreur: Incapable de détruire le fichier '%s' - lectu4re seulement peut être?\n"
+mutt: "\nError: Can't wipe out file '%s' - read only, maybe?\n"
+muttde: "\nFEHLER: Die Datei '%s' kann nicht überschrieben werden.\n\
+Ist sie vielleicht schreibgeschützt?\n"
+
+"\n\007File '%s' does not exist.\n"
+de: "\n\007Die Datei '%s' existiert nicht!\n"
+es: "\n\007El fichero '%s' no existe.\n"
+fr: "Le fichier '%s' n'existe pas. \n"
+mutt: "\nFile '%s' does not exist.\n"
+muttde: "\nDie Datei '%s' existiert nicht!\n"
+
+"\nFor details on licensing and distribution, see the PGP User's Guide.\
+\nFor other cryptography products and custom development services, contact:\
+\nPhilip Zimmermann, 3021 11th St, Boulder CO 80304 USA, \
+phone +1 303 541-0140\n"
+de: "\nInformationen über Lizenzen und Verteilung finden sich in der PGP-Anleitung.\
+\nInformationen über Verschlüsselungs-Produkte und Auftrags-Entwicklungen:\
+\nPhilip Zimmermann, 3021 11th St, Boulder CO 80304 USA, Tel. +1-(303)-541-0140\n"
+es: "\nInformación sobre licencia y distribución en la Guía del usuario de PGP.\
+\nMás información sobre otros productos y servicios criptográficos a medida:\
+\nPhilip Zimmermann, 3021 11th St, Boulder CO 80304 USA, tel +1 303 541-0140\n"
+fr: "\nConsulter le guide de l'utilisateur de PGP pour les détails de\n\
+license et de distribution. Pour d'autres produits de cryptographie\n\
+et services de développement personalisés, contacter: Philip Zimmermann,\n\
+3021 11th St, Boulder CO 80304 USA, téléphone +1 303 541-0140\n"
+muttde: "\nInformationen über Lizenzen und Verteilung finden sich in der PGP-Anleitung.\
+\nInformationen über Verschlüsselungs-Produkte und Auftrags-Entwicklungen:\
+\nPhilip Zimmermann, 3021 11th St, Boulder CO 80304 USA, Tel. +1-(303)-541-0140\n"
+
+"@translator@"
+de: "\nÜbersetzer:\
+\n   Frank Pruefer <F.PRUEFER@LINK-L.cl.sub.de>; Stand: 07.10.1997\
+\n   (basierend auf der deutschen Übersetzung der LANGUAGE.TXT von\
+\n   Marc Aurel <4-tea-2@bong.saar.de> vom 19.01.1994)\n"
+es: "\nTraducido al castellano por Armando Ramos <armando@clerval.org>.\n"
+fr: "\nTraduction française de Jean-loup Gailly <jloup@chorus.fr> et Yanik \
+Crépeau <yanik@mlink.net>\n"
+muttde: "\nÜbersetzer:\
+\n   Frank Pruefer <F.PRUEFER@LINK-L.cl.sub.de>; Stand: 07.10.1997\
+\n   (basierend auf der deutschen Übersetzung der LANGUAGE.TXT von\
+\n   Marc Aurel <4-tea-2@bong.saar.de> vom 19.01.1994)\n"
+
+"\nFor a usage summary, type:  pgp -h\n"
+de: "\nEine Übersicht der PGP-Befehle erhältst Du mit: pgp -h\n"
+es: "\nPara ver un resumen de las instrucciones, escribe: pgp -h\n"
+fr: "\nPour un sommaire d'utilisation, tapez:  pgp -h\n"
+mutt: " "
+muttde: " "
+
+"File %s created containing %d random bytes.\n"
+de: "\nDie Datei '%s', die %d Bytes Zufallszahlen enthält,\n\
+wurde erzeugt.\n"
+es: "Generado el fichero %s con %d bytes aleatorios.\n"
+fr: "Le fichier %s est créé et contient %d octets aléatoires"
+muttde: "\nDie Datei '%s', die %d Bytes Zufallszahlen enthält,\n\
+wurde erzeugt.\n"
+
+"\007Invalid filename: '%s' too long\n"
+de: "\007Ungültiger Dateiname: '%s' ist zu lang.\n"
+es: "\007Nombre incorrecto: '%s' es demasiado largo\n"
+fr: "\007Nom incalide: '%s' trop long\n"
+mutt: "Invalid filename: '%s' too long\n"
+muttde: "Ungültiger Dateiname: '%s' ist zu lang.\n"
+
+"\n\007Input file '%s' looks like it may have been created by PGP. "
+de: "\n\007Die Eingabedatei '%s' könnte von PGP erzeugt worden sein."
+es: "\n\007El fichero de entrada '%s' parece haber sido creado por PGP. "
+fr: "\n\007Le fichier d'entrée '%s' semble avoir été créé par PGP. "
+mutt: "\nInput file '%s' looks like it may have been created by PGP. "
+muttde: "\nDie Eingabedatei '%s' könnte von PGP erzeugt worden sein."
+
+"\nIs it safe to assume that it was created by PGP (y/N)? "
+de: "\nWurde diese von PGP erzeugt? (j/N) "
+es: "\n¿Puede asumirse con seguridad que ha sido así (s/N)? "
+fr: "\nEtes vous sûr qu'il a été créé par PGP (o/N)? "
+muttde: "\nWurde diese von PGP erzeugt? (j/N) "
+
+"\nNote: '%s' is not a pure text file.\n\
+File will be treated as binary data.\n"
+de: "\nHinweis: '%s' ist keine reine Textdatei.\n\
+Die Datei wird als Binärdatei behandelt.\n"
+es: "\nNota: '%s' no es un fichero de texto puro.\n\
+Se tratará como datos binarios.\n"
+fr: "Note: '%s' n'est pas un fichier texte. \n\
+Il sera traité comme données binaires"
+muttde: "\nHinweis: '%s' ist keine reine Textdatei.\n\
+Die Datei wird als Binärdatei behandelt.\n"
+
+"\n\007Error: Only text files may be sent as display-only.\n"
+de: "\n\007FEHLER: Nur Textdateien können \"nur zur Ansicht\" verschickt werden.\n"
+es: "\n\007Error: Sólo los ficheros de texto pueden enviarse para mostrar.\n"
+fr: "\n\007Erreur: seuls les fichiers de texte peuvent être envoyés\n\
+pour affichage exclusivement.\n"
+mutt: "\nError: Only text files may be sent as display-only.\n"
+muttde: "\nFEHLER: Nur Textdateien können \"nur zur Ansicht\" verschickt werden.\n"
+
+"\n\007Error: MacBinary failed!\n"
+de: "\n\007FEHLER: MacBinary fehlgeschlagen!\n"
+es: "\n\007Error: ha fallado MacBinary\n"
+fr:"\n\007Erreur:MacBinary a échoué\n"
+mutt: "\nError: MacBinary failed!\n"
+muttde: "\nFEHLER: MacBinary fehlgeschlagen!\n"
+
+"\nA secret key is required to make a signature. "
+de: "\nFür eine Unterschrift wird ein privater Schlüssel benötigt."
+es: "\nSe necesita una clave secreta para generar la firma. "
+fr: "\nUne clé secrète est nécessaire pour faire une signature. "
+muttde: "\nFür eine Unterschrift wird ein privater Schlüssel benötigt."
+
+"\nYou specified no user ID to select your secret key,\n\
+so the default user ID and key will be the most recently\n\
+added key on your secret keyring.\n"
+de: "\nDa Du keine Benutzer-ID für Deinen privaten Schlüssel angegeben hast,\n\
+wird der letzte zum privaten Schlüsselbund hinzugefügte Schlüssel benutzt.\n"
+es: "\nNo has indicado ningún identificador para escoger la clave secreta,\n\
+por lo que el identificador y la clave por omisión serán los últimos\n\
+añadidos al anillo.\n"
+fr: "\nVous n'avez pas spécifié de nom d'utilisateur pour sélectionner\n\
+votre clé secrète, donc le nom et la clé par défaut seront ceux les\n\
+plus récemment ajoutés à votre fichier de clés secrètes.\n"
+muttde: "\nDa Du keine Benutzer-ID für Deinen privaten Schlüssel angegeben hast,\n\
+wird der letzte zum privaten Schlüsselbund hinzugefügte Schlüssel benutzt.\n"
+
+"\007Signature error\n"
+de: "\n\007FEHLER beim Unterschreiben!\n"
+es: "\007Error de firma\n"
+fr: "\007Erreur de signature\n"
+mutt: "Signature error\n"
+muttde: "\nFEHLER beim Unterschreiben!\n"
+
+"\n\nRecipients' public key(s) will be used to encrypt. "
+de: "\n\nVerschlüsselung mit Empfänger-Schlüssel(n).\n"
+es: "\n\nSe utilizan las claves públicas de los destinatarios para encriptar. "
+fr: "\n\nLa ou les clé(s) publique(s) du destinataire seront utilisées\
+ pour chiffrer. "
+muttde: "\n\nVerschlüsselung mit Empfänger-Schlüssel(n).\n"
+
+"\nA user ID is required to select the recipient's public key. "
+de: "\nZur Auswahl des Empfänger-Schlüssels wird eine Benutzer-ID benötigt."
+es: "\nSe necesita un identificador para encontrar la clave pública\n\
+del destinatario. "
+fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé\n\
+publique du destinataire. "
+muttde: "\nZur Auswahl des Empfänger-Schlüssels wird eine Benutzer-ID benötigt."
+
+"\nEnter the recipient's user ID: "
+de: "\nBenutzer-ID des Empfängers: "
+es: "\nIntroduzca el identificador del destinatario: "
+fr: "\nEntrez le nom d'utilisateur du destinataire: "
+muttde: "\nBenutzer-ID des Empfängers: "
+
+"\007Encryption error\n"
+de: "\n\007FEHLER beim Verschlüsseln!\n"
+es: "\007Error en la encriptación\n"
+fr: "\007Erreur de chiffrage\n"
+mutt: "Encryption error\n"
+muttde: "\nFEHLER beim Verschlüsseln!\n"
+
+"\nCiphertext file: %s\n"
+de: "\nVerschlüsselte Datei: %s\n"
+es: "\nFichero cifrado: %s\n"
+fr: "\nFichier chiffré: %s\n"
+muttde: "\nVerschlüsselte Datei: %s\n"
+
+"\nSignature file: %s\n"
+de: "\nUnterschriftsdatei: %s\n"
+es: "\nFichero de firma: %s\n"
+fr: "\nFichier de signature: %s\n"
+muttde: "\nUnterschriftsdatei: %s\n"
+
+"\n\007Error: Transport armor stripping failed for file %s\n"
+de: "\n\007FEHLER beim Entfernen der Versandhülle von Datei '%s'.\n"
+es: "\n\007Error: No se ha podido quitar la armadura de %s\n"
+fr: "\n\007Erreur dans la suppression de la protection de transport pour\n\
+le fichier %s\n"
+mutt: "\nError: Transport armor stripping failed for file %s\n"
+muttde: "\nFEHLER beim Entfernen der Versandhülle von Datei '%s'.\n"
+
+"Stripped transport armor from '%s', producing '%s'.\n"
+de: "\nDie Versandhülle von Datei '%s' wurde entfernt.\nAusgabedatei: %s\n"
+es: "Quitada la armadura de '%s', produciendo '%s'.\n"
+fr: "Protection de transport supprimée pour '%s', produisant '%s'.\n"
+muttde: "\nDie Versandhülle von Datei '%s' wurde entfernt.\nAusgabedatei: %s\n"
+
+"\nLooking for next packet in '%s'...\n"
+de: "\nSuche nach dem nächsten Paket in '%s'...\n"
+es: "\nBuscando el siguiente paquete en '%s'...\n"
+fr: "\nRecherche du prochain paquet dans '%s'...\n"
+muttde: "\nSuche nach dem nächsten Paket in '%s'...\n"
+
+"\nFile is encrypted.  Secret key is required to read it. "
+de: "\nDie Datei ist verschlüsselt. Zum Lesen wird der private Schlüssel benötigt.\n"
+es: "\nEl fichero está encriptado. Para leerlo se necesita la clave secreta. "
+fr: "\nLe fichier est chiffré. La clé secrète est nécessaire pour le lire."
+muttde: "\nDie Datei ist verschlüsselt. Zum Lesen wird der private Schlüssel benötigt.\n"
+
+"\nThis file has a signature, which will be left in place.\n"
+de: "\nDiese Datei trägt eine Unterschrift, die nicht entfernt wird.\n"
+es: "\nEste fichero tiene firma, que se deja en su sitio.\n"
+fr: "\nCe fichier a une signature, qui sera gardée.\n"
+muttde: "\nDiese Datei trägt eine Unterschrift, die nicht entfernt wird.\n"
+
+"\nFile has signature.  Public key is required to check signature.\n"
+de: "\nDiese Datei trägt eine Unterschrift.\n\
+Zur Überprüfung wird der öffentliche Schlüssel benötigt.\n"
+es: "\nEl fichero tiene firma. Se necesita la clave pública para comprobarla.\n"
+fr: "Ce fichier est signé. Une clef publique est nécessaire pour sa vérification.\n"
+muttde: "\nDiese Datei trägt eine Unterschrift.\n\
+Zur Überprüfung wird der öffentliche Schlüssel benötigt.\n"
+
+"\nFile is conventionally encrypted.  "
+de: "\nDiese Datei ist konventionell verschlüsselt.\n"
+es: "\nEl fichero ha sido encriptado convencionalmente.  "
+fr: "\nLe fichier est chiffré de manière conventionnelle.  "
+muttde: "\nDiese Datei ist konventionell verschlüsselt.\n"
+
+"\nFile contains key(s).  Contents follow..."
+de: "\nDiese Datei enthält einen oder mehrere Schlüssel. Hier kommt die Liste:\n"
+es: "\nEl fichero contiene claves. Se muestran a continuación ..."
+fr: "\nLe fichier contient une ou plusieurs clés. Le contenu suit..."
+muttde: "\nDiese Datei enthält einen oder mehrere Schlüssel. Hier kommt die Liste:\n"
+
+"\nDo you want to add this keyfile to keyring '%s' (y/N)? "
+de: "\nWillst Du die Schlüssel dieser Datei zum Schlüsselbund\n'%s' hinzufügen? (j/N) "
+es: "\n¿Quieres añadir este fichero de claves al anillo '%s' (s/N)? "
+fr: "\nVoulez vous ajouter ce fichier de clé au fichier '%s' (o/N)? "
+muttde: "\nWillst Du die Schlüssel dieser Datei zum Schlüsselbund\n'%s' hinzufügen? (j/N) "
+
+"\007Keyring add error. "
+de: "\n\007FEHLER beim Hinzufügen zum Schlüsselbund.\n"
+es: "\007Error al añadir en el anillo. "
+fr: "\007Erreur dans l'addition au fichier de clés. "
+mutt: "Keyring add error. "
+muttde: "\nFEHLER beim Hinzufügen zum Schlüsselbund.\n"
+
+"\007\nError: '%s' is not a ciphertext, signature, or key file.\n"
+de: "\007\nFEHLER: Die Datei '%s' ist nicht verschlüsselt\n\
+und enthält weder eine Unterschrift noch einen oder mehrere Schlüssel.\n"
+es: "\007\nError: '%s' no es un texto cifrado, una firma ni una clave.\n"
+fr: "\007\nErreur: '%s' n'est pas un fichier chiffré, de signatures\
+\nou de clés.\n"
+mutt: "\nError: '%s' is not a ciphertext, signature, or key file.\n"
+muttde: "\nFEHLER: Die Datei '%s' ist nicht verschlüsselt\n\
+und enthält weder eine Unterschrift noch einen oder mehrere Schlüssel.\n"
+
+"\n\nThis message is marked \"For your eyes only\".  Display now \
+(Y/n)? "
+de: "\n\nDiese Nachricht ist als VERTRAULICH markiert! Jetzt anzeigen? (J/n) "
+es: "\n\nEste mensaje está marcado como \"Sólo para tus ojos\".\
+¿Mostrar ahora (S/n)? "
+fr: "\n\nCe message est marqué \"Pour vos yeux seulement\".\n\
+Afficher maintenant (O/n)? "
+muttde: "\n\nDiese Nachricht ist als VERTRAULICH markiert! Jetzt anzeigen? (J/n) "
+
+"\n\nPlaintext message follows...\n"
+de: "\n\nHier kommt die Nachricht im Klartext:\n"
+es: "\n\nMensaje en claro a continuación...\n"
+fr: "\n\nLe message en clair suit...\n"
+muttde: "\n\nHier kommt die Nachricht im Klartext:\n"
+
+"Save this file permanently (y/N)? "
+de: "Klartext sichern? (j/N) "
+es: "¿Grabar este fichero de forma permanente (s/N)? "
+fr: "Sauvegarde de ce fichier de manière permanente (o/N)? "
+muttde: "Klartext sichern? (j/N) "
+
+"Enter filename to save file as: "
+de: "Klartext sichern als: "
+es: "Introduzca el nombre para el fichero: "
+fr: "Entrez le nom du fichier de sauvegarde: "
+muttde: "Klartext sichern als: "
+
+"Enter filename to save file as:"
+de: "Gib den Namen ein, unter dem die Datei zu sichern ist:"
+es: "Introduzca el nombre para el fichero:"
+fr: "Donner le nom de fichier pour sauvegarder sous:"
+muttde: "Gib den Namen ein, unter dem die Datei zu sichern ist:"
+
+"\nPlaintext filename: %s"
+de: "\nDateiname des Klartextes: %s"
+es: "\nNombre del fichero normal: %s"
+fr: "\nNom du fichier en clair: %s"
+muttde: "\nDateiname des Klartextes: %s"
+
+"\nPlaintext file '%s' looks like it contains a public key."
+de: "\nDie Klartextdatei '%s' scheint einen\nöffentlichen Schlüssel zu enthalten."
+es: "\nEl fichero normal '%s' parece contener una clave pública."
+fr: "\nLe ficher en clair '%s' semble contenir une clé publique."
+muttde: "\nDie Klartextdatei '%s' scheint einen\nöffentlichen Schlüssel zu enthalten."
+
+"\nPlaintext file '%s' looks like a %s file."
+de: "\nDie Klartextdatei '%s' scheint eine %s-Datei zu sein."
+es: "\nEl fichero normal '%s' parece un fichero %s."
+fr: "\nLe fichier en clair '%s' semble être un fichier %s."
+muttde: "\nDie Klartextdatei '%s' scheint eine %s-Datei zu sein."
+
+"\n\007Output file '%s' may contain more ciphertext or signature."
+de: "\n\007Die Ausgabedatei '%s' könnte weiteren\n\
+verschlüsselten Text oder eine Unterschrift enthalten."
+es: "\n\007El fichero de salida '%s' puede contener más texto \
+cifrado o una firma."
+fr: "\n\007Le fichier de sortie '%s' peut contenir d'autre texte chiffré\n\
+ou signature."
+mutt: "\nOutput file '%s' may contain more ciphertext or signature."
+muttde: "\nDie Ausgabedatei '%s' könnte weiteren\n\
+verschlüsselten Text oder eine Unterschrift enthalten."
+
+"\a\nError: PGP User's Guide not found.\n\
+PGP looked for it in the following directories:\n"
+de: "\a\nFEHLER: PGP-Benutzerhandbuch nicht gefunden!\n\
+PGP hat danach in den folgenden Verzeichnissen gesucht:\n"
+es: "\a\nError: No se encuentra la Guía del usuario.\n\
+Se ha buscado en estos directorios:\n"
+fr: "\n\aErreur: Le manuel d'utilisation de PGP est introuvable.\n\
+PGP a examiné les repertoires suivants:\n"
+muttde: "\a\nFEHLER: PGP-Benutzerhandbuch nicht gefunden!\n\
+PGP hat danach in den folgenden Verzeichnissen gesucht:\n"
+
+"and the doc subdirectory of each of the above.  Please put a copy of\n\
+both volumes of the User's Guide in one of these directories.\n\
+\n\
+Under NO CIRCUMSTANCES should PGP ever be distributed without the PGP\n\
+User's Guide, which is included in the standard distribution package.\n\
+If you got a copy of PGP without the manual, please inform whomever you\n\
+got it from that this is an incomplete package that should not be\n\
+distributed further.\n\
+\n\
+PGP will not generate a key without finding the User's Guide.\n\
+There is a simple way to override this restriction.  See the\n\
+PGP User's Guide for details on how to do it.\n\
+\n"
+de: "sowie jeweils im Unterverzeichnis 'DOC' der oben genannten Verzeichnisse.\n\
+Bitte lege eine Kopie beider Teile des Benutzerhandbuches (Dateien PGPDOC1.TXT\n\
+und PGPDOC2.TXT) in eines der genannten Verzeichnisse.\n\
+Unter GAR KEINEN UMSTÄNDEN sollte PGP jemals ohne das PGP-Benutzerhandbuch\n\
+ausgeliefert werden, das sich im Standard-Auslieferungspaket befindet. Wenn\n\
+Du eine Kopie von PGP ohne das Handbuch erhalten hast, dann informiere bitte\n\
+denjenigen, von dem Du sie bekommen hast, daß es sich um ein unvollständiges\n\
+Paket handelt, das künftig nicht mehr ausgeliefert werden sollte.\n\
+PGP generiert keine Schlüssel, ohne das Handbuch gefunden zu haben!\n\
+Im PGP-Handbuch steht übrigens auch, wie diese Einschränkung zu umgehen ist...\n"
+es: "y el subdirectorio doc de cada uno de ellos. Pon una copia de\n\
+ambos volúmenes en uno de esos directorios.\n\
+\n\
+Bajo *ninguna circunstancia* debe distribuirse PGP sin la Guía del usuario,\n\
+incluida con la distribución habitual.\n\
+Si tienes una copia de PGP sin manual, informa a quien te la suministró de\n\
+que es un paquete incompleto que no debe seguir distribuyéndose.\n\
+\n\
+PGP no genera ninguna clave si no encuentra la Guía del usuario.\n\
+Hay una forma sencilla de saltarse esta restricción. Consulta la\n\
+Guía para ver cómo hacerlo.\n\
+\n"
+fr: "et leur(s) sous-repertoire(s). Veuillez placer une copie des\n\
+deux (2) documents constituant le manuel d'utilisation dans l'un de\n\
+ces repertoires.\n\
+En aucune cinconstances PGP ne devrait etre distribué sans que les\n\
+documents constituant le manuel ne soit inclus avec le reste.\n\
+Si vous avez obtenu PGP sans les documents constituant le manuel\n\
+veuillez SVP en aviser votre fournisseur que PGP est incomplet et\n\
+que cette maniere de distribuer PGP doit cesser.\n\
+\n\
+PGP ne fonctionnera pas sans la presence des deux documents constituant le
+manuel \n\
+La facon de circonvenir a cette restriction est de consulter le manuel\n\
+\n"
+muttde: "sowie jeweils im Unterverzeichnis 'DOC' der oben genannten Verzeichnisse.\n\
+Bitte lege eine Kopie beider Teile des Benutzerhandbuches (Dateien PGPDOC1.TXT\n\
+und PGPDOC2.TXT) in eines der genannten Verzeichnisse.\n\
+Unter GAR KEINEN UMSTÄNDEN sollte PGP jemals ohne das PGP-Benutzerhandbuch\n\
+ausgeliefert werden, das sich im Standard-Auslieferungspaket befindet. Wenn\n\
+Du eine Kopie von PGP ohne das Handbuch erhalten hast, dann informiere bitte\n\
+denjenigen, von dem Du sie bekommen hast, daß es sich um ein unvollständiges\n\
+Paket handelt, das künftig nicht mehr ausgeliefert werden sollte.\n\
+PGP generiert keine Schlüssel, ohne das Handbuch gefunden zu haben!\n\
+Im PGP-Handbuch steht übrigens auch, wie diese Einschränkung zu umgehen ist...\n"
+
+"\007Keygen error. "
+de: "\n\007FEHLER bei der Erzeugung des Schlüssels.\n"
+es: "\007Error en la generación de claves. "
+fr: "\007Erreur dans la génération de clé. "
+mutt: "Keygen error. "
+muttde: "\nFEHLER bei der Erzeugung des Schlüssels.\n"
+
+"\007Keyring check error.\n"
+de: "\n\007FEHLER bei der Überprüfung des Schlüsselbunds.\n"
+es: "\007Error en la comprobación del anillo.\n"
+fr: "Erreur dans la vérification du trousseau de clef."
+mutt: "Keyring check error.\n"
+muttde: "\nFEHLER bei der Überprüfung des Schlüsselbunds.\n"
+
+"\007Maintenance pass error. "
+de: "\n\007FEHLER beim Verwaltungsdurchgang.\n"
+es: "\007Error en el proceso de mantenimiento. "
+fr: "\007Erreur dans la passe de maintenance. "
+mutt: "Maintenance pass error. "
+muttde: "\nFEHLER beim Verwaltungsdurchgang.\n"
+
+"File '%s' is not a public keyring\n"
+de: "Die Datei '%s' ist kein öffentlicher Schlüsselbund.\n"
+es: "El fichero '%s' no es un anillo de claves públicas\n"
+fr: "Le fichier '%s' n'est pas un fichier de clés publiques\n"
+muttde: "Die Datei '%s' ist kein öffentlicher Schlüsselbund.\n"
+
+"\nA user ID is required to select the public key you want to sign. "
+de: "\nZur Auswahl des zu unterschreibenden Schlüssels wird\n\
+eine Benutzer-ID benötigt."
+es: "\nSe necesita un identificador para elegir\n\
+la clave pública por firmar. "
+fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé\n\
+publique que vous voulez signer. "
+muttde: "\nZur Auswahl des zu unterschreibenden Schlüssels wird\n\
+eine Benutzer-ID benötigt."
+
+"\nEnter the public key's user ID: "
+de: "\nBenutzer-ID des öffentlichen Schlüssels: "
+es: "\nIntroduzca el identificador de la clave pública: "
+fr: "\nEntrez le nom d'utilisateur pour la clé publique: "
+muttde: "\nBenutzer-ID des öffentlichen Schlüssels: "
+
+"\007Key signature error. "
+de: "\n\007FEHLER beim Unterschreiben des Schlüssels.\n"
+es: "\007Error en firma de clave. "
+fr: "\007Erreur dans la signature de clé. "
+mutt: "Key signature error. "
+muttde: "\nFEHLER beim Unterschreiben des Schlüssels.\n"
+
+"\nA user ID is required to select the key you want to revoke or \
+disable. "
+de: "\nZur Auswahl des zurückzuziehenden oder zu sperrenden Schlüssels wird\n\
+eine Benutzer-ID benötigt."
+es: "\nSe necesita un identificador de usuario para elegir la clave \
+que quieras\n\revocar o desactivar. "
+fr: "\nUn nom d'utilisateur est requis pour sélectionner la clé que vous\
+voulez révoquer ou inactiver. "
+muttde: "\nZur Auswahl des zurückzuziehenden oder zu sperrenden Schlüssels wird\n\
+eine Benutzer-ID benötigt."
+
+"\nEnter user ID: "
+de: "\nBenutzer-ID: "
+es: "\nIntroduce el identificador: "
+fr: "\nEntrez le nom d'utilisateur: "
+muttde: "\nBenutzer-ID: "
+
+"\nA user ID is required to select the key you want to edit. "
+de: "\nZur Auswahl des zu bearbeitenden Schlüssels wird eine Benutzer-ID benötigt."
+es: "\nSe necesita el identificador de usuario para elegir la clave que \
+quieras\nmodificar. "
+fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé que\n\
+vous voulez modifier. "
+muttde: "\nZur Auswahl des zu bearbeitenden Schlüssels wird eine Benutzer-ID benötigt."
+
+"\nEnter the key's user ID: "
+de: "\nBenutzer-ID des Schlüssels: "
+es: "\nIntroduce el identificador: "
+fr: "\nEntrez le nom d'utilisateur pour la clé: "
+muttde: "\nBenutzer-ID des Schlüssels: "
+
+"\007Keyring edit error. "
+de: "\n\007FEHLER beim Bearbeiten des Schlüsselbunds.\n"
+es: "\007Error en la modificación del anillo. "
+fr: "\007Erreur dans la modification du fichier de clés. "
+mutt: "Keyring edit error. "
+muttde: "\nFEHLER beim Bearbeiten des Schlüsselbunds.\n"
+
+"\n\007Key file '%s' does not exist.\n"
+de: "\n\007Die Datei '%s' existiert nicht.\n"
+es: "\n\007No existe el anillo de claves '%s.\n"
+fr: "\n\007Le fichier de clés '%s' n'existe pas.\n"
+mutt: "\nKey file '%s' does not exist.\n"
+muttde: "\nDie Datei '%s' existiert nicht.\n"
+
+"\nA user ID is required to select the key you want to extract. "
+de: "\nZur Auswahl des zu extrahierenden Schlüssels wird eine Benutzer-ID benötigt."
+es: "\nSe necesita el identificador de usuario para elegir la clave que \
+quieras\n\extraer. "
+fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé que\n\
+vous voulez extraire. "
+muttde: "\nZur Auswahl des zu extrahierenden Schlüssels wird eine Benutzer-ID benötigt."
+
+"\007Keyring extract error. "
+de: "\n\007FEHLER beim Extrahieren aus dem Schlüsselbund.\n"
+es: "\007Error al extraer del anillo. "
+fr: "\007Erreur dans l'extraction du fichier de clés. "
+mutt: "Keyring extract error. "
+muttde: "\nFEHLER beim Extrahieren aus dem Schlüsselbund.\n"
+
+"\nA user ID is required to select the public key you want to\n\
+remove certifying signatures from. "
+de: "\nZur Auswahl des Schlüssels, von dem Beglaubigungen entfernt werden sollen,\n\
+wird eine Benutzer-ID benötigt."
+es: "\nSe necesita el identificador de usuario para elegir la clave pública\n\
+de la que suprimir firmas. "
+fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé\
+ publique\n\
+pour laquelle vous voulez supprimer des signatures de certification. "
+muttde: "\nZur Auswahl des Schlüssels, von dem Beglaubigungen entfernt werden sollen,\n\
+wird eine Benutzer-ID benötigt."
+
+"\nA user ID is required to select the key you want to remove. "
+de: "\nZur Auswahl des zu löschenden Schlüssels wird eine Benutzer-ID benötigt."
+es: "\nSe necesita el identificador de usuario para elegir la clave que \
+quieras\nsuprimir . "
+fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé que\n\
+vous voulez supprimer. "
+muttde: "\nZur Auswahl des zu löschenden Schlüssels wird eine Benutzer-ID benötigt."
+
+"\007Key signature remove error. "
+de: "\n\007FEHLER beim Entfernen der Beglaubigung.\n"
+es: "\007Error en la supresión de la firma de una clave. "
+fr: "\007Erreur dans la suppression de signature d'une clé. "
+mutt: "Key signature remove error. "
+muttde: "\nFEHLER beim Entfernen der Beglaubigung.\n"
+
+"\007Keyring remove error. "
+de: "\n\007FEHLER beim Löschen aus dem Schlüsselbund.\n"
+es: "\007Error al suprimir del anillo. "
+fr: "\007Erreur dans la suppression du fichier de clés. "
+mutt: "Keyring remove error. "
+muttde: "\nFEHLER beim Löschen aus dem Schlüsselbund.\n"
+
+"\007Keyring view error. "
+de: "\n\007FEHLER beim Anzeigen des Schlüsselbunds.\n"
+es: "\007Error al visualizar el anillo. "
+fr: "\007Erreur dans la visualisation du fichier de clés. "
+mutt: "Keyring view error. "
+muttde: "\nFEHLER beim Anzeigen des Schlüsselbunds.\n"
+
+"For more detailed help, consult the PGP User's Guide.\n"
+de: "Ausführlichere Hilfe findet sich in der PGP-Anleitung.\n"
+es: "Para obtener más ayuda, consulta la Guía del usuario de PGP.\n"
+fr: "Pour une aide plus détaillée, consultez le guide de l'utilisateur de
+PGP.\n"
+mutt: "\n"
+muttde: "\n"
+
+"\nInvalid arguments.\n"
+de: "\nUngültige Argumente!\n"
+es: "\nArgumentos incorrectos.\n"
+fr: "\nArguments invalides.\n"
+muttde: "\nUngültige Argumente!\n"
+
+"\nUsage summary:\
+\nTo encrypt a plaintext file with recipent's public key, type:\
+\n   pgp -e textfile her_userid [other userids] (produces textfile.pgp)\
+\nTo sign a plaintext file with your secret key:\
+\n   pgp -s textfile [-u your_userid]           (produces textfile.pgp)\
+\nTo sign a plaintext file with your secret key, and then encrypt it\
+\n   with recipent's public key, producing a .pgp file:\
+\n   pgp -es textfile her_userid [other userids] [-u your_userid]\
+\nTo encrypt with conventional encryption only:\
+\n   pgp -c textfile\
+\nTo decrypt or check a signature for a ciphertext (.pgp) file:\
+\n   pgp ciphertextfile [-o plaintextfile]\
+\nTo produce output in ASCII for email, add the -a option to other options.\
+\nTo generate your own unique public/secret key pair:  pgp -kg\
+\nFor help on other key management functions, type:   pgp -k\n"
+de: "\nÜbersicht der PGP-Befehle:\
+\nVerschlüsseln eines Textes mit dem öffentlichen Schlüssel des Empfängers:\
+\n   pgp -e {Text} {Benutzer-ID des Empfängers}  (Ergebnis: {Text}.pgp)\
+\nUnterschreiben eines Textes mit Deinem privaten Schlüssel:\
+\n   pgp -s {Text} [-u {Deine Benutzer-ID}]      (Ergebnis: {Text}.pgp)\
+\nUnterschreiben eines Textes mit Deinem privaten Schlüssel und anschließend\
+\nVerschlüsseln mit dem öffentlichen Schlüssel des Empfängers:\
+\n   pgp -es {Text} {Benutzer-ID des Empfängers} [weitere Benutzer-IDs]\
+\n       [-u {Deine Benutzer-ID}]                (Ergebnis: {Text}.pgp)\
+\nVerschlüsseln mit konventioneller Verschlüsselung:\
+\n   pgp -c {Text}\
+\nEntschlüsseln oder Überprüfen der Unterschrift:\
+\n   pgp {verschlüsselter Text} [-o {Klartext}]\
+\nVerpacken der Ausgabe in ASCII (für E-Mail): pgp {...} -a {...}\
+\nErzeugen eines eigenen Schlüssel-Paares:     pgp -kg\
+\nHilfe zur Schlüsselverwaltung:               pgp -k\n"
+es: "\nResumen de las instrucciones:\
+\nEncriptar fichero normal con la clave pública del destinatario:\
+\n   pgp -e ftexto su_identificador             (produce ftexto.pgp)\
+\nFirmar un fichero de texto normal con tu clave secreta:\
+\n   pgp -s ftexto [-u tu_identificador]         (produce ftexto.pgp)\
+\nFirmar un fichero normal con tu clave secreta y después encriptarlo\
+\n   con la clave pública del destinatario, produciendo un fichero .pgp:\
+\n   pgp -es ftexto su_identificador [otros] [-u tu_identificador]\
+\nEncriptar sólo con cifrado convencional:\
+\n   pgp -c ftexto\
+\nDesencriptar o comprobar la firma en un fichero cifrado (.pgp):\
+\n   pgp fcifrado [-o fnormal]\
+\nProducir resultado en ASCII para correo electrónico: añadir la opción -a.\
+\nGenerar tu propio par único de claves pública/secreta:      pgp -kg\
+\nAyuda sobre otras funciones de gestión de claves:              pgp -k\n"
+fr: "\nSommaire:\
+\nPour chiffrer un fichier en clair avec la clé publique du destinataire, \
+tapez:\
+\n   pgp -e fichier  son_nom [autres noms]              (produit fichier.pgp)\
+\nPour signer un texte en clair avec votre clé secrète:\
+\n   pgp -s  fichier [-u votre_nom]             (produit fichier.pgp)\
+\nPour signer un texte en clair avec votre clé secrète, puis le chiffrer\
+\n   avec la clé publique du destinataire, produisant un fichier .pgp:\
+\n   pgp -es fichier  son_nom [autres noms] [-u votre_nom]\
+\nPour chiffrer de manière conventionelle seulement:\
+\n   pgp -c fichier\
+\nPour déchiffrer ou vérifier une signature pour un fichier chiffré (.pgp):\
+\n   pgp fichier_chiffré  [-o fichier_en_clair]\
+\nPour produire une sortie en ASCII pour courrier électronique, ajouter\
+\nl'option -a aux autres options.\
+\nPour générer votre propre paire de clés publique/secrète:\
+\n   pgp -kg\
+\nPour de l'aide sur les autres fonctions de gestion de clé, tapez:  pgp -k\n"
+muttde: "\nÜbersicht der PGP-Befehle:\
+\nVerschlüsseln eines Textes mit dem öffentlichen Schlüssel des Empfängers:\
+\n   pgp -e {Text} {Benutzer-ID des Empfängers}  (Ergebnis: {Text}.pgp)\
+\nUnterschreiben eines Textes mit Deinem privaten Schlüssel:\
+\n   pgp -s {Text} [-u {Deine Benutzer-ID}]      (Ergebnis: {Text}.pgp)\
+\nUnterschreiben eines Textes mit Deinem privaten Schlüssel und anschließend\
+\nVerschlüsseln mit dem öffentlichen Schlüssel des Empfängers:\
+\n   pgp -es {Text} {Benutzer-ID des Empfängers} [weitere Benutzer-IDs]\
+\n       [-u {Deine Benutzer-ID}]                (Ergebnis: {Text}.pgp)\
+\nVerschlüsseln mit konventioneller Verschlüsselung:\
+\n   pgp -c {Text}\
+\nEntschlüsseln oder Überprüfen der Unterschrift:\
+\n   pgp {verschlüsselter Text} [-o {Klartext}]\
+\nVerpacken der Ausgabe in ASCII (für E-Mail): pgp {...} -a {...}\
+\nErzeugen eines eigenen Schlüssel-Paares:     pgp -kg\
+\nHilfe zur Schlüsselverwaltung:               pgp -k\n"
+
+"\nKey management functions:\
+\nTo generate your own unique public/secret key pair:\
+\n   pgp -kg\
+\nTo add a key file's contents to your public or secret key ring:\
+\n   pgp -ka keyfile [keyring]\
+\nTo remove a key or a user ID from your public or secret key ring:\
+\n   pgp -kr userid [keyring]\
+\nTo edit your user ID or pass phrase:\
+\n   pgp -ke your_userid [keyring]\
+\nTo extract (copy) a key from your public or secret key ring:\
+\n   pgp -kx userid keyfile [keyring]\
+\nTo view the contents of your public key ring:\
+\n   pgp -kv[v] [userid] [keyring]\
+\nTo check signatures on your public key ring:\
+\n   pgp -kc [userid] [keyring]\
+\nTo sign someone else's public key on your public key ring:\
+\n   pgp -ks her_userid [-u your_userid] [keyring]\
+\nTo remove selected signatures from a userid on a keyring:\
+\n   pgp -krs userid [keyring]\
+\n"
+de: "\nSchlüssel-Verwaltung:\
+\nErzeugen eines eigenen, eindeutigen Schlüssel-Paares (privat/öffentlich):\
+\n   pgp -kg\
+\nHinzufügen von Schlüsseln zum privaten oder öffentlichen Schlüsselbund:\
+\n   pgp -ka {Datei mit Schlüsseln} [{Schlüsselbund}]\
+\nLöschen eines Schlüssels oder einer Benutzer-ID aus einem Schlüsselbund:\
+\n   pgp -kr {Benutzer-ID} [{Schlüsselbund}]\
+\nÄndern Deiner Benutzer-ID oder Deines Mantras:\
+\n   pgp -ke {Deine Benutzer-ID} [{Schlüsselbund}]\
+\nHerauskopieren eines Schlüssels aus einem Schlüsselbund:\
+\n   pgp -kx {Benutzer-ID} {Ausgabe-Datei} [{Schlüsselbund}]\
+\nAnzeigen des Inhaltes des öffentlichen Schlüsselbunds:\
+\n   pgp -kv[v] [{Benutzer-ID}] [{Schlüsselbund}]\
+\nÜberprüfen der Beglaubigungen im öffentlichen Schlüsselbund:\
+\n   pgp -kc [{Benutzer-ID}] [{Schlüsselbund}]\
+\nBeglaubigen eines öffentlichen Schlüssels eines anderen Benutzers:\
+\n   pgp -ks {seine Benutzer-ID} [-u {Deine Benutzer-ID}] [{Schlüsselbund}]\
+\nEntfernen ausgewählter Beglaubigungen von einem Schlüssel:\
+\n   pgp -krs {Benutzer-ID} [{Schlüsselbund}]\n"
+es: "\nFunciones para la gestión de claves:\
+\nGenerar tu propio par único de claves pública/secreta:\
+\n   pgp -kg\
+\nAñadir contenido de fichero de clave al anillo de claves públicas o secretas:\
+\n   pgp -ka fdclaves [anillo]\
+\nSuprimir una clave o identificador de usuario de un anillo de claves:\
+\n   pgp -kr identificador [anillo]\
+\nModificar tu identificador de usuario o tu contraseña:\
+\n   pgp -ke tu_identificador [anillo]\
+\nExtraer (copiar) una clave del anillo de claves públicas o secretas:\
+\n   pgp -kx identificador fdclaves [anillo]\
+\nVisualizar el contenido del anillo de claves públicas:\
+\n   pgp -kv[v] [identificador] [anillo]\
+\nComprobar las firmas del anillo de claves públicas:\
+\n   pgp -kc [identificador] [anillo]\
+\nFirmar la clave pública de alguien en el anillo de claves correspondiente:\
+\n   pgp -ks otro_identificador [-u tu_identificador] [anillo]\
+\nSuprimir ciertas firmas de un idusuario en un anillo:\
+\n   pgp -krs identificador [anillo]\
+\n"
+fr: "Fonctions de gestion des clés:\
+\nPour générer votre propre paire de clés publique/secrète:\
+\n   pgp -kg\
+\nPour ajouter le contenu d'un fichier de clés à votre fichier de clés\
+\n   public ou secret:\
+\n   pgp -ka fichier_de_clés  [votre_fichier_de_clés]\
+\nPour retirer une clé de votre fichier de clés public ou secret:\
+\n   pgp -kr nom_d_utilisateur [fichier_de_clés]\
+\nPour extraire (copier) une clé de votre fichier de clés public ou secret:\
+\n   pgp -kx nom_d_utilisateur fichier_de_la_clé [fichier_de_clés]\
+\nPour visualiser le contenu de votre fichier de clés:\
+\n   pgp -kv[v]  [nom_d_utilisateur]  [ficher_de_clés]\
+\nPour vérifier les signatures sur votre fichier de clés publiques:\
+\n   pgp -kc [nom_d_utilisateur]  [ficher_de_clés]\
+\nPour signer la clé publique de quelqu'un d'autre sur votre fichier de\
+\n   clés publiques:\
+\n   pgp -ks  son_nom  votre_nom  [fichier_de_clés]\
+\nPour enlever certaines signatures d'une personne sur un fichier de clés:\
+\n   pgp -krs  son_nom  [fichier_de_clés]\n"
+muttde: "\nSchlüssel-Verwaltung:\
+\nErzeugen eines eigenen, eindeutigen Schlüssel-Paares (privat/öffentlich):\
+\n   pgp -kg\
+\nHinzufügen von Schlüsseln zum privaten oder öffentlichen Schlüsselbund:\
+\n   pgp -ka {Datei mit Schlüsseln} [{Schlüsselbund}]\
+\nLöschen eines Schlüssels oder einer Benutzer-ID aus einem Schlüsselbund:\
+\n   pgp -kr {Benutzer-ID} [{Schlüsselbund}]\
+\nÄndern Deiner Benutzer-ID oder Deines Mantras:\
+\n   pgp -ke {Deine Benutzer-ID} [{Schlüsselbund}]\
+\nHerauskopieren eines Schlüssels aus einem Schlüsselbund:\
+\n   pgp -kx {Benutzer-ID} {Ausgabe-Datei} [{Schlüsselbund}]\
+\nAnzeigen des Inhaltes des öffentlichen Schlüsselbunds:\
+\n   pgp -kv[v] [{Benutzer-ID}] [{Schlüsselbund}]\
+\nÜberprüfen der Beglaubigungen im öffentlichen Schlüsselbund:\
+\n   pgp -kc [{Benutzer-ID}] [{Schlüsselbund}]\
+\nBeglaubigen eines öffentlichen Schlüssels eines anderen Benutzers:\
+\n   pgp -ks {seine Benutzer-ID} [-u {Deine Benutzer-ID}] [{Schlüsselbund}]\
+\nEntfernen ausgewählter Beglaubigungen von einem Schlüssel:\
+\n   pgp -krs {Benutzer-ID} [{Schlüsselbund}]\n"
+
+"\nIncluding \"%s\"...\n"
+de: "\nEmpfängerliste aus der Datei '%s' wird eingelesen...\n"
+es: "\nIncluyendo \"%s\"...\n"
+fr: "\nIncluant '%s'...\n"
+muttde: "\nEmpfängerliste aus der Datei '%s' wird eingelesen...\n"
+
+"\nWe need to generate %u random bits.  This is done by measuring the\
+\ntime intervals between your keystrokes.  Please enter some random text\
+\non your keyboard until you hear the beep:\n"
+de: "\nWir müssen %u zufällige Bits erzeugen. Dies wird durch Messung\
+\nder Abstände zwischen Deinen Anschlägen bewerkstelligt. Bitte gib\
+\nirgendwelchen beliebigen Text auf der Tastatur ein, bis es piepst:\n"
+es: "\nNecesitamos generar %d bits aleatorios. Se hace midiendo los\
+\nintervalos de tiempo entre pulsaciones de tecla. Escribe\
+\ntexto al azar en el teclado hasta que oigas un pitido:\n"
+fr: "\nNous devons générer %d bits aléatoires. Ceci est fait en mesurant\
+\nl'intervalle de temps entre les frappes de touches. Veuillez tapper du\
+\ntexte aléatoire sur votre clavier jusqu'à ce que vous entendiez le\
+\nsignal sonore:\n"
+muttde: "\nWir müssen %u zufällige Bits erzeugen. Dies wird durch Messung\
+\nder Abstände zwischen Deinen Anschlägen bewerkstelligt. Bitte gib\
+\nirgendwelchen beliebigen Text auf der Tastatur ein, bis es piepst:\n"
+
+"\007 -Enough, thank you.\n"
+de: "\007 -Danke, das genügt!\n"
+es: "\007 -Es suficiente.\n"
+fr: "\007 -Assez, merci.\n"
+mutt: " -Enough, thank you.\n"
+muttde: " -Danke, das genügt!\n"
+
+"\
+Uses the RSAREF(tm) Toolkit, which is copyright RSA Data Security, Inc.\n\
+Distributed by the Massachusetts Institute of Technology.\n"
+de: "Benutzt das RSAREF(tm) Toolkit, (c) RSA Data Security, Inc.\n\
+Ausgeliefert vom Massachusetts Institute of Technology.\n"
+es: "\
+Utiliza RSAREF(tm), copyright de RSA Data Security, Inc.\n\
+Distribuido por el Massachusetts Institute of Technology.\n"
+fr: "Ce logiciel utilise RSAREF(tm) Toolkit, Copyright RSA Data Security, Inc\n\
+Distribué par le Massachusetts Institute of Technology.\n"
+muttde: "Benutzt das RSAREF(tm) Toolkit, (c) RSA Data Security, Inc.\n\
+Ausgeliefert vom Massachusetts Institute of Technology.\n"
+
+"Out of memory"
+de: "Zu wenig Speicher!"
+es: "No queda memoria"
+fr: "Mémoire insufisante"
+muttde: "Zu wenig Speicher!"
+
+"\nOut of memory\n"
+de: "\nZu wenig Speicher!\n"
+es: "\nNo queda memoria\n"
+fr: "\nMémoire insuffisante\n"
+muttde: "\nZu wenig Speicher!\n"
+
+"\n\007Out of memory.\n"
+de: "\n\007Zu wenig Speicher!\n"
+es: "\n\007No queda memoria.\n"
+fr: "\n\007Mémoire insuffisante.\n"
+mutt: "\nOut of memory.\n"
+muttde: "\nZu wenig Speicher!\n"
+
+"\nCompression/decompression error\n"
+de: "\nFEHLER beim Packen/Entpacken!\n"
+es: "\nError en compresión/descompresión\n"
+fr: "\nErreur de compression/decompression\n"
+muttde: "\nFEHLER beim Packen/Entpacken!\n"
+
+"\nERROR: unexpected end of compressed data input.\n"
+de: "\nFEHLER: vorzeitiges Ende der ZIP-gepackten Eingangsdaten.\n"
+es: "\nERROR: los datos comprimidos terminan antes de tiempo.\n"
+fr: "\nERREUR: fin innopinée des données d'entrée compressées.\n"
+muttde: "\nFEHLER: vorzeitiges Ende der ZIP-gepackten Eingangsdaten.\n"
+
+# The following 4 translations MUST be exactly 3 characters long!
+
+"pub"
+de: "öff"
+muttde: "öff"
+
+"sec"
+de: "prv"
+muttde: "prv"
+
+"sig"
+de: "Unt"
+es: "fir"
+muttde: "Unt"
+
+"com"
+de: "Wid"
+muttde: "Wid"
+
+# IN-CH extentions. <lutz@iks-jena.de>
+
+# translation must not change the string length
+"rev"
+de: "zur"
+muttde: "zur"
+
+# translation must not change the string length
+"           Expire: %s%s"
+de: "          Verfall: %s%s"
+muttde: "          Verfall: %s%s"
+
+# translation must not change the string length
+"                    no expire "
+de: "                 kein Verfall "
+muttde: "                 kein Verfall "
+
+"ENCRyption only\n"
+de: "*** nur Verschlüsselung! ***\n"
+muttde: "*** nur Verschlüsselung! ***\n"
+
+"Key ID %s is SIGN only. Decryption avoided.\n"
+de: "Schlüssel ID %s ist nur zum Unterschreiben. Entschlüsselung verhindert.\n"
+muttde: "Schlüssel ID %s ist nur zum Unterschreiben. Entschlüsselung verhindert.\n"
+
+"Key ID %s is not valid.\n"
+de: "Schlüssel ID %s ist ungültig.\n"
+muttde: "Schlüssel ID %s ist ungültig.\n"
+
+"Key is an ENCRyption only key.\n"
+de: "Der Schlüssel ist nur zur Verschlüsselung.\n"
+muttde: "Der Schlüssel ist nur zur Verschlüsselung.\n"
+
+"Key is a SIGNature only key.\n"
+de: "Der Schlüssel ist nur für Unterschriften.\n"
+muttde: "Der Schlüssel ist nur für Unterschriften.\n"
+
+"Key is out of use.\n"
+de: "Der Schlüssel ist nicht mehr in Benutzung.\n"
+muttde: "Der Schlüssel ist nicht mehr in Benutzung.\n"
+
+"SIGNature only\n"
+de: "*** nur Unterschriften! ***\n"
+muttde: "*** nur Unterschriften! ***\n"
+
+"    Revoked by: "
+de: "        Zurückgezogen von: "
+muttde: "        Zurückgezogen von: "
+
+"   Low Cert by: "
+de: "Niedrige Beglaubigung von: "
+muttde: "Niedrige Beglaubigung von: "
+
+"Medium Cert by: "
+de: "Mittlere Beglaubigung von: "
+muttde: "Mittlere Beglaubigung von: "
+
+"  High Cert by: "
+de: "    Hohe Beglaubigung von: "
+muttde: "    Hohe Beglaubigung von: "
+
+"  Unknown type: "
+de: "          Unbekannter Typ: "
+muttde: "          Unbekannter Typ: "
+
+"Try to obtain the corresponding SIGN key.\n"
+de: "Es wird versucht, den zugehörigen Unterschriftsschlüssel zu verwenden.\n"
+muttde: "Es wird versucht, den zugehörigen Unterschriftsschlüssel zu verwenden.\n"
+
+"\n\007Key cert is already revoked by user '%s'.\n"
+de: "\n\007Die Unterschrift unter dem Schlüssel wurde bereits\n\
+von '%s' zurückgezogen.\n"
+mutt: "\nKey cert is already revoked by user '%s'.\n"
+muttde: "\nDie Unterschrift unter dem Schlüssel wurde bereits\n\
+von '%s' zurückgezogen.\n"
+
+"\n\007Key is not signed by user '%s'.\n"
+de: "\n\007Der Schlüssel ist nicht von '%s' unterschrieben.\n"
+mutt: "\nKey is not signed by user '%s'.\n"
+muttde: "\nDer Schlüssel ist nicht von '%s' unterschrieben.\n"
+
+"\nKey signature certificate revoked.\n"
+de: "\nDie Unterschrift unter dem Schlüssel wurde zurückgezogen.\n"
+muttde: "\nDie Unterschrift unter dem Schlüssel wurde zurückgezogen.\n"
+
+"This key is already out of use.\n"
+de: "Dieser Schlüssel ist bereits nicht mehr in Benutzung.\n"
+muttde: "Dieser Schlüssel ist bereits nicht mehr in Benutzung.\n"
+
+"\007 Key ID %s is SIGN only. (protest against decryption)\n"
+de: "\007Die Schlüssel-ID %s ist nur für Unterschriften.\n\
+Keine Entschlüsselung möglich!\n"
+mutt: " Key ID %s is SIGN only. (protest against decryption)\n"
+muttde: "Die Schlüssel-ID %s ist nur für Unterschriften.\n\
+Keine Entschlüsselung möglich!\n"
+
+"Signature was made after the key ID %s was expired.\n"
+de: "Unterschrift wurde mit dem verfallen Schlüssel ID %s erstellt.\n"
+muttde: "Unterschrift wurde mit dem verfallen Schlüssel ID %s erstellt.\n"
+
+"Signature was made before the key ID %s was valid.\n"
+de: "Unterschrift wurde mit dem noch ungültigen Schlüssel ID %s erstellt.\n"
+muttde: "Unterschrift wurde mit dem noch ungültigen Schlüssel ID %s erstellt.\n"
+
+"Signature was made using the ENCR key ID %s.\n"
+de: "Unterschrift wurde mit dem Verschlüsselungsschlüssel ID %s erstellt.\n"
+muttde: "Unterschrift wurde mit dem Verschlüsselungsschlüssel ID %s erstellt.\n"
+
+"Something goes wrong, may be an unlucky User ID?\n"
+de: "Irgendwas ist schiefgegangen. Liegt's an der NutzerID?\n"
+muttde: "Irgendwas ist schiefgegangen. Liegt's an der NutzerID?\n"
+
+"Something goes wrong, may be this userid '%s' is unlucky?\n"
+de: "Irgendwas ist schiefgegangen. Liegt's an der NutzerID '%s'?\n"
+muttde: "Irgendwas ist schiefgegangen. Liegt's an der NutzerID '%s'?\n"
+
+"The compromise certificate might not be accepted on newer versions.\n\
+Revoke anyway? (y/N)"
+de: "Das Widerrufszertifikat kann von neueren Versionen zurückgewiesen\
+werden.\nTrotzdem widerrufen? (j/N)"
+muttde: "Das Widerrufszertifikat kann von neueren Versionen zurückgewiesen\
+werden.\nTrotzdem widerrufen? (j/N)"
+
+"The key for the userid '%s' is SIGN only.\nI'll try the corresponding ENCR key.\n"
+de: "Schlüssel ID '%s' ist nur zum Unterschreiben.\n\
+Der zugehörige Verschlüsselungsschlüssel wird versucht.\n"
+muttde: "Schlüssel ID '%s' ist nur zum Unterschreiben.\n\
+Der zugehörige Verschlüsselungsschlüssel wird versucht.\n"
+
+"The key for the userid '%s' is not valid, skipped.\n"
+de: "Schlüssel ID '%s' ist ungültig.\nÜbersprungen.\n"
+muttde: "Schlüssel ID '%s' ist ungültig.\nÜbersprungen.\n"
+
+"The user ID typed in has garbled options!\n"
+de: "Die NutzerID enthält fehlerhafte Optionseinträge!\n"
+muttde: "Die NutzerID enthält fehlerhafte Optionseinträge!\n"
+
+"This key is an ENCRyption only key.\n"
+de: "Das ist ein Verschlüsselungsschlüssel.\n"
+muttde: "Das ist ein Verschlüsselungsschlüssel.\n"
+
+"This key is too old to be revoked.\n"
+de: "Der Schlüssel ist zu alt, um zurückgezogen zu werden.\n"
+muttde: "Der Schlüssel ist zu alt, um zurückgezogen zu werden.\n"
+
+"This key is too old to be signed.\n"
+de: "Der Schlüssel ist zu alt, um unterschrieben zu werden.\n"
+muttde: "Der Schlüssel ist zu alt, um unterschrieben zu werden.\n"
+
+"This key will be generated in future. *oops*\n"
+de: "Der Schlüssel wird in der Zukunft erstellt. *huch*\n"
+muttde: "Der Schlüssel wird in der Zukunft erstellt. *huch*\n"
+
+"Your key is too old to sign with.\n"
+de: "Der Schlüssel ist zu alt zum unterschreiben.\n"
+muttde: "Der Schlüssel ist zu alt zum unterschreiben.\n"
+
+"Your key will be generated in future. *oops*\n"
+de: "Dein Schlüssel wird in der Zukunft erstellt. *huch*\n"
+muttde: "Dein Schlüssel wird in der Zukunft erstellt. *huch*\n"
+
+"\007**** Signed with an ENCRyption only key ****"
+de: "\007**** Unterschr. mit einem Verschl.-Schlüssel ****"
+mutt: "**** Signed with an ENCRyption only key ****"
+muttde: "**** Unterschr. mit einem Verschl.-Schlüssel ****"
+
+"\007**** Signed with an invalid key ****"
+de: "\007**** Unterschr. mit einem ungültigen Schlüssel ****"
+mutt: "**** Signed with an invalid key ****"
+muttde: "**** Unterschr. mit einem ungültigen Schlüssel ****"
+
+"\007**** Signed with a revoked key ****"
+de: "\007**** Unterschr. mit einem zurückgez. Schlüssel ****"
+mutt: "**** Signed with a revoked key ****"
+muttde: "**** Unterschr. mit einem zurückgez. Schlüssel ****"
+
+"\n\nREAD CAREFULLY:  How did you prove the users real identity ?\n\
+       0) What? I do not understand this question.\n\
+       1) No attempt made at all to identify the user with a real name.\n\
+       2) Some casual attempt made to identify user with his name.\n\
+       3) Heavy-duty identification efforts, photo ID, direct contact...\n"
+de: "\n\nSORGFÄLTIG LESEN:  Wie hast Du die Identität des Nutzers geprüft ?\n\
+       0) Bitte? Ich verstehe die Frage nicht.\n\
+       1) Keine Überprüfung des wirklichen Namens des Nutzers.\n\
+       2) Einige Bemühungen, die Person mit diesem Namen zu identifizieren.\n\
+       3) Große Identifizierungsaufwendungen, Ausweis, direkter Kontakt...\n"
+muttde: "\n\nSORGFÄLTIG LESEN:  Wie hast Du die Identität des Nutzers geprüft ?\n\
+       0) Bitte? Ich verstehe die Frage nicht.\n\
+       1) Keine Überprüfung des wirklichen Namens des Nutzers.\n\
+       2) Einige Bemühungen, die Person mit diesem Namen zu identifizieren.\n\
+       3) Große Identifizierungsaufwendungen, Ausweis, direkter Kontakt...\n"
+$Id: language.txt,v 3.0 2002/01/24 12:11:17 roessler Exp $
diff --git a/contrib/language50.txt b/contrib/language50.txt
new file mode 100644 (file)
index 0000000..0d27721
--- /dev/null
@@ -0,0 +1,1342 @@
+#This file contains the strings used by PGP.
+
+# $Id: language50.txt,v 3.0 2002/01/24 12:11:17 roessler Exp $
+
+[DIFFERENT_EXES]
+us=\
+PGP is now invoked from different executables for different operations:\n\n\
+pgpe    Encrypt (including Encrypt/Sign)\n\
+pgps    Sign\n\
+pgpv    Verify/Decrypt\n\
+pgpk    Key management\n\
+pgpo    PGP 2.6.2 command-line simulator (not yet implemented)\n\n\
+See each application's respective man page or the general PGP documentation\n\
+for more information.\n
+
+[CREATING_OUTPUT_FILE]
+us=Creating output file %s\n
+
+#Untested
+[COPYING_KEYFILE_AND_RUNNING_PGPK]
+us=Copying key file to \"%s\", running pgpk to process it...\n\n
+mutt=
+
+#Untested
+[NEED_PASSPHRASE]
+us=You need a passphrase to encrypt the file\n
+
+[MUST_SPECIFY_A_RECIPIENT]
+us=You must specify at least one recipient for encryption!\n
+
+#Untested
+[NEED_PASSPHRASE_AGAIN]
+us=Enter same passphrase again\n
+
+#Untested
+[PASSPHRASES_DIFFERENT]
+us=Error: Passphrases were different.  Try again.\n
+
+#Untested
+[ZERO_LEN_PASSPHRASE]
+us=Encryption error\n
+
+#Untested
+[TREAT_AS_PGP]
+us=This is a PGP File.  Treat it as such? [y/N]\n
+
+#Untested
+[PRIVATE_KEY_MISSING]
+us=Cannot find a private key for signing: %s\n
+
+#Untested
+[CANNOT_CONVERT_TO_PRIVATE_KEY]
+us=Cannot convert to private key\n
+
+#Untested
+[PRIVATE_KEY_CANNOT_SIGN]
+us=Private Key cannot sign\n
+
+#Untested
+[CANNOT_UNLOCK_PRIVATE_KEY]
+us=Cannot unlock private key\n
+
+#Untested
+[NO_KEYRINGS]
+us=No keyrings to use
+
+#Untested
+[NO_ENCRYPTION_KEYS_FOUND_FOR]
+us=No encryption keys found for: %s\n
+
+#Untested
+[CANNOT_FIND_KEY]
+us=Cannot find key: %s\n
+
+#Untested
+[CANNOT_ADD_MY_KEY]
+us=Cannot add my key to set\n
+
+#Untested
+[NO_VALID_RECIPIENTS]
+us=No valid keys found for any recipients, exiting...\n
+
+#Untested
+[USING_STDIN]
+us=No files specified.  Using stdin.\n\n
+mutt=
+
+#Untested
+[CANNOT_OPEN_INPUT_FILE]
+us=Cannot open input file %s\n
+
+#Untested
+[CANNOT_SETUP_PROCESSING_PIPELINE]
+us=Cannot Setup Processing Pipeline\n
+
+#Untested
+[UNRECOGNIZED_OPTION_STRING]
+us=Unrecognized option %s\n
+
+#Untested
+[UNRECOGNIZED_OPTION_STRING_DASH]
+us=Unrecognized option -%s\n
+
+#Untested
+[UNRECOGNIZED_OPTION_CHAR]
+us=Unrecognized option -%c\n
+
+#Untested
+[ARGS_INCOMPATABLE]
+us="Cannot use -%c and -%c together\n"
+
+#Untested
+[ONLY_ONE_OUTPUT_FILE]
+us="Only one -o option allowed\n"
+
+#Untested
+[ONLY_ONE_USERNAME]
+us="Only one -u option allowed\n"
+
+#Untested
+[NO_OUTPUT_FILENAME]
+us=-o option requires an output file name argument\n
+
+[NO_RECIPIENT_SPECIFIED]
+us=-r option requires a recipient name argument\n
+
+#Untested
+[NO_USERID_SPECIFIED]
+us=-u option requires a userid argument\n
+
+#Untested, and probably going away
+[NO_PASSPHRASE_SPECIFIED_IN_BATCHMODE]
+us=-z option requires a passphrase argument\n
+
+#Untested
+[CANNOT_COMBINE_CONVENTIONAL_AND_PK]
+us=Cannot combine -c and -r arguments\n
+
+#Untested
+[PGPK_IS_SEPERATE]
+us=pgpk is a seperate program, not a symlink to pgp!\n
+
+#Untested
+[UNKNOWN_SYMLINK]
+us=Invoked with unknown symlink\n
+
+#Untested
+[PRIVATE_KEY_NEEDED_FOR_SIGNATURE]
+us=A private key is required to make a signature.\n
+
+[ENTER_Y_OR_N]
+us="Invalid response.  Please enter Y or N [default %c]: \n"
+
+#Untested
+[GENERIC_KEYRING_ERROR]
+us="Error on keyring \"%s\":  "
+
+#Untested
+[UNABLE_TO_OPEN_DEFAULT_KEYRINGS]
+us="Unable to open default keyrings:  "
+
+#Untested
+[UNABLE_TO_OPEN_KEYRING]
+us="Unable to open keyring:  "
+
+#Untested
+[KEY_CORRUPTED]
+us="Key Corrupted (%s):  "
+
+#Untested
+[NEED_SIG_FILE]
+us="File to check signature against [%s]: "
+
+#untested
+[GOOD_SIGNATURE]
+us="Good signature made %s by key:\n"
+
+#untested
+[BAD_SIGNATURE]
+us="BAD signature made %s by key:\n"
+
+#untested
+[ERROR_SIGNATURE]
+us="Error %s checking signature:  %s\n"
+
+#Untested
+[UNKNOWN_SIGNATURE]
+us="Signature by unknown keyid: "
+
+#untested
+[ENTER_PASSPHRASE]
+us="Enter pass phrase: "
+
+#Untested
+[RANDOM_BITS_FROM_DEVICE]
+us="\n\
+We need to generate %u random bits.  This is done by reading\n\
+%s.  Depending on your system, you may be able\n\
+to speed this process by typing on your keyboard and/or moving your mouse.\n"
+
+#Untested
+[RANDOM_BITS_FROM_DEVICE_OLD_KERNEL]
+us="\n\
+/dev/random detected; however, on Linux kernel versions < 1.3.33, it is not\n\
+cryptographically usable.  If you wish to use /dev/random as an entropy\n\
+source, it is recommended that you upgrade your kernel version.  If you feel\n\
+that you received this message in error, add ForceRandomDevice=1 to your\n\
+pgp.cfg file, but be warned that by doing so without know what you are\n\
+doing, you could compromise the security of your key.\n"
+
+#Untested
+[RANDOM_BITS_FROM_KEYBOARD]
+us="\n\
+We need to generate %u random bits.  This is done by measuring the\n\
+time intervals between your keystrokes.  Please enter some random text\n\
+on your keyboard until you hear the beep:\n"
+
+#Untested
+[NO_INPUT_FILE_IN_BATCHMODE]
+us="Cannot request input file in batchmode\n"
+
+#Untested
+[UNABLE_TO_OPEN_FILE]
+us="Unable to open file \"%s\"\n"
+
+#Untested
+[UNABLE_TO_CREATE_READ_MODULE]
+us="Unable to create file read module.\n"
+
+#Untested
+[UNKNOWN_FILE_TYPE]
+us="Unknown file type (clearsigned?).  Assuming text\n"
+
+#Untested
+[OPENING_FILE_WITH_TYPE]
+us="Opening file \"%s\" type %s.\n"
+mutt=
+
+#Untested
+[ERROR_CLOSING_OLD_FILE]
+us="Error closing old file: %d\n"
+
+#Untested
+[NEED_PASSPHRASE_TO_DECRYPT_KEY]
+us="Need a pass phrase to decrypt private key:\n"
+
+#Untested
+[GOOD_PASSPHRASE]
+us="Pass phrase is good.\n"
+
+#Untested
+[BAD_PASSPHRASE]
+us="Error: Bad pass phrase.\n\n"
+
+#Untested
+[PASSPHRASE_INCORRECT]
+us="Password Incorrect."
+
+#Untested
+[TRY_AGAIN]
+us="  Try Again."
+
+#Untested
+[UNKNOWN_ESK]
+us="Unknown ESK type: %d\n"
+
+#Untested
+[CANNOT_DECRYPT]
+us="Cannot decrypt message.  It can only be decrypted by:\n"
+
+#Untested
+[A_PASSPHRASE]
+us="  A Pass Phrase\n"
+
+#Untested
+[KEY_ID]
+us="  Key ID "
+
+#Untested
+[FORCE_OVERWRITE]
+us="File \"%s\" already exists. Overwrite? [y/N] "
+
+#Untested
+[UNABLE_TO_OVERWRITE_FILE]
+us="Unable to overwrite file \"%s\"\n"
+
+#Untested
+[RANDOM_DEVICE_NOT_DEFAULT]
+us="Warning!  Random device is something other than %s!\n\
+This MAY be a security hole.\n"
+
+#Untested
+[RANDOM_DEVICE_WRITABLE]
+us="Warning!  %s is writable by users other than root!\n\
+This is probably OK, but you should have your sysadmin fix it.\n\
+Proceeding.\n"
+
+#Untested
+[RANDOM_DEVICE_UNREADABLE]
+us="\
+Warning!  Random device %s found, but you can't read it!\n"
+
+#Untested
+[BITS_AND_KEYID]
+us="%6u bits, Key ID "
+
+#Untested
+[KEY_NOT_FOUND]
+us=Key not found: \"%s\"\n
+
+#Untested
+[PGPERR_TROUBLE_BADTRUST_LONG]
+us="Trust packet too long: %lu bytes long"
+
+#Untested
+[PGPERR_TROUBLE_UNKPKTBYTE_LONG]
+us="Unknown packet byte: %02X"
+
+#Untested
+[PGPERR_TROUBLE_KEY2BIG_LONG]
+us="Key grossly oversized: %lu bytes long"
+
+#Untested
+[PGPERR_TROUBLE_NAME2BIG_LONG]
+us="User ID too long: %lu bytes long"
+
+#Untested
+[PGPERR_TROUBLE_SIG2BIG_LONG]
+us="Signature grossly oversized: %lu bytes long"
+
+#Untested
+[PGPERR_TROUBLE_DUPKEYID_LONG]
+us="Duplicate keyID found.  Two keys have the same keyID,\n\
+but they are different.  This is highly suspicious.  The first key
+is:"
+
+#Untested
+[PGPERR_TROUBLE_DUPKEY_LONG]:
+us="A key was found twice in one keyring file.  It is a duplicate of:\n"
+
+#Untested
+[PGPERR_TROUBLE_DUPNAME_LONG]
+us="A name was found twice in one keyring file.  It is a duplicate of:\n"
+
+#Untested
+[PGPERR_TROUBLE_BAREKEY_LONG]
+us="A key was found twice in one keyring file.  It is a duplicate of:  "
+
+#Untested
+[PGPERR_TROUBLE_VERSION_BUG_CUR_LONG]
+us="This private key's version number appears to be incorrect.\n\
+PGP version 2.6 had a bug wherein it would improperly change the\n\
+version number of a private key generated by older versions of PGP\n\
+when it was edited.  The private key in this key file has a version\n\
+byte that is different from a copy in another key file, and appears\n\
+to be improper.  PGP will fix this by changing the version byte in\n\
+the private key to the previous value.  The key with the problem
+is:\n"
+
+#Untested
+[PGPERR_TROUBLE_VERSION_BUG_PREV_LONG]
+us="A previously seen private key's version number appears to be\n\
+incorrect.  PGP version 2.6 had a bug wherein it would improperly\n\
+change the version byte of a private key generated by older versions\n\
+of PGP when it was edited.  The public key in this key file has\n\
+a version byte that is different from a private key elsewhere,\n\
+which appears to be improper.  PGP will fix this by changing the\n\
+version byte in the private key to the previous value.  The key\n\
+with the problem is:\n"
+
+#Untested
+[PGPERR_KEYIO_READING_LONG]
+us="I/O error reading file: %s"
+
+#Untested
+[PGPERR_KEYIO_FTELL_LONG]
+us="I/O error during call to ftell(): %s"
+
+#Untested
+[PGPERR_PRECEDING_ASSOCIATED_WITH]
+us="The preceeding error was associated with:  "
+
+#Untested
+[NOT_PGP_KEYFILE]
+us="File is not a PGP key file.  Aborting.\n"
+
+#Untested
+[FOLLOWING_KEYRING_PROBLEMS]
+us="The following problems were encountered while reading the keyring:\n"
+
+#Untested
+[OFFSET_DESCRIPTION]
+us="Offset   Description\n"
+
+#Untested
+[UNKNOWN_SIGNATOR]
+us="   (Unknown signator, can't be checked)\n"
+
+#Untested
+[OPEN_PAREN_KEYID]
+us="         (KeyID:"
+
+#Untested
+[REVOKED]
+us="*REVOKED*"
+
+#Untested
+[ABOVE_KEY_REVOKED]
+us="\
+WARNING: The above key has been revoked by its owner,\n\
+possibly because the private key was compromised.\n\
+You cannot use a revoked key for encryption.\n"
+
+#Untested
+[ABOVE_KEY_DISABLED]
+us="\
+WARNING:  The above key has been disabled on your keyring.  If you\n\
+wish to use it, use \"pgpk -d\" to reenable it.\n"
+
+[ABOVE_KEY_EXPIRED]
+us="\
+WARNING:  The above key is not valid for use after %s.\n"
+
+#Untested
+[STILL_USE_EXPIRED_KEY]
+us="\
+WARNING:  This key is not valid for use after %s.\n\
+Do you still want to use it? [y/N] "
+
+#Untested
+[PGP_NAMETRUST_UNKNOWN]
+us="\
+WARNING: Because the following name has not been certified\n\
+by a trusted signature, it is not known with a high\n\
+degree of confidence that the above key belongs to:\n"
+
+#Untested
+[PGP_NAMETRUST_UNTRUSTED]
+us="WARNING: The above key is not trusted to belong to:\n"
+
+#Untested
+[PGP_NAMETRUST_MARGINAL]
+us="\
+WARNING: Because the following name is not certified with sufficient\n\
+trusted signatures, it is not known with high confidence that the\n\
+above key actually belongs to:\n"
+
+#Untested
+[PGP_NEWTRUST_NOT_TRUSTED]
+us="\n\
+WARNING: The above key is not trusted to belong to:\n"
+
+#Untested
+[PGP_NEWTRUST_PARTIAL_TRUST]
+us="\n\
+WARNING: Because the following name is not certified with sufficient\n\
+trusted signatures, there is an estimated 1/%-ld probability that\n\
+the above key may not belong to:\n"
+
+#Untested
+[PGP_NEWTRUST_NOT_TRUSTED_SIGNING_KET]
+us="\n\
+WARNING: The signing key is not trusted to belong to:\n"
+
+#Untested
+[PREVIOUSLY_APPROVED_KEY]
+us="\nBut you previously approved using the key with this name.\n"
+
+#Untested
+[DO_YOU_WISH_TO_USE_UNTRUSTED_KEY]
+us="\nDo you want to use the key with this name? [y/N] "
+
+#Untested
+[DONT_TRUST_SIGS_FROM_REVOKED_KEYS]
+us="\
+WARNING: The signing key has been revoked by its owner,\n\
+possibly because the private key was compromised.\n\
+A signature made by this key should not be trusted.\n"
+
+#Untested
+[YOU_HAVE_DISABLED_SIGNING_KEY]
+us="WARNING: You have disabled the signing key\n"
+
+#Untested
+[KEY_HAS_EXPIRED]
+us="WARNING: This key is not valid for use after %s.\n"
+
+#Untested
+[PGP_NAMETRUST_UNTRUSTED_SIGNING_KEY]
+us="\nWARNING: The signing key is not trusted to belong to:\n"
+
+[MESSAGE_IS_ENCRYPTED]
+us="Message is encrypted.\n"
+
+[GETTING_KEY_FOR]
+us="Getting key for %s.\n"
+
+[LOOKING_UP_HOST]
+us="Looking up host %s\n"
+
+[ESTABLISHING_CONNECTION]
+us="Establishing connection\n"
+
+[SENDING_REQUEST]
+us="Sending request\n"
+
+[RECEIVING_DATA]
+us="Receiving data\n"
+
+[CLEANING_UP]
+us="Cleaning up\n"
+
+[COMPLETE]
+us="Complete.\n"
+
+[ONE_KEY_RECEIVED]
+us="One key received.  Adding it to your keyring...\n"
+
+[MANY_KEYS_RECEIVED]
+us="%li keys received.  Adding them to your keyring...\n"
+
+[UNKNOWN_PROTOCOL]
+us="Unknown protocol %s.\n"
+
+[SENDING_KEY]
+us="Sending key                               \r"
+
+[RECEIVING_RESPONSE]
+us="Receiving response                       \r"
+
+#Untested
+[NO_KEYFILE_SPECIFIED]
+us="-a argument requires a key file or URL to add to your keyring."
+
+#Untested
+[UNABLE_TO_IMPORT_KEYFILE]
+us="Unable to import keyfile \"%s\".\n"
+
+#Untested
+[ADDING_KEYS]
+us="Adding keys:\n\n"
+
+#Untested
+[UNABLE_TO_CREATE_KEYLIST]
+us="Unable to create keylist\n"
+
+#Untested
+[NO_KEYS_TO_ADD]
+us="No keys to add                           \n"
+
+#Untested
+[KEYS_ADDED_SUCCESSFULLY]
+us="Keys added successfully.\n"
+
+#Untested
+[INVALID_SELECTION]
+us="Invalid Selection.  Please try again.\n"
+
+[TOO_MANY_MATCHES]
+us="Too many matches; aborting!\n"
+
+[CHOOSE_ONE_ABOVE]
+us="Choose one of the above:  "
+
+[PLEASE_SELECT_A_USER_ID]
+us="Please select a user ID %s:\n"
+
+[PLEASE_SELECT_A_USER_ID_WITH_SIG]
+us="Please select a user ID with a signature %s:\n"
+
+[PLEASE_SELECT_A_KEY_WITH_USERID]
+us="Please select a key with a userid %s:"
+
+[PLEASE_SELECT_A_KEY_WITH_SIG]
+us="Please select a key with a signature %s:"
+
+[NO_USER_IDS_SELECTED]
+us="No user IDs selected %s.\n"
+
+[PLEASE_SELECT_A_SIGNATURE]
+us="Please select a signature %s:"
+
+[NO_SIGNATURES_SELECTED]
+us="No signatures selected %s.\n"
+
+[NO_KEYS_SELECTED]
+us="No keys selected %s.\n"
+
+[A_USERID_IS_REQUIRED]
+us="A user ID is required to select the key you want %s.\n\
+Enter the key's user ID: "
+
+[UNABLE_TO_ORDER_KEYSET]
+us="Unable to order keyset\n"
+
+[PLEASE_SELECT_A_KEY]
+us="Please select a key %s:"
+
+[UNABLE_TO_CREATE_ITER]
+us="Unable to create key iterator\n"
+
+[NO_HTTP_SEND]
+us="HTTP cannot be used as a sending protocol at this time.\n"
+
+[UNKNOWN_PROTOCOL]
+us="Unknown protocol %s.\n"
+
+[NO_KEYS_SELECTED_FOR_EXTRACTION]
+us="No keys were selected for extraction.\n"
+
+[ENABLE_THIS_KEY]
+us="\nEnable this key? [y/N] "
+
+[DISABLE_THIS_KEY]
+us="\nDisable this key? [y/N] "
+
+[KEY_ENABLED]
+us="\nKey enabled.\n"
+
+[KEY_DISABLED]
+us="\nKey disabled.\n"
+
+[CANNOT_TRUST_INVALID_KEYS]
+us="This key is not valid, and cannot be assigned trust\n"
+
+[DO_YOU_WISH_TO_CHANGE_INTRODUCER_RELIABITY]
+us="Do you want to change your estimate of this key owner's reliability\n\
+as an introducer of other keys [y/N]? "
+
+[NO_CHANGES_MADE]
+us="No changes made.\n"
+
+[DETERMINE_IN_YOUR_MIND]
+us="\n"\
+"Make a determination in your own mind whether this key actually\n"\
+"belongs to the person whom you think it belongs to, based on available\n"\
+"evidence.  If you think it does, then based on your estimate of\n"\
+"that person's integrity and competence in key management, answer\n"\
+"the following question:\n"
+
+[WOULD_YOU_TRUST_THIS_KEY_AND_OWNER]
+us="\nWould you trust this key owner to act as an introducer and\n\
+certify other people's public keys to you?\n\
+(1=I don't know. 2=No. 3=Usually. 4=Yes, always? "
+
+[UNRECOGNIZED_RESPONSE]
+us="Unrecognized response.\n"
+
+[UNABLE_TO_SET_TRUST]
+us="Unable to set trust\n"
+
+[DESCRIBE_CONFIDENCE_AS_INTRODUCER]
+us="\nDescribe the confidence you have in this person as an introducer.\n\
+What are the odds that this key owner is going to be wrong about\n\
+a key which she has signed as an introducer?\n"
+
+[CURRENTLY_INFINITE_TRUST]
+us="(Currently she is listed as having essentially zero chance\
+ of being wrong.)\n"
+
+[CURRENTLY_ZERO_TRUST]
+us="(Currently he is listed as not having any confidence as an\
+ introducer.)\n"
+
+[CURRENTLY_HAS_PERCENT_TRUST_START]
+us="(Currently she is listed as having a one in "
+
+[CURRENTLY_HAS_PERCENT_TRUST_END]
+us=" chance of being wrong.)\n"
+
+[ENTER_A_TRUST_RANGE]
+us="Enter a number from 1 to 2 million"
+
+[OR_HIT_RETURN_TO_LEAVE_UNCHANGED]
+us=", or hit return to leave unchanged."
+
+[WILL_BE_WRONG_TIME_TIME_IN]
+us="\nShe will be wrong one time in: "
+
+[DO_YOU_WANT_THIS_KEY_AXIOMATIC]
+us="\nDo you want to set this key as axiomatic [y/N]? "
+
+[PUBLIC_KEYRING_UPDATED]
+us="Public keyring updated.\n"
+
+[NEED_OLD_PASSPHRASE]
+us="Need old passphrase. "
+
+[NEED_NEW_PASSPHRASE]
+us="Need new passphrase. "
+
+[ENTER_IT_A_SECOND_TIME]
+us="Enter it a second time. "
+
+[PASSPHRASES_ARE_DIFFERENT]
+us="Passphrases are different\n"
+
+[CHANGING_MASTER_KEY_PASSPHRASE]
+us="Changing master key passphrase...\n"
+
+[PASSPHRASE_CHANGE_FAILED_MASTER]
+us="Passphrase change failed for master key.\n"
+
+[CHANGING_SUBKEY_PASSPHRASE]
+us="Changing subkey passphrase...\n"
+
+[PASSPHRASE_CHANGE_FAILED_SUBKEY]
+us="Passphrase change failed for subkey.\n"
+
+[CONFIRM_NON_AXIOMATIC]
+us="\nDo you want to unset this key as axiomatic [y/N]? "
+
+[CONFIRM_ADD_NEW_USERID]
+us="\nDo you want to add a new user ID [y/N]? "
+
+[ENTER_NEW_USERID]
+us="Enter the new user ID: "
+
+[NO_NAME_ENTERED]
+us="No name entered.\n"
+
+[UNABLE_TO_ADD_NEW_USERID]
+us="Unable to add new User ID (%d)\n"
+
+[CONFIRM_CHANGE_PASSPHRASE]
+us="\nDo you want to change your pass phrase (y/N)? "
+
+[CHANGE_PASSPHRASE_FAILED]
+us="Change passphrase failed (%d)\n"
+
+[CONFIRM_SET_DEFAULT_KEY]
+us="\nDo want to set this as your default key [y/N]? "
+
+[KEYRINGS_UPDATED]
+us="Keyrings updated.\n"
+
+[TO_BE_REMOVED_FRAGMENT]
+us="to be removed"
+
+[SIGNATURE_FRAGMENT]
+us="signature"
+
+[USERID_FRAGMENT]
+us="user ID"
+
+[KEY_FRAGMENT]
+us="key"
+
+[SELECTED_KEY_HAS_ONLY_ONE_USERID"]
+us="Selected key has only one user ID; can't be selected %s\n"
+
+[FOLLOWING_OBJECT_HAS_BEEN_SELECTED]
+us="\nThe following %s has been selected %s:\n"
+
+[UNABLE_TO_REMOVE_OBJECT]
+us="Unable to remove object\n"
+
+[TO_BE_SIGNED_FRAGMENT]
+us="to be signed"
+
+[VALIDITY_CERTIFICATION_WARNING]
+us="\n\n\
+READ CAREFULLY:  Based on your own direct first-hand knowledge, are\n\
+you absolutely certain that you are prepared to solemnly certify that\n\
+the above public key actually belongs to the user specified by the\n\
+above user ID [y/N]? "
+
+[KEY_SIGNING_CANCELED]
+us="Key sign operation cancelled.\n"
+
+[KEY_SELECTED_FOR_SIGNING_IS]
+us="Key selected for signing is:\n"
+
+[KEY_SIGN_OPERATION_FAILED]
+us="Key sign operation failed\n"
+
+[KEY_SIG_CERT_ADDED]
+us="Key signature certificate added.\n"
+
+[TO_BE_REVOKED_FRAGMENT]
+us="to be revoked"
+
+[YOU_DONT_HAVE_THE_PRIVATE_KEY]
+us="You don't have the private key corresponding to that key\n"
+
+[SIG_ALREADY_REVOKED]
+us="That signature has already been revoked.\n\
+Are you sure you want to add another revocation certificate [y/N]? "
+
+[SIG_REVOCATION_CANCELLED]
+us="Signature revocation cancelled.\n"
+
+[CONFIRM_REVOKE_KEY]
+us="Do you want to permanently revoke your public key\n\
+by issuing a secret key compromise certificate on this key [y/N]? "
+
+[CONFIRM_REVOKE_SIG]
+us="Do you want to revoke this signature [y/N]? "
+
+[REVOKE_CANCELLED]
+us="Revoke cancelled.\n"
+
+[UNABLE_TO_GENERATE_REVOCATION_SIGNATURE]
+us="Unable to generate revocation signature\n"
+
+[KEY_REVOCATION_CERT_ADDED]
+us="Key revocation certificate added.\n"
+
+[SELECT_SIGNING_KEY]
+us="Please select a key to sign with:"
+
+[UNABLE_TO_OPEN_KEYRING]
+us="Unable to open keyring\n"
+
+[PGPINITAPP_FAILED]
+us="pgpInitApp failed\n"
+
+[KEY_IS_ALREADY_REVOKED]
+us="That key has already been revoked\n"
+
+[USE_FORCE_TO_ALLOW_OVERWRITING]
+us="In batchmode, use +force to allow overwriting of output files\n"
+
+[INCONSISTENT_RECIPIENT_SET]
+us="No algorithm available that all keys support.\n"
+
+[UNKNOWN_ERROR]
+us="Unknown error code %i!\n"
+
+[VERIFY_REMOVE_KEY_PUBLIC_PRIVATE]
+us="\nDo you wish to remove this key from your public and private \
+keyrings?\n[y/N]? "
+
+[UNABLE_TO_ITERATE_KEY]
+us="Unable to iterate key!\n";
+
+[CANCELED]
+us="Canceled.\n"
+
+[REMOVED]
+us="Removed.\n"
+
+[NEED_FILE_TO_SAVE]
+us="Save file as [%s] "
+
+[PGP_NEWTRUST_NOT_TRUSTED_SIGNING_KEY]
+us="WARNING: The signing key is not trusted to belong to:\n"
+
+[TO_DISABLE_OR_ENABLE]
+us="to disable or enable"
+
+[TO_EDIT]
+us="to edit"
+
+[SELECTED_KEY_HAS_ONLY_ONE_USERID]
+us="Selected key has only one user ID, can't be selected %s\n"
+
+[NO_DEFAULT_PRIVATE_KEY]
+us="No default private key\n"
+
+[MULTIPLE_RECIPIENTS_MATCHED]
+us="WARNING:  %i matches were found for recipient %s.\n\
+This may not be what you intended.\n"
+
+[ENOUGH_THANK_YOU]
+us="\a -Enough, thank you.\n"
+
+[SEEDING_RANDPOOL_FROM_DEVICE]
+us="Seeding entropy pool with up to %u bits from %s...\n"
+
+[COMPLETE_READ_NUM_BITS]
+us="Complete.  Read %u bits.\n"
+
+[RSA_AND_DH_RECIPS]
+us="WARNING:  You are encrypting to both RSA and Diffie-Hellman keys.\n\
+If the RSA user is still using PGP version 2.6.3 or earlier; 4.0; or 4.5,\n\
+she will not be able to decrypt this message.\n"
+
+[ONLY_ONE_USER_ALLOWED]
+us=Specified operation may only be performed on one argument per execution.\n
+
+[CANNOT_DISABLE_AXIOMATIC_KEYS]
+us=You cannot disable an axiomatic key.  Use pgpk -e to change your\n\
+trust of this key, first.\n
+
+[RETRIEVING_URL]
+us="Retreiving %s:/%s:%i%s\n"
+
+[ADD_THESE_KEYS]
+us="\nAdd these keys to your keyring? [Y/n] "
+
+[ABORTED]
+us="\nAborted.\n"
+
+[WARNING_NO_MRK]
+us="A requested Message Recovery Key (MRK) for this key was not\
+found.\n"
+
+[MRK_FOUND]
+us="Message Recovery Key (MRK) found.  Will also encrypt this message\n\
+to Key ID %s.\n"
+
+#Everything from here down is automatically generated.
+
+[PGPERR_OK]
+us="No errors\n"
+
+[PGPERR_GENERIC]
+us="Generic error (should be changed)\n"
+
+[PGPERR_NOMEM]
+us="Out of Memory\n"
+
+[PGPERR_BADPARAM]
+us="Invalid Parameter\n"
+
+[PGPERR_NO_FILE]
+us="Cannot open file\n"
+
+[PGPERR_NO_KEYBITS]
+us="Internal keyring bits exhausted\n"
+
+[PGPERR_BAD_HASHNUM]
+us="Unknown hash number\n"
+
+[PGPERR_BAD_CIPHERNUM]
+us="Unknown cipher number\n"
+
+[PGPERR_BAD_KEYLEN]
+us="Illegal key length for cipher\n"
+
+[PGPERR_SIZEADVISE]
+us="SizeAdvise promise not kept\n"
+
+[PGPERR_CONFIG]
+us="Error parsing configuration\n"
+
+[PGPERR_CONFIG_BADFUNC]
+us="Invalid configuration function\n"
+
+[PGPERR_CONFIG_BADOPT]
+us="Unknown configuration option\n"
+
+[PGPERR_STRING_NOT_FOUND]
+us="Requested string not found\n"
+
+[PGPERR_STRING_NOT_IN_LANGUAGE]
+us="Requested string not in language\n"
+
+[PGPERR_KEY_ISLOCKED]
+us="Key requires passphrase to unlock\n"
+
+[PGPERR_KEY_UNUNLOCKABLE]
+us="Key requires passphrase each time\n"
+
+[PGPERR_SIG_ERROR]
+us="Error while processing signature\n"
+
+[PGPERR_ADDSIG_ERROR]
+us="Cannot add signature\n"
+
+[PGPERR_CANNOT_DECRYPT]
+us="Cannot decrypt message\n"
+
+[PGPERR_ADDESK_ERROR]
+us="Cannot add encrypted session key\n"
+
+[PGPERR_UNK_STRING2KEY]
+us="Don't know how to convert pass\n"
+
+[PGPERR_BAD_STRING2KEY]
+us="Invalid conversion from pass\n"
+
+[PGPERR_ESK_BADTYPE]
+us="Unknown encrypted session key type\n"
+
+[PGPERR_ESK_TOOSHORT]
+us="Encrypted session key too short\n"
+
+[PGPERR_ESK_TOOLONG]
+us="Encrypted session key too long\n"
+
+[PGPERR_ESK_BADVERSION]
+us="Encrypted session key version\n"
+
+[PGPERR_ESK_BADALGORITHM]
+us="Encrypted session key algorithm\n"
+
+[PGPERR_ESK_BITSWRONG]
+us="Wrong number of bits in ESK\n"
+
+[PGPERR_ESK_NOKEY]
+us="Can't find key to decrypt session key\n"
+
+[PGPERR_ESK_NODECRYPT]
+us="Can't decrypt this session key\n"
+
+[PGPERR_ESK_BADPASS]
+us="Passphrase incorrect\n"
+
+[PGPERR_SIG_BADTYPE]
+us="Unknown signature type\n"
+
+[PGPERR_SIG_TOOSHORT]
+us="Signature too short\n"
+
+[PGPERR_SIG_TOOLONG]
+us="Signature too long\n"
+
+[PGPERR_SIG_BADVERSION]
+us="Signature version unknown\n"
+
+[PGPERR_SIG_BADALGORITHM]
+us="Signature algorithm unknown\n"
+
+[PGPERR_SIG_BITSWRONG]
+us="Wrong number of bits in signature\n"
+
+[PGPERR_SIG_NOKEY]
+us="Can't find necessary key to check sig\n"
+
+[PGPERR_SIG_BADEXTRA]
+us="Invalid Extra Data for Signature\n"
+
+[PGPERR_NO_PUBKEY]
+us="No public key found\n"
+
+[PGPERR_NO_SECKEY]
+us="No secret key found\n"
+
+[PGPERR_UNKNOWN_KEYID]
+us="No matching keyid found\n"
+
+[PGPERR_NO_RECOVERYKEY]
+us="Requested message recovery key\n"
+
+[PGPERR_COMMIT_INVALID]
+us="Invalid commit response\n"
+
+[PGPERR_CANNOT_HASH]
+us="Cannot hash message\n"
+
+[PGPERR_UNBALANCED_SCOPE]
+us="Unbalanced scope\n"
+
+[PGPERR_WRONG_SCOPE]
+us="Data sent in wrong scope\n"
+
+[PGPERR_UI_INVALID]
+us="Invalid UI Callback Object\n"
+
+[PGPERR_CB_INVALID]
+us="Invalid Parser Callback\n"
+
+[PGPERR_INTERRUPTED]
+us="Interrupted encrypt/decrypt\n"
+
+[PGPERR_PUBKEY_TOOSMALL]
+us="Public Key too small for data\n"
+
+[PGPERR_PUBKEY_TOOBIG]
+us="Public key is too big for this version\n"
+
+[PGPERR_PUBKEY_UNIMP]
+us="Unimplemented public key operation\n"
+
+[PGPERR_RSA_CORRUPT]
+us="Corrupt data decrypting RSA block\n"
+
+[PGPERR_PK_CORRUPT]
+us="Corrupt data decrypting public\n"
+
+[PGPERR_CMD_TOOBIG]
+us="Command to Buffer too big\n"
+
+[PGPERR_FIFO_READ]
+us="Incomplete read from Fifo\n"
+
+[PGPERR_VRFYSIG_WRITE]
+us="Data illegally written into\n"
+
+[PGPERR_VRFYSIG_BADANN]
+us="Invalid annotation to signature\n"
+
+[PGPERR_ADDHDR_FLUSH]
+us="Cannot flush buffer until size\n"
+
+[PGPERR_JOIN_BADANN]
+us="Invalid annotation to join module\n"
+
+[PGPERR_RANDSEED_TOOSMALL]
+us="Not enough data in randseed file\n"
+
+[PGPERR_ENV_LOWPRI]
+us="Env Var not set: priority too low\n"
+
+[PGPERR_ENV_BADVAR]
+us="Invalid environment variable\n"
+
+[PGPERR_CHARMAP_UNKNOWN]
+us="Unknown Charset\n"
+
+[PGPERR_FILE_PERMISSIONS]
+us="Unsufficient file permissions\n"
+
+[PGPERR_FILE_WRITELOCKED]
+us="File already open for writing\n"
+
+[PGPERR_FILE_BADOP]
+us="Invalid PgpFile Operation\n"
+
+[PGPERR_FILE_OPFAIL]
+us="PgpFile Operation Failed\n"
+
+[PGPERR_IMMUTABLE]
+us="Attempt to change an\n"
+
+[PGPERR_PARSEASC_INCOMPLETE]
+us="Ascii Armor Input Incomplete\n"
+
+[PGPERR_PARSEASC_BADINPUT]
+us="PGP text input is corrupted\n"
+
+[PGPERR_FILEFIFO_SEEK]
+us="Temp-File Seek Error\n"
+
+[PGPERR_FILEFIFO_WRITE]
+us="Temp-File Write Error\n"
+
+[PGPERR_FILEFIFO_READ]
+us="Temp-File Read Error\n"
+
+[PGPERR_FILEIO_BADPKT]
+us="Corrupted or bad packet in\n"
+
+[PGPERR_SYSTEM_PGPK]
+us="Error Executing PGPK Program\n"
+
+[PGPERR_KEYIO_READING]
+us="I/O error reading keyring\n"
+
+[PGPERR_KEYIO_WRITING]
+us="I/O error writing keyring\n"
+
+[PGPERR_KEYIO_FTELL]
+us="I/O error finding keyring position\n"
+
+[PGPERR_KEYIO_SEEKING]
+us="I/O error seeking keyring\n"
+
+[PGPERR_KEYIO_OPENING]
+us="I/O error opening keyring\n"
+
+[PGPERR_KEYIO_CLOSING]
+us="I/O error closing keyring\n"
+
+[PGPERR_KEYIO_FLUSHING]
+us="I/O error flushing keyring\n"
+
+[PGPERR_KEYIO_EOF]
+us="Unexpected EOF fetching key packet\n"
+
+[PGPERR_KEYIO_BADPKT]
+us="Bad data found where key\n"
+
+[PGPERR_KEYIO_BADFILE]
+us="Not a keyring file\n"
+
+[PGPERR_TROUBLE_KEYSUBKEY]
+us="Key matches subkey\n"
+
+[PGPERR_TROUBLE_SIGSUBKEY]
+us="Signature by subkey\n"
+
+[PGPERR_TROUBLE_BADTRUST]
+us="Trust packet malformed\n"
+
+[PGPERR_TROUBLE_UNKPKTBYTE]
+us="Unknown packet byte in keyring\n"
+
+[PGPERR_TROUBLE_UNXSUBKEY]
+us="Unexpected subkey (before key)\n"
+
+[PGPERR_TROUBLE_UNXNAME]
+us="Unexpected name (before key)\n"
+
+[PGPERR_TROUBLE_UNXSIG]
+us="Unexpected sig (before key)\n"
+
+[PGPERR_TROUBLE_UNXUNK]
+us="Packet of unknown type in unexpected\n"
+
+[PGPERR_TROUBLE_UNXTRUST]
+us="Unexpected trust packet\n"
+
+[PGPERR_TROUBLE_KEY2BIG]
+us="Key grossly oversized\n"
+
+[PGPERR_TROUBLE_SEC2BIG]
+us="Secret key grossly oversized\n"
+
+[PGPERR_TROUBLE_NAME2BIG]
+us="Name grossly oversized\n"
+
+[PGPERR_TROUBLE_SIG2BIG]
+us="Sig grossly oversized\n"
+
+[PGPERR_TROUBLE_UNK2BIG]
+us="Packet of unknown type too large\n"
+
+[PGPERR_TROUBLE_DUPKEYID]
+us="Duplicate KeyID, different keys\n"
+
+[PGPERR_TROUBLE_DUPKEY]
+us="Duplicate key (in same keyring)\n"
+
+[PGPERR_TROUBLE_DUPSEC]
+us="Duplicate secret (in same keyring)\n"
+
+[PGPERR_TROUBLE_DUPNAME]
+us="Duplicate name (in same keyring)\n"
+
+[PGPERR_TROUBLE_DUPSIG]
+us="Duplicate signature (in same keyring)\n"
+
+[PGPERR_TROUBLE_DUPUNK]
+us="Duplicate unknown \"thing\" in keyring\n"
+
+[PGPERR_TROUBLE_BAREKEY]
+us="Key found with no names\n"
+
+[PGPERR_TROUBLE_VERSION_BUG_PREV]
+us="Bug introduced by legal_kludge\n"
+
+[PGPERR_TROUBLE_VERSION_BUG_CUR]
+us="Bug introduced by legal_kludge\n"
+
+[PGPERR_TROUBLE_OLDSEC]
+us="Passphrase is out of date\n"
+
+[PGPERR_TROUBLE_NEWSEC]
+us="Passphrase is newer than another\n"
+
+[PGPERR_KEY_NO_RSA_ENCRYPT]
+us="No RSA Encryption/Signature support\n"
+
+[PGPERR_KEY_NO_RSA_DECRYPT]
+us="No RSA Decryption/Verification support\n"
+
+[PGPERR_KEY_NO_RSA]
+us="No RSA key support\n"
+
+[PGPERR_KEY_LONG]
+us="Key packet has trailing junk\n"
+
+[PGPERR_KEY_SHORT]
+us="Key packet truncated\n"
+
+[PGPERR_KEY_VERSION]
+us="Key version unknown\n"
+
+[PGPERR_KEY_PKALG]
+us="Key algorithm unknown\n"
+
+[PGPERR_KEY_MODMPI]
+us="Key modulus mis-formatted\n"
+
+[PGPERR_KEY_EXPMPI]
+us="Key exponent mis-formatted\n"
+
+[PGPERR_KEY_MODEVEN]
+us="RSA public modulus is even\n"
+
+[PGPERR_KEY_EXPEVEN]
+us="RSA public exponent is even\n"
+
+[PGPERR_KEY_MPI]
+us="Key component mis-formatted\n"
+
+[PGPERR_KEY_UNSUPP]
+us="Key is not supported by this version of PGP\n"
+
+[PGPERR_SIG_LONG]
+us="Signature packet has trailing junk\n"
+
+[PGPERR_SIG_SHORT]
+us="Signature truncated\n"
+
+[PGPERR_SIG_MPI]
+us="Signature integer mis-formatted\n"
+
+[PGPERR_SIG_PKALG]
+us="Signature algorithm unknown\n"
+
+[PGPERR_SIG_EXTRALEN]
+us="Bad signature extra material (not 5)\n"
+
+[PGPERR_SIG_VERSION]
+us="Signature version unknown\n"
+
+[PGPERR_KEYDB_BADPASSPHRASE]
+us="Bad passphrase\n"
+
+[PGPERR_KEYDB_KEYDBREADONLY]
+us="Key database is read-only\n"
+
+[PGPERR_KEYDB_NEEDMOREBITS]
+us="Insufficient random bits\n"
+
+[PGPERR_KEYDB_OBJECTREADONLY]
+us="Object is read-only\n"
+
+[PGPERR_KEYDB_INVALIDPROPERTY]
+us="Invalid property name\n"
+
+[PGPERR_KEYDB_BUFFERTOOSHORT]
+us="Buffer too short\n"
+
+[PGPERR_KEYDB_CORRUPT]
+us="Key database is corrupt\n"
+
+[PGPERR_KEYDB_VERSIONTOONEW]
+us="Data is too new to be read\n"
+
+[PGPERR_KEYDB_IOERROR]
+us="Input/output error\n"
+
+[PGPERR_KEYDB_VALUETOOLONG]
+us="Value too long\n"
+
+[PGPERR_KEYDB_DUPLICATE_CERT]
+us="Duplicate certification\n"
+
+[PGPERR_KEYDB_DUPLICATE_USERID]
+us="Duplicate UserID\n"
+
+[PGPERR_KEYDB_CERTIFYINGKEY_DEAD]
+us="Certifying key no longer\n"
+
+[PGPERR_KEYDB_OBJECT_DELETED]
+us="Object has been deleted\n"
+$Id: language50.txt,v 3.0 2002/01/24 12:11:17 roessler Exp $
diff --git a/contrib/patch.slang-1.2.2.keypad.1 b/contrib/patch.slang-1.2.2.keypad.1
new file mode 100644 (file)
index 0000000..93df4d7
--- /dev/null
@@ -0,0 +1,76 @@
+diff -ur slang.old/src/slcurses.c slang/src/slcurses.c
+--- slang.old/src/slcurses.c   Fri Apr 24 09:16:46 1998
++++ slang/src/slcurses.c       Sat Jul  4 07:30:31 1998
+@@ -134,7 +134,10 @@
+              }
+            else if (ch == 0xFFFF) return ERR;
+            SLang_ungetkey (ch);
+-           return SLkp_getkey ();
++           if ((ch = SLkp_getkey ()) != SL_KEY_ERR)
++             return ch;
++           else
++             return SLang_getkey ();
+         }
+       return SLang_getkey ();
+      }
+diff -ur slang.old/src/slkeymap.c slang/src/slkeymap.c
+--- slang.old/src/slkeymap.c   Fri Apr 24 09:16:47 1998
++++ slang/src/slkeymap.c       Sat Jul  4 07:41:42 1998
+@@ -343,6 +343,8 @@
+ SLang_Key_Type *SLang_do_key(SLKeyMap_List_Type *kml, int (*getkey)(void))
+ {
++   unsigned char SLang_Undo_Buffer [SL_MAX_INPUT_BUFFER_LEN];
++   int SLang_Undo_Len = 0;
+    register SLang_Key_Type *key, *next, *kmax;
+    unsigned int len;
+    unsigned char input_ch;
+@@ -356,6 +358,7 @@
+      return NULL;
+    input_ch = (unsigned char) SLang_Last_Key_Char;
++   SLang_Undo_Buffer [SLang_Undo_Len++] = input_ch;
+    key = (SLang_Key_Type *) &((kml->keymap)[input_ch]);
+@@ -372,7 +375,11 @@
+       key = kml->keymap + input_ch;
+       if (key->type == 0)
++      {
++        if (getkey == (int (*)(void)) SLang_getkey)
++          SLang_ungetkey_string (SLang_Undo_Buffer, SLang_Undo_Len);
+         return NULL;
++      }
+      }
+    /* It appears to be a prefix character in a key sequence. */
+@@ -385,6 +392,7 @@
+      {
+       SLang_Key_TimeOut_Flag = 1;
+       SLang_Last_Key_Char = (*getkey)();
++      SLang_Undo_Buffer [SLang_Undo_Len++] = (unsigned char) SLang_Last_Key_Char;
+       SLang_Key_TimeOut_Flag = 0;
+       len++;
+@@ -458,6 +466,8 @@
+       kmax = next;
+      }
++   if (getkey == (int (*)(void)) SLang_getkey)
++     SLang_ungetkey_string (SLang_Undo_Buffer, SLang_Undo_Len);
+    return NULL;
+ }
+diff -ur slang.old/src/slkeypad.c slang/src/slkeypad.c
+--- slang.old/src/slkeypad.c   Fri Apr 24 09:16:47 1998
++++ slang/src/slkeypad.c       Sat Jul  4 07:30:31 1998
+@@ -110,7 +110,7 @@
+    key = SLang_do_key (Keymap_List, (int (*)(void)) SLang_getkey);
+    if ((key == NULL) || (key->type != SLKEY_F_KEYSYM))
+      {
+-      SLang_flush_input ();
++      /* SLang_flush_input (); */
+       return SL_KEY_ERR;
+      }
diff --git a/contrib/pgp2.rc b/contrib/pgp2.rc
new file mode 100644 (file)
index 0000000..e8150ca
--- /dev/null
@@ -0,0 +1,48 @@
+# -*-muttrc-*-
+#
+# PGP command formats for PGP 2.
+#
+# $Id: pgp2.rc,v 3.0 2002/01/24 12:11:17 roessler Exp $
+#
+
+#
+# Note: In order to be able to read your own messages, you'll have
+# the +encrypttoself command line parameter to the pgp_encrypt_only_command
+# and pgp_encrypt_sign_command variables.
+#
+
+# decode application/pgp
+set pgp_decode_command="%?p?PGPPASSFD=0; export PGPPASSFD;? cat %?p?-? %f | pgp +language=mutt +verbose=0 +batchmode -f"
+
+# verify a pgp/mime signature
+set pgp_verify_command="pgp +language=mutt +verbose=0 +batchmode -t %s %f"
+
+# decrypt a pgp/mime attachment
+set pgp_decrypt_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp +language=mutt +verbose=0 +batchmode -f"
+
+# create a pgp/mime signed attachment
+set pgp_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp +language=mutt +verbose=0 +batchmode -abfst %?a? -u %a?"
+
+# create a pgp/mime encrypted attachment
+set pgp_encrypt_only_command="pgp +language=mutt +verbose=0 +batchmode -aeft %r < %f"
+
+# create a pgp/mime encrypted and signed attachment
+set pgp_encrypt_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp +language=mutt +verbose=0 +batchmode -aefts %?a?-u %a? %r"
+
+# import a key into the public key ring
+set pgp_import_command="pgp -ka %f +language=mutt"
+
+# export a key from the public key ring
+set pgp_export_command="pgp -kxaf +language=mutt %r"
+
+# verify a key
+set pgp_verify_key_command="pgp -kcc +language=mutt %r"
+
+# read in the public key ring
+set pgp_list_pubring_command="pgpring -2 %r"
+
+# read in the secret key ring
+set pgp_list_secring_command="pgpring -s -2 %r"
+
+# pattern for good signature
+set pgp_good_sign="Good signature"
diff --git a/contrib/pgp5.rc b/contrib/pgp5.rc
new file mode 100644 (file)
index 0000000..e0eaf18
--- /dev/null
@@ -0,0 +1,44 @@
+# -*-muttrc-*-
+#
+# PGP command formats for PGP 5.
+#
+# $Id: pgp5.rc,v 3.0 2002/01/24 12:11:17 roessler Exp $
+#
+
+# decode application/pgp
+set pgp_decode_command="%?p?PGPPASSFD=0; export PGPPASSFD;? cat %?p?-? %f | pgpv +language=mutt +verbose=0 +batchmode -f --OutputInformationFD=0"
+
+# verify a pgp/mime signature
+set pgp_verify_command="pgpv +language=mutt +verbose=0 +batchmode --OutputInformationFD=1 %f %s"
+
+# string that the verify command outputs if the signature is good
+set pgp_good_sign = "Good signature"
+
+# decrypt a pgp/mime attachment
+set pgp_decrypt_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgpv +language=mutt +verbose=0 +batchmode --OutputInformationFD=2 -f"
+
+# create a pgp/mime signed attachment
+set pgp_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgps +language=mutt +verbose=0 +batchmode -abft %?a? -u %a?"
+
+# create a pgp/mime encrypted attachment
+set pgp_encrypt_only_command="pgpewrap pgpe +language=mutt +verbose=0 +batchmode +nobatchinvalidkeys=off -aft -- -r %r < %f"
+
+# create a pgp/mime encrypted and signed attachment
+set pgp_encrypt_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgpewrap pgpe +language=mutt +verbose=0 +batchmode +nobatchinvalidkeys=off -afts %?a? -u %a? -- -r %r"
+
+# import a key into the public key ring
+set pgp_import_command="pgpk -a +language=mutt --OutputInformationFD=1 %f"
+
+# export a key from the public key ring
+set pgp_export_command="pgpk -xa +language=mutt --OutputInformationFD=1 %r"
+
+# verify a key
+set pgp_verify_key_command="pgpk -c +batchmode +language=mutt --OutputInformationFD=1 %r"
+
+# read in the public key ring
+set pgp_list_pubring_command="pgpring -5 %r" 
+
+# read in the secret key ring
+set pgp_list_secring_command="pgpring -5 -s %r"
+
+
diff --git a/contrib/pgp6.rc b/contrib/pgp6.rc
new file mode 100644 (file)
index 0000000..5e05afd
--- /dev/null
@@ -0,0 +1,45 @@
+# -*-muttrc-*-
+#
+# PGP command formats for PGP 6.
+#
+# $Id: pgp6.rc,v 3.0 2002/01/24 12:11:17 roessler Exp $
+#
+
+# decode application/pgp
+set pgp_decode_command="%?p?PGPPASSFD=0; export PGPPASSFD;? cat %?p?-? %f | pgp6 +compatible   +verbose=0 +batchmode -f"
+
+# verify a pgp/mime signature
+set pgp_verify_command="pgp6 +compatible   +verbose=0 +batchmode -t %s %f"
+
+# decrypt a pgp/mime attachment
+set pgp_decrypt_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp6 +compatible   +verbose=0 +batchmode -f"
+
+# create a pgp/mime signed attachment
+set pgp_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp6 +compatible   +verbose=0 +batchmode -abfst %?a? -u %a?"
+
+# create a pgp/mime encrypted attachment
+set pgp_encrypt_only_command="pgp6 +compatible   +verbose=0 +encrypttoself +batchmode -aeft %r < %f"
+
+# create a pgp/mime encrypted and signed attachment
+set pgp_encrypt_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp6 +compatible   +verbose=0 +encrypttoself +batchmode +clearsig=off -aefts %?a? -u %a? %r"
+
+# import a key into the public key ring
+set pgp_import_command="pgp6 +compatible  -ka %f "
+
+# export a key from the public key ring
+set pgp_export_command="pgp6 +compatible  -kxaf  %r"
+
+# verify a key
+set pgp_verify_key_command="pgp6 +compatible  -kcc  %r"
+
+# read in the public key ring
+set pgp_list_pubring_command="pgpring -5 %r"
+
+# read in the secret key ring
+set pgp_list_secring_command="pgpring -s -5 %r"
+
+# create a clearsigned message
+set pgp_clearsign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp6 +compatible   +verbose=0 +batchmode +clearsig -afst %?a? -u %a?"
+
+# fetch keys
+set pgp_getkeys_command="pkspxycwrap %r"
diff --git a/contrib/sample.mailcap b/contrib/sample.mailcap
new file mode 100644 (file)
index 0000000..4d3c466
--- /dev/null
@@ -0,0 +1,6 @@
+# $Id: sample.mailcap,v 3.0 2002/01/24 12:11:17 roessler Exp $
+
+text/html; netscape -remote openURL\(%s\)
+image/gif; xv %s
+image/jpg; xv %s
+application/pgp-keys; pgp -f < %s ; copiousoutput
diff --git a/contrib/sample.muttrc b/contrib/sample.muttrc
new file mode 100644 (file)
index 0000000..88f9b33
--- /dev/null
@@ -0,0 +1,339 @@
+# $Id: sample.muttrc,v 3.3 2003/04/02 08:43:24 roessler Exp $
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# ME's personal .muttrc (Mutt 0.92.5)
+#
+# The format of this file is one command per line.  Everything after a pound
+# sign (#) is a comment, unless a backward slash (\) precedes it.  Note: In
+# folder-hook and send-hook you need to account for two levels of dequoting
+# (see manual).
+#
+
+# Note: $folder should be set _before_ any other path vars where `+' or `='
+# is used because paths are expanded when parsed
+#
+#set folder=~/Mail             # where i keep my mailboxes
+
+#set abort_unmodified=yes      # automatically abort replies if I don't
+                               # change the message
+set alias_file=~/.mail_aliases # where I keep my aliases
+#set allow_8bit                        # never do Q-P encoding on legal 8-bit chars
+set arrow_cursor               # use -> instead of hiliting the whole line
+#set ascii_chars               # use ASCII instead of ACS chars for threads
+#set askbcc
+#set askcc
+#set attribution="On %d, %n wrote:"    # how to attribute replies
+set autoedit                   # go to the editor right away when composing
+#set auto_tag                  # always operate on tagged messages
+#set charset="iso-8859-1"      # character set for your terminal
+set noconfirmappend            # don't ask me if i want to append to mailboxes
+#set confirmcreate             # prompt when creating new files
+set copy=yes                   # always save a copy of outgoing messages
+set delete=yes                 # purge deleted messages without asking
+set edit_headers               # let me edit the message header when composing
+#set editor="emacs -nw"                # editor to use when composing messages
+#set bounce=yes                        # don't ask about bouncing messages, just do it
+#set fast_reply                        # skip initial prompts when replying
+#set fcc_attach                        # keep attachments in copies of sent messages?
+#set force_name                        # fcc by recipient, create if mailbox doesn't exist
+#set forward_decode            # weed and MIME decode forwaded messages
+#set forward_format="[%a: %s]" # subject to use when forwarding messages
+#set forward_quote             # quote the header and body of forward msgs
+#set hdr_format="%4C %Z %{%m/%d} [%2N] %-15.15F (%4c) %s"
+set hdr_format="%4C %Z %{%m/%d} %-15.15F (%4c) %s" # format of the index
+#set hdrs                      # include `my_hdr' lines in outgoing messages
+#set header                    # include message header when replying
+set help                       # show the help lines
+#set history=20                        # number of lines of history to remember
+#set hostname="mutt.org"       # my DNS domain
+set include                    # always include messages when replying
+#set indent_string="> "                # how to quote replied text
+#set locale="C"                        # locale to use for printing time
+#set mailcap_path="~/.mailcap:/usr/local/share/mailcap"
+set nomark_old                 # i don't care about whether a message is old
+set mail_check=10              # how often to poll for new mail
+set mbox=+mbox                 # where to store read messages
+#set menu_scroll               # no implicit next-page/prev-page
+#set metoo                     # remove my address when replying
+set mime_forward               # use message/rfc822 type to forward messages
+set move=yes                   # don't ask about moving messages, just do it
+#set pager=less                        # some people prefer an external pager
+#set pager_context=3           # no. of lines of context to give when scrolling
+#set pager_format="-%S- %-20.20f %s"   # format of the pager status bar
+set pager_index_lines=6                # how many index lines to show in the pager
+#set pager_stop                        # don't move to the next message on next-page
+#set pgp_strict_enc            # use Q-P encoding when needed for PGP
+set postponed=+postponed       # mailbox to store postponed messages in
+#set post_indent_string='---end quoted text---'
+#set print=ask-yes             # ask me if I really want to print messages
+set print_command=/bin/false   # how to print things (I like to save trees)
+set noprompt_after     # ask me for a command after the external pager exits
+#set quote_regexp="^ *[a-zA-Z]*[>:#}]" # how to catch quoted text
+set read_inc=25                        # show progress when reading a mailbox
+#set recall                    # prompt to recall postponed messages
+set record=+outbox             # default location to save outgoing mail
+set reply_to                   # always use reply-to if present
+#set reply_regexp="^(re:[ \t]*)+"# how to identify replies in the subject:
+#set resolve           # move to the next message when an action is performed
+#set reverse_alias             # attempt to look up my names for people
+set reverse_name               # use my address as it appears in the message
+                               # i am replying to
+set nosave_empty               # remove files when no messages are left
+#set save_name                 # save outgoing messages by recipient, if the
+#set sendmail="/usr/lib/sendmail -oi -oem"     # how to deliver mail
+#set shell="/bin/zsh"          # program to use for shell escapes
+#set signature="~/.signature"  # file which contains my signature
+
+# I subscribe to a lot of mailing lists, so this is _very_ useful.  This
+# groups messages on the same subject to make it easier to follow a
+# discussion.  Mutt will draw a nice tree showing how the discussion flows.
+set sort=threads               # primary sorting method
+
+#set sort_aux=reverse-date-received    # how to sort subthreads
+#set sort_aux=last-date                # date of the last message in thread
+set sort_browser=reverse-date  # how to sort files in the dir browser
+set spoolfile='~/mailbox'      # where my new mail is located
+#set status_format="-%r-Mutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?  %l]---(%s)-%>-(%P)---"
+#set status_on_top             # some people prefer the status bar on top
+#set strict_threads            # don't thread by subject
+set tilde                      # virtual lines to pad blank lines in the pager
+#set timeout=0                 # timeout for prompt in the index menu
+#set tmpdir=~/tmp              # where to store temp files
+#set to_chars=" +TCF"
+#set use_8bitmime              # enable the -B8BITMIME sendmail flag
+set nouse_domain               # don't qualify local addresses with $domain
+#set use_from                  # always generate the `From:' header field
+set use_mailcap=yes            # always use a mailcap entry when found
+set pgp_verify_sig=no          # don't automatically verify message signatures
+#set visual=vim                        # editor invoked by ~v in the builtin editor
+#set nowait_key                        # prompt when a pipe returns normal status
+set write_inc=25               # show progress while writing mailboxes
+
+# only enable the following IFF you have sendmail 8.8.x or you will not
+# be able to send mail!!!
+#set dsn_notify='failure,delay'        # when to return an error message
+#set dsn_return=hdrs           # what to return in the error message
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# Header fields I don't normally want to see
+#
+ignore *               # this means "ignore all lines by default"
+
+# I do want to see these fields, though!
+unignore       from: subject to cc mail-followup-to \
+               date x-mailer x-url # this shows how nicely wrap long lines
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# Color definitions
+#
+
+#color normal white default
+color hdrdefault red default
+color quoted brightblue default
+color signature red default
+color indicator brightyellow red
+color error brightred default
+color status yellow blue
+color tree magenta default     # the thread tree in the index menu
+color tilde magenta default
+color message brightcyan default
+color markers brightcyan default
+color attachment brightmagenta default
+color search default green     # how to hilite search patterns in the pager
+
+color header brightred default ^(From|Subject):
+color body magenta default "(ftp|http)://[^ ]+"        # point out URLs
+color body magenta default [-a-z_0-9.]+@[-a-z_0-9.]+   # e-mail addresses
+color underline brightgreen default
+
+# attributes when using a mono terminal
+#mono header underline ^(From|Subject):
+mono quoted bold
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# Key bindings
+#
+#      maps:
+#              alias           alias menu
+#              attach          attachment menu
+#              browser         directory browser
+#              compose         compose menu
+#              index           message index
+#              pgp             pgp menu
+#              postpone        postponed message recall menu
+#              generic         generic keymap for all of the above
+#              editor          line editor
+#              pager           text viewer
+#              
+
+bind generic "\e<" first-entry # emacs-like bindings for moving to top/bottom
+bind generic \e> last-entry
+bind generic { top-page
+bind generic } bottom-page
+bind generic \177 last-entry
+
+macro index \cb |urlview\n     # simulate the old browse-url function
+
+macro index S s+spam\n
+macro pager S s+spam\n
+
+#macro index \# /bug^M # search for bugs
+#macro index "\""        ":set realname=\"real hairy macro\"^M:set ?realname^M" # and a comment to boot!
+#macro index f1 :woohoo!
+
+bind pager G bottom    # just like vi and less
+#macro   pager   \Ck     "|pgp -kaf^M"   # a comment is valid here
+#macro pager X "|morepgp^M"    # pipe PGP message to a script
+
+#bind editor \cy eol   # make ^Y jump to the end of the line
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# User Defined Headers
+#
+
+#my_hdr X-Useless-Header: Look ma, it's a \# sign! # real comment
+#my_hdr X-Operating-System: `uname -a`
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# Specify default filename when saving messages
+#
+#      save-hook [!]<pattern> <mailbox>
+#
+# <mailbox> is provided as default when saving messages from <pattern>
+
+#save-hook mutt- =mutt-mail
+#save-hook aol\.com +spam
+save-hook ^judge +diplomacy
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# Multiple spool mailboxes
+#
+#      mbox-hook [!]<pattern> <mbox-mailbox>
+#
+# Read mail in <pattern> is moved to <mbox-mailbox> when <pattern> is
+# closed.
+
+#mbox-hook =mutt-users.in =mutt-users
+#mbox-hook +TEST +inbox
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# Change settings based upon message recipient
+#
+#      send-hook [!]<pattern> <command>
+#
+# <command> is executed when sending mail to an address matching <pattern>
+
+#send-hook mutt- 'set signature=~/.sigmutt; my_hdr From: Mutt User <user@example.com>'
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# Specify where to save composed messages
+#
+#      fcc-hook [!]<pattern> <mailbox>
+#
+# <pattern> is recipient(s), <mailbox> is where to save a copy
+
+#fcc-hook joe +joe
+#fcc-hook bob +bob
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# Change settings based on mailbox
+#
+#      folder-hook [!]<pattern> <command>
+#
+# <command> is executed when opening a mailbox matching <pattern>
+
+#folder-hook . 'set sort=date-sent'
+#folder-hook mutt 'set hdr_format="%4C %Z %02m/%02N %-20.20F (%4l) %s"'
+#folder-hook =mutt my_hdr Revolution: \#9 # real comment
+
+#folder-hook . 'set reply_regexp="^re:[ \t]*"'
+
+# this mailing list prepends "[WM]" to all non reply subjects, so set
+# $reply_regexp to ignore it
+#folder-hook +wmaker 'set reply_regexp="^(re:[ \t]*)?\[WM\][ \t]*"'
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# Aliases
+#
+#      alias <name> <address> [ , <address> ... ]
+
+#alias exam "\# to annoy michael" <user@host>
+#alias me Michael Elkins <me@mutt.org> # me!
+alias mutt-dev Mutt Development List <mutt-dev@mutt.org> # power users
+alias mutt-users Mutt User List <mutt-users@mutt.org>
+alias mutt-announce Mutt Announcement List <mutt-announce@mutt.org>
+alias wmaker WindowMaker Mailing List <wmaker@eosys.com>
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# Mailboxes to watch for new mail
+#
+#      mailboxes <path1> [ <path2> ... ]
+#
+
+mailboxes ! +mutt-dev +mutt-users +open-pgp +wmaker +hurricane +vim +ietf \
+       +drums
+#mailboxes `echo $HOME/Mail/*`
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# Specify the order of the headers to appear when displaying a message
+#
+#      hdr_order <hdr1> [ <hdr2> ... ]
+#
+
+unhdr_order *                          # forget the previous settings
+hdr_order date from subject to cc
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# Identify mailing lists I subscribe to
+#
+#      lists <list-name> [ <list-name> ... ]
+
+lists mutt-dev mutt-users
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# Automatically use entries from ~/.mailcap to view these MIME types
+#
+#      auto_view <type> [ <type> ... ]
+
+auto_view application/x-gunzip
+auto_view application/x-gzip
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# Scoring
+#
+#      score <pattern> <value>
+#
+# 9999 and -9999 are special values which cause processing of hooks to stop
+# at that entry.  If you prefix the score with an equal sign (=), the score
+# is assigned to the message and processing stops.
+
+#score '~f ^me@cs\.hmc\.edu$' 1000
+#score '~t mutt | ~c mutt' =500
+#score '~f aol\.com$' -9999
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+# I use Mutt on several different machines, so I put local config commands
+# in a separate file so I can have the rest of the settings the same on all
+# machines.
+#
+
+source ~/.muttrc-local # config commands local to this site
+
+# EOF
diff --git a/contrib/sample.muttrc-tlr b/contrib/sample.muttrc-tlr
new file mode 100644 (file)
index 0000000..4e2959a
--- /dev/null
@@ -0,0 +1,279 @@
+# -*-muttrc-*-
+
+#
+# Mutt configuration file of Thomas Roessler <roessler@guug.de>.
+#
+# Use and distribute freely.
+#
+# Note: This file doesn't contain any personal customization, i.e.,
+# using it won't make you send messages with my name in the header.
+#
+# Things to change: You probably want to change the "priv.rc" source
+# command in the end of this file.  Also, it's likely you want to have 
+# a look at the the $editor and $tmpdir variables.
+#
+
+#
+# MIME settings
+#
+
+auto_view application/ms-tnef text/x-vcard
+auto_view application/x-chess application/x-lotus-notes
+auto_view text/html application/x-gzip application/x-gunzip 
+auto_view application/rtf application/x-rath
+auto_view application/msword
+
+alternative_order application/pgp text/plain text/html text/enriched
+
+#
+# Key bindings
+#
+
+#
+# A few of these may resemble Pine.  ups.
+#
+
+bind   alias   " "             tag-entry
+bind   alias   \n              select-entry
+bind   alias   \r              select-entry
+
+bind   attach  i               exit
+bind   attach  n               next-entry
+bind   attach  p               previous-entry
+bind   attach  " "             select-entry
+bind   attach  y               print-entry
+
+bind   browser <end>           last-entry
+bind   browser <home>          first-entry
+
+bind   editor  "\e<backspace>" kill-word
+bind   editor  "\e<delete>"    kill-word
+bind   editor  "\e\t"          complete-query
+bind   editor  "\Ct"           transpose-chars
+
+bind   generic "\CV"           next-page
+bind   generic "\Ca"           first-entry
+bind   generic "\Ce"           last-entry
+bind   generic "\eV"           previous-page
+bind   generic "\ev"           previous-page
+bind   generic +               tag-entry
+bind   generic ^               first-entry
+bind   generic a               tag-prefix
+bind   generic $               last-entry
+bind   generic q               exit
+
+bind   index   ";"             limit
+bind   index   "\Ce"           last-entry      # override edit-type
+bind   index   "\eV"           previous-page   # override collapse-something
+bind   index   "\e<"           collapse-thread
+bind   index   "\eq"           query
+bind   index   $               last-entry
+bind   index   *               flag-message
+bind   index   <delete>        delete-message
+bind   index   <end>           last-entry
+bind   index   <home>          first-entry
+bind   index   J               next-entry
+bind   index   K               previous-entry
+bind   index   Q               quit
+bind   index   R               group-reply
+bind   index   \em             recall-message
+bind   index   a               tag-prefix
+bind   index   m               mail
+bind   index   p               previous-entry
+bind   index   t               create-alias
+bind   index   x               sync-mailbox
+bind   index   y               print-message
+bind   index   n               next-entry
+bind   index   "\ev"           previous-page
+
+bind   pager   "\Cn"           next-line
+bind   pager   "\Cp"           previous-line
+bind   pager   +               tag-message
+bind   pager   <delete>        delete-message
+bind   pager   <down>          next-line
+bind   pager   <end>           bottom
+bind   pager   <home>          top
+bind   pager   <up>            previous-line
+bind   pager   G               group-reply
+bind   pager   R               group-reply
+bind   pager   \em             recall-message
+bind   pager   t               display-toggle-weed # like slrn
+bind   pager   y               print-message
+
+bind   query   i               exit
+
+# make it feel like emacs
+
+macro  generic "\ex"           ":exec "
+macro  pager   "\ex"           ":exec "
+macro  generic "\eX"           "\ex"
+macro  pager   "\eX"           "\ex"
+macro  index   "~"             ";~"
+
+# move messages to the pilot folder
+
+macro  index   "\ew"           "<decode-copy>+pilot\n" "Copy a message to the pilot folder."
+macro  pager   "\ew"           "<decode-copy>+pilot\n" "Copy a message to the pilot folder."
+
+# for majordomo list owner and moderator jobs
+
+macro  index   "\ea"           ":set nopipe_decode wait_key\n|approve\n:set nowait_key\n"
+macro  pager   "\ea"           ":set nopipe_decode wait_key\n|approve\n:set nowait_key\n"
+
+# emulate the old URL-browser key bindings.
+
+macro  pager   "\Cb"   "| urlview -\n"
+macro  index   "\Cb"   "| urlview -\n"
+
+# permit limiting from the pager.
+
+macro   pager  ";"     "<exit><limit>"
+
+# emulate the old POP-feature bindings
+
+macro  index   G       "!fetchmail\n"  
+macro  pager   G       "!fetchmail\n"
+
+macro   compose "\ee"   "Fpgp -eatf " 
+
+
+#
+# Colors
+#
+
+# This is a tiny hack, so I can get different
+# color schemes on the console and under X11.
+
+source ~/.mutt/colors.`if [ "$TERM" = "linux" ] ; then echo linux ; else echo default ; fi`
+
+mono  index bold ~F
+# mono  body  bold '\*[^*]+\*'
+# mono  body  underline '_[^_]+_'
+
+#
+# The header weed list
+#
+
+ignore delivered-to
+ignore content- errors-to in-reply-to mime-version
+ignore lines precedence status
+ignore nntp-posting-host path old-return-path received references
+ignore priority >received >>received
+ignore resent- return-path xref path
+ignore x400 importance sensitivity autoforward original-encoded-information
+ignore x- thread-
+
+ignore list- comments posted-to approved-by
+
+unignore x-spam x-url x-mailer
+
+hdr_order from to cc date subject reply-to mail-followup-to
+
+#
+# Various settings
+#
+
+set   abort_nosubject=no               # Let me send messages with an empty subject
+set   abort_unmodified=no              # Let me send empty messages
+set   alias_file=~/.mutt/aliases       # Where to store aliases
+unset allow_8bit                       # Produce correct MIME
+unset arrow_cursor                     # Use the bar cursor
+set   askcc                            # Ask me about CCs
+unset bounce_delivered                 # Don't include Delivered-to with bounces
+set   charset=iso-8859-1               # The local character set
+set   confirmcreate                    # Ask me about creating new files
+unset confirmappend                    # Don't ask me about appending to files
+set   delete=yes                       # Don't ask me whether or not I meant to delete messages
+set   display_filter="tr '\240\204\223\226' ' \"\"-'" # fix some funny characters
+set   edit_hdrs                                # I want to edit the headers.
+set   editor="/usr/bin/jed %s -f 'flower_mode();'"     
+                                       # Invoke jed with mail_mode.  This may
+                                       # or may not work for you.
+set   envelope_from                    # set messages' envelope-from header.
+set   fcc_clear                                # Store local copies of messages in the clear.
+set   folder=~/Mail                    # Where my mail folders go
+set   followup_to                      # Create Mail-Followup-To headers.
+unset force_name                       # Don't create save folders which don't exist.
+set   forward_decode                   # Decode messages when forwarding.
+set   forward_decrypt                  # Decrypt messages when forwarding.
+set   nohelp                           # No help line.
+set   include=yes                      # Always include a copy when replying.
+set   mark_old                         # Distinguish between seen (but unread) and new messages
+set   mbox=+mbox                       # The (unused) mbox file.
+unset metoo                            # Remove me from CC headers.
+set   mime_fwd=ask-no                  # Ask me whether or not to create a MIME-encapsulated forward
+set   move=no                          # Don't use mbox
+set   pager_stop                       # Don't fall through to the next message in the pager
+set   pager_index_lines=0              # The pager index is ugly.
+set   pgp_replyencrypt                 # Encrypt when replying to encrypted messages.
+set   pgp_replysignencrypted           # Sign when replying to encrypted messages.
+set   pgp_show_unusable="no"           # Don't display unusable keys.
+set   pgp_sort_keys="keyid"            # Sort keys by key ID
+set   pgp_replysign                    # Sign when replying to signed messages.
+set   pgp_timeout=3600                 # Forget the PGP passphrase after an hour.
+set   pipe_decode                      # Decode messages I pipe to commands, typically to patch(1).
+set   postponed=~/.mutt/postponed      # Where to put postponed messages
+set   print=ask-no                     # Don't waste paper
+set   print_cmd="enscript -Email -2 -r -G"     # Two columns, landscape, fancy header.
+set   print_split=yes                  # Invoke enscript once per message
+set   quit=yes                         # Don't ask me whether or not I want to quit.
+set   quote_regexp="^ *[a-zA-Z]*[>|][>:|]*"    # Recognize quotes in the pager.
+set   read_inc=50                      # Progress indicator when reading folders.
+set   recall=ask-no                    # When I say "compose", ask me whether I want to continue
+                                       # composing a postponed message.
+set   record="+archive/now"            # Put copies of most outgoing messages to ~/Mail/archive/now
+set   reply_to=ask-yes                 # Ask me whether I want to honor users' reply-to headers.
+set   reverse_alias                    # Use aliases to display real names on the index.
+set   save_name                                # Save copies by name.  Together with $record and $save_name,
+                                       # this means that when a folder exists, copies of outgoing 
+                                       # messages are written to ~/Mail/<name>, otherwise they go to
+                                       # ~/Mail/archive/now
+set   signature=~/.signature           # Silly signature
+set   sig_dashes                       # Add dashes above my signature
+set   smart_wrap                       # Try to be smart when wrapping around lines in the pager
+set   sort=threads                     # sort by threads,
+set   sort_aux=date                    # then by date
+unset strict_threads                   # don't be strict about threads
+# set   suspend=no                     # Don't suspend - I usually run mutt like this: "xterm -e mutt"
+set   tilde                            # Indicate empty lines in the pager.
+set   tmpdir=~/.tmp                    # Temporary files aren't stored in public places.
+set   to_chars=" +TCF "                        # Don't tag list mail in the index
+
+unset use_domain                       # Don't append a domain to addresses.
+
+set   write_inc=50                     # Progress indicator when writing folders.
+set   query_command="lbdbq %s"         # Use the Little Brother's Database with the external
+                                       # query feature.
+set   sendmail_wait=-1                 # Put sendmail (i.e., postfix) to the background.
+set   encode_from                      # "From " in the beginning of a line triggers quoted-printable
+set   nowait_key                       # Return immediately from external programs
+set   forw_format="[fwd] %s (from: %a)"        # A different subject for forwarded messages
+set   nobeep                           # Shut up. ;-)
+set   reply_regexp="^((re([\\[0-9\\]+])*|aw):[ \t]*)+[ \t]*"   # A regular expression to detect replies
+set   header                           # Include the message header when replying.
+set   ignore_list_reply_to             # Ignore Reply-To headers pointing to mailing lists.
+set   index_format="%4C %Z %{%b %d} %-15.15L (%4c) %s" # Somewhat different index format, which works
+                                       # nicely with maildir folders.
+set   rfc2047_parameters               # Sometimes, I get mails which use a bogus encoding for
+                                       # MIME parameters.  Setting this shouldn't harm.
+set   text_flowed                      # Generate text/plain; format=flowed
+unset use_ipv6                         # Don't try to use IPv6 - it doesn't work here.
+set   keep_flagged                     # don't move flagged messages to mbox
+
+set status_format="-%r-+(%v) %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]----%>-(%P)---"
+set compose_format="--+(%v) Compose  [Approx. msg size: %l   Atts: %a]%>-"
+set pager_format="-%Z- %C/%m: %.20n %> %s"
+
+set smileys="^$"
+
+# PGP command configuration
+# source ~/.mutt/pgp2.rc
+source ~/.mutt/gpg.rc
+
+
+# source non-public stuff, (hooks, alternates, ...)
+source ~/.mutt/priv.rc
+
+# source aliases
+source ~/.mutt/aliases
+
diff --git a/contrib/smime.rc b/contrib/smime.rc
new file mode 100644 (file)
index 0000000..635496b
--- /dev/null
@@ -0,0 +1,96 @@
+# -*-muttrc-*-
+## The following options are only available if you have
+## compiled in S/MIME support
+
+# If you compiled mutt with support for both PGP and S/MIME, PGP
+# will be the default method unless the following option is set
+set smime_is_default
+
+# Uncoment this if you don't want to set labels for certificates you add.
+# unset smime_ask_cert_label
+
+# Passphrase expiration
+set smime_timeout=300
+
+# Global crypto options -- these affect PGP operations as well.
+set crypt_autosign = yes
+set crypt_replyencrypt = yes
+set crypt_replysign = yes
+set crypt_replysignencrypted = yes
+set crypt_verify_sig = yes
+
+# Section A: Key Management.
+
+# The (default) keyfile for signing/decrypting.  Uncomment the following
+# line and replace the keyid with your own.
+set smime_default_key="12345678.0"
+
+# Uncommen to make mutt ask what key to use when trying to decrypt a message.
+# It will use the default key above (if that was set) else.
+# unset smime_decrypt_use_default_key
+
+# Path to a file or directory with trusted certificates
+set smime_ca_location="~/.smime/ca-bundle.crt"
+
+# Path to where all known certificates go. (must exist!)
+set smime_certificates="~/.smime/certificates"
+
+# Path to where all private keys go. (must exist!)
+set smime_keys="~/.smime/keys"
+
+# These are used to extract a certificate from a message.
+# First generate a PKCS#7 structure from the message.
+set smime_pk7out_command="openssl smime -verify -in %f -noverify -pk7out"
+
+# Extract the included certificate(s) from a PKCS#7 structure.
+set smime_get_cert_command="openssl pkcs7 -print_certs -in %f"
+
+# Extract the signer's certificate only from a S/MIME signature (sender verification)
+set smime_get_signer_cert_command="openssl smime -verify -in %f -noverify -signer %c -out /dev/null"
+
+# This is used to get the email address the certificate was issued to.
+set smime_get_cert_email_command="openssl x509 -in  %f -noout -email"
+
+# Add a certificate to the database using smime_keys.
+set smime_import_cert_command="smime_keys add_cert %f"
+
+
+
+# Sction B: Outgoing messages
+
+# Algorithm to use for encryption.
+# valid choices are rc2-40, rc2-64, rc2-128, des, des3
+set smime_encrypt_with="des3"
+
+# Encrypt a message. Input file is a MIME entity.
+set smime_encrypt_command="openssl smime -encrypt -%a -outform DER -in %f %c"
+
+# Sign.
+set smime_sign_command="openssl smime -sign -signer %c -inkey %k -passin stdin -in %f -certfile %i -outform DER"
+
+
+
+#Section C: Incoming messages
+
+# Decrypt a message. Output is a MIME entity.
+set smime_decrypt_command="openssl smime -decrypt  -passin stdin -inform DER -in %f -inkey %k -recip %c"
+
+# Verify a signature of type multipart/signed
+set smime_verify_command="openssl smime -verify -inform DER -in %s %C -content %f"
+
+# Verify a signature of type application/x-pkcs7-mime
+set smime_verify_opaque_command="openssl smime -verify -inform DER -in %s %C"
+
+
+
+# Section D: Alternatives
+
+# Sign.  If you wish to NOT include the certificate your CA used in signing
+# your public key, use this command instead.
+# set smime_sign_command="openssl smime -sign -signer %c -inkey %k -passin stdin -in %f -outform DER"
+#
+# In order to verify the signature only and skip checking the certificate  chain:
+#
+# set smime_verify_command="openssl smime -verify -inform DER -in %s -content %f -noverify"
+# set smime_verify_opaque_command="openssl smime -verify -inform DER -in %s -noverify"
+#
diff --git a/contrib/smime_keys_test.pl b/contrib/smime_keys_test.pl
new file mode 100644 (file)
index 0000000..79c555c
--- /dev/null
@@ -0,0 +1,134 @@
+#! /usr/bin/perl -W
+
+# by Mike Schiraldi <raldi@research.netsol.com>
+
+use strict;
+use Expect;
+
+sub run ($;$ );
+
+umask 077; # probably not necc. but can't hurt
+
+my $tmpdir = "/tmp/smime_keys_test-$$-" . time;
+
+mkdir $tmpdir or die;
+chdir $tmpdir or die;
+
+open TMP, '>muttrc' or die;
+print TMP <<EOF;
+set smime_ca_location="$tmpdir/ca-bundle.crt"
+set smime_certificates="$tmpdir/certificates"
+set smime_keys="$tmpdir/keys"
+EOF
+close TMP;
+
+$ENV{MUTT_CMDLINE} = "mutt -F $tmpdir/muttrc";
+
+# make a user key
+run 'smime_keys init';
+run 'openssl genrsa -out user.key 1024';
+
+# make a request for this key to be signed
+run 'openssl req -new -key user.key -out newreq.pem', "\n\nx\n\nx\nx\nuser\@smime.mutt\n\nx\n";
+
+mkdir 'demoCA' or die;
+mkdir 'demoCA/certs' or die;
+mkdir 'demoCA/crl' or die;
+mkdir 'demoCA/newcerts' or die;
+mkdir 'demoCA/private' or die;
+open OUT, '>demoCA/serial' or die;
+print OUT "01\n";
+close OUT;
+open OUT, '>demoCA/index.txt' or die;
+close OUT;
+
+# make the CA 
+run 'openssl req -new -x509 -keyout demoCA/private/cakey.pem -out demoCA/cacert.pem -days 7300 -nodes', 
+    "\n\nx\n\nx\nx\n\n";
+
+# trust it
+run 'smime_keys add_root demoCA/cacert.pem', "root_CA\n";
+
+# have the CA process the request
+run 'openssl ca -batch -startdate 000101000000Z -enddate 200101000000Z -days 7300 ' .
+    '-policy policy_anything -out newcert.pem -infiles newreq.pem';
+
+unlink 'newreq.pem' or die;
+
+# put it all in a .p12 bundle
+run 'openssl pkcs12 -export -inkey user.key -in newcert.pem -out cert.p12 -CAfile demoCA/cacert.pem -chain', "pass1\n" x 2;
+unlink 'newcert.pem' or die;
+unlink 'demoCA/cacert.pem' or die;
+unlink 'demoCA/index.txt' or die;
+unlink 'demoCA/index.txt.old' or die;
+unlink 'demoCA/serial' or die;
+unlink 'demoCA/serial.old' or die;
+unlink 'demoCA/newcerts/01.pem' or die;
+unlink 'demoCA/private/cakey.pem' or die;
+rmdir  'demoCA/certs' or die;
+rmdir  'demoCA/crl' or die;
+rmdir  'demoCA/private' or die;
+rmdir  'demoCA/newcerts' or die;
+rmdir  'demoCA' or die;
+
+# have smime_keys process it
+run 'smime_keys add_p12 cert.p12', "pass1\n" . "pass2\n" x 2 . "old_label\n";
+unlink 'cert.p12' or die;
+
+# make sure it showed up
+run 'smime_keys list > list';
+
+open IN, 'list' or die;
+<IN> eq "\n" or die;
+<IN> =~ /^(.*)\: Issued for\: user\@smime\.mutt \"old_label\" \(Unverified\)\n/ or die;
+close IN;
+
+my $keyid = $1;
+
+# see if we can rename it
+run "smime_keys label $keyid", "new_label\n";
+
+# make sure it worked
+run 'smime_keys list > list';
+
+open IN, 'list' or die;
+<IN> eq "\n" or die;
+<IN> =~ /^$keyid\: Issued for\: user\@smime\.mutt \"new_label\" \(Unverified\)\n/ or die;
+close IN;
+
+unlink 'list' or die;
+
+# try signing something
+run "openssl smime -sign -signer certificates/$keyid -inkey user.key -in /etc/passwd -certfile certificates/37adefc3.0  > signed";
+unlink 'user.key' or die;
+
+# verify it 
+run 'openssl smime -verify -out /dev/null -in signed -CAfile ca-bundle.crt';
+unlink 'signed' or die;
+
+# clean up
+unlink 'ca-bundle.crt' or die;
+unlink 'muttrc' or die;
+unlink 'keys/.index' or die;
+unlink 'certificates/.index' or die;
+unlink <keys/*> or die;
+unlink <certificates/*> or die;
+rmdir  'keys' or die;
+rmdir  'certificates' or die;
+chdir  '/' or die;
+rmdir  $tmpdir or die;
+
+
+sub run ($;$) {
+    my $cmd = shift or die;
+    my $input = shift;
+    
+    print "\n\nRunning [$cmd]\n";
+
+    my $exp = Expect->spawn ($cmd);
+    if (defined $input) {
+        print $exp $input;
+    }
+    $exp->soft_close;
+    $? and die "$cmd returned $?";
+}
diff --git a/copy.c b/copy.c
new file mode 100644 (file)
index 0000000..2bfcde7
--- /dev/null
+++ b/copy.c
@@ -0,0 +1,925 @@
+/*
+ * Copyright (C) 1996-2000,2002 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mailbox.h"
+#include "mx.h"
+#include "copy.h"
+#include "rfc2047.h"
+#include "mime.h"
+#include "mutt_crypt.h"
+#include "mutt_idna.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h> /* needed for SEEK_SET under SunOS 4.1.4 */
+
+static int address_header_decode (char **str);
+static int copy_delete_attach (BODY *b, FILE *fpin, FILE *fpout, char *date);
+
+/* Ok, the only reason for not merging this with mutt_copy_header()
+ * below is to avoid creating a HEADER structure in message_handler().
+ */
+int
+mutt_copy_hdr (FILE *in, FILE *out, long off_start, long off_end, int flags,
+              const char *prefix)
+{
+  int from = 0;
+  int this_is_from;
+  int ignore = 0;
+  char buf[STRING]; /* should be long enough to get most fields in one pass */
+  char *nl;
+  LIST *t;
+  char **headers;
+  int hdr_count;
+  int x;
+  char *this_one = NULL;
+  int error;
+
+  if (ftell (in) != off_start)
+    fseek (in, off_start, 0);
+
+  buf[0] = '\n';
+  buf[1] = 0;
+
+  if ((flags & (CH_REORDER | CH_WEED | CH_MIME | CH_DECODE | CH_PREFIX | CH_WEED_DELIVERED)) == 0)
+  {
+    /* Without these flags to complicate things
+     * we can do a more efficient line to line copying
+     */
+    while (ftell (in) < off_end)
+    {
+      nl = strchr (buf, '\n');
+
+      if ((fgets (buf, sizeof (buf), in)) == NULL)
+       break;
+
+      /* Is it the begining of a header? */
+      if (nl && buf[0] != ' ' && buf[0] != '\t')
+      {
+       ignore = 1;
+       if (!from && mutt_strncmp ("From ", buf, 5) == 0)
+       {
+         if ((flags & CH_FROM) == 0)
+           continue;
+         from = 1;
+       }
+       else if (flags & (CH_NOQFROM) &&
+                       ascii_strncasecmp (">From ", buf, 6) == 0)
+               continue;
+
+       else if (buf[0] == '\n' || (buf[0] == '\r' && buf[1] == '\n'))
+         break; /* end of header */
+
+       if ((flags & (CH_UPDATE | CH_XMIT | CH_NOSTATUS)) &&
+           (ascii_strncasecmp ("Status:", buf, 7) == 0 ||
+            ascii_strncasecmp ("X-Status:", buf, 9) == 0))
+         continue;
+       if ((flags & (CH_UPDATE_LEN | CH_XMIT | CH_NOLEN)) &&
+           (ascii_strncasecmp ("Content-Length:", buf, 15) == 0 ||
+            ascii_strncasecmp ("Lines:", buf, 6) == 0))
+         continue;
+       ignore = 0;
+      }
+
+      if (!ignore && fputs (buf, out) == EOF)
+       return (-1);
+    }
+    return 0;
+  }
+
+  hdr_count = 1;
+  x = 0;
+  error = FALSE;
+
+  /* We are going to read and collect the headers in an array
+   * so we are able to do re-ordering.
+   * First count the number of entries in the array
+   */
+  if (flags & CH_REORDER)
+  {
+    for (t = HeaderOrderList; t; t = t->next)
+    {
+      dprint(1, (debugfile, "Reorder list: %s\n", t->data));
+      hdr_count++;
+    }
+  }
+
+  dprint (1, (debugfile, "WEED is %s\n", (flags & CH_WEED) ? "Set" : "Not"));
+
+  headers = safe_calloc (hdr_count, sizeof (char *));
+
+  /* Read all the headers into the array */
+  while (ftell (in) < off_end)
+  {
+    nl = strchr (buf, '\n');
+
+    /* Read a line */
+    if ((fgets (buf, sizeof (buf), in)) == NULL)
+      break;
+
+    /* Is it the begining of a header? */
+    if (nl && buf[0] != ' ' && buf[0] != '\t')
+    {
+      /* Do we have anything pending? */
+      if (this_one)
+      {
+       if (flags & CH_DECODE) 
+       {
+         if (!address_header_decode (&this_one))
+           rfc2047_decode (&this_one);
+       }
+       
+       if (!headers[x])
+         headers[x] = this_one;
+       else 
+       {
+         safe_realloc (&headers[x], mutt_strlen (headers[x]) + 
+                       mutt_strlen (this_one) + sizeof (char));
+         strcat (headers[x], this_one); /* __STRCAT_CHECKED__ */
+         FREE (&this_one);
+       }
+       
+       this_one = NULL;
+      }
+      
+      ignore = 1;
+      this_is_from = 0;
+      if (!from && mutt_strncmp ("From ", buf, 5) == 0)
+      {
+       if ((flags & CH_FROM) == 0)
+         continue;
+       this_is_from = from = 1;
+      }
+      else if (buf[0] == '\n' || (buf[0] == '\r' && buf[1] == '\n'))
+       break; /* end of header */
+
+      /* note: CH_FROM takes precedence over header weeding. */
+      if (!((flags & CH_FROM) && (flags & CH_FORCE_FROM) && this_is_from) &&
+         (flags & CH_WEED) &&
+         mutt_matches_ignore (buf, Ignore) &&
+         !mutt_matches_ignore (buf, UnIgnore))
+       continue;
+      if ((flags & CH_WEED_DELIVERED) &&
+         ascii_strncasecmp ("Delivered-To:", buf, 13) == 0)
+       continue;
+      if ((flags & (CH_UPDATE | CH_XMIT | CH_NOSTATUS)) &&
+         (ascii_strncasecmp ("Status:", buf, 7) == 0 ||
+          ascii_strncasecmp ("X-Status:", buf, 9) == 0))
+       continue;
+      if ((flags & (CH_UPDATE_LEN | CH_XMIT | CH_NOLEN)) &&
+         (ascii_strncasecmp ("Content-Length:", buf, 15) == 0 ||
+          ascii_strncasecmp ("Lines:", buf, 6) == 0))
+       continue;
+      if ((flags & CH_MIME) &&
+         ((ascii_strncasecmp ("content-", buf, 8) == 0 &&
+           (ascii_strncasecmp ("transfer-encoding:", buf + 8, 18) == 0 ||
+            ascii_strncasecmp ("type:", buf + 8, 5) == 0)) ||
+          ascii_strncasecmp ("mime-version:", buf, 13) == 0))
+       continue;
+
+      /* Find x -- the array entry where this header is to be saved */
+      if (flags & CH_REORDER)
+      {
+       for (t = HeaderOrderList, x = 0 ; (t) ; t = t->next, x++)
+       {
+         if (!ascii_strncasecmp (buf, t->data, mutt_strlen (t->data)))
+         {
+           dprint(2, (debugfile, "Reorder: %s matches %s\n", t->data, buf));
+           break;
+         }
+       }
+      }
+      
+      ignore = 0;
+    } /* If beginning of header */
+
+    if (!ignore)
+    {
+      dprint (2, (debugfile, "Reorder: x = %d; hdr_count = %d\n", x, hdr_count));
+      if (!this_one)
+       this_one = safe_strdup (buf);
+      else
+      {
+       safe_realloc (&this_one,
+                     mutt_strlen (this_one) + mutt_strlen (buf) + sizeof (char));
+       strcat (this_one, buf); /* __STRCAT_CHECKED__ */
+      }
+    }
+  } /* while (ftell (in) < off_end) */
+
+  /* Do we have anything pending?  -- XXX, same code as in above in the loop. */
+  if (this_one)
+  {
+    if (flags & CH_DECODE) 
+    {
+      if (!address_header_decode (&this_one))
+       rfc2047_decode (&this_one);
+    }
+    
+    if (!headers[x])
+      headers[x] = this_one;
+    else 
+    {
+      safe_realloc (&headers[x], mutt_strlen (headers[x]) + 
+                   mutt_strlen (this_one) + sizeof (char));
+      strcat (headers[x], this_one); /* __STRCAT_CHECKED__ */
+      FREE (&this_one);
+    }
+    
+    this_one = NULL;
+  }
+
+  /* Now output the headers in order */
+  for (x = 0; x < hdr_count; x++)
+  {
+    if (headers[x])
+    {
+#if 0
+      if (flags & CH_DECODE)
+       rfc2047_decode (&headers[x]);
+#endif
+
+      /* We couldn't do the prefixing when reading because RFC 2047
+       * decoding may have concatenated lines.
+       */
+      if (flags & CH_PREFIX)
+      {
+       char *ch = headers[x];
+       int print_prefix = 1;
+
+       while (*ch)
+       { 
+         if (print_prefix)
+         {
+           if (fputs (prefix, out) == EOF)
+           {
+             error = TRUE;
+             break;
+           }
+           print_prefix = 0;
+         }
+
+         if (*ch == '\n' && ch[1])
+           print_prefix = 1;
+
+         if (putc (*ch++, out) == EOF)
+         {
+           error = TRUE;
+           break;
+         }
+       }
+       if (error)
+         break;
+      }
+      else
+      {      
+       if (fputs (headers[x], out) == EOF)
+       {
+         error = TRUE;
+         break;
+       }
+      }
+    }
+  }
+
+  /* Free in a separate loop to be sure that all headers are freed
+   * in case of error. */
+  for (x = 0; x < hdr_count; x++)
+    FREE (&headers[x]);
+  FREE (&headers);
+
+  if (error)
+    return (-1);
+  return (0);
+}
+
+/* flags
+       CH_DECODE       RFC2047 header decoding
+       CH_FROM         retain the "From " message separator
+        CH_FORCE_FROM  give CH_FROM precedence over CH_WEED
+       CH_MIME         ignore MIME fields
+       CH_NOLEN        don't write Content-Length: and Lines:
+       CH_NONEWLINE    don't output a newline after the header
+       CH_NOSTATUS     ignore the Status: and X-Status:
+       CH_PREFIX       quote header with $indent_str
+       CH_REORDER      output header in order specified by `hdr_order'
+       CH_TXTPLAIN     generate text/plain MIME headers [hack alert.]
+       CH_UPDATE       write new Status: and X-Status:
+       CH_UPDATE_LEN   write new Content-Length: and Lines:
+       CH_XMIT         ignore Lines: and Content-Length:
+       CH_WEED         do header weeding
+       CH_NOQFROM      ignore ">From " line
+
+   prefix
+       string to use if CH_PREFIX is set
+ */
+
+int
+mutt_copy_header (FILE *in, HEADER *h, FILE *out, int flags, const char *prefix)
+{
+  char buffer[SHORT_STRING];
+  
+  if (mutt_copy_hdr (in, out, h->offset, h->content->offset, flags, prefix) == -1)
+    return (-1);
+
+  if (flags & CH_TXTPLAIN)
+  {
+    char chsbuf[SHORT_STRING];
+    fputs ("Mime-Version: 1.0\n", out);
+    fputs ("Content-Transfer-Encoding: 8bit\n", out);
+    fputs ("Content-Type: text/plain; charset=", out);
+    mutt_canonical_charset (chsbuf, sizeof (chsbuf), Charset ? Charset : "us-ascii");
+    rfc822_cat(buffer, sizeof(buffer), chsbuf, MimeSpecials);
+    fputs(buffer, out);
+    fputc('\n', out);
+    
+    if (ferror (out) != 0 || feof (out) != 0)
+      return -1;
+    
+  }
+
+  if (flags & CH_UPDATE)
+  {
+    if ((flags & CH_NOSTATUS) == 0)
+    {
+      if (h->old || h->read)
+      {
+       if (fputs ("Status: ", out) == EOF)
+         return (-1);
+
+       if (h->read)
+       {
+         if (fputs ("RO", out) == EOF)
+           return (-1);
+       }
+       else if (h->old)
+       {
+         if (fputc ('O', out) == EOF)
+           return (-1);
+       }
+
+       if (fputc ('\n', out) == EOF)
+         return (-1);
+      }
+
+      if (h->flagged || h->replied)
+      {
+       if (fputs ("X-Status: ", out) == EOF)
+         return (-1);
+
+       if (h->replied)
+       {
+         if (fputc ('A', out) == EOF)
+           return (-1);
+       }
+
+       if (h->flagged)
+       {
+         if (fputc ('F', out) == EOF)
+           return (-1);
+       }
+       
+       if (fputc ('\n', out) == EOF)
+         return (-1);
+      }
+    }
+  }
+
+  if (flags & CH_UPDATE_LEN &&
+      (flags & CH_NOLEN) == 0)
+  {
+    fprintf (out, "Content-Length: %ld\n", h->content->length);
+    if (h->lines != 0 || h->content->length == 0)
+      fprintf (out, "Lines: %d\n", h->lines);
+  }
+
+  if ((flags & CH_NONEWLINE) == 0)
+  {
+    if (flags & CH_PREFIX)
+      fputs(prefix, out);
+    if (fputc ('\n', out) == EOF) /* add header terminator */
+      return (-1);
+  }
+
+  if (ferror (out) || feof (out))
+    return -1;
+  
+  return (0);
+}
+
+/* Count the number of lines and bytes to be deleted in this body*/
+static int count_delete_lines (FILE *fp, BODY *b, long *length, size_t datelen)
+{
+  int dellines = 0;
+  long l;
+  int ch;
+
+  if (b->deleted)
+  {
+    fseek (fp, b->offset, SEEK_SET);
+    for (l = b->length ; l ; l --)
+    {
+      ch = getc (fp);
+      if (ch == EOF)
+       break;
+      if (ch == '\n')
+       dellines ++;
+    }
+    dellines -= 3;
+    *length -= b->length - (84 + datelen);
+    /* Count the number of digits exceeding the first one to write the size */
+    for (l = 10 ; b->length >= l ; l *= 10)
+      (*length) ++;
+  }
+  else
+  {
+    for (b = b->parts ; b ; b = b->next)
+      dellines += count_delete_lines (fp, b, length, datelen);
+  }
+  return dellines;
+}
+
+/* make a copy of a message
+ * 
+ * fpout       where to write output
+ * fpin                where to get input
+ * hdr         header of message being copied
+ * body                structure of message being copied
+ * flags
+ *     M_CM_NOHEADER   don't copy header
+ *     M_CM_PREFIX     quote header and body
+ *     M_CM_DECODE     decode message body to text/plain
+ *     M_CM_DISPLAY    displaying output to the user
+ *      M_CM_PRINTING   printing the message
+ *     M_CM_UPDATE     update structures in memory after syncing
+ *     M_CM_DECODE_PGP used for decoding PGP messages
+ *     M_CM_CHARCONV   perform character set conversion 
+ * chflags     flags to mutt_copy_header()
+ */
+
+int
+_mutt_copy_message (FILE *fpout, FILE *fpin, HEADER *hdr, BODY *body,
+                   int flags, int chflags)
+{
+  char prefix[SHORT_STRING];
+  STATE s;
+  long new_offset = -1;
+
+  if (flags & M_CM_PREFIX)
+  {
+    if (option (OPTTEXTFLOWED))
+      strfcpy (prefix, ">", sizeof (prefix));
+    else
+      _mutt_make_string (prefix, sizeof (prefix), NONULL (Prefix), Context, hdr, 0);
+  }
+
+  if ((flags & M_CM_NOHEADER) == 0)
+  {
+    if (flags & M_CM_PREFIX)
+      chflags |= CH_PREFIX;
+
+    else if (hdr->attach_del && (chflags & CH_UPDATE_LEN))
+    {
+      int new_lines;
+      long new_length = body->length;
+      char date[SHORT_STRING];
+
+      mutt_make_date (date, sizeof (date));
+      date[5] = date[mutt_strlen (date) - 1] = '\"';
+
+      /* Count the number of lines and bytes to be deleted */
+      fseek (fpin, body->offset, SEEK_SET);
+      new_lines = hdr->lines -
+       count_delete_lines (fpin, body, &new_length, mutt_strlen (date));
+
+      /* Copy the headers */
+      if (mutt_copy_header (fpin, hdr, fpout,
+                           chflags | CH_NOLEN | CH_NONEWLINE, NULL))
+       return -1;
+      fprintf (fpout, "Content-Length: %ld\n", new_length);
+      if (new_lines <= 0)
+       new_lines = 0;
+      else
+       fprintf (fpout, "Lines: %d\n\n", new_lines);
+      if (ferror (fpout) || feof (fpout))
+       return -1;
+      new_offset = ftell (fpout);
+
+      /* Copy the body */
+      fseek (fpin, body->offset, SEEK_SET);
+      if (copy_delete_attach (body, fpin, fpout, date))
+       return -1;
+
+#ifdef DEBUG
+      {
+       long fail = ((ftell (fpout) - new_offset) - new_length);
+
+       if (fail)
+       {
+         mutt_error ("The length calculation was wrong by %ld bytes", fail);
+         new_length += fail;
+         mutt_sleep (1);
+       }
+      }
+#endif
+
+      /* Update original message if we are sync'ing a mailfolder */ 
+      if (flags & M_CM_UPDATE)
+      {
+       hdr->attach_del = 0;
+       hdr->lines = new_lines;
+       body->offset = new_offset;
+
+       /* update the total size of the mailbox to reflect this deletion */
+       Context->size -= body->length - new_length;
+       /*
+        * if the message is visible, update the visible size of the mailbox
+        * as well.
+        */
+       if (Context->v2r[hdr->msgno] != -1)
+         Context->vsize -= body->length - new_length;
+
+       body->length = new_length;
+       mutt_free_body (&body->parts);
+      }
+
+      return 0;
+    }
+
+    if (mutt_copy_header (fpin, hdr, fpout, chflags,
+                         (chflags & CH_PREFIX) ? prefix : NULL) == -1)
+      return -1;
+
+    new_offset = ftell (fpout);
+  }
+
+  if (flags & M_CM_DECODE)
+  {
+    /* now make a text/plain version of the message */
+    memset (&s, 0, sizeof (STATE));
+    s.fpin = fpin;
+    s.fpout = fpout;
+    if (flags & M_CM_PREFIX)
+      s.prefix = prefix;
+    if (flags & M_CM_DISPLAY)
+      s.flags |= M_DISPLAY;
+    if (flags & M_CM_PRINTING)
+      s.flags |= M_PRINTING;
+    if (flags & M_CM_WEED)
+      s.flags |= M_WEED;
+    if (flags & M_CM_CHARCONV)
+      s.flags |= M_CHARCONV;
+    
+    if (WithCrypto && flags & M_CM_VERIFY)
+      s.flags |= M_VERIFY;
+
+    mutt_body_handler (body, &s);
+  }
+  else if (WithCrypto
+           && (flags & M_CM_DECODE_CRYPT) && (hdr->security & ENCRYPT))
+  {
+    BODY *cur;
+    FILE *fp;
+
+    if ((WithCrypto & APPLICATION_PGP)
+        && (flags & M_CM_DECODE_PGP) && (hdr->security & APPLICATION_PGP) &&
+       hdr->content->type == TYPEMULTIPART)
+    {
+      if (crypt_pgp_decrypt_mime (fpin, &fp, hdr->content, &cur))
+       return (-1);
+      fputs ("Mime-Version: 1.0\n", fpout);
+    }
+
+    if ((WithCrypto & APPLICATION_SMIME)
+        && (flags & M_CM_DECODE_SMIME) && (hdr->security & APPLICATION_SMIME)
+            && hdr->content->type == TYPEAPPLICATION)
+    {
+      if (crypt_smime_decrypt_mime (fpin, &fp, hdr->content, &cur))
+       return (-1);
+    }
+
+    mutt_write_mime_header (cur, fpout);
+    fputc ('\n', fpout);
+
+    fseek (fp, cur->offset, 0);
+    if (mutt_copy_bytes (fp, fpout, cur->length) == -1)
+    {
+      fclose (fp);
+      mutt_free_body (&cur);
+      return (-1);
+    }
+    mutt_free_body (&cur);
+    fclose (fp);
+  }
+  else
+  {
+    fseek (fpin, body->offset, 0);
+    if (flags & M_CM_PREFIX)
+    {
+      int c;
+      size_t bytes = body->length;
+      
+      fputs(prefix, fpout);
+      
+      while((c = fgetc(fpin)) != EOF && bytes--)
+      {
+       fputc(c, fpout);
+       if(c == '\n')
+       {
+         fputs(prefix, fpout);
+       }
+      } 
+    }
+    else if (mutt_copy_bytes (fpin, fpout, body->length) == -1)
+      return -1;
+  }
+
+  if ((flags & M_CM_UPDATE) && (flags & M_CM_NOHEADER) == 0 
+      && new_offset != -1)
+  {
+    body->offset = new_offset;
+    mutt_free_body (&body->parts);
+  }
+
+  return 0;
+}
+
+int
+mutt_copy_message (FILE *fpout, CONTEXT *src, HEADER *hdr, int flags,
+                  int chflags)
+{
+  MESSAGE *msg;
+  int r;
+  
+  if ((msg = mx_open_message (src, hdr->msgno)) == NULL)
+    return -1;
+  if ((r = _mutt_copy_message (fpout, msg->fp, hdr, hdr->content, flags, chflags)) == 0 
+      && (ferror (fpout) || feof (fpout)))
+  {
+    dprint (1, (debugfile, "_mutt_copy_message failed to detect EOF!\n"));
+    r = -1;
+  }
+  mx_close_message (&msg);
+  return r;
+}
+
+/* appends a copy of the given message to a mailbox
+ *
+ * dest                destination mailbox
+ * fpin                where to get input
+ * src         source mailbox
+ * hdr         message being copied
+ * body                structure of message being copied
+ * flags       mutt_copy_message() flags
+ * chflags     mutt_copy_header() flags
+ */
+
+int
+_mutt_append_message (CONTEXT *dest, FILE *fpin, CONTEXT *src, HEADER *hdr,
+                     BODY *body, int flags, int chflags)
+{
+  MESSAGE *msg;
+  int r;
+
+  if ((msg = mx_open_new_message (dest, hdr, (src->magic == M_MBOX || src->magic == M_MMDF) ? 0 : M_ADD_FROM)) == NULL)
+    return -1;
+  if (dest->magic == M_MBOX || dest->magic == M_MMDF)
+    chflags |= CH_FROM | CH_FORCE_FROM;
+  chflags |= (dest->magic == M_MAILDIR ? CH_NOSTATUS : CH_UPDATE);
+  r = _mutt_copy_message (msg->fp, fpin, hdr, body, flags, chflags);
+  if (mx_commit_message (msg, dest) != 0)
+    r = -1;
+
+  mx_close_message (&msg);
+  return r;
+}
+
+int
+mutt_append_message (CONTEXT *dest, CONTEXT *src, HEADER *hdr, int cmflags,
+                    int chflags)
+{
+  MESSAGE *msg;
+  int r;
+
+  if ((msg = mx_open_message (src, hdr->msgno)) == NULL)
+    return -1;
+  r = _mutt_append_message (dest, msg->fp, src, hdr, hdr->content, cmflags, chflags);
+  mx_close_message (&msg);
+  return r;
+}
+
+/*
+ * This function copies a message body, while deleting _in_the_copy_
+ * any attachments which are marked for deletion.
+ * Nothing is changed in the original message -- this is left to the caller.
+ *
+ * The function will return 0 on success and -1 on failure.
+ */
+static int copy_delete_attach (BODY *b, FILE *fpin, FILE *fpout, char *date)
+{
+  BODY *part;
+
+  for (part = b->parts ; part ; part = part->next)
+  {
+    if (part->deleted || part->parts)
+    {
+      /* Copy till start of this part */
+      if (mutt_copy_bytes (fpin, fpout, part->hdr_offset - ftell (fpin)))
+       return -1;
+
+      if (part->deleted)
+      {
+       fprintf (fpout,
+                "Content-Type: message/external-body; access-type=x-mutt-deleted;\n"
+                "\texpiration=%s; length=%ld\n"
+                "\n", date + 5, part->length);
+       if (ferror (fpout))
+         return -1;
+
+       /* Copy the original mime headers */
+       if (mutt_copy_bytes (fpin, fpout, part->offset - ftell (fpin)))
+         return -1;
+
+       /* Skip the deleted body */
+       fseek (fpin, part->offset + part->length, SEEK_SET);
+      }
+      else
+      {
+       if (copy_delete_attach (part, fpin, fpout, date))
+         return -1;
+      }
+    }
+  }
+
+  /* Copy the last parts */
+  if (mutt_copy_bytes (fpin, fpout, b->offset + b->length - ftell (fpin)))
+    return -1;
+
+  return 0;
+}
+
+/* 
+ * This function is the equivalent of mutt_write_address_list(),
+ * but writes to a buffer instead of writing to a stream.
+ * mutt_write_address_list could be re-used if we wouldn't store
+ * all the decoded headers in a huge array, first. 
+ *
+ * XXX - fix that. 
+ */
+
+static void format_address_header (char **h, ADDRESS *a)
+{
+  char buf[HUGE_STRING];
+  char cbuf[STRING];
+  char c2buf[STRING];
+  
+  int l, linelen, buflen, count;
+  linelen = mutt_strlen (*h);
+  buflen  = linelen + 3;
+  
+  
+  safe_realloc (h, buflen);
+  for (count = 0; a; a = a->next, count++)
+  {
+    ADDRESS *tmp = a->next;
+    a->next = NULL;
+    *buf = *cbuf = *c2buf = '\0';
+    rfc822_write_address (buf, sizeof (buf), a, 0);
+    a->next = tmp;
+    
+    l = mutt_strlen (buf);
+    if (count && linelen + l > 74) 
+    {
+      strcpy (cbuf, "\n\t");   /* __STRCPY_CHECKED__ */
+      linelen = l + 8;
+    }
+    else
+    {
+      if (a->mailbox)
+      {
+       strcpy (cbuf, " ");     /* __STRCPY_CHECKED__ */
+       linelen++;
+      }
+      linelen += l;
+    }
+    if (!a->group && a->next && a->next->mailbox)
+    {
+      linelen++;
+      buflen++;
+      strcpy (c2buf, ",");     /* __STRCPY_CHECKED__ */
+    }
+    
+    buflen += l + mutt_strlen (cbuf) + mutt_strlen (c2buf);
+    safe_realloc (h, buflen);
+    strcat (*h, cbuf);         /* __STRCAT_CHECKED__ */
+    strcat (*h, buf);          /* __STRCAT_CHECKED__ */
+    strcat (*h, c2buf);                /* __STRCAT_CHECKED__ */
+  }
+  
+  /* Space for this was allocated in the beginning of this function. */
+  strcat (*h, "\n");           /* __STRCAT_CHECKED__ */
+}
+
+static int address_header_decode (char **h)
+{
+  char *s = *h;
+  int l;
+
+  ADDRESS *a = NULL;
+
+  switch (tolower ((unsigned char) *s))
+  {
+    case 'r': 
+    {
+      if (ascii_strncasecmp (s, "return-path:", 12) == 0)
+      {
+       l = 12;
+       break;
+      }
+      else if (ascii_strncasecmp (s, "reply-to:", 9) == 0)
+      {
+       l = 9;
+       break;
+      }
+      return 0;
+    }
+    case 'f': 
+    {
+      if (ascii_strncasecmp (s, "from:", 5)) 
+       return 0; 
+      l = 5;
+      break;
+    }
+    case 'c':
+    {
+      if (ascii_strncasecmp (s, "cc:", 3))
+       return 0;
+      l = 3;
+      break;
+      
+    }
+    case 'b':
+    {
+      if (ascii_strncasecmp (s, "bcc:", 4))
+       return 0;
+      l = 4;
+      break;
+    }
+    case 's':
+    {
+      if (ascii_strncasecmp (s, "sender:", 7))
+       return 0;
+      l = 7;
+      break;
+    }
+    case 't':
+    {
+      if (ascii_strncasecmp (s, "to:", 3))
+       return 0;
+      l = 3;
+      break;
+    }
+    case 'm':
+    {
+      if (ascii_strncasecmp (s, "mail-followup-to:", 17))
+       return 0;
+      l = 17;
+      break;
+    }
+    default: return 0;    
+  }
+
+  if ((a = rfc822_parse_adrlist (a, s + l + 1)) == NULL)
+    return 0;
+  
+  mutt_addrlist_to_local (a);
+  rfc2047_decode_adrlist (a);
+  
+  *h = safe_calloc (1, l + 2);
+  
+  strfcpy (*h, s, l + 1);
+  
+  format_address_header (h, a);
+
+  rfc822_free_address (&a);
+  
+  FREE (&s);
+  return 1;
+}
diff --git a/copy.h b/copy.h
new file mode 100644 (file)
index 0000000..c03d5f8
--- /dev/null
+++ b/copy.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+/* flags to _mutt_copy_message */
+#define M_CM_NOHEADER  1       /* don't copy the message header */
+#define M_CM_PREFIX    (1<<1)  /* quote the message */
+#define M_CM_DECODE    (1<<2)  /* decode the message body into text/plain */
+#define M_CM_DISPLAY   (1<<3)  /* output is displayed to the user */
+#define M_CM_UPDATE    (1<<4)  /* update structs on sync */
+#define M_CM_WEED      (1<<5)  /* weed message/rfc822 attachment headers */
+#define M_CM_CHARCONV  (1<<6)  /* perform character set conversions */
+#define M_CM_PRINTING  (1<<7)  /* printing the message - display light */
+
+
+#define M_CM_DECODE_PGP          (1<<8) /* used for decoding PGP messages */
+#define M_CM_DECODE_SMIME (1<<9) /* used for decoding S/MIME messages */
+#define M_CM_DECODE_CRYPT  (M_CM_DECODE_PGP | M_CM_DECODE_SMIME)
+
+
+#define M_CM_VERIFY    (1<<10) /* do signature verification */
+
+
+
+int mutt_copy_hdr (FILE *, FILE *, long, long, int, const char *);
+
+int mutt_copy_header (FILE *, HEADER *, FILE *, int, const char *);
+
+int _mutt_copy_message (FILE *fpout,
+                       FILE *fpin,
+                       HEADER *hdr,
+                       BODY *body,
+                       int flags,
+                       int chflags);
+
+int mutt_copy_message (FILE *fpout,
+                      CONTEXT *src,
+                      HEADER *hdr,
+                      int flags,
+                      int chflags);
+
+int _mutt_append_message (CONTEXT *dest,
+                         FILE *fpin,
+                         CONTEXT *src,
+                         HEADER *hdr,
+                         BODY *body,
+                         int flags,
+                         int chflags);
+
+int mutt_append_message (CONTEXT *dest,
+                        CONTEXT *src,
+                        HEADER *hdr,
+                        int cmflags,
+                        int chflags);
diff --git a/crypt.c b/crypt.c
new file mode 100644 (file)
index 0000000..5cc2cd8
--- /dev/null
+++ b/crypt.c
@@ -0,0 +1,927 @@
+/*
+ * Copyright (C) 1996,1997 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * Copyright (C) 2001  Thomas Roessler <roessler@does-not-exist.org>
+ *                     Oliver Ehli <elmy@acm.org>
+ * Copyright (C) 2003  Werner Koch <wk@gnupg.org>
+ *
+ *     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.
+ */
+
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "mime.h"
+#include "copy.h"
+#include "mutt_crypt.h"
+#include "pgp.h"
+
+#include <sys/wait.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <ctype.h>
+
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
+
+#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
+
+#ifdef HAVE_SYS_RESOURCE_H
+# include <sys/resource.h>
+#endif
+
+
+/* print the current time to avoid spoofing of the signature output */
+void crypt_current_time(STATE *s, char *app_name)
+{
+  time_t t;
+  char p[STRING], tmp[STRING];
+
+  if (!WithCrypto)
+    return;
+
+  if (option (OPTCRYPTTIMESTAMP))
+  {
+    t = time(NULL);
+    setlocale (LC_TIME, "");
+    strftime (p, sizeof (p), _(" (current time: %c)"), localtime (&t));
+    setlocale (LC_TIME, "C");
+  }
+  else
+    *p = '\0';
+
+  snprintf (tmp, sizeof (tmp), _("[-- %s output follows%s --]\n"), NONULL(app_name), p);
+  state_attach_puts (tmp, s);
+}
+
+
+
+void crypt_forget_passphrase (void)
+{
+  if ((WithCrypto & APPLICATION_PGP))
+    crypt_pgp_void_passphrase ();
+
+  if ((WithCrypto & APPLICATION_SMIME))
+    crypt_smime_void_passphrase ();
+
+  if (WithCrypto)
+    mutt_message _("Passphrase(s) forgotten.");
+}
+
+
+#if defined(HAVE_SETRLIMIT) && (!defined(DEBUG))
+
+static void disable_coredumps (void)
+{
+  struct rlimit rl = {0, 0};
+  static short done = 0;
+
+  if (!done)
+  {
+    setrlimit (RLIMIT_CORE, &rl);
+    done = 1;
+  }
+}
+
+#endif /* HAVE_SETRLIMIT */
+
+
+int crypt_valid_passphrase(int flags)
+{
+  time_t now = time (NULL);
+
+# if defined(HAVE_SETRLIMIT) &&(!defined(DEBUG))
+  disable_coredumps ();
+# endif
+
+  if ((WithCrypto & APPLICATION_PGP) && (flags & APPLICATION_PGP))
+  {
+    extern char PgpPass[STRING];
+    extern time_t PgpExptime;
+
+    if (pgp_use_gpg_agent())
+    {
+      *PgpPass = 0;
+      return 1; /* handled by gpg-agent */
+    }
+
+    if (now < PgpExptime) return 1; /* just use the cached copy. */
+    crypt_pgp_void_passphrase ();
+      
+    if (mutt_get_password (_("Enter PGP passphrase:"),
+                           PgpPass, sizeof (PgpPass)) == 0)
+    {
+      PgpExptime = time (NULL) + PgpTimeout;
+      return (1);
+    }
+    else
+      PgpExptime = 0;
+    }
+
+  if ((WithCrypto & APPLICATION_SMIME) && (flags & APPLICATION_SMIME))
+  {
+    extern char SmimePass[STRING];
+    extern time_t SmimeExptime;
+
+    if (now < SmimeExptime) return (1);
+    crypt_smime_void_passphrase ();
+      
+    if (mutt_get_password (_("Enter SMIME passphrase:"), SmimePass,
+                          sizeof (SmimePass)) == 0)
+    {
+      SmimeExptime = time (NULL) + SmimeTimeout;
+      return (1);
+    }
+    else
+      SmimeExptime = 0;
+  }
+
+  return (0);
+}
+
+
+
+int mutt_protect (HEADER *msg, HEADER *cur, char *keylist)
+{
+  BODY *pbody = NULL, *tmp_pbody = NULL;
+  BODY *tmp_smime_pbody = NULL;
+  BODY *tmp_pgp_pbody = NULL;
+  int traditional = 0;
+  int flags = (WithCrypto & APPLICATION_PGP)? msg->security: 0;
+  int i;
+
+  if (!WithCrypto)
+    return -1;
+
+  if ((msg->security & SIGN) && !crypt_valid_passphrase (msg->security))
+    return (-1);
+
+  if ((WithCrypto & APPLICATION_PGP) && (msg->security & APPLICATION_PGP))
+  {
+    if ((msg->content->type == TYPETEXT) &&
+       !ascii_strcasecmp (msg->content->subtype, "plain"))
+    {
+      if (cur && cur->security && option (OPTPGPAUTOTRAD)
+         && (option (OPTCRYPTREPLYENCRYPT)
+             || option (OPTCRYPTREPLYSIGN)
+             || option (OPTCRYPTREPLYSIGNENCRYPTED)))
+       {
+         if(mutt_is_application_pgp(cur->content))
+           traditional = 1;
+       }
+      else
+       {
+         if ((i = query_quadoption (OPT_PGPTRADITIONAL, _("Create a traditional (inline) PGP message?"))) == -1)
+           return -1;
+         else if (i == M_YES)
+           traditional = 1;
+       }
+    }
+    if (traditional)
+    {
+      if (!isendwin ()) mutt_endwin _("Invoking PGP...");
+      if (!(pbody = crypt_pgp_traditional_encryptsign (msg->content, flags, keylist)))
+       return -1;
+
+      msg->content = pbody;
+      return 0;
+    }
+  }
+
+  if (!isendwin ()) mutt_endwin (NULL);
+
+  if ((WithCrypto & APPLICATION_SMIME))
+    tmp_smime_pbody = msg->content;
+  if ((WithCrypto & APPLICATION_PGP))
+    tmp_pgp_pbody   = msg->content;
+
+  if (msg->security & SIGN)
+  {
+    if ((WithCrypto & APPLICATION_SMIME)
+        && (msg->security & APPLICATION_SMIME))
+    {
+      if (!(tmp_pbody = crypt_smime_sign_message (msg->content)))
+       return -1;
+      pbody = tmp_smime_pbody = tmp_pbody;
+    }
+
+    if ((WithCrypto & APPLICATION_PGP)
+        && (msg->security & APPLICATION_PGP)
+        && (!(flags & ENCRYPT) || option (OPTPGPRETAINABLESIG)))
+    {
+      if (!(tmp_pbody = crypt_pgp_sign_message (msg->content)))
+        return -1;
+
+      flags &= ~SIGN;
+      pbody = tmp_pgp_pbody = tmp_pbody;
+    }
+
+    if (WithCrypto
+        && (msg->security & APPLICATION_SMIME)
+       && (msg->security & APPLICATION_PGP))
+    {
+       /* here comes the draft ;-) */
+    }
+  }
+
+
+  if (msg->security & ENCRYPT)
+  {
+    if ((WithCrypto & APPLICATION_SMIME)
+        && (msg->security & APPLICATION_SMIME))
+    {
+      if (!(tmp_pbody = crypt_smime_build_smime_entity (tmp_smime_pbody,
+                                                        keylist)))
+      {
+       /* signed ? free it! */
+       return (-1);
+      }
+      /* free tmp_body if messages was signed AND encrypted ... */
+      if (tmp_smime_pbody != msg->content && tmp_smime_pbody != tmp_pbody)
+      {
+       /* detatch and dont't delete msg->content,
+          which tmp_smime_pbody->parts after signing. */
+       tmp_smime_pbody->parts = tmp_smime_pbody->parts->next;
+       msg->content->next = NULL;
+       mutt_free_body (&tmp_smime_pbody);
+      }
+      pbody = tmp_pbody;
+    }
+
+    if ((WithCrypto & APPLICATION_PGP)
+        && (msg->security & APPLICATION_PGP))
+    {
+      if (!(pbody = crypt_pgp_encrypt_message (tmp_pgp_pbody, keylist,
+                                               flags & SIGN)))
+      {
+
+       /* did we perform a retainable signature? */
+       if (flags != msg->security)
+       {
+         /* remove the outer multipart layer */
+         tmp_pgp_pbody = mutt_remove_multipart (tmp_pgp_pbody);
+         /* get rid of the signature */
+         mutt_free_body (&tmp_pgp_pbody->next);
+       }
+
+       return (-1);
+      }
+
+      /* destroy temporary signature envelope when doing retainable 
+       * signatures.
+       */
+      if (flags != msg->security)
+      {
+       tmp_pgp_pbody = mutt_remove_multipart (tmp_pgp_pbody);
+       mutt_free_body (&tmp_pgp_pbody->next);
+      }
+    }
+  }
+
+  if(pbody)
+      msg->content = pbody;
+
+  return 0;
+}
+
+
+   
+     
+int mutt_is_multipart_signed (BODY *b)
+{
+  char *p;
+
+  if (!b || !(b->type == TYPEMULTIPART) ||
+      !b->subtype || ascii_strcasecmp(b->subtype, "signed"))
+    return 0;
+
+  if (!(p = mutt_get_parameter("protocol", b->parameter)))
+    return 0;
+
+  if (!(ascii_strcasecmp (p, "multipart/mixed")))
+    return SIGN;
+
+  if ((WithCrypto & APPLICATION_PGP)
+      && !(ascii_strcasecmp (p, "application/pgp-signature")))
+    return PGPSIGN;
+    
+  if ((WithCrypto & APPLICATION_SMIME)
+      && !(ascii_strcasecmp (p, "application/x-pkcs7-signature")))
+    return SMIMESIGN;
+  if ((WithCrypto & APPLICATION_SMIME)
+      && !(ascii_strcasecmp (p, "application/pkcs7-signature")))
+    return SMIMESIGN;
+
+  return 0;
+}
+   
+     
+int mutt_is_multipart_encrypted (BODY *b)
+{
+  if ((WithCrypto & APPLICATION_PGP))
+  {
+    char *p;
+  
+    if (!b || b->type != TYPEMULTIPART ||
+        !b->subtype || ascii_strcasecmp (b->subtype, "encrypted") ||
+        !(p = mutt_get_parameter ("protocol", b->parameter)) ||
+        ascii_strcasecmp (p, "application/pgp-encrypted"))
+      return 0;
+  
+     return PGPENCRYPT;
+  }
+
+  return 0;
+}
+
+
+int mutt_is_application_pgp (BODY *m)
+{
+  int t = 0;
+  char *p;
+  
+  if (m->type == TYPEAPPLICATION)
+  {
+    if (!ascii_strcasecmp (m->subtype, "pgp") || !ascii_strcasecmp (m->subtype, "x-pgp-message"))
+    {
+      if ((p = mutt_get_parameter ("x-action", m->parameter))
+         && (!ascii_strcasecmp (p, "sign") || !ascii_strcasecmp (p, "signclear")))
+       t |= PGPSIGN;
+
+      if ((p = mutt_get_parameter ("format", m->parameter)) && 
+         !ascii_strcasecmp (p, "keys-only"))
+       t |= PGPKEY;
+
+      if(!t) t |= PGPENCRYPT;  /* not necessarily correct, but... */
+    }
+
+    if (!ascii_strcasecmp (m->subtype, "pgp-signed"))
+      t |= PGPSIGN;
+
+    if (!ascii_strcasecmp (m->subtype, "pgp-keys"))
+      t |= PGPKEY;
+  }
+  else if (m->type == TYPETEXT && ascii_strcasecmp ("plain", m->subtype) == 0)
+  {
+    if (((p = mutt_get_parameter ("x-mutt-action", m->parameter))
+        || (p = mutt_get_parameter ("x-action", m->parameter)) 
+        || (p = mutt_get_parameter ("action", m->parameter)))
+        && !ascii_strncasecmp ("pgp-sign", p, 8))
+      t |= PGPSIGN;
+    else if (p && !ascii_strncasecmp ("pgp-encrypt", p, 11))
+      t |= PGPENCRYPT;
+    else if (p && !ascii_strncasecmp ("pgp-keys", p, 7))
+      t |= PGPKEY;
+  }
+  return t;
+}
+
+int mutt_is_application_smime (BODY *m)
+{
+  char *t=NULL;
+  int len, complain=0;
+
+  if ((m->type & TYPEAPPLICATION) && m->subtype)
+  {
+    /* S/MIME MIME types don't need x- anymore, see RFC2311 */
+    if (!ascii_strcasecmp (m->subtype, "x-pkcs7-mime") ||
+       !ascii_strcasecmp (m->subtype, "pkcs7-mime"))
+    {
+      if ((t = mutt_get_parameter ("smime-type", m->parameter)))
+      {
+       if (!ascii_strcasecmp (t, "enveloped-data"))
+         return SMIMEENCRYPT;
+       else if (!ascii_strcasecmp (t, "signed-data"))
+         return (SMIMESIGN|SMIMEOPAQUE);
+       else return 0;
+      }
+      /* Netscape 4.7 uses 
+       * Content-Description: S/MIME Encrypted Message
+       * instead of Content-Type parameter
+       */
+      if (!ascii_strcasecmp (m->description, "S/MIME Encrypted Message"))
+       return SMIMEENCRYPT;
+      complain = 1;
+    }
+    else if (ascii_strcasecmp (m->subtype, "octet-stream"))
+      return 0;
+
+    t = mutt_get_parameter ("name", m->parameter);
+
+    if (!t) t = m->d_filename;
+    if (!t) t = m->filename;
+    if (!t) 
+    {
+      if (complain)
+       mutt_message (_("S/MIME messages with no hints on content are unsupported."));
+      return 0;
+    }
+
+    /* no .p7c, .p10 support yet. */
+
+    len = mutt_strlen (t) - 4;
+    if (len > 0 && *(t+len) == '.')
+    {
+      len++;
+      if (!ascii_strcasecmp ((t+len), "p7m"))
+#if 0
+       return SMIMEENCRYPT;
+#else
+      /* Not sure if this is the correct thing to do, but 
+         it's required for compatibility with Outlook */
+       return (SMIMESIGN|SMIMEOPAQUE);
+#endif
+      else if (!ascii_strcasecmp ((t+len), "p7s"))
+       return (SMIMESIGN|SMIMEOPAQUE);
+    }
+  }
+
+  return 0;
+}
+
+
+
+
+
+
+int crypt_query (BODY *m)
+{
+  int t = 0;
+
+  if (!WithCrypto)
+    return 0;
+  
+  if (!m)
+    return 0;
+
+  if (m->type == TYPEAPPLICATION)
+  {
+    if ((WithCrypto & APPLICATION_PGP))
+      t |= mutt_is_application_pgp(m);
+
+    if ((WithCrypto & APPLICATION_SMIME))
+    {
+      t |= mutt_is_application_smime(m);
+      if (t && m->goodsig) t |= GOODSIGN;
+      if (t && m->badsig) t |= BADSIGN;
+    }
+  }
+  else if ((WithCrypto & APPLICATION_PGP) && m->type == TYPETEXT)
+  {
+    t |= mutt_is_application_pgp (m);
+    if (t && m->goodsig)
+      t |= GOODSIGN;
+  }
+  
+  if (m->type == TYPEMULTIPART)
+  {
+    t |= mutt_is_multipart_encrypted(m);
+    t |= mutt_is_multipart_signed (m);
+
+    if (t && m->goodsig) 
+      t |= GOODSIGN;
+  }
+
+  if (m->type == TYPEMULTIPART || m->type == TYPEMESSAGE)
+  {
+    BODY *p;
+    int u, v, w;
+    
+    u = m->parts ? 0xffffffff : 0;     /* Bits set in all parts */
+    w = 0;                             /* Bits set in any part  */
+    for (p = m->parts; p; p = p->next)
+    {
+      v  = crypt_query (p);
+      u &= v; w |= v;
+    }
+    t |= u | (w & ~GOODSIGN);
+    
+    if ((w & GOODSIGN) && !(u & GOODSIGN))
+      t |= PARTSIGN;
+  }
+
+  return t;
+}
+
+
+
+
+int crypt_write_signed(BODY *a, STATE *s, const char *tempfile)
+{
+  FILE *fp;
+  int c;
+  short hadcr;
+  size_t bytes;
+
+  if (!WithCrypto)
+    return -1;
+
+  if (!(fp = safe_fopen (tempfile, "w")))
+  {
+    mutt_perror (tempfile);
+    return -1;
+  }
+      
+  fseek (s->fpin, a->hdr_offset, 0);
+  bytes = a->length + a->offset - a->hdr_offset;
+  hadcr = 0;
+  while (bytes > 0)
+  {
+    if ((c = fgetc (s->fpin)) == EOF)
+      break;
+    
+    bytes--;
+    
+    if  (c == '\r')
+      hadcr = 1;
+    else 
+    {
+      if (c == '\n' && !hadcr)
+       fputc ('\r', fp);
+      
+      hadcr = 0;
+    }
+    
+    fputc (c, fp);
+    
+  }
+  fclose (fp);
+
+  return 0;
+}
+
+
+
+void convert_to_7bit (BODY *a)
+{
+  if (!WithCrypto)
+    return;
+
+  while (a)
+  {
+    if (a->type == TYPEMULTIPART)
+    {
+      if (a->encoding != ENC7BIT)
+      {
+        a->encoding = ENC7BIT;
+       convert_to_7bit(a->parts);
+      }
+      else if ((WithCrypto & APPLICATION_PGP) && option (OPTPGPSTRICTENC))
+       convert_to_7bit (a->parts);
+    } 
+    else if (a->type == TYPEMESSAGE &&
+            mutt_strcasecmp(a->subtype, "delivery-status"))
+    {
+      if(a->encoding != ENC7BIT)
+       mutt_message_to_7bit (a, NULL);
+    }
+    else if (a->encoding == ENC8BIT)
+      a->encoding = ENCQUOTEDPRINTABLE;
+    else if (a->encoding == ENCBINARY)
+      a->encoding = ENCBASE64;
+    else if (a->content && a->encoding != ENCBASE64 &&
+            (a->content->from || (a->content->space && 
+                                  option (OPTPGPSTRICTENC))))
+      a->encoding = ENCQUOTEDPRINTABLE;
+    a = a->next;
+  }
+}
+
+
+
+
+void crypt_extract_keys_from_messages (HEADER * h)
+{
+  int i;
+  char tempfname[_POSIX_PATH_MAX], *mbox;
+  ADDRESS *tmp = NULL;
+  FILE *fpout;
+
+  if (!WithCrypto)
+    return;
+
+  mutt_mktemp (tempfname);
+  if (!(fpout = safe_fopen (tempfname, "w")))
+  {
+    mutt_perror (tempfname);
+    return;
+  }
+
+  if ((WithCrypto & APPLICATION_PGP))
+    set_option (OPTDONTHANDLEPGPKEYS);
+
+  if (!h)
+  {
+    for (i = 0; i < Context->vcount; i++)
+    {
+      if (Context->hdrs[Context->v2r[i]]->tagged)
+      {
+       mutt_parse_mime_message (Context, Context->hdrs[Context->v2r[i]]);
+       if (Context->hdrs[Context->v2r[i]]->security & ENCRYPT &&
+           !crypt_valid_passphrase (Context->hdrs[Context->v2r[i]]->security))
+       {
+         fclose (fpout);
+         break;
+       }
+
+       if ((WithCrypto & APPLICATION_PGP)
+            && (Context->hdrs[Context->v2r[i]]->security & APPLICATION_PGP))
+       {
+         mutt_copy_message (fpout, Context, Context->hdrs[Context->v2r[i]], 
+                            M_CM_DECODE|M_CM_CHARCONV, 0);
+         fflush(fpout);
+         
+         mutt_endwin (_("Trying to extract PGP keys...\n"));
+         crypt_pgp_invoke_import (tempfname);
+       }
+
+       if ((WithCrypto & APPLICATION_SMIME)
+            && (Context->hdrs[Context->v2r[i]]->security & APPLICATION_SMIME))
+       {
+         if (Context->hdrs[Context->v2r[i]]->security & ENCRYPT)
+           mutt_copy_message (fpout, Context, Context->hdrs[Context->v2r[i]],
+                              M_CM_NOHEADER|M_CM_DECODE_CRYPT
+                               |M_CM_DECODE_SMIME, 0);
+         else
+           mutt_copy_message (fpout, Context,
+                              Context->hdrs[Context->v2r[i]], 0, 0);
+         fflush(fpout);
+
+          if (Context->hdrs[Context->v2r[i]]->env->from)
+           tmp = mutt_expand_aliases (h->env->from);
+         else if (Context->hdrs[Context->v2r[i]]->env->sender)
+           tmp = mutt_expand_aliases (Context->hdrs[Context->v2r[i]]
+                                                    ->env->sender);
+          mbox = tmp ? tmp->mailbox : NULL;
+         if (mbox)
+         {
+           mutt_endwin (_("Trying to extract S/MIME certificates...\n"));
+           crypt_smime_invoke_import (tempfname, mbox);
+           tmp = NULL;
+         }
+       }
+
+       rewind (fpout);
+      }
+    }
+  }
+  else
+  {
+    mutt_parse_mime_message (Context, h);
+    if (!(h->security & ENCRYPT && !crypt_valid_passphrase (h->security)))
+    {
+      if ((WithCrypto & APPLICATION_PGP)
+          && (h->security & APPLICATION_PGP))
+      {
+       mutt_copy_message (fpout, Context, h, M_CM_DECODE|M_CM_CHARCONV, 0);
+       fflush(fpout);
+       mutt_endwin (_("Trying to extract PGP keys...\n"));
+       crypt_pgp_invoke_import (tempfname);
+      }
+
+      if ((WithCrypto & APPLICATION_SMIME)
+          && (h->security & APPLICATION_SMIME))
+      {
+       if (h->security & ENCRYPT)
+         mutt_copy_message (fpout, Context, h, M_CM_NOHEADER
+                                                |M_CM_DECODE_CRYPT
+                                                |M_CM_DECODE_SMIME, 0);
+       else
+         mutt_copy_message (fpout, Context, h, 0, 0);
+
+       fflush(fpout);
+       if (h->env->from) tmp = mutt_expand_aliases (h->env->from);
+       else if (h->env->sender)  tmp = mutt_expand_aliases (h->env->sender); 
+       mbox = tmp ? tmp->mailbox : NULL;
+       if (mbox) /* else ? */
+       {
+         mutt_message (_("Trying to extract S/MIME certificates...\n"));
+         crypt_smime_invoke_import (tempfname, mbox);
+       }
+      }
+    }
+  }
+      
+  fclose (fpout);
+  if (isendwin())
+    mutt_any_key_to_continue (NULL);
+
+  mutt_unlink (tempfname);
+
+  if ((WithCrypto & APPLICATION_PGP))
+    unset_option (OPTDONTHANDLEPGPKEYS);
+}
+
+
+
+int crypt_get_keys (HEADER *msg, char **keylist)
+{
+  /* Do a quick check to make sure that we can find all of the encryption
+   * keys if the user has requested this service.
+   */
+
+  if (!WithCrypto)
+    return 0;
+
+  if ((WithCrypto & APPLICATION_PGP))
+    set_option (OPTPGPCHECKTRUST);
+
+  *keylist = NULL;
+
+  if (msg->security & ENCRYPT)
+  {
+     if ((WithCrypto & APPLICATION_PGP)
+         && (msg->security & APPLICATION_PGP))
+     {
+       if ((*keylist = crypt_pgp_findkeys (msg->env->to, msg->env->cc,
+                              msg->env->bcc)) == NULL)
+           return (-1);
+       unset_option (OPTPGPCHECKTRUST);
+     }
+     if ((WithCrypto & APPLICATION_SMIME)
+         && (msg->security & APPLICATION_SMIME))
+     {
+       if ((*keylist = crypt_smime_findkeys (msg->env->to, msg->env->cc,
+                                            msg->env->bcc)) == NULL)
+           return (-1);
+     }
+  }
+    
+  return (0);
+}
+
+
+
+static void crypt_fetch_signatures (BODY ***signatures, BODY *a, int *n)
+{
+  if (!WithCrypto)
+    return;
+
+  for (; a; a = a->next)
+  {
+    if (a->type == TYPEMULTIPART)
+      crypt_fetch_signatures (signatures, a->parts, n);
+    else
+    {
+      if((*n % 5) == 0)
+       safe_realloc (signatures, (*n + 6) * sizeof (BODY **));
+
+      (*signatures)[(*n)++] = a;
+    }
+  }
+}
+
+
+/*
+ * This routine verifies a  "multipart/signed"  body.
+ */
+
+void mutt_signed_handler (BODY *a, STATE *s)
+{
+  char tempfile[_POSIX_PATH_MAX];
+  char *protocol;
+  int protocol_major = TYPEOTHER;
+  char *protocol_minor = NULL;
+  
+  BODY *b = a;
+  BODY **signatures = NULL;
+  int sigcnt = 0;
+  int i;
+  short goodsig = 1;
+
+  if (!WithCrypto)
+    return;
+
+  protocol = mutt_get_parameter ("protocol", a->parameter);
+  a = a->parts;
+
+  /* extract the protocol information */
+  
+  if (protocol)
+  {
+    char major[STRING];
+    char *t;
+
+    if ((protocol_minor = strchr (protocol, '/'))) protocol_minor++;
+    
+    strfcpy (major, protocol, sizeof(major));
+    if((t = strchr(major, '/')))
+      *t = '\0';
+    
+    protocol_major = mutt_check_mime_type (major);
+  }
+
+  /* consistency check */
+
+  if (!(a && a->next && a->next->type == protocol_major && 
+      !mutt_strcasecmp (a->next->subtype, protocol_minor)))
+  {
+    state_attach_puts (_("[-- Error: "
+                         "Inconsistent multipart/signed structure! --]\n\n"),
+                       s);
+    mutt_body_handler (a, s);
+    return;
+  }
+
+  
+  if ((WithCrypto & APPLICATION_PGP)
+      && protocol_major == TYPEAPPLICATION
+      && !mutt_strcasecmp (protocol_minor, "pgp-signature"))
+    ;
+  else if ((WithCrypto & APPLICATION_SMIME)
+           && protocol_major == TYPEAPPLICATION
+          && !(mutt_strcasecmp (protocol_minor, "x-pkcs7-signature")
+              && mutt_strcasecmp (protocol_minor, "pkcs7-signature")))
+    ;
+  else if (protocol_major == TYPEMULTIPART
+          && !mutt_strcasecmp (protocol_minor, "mixed"))
+    ;
+  else
+  {
+    state_printf (s, _("[-- Error: "
+                       "Unknown multipart/signed protocol %s! --]\n\n"),
+                  protocol);
+    mutt_body_handler (a, s);
+    return;
+  }
+  
+  if (s->flags & M_DISPLAY)
+  {
+    
+    crypt_fetch_signatures (&signatures, a->next, &sigcnt);
+    
+    if (sigcnt)
+    {
+      mutt_mktemp (tempfile);
+      if (crypt_write_signed (a, s, tempfile) == 0)
+      {
+       for (i = 0; i < sigcnt; i++)
+       {
+         if ((WithCrypto & APPLICATION_PGP)
+              && signatures[i]->type == TYPEAPPLICATION 
+             && !mutt_strcasecmp (signatures[i]->subtype, "pgp-signature"))
+         {
+           if (crypt_pgp_verify_one (signatures[i], s, tempfile) != 0)
+             goodsig = 0;
+           
+           continue;
+         }
+
+         if ((WithCrypto & APPLICATION_SMIME)
+              && signatures[i]->type == TYPEAPPLICATION 
+             && (!mutt_strcasecmp(signatures[i]->subtype, "x-pkcs7-signature")
+                 || !mutt_strcasecmp(signatures[i]->subtype, "pkcs7-signature")))
+         {
+           if (crypt_smime_verify_one (signatures[i], s, tempfile) != 0)
+             goodsig = 0;
+           
+           continue;
+         }
+
+         state_printf (s, _("[-- Warning: "
+                             "We can't verify %s/%s signatures. --]\n\n"),
+                         TYPE(signatures[i]), signatures[i]->subtype);
+       }
+      }
+      
+      mutt_unlink (tempfile);
+
+      b->goodsig = goodsig;
+      b->badsig  = !goodsig;
+      
+      /* Now display the signed body */
+      state_attach_puts (_("[-- The following data is signed --]\n\n"), s);
+
+
+      FREE (&signatures);
+    }
+    else
+      state_attach_puts (_("[-- Warning: Can't find any signatures. --]\n\n"), s);
+  }
+  
+  mutt_body_handler (a, s);
+  
+  if (s->flags & M_DISPLAY && sigcnt)
+    state_attach_puts (_("\n[-- End of signed data --]\n"), s);
+}
+
+
diff --git a/cryptglue.c b/cryptglue.c
new file mode 100644 (file)
index 0000000..ce81860
--- /dev/null
@@ -0,0 +1,416 @@
+/*
+ * Copyright (C) 2003  Werner Koch <wk@gnupg.org>
+ *
+ *     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.
+ */
+
+/*
+   This file dispatches the generic crytpo functions to the implemented
+   backend or provides dummy stubs.  Note, that some generic functions are
+   handled in crypt.c.
+*/
+
+#include "mutt.h"
+#include "mutt_crypt.h"
+
+/* Make sure those macros are not defined. */
+#undef BFNC_PGP_VOID_PASSPHRASE     
+#undef BFNC_PGP_DECRYPT_MIME           
+#undef BFNC_PGP_APPLICATION_PGP_HANDLER
+#undef BFNC_PGP_ENCRYPTED_HANDLER
+#undef BFNC_PGP_INVOKE_GETKEYS
+#undef BFNC_PGP_ASK_FOR_KEY
+#undef BNFC_PGP_CHECK_TRADITIONAL
+#undef BFNC_PGP_TRADITIONAL_ENCRYPTSIGN  
+#undef BFNC_PGP_FREE_KEY
+#undef BFNC_PGP_MAKE_KEY_ATTACHMENT 
+#undef BFNC_PGP_FINDKEYS
+#undef BFNC_PGP_SIGN_MESSAGE
+#undef BFNC_PGP_ENCRYPT_MESSAGE
+#undef BFNC_PGP_INVOKE_IMPORT
+#undef BFNC_PGP_VERIFY_ONE
+#undef BFNC_PGP_KEYID
+#undef BFNC_PGP_EXTRACT_KEYS_FROM_ATTACHMENT_LIST
+
+#undef BFNC_SMIME_VOID_PASSPHRASE 
+#undef BFNC_SMIME_DECRYPT_MIME    
+#undef BFNC_SMIME_APPLICATION_SMIME_HANDLER 
+#undef BFNC_SMIME_GETKEYS  
+#undef BFNC_SMIME_VERIFY_SENDER
+#undef BFNC_SMIME_ASK_FOR_KEY
+#undef BFNC_SMIME_FINDKEYS
+#undef BFNC_SMIME_SIGN_MESSAGE
+#undef BFNC_SMIME_BUILD_SMIME_ENTITY
+#undef BFNC_SMIME_INVOKE_IMPORT
+#undef BFNC_SMIME_VERIFY_ONE
+
+
+/* The PGP backend */
+#if defined (CRYPT_BACKEND_CLASSIC_PGP)
+# include "pgp.h"
+# define BFNC_PGP_VOID_PASSPHRASE         pgp_void_passphrase
+# define BFNC_PGP_DECRYPT_MIME            pgp_decrypt_mime
+# define BFNC_PGP_APPLICATION_PGP_HANDLER pgp_application_pgp_handler
+# define BFNC_PGP_ENCRYPTED_HANDLER       pgp_encrypted_handler
+# define BFNC_PGP_INVOKE_GETKEYS          pgp_invoke_getkeys
+# define BFNC_PGP_ASK_FOR_KEY             pgp_ask_for_key
+# define BNFC_PGP_CHECK_TRADITIONAL       pgp_check_traditional
+# define BFNC_PGP_TRADITIONAL_ENCRYPTSIGN pgp_traditional_encryptsign 
+# define BFNC_PGP_FREE_KEY                pgp_free_key
+# define BFNC_PGP_MAKE_KEY_ATTACHMENT     pgp_make_key_attachment
+# define BFNC_PGP_FINDKEYS                pgp_findKeys
+# define BFNC_PGP_SIGN_MESSAGE            pgp_sign_message
+# define BFNC_PGP_ENCRYPT_MESSAGE         pgp_encrypt_message
+# define BFNC_PGP_INVOKE_IMPORT           pgp_invoke_import
+# define BFNC_PGP_VERIFY_ONE              pgp_verify_one
+# define BFNC_PGP_KEYID                   pgp_keyid
+# define BFNC_PGP_EXTRACT_KEYS_FROM_ATTACHMENT_LIST \
+                                       pgp_extract_keys_from_attachment_list
+
+
+#elif defined (CRYPT_BACKEND_GPGME)
+# include "crypt-gpgme.h"
+# define BFNC_PGP_VOID_PASSPHRASE NULL /* not required */
+# define BFNC_PGP_DECRYPT_MIME     gpg_pgp_decrypt_mime
+
+#endif /* PGP backend */
+
+
+/* The SMIME backend */
+#ifdef CRYPT_BACKEND_CLASSIC_SMIME
+# include "smime.h"
+# define BFNC_SMIME_VOID_PASSPHRASE           smime_void_passphrase
+# define BFNC_SMIME_DECRYPT_MIME              smime_decrypt_mime
+# define BFNC_SMIME_APPLICATION_SMIME_HANDLER smime_application_smime_handler
+# define BFNC_SMIME_GETKEYS                   smime_getkeys
+# define BFNC_SMIME_VERIFY_SENDER             smime_verify_sender
+# define BFNC_SMIME_ASK_FOR_KEY               smime_ask_for_key
+# define BFNC_SMIME_FINDKEYS                  smime_findKeys
+# define BFNC_SMIME_SIGN_MESSAGE              smime_sign_message
+# define BFNC_SMIME_BUILD_SMIME_ENTITY        smime_build_smime_entity
+# define BFNC_SMIME_INVOKE_IMPORT             smime_invoke_import
+# define BFNC_SMIME_VERIFY_ONE            smime_verify_one
+
+#elif defined (CRYPT_BACKEND_GPGME)
+  /* Already included above (gpgme supports both). */ 
+# define BFNC_SMIME_VOID_PASSPHRASE NULL /* not required */
+
+#endif /* SMIME backend */
+
+\f
+/*
+    
+    Generic
+
+*/
+
+/* Show a message that a backend will be invoked. */
+void crypt_invoke_message (int type)
+{
+#if defined (CRYPT_BACKEND_CLASSIC_PGP) || defined(CRYPT_BACKEND_CLASSIC_SMIME)
+  if ((type & APPLICATION_PGP))
+    mutt_message _("Invoking PGP...");
+  if ((type & APPLICATION_SMIME))
+    mutt_message _("Invoking OpenSSL...");
+#elif defined (CRYPT_BACKEND_GPGME)
+  if ((type & APPLICATION_PGP) || (type & APPLICATION_SMIME) )
+    mutt_message _("Invoking GnuPG...");
+#endif
+}
+
+
+\f
+/* 
+
+    PGP
+
+*/
+
+
+/* Reset a PGP passphrase */
+void crypt_pgp_void_passphrase (void)
+{
+#ifdef BFNC_PGP_VOID_PASSPHRASE
+  BFNC_PGP_VOID_PASSPHRASE ();
+#endif
+}
+
+/* Decrypt a PGP/MIME message. */
+int crypt_pgp_decrypt_mime (FILE *a, FILE **b, BODY *c, BODY **d)
+{
+#ifdef BFNC_PGP_DECRYPT_MIME
+  return BFNC_PGP_DECRYPT_MIME (a, b, c, d);
+#else
+  return -1; /* error */
+#endif
+}
+
+/* MIME handler for the application/pgp content-type. */
+void crypt_pgp_application_pgp_handler (BODY *m, STATE *s)
+{
+#ifdef BFNC_PGP_APPLICATION_PGP_HANDLER
+  BFNC_PGP_APPLICATION_PGP_HANDLER (m, s);
+#endif
+}
+
+/* MIME handler for an PGP/MIME encrypted message. */
+void crypt_pgp_encrypted_handler (BODY *a, STATE *s)
+{
+#ifdef BFNC_PGP_ENCRYPTED_HANDLER
+  BFNC_PGP_ENCRYPTED_HANDLER (a, s);
+#endif
+}
+
+/* fixme: needs documentation. */
+void crypt_pgp_invoke_getkeys (ADDRESS *addr)
+{
+#ifdef BFNC_PGP_INVOKE_GETKEYS
+  BFNC_PGP_INVOKE_GETKEYS (addr);
+#endif
+}
+
+/* Ask for a PGP key. */
+pgp_key_t crypt_pgp_ask_for_key (char *tag, char *whatfor,
+                                 short abilities, pgp_ring_t keyring)
+{
+#ifdef BFNC_PGP_ASK_FOR_KEY
+  return BFNC_PGP_ASK_FOR_KEY (tag, whatfor, abilities, keyring);
+#else
+  return NULL;
+#endif
+}
+
+
+/* Check for a traditional PGP message in body B. */
+int crypt_pgp_check_traditional (FILE *fp, BODY *b, int tagged_only)
+{
+#ifdef BNFC_PGP_CHECK_TRADITIONAL
+  return BNFC_PGP_CHECK_TRADITIONAL (fp, b, tagged_only);
+#else
+  return 0; /* no */
+#endif
+}
+
+/* fixme: needs documentation. */
+BODY *crypt_pgp_traditional_encryptsign (BODY *a, int flags, char *keylist)
+{
+#ifdef BFNC_PGP_TRADITIONAL_ENCRYPTSIGN  
+  return BFNC_PGP_TRADITIONAL_ENCRYPTSIGN (a, flags, keylist);
+#else
+  return NULL;
+#endif
+}
+
+/* Release pgp key KPP. */
+void crypt_pgp_free_key (pgp_key_t *kpp)
+{
+#ifdef BFNC_PGP_FREE_KEY
+  BFNC_PGP_FREE_KEY (kpp);
+#endif
+}
+
+
+/* Generate a PGP public key attachment. */
+BODY *crypt_pgp_make_key_attachment (char *tempf)
+{
+#ifdef BFNC_PGP_MAKE_KEY_ATTACHMENT 
+  return BFNC_PGP_MAKE_KEY_ATTACHMENT (tempf);
+#else
+  return NULL; /* error */ 
+#endif
+}
+
+/* This routine attempts to find the keyids of the recipients of a
+   message.  It returns NULL if any of the keys can not be found.  */
+char *crypt_pgp_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
+{
+#ifdef BFNC_PGP_FINDKEYS
+  return BFNC_PGP_FINDKEYS (to, cc, bcc);
+#else
+  return NULL;
+#endif
+}
+
+/* Create a new body with a PGP signed message from A. */
+BODY *crypt_pgp_sign_message (BODY *a)
+{
+#ifdef BFNC_PGP_SIGN_MESSAGE
+  return BFNC_PGP_SIGN_MESSAGE (a);
+#else
+  return NULL;
+#endif
+}
+
+/* Warning: A is no longer freed in this routine, you need to free it
+   later.  This is necessary for $fcc_attach. */
+BODY *crypt_pgp_encrypt_message (BODY *a, char *keylist, int sign)
+{
+#ifdef BFNC_PGP_ENCRYPT_MESSAGE
+  return BFNC_PGP_ENCRYPT_MESSAGE (a, keylist, sign);
+#else
+  return NULL;
+#endif
+}
+
+/* Invoke the PGP command to import a key. */
+void crypt_pgp_invoke_import (const char *fname)
+{
+#ifdef BFNC_PGP_INVOKE_IMPORT
+  BFNC_PGP_INVOKE_IMPORT (fname);
+#endif
+}
+
+/* fixme: needs documentation */
+int crypt_pgp_verify_one (BODY *sigbdy, STATE *s, const char *tempf)
+{
+#ifdef BFNC_PGP_VERIFY_ONE
+  return BFNC_PGP_VERIFY_ONE (sigbdy, s, tempf);
+#else
+  return -1;
+#endif
+}
+
+
+/* Access the keyID in K. */
+char *crypt_pgp_keyid (pgp_key_t k)
+{
+#ifdef BFNC_PGP_KEYID
+  return pgp_keyid (k);
+#else
+  return "?";
+#endif
+}
+
+/* fixme: needs documentation */
+void crypt_pgp_extract_keys_from_attachment_list (FILE *fp, int tag, BODY *top)
+{
+#ifdef BFNC_PGP_EXTRACT_KEYS_FROM_ATTACHMENT_LIST
+  BFNC_PGP_EXTRACT_KEYS_FROM_ATTACHMENT_LIST (fp, tag, top);
+#endif
+}
+
+
+\f
+/* 
+
+   S/MIME 
+
+*/
+
+
+/* Reset an SMIME passphrase */
+void crypt_smime_void_passphrase (void)
+{
+#ifdef BFNC_SMIME_VOID_PASSPHRASE
+  BFNC_SMIME_VOID_PASSPHRASE ();
+#endif
+}
+
+
+/* Decrypt am S/MIME message. */
+int crypt_smime_decrypt_mime (FILE *a, FILE **b, BODY *c, BODY **d)
+{
+#ifdef BFNC_SMIME_DECRYPT_MIME
+  return BFNC_SMIME_DECRYPT_MIME (a, b, c, d);
+#else
+  return -1; /* error */
+#endif
+}
+
+/* MIME handler for the application/smime content-type. */
+void crypt_smime_application_smime_handler (BODY *m, STATE *s)
+{
+#ifdef BFNC_SMIME_APPLICATION_SMIME_HANDLER
+  BFNC_SMIME_APPLICATION_SMIME_HANDLER (m, s);
+#endif
+}
+
+/* fixme: Needs documentation. */
+void crypt_smime_getkeys (ENVELOPE *env)
+{
+#ifdef BFNC_SMIME_GETKEYS  
+  BFNC_SMIME_GETKEYS (env);
+#endif
+}
+
+/* Check that the sender matches. */
+int crypt_smime_verify_sender(HEADER *h)
+{
+#ifdef BFNC_SMIME_VERIFY_SENDER
+  return BFNC_SMIME_VERIFY_SENDER (h);
+#else
+  return 1; /* yes */
+#endif
+}
+
+/* Ask for an SMIME key. */
+char *crypt_smime_ask_for_key (char *prompt, char *mailbox, short public)
+{
+#ifdef BFNC_SMIME_ASK_FOR_KEY
+  return BFNC_SMIME_ASK_FOR_KEY (prompt, mailbox, public);
+#else
+  return NULL; /* error */
+#endif
+}
+
+
+/* This routine attempts to find the keyids of the recipients of a
+   message.  It returns NULL if any of the keys can not be found.  */
+char *crypt_smime_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
+{
+#ifdef BFNC_SMIME_FINDKEYS
+  return BFNC_SMIME_FINDKEYS (to, cc, bcc);
+#else
+  return NULL;
+#endif
+}
+
+/* fixme: Needs documentation. */
+BODY *crypt_smime_sign_message (BODY *a)
+{
+#ifdef BFNC_SMIME_SIGN_MESSAGE
+  return BFNC_SMIME_SIGN_MESSAGE (a);
+#else
+  return NULL;
+#endif
+}
+
+/* fixme: needs documentation. */
+BODY *crypt_smime_build_smime_entity (BODY *a, char *certlist)
+{
+#ifdef BFNC_SMIME_BUILD_SMIME_ENTITY
+  return BFNC_SMIME_BUILD_SMIME_ENTITY (a, certlist);
+#else
+  return NULL;
+#endif
+}
+
+/* Add a certificate and update index file (externally). */
+void crypt_smime_invoke_import (char *infile, char *mailbox)
+{
+#ifdef BFNC_SMIME_INVOKE_IMPORT
+  BFNC_SMIME_INVOKE_IMPORT (infile, mailbox);
+#endif
+}
+
+/* fixme: needs documentation */
+int crypt_smime_verify_one (BODY *sigbdy, STATE *s, const char *tempf)
+{
+#ifdef BFNC_SMIME_VERIFY_ONE
+  return BFNC_SMIME_VERIFY_ONE (sigbdy, s, tempf);
+#else
+  return -1;
+#endif
+}
diff --git a/curs_lib.c b/curs_lib.c
new file mode 100644 (file)
index 0000000..0f38f05
--- /dev/null
@@ -0,0 +1,712 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_menu.h"
+#include "mutt_curses.h"
+#include "pager.h"
+#include "mbyte.h"
+
+#include <termios.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+
+#ifdef HAVE_LANGINFO_YESEXPR
+#include <langinfo.h>
+#endif
+
+/* not possible to unget more than one char under some curses libs, and it
+ * is impossible to unget function keys in SLang, so roll our own input
+ * buffering routines.
+ */
+size_t UngetCount = 0;
+static size_t UngetBufLen = 0;
+static event_t *KeyEvent;
+
+void mutt_refresh (void)
+{
+  /* don't refresh when we are waiting for a child. */
+  if (option (OPTKEEPQUIET))
+    return;
+
+  /* don't refresh in the middle of macros unless necessary */
+  if (UngetCount && !option (OPTFORCEREFRESH))
+    return;
+
+  /* else */
+  refresh ();
+}
+
+event_t mutt_getch (void)
+{
+  int ch;
+  event_t err = {-1, OP_NULL }, ret;
+
+  if (!option(OPTUNBUFFEREDINPUT) && UngetCount)
+    return (KeyEvent[--UngetCount]);
+
+  SigInt = 0;
+
+  mutt_allow_interrupt (1);
+#ifdef KEY_RESIZE
+  /* ncurses 4.2 sends this when the screen is resized */
+  ch = KEY_RESIZE;
+  while (ch == KEY_RESIZE)
+#endif /* KEY_RESIZE */
+    ch = getch ();
+  mutt_allow_interrupt (0);
+
+  if (SigInt)
+    mutt_query_exit ();
+
+  if(ch == ERR)
+    return err;
+  
+  if ((ch & 0x80) && option (OPTMETAKEY))
+  {
+    /* send ALT-x as ESC-x */
+    ch &= ~0x80;
+    mutt_ungetch (ch, 0);
+    ret.ch = '\033';
+    ret.op = 0;
+    return ret;
+  }
+
+  ret.ch = ch;
+  ret.op = 0;
+  return (ch == ctrl ('G') ? err : ret);
+}
+
+int _mutt_get_field (/* const */ char *field, char *buf, size_t buflen, int complete, int multiple, char ***files, int *numfiles)
+{
+  int ret;
+  int x, y;
+
+  ENTER_STATE *es = mutt_new_enter_state();
+  
+  do
+  {
+    CLEARLINE (LINES-1);
+    addstr (field);
+    mutt_refresh ();
+    getyx (stdscr, y, x);
+    ret = _mutt_enter_string (buf, buflen, y, x, complete, multiple, files, numfiles, es);
+  }
+  while (ret == 1);
+  CLEARLINE (LINES-1);
+  mutt_free_enter_state (&es);
+  
+  return (ret);
+}
+
+int mutt_get_password (char *msg, char *buf, size_t buflen)
+{
+  int rc;
+  
+  CLEARLINE (LINES-1);
+  addstr (msg);
+  set_option (OPTUNBUFFEREDINPUT);
+  rc = mutt_enter_string (buf, buflen, LINES - 1, mutt_strlen (msg), M_PASS);
+  unset_option (OPTUNBUFFEREDINPUT);
+  CLEARLINE (LINES-1);
+  return (rc);
+}
+
+void mutt_clear_error (void)
+{
+  Errorbuf[0] = 0;
+  if (!option(OPTNOCURSES))
+    CLEARLINE (LINES-1);
+}
+
+void mutt_edit_file (const char *editor, const char *data)
+{
+  char cmd[LONG_STRING];
+  
+  mutt_endwin (NULL);
+  mutt_expand_file_fmt (cmd, sizeof (cmd), editor, data);
+  if (mutt_system (cmd) == -1)
+    mutt_error (_("Error running \"%s\"!"), cmd);
+  keypad (stdscr, TRUE);
+  clearok (stdscr, TRUE);
+}
+
+int mutt_yesorno (const char *msg, int def)
+{
+  event_t ch;
+  char *yes = _("yes");
+  char *no = _("no");
+  char *answer_string;
+  size_t answer_string_len;
+
+#ifdef HAVE_LANGINFO_YESEXPR
+  char *expr;
+  regex_t reyes;
+  regex_t reno;
+  int reyes_ok;
+  int reno_ok;
+  char answer[2];
+
+  answer[1] = 0;
+  
+  reyes_ok = (expr = nl_langinfo (YESEXPR)) && expr[0] == '^' &&
+            !regcomp (&reyes, expr, REG_NOSUB|REG_EXTENDED);
+  reno_ok = (expr = nl_langinfo (NOEXPR)) && expr[0] == '^' &&
+            !regcomp (&reno, expr, REG_NOSUB|REG_EXTENDED);
+#endif
+
+  CLEARLINE(LINES-1);
+
+  /*
+   * In order to prevent the default answer to the question to wrapped
+   * around the screen in the even the question is wider than the screen,
+   * ensure there is enough room for the answer and truncate the question
+   * to fit.
+   */
+  answer_string = safe_malloc (COLS + 1);
+  snprintf (answer_string, COLS + 1, " ([%s]/%s): ", def == M_YES ? yes : no, def == M_YES ? no : yes);
+  answer_string_len = strlen (answer_string);
+  printw ("%.*s%s", COLS - answer_string_len, msg, answer_string);
+  FREE (&answer_string);
+
+  FOREVER
+  {
+    mutt_refresh ();
+    ch = mutt_getch ();
+    if (CI_is_return (ch.ch))
+      break;
+    if (ch.ch == -1)
+    {
+      def = -1;
+      break;
+    }
+
+#ifdef HAVE_LANGINFO_YESEXPR
+    answer[0] = ch.ch;
+    if (reyes_ok ? 
+       (regexec (& reyes, answer, 0, 0, 0) == 0) :
+#else
+    if (
+#endif
+       (tolower (ch.ch) == 'y'))
+    {
+      def = M_YES;
+      break;
+    }
+    else if (
+#ifdef HAVE_LANGINFO_YESEXPR
+            reno_ok ?
+            (regexec (& reno, answer, 0, 0, 0) == 0) :
+#endif
+            (tolower (ch.ch) == 'n'))
+    {
+      def = M_NO;
+      break;
+    }
+    else
+    {
+      BEEP();
+    }
+  }
+
+#ifdef HAVE_LANGINFO_YESEXPR    
+  if (reyes_ok)
+    regfree (& reyes);
+  if (reno_ok)
+    regfree (& reno);
+#endif
+
+  if (def != -1)
+  {
+    addstr ((char *) (def == M_YES ? yes : no));
+    mutt_refresh ();
+  }
+  return (def);
+}
+
+/* this function is called when the user presses the abort key */
+void mutt_query_exit (void)
+{
+  mutt_flushinp ();
+  curs_set (1);
+  if (Timeout)
+    timeout (-1); /* restore blocking operation */
+  if (mutt_yesorno (_("Exit Mutt?"), M_YES) == M_YES)
+  {
+    endwin ();
+    exit (1);
+  }
+  mutt_clear_error();
+  mutt_curs_set (-1);
+  SigInt = 0;
+}
+
+void mutt_curses_error (const char *fmt, ...)
+{
+  va_list ap;
+
+  va_start (ap, fmt);
+  vsnprintf (Errorbuf, sizeof (Errorbuf), fmt, ap);
+  va_end (ap);
+  
+  dprint (1, (debugfile, "%s\n", Errorbuf));
+  mutt_format_string (Errorbuf, sizeof (Errorbuf),
+                     0, COLS-2, 0, 0, Errorbuf, sizeof (Errorbuf), 0);
+
+  if (!option (OPTKEEPQUIET))
+  {
+    BEEP ();
+    SETCOLOR (MT_COLOR_ERROR);
+    mvaddstr (LINES-1, 0, Errorbuf);
+    clrtoeol ();
+    SETCOLOR (MT_COLOR_NORMAL);
+    mutt_refresh ();
+  }
+
+  set_option (OPTMSGERR);
+}
+
+void mutt_curses_message (const char *fmt, ...)
+{
+  va_list ap;
+
+  va_start (ap, fmt);
+  vsnprintf (Errorbuf, sizeof (Errorbuf), fmt, ap);
+  va_end (ap);
+
+  mutt_format_string (Errorbuf, sizeof (Errorbuf),
+                     0, COLS-2, 0, 0, Errorbuf, sizeof (Errorbuf), 0);
+
+  if (!option (OPTKEEPQUIET))
+  {
+    SETCOLOR (MT_COLOR_MESSAGE);
+    mvaddstr (LINES - 1, 0, Errorbuf);
+    clrtoeol ();
+    SETCOLOR (MT_COLOR_NORMAL);
+    mutt_refresh ();
+  }
+
+  unset_option (OPTMSGERR);
+}
+
+void mutt_show_error (void)
+{
+  if (option (OPTKEEPQUIET))
+    return;
+  
+  SETCOLOR (option (OPTMSGERR) ? MT_COLOR_ERROR : MT_COLOR_MESSAGE);
+  CLEARLINE (LINES-1);
+  addstr (Errorbuf);
+  SETCOLOR (MT_COLOR_NORMAL);
+}
+
+void mutt_endwin (const char *msg)
+{
+  if (!option (OPTNOCURSES))
+  {
+    CLEARLINE (LINES - 1);
+    
+    attrset (A_NORMAL);
+    mutt_refresh ();
+    endwin ();
+  }
+  
+  if (msg && *msg)
+  {
+    puts (msg);
+    fflush (stdout);
+  }
+}
+
+void mutt_perror (const char *s)
+{
+  char *p = strerror (errno);
+
+  dprint (1, (debugfile, "%s: %s (errno = %d)\n", s, 
+      p ? p : "unknown error", errno));
+  mutt_error ("%s: %s (errno = %d)", s, p ? p : _("unknown error"), errno);
+}
+
+int mutt_any_key_to_continue (const char *s)
+{
+  struct termios t;
+  struct termios old;
+  int f, ch;
+
+  f = open ("/dev/tty", O_RDONLY);
+  tcgetattr (f, &t);
+  memcpy ((void *)&old, (void *)&t, sizeof(struct termios)); /* save original state */
+  t.c_lflag &= ~(ICANON | ECHO);
+  t.c_cc[VMIN] = 1;
+  t.c_cc[VTIME] = 0;
+  tcsetattr (f, TCSADRAIN, &t);
+  fflush (stdout);
+  if (s)
+    fputs (s, stdout);
+  else
+    fputs (_("Press any key to continue..."), stdout);
+  fflush (stdout);
+  ch = fgetc (stdin);
+  fflush (stdin);
+  tcsetattr (f, TCSADRAIN, &old);
+  close (f);
+  fputs ("\r\n", stdout);
+  mutt_clear_error ();
+  return (ch);
+}
+
+int mutt_do_pager (const char *banner,
+                  const char *tempfile,
+                  int do_color,
+                  pager_t *info)
+{
+  int rc;
+  
+  if (!Pager || mutt_strcmp (Pager, "builtin") == 0)
+    rc = mutt_pager (banner, tempfile, do_color, info);
+  else
+  {
+    char cmd[STRING];
+    
+    mutt_endwin (NULL);
+    mutt_expand_file_fmt (cmd, sizeof(cmd), Pager, tempfile);
+    if (mutt_system (cmd) == -1)
+    {
+      mutt_error (_("Error running \"%s\"!"), cmd);
+      rc = -1;
+    }
+    else
+      rc = 0;
+    mutt_unlink (tempfile);
+  }
+
+  return rc;
+}
+
+int _mutt_enter_fname (const char *prompt, char *buf, size_t blen, int *redraw, int buffy, int multiple, char ***files, int *numfiles)
+{
+  event_t ch;
+
+  mvaddstr (LINES-1, 0, (char *) prompt);
+  addstr (_(" ('?' for list): "));
+  if (buf[0])
+    addstr (buf);
+  clrtoeol ();
+  mutt_refresh ();
+
+  ch = mutt_getch();
+  if (ch.ch == -1)
+  {
+    CLEARLINE (LINES-1);
+    return (-1);
+  }
+  else if (ch.ch == '?')
+  {
+    mutt_refresh ();
+    buf[0] = 0;
+    _mutt_select_file (buf, blen, M_SEL_FOLDER | (multiple ? M_SEL_MULTI : 0), 
+                      files, numfiles);
+    *redraw = REDRAW_FULL;
+  }
+  else
+  {
+    char *pc = safe_malloc (mutt_strlen (prompt) + 3);
+
+    sprintf (pc, "%s: ", prompt);      /* __SPRINTF_CHECKED__ */
+    mutt_ungetch (ch.op ? 0 : ch.ch, ch.op ? ch.op : 0);
+    if (_mutt_get_field (pc, buf, blen, (buffy ? M_EFILE : M_FILE) | M_CLEAR, multiple, files, numfiles)
+       != 0)
+      buf[0] = 0;
+    MAYBE_REDRAW (*redraw);
+    FREE (&pc);
+  }
+
+  return 0;
+}
+
+void mutt_ungetch (int ch, int op)
+{
+  event_t tmp;
+
+  tmp.ch = ch;
+  tmp.op = op;
+
+  if (UngetCount >= UngetBufLen)
+    safe_realloc (&KeyEvent, (UngetBufLen += 128) * sizeof(event_t));
+
+  KeyEvent[UngetCount++] = tmp;
+}
+
+void mutt_flushinp (void)
+{
+  UngetCount = 0;
+  flushinp ();
+}
+
+#if (defined(USE_SLANG_CURSES) || defined(HAVE_CURS_SET))
+/* The argument can take 3 values:
+ * -1: restore the value of the last call
+ *  0: make the cursor invisible
+ *  1: make the cursor visible
+ */
+void mutt_curs_set (int cursor)
+{
+  static int SavedCursor = 1;
+  
+  if (cursor < 0)
+    cursor = SavedCursor;
+  else
+    SavedCursor = cursor;
+  
+  if (curs_set (cursor) == ERR) {
+    if (cursor == 1)   /* cnorm */
+      curs_set (2);    /* cvvis */
+  }
+}
+#endif
+
+int mutt_multi_choice (char *prompt, char *letters)
+{
+  event_t ch;
+  int choice;
+  char *p;
+
+  mvaddstr (LINES - 1, 0, prompt);
+  clrtoeol ();
+  FOREVER
+  {
+    mutt_refresh ();
+    ch  = mutt_getch ();
+    if (ch.ch == -1 || CI_is_return (ch.ch))
+    {
+      choice = -1;
+      break;
+    }
+    else
+    {
+      p = strchr (letters, ch.ch);
+      if (p)
+      {
+       choice = p - letters + 1;
+       break;
+      }
+      else if (ch.ch <= '9' && ch.ch > '0')
+      {
+       choice = ch.ch - '0';
+       if (choice <= mutt_strlen (letters))
+         break;
+      }
+    }
+    BEEP ();
+  }
+  CLEARLINE (LINES - 1);
+  mutt_refresh ();
+  return choice;
+}
+
+/*
+ * addwch would be provided by an up-to-date curses library
+ */
+
+int mutt_addwch (wchar_t wc)
+{
+  char buf[MB_LEN_MAX*2];
+  mbstate_t mbstate;
+  size_t n1, n2;
+
+  memset (&mbstate, 0, sizeof (mbstate));
+  if ((n1 = wcrtomb (buf, wc, &mbstate)) == (size_t)(-1) ||
+      (n2 = wcrtomb (buf + n1, 0, &mbstate)) == (size_t)(-1))
+    return -1; /* ERR */
+  else
+    return addstr (buf);
+}
+
+
+/*
+ * This formats a string, a bit like
+ * snprintf (dest, destlen, "%-*.*s", min_width, max_width, s),
+ * except that the widths refer to the number of character cells
+ * when printed.
+ */
+
+void mutt_format_string (char *dest, size_t destlen,
+                        int min_width, int max_width,
+                        int right_justify, char m_pad_char,
+                        const char *s, size_t n,
+                        int arboreal)
+{
+  char *p;
+  int w;
+  size_t k, k2;
+  char scratch[MB_LEN_MAX];
+
+  --destlen;
+  p = dest;
+  for (; n; s+=1, n-=1)
+  {
+    w = 1;
+    k2 = 1;
+    if (w > max_width)
+        break;
+    min_width -= w;
+    max_width -= w;
+    strncpy (p, s, k2);
+    p += k2;            
+    destlen -= k2;
+  }
+  w = (int)destlen < min_width ? destlen : min_width;
+  if (w <= 0)
+    *p = '\0';
+  else if (right_justify)
+  {
+    p[w] = '\0';
+    while (--p >= dest)
+      p[w] = *p;
+    while (--w >= 0)
+      dest[w] = m_pad_char;
+  }
+  else
+  {
+    while (--w >= 0)
+      *p++ = m_pad_char;
+    *p = '\0';
+  }
+}
+
+/*
+ * This formats a string rather like
+ *   snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+ *   snprintf (dest, destlen, fmt, s);
+ * except that the numbers in the conversion specification refer to
+ * the number of character cells when printed.
+ */
+
+static void mutt_format_s_x (char *dest,
+                            size_t destlen,
+                            const char *prefix,
+                            const char *s,
+                            int arboreal)
+{
+  int right_justify = 1;
+  char *p;
+  int min_width;
+  int max_width = INT_MAX;
+
+  if (*prefix == '-')
+    ++prefix, right_justify = 0;
+  min_width = strtol (prefix, &p, 10);
+  if (*p == '.')
+  {
+    prefix = p + 1;
+    max_width = strtol (prefix, &p, 10);
+    if (p <= prefix)
+      max_width = INT_MAX;
+  }
+
+  mutt_format_string (dest, destlen, min_width, max_width,
+                     right_justify, ' ', s, mutt_strlen (s), arboreal);
+}
+
+void mutt_format_s (char *dest,
+                   size_t destlen,
+                   const char *prefix,
+                   const char *s)
+{
+  mutt_format_s_x (dest, destlen, prefix, s, 0);
+}
+
+void mutt_format_s_tree (char *dest,
+                        size_t destlen,
+                        const char *prefix,
+                        const char *s)
+{
+  mutt_format_s_x (dest, destlen, prefix, s, 1);
+}
+
+/*
+ * mutt_paddstr (n, s) is almost equivalent to
+ * mutt_format_string (bigbuf, big, n, n, 0, ' ', s, big, 0), addstr (bigbuf)
+ */
+
+void mutt_paddstr (int n, const char *s)
+{
+  wchar_t wc;
+  int w;
+  size_t k;
+  size_t len = mutt_strlen (s);
+  mbstate_t mbstate;
+
+  memset (&mbstate, 0, sizeof (mbstate));
+  for (; len && (k = mbrtowc (&wc, s, len, &mbstate)); s += k, len -= k)
+  {
+    if (k == (size_t)(-1) || k == (size_t)(-2))
+    {
+      k = (k == (size_t)(-1)) ? 1 : len;
+      wc = replacement_char ();
+    }
+    if (!IsWPrint (wc))
+      wc = '?';
+    w = wcwidth (wc);
+    if (w >= 0)
+    {
+      if (w > n)
+       break;
+      addnstr ((char *)s, k);
+      n -= w;
+    }
+  }
+  while (n-- > 0)
+    addch (' ');
+}
+
+/*
+ * mutt_strwidth is like mutt_strlen except that it returns the width
+ * refering to the number of characters cells.
+ */
+
+int mutt_strwidth (const char *s)
+{
+  wchar_t wc;
+  int w;
+  size_t k, n;
+  mbstate_t mbstate;
+
+  if (!s) return 0;
+
+  n = mutt_strlen (s);
+
+  memset (&mbstate, 0, sizeof (mbstate));
+  for (w=0; n && (k = mbrtowc (&wc, s, n, &mbstate)); s += k, n -= k)
+  {
+    if (k == (size_t)(-1) || k == (size_t)(-2))
+    {
+      k = (k == (size_t)(-1)) ? 1 : n;
+      wc = replacement_char ();
+    }
+    if (!IsWPrint (wc))
+      wc = '?';
+    w += wcwidth (wc);
+  }
+  return w;
+}
diff --git a/curs_main.c b/curs_main.c
new file mode 100644 (file)
index 0000000..fb85a50
--- /dev/null
@@ -0,0 +1,2385 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "mx.h"
+#include "mutt_menu.h"
+#include "mailbox.h"
+#include "mapping.h"
+#include "sort.h"
+#include "buffy.h"
+#include "mx.h"
+
+#ifdef USE_POP
+#include "pop.h"
+#endif
+
+#ifdef USE_IMAP
+#include "imap_private.h"
+#endif
+
+#include "mutt_crypt.h"
+
+#ifdef USE_NNTP
+#include "nntp.h"
+#endif
+
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/wait.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+static const char *No_mailbox_is_open = N_("No mailbox is open.");
+static const char *There_are_no_messages = N_("There are no messages.");
+static const char *Mailbox_is_read_only = N_("Mailbox is read-only.");
+static const char *Function_not_permitted_in_attach_message_mode = N_("Function not permitted in attach-message mode.");
+static const char *No_visible = N_("No visible messages.");
+
+#define CHECK_MSGCOUNT if (!Context) \
+       { \
+               mutt_flushinp (); \
+               mutt_error _(No_mailbox_is_open); \
+               break; \
+       } \
+       else if (!Context->msgcount) \
+       { \
+               mutt_flushinp (); \
+               mutt_error _(There_are_no_messages); \
+               break; \
+       }
+
+#define CHECK_VISIBLE if (Context && menu->current >= Context->vcount) \
+       {\
+               mutt_flushinp (); \
+               mutt_error _(No_visible); \
+               break; \
+       }
+    
+
+#define CHECK_READONLY if (Context->readonly) \
+                       { \
+                               mutt_flushinp (); \
+                               mutt_error _(Mailbox_is_read_only); \
+                               break; \
+                       }
+
+#ifdef USE_IMAP 
+/* the error message returned here could be better. */
+#define CHECK_IMAP_ACL(aclbit) if (Context->magic == M_IMAP) \
+               if (mutt_bit_isset (((IMAP_DATA *)Context->data)->capabilities, ACL) \
+               && !mutt_bit_isset(((IMAP_DATA *)Context->data)->rights,aclbit)){ \
+                       mutt_flushinp(); \
+                       mutt_error ("Operation not permitted by the IMAP ACL for this mailbox"); \
+                       break; \
+               }
+#endif
+
+#define CHECK_ATTACH if(option(OPTATTACHMSG)) \
+                    {\
+                       mutt_flushinp (); \
+                       mutt_error _(Function_not_permitted_in_attach_message_mode); \
+                       break; \
+                    }
+
+#define CURHDR Context->hdrs[Context->v2r[menu->current]]
+#define OLDHDR Context->hdrs[Context->v2r[menu->oldcurrent]]
+#define UNREAD(h) mutt_thread_contains_unread (Context, h)
+
+extern const char *ReleaseDate;
+extern size_t UngetCount;
+
+void index_make_entry (char *s, size_t l, MUTTMENU *menu, int num)
+{
+  format_flag flag = M_FORMAT_MAKEPRINT | M_FORMAT_ARROWCURSOR | M_FORMAT_INDEX;
+  int edgemsgno, reverse = Sort & SORT_REVERSE;
+  HEADER *h = Context->hdrs[Context->v2r[num]];
+  THREAD *tmp;
+
+  if ((Sort & SORT_MASK) == SORT_THREADS && h->tree)
+  {
+    flag |= M_FORMAT_TREE; /* display the thread tree */
+    if (h->display_subject)
+      flag |= M_FORMAT_FORCESUBJ;
+    else
+    {
+      if (reverse)
+      {
+       if (menu->top + menu->pagelen > menu->max)
+         edgemsgno = Context->v2r[menu->max - 1];
+       else
+         edgemsgno = Context->v2r[menu->top + menu->pagelen - 1];
+      }
+      else
+       edgemsgno = Context->v2r[menu->top];
+
+      for (tmp = h->thread->parent; tmp; tmp = tmp->parent)
+      {
+       if (!tmp->message)
+         continue;
+
+       /* if no ancestor is visible on current screen, provisionally force
+        * subject... */
+       if (reverse ? tmp->message->msgno > edgemsgno : tmp->message->msgno < edgemsgno)
+       {
+         flag |= M_FORMAT_FORCESUBJ;
+         break;
+       }
+       else if (tmp->message->virtual >= 0)
+         break;
+      }
+      if (flag & M_FORMAT_FORCESUBJ)
+      {
+       for (tmp = h->thread->prev; tmp; tmp = tmp->prev)
+       {
+         if (!tmp->message)
+           continue;
+
+         /* ...but if a previous sibling is available, don't force it */
+         if (reverse ? tmp->message->msgno > edgemsgno : tmp->message->msgno < edgemsgno)
+           break;
+         else if (tmp->message->virtual >= 0)
+         {
+           flag &= ~M_FORMAT_FORCESUBJ;
+           break;
+         }
+       }
+      }
+    }
+  }
+
+  _mutt_make_string (s, l, NONULL (HdrFmt), Context, h, flag);
+}
+
+int index_color (int index_no)
+{
+  HEADER *h = Context->hdrs[Context->v2r[index_no]];
+
+  if (h->pair)
+    return h->pair;
+
+  mutt_set_header_color (Context, h);
+  return h->pair;
+}
+
+static int ci_next_undeleted (int msgno)
+{
+  int i;
+
+  for (i=msgno+1; i < Context->vcount; i++)
+    if (! Context->hdrs[Context->v2r[i]]->deleted)
+      return (i);
+  return (-1);
+}
+
+static int ci_previous_undeleted (int msgno)
+{
+  int i;
+
+  for (i=msgno-1; i>=0; i--)
+    if (! Context->hdrs[Context->v2r[i]]->deleted)
+      return (i);
+  return (-1);
+}
+
+/* Return the index of the first new message, or failing that, the first
+ * unread message.
+ */
+static int ci_first_message (void)
+{
+  int old = -1, i;
+
+  if (Context && Context->msgcount)
+  {
+    for (i=0; i < Context->vcount; i++)
+    {
+      if (! Context->hdrs[Context->v2r[i]]->read &&
+         ! Context->hdrs[Context->v2r[i]]->deleted)
+      {
+       if (! Context->hdrs[Context->v2r[i]]->old)
+         return (i);
+       else if (old == -1)
+         old = i;
+      }
+    }
+    if (old != -1)
+      return (old);
+
+    /* If Sort is reverse and not threaded, the latest message is first.
+     * If Sort is threaded, the latest message is first iff exactly one
+     * of Sort and SortAux are reverse.
+     */
+    if (((Sort & SORT_REVERSE) && (Sort & SORT_MASK) != SORT_THREADS) ||
+       ((Sort & SORT_MASK) == SORT_THREADS &&
+        ((Sort ^ SortAux) & SORT_REVERSE)))
+      return 0;
+    else
+      return (Context->vcount ? Context->vcount - 1 : 0);
+  }
+  return 0;
+}
+
+/* This should be in mx.c, but it only gets used here. */
+static int mx_toggle_write (CONTEXT *ctx)
+{
+  if (!ctx)
+    return -1;
+
+  if (ctx->readonly)
+  {
+    mutt_error _("Cannot toggle write on a readonly mailbox!");
+    return -1;
+  }
+
+  if (ctx->dontwrite)
+  {
+    ctx->dontwrite = 0;
+    mutt_message _("Changes to folder will be written on folder exit.");
+  }
+  else
+  {
+    ctx->dontwrite = 1;
+    mutt_message _("Changes to folder will not be written.");
+  }
+
+  return 0;
+}
+
+static void update_index (MUTTMENU *menu, CONTEXT *ctx, int check,
+                         int oldcount, int index_hint)
+{
+  /* store pointers to the newly added messages */
+  HEADER  **save_new = NULL;
+  int j;
+  
+  /* take note of the current message */
+  if (oldcount)
+  {
+    if (menu->current < Context->vcount)
+      menu->oldcurrent = index_hint;
+    else
+      oldcount = 0; /* invalid message number! */
+  }
+  
+  /* We are in a limited view. Check if the new message(s) satisfy
+   * the limit criteria. If they do, set their virtual msgno so that
+   * they will be visible in the limited view */
+  if (Context->pattern)
+  {
+#define THIS_BODY Context->hdrs[j]->content
+    if (oldcount || check == M_REOPENED)
+    {
+      for (j = (check == M_REOPENED) ? 0 : oldcount; j < Context->msgcount; j++)
+      {
+       if (mutt_pattern_exec (Context->limit_pattern,
+                              M_MATCH_FULL_ADDRESS, 
+                              Context, Context->hdrs[j]))
+       {
+         Context->hdrs[j]->virtual = Context->vcount;
+         Context->v2r[Context->vcount] = j;
+         Context->hdrs[j]->limited = 1;
+         Context->vcount++;
+         Context->vsize += THIS_BODY->length + THIS_BODY->offset - THIS_BODY->hdr_offset;
+       }
+      }
+    }
+#undef THIS_BODY
+  }
+    
+  /* save the list of new messages */
+  if (oldcount && check != M_REOPENED
+      && ((Sort & SORT_MASK) == SORT_THREADS))
+  {
+    save_new = (HEADER **) safe_malloc (sizeof (HEADER *) * (Context->msgcount - oldcount));
+    for (j = oldcount; j < Context->msgcount; j++)
+      save_new[j-oldcount] = Context->hdrs[j];
+  }
+  
+  /* if the mailbox was reopened, need to rethread from scratch */
+  mutt_sort_headers (Context, (check == M_REOPENED));
+
+  /* uncollapse threads with new mail */
+  if ((Sort & SORT_MASK) == SORT_THREADS)
+  {
+    if (check == M_REOPENED)
+    {
+      THREAD *h, *j;
+      
+      Context->collapsed = 0;
+      
+      for (h = Context->tree; h; h = h->next)
+      {
+       for (j = h; !j->message; j = j->child)
+         ;
+       mutt_uncollapse_thread (Context, j->message);
+      }
+      mutt_set_virtual (Context);
+    }
+    else if (oldcount)
+    {
+      for (j = 0; j < Context->msgcount - oldcount; j++)
+      {
+       int k;
+       
+       for (k = 0; k < Context->msgcount; k++)
+       {
+         HEADER *h = Context->hdrs[k];
+         if (h == save_new[j] && (!Context->pattern || h->limited))
+           mutt_uncollapse_thread (Context, h);
+       }
+      }
+      FREE (&save_new);
+      mutt_set_virtual (Context);
+    }
+  }
+  
+  menu->current = -1;
+  if (oldcount)
+  {
+    /* restore the current message to the message it was pointing to */
+    for (j = 0; j < Context->vcount; j++)
+    {
+      if (Context->hdrs[Context->v2r[j]]->index == menu->oldcurrent)
+      {
+       menu->current = j;
+       break;
+      }
+    }
+  }
+  
+  if (menu->current < 0)
+    menu->current = ci_first_message ();
+  
+}
+
+static void resort_index (MUTTMENU *menu)
+{
+  int i;
+  HEADER *current = CURHDR;
+
+  menu->current = -1;
+  mutt_sort_headers (Context, 0);
+  /* Restore the current message */
+
+  for (i = 0; i < Context->vcount; i++)
+  {
+    if (Context->hdrs[Context->v2r[i]] == current)
+    {
+      menu->current = i;
+      break;
+    }
+  }
+  
+  if ((Sort & SORT_MASK) == SORT_THREADS && menu->current < 0)
+    menu->current = mutt_parent_message (Context, current);
+  
+  if (menu->current < 0)
+    menu->current = ci_first_message ();
+  
+  menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
+}
+
+struct mapping_t IndexHelp[] = {
+  { N_("Quit"),  OP_QUIT },
+  { N_("Del"),   OP_DELETE },
+  { N_("Undel"), OP_UNDELETE },
+  { N_("Save"),  OP_SAVE },
+  { N_("Mail"),  OP_MAIL },
+  { N_("Reply"), OP_REPLY },
+  { N_("Group"), OP_GROUP_REPLY },
+  { N_("Help"),  OP_HELP },
+  { NULL }
+};
+
+#ifdef USE_NNTP
+struct mapping_t IndexNewsHelp[] = {
+  { N_("Quit"),     OP_QUIT },
+  { N_("Del"),      OP_DELETE },
+  { N_("Undel"),    OP_UNDELETE },
+  { N_("Save"),     OP_SAVE },
+  { N_("Post"),     OP_POST },
+  { N_("Followup"), OP_FOLLOWUP },
+  { N_("Catchup"),  OP_CATCHUP },
+  { N_("Help"),     OP_HELP },
+  { NULL }
+};
+#endif
+
+/* This function handles the message index window as well as commands returned
+ * from the pager (MENU_PAGER).
+ */
+int mutt_index_menu (void)
+{
+  char buf[LONG_STRING], helpstr[SHORT_STRING];
+  int flags;
+  int op = OP_NULL;
+  int done = 0;                /* controls when to exit the "event" loop */
+  int i = 0, j;
+  int tag = 0;                 /* has the tag-prefix command been pressed? */
+  int newcount = -1;
+  int oldcount = -1;
+  int rc = -1;
+  MUTTMENU *menu;
+  char *cp;                    /* temporary variable. */
+  int index_hint;   /* used to restore cursor position */
+  int do_buffy_notify = 1;
+  int close = 0; /* did we OP_QUIT or OP_EXIT out of this menu? */
+  int attach_msg = option(OPTATTACHMSG);
+  
+  menu = mutt_new_menu ();
+  menu->menu = MENU_MAIN;
+  menu->offset = 1;
+  menu->pagelen = LINES - 3;
+  menu->make_entry = index_make_entry;
+  menu->color = index_color;
+  menu->current = ci_first_message ();
+  menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_MAIN,
+#ifdef USE_NNTP
+       (Context && (Context->magic == M_NNTP)) ? IndexNewsHelp :
+#endif
+       IndexHelp);
+  
+  if (!attach_msg) 
+    mutt_buffy_check(1); /* force the buffy check after we enter the folder */
+
+  FOREVER
+  {
+    tag = 0; /* clear the tag-prefix */
+
+    menu->max = Context ? Context->vcount : 0;
+    oldcount = Context ? Context->msgcount : 0;
+
+    /* check if we need to resort the index because just about
+     * any 'op' below could do mutt_enter_command(), either here or
+     * from any new menu launched, and change $sort/$sort_aux
+     */
+    if (option (OPTNEEDRESORT) && Context && Context->msgcount)
+      resort_index (menu);
+    
+    if (option (OPTREDRAWTREE) && Context && Context->msgcount && (Sort & SORT_MASK) == SORT_THREADS)
+    {
+      mutt_draw_tree (Context);
+      menu->redraw |= REDRAW_STATUS;
+      unset_option (OPTREDRAWTREE);
+    }
+
+    if (Context && !attach_msg)
+    {
+      int check;
+      /* check for new mail in the mailbox.  If nonzero, then something has
+       * changed about the file (either we got new mail or the file was
+       * modified underneath us.)
+       */
+
+#ifdef USE_IMAP
+      imap_allow_reopen (Context);
+#endif
+    
+      index_hint = (Context->vcount && menu->current >= 0 && menu->current < Context->vcount) ? CURHDR->index : 0;
+
+      if ((check = mx_check_mailbox (Context, &index_hint, 0)) < 0)
+      {
+       if (!Context->path)
+       {
+         /* fatal error occurred */
+         FREE (&Context);
+         menu->redraw = REDRAW_FULL;
+       }
+
+       set_option (OPTSEARCHINVALID);
+      }
+      else if (check == M_NEW_MAIL || check == M_REOPENED || check == M_FLAGS)
+      {
+       update_index (menu, Context, check, oldcount, index_hint);
+       
+       /* notify the user of new mail */
+       if (check == M_REOPENED)
+         mutt_error _("Mailbox was externally modified.  Flags may be wrong.");
+       else if (check == M_NEW_MAIL)
+       {
+         mutt_message _("New mail in this mailbox.");
+         if (option (OPTBEEPNEW))
+           beep ();
+       } else if (check == M_FLAGS)
+         mutt_message _("Mailbox was externally modified.");
+
+       /* avoid the message being overwritten by buffy */
+       do_buffy_notify = 0;
+       
+       menu->redraw = REDRAW_FULL;
+       menu->max = Context->vcount;
+       
+       set_option (OPTSEARCHINVALID);
+      }
+    }
+
+#ifdef USE_IMAP
+    imap_keepalive ();
+    imap_disallow_reopen (Context);
+#endif
+
+    if (!attach_msg)
+    {
+     /* check for new mail in the incoming folders */
+     oldcount = newcount;
+     if ((newcount = mutt_buffy_check (0)) != oldcount)
+       menu->redraw |= REDRAW_STATUS;
+     if (do_buffy_notify)
+     {
+       if (mutt_buffy_notify () && option (OPTBEEPNEW))
+       beep ();
+     }
+     else
+       do_buffy_notify = 1;
+    }
+
+    if (op != -1)
+      mutt_curs_set (0);
+
+    if (menu->redraw & REDRAW_FULL)
+    {
+      menu_redraw_full (menu);
+      mutt_show_error ();
+    }
+
+    if (menu->menu == MENU_MAIN)
+    {
+      if (Context && Context->hdrs && !(menu->current >= Context->vcount))
+      {
+       menu_check_recenter (menu);
+
+       if (menu->redraw & REDRAW_INDEX)
+       {
+         menu_redraw_index (menu);
+         menu->redraw |= REDRAW_STATUS;
+       }
+       else if (menu->redraw & (REDRAW_MOTION_RESYNCH | REDRAW_MOTION))
+         menu_redraw_motion (menu);
+       else if (menu->redraw & REDRAW_CURRENT)
+         menu_redraw_current (menu);
+      }
+
+      if (menu->redraw & REDRAW_STATUS) 
+      {
+       menu_status_line (buf, sizeof (buf), menu, NONULL (Status));
+       CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES-2);
+       SETCOLOR (MT_COLOR_STATUS);
+       mutt_paddstr (COLS, buf);
+       SETCOLOR (MT_COLOR_NORMAL);
+       menu->redraw &= ~REDRAW_STATUS;
+      }
+
+      menu->redraw = 0;
+      if (menu->current < menu->max)
+       menu->oldcurrent = menu->current;
+      else
+       menu->oldcurrent = -1;
+
+      if (option (OPTARROWCURSOR))
+       move (menu->current - menu->top + menu->offset, 2);
+      else
+       move (menu->current - menu->top + menu->offset, COLS - 1);
+      mutt_refresh ();
+
+      op = km_dokey (MENU_MAIN);
+
+      dprint(4, (debugfile, "mutt_index_menu[%d]: Got op %d\n", __LINE__, op));
+
+#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
+      if (SigWinch)
+      {
+       mutt_flushinp ();
+       mutt_resize_screen ();
+       menu->redraw = REDRAW_FULL;
+       menu->menu = MENU_MAIN;
+       SigWinch = 0;
+       menu->top = 0; /* so we scroll the right amount */
+       /*
+        * force a real complete redraw.  clrtobot() doesn't seem to be able
+        * to handle every case without this.
+        */
+       clearok(stdscr,TRUE);
+       continue;
+      }
+#endif
+
+      if (op == -1)
+       continue; /* either user abort or timeout */
+      
+      mutt_curs_set (1);
+      
+      /* special handling for the tag-prefix function */
+      if (op == OP_TAG_PREFIX)
+      {
+       if (!Context)
+       {
+         mutt_error _("No mailbox is open.");
+         continue;
+       }
+
+       if (!Context->tagged)
+       {
+         mutt_error _("No tagged messages.");
+         continue;
+       }
+       tag = 1;
+
+       /* give visual indication that the next command is a tag- command */
+       mvaddstr (LINES - 1, 0, "tag-");
+       clrtoeol ();
+
+       /* get the real command */
+       if ((op = km_dokey (MENU_MAIN)) == OP_TAG_PREFIX)
+       {
+         /* abort tag sequence */
+         CLEARLINE (LINES-1);
+         continue;
+       }
+      }
+      else if (option (OPTAUTOTAG) && Context && Context->tagged)
+       tag = 1;
+
+      if (op == OP_TAG_PREFIX_COND)
+      {
+       if (!Context)
+       {
+         mutt_error _("No mailbox is open.");
+         continue;
+       }
+
+       if (!Context->tagged)
+       {
+         event_t tmp;
+         while(UngetCount>0)
+         {
+           tmp=mutt_getch();
+           if(tmp.op==OP_END_COND)break;
+         }
+         mutt_message  _("Nothing to do.");
+         continue;
+       }
+       tag = 1;
+
+       /* give visual indication that the next command is a tag- command */
+       mvaddstr (LINES - 1, 0, "tag-");
+       clrtoeol ();
+
+       /* get the real command */
+       if ((op = km_dokey (MENU_MAIN)) == OP_TAG_PREFIX)
+       {
+         /* abort tag sequence */
+         CLEARLINE (LINES-1);
+         continue;
+       }
+      }
+
+      mutt_clear_error ();
+    }
+    else
+    {
+      if (menu->current < menu->max)
+       menu->oldcurrent = menu->current;
+      else
+       menu->oldcurrent = -1;
+      
+      mutt_curs_set (1);       /* fallback from the pager */
+    }
+
+#ifdef USE_NNTP
+    unset_option (OPTNEWS);    /* for any case */
+#endif
+    switch (op)
+    {
+
+      /* ----------------------------------------------------------------------
+       * movement commands
+       */
+
+      case OP_BOTTOM_PAGE:
+       menu_bottom_page (menu);
+       break;
+      case OP_FIRST_ENTRY:
+       menu_first_entry (menu);
+       break;
+      case OP_MIDDLE_PAGE:
+       menu_middle_page (menu);
+       break;
+      case OP_HALF_UP:
+       menu_half_up (menu);
+       break;
+      case OP_HALF_DOWN:
+       menu_half_down (menu);
+       break;
+      case OP_NEXT_LINE:
+       menu_next_line (menu);
+       break;
+      case OP_PREV_LINE:
+       menu_prev_line (menu);
+       break;
+      case OP_NEXT_PAGE:
+       menu_next_page (menu);
+       break;
+      case OP_PREV_PAGE:
+       menu_prev_page (menu);
+       break;
+      case OP_LAST_ENTRY:
+       menu_last_entry (menu);
+       break;
+      case OP_TOP_PAGE:
+       menu_top_page (menu);
+       break;
+      case OP_CURRENT_TOP:
+       menu_current_top (menu);
+       break;
+      case OP_CURRENT_MIDDLE:
+       menu_current_middle (menu);
+       break;
+      case OP_CURRENT_BOTTOM:
+       menu_current_bottom (menu);
+       break;
+
+#ifdef USE_NNTP
+      case OP_GET_MESSAGE:
+      case OP_GET_PARENT:
+       CHECK_MSGCOUNT;
+       if (Context->magic == M_NNTP)
+       {
+         HEADER *h;
+
+         if (op == OP_GET_MESSAGE)
+         {
+           buf[0] = 0;
+           if (mutt_get_field (_("Enter Message-Id: "), buf, sizeof (buf), 0) != 0
+                 || !buf[0])
+             break;
+         }
+         else
+         {
+           LIST *ref = CURHDR->env->references;
+           if (!ref)
+           {
+             mutt_error _("Article has no parent reference!");
+             break;
+           }
+           strfcpy (buf, ref->data, sizeof (buf));
+         }
+         if (!Context->id_hash)
+           Context->id_hash = mutt_make_id_hash (Context);
+         if ((h = hash_find (Context->id_hash, buf)))
+         {
+           if (h->virtual != -1)
+           {
+             menu->current = h->virtual;
+             menu->redraw = REDRAW_MOTION_RESYNCH;
+           }
+           else if (h->collapsed)
+           {
+             mutt_uncollapse_thread (Context, h);
+             mutt_set_virtual (Context);
+             menu->current = h->virtual;
+             menu->redraw = REDRAW_MOTION_RESYNCH;
+           }
+           else
+             mutt_error _("Message not visible in limited view.");
+         }
+         else
+         {
+           if (nntp_check_msgid (Context, buf) == 0)
+           {
+             h = Context->hdrs[Context->msgcount-1];
+             mutt_sort_headers (Context, 0);
+             menu->current = h->virtual;
+             menu->redraw = REDRAW_FULL;
+           }
+           else
+             mutt_error (_("Article %s not found on server"), buf); 
+         }
+       }
+       break;
+
+      case OP_GET_CHILDREN:
+      case OP_RECONSTRUCT_THREAD:
+       CHECK_MSGCOUNT;
+       if (Context->magic == M_NNTP)
+       {
+         HEADER *h;
+         int old = CURHDR->index, i;
+
+         if (!CURHDR->env->message_id)
+         {
+           mutt_error _("No Message-Id. Unable to perform operation");
+           break;
+         }
+
+         if (!Context->id_hash)
+           Context->id_hash = mutt_make_id_hash (Context);
+         strfcpy (buf, CURHDR->env->message_id, sizeof (buf));
+
+         if (op == OP_RECONSTRUCT_THREAD)
+         {
+           LIST *ref = CURHDR->env->references;
+           while (ref)
+           {
+             nntp_check_msgid (Context, ref->data);
+             /* the last msgid in References is the root message */
+             if (!ref->next)
+               strfcpy (buf, ref->data, sizeof (buf));
+             ref = ref->next;
+           }
+         }
+         mutt_message _("Check for children of message...");
+         if (nntp_check_children (Context, buf) == 0)
+         {
+           mutt_sort_headers (Context, (op == OP_RECONSTRUCT_THREAD));
+           h = hash_find (Context->id_hash, buf);
+           /* if the root message was retrieved, move to it */
+           if (h)
+             menu->current = h->virtual;
+           else /* try to restore old position */
+             for (i = 0; i < Context->msgcount; i++)
+               if (Context->hdrs[i]->index == old)
+               {
+                 menu->current = Context->hdrs[i]->virtual;
+                 /* As an added courtesy, recenter the menu
+                  * with the current entry at the middle of the screen */
+                 menu_check_recenter (menu);
+                 menu_current_middle (menu);
+               }
+         }
+         menu->redraw = REDRAW_FULL;
+         mutt_clear_error ();
+       }
+       break;
+#endif
+
+      case OP_JUMP:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+        if (isdigit (LastKey)) mutt_ungetch (LastKey, 0);
+       buf[0] = 0;
+       if (mutt_get_field (_("Jump to message: "), buf, sizeof (buf), 0) != 0
+           || !buf[0])
+         break;
+
+       if (! isdigit ((unsigned char) buf[0]))
+       {
+         mutt_error _("Argument must be a message number.");
+         break;
+       }
+
+       i = atoi (buf);
+       if (i > 0 && i <= Context->msgcount)
+       {
+         for (j = i-1; j < Context->msgcount; j++)
+         {
+           if (Context->hdrs[j]->virtual != -1)
+             break;
+         }
+         if (j >= Context->msgcount)
+         {
+           for (j = i-2; j >= 0; j--)
+           {
+             if (Context->hdrs[j]->virtual != -1)
+               break;
+           }
+         }
+
+         if (j >= 0)
+         {
+           menu->current = Context->hdrs[j]->virtual;
+           if (menu->menu == MENU_PAGER)
+           {
+             op = OP_DISPLAY_MESSAGE;
+             continue;
+           }
+           else
+           menu->redraw = REDRAW_MOTION;
+         }
+         else
+           mutt_error _("That message is not visible.");
+       }
+       else
+         mutt_error _("Invalid message number.");
+
+       break;
+
+       /* --------------------------------------------------------------------
+        * `index' specific commands
+        */
+
+      case OP_MAIN_DELETE_PATTERN:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       CHECK_READONLY;
+
+#ifdef USE_IMAP
+CHECK_IMAP_ACL(IMAP_ACL_DELETE);
+#endif
+
+       CHECK_ATTACH;
+       mutt_pattern_func (M_DELETE, _("Delete messages matching: "));
+       menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
+       break;
+
+#ifdef USE_POP
+      case OP_MAIN_FETCH_MAIL:
+
+       CHECK_ATTACH;
+       pop_fetch_mail ();
+       menu->redraw = REDRAW_FULL;
+       break;
+#endif /* USE_POP */
+
+      case OP_HELP:
+
+       mutt_help (MENU_MAIN);
+       menu->redraw = REDRAW_FULL;
+       break;
+
+      case OP_MAIN_SHOW_LIMIT:
+        CHECK_MSGCOUNT;
+       if (!Context->pattern)
+          mutt_message _("No limit pattern is in effect.");
+       else
+       {
+          char buf[STRING];
+          /* i18n: ask for a limit to apply */
+          snprintf (buf, sizeof(buf), _("Limit: %s"),Context->pattern);
+           mutt_message ("%s", buf);
+       }
+        break;
+
+      case OP_MAIN_LIMIT:
+      case OP_TOGGLE_READ:
+
+       CHECK_MSGCOUNT;
+       menu->oldcurrent = (Context->vcount && menu->current >= 0 && menu->current < Context->vcount) ?
+               CURHDR->index : -1;
+       if (op == OP_TOGGLE_READ)
+       {
+         char buf[LONG_STRING];
+
+         if (!Context->pattern || strncmp (Context->pattern, "!~R!~D~s", 8) != 0)
+         {
+           snprintf (buf, sizeof (buf), "!~R!~D~s%s",
+                     Context->pattern ? Context->pattern : ".*");
+           set_option (OPTHIDEREAD);
+         }
+         else
+         {
+           strfcpy (buf, Context->pattern + 8, sizeof(buf));
+           if (!*buf || strncmp (buf, ".*", 2) == 0)
+             snprintf (buf, sizeof(buf), "~A");
+           unset_option (OPTHIDEREAD);
+         }
+         FREE (&Context->pattern);
+         Context->pattern = safe_strdup (buf);
+       }
+       if ((op == OP_TOGGLE_READ && mutt_pattern_func (M_LIMIT, NULL) == 0) ||
+           mutt_pattern_func (M_LIMIT, _("Limit to messages matching: ")) == 0)
+       {
+         if (menu->oldcurrent >= 0)
+         {
+           /* try to find what used to be the current message */
+           menu->current = -1;
+           for (i = 0; i < Context->vcount; i++)
+             if (Context->hdrs[Context->v2r[i]]->index == menu->oldcurrent)
+             {
+               menu->current = i;
+               break;
+             }
+           if (menu->current < 0) menu->current = 0;
+         }
+         else
+           menu->current = 0;
+         menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
+         if ((Sort & SORT_MASK) == SORT_THREADS)
+           mutt_draw_tree (Context);
+         menu->redraw = REDRAW_FULL;
+       }
+       break;    
+
+      case OP_QUIT:
+
+       close = op;
+       if (attach_msg)
+       {
+        done = 1;
+        break;
+       }
+
+       if (query_quadoption (OPT_QUIT, _("Quit Mutt?")) == M_YES)
+       {
+         int check;
+         
+         oldcount = Context ? Context->msgcount : 0;
+
+         if (!Context || (check = mx_close_mailbox (Context, &index_hint)) == 0)
+           done = 1;
+         else
+         {
+           if (check == M_NEW_MAIL || check == M_REOPENED)
+             update_index (menu, Context, check, oldcount, index_hint);
+
+           menu->redraw = REDRAW_FULL; /* new mail arrived? */
+           set_option (OPTSEARCHINVALID);
+         }
+       }
+       break;
+
+      case OP_REDRAW:
+
+       clearok (stdscr, TRUE);
+       menu->redraw = REDRAW_FULL;
+       break;
+
+      case OP_SEARCH:
+      case OP_SEARCH_REVERSE:
+      case OP_SEARCH_NEXT:
+      case OP_SEARCH_OPPOSITE:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       if ((menu->current = mutt_search_command (menu->current, op)) == -1)
+         menu->current = menu->oldcurrent;
+       else
+         menu->redraw = REDRAW_MOTION;
+       break;
+
+      case OP_SORT:
+      case OP_SORT_REVERSE:
+
+       if (mutt_select_sort ((op == OP_SORT_REVERSE)) == 0)
+       {
+         if (Context && Context->msgcount)
+         {
+           resort_index (menu);
+           set_option (OPTSEARCHINVALID);
+         }
+       }
+       break;
+
+      case OP_TAG:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       if (tag && !option (OPTAUTOTAG))
+       {
+         for (j = 0; j < Context->vcount; j++)
+           mutt_set_flag (Context, Context->hdrs[Context->v2r[j]], M_TAG, 0);
+         menu->redraw = REDRAW_STATUS | REDRAW_INDEX;
+       }
+       else
+       {
+         mutt_set_flag (Context, CURHDR, M_TAG, !CURHDR->tagged);
+         menu->redraw = REDRAW_STATUS;
+         if (option (OPTRESOLVE) && menu->current < Context->vcount - 1)
+         {
+           menu->current++;
+           menu->redraw |= REDRAW_MOTION_RESYNCH;
+         }
+         else
+           menu->redraw |= REDRAW_CURRENT;
+       }
+       break;
+
+      case OP_MAIN_TAG_PATTERN:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       mutt_pattern_func (M_TAG, _("Tag messages matching: "));
+       menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
+       break;
+
+      case OP_MAIN_UNDELETE_PATTERN:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       CHECK_READONLY;
+
+#ifdef USE_IMAP
+CHECK_IMAP_ACL(IMAP_ACL_DELETE);
+#endif
+
+       if (mutt_pattern_func (M_UNDELETE, _("Undelete messages matching: ")) == 0)
+         menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
+       break;
+
+      case OP_MAIN_UNTAG_PATTERN:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       if (mutt_pattern_func (M_UNTAG, _("Untag messages matching: ")) == 0)
+         menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
+       break;
+
+       /* --------------------------------------------------------------------
+        * The following operations can be performed inside of the pager.
+        */
+
+#ifdef USE_IMAP
+      case OP_MAIN_IMAP_FETCH:
+       if (Context->magic == M_IMAP)
+         imap_check_mailbox (Context, &index_hint, 1);
+        break;
+#endif
+      
+      case OP_MAIN_SYNC_FOLDER:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       CHECK_READONLY;
+       {
+         int oldvcount = Context->vcount;
+         int oldcount  = Context->msgcount;
+         int dcount = 0;
+         int check;
+
+         /* calculate the number of messages _above_ the cursor,
+          * so we can keep the cursor on the current message
+          */ 
+         for (j = 0; j <= menu->current; j++)
+         {
+           if (Context->hdrs[Context->v2r[j]]->deleted)
+             dcount++;
+         }
+
+         if ((check = mx_sync_mailbox (Context, &index_hint)) == 0)
+         {
+           if (Context->vcount != oldvcount)
+             menu->current -= dcount;
+           set_option (OPTSEARCHINVALID);
+         }
+         else if (check == M_NEW_MAIL || check == M_REOPENED)
+           update_index (menu, Context, check, oldcount, index_hint);
+
+         /* 
+          * do a sanity check even if mx_sync_mailbox failed.
+          */
+
+         if (menu->current < 0 || menu->current >= Context->vcount)
+           menu->current = ci_first_message ();
+       }
+
+       /* check for a fatal error, or all messages deleted */
+       if (!Context->path)
+         FREE (&Context);
+
+       /* if we were in the pager, redisplay the message */
+       if (menu->menu == MENU_PAGER)
+       {
+         op = OP_DISPLAY_MESSAGE;
+         continue;
+       }
+        else
+         menu->redraw = REDRAW_FULL;
+       break;
+
+      case OP_MAIN_CHANGE_FOLDER:
+      case OP_MAIN_CHANGE_FOLDER_READONLY:
+#ifdef USE_NNTP
+      case OP_MAIN_CHANGE_GROUP:
+      case OP_MAIN_CHANGE_GROUP_READONLY:
+#endif
+
+       if (attach_msg || option (OPTREADONLY) ||
+#ifdef USE_NNTP
+           op == OP_MAIN_CHANGE_GROUP_READONLY ||
+#endif
+           op == OP_MAIN_CHANGE_FOLDER_READONLY)
+         flags = M_READONLY;
+       else
+         flags = 0;
+
+       if (flags)
+          cp = _("Open mailbox in read-only mode");
+        else
+          cp = _("Open mailbox");
+
+       buf[0] = '\0';
+#ifdef USE_NNTP
+       unset_option (OPTNEWS);
+       if (op == OP_MAIN_CHANGE_GROUP ||
+           op == OP_MAIN_CHANGE_GROUP_READONLY)
+       {
+         set_option (OPTNEWS);
+         if (!(CurrentNewsSrv = mutt_select_newsserver (NewsServer)))
+           break;
+         if (flags)
+           cp = _("Open newsgroup in read-only mode");
+         else
+           cp = _("Open newsgroup");
+         nntp_buffy (buf);
+       }
+       else
+#endif
+       mutt_buffy (buf, sizeof (buf));
+
+       if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1)
+         break;
+       if (!buf[0])
+       {
+         CLEARLINE (LINES-1);
+         break;
+       }
+
+#ifdef USE_NNTP
+        if (option (OPTNEWS))
+       {
+         unset_option (OPTNEWS);
+          nntp_expand_path (buf, sizeof (buf), &CurrentNewsSrv->conn->account);
+       }
+        else
+#endif
+       mutt_expand_path (buf, sizeof (buf));
+       if (mx_get_magic (buf) <= 0)
+       {
+         mutt_error (_("%s is not a mailbox."), buf);
+         break;
+       }
+
+        if (Context)
+        {
+         int check;
+
+         mutt_str_replace (&LastFolder, Context->path);
+         oldcount = Context ? Context->msgcount : 0;
+
+         if ((check = mx_close_mailbox (Context, &index_hint)) != 0)
+         {
+           if (check == M_NEW_MAIL || check == M_REOPENED)
+             update_index (menu, Context, check, oldcount, index_hint);
+               
+           set_option (OPTSEARCHINVALID);
+           menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
+           break;
+         }
+         FREE (&Context);
+       }
+
+        mutt_sleep (0);
+      
+       /* Set CurrentMenu to MENU_MAIN before executing any folder
+        * hooks so that all the index menu functions are available to
+        * the exec command.
+        */
+
+       CurrentMenu = MENU_MAIN;
+       mutt_folder_hook (buf);
+
+       if ((Context = mx_open_mailbox (buf, flags, NULL)) != NULL)
+       {
+         menu->current = ci_first_message ();
+       }
+       else
+         menu->current = 0;
+
+#ifdef USE_NNTP
+       /* mutt_buffy_check() must be done with mail-reader mode! */
+       menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_MAIN,
+         (Context && (Context->magic == M_NNTP)) ? IndexNewsHelp : IndexHelp);
+#endif
+       mutt_clear_error ();
+       mutt_buffy_check(1); /* force the buffy check after we have changed
+                             the folder */
+       menu->redraw = REDRAW_FULL;
+       set_option (OPTSEARCHINVALID);
+       break;
+
+      case OP_DISPLAY_MESSAGE:
+      case OP_DISPLAY_HEADERS: /* don't weed the headers */
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       /*
+        * toggle the weeding of headers so that a user can press the key
+        * again while reading the message.
+        */
+       if (op == OP_DISPLAY_HEADERS)
+         toggle_option (OPTWEED);
+
+       unset_option (OPTNEEDRESORT);
+
+       if ((Sort & SORT_MASK) == SORT_THREADS && CURHDR->collapsed)
+       {
+         mutt_uncollapse_thread (Context, CURHDR);
+         mutt_set_virtual (Context);
+         if (option (OPTUNCOLLAPSEJUMP))
+           menu->current = mutt_thread_next_unread (Context, CURHDR);
+       }
+       if ((op = mutt_display_message (CURHDR)) == -1)
+       {
+         unset_option (OPTNEEDRESORT);
+         break;
+       }
+
+       menu->menu = MENU_PAGER;
+       menu->oldcurrent = menu->current;
+       continue;
+
+      case OP_EXIT:
+
+       close = op;
+       if (menu->menu == MENU_MAIN && attach_msg)
+       {
+        done = 1;
+        break;
+       }
+
+       if ((menu->menu == MENU_MAIN)
+           && (query_quadoption (OPT_QUIT, 
+                                 _("Exit Mutt without saving?")) == M_YES))
+       {
+         if (Context)
+         {
+           mx_fastclose_mailbox (Context);
+           FREE (&Context);
+         }
+         done = 1;
+       }
+       break;
+
+      case OP_EDIT_TYPE:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       CHECK_ATTACH;
+       mutt_edit_content_type (CURHDR, CURHDR->content, NULL);
+       /* if we were in the pager, redisplay the message */
+       if (menu->menu == MENU_PAGER)
+       {
+         op = OP_DISPLAY_MESSAGE;
+         continue;
+       }
+        else
+         menu->redraw = REDRAW_CURRENT;
+       break;
+
+      case OP_MAIN_NEXT_UNDELETED:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       if (menu->current >= Context->vcount - 1)
+       {
+         if (menu->menu == MENU_MAIN)
+           mutt_error _("You are on the last message.");
+         break;
+       }
+       if ((menu->current = ci_next_undeleted (menu->current)) == -1)
+       {
+         menu->current = menu->oldcurrent;
+         if (menu->menu == MENU_MAIN)
+           mutt_error _("No undeleted messages.");
+       }
+       else if (menu->menu == MENU_PAGER)
+       {
+         op = OP_DISPLAY_MESSAGE;
+         continue;
+       }
+       else
+         menu->redraw = REDRAW_MOTION;
+       break;
+
+      case OP_NEXT_ENTRY:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       if (menu->current >= Context->vcount - 1)
+       {
+         if (menu->menu == MENU_MAIN)
+           mutt_error _("You are on the last message.");
+         break;
+       }
+       menu->current++;
+       if (menu->menu == MENU_PAGER)
+       {
+         op = OP_DISPLAY_MESSAGE;
+         continue;
+       }
+       else
+         menu->redraw = REDRAW_MOTION;
+       break;
+
+      case OP_MAIN_PREV_UNDELETED:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       if (menu->current < 1)
+       {
+         mutt_error _("You are on the first message.");
+         break;
+       }
+       if ((menu->current = ci_previous_undeleted (menu->current)) == -1)
+       {
+         menu->current = menu->oldcurrent;
+         if (menu->menu == MENU_MAIN)
+           mutt_error _("No undeleted messages.");
+       }
+       else if (menu->menu == MENU_PAGER)
+       {
+         op = OP_DISPLAY_MESSAGE;
+         continue;
+       }
+       else
+         menu->redraw = REDRAW_MOTION;
+       break;
+
+      case OP_PREV_ENTRY:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       if (menu->current < 1)
+       {
+         if (menu->menu == MENU_MAIN) mutt_error _("You are on the first message.");
+         break;
+       }
+       menu->current--;
+       if (menu->menu == MENU_PAGER)
+       {
+         op = OP_DISPLAY_MESSAGE;
+         continue;
+       }
+       else
+         menu->redraw = REDRAW_MOTION;
+       break;
+
+      case OP_DECRYPT_COPY:
+      case OP_DECRYPT_SAVE:
+        if (!WithCrypto)
+          break;   
+        /* fall thru */
+      case OP_COPY_MESSAGE:
+      case OP_SAVE:
+      case OP_DECODE_COPY:
+      case OP_DECODE_SAVE:
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+        if (mutt_save_message (tag ? NULL : CURHDR,
+                              (op == OP_DECRYPT_SAVE) ||
+                              (op == OP_SAVE) || (op == OP_DECODE_SAVE),
+                              (op == OP_DECODE_SAVE) || (op == OP_DECODE_COPY),
+                              (op == OP_DECRYPT_SAVE) || (op == OP_DECRYPT_COPY) ||
+                              0,
+                              &menu->redraw) == 0 &&
+            (op == OP_SAVE || op == OP_DECODE_SAVE || op == OP_DECRYPT_SAVE)
+           )
+       {
+         if (tag)
+           menu->redraw |= REDRAW_INDEX;
+         else if (option (OPTRESOLVE))
+         {
+           if ((menu->current = ci_next_undeleted (menu->current)) == -1)
+           {
+             menu->current = menu->oldcurrent;
+             menu->redraw |= REDRAW_CURRENT;
+           }
+           else
+             menu->redraw |= REDRAW_MOTION_RESYNCH;
+         }
+         else
+           menu->redraw |= REDRAW_CURRENT;
+       }
+       break;
+
+      case OP_MAIN_NEXT_NEW:
+      case OP_MAIN_NEXT_UNREAD:
+      case OP_MAIN_PREV_NEW:
+      case OP_MAIN_PREV_UNREAD:
+      case OP_MAIN_NEXT_NEW_THEN_UNREAD:
+      case OP_MAIN_PREV_NEW_THEN_UNREAD:
+
+      {
+       int first_unread = -1;
+       int first_new    = -1;
+       
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+
+       i = menu->current;
+       menu->current = -1;
+       for (j = 0; j != Context->vcount; j++)
+       {
+#define CURHDRi Context->hdrs[Context->v2r[i]] 
+         if (op == OP_MAIN_NEXT_NEW || op == OP_MAIN_NEXT_UNREAD || op == OP_MAIN_NEXT_NEW_THEN_UNREAD)
+         {
+           i++;
+           if (i > Context->vcount - 1)
+           {
+             mutt_message _("Search wrapped to top.");
+             i = 0;
+           }
+         }
+         else
+         {
+           i--;
+           if (i < 0)
+           {
+             mutt_message _("Search wrapped to bottom.");
+             i = Context->vcount - 1;
+           }
+         }
+
+         if (CURHDRi->collapsed && (Sort & SORT_MASK) == SORT_THREADS)
+         {
+           if (UNREAD (CURHDRi) && first_unread == -1)
+             first_unread = i;
+           if (UNREAD (CURHDRi) == 1 && first_new == -1)
+             first_new = i;
+         }
+         else if ((!CURHDRi->deleted && !CURHDRi->read))
+         {
+           if (first_unread == -1)
+             first_unread = i;
+           if ((!CURHDRi->old) && first_new == -1)
+             first_new = i;
+         }
+         
+         if ((op == OP_MAIN_NEXT_UNREAD || op == OP_MAIN_PREV_UNREAD) &&
+             first_unread != -1)
+           break;
+         if ((op == OP_MAIN_NEXT_NEW || op == OP_MAIN_PREV_NEW ||
+              op == OP_MAIN_NEXT_NEW_THEN_UNREAD || op == OP_MAIN_PREV_NEW_THEN_UNREAD)
+             && first_new != -1)
+           break;
+       }
+#undef CURHDRi
+       if ((op == OP_MAIN_NEXT_NEW || op == OP_MAIN_PREV_NEW ||
+            op == OP_MAIN_NEXT_NEW_THEN_UNREAD || op == OP_MAIN_PREV_NEW_THEN_UNREAD) 
+           && first_new != -1)
+         menu->current = first_new;
+       else if ((op == OP_MAIN_NEXT_UNREAD || op == OP_MAIN_PREV_UNREAD ||
+                 op == OP_MAIN_NEXT_NEW_THEN_UNREAD || op == OP_MAIN_PREV_NEW_THEN_UNREAD)
+                && first_unread != -1)
+         menu->current = first_unread;
+
+       if (menu->current == -1)
+       {
+         menu->current = menu->oldcurrent;
+         mutt_error ("%s%s.", (op == OP_MAIN_NEXT_NEW || op == OP_MAIN_PREV_NEW) ? _("No new messages") : _("No unread messages"),
+                     Context->pattern ? _(" in this limited view") : "");
+       }
+       else if (menu->menu == MENU_PAGER)
+       {
+         op = OP_DISPLAY_MESSAGE;
+         continue;
+       }
+       else
+         menu->redraw = REDRAW_MOTION;
+       break;
+      }
+      case OP_FLAG_MESSAGE:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       CHECK_READONLY;
+
+#ifdef USE_POP
+       if (Context->magic == M_POP)
+       {
+         mutt_flushinp ();
+         mutt_error _("Can't change 'important' flag on POP server.");
+         break;
+       }
+#endif
+
+#ifdef USE_IMAP
+CHECK_IMAP_ACL(IMAP_ACL_WRITE);
+#endif
+
+#ifdef USE_NNTP
+       if (Context->magic == M_NNTP)
+       {
+         mutt_flushinp ();
+         mutt_error _("Can't change 'important' flag on NNTP server.");
+         break;
+       }
+#endif
+
+        if (tag)
+        {
+         for (j = 0; j < Context->vcount; j++)
+         {
+           if (Context->hdrs[Context->v2r[j]]->tagged)
+             mutt_set_flag (Context, Context->hdrs[Context->v2r[j]],
+                            M_FLAG, !Context->hdrs[Context->v2r[j]]->flagged);
+         }
+
+         menu->redraw |= REDRAW_INDEX;
+       }
+        else
+        {
+         mutt_set_flag (Context, CURHDR, M_FLAG, !CURHDR->flagged);
+         if (option (OPTRESOLVE))
+         {
+           if ((menu->current = ci_next_undeleted (menu->current)) == -1)
+           {
+             menu->current = menu->oldcurrent;
+             menu->redraw = REDRAW_CURRENT;
+           }
+           else
+             menu->redraw = REDRAW_MOTION_RESYNCH;
+         }
+         else
+           menu->redraw = REDRAW_CURRENT;
+       }
+       menu->redraw |= REDRAW_STATUS;
+       break;
+
+      case OP_TOGGLE_NEW:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       CHECK_READONLY;
+
+#ifdef USE_IMAP
+CHECK_IMAP_ACL(IMAP_ACL_SEEN);
+#endif
+
+       if (tag)
+       {
+         for (j = 0; j < Context->vcount; j++)
+         {
+           if (Context->hdrs[Context->v2r[j]]->tagged)
+           {
+             if (Context->hdrs[Context->v2r[j]]->read ||
+                 Context->hdrs[Context->v2r[j]]->old)
+               mutt_set_flag (Context, Context->hdrs[Context->v2r[j]], M_NEW, 1);
+             else
+               mutt_set_flag (Context, Context->hdrs[Context->v2r[j]], M_READ, 1);
+           }
+         }
+         menu->redraw = REDRAW_STATUS | REDRAW_INDEX;
+       }
+       else
+       {
+         if (CURHDR->read || CURHDR->old)
+           mutt_set_flag (Context, CURHDR, M_NEW, 1);
+         else
+           mutt_set_flag (Context, CURHDR, M_READ, 1);
+
+         if (option (OPTRESOLVE))
+         {
+           if ((menu->current = ci_next_undeleted (menu->current)) == -1)
+           {
+             menu->current = menu->oldcurrent;
+             menu->redraw = REDRAW_CURRENT;
+           }
+           else
+             menu->redraw = REDRAW_MOTION_RESYNCH;
+         }
+         else
+           menu->redraw = REDRAW_CURRENT;
+         menu->redraw |= REDRAW_STATUS;
+       }
+       break;
+
+      case OP_TOGGLE_WRITE:
+
+       CHECK_MSGCOUNT;
+       if (mx_toggle_write (Context) == 0)
+         menu->redraw |= REDRAW_STATUS;
+       break;
+
+      case OP_MAIN_NEXT_THREAD:
+      case OP_MAIN_NEXT_SUBTHREAD:
+      case OP_MAIN_PREV_THREAD:
+      case OP_MAIN_PREV_SUBTHREAD:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       switch (op)
+       {
+         case OP_MAIN_NEXT_THREAD:
+           menu->current = mutt_next_thread (CURHDR);
+           break;
+
+         case OP_MAIN_NEXT_SUBTHREAD:
+           menu->current = mutt_next_subthread (CURHDR);
+           break;
+           
+         case OP_MAIN_PREV_THREAD:
+           menu->current = mutt_previous_thread (CURHDR);
+           break;
+
+         case OP_MAIN_PREV_SUBTHREAD:
+           menu->current = mutt_previous_subthread (CURHDR);
+           break;
+       }
+
+       if (menu->current < 0)
+       {
+         menu->current = menu->oldcurrent;
+         if (op == OP_MAIN_NEXT_THREAD || op == OP_MAIN_NEXT_SUBTHREAD)
+           mutt_error _("No more threads.");
+         else
+           mutt_error _("You are on the first thread.");
+       }
+       else if (menu->menu == MENU_PAGER)
+       {
+         op = OP_DISPLAY_MESSAGE;
+         continue;
+       }
+       else
+         menu->redraw = REDRAW_MOTION;
+       break;
+
+      case OP_MAIN_PARENT_MESSAGE:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+
+       if ((menu->current = mutt_parent_message (Context, CURHDR)) < 0)
+       {
+         menu->current = menu->oldcurrent;
+       }
+       else if (menu->menu == MENU_PAGER)
+        {
+          op = OP_DISPLAY_MESSAGE;
+          continue;
+        }
+        else
+          menu->redraw = REDRAW_MOTION;
+       break;
+
+      case OP_MAIN_SET_FLAG:
+      case OP_MAIN_CLEAR_FLAG:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       CHECK_READONLY;
+       
+/* #ifdef USE_IMAP
+CHECK_IMAP_ACL(IMAP_ACL_WRITE);
+#endif */
+
+       if (mutt_change_flag (tag ? NULL : CURHDR, (op == OP_MAIN_SET_FLAG)) == 0)
+       {
+         menu->redraw = REDRAW_STATUS;
+         if (tag)
+           menu->redraw |= REDRAW_INDEX;
+         else if (option (OPTRESOLVE))
+         {
+           if ((menu->current = ci_next_undeleted (menu->current)) == -1)
+           {
+             menu->current = menu->oldcurrent;
+             menu->redraw |= REDRAW_CURRENT;
+           }
+           else
+             menu->redraw |= REDRAW_MOTION_RESYNCH;
+         }
+         else
+           menu->redraw |= REDRAW_CURRENT;
+       }
+       break;
+
+      case OP_MAIN_COLLAPSE_THREAD:
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+
+        if ((Sort & SORT_MASK) != SORT_THREADS)
+        {
+         mutt_error _("Threading is not enabled.");
+         break;
+       }
+      
+       if (CURHDR->collapsed)
+       {
+         menu->current = mutt_uncollapse_thread (Context, CURHDR);
+         mutt_set_virtual (Context);
+         if (option (OPTUNCOLLAPSEJUMP))
+           menu->current = mutt_thread_next_unread (Context, CURHDR);
+       }
+       else if (option (OPTCOLLAPSEUNREAD) || !UNREAD (CURHDR))
+       {
+         menu->current = mutt_collapse_thread (Context, CURHDR);
+         mutt_set_virtual (Context);
+       }
+       else
+       {
+         mutt_error _("Thread contains unread messages.");
+         break;
+       }
+
+       menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
+
+       break;
+
+      case OP_MAIN_COLLAPSE_ALL:
+        CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+
+        if ((Sort & SORT_MASK) != SORT_THREADS)
+        {
+         mutt_error _("Threading is not enabled.");
+         break;
+       }
+
+        {
+         HEADER *h, *base;
+         THREAD *thread, *top;
+         int final;
+         
+         if (CURHDR->collapsed)
+           final = mutt_uncollapse_thread (Context, CURHDR);
+         else if (option (OPTCOLLAPSEUNREAD) || !UNREAD (CURHDR))
+           final = mutt_collapse_thread (Context, CURHDR);
+         else
+           final = CURHDR->virtual;
+         
+         base = Context->hdrs[Context->v2r[final]];
+         
+         top = Context->tree;
+         Context->collapsed = !Context->collapsed;
+         while ((thread = top) != NULL)
+         {
+           while (!thread->message)
+             thread = thread->child;
+           h = thread->message;
+
+           if (h->collapsed != Context->collapsed)
+           {
+             if (h->collapsed)
+               mutt_uncollapse_thread (Context, h);
+             else if (option (OPTCOLLAPSEUNREAD) || !UNREAD (h))
+               mutt_collapse_thread (Context, h);
+           }
+           top = top->next;
+         }
+         
+         mutt_set_virtual (Context);
+         for (j = 0; j < Context->vcount; j++)
+         {
+           if (Context->hdrs[Context->v2r[j]]->index == base->index)
+           {
+             menu->current = j;
+             break;
+           }
+         }
+         
+         menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
+       }
+       break;
+      
+      /* --------------------------------------------------------------------
+       * These functions are invoked directly from the internal-pager
+       */
+
+      case OP_BOUNCE_MESSAGE:
+
+       CHECK_ATTACH;
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       ci_bounce_message (tag ? NULL : CURHDR, &menu->redraw);
+       break;
+
+      case OP_CREATE_ALIAS:
+
+        mutt_create_alias (Context && Context->vcount ? CURHDR->env : NULL, NULL);
+       MAYBE_REDRAW (menu->redraw);
+        menu->redraw |= REDRAW_CURRENT;
+       break;
+
+      case OP_QUERY:
+       CHECK_ATTACH;
+       mutt_query_menu (NULL, 0);
+       MAYBE_REDRAW (menu->redraw);
+       break;
+
+      case OP_PURGE_MESSAGE:
+      case OP_DELETE:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       CHECK_READONLY;
+       
+#ifdef USE_IMAP
+CHECK_IMAP_ACL(IMAP_ACL_DELETE);
+#endif
+
+       if (tag)
+       {
+         mutt_tag_set_flag (M_DELETE, 1);
+         mutt_tag_set_flag (M_PURGED, (op != OP_PURGE_MESSAGE) ? 0 : 1);
+         if (option (OPTDELETEUNTAG))
+           mutt_tag_set_flag (M_TAG, 0);
+         menu->redraw = REDRAW_INDEX;
+       }
+       else
+       {
+         mutt_set_flag (Context, CURHDR, M_DELETE, 1);
+         mutt_set_flag (Context, CURHDR, M_PURGED,
+                        (op != OP_PURGE_MESSAGE) ? 0 : 1);
+         if (option (OPTDELETEUNTAG))
+           mutt_set_flag (Context, CURHDR, M_TAG, 0);
+         if (option (OPTRESOLVE))
+         {
+           if ((menu->current = ci_next_undeleted (menu->current)) == -1)
+           {
+             menu->current = menu->oldcurrent;
+             menu->redraw = REDRAW_CURRENT;
+           }
+           else if (menu->menu == MENU_PAGER)
+           {
+             op = OP_DISPLAY_MESSAGE;
+             continue;
+           }
+           else
+             menu->redraw |= REDRAW_MOTION_RESYNCH;
+         }
+         else
+           menu->redraw = REDRAW_CURRENT;
+       }
+       menu->redraw |= REDRAW_STATUS;
+       break;
+
+      case OP_DELETE_THREAD:
+      case OP_DELETE_SUBTHREAD:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       CHECK_READONLY;
+
+#ifdef USE_IMAP
+CHECK_IMAP_ACL(IMAP_ACL_DELETE);
+#endif
+
+       rc = mutt_thread_set_flag (CURHDR, M_DELETE, 1,
+                                  op == OP_DELETE_THREAD ? 0 : 1);
+
+       if (rc != -1)
+       {
+         if (option (OPTDELETEUNTAG))
+           mutt_thread_set_flag (CURHDR, M_TAG, 0, 
+                                 op == OP_DELETE_THREAD ? 0 : 1);
+         if (option (OPTRESOLVE))
+           if ((menu->current = ci_next_undeleted (menu->current)) == -1)
+             menu->current = menu->oldcurrent;
+         menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
+       }
+       break;
+
+#ifdef USE_NNTP
+      case OP_CATCHUP:
+       if (Context && Context->magic == M_NNTP)
+       {
+         if (mutt_newsgroup_catchup (CurrentNewsSrv,
+               ((NNTP_DATA *)Context->data)->group))
+           menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
+       }
+       break;
+#endif
+
+      case OP_DISPLAY_ADDRESS:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       mutt_display_address (CURHDR->env);
+       break;
+
+      case OP_ENTER_COMMAND:
+
+       CurrentMenu = MENU_MAIN;
+       mutt_enter_command ();
+       mutt_check_rescore (Context);
+       if (option (OPTFORCEREDRAWINDEX))
+         menu->redraw = REDRAW_FULL;
+       unset_option (OPTFORCEREDRAWINDEX);
+       unset_option (OPTFORCEREDRAWPAGER);
+       break;
+
+      case OP_EDIT_MESSAGE:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       CHECK_READONLY;
+       CHECK_ATTACH;
+
+#ifdef USE_POP
+       if (Context->magic == M_POP)
+       {
+         mutt_flushinp ();
+         mutt_error _("Can't edit message on POP server.");
+         break;
+       }
+#endif
+
+#ifdef USE_IMAP
+CHECK_IMAP_ACL(IMAP_ACL_INSERT);
+#endif
+
+#ifdef USE_NNTP
+       if (Context->magic == M_NNTP)
+       {
+         mutt_flushinp ();
+         mutt_error _("Can't edit message on newsserver.");
+         break;
+       }
+#endif
+
+        mutt_edit_message (Context, tag ? NULL : CURHDR);
+       menu->redraw = REDRAW_FULL;
+
+       break;
+
+      case OP_FORWARD_MESSAGE:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       CHECK_ATTACH;
+       ci_send_message (SENDFORWARD, NULL, NULL, Context, tag ? NULL : CURHDR);
+       menu->redraw = REDRAW_FULL;
+       break;
+
+
+      case OP_FORGET_PASSPHRASE:
+       crypt_forget_passphrase ();
+       break;
+
+      case OP_GROUP_REPLY:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       CHECK_ATTACH;
+       ci_send_message (SENDREPLY|SENDGROUPREPLY, NULL, NULL, Context, tag ? NULL : CURHDR);
+       menu->redraw = REDRAW_FULL;
+       break;
+
+      case OP_LIST_REPLY:
+
+       CHECK_ATTACH;
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       ci_send_message (SENDREPLY|SENDLISTREPLY, NULL, NULL, Context, tag ? NULL : CURHDR);
+       menu->redraw = REDRAW_FULL;
+       break;
+
+      case OP_MAIL:
+
+       CHECK_ATTACH;
+       ci_send_message (0, NULL, NULL, Context, NULL);
+       menu->redraw = REDRAW_FULL;
+       break;
+
+      case OP_MAIL_KEY:
+        if (!(WithCrypto & APPLICATION_PGP))
+          break;
+       CHECK_ATTACH;
+       ci_send_message (SENDKEY, NULL, NULL, NULL, NULL);
+       menu->redraw = REDRAW_FULL;
+       break;
+
+      
+      case OP_EXTRACT_KEYS:
+        if (!WithCrypto)
+          break;
+        CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+        crypt_extract_keys_from_messages(tag ? NULL : CURHDR);
+        menu->redraw = REDRAW_FULL;
+        break;
+
+
+      case OP_CHECK_TRADITIONAL:
+        if (!(WithCrypto & APPLICATION_PGP))
+          break;
+        CHECK_MSGCOUNT; 
+        CHECK_VISIBLE;
+        mutt_check_traditional_pgp (tag ? NULL : CURHDR, &menu->redraw);
+        if (menu->menu == MENU_PAGER)
+        {
+         op = OP_DISPLAY_MESSAGE;
+         continue;
+       }
+        break;
+      
+      case OP_PIPE:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       mutt_pipe_message (tag ? NULL : CURHDR);
+       MAYBE_REDRAW (menu->redraw);
+       break;
+
+      case OP_PRINT:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       mutt_print_message (tag ? NULL : CURHDR);
+       break;
+
+      case OP_MAIN_READ_THREAD:
+      case OP_MAIN_READ_SUBTHREAD:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       CHECK_READONLY;
+
+#ifdef USE_IMAP
+CHECK_IMAP_ACL(IMAP_ACL_SEEN);
+#endif
+
+       rc = mutt_thread_set_flag (CURHDR, M_READ, 1,
+                                  op == OP_MAIN_READ_THREAD ? 0 : 1);
+
+       if (rc != -1)
+       {
+         if (option (OPTRESOLVE))
+         {
+           if ((menu->current = (op == OP_MAIN_READ_THREAD ? 
+                                 mutt_next_thread (CURHDR) : mutt_next_subthread (CURHDR))) == -1)
+             menu->current = menu->oldcurrent;
+         }
+         menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
+       }
+       break;
+
+      case OP_RECALL_MESSAGE:
+
+       CHECK_ATTACH;
+       ci_send_message (SENDPOSTPONED, NULL, NULL, Context, NULL);
+       menu->redraw = REDRAW_FULL;
+       break;
+
+      case OP_RESEND:
+      
+        CHECK_ATTACH;
+        CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+      
+        if (tag)
+        {
+         for (j = 0; j < Context->vcount; j++)
+         {
+           if (Context->hdrs[Context->v2r[j]]->tagged)
+             mutt_resend_message (NULL, Context, Context->hdrs[Context->v2r[j]]);
+         }
+       }
+        else
+         mutt_resend_message (NULL, Context, CURHDR);
+      
+        menu->redraw = REDRAW_FULL;
+        break;
+
+#ifdef USE_NNTP
+      case OP_POST:
+      case OP_FOLLOWUP:
+      case OP_FORWARD_TO_GROUP:
+
+       CHECK_ATTACH;
+       if (op != OP_FOLLOWUP || !CURHDR->env->followup_to ||
+           mutt_strcasecmp (CURHDR->env->followup_to, "poster") ||
+           query_quadoption (OPT_FOLLOWUPTOPOSTER,_("Reply by mail as poster prefers?")) != M_YES)
+       {
+         if (Context && Context->magic == M_NNTP &&
+             !((NNTP_DATA *)Context->data)->allowed &&
+             query_quadoption (OPT_TOMODERATED, _("Posting to this group not allowed, may be moderated. Continue?")) != M_YES)
+           break;
+         if (op == OP_POST)
+           ci_send_message (SENDNEWS, NULL, NULL, Context, NULL);
+         else
+         {
+           CHECK_MSGCOUNT;
+           if (op == OP_FOLLOWUP)
+             ci_send_message (SENDNEWS|SENDREPLY, NULL, NULL, Context,
+                              tag ? NULL : CURHDR);
+           else
+             ci_send_message (SENDNEWS|SENDFORWARD, NULL, NULL, Context,
+                              tag ? NULL : CURHDR);
+         }
+         menu->redraw = REDRAW_FULL;
+         break;
+       }
+#endif
+      
+      case OP_REPLY:
+
+       CHECK_ATTACH;
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       ci_send_message (SENDREPLY, NULL, NULL, Context, tag ? NULL : CURHDR);
+       menu->redraw = REDRAW_FULL;
+       break;
+
+      case OP_SHELL_ESCAPE:
+
+       mutt_shell_escape ();
+       MAYBE_REDRAW (menu->redraw);
+       break;
+
+      case OP_TAG_THREAD:
+      case OP_TAG_SUBTHREAD:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       rc = mutt_thread_set_flag (CURHDR, M_TAG, !CURHDR->tagged,
+                                  op == OP_TAG_THREAD ? 0 : 1);
+       
+       if (rc != -1)
+       {
+         if (option (OPTRESOLVE))
+         {
+           menu->current = mutt_next_thread (CURHDR);
+
+           if (menu->current == -1)
+             menu->current = menu->oldcurrent;
+         }
+         menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
+       }
+       break;
+
+      case OP_UNDELETE:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       CHECK_READONLY;
+
+#ifdef USE_IMAP
+CHECK_IMAP_ACL(IMAP_ACL_DELETE);
+#endif
+       
+       if (tag)
+       {
+         mutt_tag_set_flag (M_DELETE, 0);
+         mutt_tag_set_flag (M_PURGED, 0);
+         menu->redraw = REDRAW_INDEX;
+       }
+       else
+       {
+         mutt_set_flag (Context, CURHDR, M_DELETE, 0);
+         mutt_set_flag (Context, CURHDR, M_PURGED, 0);
+         if (option (OPTRESOLVE) && menu->current < Context->vcount - 1)
+         {
+           menu->current++;
+           menu->redraw = REDRAW_MOTION_RESYNCH;
+         }
+         else
+           menu->redraw = REDRAW_CURRENT;
+       }
+       menu->redraw |= REDRAW_STATUS;
+       break;
+
+      case OP_UNDELETE_THREAD:
+      case OP_UNDELETE_SUBTHREAD:
+
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       CHECK_READONLY;
+
+#ifdef USE_IMAP
+CHECK_IMAP_ACL(IMAP_ACL_DELETE);
+#endif
+
+       rc = mutt_thread_set_flag (CURHDR, M_DELETE, 0,
+                                  op == OP_UNDELETE_THREAD ? 0 : 1)
+         + mutt_thread_set_flag (CURHDR, M_PURGED, 0,
+                                 op == OP_UNDELETE_THREAD ? 0 : 1);
+
+       if (rc > -1)
+       {
+         if (option (OPTRESOLVE))
+         {
+           if (op == OP_UNDELETE_THREAD)
+             menu->current = mutt_next_thread (CURHDR);
+           else
+             menu->current = mutt_next_subthread (CURHDR);
+
+           if (menu->current == -1)
+             menu->current = menu->oldcurrent;
+         }
+         menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
+       }
+       break;
+
+      case OP_VERSION:
+       mutt_version ();
+       break;
+
+      case OP_BUFFY_LIST:
+       mutt_buffy_list ();
+       break;
+
+      case OP_VIEW_ATTACHMENTS:
+       CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+       mutt_view_attachments (CURHDR);
+       if (CURHDR->attach_del)
+         Context->changed = 1;
+       menu->redraw = REDRAW_FULL;
+       break;
+
+      case OP_END_COND:
+       break;
+
+      case OP_WHAT_KEY:
+       mutt_what_key();
+       break;
+
+      default:
+       if (menu->menu == MENU_MAIN)
+         km_error_key (MENU_MAIN);
+    }
+
+    if (menu->menu == MENU_PAGER)
+    {
+      menu->menu = MENU_MAIN;
+      menu->redraw = REDRAW_FULL;
+#if 0
+      set_option (OPTWEED); /* turn header weeding back on. */
+#endif
+    }
+
+    if (done) break;
+  }
+
+#ifdef USE_IMAP
+  /* Close all open IMAP connections */
+  if (!attach_msg)
+    imap_logout_all ();
+#endif
+#ifdef USE_NNTP
+  /* Close all open NNTP connections */
+  if (!attach_msg)
+    nntp_logout_all ();
+#endif
+
+  mutt_menuDestroy (&menu);
+  return (close);
+}
+
+void mutt_set_header_color (CONTEXT *ctx, HEADER *curhdr)
+{
+  COLOR_LINE *color;
+
+  if (!curhdr)
+    return;
+  
+  for (color = ColorIndexList; color; color = color->next)
+   if (mutt_pattern_exec (color->color_pattern, M_MATCH_FULL_ADDRESS, ctx, curhdr))
+   {
+      curhdr->pair = color->pair;
+      return;
+   }
+  curhdr->pair = ColorDefs[MT_COLOR_NORMAL];
+}
diff --git a/cvslog2changelog.pl b/cvslog2changelog.pl
new file mode 100644 (file)
index 0000000..6f083ef
--- /dev/null
@@ -0,0 +1,120 @@
+#!/usr/bin/perl
+
+# use Data::Dumper;
+
+%Authors = (roessler => 'Thomas Roessler <roessler@does-not-exist.org>',
+           me => 'Michael Elkins <me@mutt.org>');
+
+@Changes = ();
+$change = {};
+
+while (<>) {
+    chomp $_;
+    if ($_ =~ /^Working file: (.*)$/) {
+       $workfile = $1;
+       $change->{workfile} = $workfile;
+       $change->{logmsg}   = '';
+       $change->{author}   = '';
+       $change->{revision} = '';
+
+#      print STDERR "workfile: ", $workfile, "\n";
+       
+    } 
+    elsif ($_ =~ /^(=======|------)/) {
+       if ($change->{revision}) {
+           
+           # Some beautifications: Date, author.
+           if ($change->{author} =~ /^(.*?)\s?\<(.*)\>/) {
+               $change->{author} = "$1  <$2>";
+           }
+           $change->{date} =~ s!/!-!g;
+           
+           # Record the change.
+           push @Changes, $change unless $change->{logmsg} =~ /^#/;
+           $change = {};
+           $change->{workfile} = $workfile;
+           $change->{logmsg}   = '';
+           $change->{author}   = '';
+       }
+    } elsif ($_ =~ /^revision ([0-9.]*)/) {
+       $change->{revision} = $1;
+    } elsif ($_ =~ /^date: ([^; ]*) ([^; ]*);  author: ([^;]*);/) {
+       $change->{date} = $1;
+       $change->{hour} = $2;
+       $change->{author} = $Authors{$3} ? $Authors{$3} : $3;
+       $change->{committed} = $3;
+    } elsif ($_ =~ /^From: (.*)$/) {
+       $change->{author} = $1;
+    } elsif ($change->{revision}) {
+       if ($change->{logmsg} || $_) {
+           $change->{logmsg} .= $_ . "\n";
+       }
+    }
+}
+
+# print Dumper @Changes;
+
+undef $last_logmsg; undef $last_author; undef $last_date; undef $last_hour; undef $last_comm;
+$files = [];
+
+for my $k (sort {($b->{date} cmp $a->{date}) || ($b->{hour} cmp $a->{hour}) || ($a->{author} cmp $b->{author}) || ($a->{workfile} cmp $b->{workfile})} @Changes) {
+    
+    if (!($last_date eq $k->{date}) || !($last_author eq $k->{author}) ||
+       !($last_comm eq $k->{committed})) {
+       if (@$files) {
+           &print_entry ($files, $last_logmsg);
+           $files = [];
+       }
+       &print_header ($k->{author}, $k->{committed}, $k->{date}, $k->{hour});
+    }
+    if (@$files && !($last_logmsg eq $k->{logmsg})) {
+       &print_entry ($files, $last_logmsg);
+       $files = [];
+    }
+      
+    
+    $last_comm   = $k->{committed};
+    $last_logmsg = $k->{logmsg};
+    $last_author = $k->{author};
+    $last_date   = $k->{date};
+    $last_hour   = $k->{hour};
+    
+    push @$files, $k->{workfile};
+}
+
+if (@$files) {
+    &print_entry ($files, $last_logmsg);
+}
+
+sub print_header {
+    my $author = shift;
+    my $committed = shift;
+    my $date = shift;
+    my $hour = shift;
+    
+    print $date, " ", $hour, "  ", $author, "  (", $committed, ")\n\n";
+}
+
+sub print_entry  {
+    my $files = shift;
+    my $logmsg = shift;
+    
+
+    print "\t* ";
+    my $c = '';
+    
+    for my $f (@$files) {
+       print $c, $f;
+       $c = ', ' unless $c;
+    }
+    
+    print ": ";
+    
+    my $t = '';
+    for my $l (split ('\n', $logmsg)) {
+       print $t, $l, "\n";
+       $t = "\t" unless $t;
+    }
+    print "\n";
+}
diff --git a/date.c b/date.c
new file mode 100644 (file)
index 0000000..cc8e4e3
--- /dev/null
+++ b/date.c
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include <string.h>
+
+/* returns the seconds east of UTC given `g' and its corresponding gmtime()
+   representation */
+static time_t compute_tz (time_t g, struct tm *utc)
+{
+  struct tm *lt = localtime (&g);
+  time_t t;
+  int yday;
+
+  t = (((lt->tm_hour - utc->tm_hour) * 60) + (lt->tm_min - utc->tm_min)) * 60;
+
+  if ((yday = (lt->tm_yday - utc->tm_yday)))
+  {
+    /* This code is optimized to negative timezones (West of Greenwich) */
+    if (yday == -1 ||  /* UTC passed midnight before localtime */
+       yday > 1)       /* UTC passed new year before localtime */
+      t -= 24 * 60 * 60;
+    else
+      t += 24 * 60 * 60;
+  }
+
+  return t;
+}
+
+/* Returns the local timezone in seconds east of UTC for the time t,
+ * or for the current time if t is zero.
+ */
+time_t mutt_local_tz (time_t t)
+{
+  struct tm *ptm;
+  struct tm utc;
+
+  if (!t)
+    t = time (NULL);
+  ptm = gmtime (&t);
+  /* need to make a copy because gmtime/localtime return a pointer to
+     static memory (grr!) */
+  memcpy (&utc, ptm, sizeof (utc));
+  return (compute_tz (t, &utc));
+}
+
+/* converts struct tm to time_t, but does not take the local timezone into
+   account unless ``local'' is nonzero */
+time_t mutt_mktime (struct tm *t, int local)
+{
+  time_t g;
+
+  static int AccumDaysPerMonth[12] = {
+    0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
+  };
+
+  /* Compute the number of days since January 1 in the same year */
+  g = AccumDaysPerMonth [t->tm_mon % 12];
+
+  /* The leap years are 1972 and every 4. year until 2096,
+   * but this algoritm will fail after year 2099 */
+  g += t->tm_mday;
+  if ((t->tm_year % 4) || t->tm_mon < 2)
+    g--;
+  t->tm_yday = g;
+
+  /* Compute the number of days since January 1, 1970 */
+  g += (t->tm_year - 70) * 365;
+  g += (t->tm_year - 69) / 4;
+
+  /* Compute the number of hours */
+  g *= 24;
+  g += t->tm_hour;
+
+  /* Compute the number of minutes */
+  g *= 60;
+  g += t->tm_min;
+
+  /* Compute the number of seconds */
+  g *= 60;
+  g += t->tm_sec;
+
+  if (local)
+    g -= compute_tz (g, t);
+
+  return (g);
+}
+
+/* Return 1 if month is February of leap year, else 0 */
+static int isLeapYearFeb (struct tm *tm)
+{
+  if (tm->tm_mon == 1)
+  {
+    int y = tm->tm_year + 1900;
+    return (((y & 3) == 0) && (((y % 100) != 0) || ((y % 400) == 0)));
+  }
+  return (0);
+}
+
+void mutt_normalize_time (struct tm *tm)
+{
+  static char DaysPerMonth[12] = {
+    31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
+  };
+  int nLeap;
+
+  while (tm->tm_sec < 0)
+  {
+    tm->tm_sec += 60;
+    tm->tm_min--;
+  }
+  while (tm->tm_sec >= 60)
+  {
+    tm->tm_sec -= 60;
+    tm->tm_min++;
+  }
+  while (tm->tm_min < 0)
+  {
+    tm->tm_min += 60;
+    tm->tm_hour--;
+  }
+  while (tm->tm_min >= 60)
+  {
+    tm->tm_min -= 60;
+    tm->tm_hour++;
+  }
+  while (tm->tm_hour < 0)
+  {
+    tm->tm_hour += 24;
+    tm->tm_mday--;
+  }
+  while (tm->tm_hour >= 24)
+  {
+    tm->tm_hour -= 24;
+    tm->tm_mday++;
+  }
+  /* use loops on NNNdwmy user input values? */
+  while (tm->tm_mon < 0)
+  {
+    tm->tm_mon += 12;
+    tm->tm_year--;
+  }
+  while (tm->tm_mon >= 12)
+  {
+    tm->tm_mon -= 12;
+    tm->tm_year++;
+  }
+  while (tm->tm_mday <= 0)
+  {
+    if (tm->tm_mon)
+      tm->tm_mon--;
+    else
+    {
+      tm->tm_mon = 11;
+      tm->tm_year--;
+    }
+    tm->tm_mday += DaysPerMonth[tm->tm_mon] + isLeapYearFeb (tm);
+  }
+  while (tm->tm_mday > (DaysPerMonth[tm->tm_mon] + 
+       (nLeap = isLeapYearFeb (tm))))
+  {
+    tm->tm_mday -= DaysPerMonth[tm->tm_mon] + nLeap;
+    if (tm->tm_mon < 11)
+      tm->tm_mon++;
+    else
+    {
+      tm->tm_mon = 0;
+      tm->tm_year++;
+    }
+  }
+}
diff --git a/depcomp b/depcomp
new file mode 100644 (file)
index 0000000..51606f8
--- /dev/null
+++ b/depcomp
@@ -0,0 +1,464 @@
+#! /bin/sh
+
+# depcomp - compile a program generating dependencies as side-effects
+# Copyright 1999, 2000 Free Software Foundation, Inc.
+
+# 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, 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-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+# `libtool' can also be set to `yes' or `no'.
+
+if test -z "$depfile"; then
+   base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
+   dir=`echo "$object" | sed 's,/.*$,/,'`
+   if test "$dir" = "$object"; then
+      dir=
+   fi
+   # FIXME: should be _deps on DOS.
+   depfile="$dir.deps/$base"
+fi
+
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> $depfile
+    echo >> $depfile
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> $depfile
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  This file always lives in the current directory.
+  # Also, the AIX compiler puts `$object:' at the start of each line;
+  # $object doesn't have directory information.
+  stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
+  tmpdepfile="$stripped.u"
+  outname="$stripped.o"
+  if test "$libtool" = yes; then
+    "$@" -Wc,-M
+  else
+    "$@" -M
+  fi
+
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Must come before tru64.
+
+  # Intel's C compiler understands `-MD -MF file'.  However
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed -e "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  sed -e "s,^[^:]*: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      tmpdepfile1="$dir.libs/$base.lo.d"
+      tmpdepfile2="$dir.libs/$base.d"
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1="$dir$base.o.d"
+      tmpdepfile2="$dir$base.d"
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2"
+      exit $stat
+   fi
+
+   if test -f "$tmpdepfile1"; then
+      tmpdepfile="$tmpdepfile1"
+   else
+      tmpdepfile="$tmpdepfile2"
+   fi
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a space and a tab in the [].
+      sed -e 's,^.*\.[a-z]*:[  ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the proprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no
+  for arg in "$@"; do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the proprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the proprocessed file to stdout, regardless of -o,
+  # because we must use -o when running libtool.
+  "$@" || exit $?
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+       set fnord "$@"
+       shift
+       shift
+       ;;
+    *)
+       set fnord "$@" "$arg"
+       shift
+       shift
+       ;;
+    esac
+  done
+  "$@" -E |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::   \1 \\:p' >> "$depfile"
+  echo "       " >> "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644 (file)
index 0000000..09165a2
--- /dev/null
@@ -0,0 +1,169 @@
+# $Id: Makefile.in,v 3.2 2002/12/07 14:15:01 roessler Exp $
+
+SHELL = /bin/sh
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+bindir = @bindir@
+libdir = @libdir@
+mandir = @mandir@
+srcdir = @srcdir@
+docdir = @docdir@
+includedir  =  @includedir@
+top_srcdir=@top_srcdir@
+top_builddir = ..
+VPATH = @srcdir@
+@SET_MAKE@
+
+INSTALL = @INSTALL@
+CC = @CC@
+CPP = @CPP@
+XCPPFLAGS = -I. @CPPFLAGS@
+CFLAGS = @CFLAGS@ $(XCPPFLAGS)
+LDFLAGS = @LDFLAGS@
+subdir = doc
+
+CPPFLAGS = @CPPFLAGS@
+
+DEFS = -DSYSCONFDIR=\"$(sysconfdir)\" -DBINDIR=\"$(bindir)\" -DHAVE_CONFIG_H=1
+INCLUDES = -I. -I.. -I$(includedir) -I$(top_srcdir)
+
+MAKEDOC_CPP = $(CPP) $(INCLUDES) $(DEFS) $(CPPFLAGS) -D_MAKEDOC -C 
+
+DISTFILES = Makefile.in dotlock.man    \
+       muttbug.man                     \
+       mutt.man                        \
+       PGP-Notes.txt                   \
+       applying-patches.txt            \
+       devel-notes.txt                 \
+       manual.txt                      \
+       muttrc.man.head                 \
+       muttrc.man.tail                 \
+       muttrc.man                      \
+       mbox.man                        \
+       manual.sgml.head                \
+       manual.sgml.tail                \
+       manual.sgml                     \
+       manual.html                     \
+       stamp-doc-sgml                  \
+       stamp-doc-man                   \
+       instdoc.sh.in                   \
+       patch-notes.txt                 \
+       smime-notes.txt
+
+srcdir_DOCFILES = PGP-Notes.txt applying-patches.txt   \
+       devel-notes.txt patch-notes.txt smime-notes.txt
+
+
+topsrcdir_DOCFILES = COPYRIGHT GPL INSTALL ChangeLog   \
+       ChangeLog.old                                   \
+       README NEWS TODO README.SECURITY README.SSL 
+
+all: muttrc.man try-html try-txt
+
+try-html: ../makedoc
+       test -f manual.html || $(MAKE) manual.html || cp $(srcdir)/manual*.html ./
+
+try-txt: ../makedoc
+       test -f manual.txt || $(MAKE) manual.txt || cp $(srcdir)/manual.txt ./
+
+install: all instdoc
+       $(top_srcdir)/mkinstalldirs $(DESTDIR)$(mandir)/man1
+       $(top_srcdir)/mkinstalldirs $(DESTDIR)$(mandir)/man5
+       ./instdoc $(srcdir)/mutt.man $(DESTDIR)$(mandir)/man1/mutt.1
+       ./instdoc $(srcdir)/muttbug.man $(DESTDIR)$(mandir)/man1/flea.1
+       echo ".so $(mandir)/man1/flea.1" > $(DESTDIR)$(mandir)/man1/muttbug.1
+       ./instdoc $(srcdir)/dotlock.man \
+               $(DESTDIR)$(mandir)/man1/mutt_dotlock.1
+       ./instdoc muttrc.man $(DESTDIR)$(mandir)/man5/muttrc.5
+       ./instdoc $(srcdir)/mbox.man $(DESTDIR)$(mandir)/man5/mbox.5
+       $(top_srcdir)/mkinstalldirs $(DESTDIR)$(docdir)
+       for f in $(srcdir_DOCFILES) ; do \
+               $(INSTALL) -m 644 $(srcdir)/$$f $(DESTDIR)$(docdir) ; \
+       done
+       for f in $(topsrcdir_DOCFILES) ; do \
+               $(INSTALL) -m 644 $(top_srcdir)/$$f $(DESTDIR)$(docdir) ; \
+       done
+       $(INSTALL) -m 644 manual.txt $(DESTDIR)$(docdir) || true
+       $(top_srcdir)/mkinstalldirs $(DESTDIR)$(docdir)/html
+       for file in manual*.html ; do   \
+               $(INSTALL) -m 644 $$file $(DESTDIR)$(docdir)/html/ || true ;\
+       done
+
+uninstall:
+       -rm -f $(DESTDIR)$(mandir)/man1/mutt.1
+       -rm -f $(DESTDIR)$(mandir)/man1/mutt_dotlock.1
+       -rm -f $(DESTDIR)$(mandir)/man5/muttrc.5
+       -rm -rf $(DESTDIR)$(docdir)
+
+check:
+manual.txt: manual.sgml
+       if sgml2txt -c latin manual ; then \
+               uniq < manual.txt | expand > _manual.txt ; \
+               rm manual.txt ; \
+               mv _manual.txt manual.txt ;\
+       fi
+
+manual.html: manual.sgml
+       sgml2html manual  || true
+
+manual.ps: manual.sgml
+       sgml2latex --output=ps manual || true
+
+clean: 
+       rm -f *~ *.html *.orig *.rej  stamp-doc-sgml stamp-doc-man *.ps
+
+clean-real:
+       rm -f manual.txt
+
+maintainer-clean: clean clean-real distclean
+
+distclean: clean
+       rm -f Makefile
+
+Makefile: Makefile.in ../config.status
+       cd .. \
+         && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+instdoc: instdoc.sh
+       cat instdoc.sh > instdoc
+       chmod a+x instdoc
+
+instdoc.sh: instdoc.sh.in ../config.status
+       cd .. \
+         && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: Makefile $(DISTFILES)
+       for file in $(DISTFILES) ; do                           \
+               ln $(srcdir)/$$file $(distdir) 2> /dev/null     \
+                       || cp -p $(srcdir)/$$file $(distdir);   \
+       done
+       for file in $(srcdir)/manual-*.html ; do                \
+               ln $$file $(distdir) 2> /dev/null               \
+               || cp -p $$file $(distdir) ;                    \
+       done
+
+../makedoc: $(top_srcdir)/makedoc.c
+       (cd .. && $(MAKE) makedoc)
+
+# hack around autoconf mixing up patterns.
+at = @
+
+update-doc:  ../makedoc stamp-doc-sgml stamp-doc-man manual.txt manual.html
+
+muttrc.man stamp-doc-man: ../makedoc $(top_srcdir)/init.h muttrc.man.head muttrc.man.tail
+       $(MAKEDOC_CPP) $(top_srcdir)/init.h | ../makedoc -m |       \
+               cat $(srcdir)/muttrc.man.head - $(srcdir)/muttrc.man.tail\
+               > muttrc.man
+       touch stamp-doc-man
+
+manual.sgml stamp-doc-sgml: ../makedoc $(top_srcdir)/init.h manual.sgml.head manual.sgml.tail $(top_srcdir)/VERSION
+       ( sed -e "s/$(at)VERSION$(at)/`cat $(top_srcdir)/VERSION`/" $(srcdir)/manual.sgml.head ;\
+         $(MAKEDOC_CPP) $(top_srcdir)/init.h | ../makedoc -s ) |      \
+               cat - $(srcdir)/manual.sgml.tail > manual.sgml
+       touch stamp-doc-sgml
+
diff --git a/doc/PGP-Notes.txt b/doc/PGP-Notes.txt
new file mode 100644 (file)
index 0000000..c45d8c2
--- /dev/null
@@ -0,0 +1,271 @@
+$Id: PGP-Notes.txt,v 3.0 2002/01/24 13:35:07 roessler Exp $
+
+                    USING PGP FROM WITHIN MUTT
+
+
+WARNING: The configuration interface has completely changed as of
+         0.96.3!
+
+
+
+                           USERS' GUIDE
+
+
+How do I use mutt with PGP, PGP5, or GnuPG?
+-------------------------------------------
+
+Go to the contrib subdirectory of the source tree.  You'll find
+three files there, pgp2.rc, pgp5.rc, and gpg.rc.  These files
+contain ready-to-use configurations for using mutt with pgp2, pgp5,
+and gpg.
+
+Include one of these files with your ~/.muttrc, and things should
+work out fine.
+
+You may wish to verify that all paths and  the language parameters
+given to the PGP binaries match your needs.
+
+
+
+Frequently Asked Questions and Tips
+-----------------------------------
+
+Q: "People are sending PGP messages which mutt doesn't
+    recognize.  What can I do?"
+
+The new way is to leave headers alone and use mutt's
+check-traditional-pgp function, which can detect PGP messages at
+run-time, and adjust content-types.
+
+The old way is to configure your mail filter so it fixes headers:
+
+Add the following lines to your ~/.procmailrc (you are
+using procmail, aren't you?):
+
+                  ------------------------------
+
+##
+## PGP
+##
+  
+:0
+* !^Content-Type: message/
+* !^Content-Type: multipart/
+* !^Content-Type: application/pgp
+{
+        :0 fBw
+        * ^-----BEGIN PGP MESSAGE-----
+        * ^-----END PGP MESSAGE-----
+        | formail \
+            -i "Content-Type: application/pgp; format=text; x-action=encrypt"
+
+        :0 fBw
+        * ^-----BEGIN PGP SIGNED MESSAGE-----
+        * ^-----BEGIN PGP SIGNATURE-----
+        * ^-----END PGP SIGNATURE-----
+        | formail \
+            -i "Content-Type: application/pgp; format=text; x-action=sign"
+}
+
+
+                  ------------------------------
+
+For users of maildrop, "Mark Weinem"
+<mark.weinem@unidui.uni-duisburg.de> suggests the following recipe:
+
+                  ------------------------------
+
+BPGPM="-----BEGIN PGP MESSAGE-----"
+EPGPM="-----END PGP MESSAGE-----"
+BPGPS="-----BEGIN PGP SIGNATURE-----"
+EPGPS="-----END PGP SIGNATURE-----"
+
+if (!/^Content-Type: message/ && !/^Content-Type: multipart/ \
+       && !/^Content-Type: application\/pgp/)
+{      
+if (/^$BPGPM/:b && /^$EPGPM/:b)
+       xfilter "reformail -A 'Content-Type: application/pgp; format=text; \
+               x-action=encrypt'"
+
+if (/^$BPGPS/:b && /^$EPGPS/:b)
+       xfilter "reformail -A 'Content-Type: application/pgp; format=text; \
+               x-action=sign'"
+}
+
+                  ------------------------------
+
+
+
+Q: "I don't like that PGP/MIME stuff, but want to use the
+    old way of PGP-signing my mails.  Can't you include
+    that with mutt?"
+
+The old answer to this question used to be this:
+
+  No.  Application/pgp is not really suited to a world with MIME,
+  non-textual body parts and similar things.  Anyway, if you really
+  want to generate these old-style attachments, include the
+  following macro in your ~/.muttrc (line breaks for readability,
+  this is actually one line):
+
+  macro compose S "Fpgp +verbose=0 -fast
+       +clearsig=on\ny^T^Uapplication/pgp; format=text;
+       x-action=sign\n"
+
+
+There's a new answer, though: Set the $pgp_create_traditional
+configuration variable (it's a quad-option) to something different
+from "no" (that's the default).  Mutt will then try to use
+application/pgp whereever it makes sense.  In particular, it does
+not make any sense with multiparts, or non-ASCII or non-text bodies.
+In all other cases, PGP/MIME is used unconditionally.
+
+Note that application/pgp is still strongly deprecated.
+
+
+
+Q: "I don't like all the ^Gs and various other verbosity
+    PGP is presenting me with."
+
+Roland Rosenfeld <roland@spinnaker.rhein.de> has found a quite
+elegant solution to this problem: PGP has some pretty good foreign
+language support.  So we just introduce a language called "mutt"
+which contains empty strings for the messages we don't want to see.
+To use this, copy either language.txt or language50.txt (depending
+on what PGP version you are using) to your $PGPPATH.  Make sure the
+PGP command formats pass "+language=pgp" to all the PGP binaries
+(but not to pgpring!).
+
+For PGP 2.6, a German version called "muttde" is available
+as well.
+
+
+Q: "My PGP signatures are being invalidated.  BTW, I'm using Courier
+    MTA."
+
+The author of the Courier MTA believes that the standard specifying
+multipart/signed is broken.  For that reason, he has choosen to
+implement his MTA in a way which does not assure that
+multipart/signed body parts are left untouched.
+
+We suggest that you abandon courier and change to sendmail, postfix,
+or exim.
+
+
+
+                            BACKGROUND
+
+
+Auxiliary Programs
+------------------
+
+Mutt needs two auxiliary programs for its PGP support: pgpewrap and
+pgpring.
+
+
+1. pgpring
+
+pgpring is a key ring dumper.  It extracts information from PGP's
+binary key ring and emits it in an (almost) readable output format
+understood by mutt's key selection routines.  This output format
+mimics the one used by the GNU Privacy Guard (GPG).
+
+You'll need this program with PGP 2 and PGP 5.
+
+Command line options:
+
+       -k <key ring>   Dump the contents of the key ring specified
+                       as an argument to -k.
+                       
+       -2, -5          Use the default key ring for PGP 2 or 5, 
+                       respectively.
+                       
+       -s              Dump the secret key ring.
+
+
+
+2. pgpewrap
+
+This is a little C program which does some command line munging: The
+first argument is a command to be executed.  When pgpewrap
+encounters a "--" (dash-dash) argument, it will interpret the next
+argument as a prefix which is put in front of all following
+arguments.
+
+Example:
+
+       pgpewrap pgpe file -- -r a b c
+
+will execute:
+
+       pgpe file -r a -r b -r c
+
+This script is needed with PGP 5 and with GPG, since their command
+line interfaces can't be properly served by mutt's format mechanism.
+
+
+
+The Configuration Interface
+---------------------------
+
+As usual within mutt, the configuration interface for the PGP
+commands relies on printf-like formats.  For all PGP commands, the
+following %-sequences are defined.
+
+  %p   The empty string when no passphrase is needed,
+       the string "PGPPASSFD=0" if one is needed.
+
+       This is mostly used in conditional % sequences.
+
+  %f   Most PGP commands operate on a single file or a file
+       containing a message.  %f expands to this file's name.
+
+  %s   When verifying signatures, there is another temporary file
+       containing the detached signature.  %s expands to this
+       file's name.
+
+  %a   In "signing" contexts, this expands to the value of the
+       configuration variable $pgp_sign_as.  You probably need to
+       use this within a conditional % sequence.
+
+  %r   In many contexts, mutt passes key IDs to pgp.  %r expands to
+       a list of key IDs.
+
+The following command formats are defined:
+
+  $pgp_decode_command  Decode application/pgp messages.  This
+                       command operates with and without pass phrases.
+                       
+  $pgp_verify_command  Verify a PGP/MIME signature.
+
+  $pgp_decrypt_command Decrypt a PGP/MIME encrypted MIME body.
+                       This command always gets a pass phrase.
+
+  $pgp_sign_command    Sign a PGP/MIME body.  This command always
+                       gets a pass phrase.
+
+
+  $pgp_encrypt_sign_command Encrypt and sign a MIME body.  This
+                       command always gets a pass phrase.
+                       
+  $pgp_encrypt_only_command Encrypt a MIME body, but don't sign it.
+  
+  $pgp_import_command  Import PGP keys from a file.
+  
+  $pgp_export_command  Export PGP keys to a file.  The output must
+                       be ASCII armored.
+                       
+  $pgp_verify_key_command Check a public key. This is used from the
+                       key selection menu.
+
+  $pgp_list_secring_command List the secret keys matching some hints
+                       given in %r.
+
+  $pgp_list_pubring_command List the public keys matching some hints
+                       given in %r.
+
+The passphrase is always passed on stdin; all commands must send
+their output to stdout and stderr.
+
+
+
diff --git a/doc/applying-patches.txt b/doc/applying-patches.txt
new file mode 100644 (file)
index 0000000..5379ee5
--- /dev/null
@@ -0,0 +1,25 @@
+Subject: Applying patches
+From: Thomas Roessler <roessler@guug.de>
+Date: Thu,  8 Oct 1998 14:32:53 +0200
+
+When applying patches to mutt, you may encounter strange error
+messages spit out by programs like aclocal, autoconf, automake.
+This will happen if your machine has a partial build environment
+(see devel-notes.txt for a description of what's needed for mutt
+development): Mutt has detected changes to some of the "meta source
+files" like configure.in and tries to rebuild other files such as
+aclocal.m4 or Makefile.in based on these changes; this will fail if
+your build environment is not complete.
+
+If you encounter this kind of problem, touching the following files
+after applying patches may help:
+
+       Makefile.in
+       config.h.in
+       configure
+       aclocal.m4
+
+After doing so, simply type "make"; the dependencies should take
+care of the necessary other re-building (this may quite well include
+a re-running of ./configure).
+$Id: applying-patches.txt,v 3.0 2002/01/24 13:35:07 roessler Exp $
diff --git a/doc/devel-notes.txt b/doc/devel-notes.txt
new file mode 100644 (file)
index 0000000..616e7f0
--- /dev/null
@@ -0,0 +1,178 @@
+Subject: Developers' notes
+From: Thomas Roessler <roessler@guug.de>
+Date: Tue,  9 May 2000 19:48:08 +0200
+
+
+Required tools
+--------------
+
+If you are planning to hack on mutt, please subscribe to the
+mutt-dev mailinglist (mutt-dev@mutt.org, contact
+majordomo@mutt.org).  Announcements about recent development
+versions go to that mailing list, as go technical discussions and
+patches.
+
+You'll need several GNU development utilities for working on mutt:
+
+- automake
+
+- autoconf
+
+- autoheader
+
+- The i18n stuff requires GNU gettext.  See intl/VERSION for the
+  version we are currently relying on.  Please note that using
+  gettext-0.10 will most probably not work - get the latest test
+  release from alpha.gnu.org, it's the recommended version of
+  gettext anyway.
+
+  If you are experiencing problems with unknown "dcgettext" symbols,
+  the autoconf/automake macros from your gettext package are broken.
+  Apply the following patch to that macro file (usually found under
+  /usr/share/aclocal/gettext.m4):
+
+--- gettext.m4.bak     Thu Jul  2 18:46:08 1998
++++ gettext.m4 Mon Oct  5 23:32:54 1998
+@@ -46,12 +46,13 @@
+          if test "$gt_cv_func_gettext_libc" != "yes"; then
+            AC_CHECK_LIB(intl, bindtextdomain,
+-             [AC_CACHE_CHECK([for gettext in libintl],
+-               gt_cv_func_gettext_libintl,
+-               [AC_CHECK_LIB(intl, gettext,
+-                gt_cv_func_gettext_libintl=yes,
+-                gt_cv_func_gettext_libintl=no)],
++             [AC_CHECK_LIB(intl, gettext,
++               gt_cv_func_gettext_libintl=yes,
+                gt_cv_func_gettext_libintl=no)])
++         fi
++
++         if test "$gt_cv_func_gettext_libintl" = "yes" ; then
++           LIBS="-lintl $LIBS"
+          fi
+          if test "$gt_cv_func_gettext_libc" = "yes" \
+
+
+- GNU make may be needed for the dependency tricks
+
+
+Getting started from CVS
+------------------------
+
+Once you've checked out a copy of the source from CVS, you'll need to
+run the script called 'prepare' that is in the root directory.  The
+script does all the automake/autoconf magic that needs to be done with
+a fresh checkout.
+
+
+A word about warnings
+---------------------
+
+Mutt's default build process sets some pretty restrictive compiler
+flags which may lead to lots of warnings.  Generally, warnings are
+something which should be eliminated.
+
+Nevertheless, the code in intl/ is said to generate some warnings with
+the compiler settings we usually rely upon.  This code is not
+maintained by the mutt developpers, so please redirect any comments to
+the GNU gettext library's developpers.
+
+
+Style Guide
+-----------
+
+- global functions should have the prefix "mutt_".  All
+  other functions should be declared "static".
+
+- avoid global vars where possible.  If one is required,
+  try to contain it to a single source file and declare it
+  "static".  Global vars should have the first letter of
+  each word capitilized, and no underscores should be used
+  (e.g., MailGid, LastFolder, MailDir).
+
+- re-use code as much as possible.  There are a lot of
+  "library" functions. One of the biggest causes of bloat
+  in ELM and PINE is the tremendous duplication of code...
+  Help keep Mutt small!
+
+- when adding new options, make the old behaviour the
+  default.
+
+- try to keep mutt as portable as possible.
+
+
+Documentation
+-------------
+
+Please document your changes.  Note that there are several places
+where you may have to add documentation:
+
+- doc/manual.sgml.{head,tail} contain The Manual.
+
+- doc/muttrc.man.{head,tail} contain an abriged version of The
+  Manual in nroff format (see man(7)), which deals with
+  configuration file commands.
+
+Configuration _variables_ are documented directly in init.h.   Note
+that this includes documentation for possibly added format flags!
+
+The parts of The Manual and the muttrc manual page dealing with
+these variables, and the global Muttrc, are generated automatically
+from that documentation.  To start this process, type "make
+update-doc" in the top-level source directory.
+
+Note that you may have to update the makedoc utility (makedoc.c)
+when adding new data types to init.h.
+
+More precisely, variable name, type, and default value are directly
+extracted from the initializer for the MuttVars array. Documentation
+is exepected in special comments which _follow_ the initializer.
+For a line to be included with the documentation, it must (after,
+possibly, some white space) begin with with either "/**" or "**".
+Any following white space is ignored. The rest of the line is
+expected to be plain text, with some formatting instructions roughly
+similar to [ntg]roff:
+
+ - \fI switches to italics
+ - \fB switches to boldface
+
+ - \fP switches to normal display
+
+ - \(as can be used to represent an asterisk (*).  This is intended
+   to help avoiding character sequences such as /* or */ inside
+   comments.
+
+ - \(rs can be used to represent a backslash (\).  This is intended
+   to help avoiding poblems when trying to represent any of the \
+   sequences used by makedoc.
+
+ - .dl on a line starts a "definition list" environment (name taken
+    from HTML) where terms and definitions alternate.
+
+ - .dt marks a term in a definition list.
+
+ - .dd marks a definition in a definition list.
+
+ - .de on a line finishes a definition list environment.
+
+ - .ts on a line starts a "verbose tscreen" environment (name taken from
+   SGML).  Please try to keep lines inside such an environment
+   short; a length of abut 40 characters should be ok.  This is
+   necessary to avoid a really bad-looking muttrc (5) manual page.
+
+ - .te on a line finishes this environment.
+
+ - .pp on a line starts a paragraph.
+
+ - $word will be converted to a reference to word, where appropriate.
+   Note that $$word is possible as well.
+   Use $$$ to get a literal $ without making a reference.
+
+ - '. ' in the beginning of a line expands to two space characters.
+   This is used to protect indentations in tables.
+
+Do _not_ use any other SGML or nroff formatting instructions here!
+
+$Id: devel-notes.txt,v 3.0 2002/01/24 13:35:07 roessler Exp $
diff --git a/doc/dotlock.man b/doc/dotlock.man
new file mode 100644 (file)
index 0000000..e8a4ce6
--- /dev/null
@@ -0,0 +1,150 @@
+.\" -*-nroff-*-
+.\"
+.\"
+.\"     Copyright (C) 1996-8 Michael R. Elkins <me@cs.hmc.edu>
+.\"    Copyright (C) 1998-9 Thomas Roessler <roessler@guug.de>
+.\" 
+.\"     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.
+.\"
+.TH dotlock 1 "AUGUST 1999" Unix "User Manuals"
+.SH NAME
+mutt_dotlock \- Lock mail spool files.
+.SH SYNOPSIS
+.PP
+.B mutt_dotlock 
+[-t|-f|-u|-d] [-p] [-r \fIretries\fP] \fIfile\fP
+.SH DESCRIPTION
+.PP
+.B mutt_dotlock
+implements the traditional mail spool file locking method:
+To lock \fIfile\fP, a file named \fIfile\fP.lock is
+created. The program operates with group mail privileges
+if necessary.
+.SH OPTIONS
+.PP
+.IP "-t"
+Just try.
+.B mutt_dotlock
+won't actually lock a file, but inform the invoking
+process if it's at all possible to lock \fIfile\fP.
+.IP "-f"
+Force the lock.  If another process holds a lock on
+\fIfile\fP longer than a certain amount of time, 
+.B mutt_dotlock
+will break that lock by removing the lockfile.
+.IP "-u"
+Unlock.
+.B mutt_dotlock 
+will remove \fIfile\fP.lock.
+.IP "-d"
+Delete.
+.B mutt_dotlock
+will lock \fIfile\fP, remove it if it has length 0, and afterwards
+remove \fIfile\fP.lock.
+.IP "-p"
+Use privileges.  If given this option, 
+.B mutt_dotlock
+will operate with group mail privileges when creating and
+deleting lock files.
+.IP "-r \fIretries\fP"
+This command line option tells 
+.B mutt_dotlock 
+to try locking
+\fIretries\fP times before giving up or (if invoked with
+the 
+.B -f
+command line option) break a lock.  The default value is 5.
+.B mutt_dotlock
+waits one second between successive locking attempts.  
+.SH FILES
+.PP
+.IP "\fIfile\fP.lock"
+The lock file 
+.B mutt_dotlock
+generates.
+.SH SEE ALSO
+.PP
+.BR fcntl (2),
+.BR flock (2),
+.BR lockfile (1),
+.BR mutt (1)
+.SH DIAGNOSTICS
+.PP
+.B mutt_dotlock
+gives all diagnostics in its return values:
+.TP
+.B "0 \- DL_EX_OK"
+The program was successful.
+.TP 
+.B "1 \- DL_EX_ERROR"
+An unspecified error such as bad command line parameters,
+lack of system memory and the like has occured.
+.TP 
+.B "3 \- DL_EX_EXIST"
+The 
+user wants to lock a file which has been locked by
+another process already.  If 
+.B mutt_dotlock
+is invoked with the
+.B -f 
+command line option, 
+.B mutt_dotlock
+won't generate this error, but break other processes'
+locks.
+.TP 
+.B "4 \- DL_EX_NEED_RPIVS"
+This return value only occurs if 
+.B mutt_dotlock 
+has been invoked
+with the 
+.B -t
+command line option.  It means that
+.B mutt_dotlock
+will have to use its group mail privileges to lock
+\fIfile\fP.
+.TP
+.B "5 \- DL_EX_IMPOSSIBLE"
+This return value only occurs if
+.B mutt_dotlock
+has been invoked with the
+.B -t
+command line option.  It means that
+.B mutt_dotlock 
+is unable to lock \fIfile\fP even with group mail
+privileges.
+.SH NOTES
+.PP
+.B mutt_dotlock
+tries to implement an NFS-safe dotlocking method which was
+borrowed from 
+.B lockfile
+(1).  
+.PP
+If the user can't open \fIfile\fP for reading with his
+normal privileges, 
+.B mutt_dotlock 
+will return the
+.B DL_EX_ERROR
+exit value to avoid certain attacks against other users'
+spool files. The code carefully avoids race conditions
+when checking permissions; for details of all this see the
+comments in dotlock.c.
+.SH HISTORY
+.PP
+.B mutt_dotlock
+is part of the Mutt mail user agent package.  It has been
+created to avoid running mutt with group mail privileges.
+.SH AUTHOR
+Thomas Roessler <roessler@guug.de>
diff --git a/doc/instdoc.sh b/doc/instdoc.sh
new file mode 100644 (file)
index 0000000..301f493
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/sh --
+
+prefix=/usr/local
+exec_prefix=${prefix}
+bindir=${exec_prefix}/bin
+libdir=${exec_prefix}/lib
+mandir=${prefix}/man
+srcdir=.
+docdir=/usr/local/doc/mutt
+includedir=${prefix}/include
+top_srcdir=..
+top_builddir=..
+
+SOURCE="$1"
+TARGET="$2"
+
+
+rm -f "$TARGET"
+
+sed -e "s;/usr/local/bin/;$bindir/;g"          \
+    -e "s;/usr/local/doc/mutt/;$docdir/;g"     \
+    "$SOURCE" > $TARGET
+
+chmod 644 "$TARGET"
diff --git a/doc/instdoc.sh.in b/doc/instdoc.sh.in
new file mode 100644 (file)
index 0000000..a853f1f
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/sh --
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+bindir=@bindir@
+libdir=@libdir@
+mandir=@mandir@
+srcdir=@srcdir@
+docdir=@docdir@
+includedir=@includedir@
+top_srcdir=@top_srcdir@
+top_builddir=..
+
+SOURCE="$1"
+TARGET="$2"
+
+
+rm -f "$TARGET"
+
+sed -e "s;/usr/local/bin/;$bindir/;g"          \
+    -e "s;/usr/local/doc/mutt/;$docdir/;g"     \
+    "$SOURCE" > $TARGET
+
+chmod 644 "$TARGET"
diff --git a/doc/manual.sgml b/doc/manual.sgml
new file mode 100644 (file)
index 0000000..0e71676
--- /dev/null
@@ -0,0 +1,7400 @@
+<!doctype linuxdoc system>
+
+<article>
+
+<title>The Mutt E-Mail Client
+<author>by Michael Elkins <htmlurl url="mailto:me@cs.hmc.edu" name="&lt;me@cs.hmc.edu&gt;">
+<date>version 1.5.6
+<abstract>
+``All mail clients suck.  This one just sucks less.'' -me, circa 1995
+</abstract>
+
+<toc>
+
+<sect>Introduction
+<p>
+<bf/Mutt/ is a small but very powerful text-based MIME mail client.  Mutt is
+highly configurable, and is well suited to the mail power user with advanced
+features like key bindings, keyboard macros, mail threading, regular
+expression searches and a powerful pattern matching language for selecting
+groups of messages.
+
+<sect1>Mutt Home Page
+<p>
+<htmlurl url="http://www.mutt.org/"
+name="http://www.mutt.org/">
+
+<sect1>Mailing Lists
+<p>
+To subscribe to one of the following mailing lists, send a message with the
+word <em/subscribe/ in the body to
+<tt/list-name/<em/-request/<tt/@mutt.org/.
+
+<itemize>
+<item><htmlurl url="mailto:mutt-announce-request@mutt.org"
+name="mutt-announce@mutt.org"> -- low traffic list for announcements
+<item><htmlurl url="mailto:mutt-users-request@mutt.org"
+name="mutt-users@mutt.org"> -- help, bug reports and feature requests
+<item><htmlurl url="mailto:mutt-dev-request@mutt.org" name="mutt-dev@mutt.org"> -- development mailing list
+</itemize>
+
+<bf/Note:/ all messages posted to <em/mutt-announce/ are automatically
+forwarded to <em/mutt-users/, so you do not need to be subscribed to both
+lists.
+
+<sect1>Software Distribution Sites
+<p>
+<itemize>
+<item><htmlurl url="ftp://ftp.mutt.org/mutt/"
+name="ftp://ftp.mutt.org/mutt/">
+</itemize>
+<p>
+For a list of mirror sites, please refer to <htmlurl
+url="http://www.mutt.org/download.html"
+name="http://www.mutt.org/download.html">.
+
+<sect1>IRC
+<p>
+Visit channel <em/#mutt/ on <htmlurl
+url="http://www.openprojects.net" name="OpenProjects.Net
+(www.openprojects.net)"> to chat with other people interested in Mutt.
+
+<sect1>USENET
+<p>
+See the newsgroup <htmlurl url="news:comp.mail.mutt" name="comp.mail.mutt">.
+
+<sect1>Copyright
+<p>
+Mutt is Copyright (C) 1996-2000 Michael R. Elkins
+&lt;me@cs.hmc.edu&gt; and others
+
+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.
+
+<sect>Getting Started
+<p>
+
+This section is intended as a brief overview of how to use Mutt.  There are
+many other features which are described elsewhere in the manual.  There
+is even more information available in the Mutt FAQ and various web
+pages.  See the <htmlurl url="http://www.mutt.org/mutt/"
+name="Mutt Page"> for more details.
+
+The keybindings described in this section are the defaults as distributed.
+Your local system administrator may have altered the defaults for your site.
+You can always type ``?'' in any menu to display the current bindings.
+
+The first thing you need to do is invoke mutt, simply by typing mutt
+at the command line.  There are various command-line options, see 
+either the mutt man page or the <ref id="commandline" name="reference">.
+
+<sect1>Moving Around in Menus
+<p>
+
+Information is presented in menus, very similar to ELM.  Here is a table
+showing the common keys used to navigate menus in Mutt.
+
+<tscreen><verb>
+j or Down       next-entry      move to the next entry
+k or Up         previous-entry  move to the previous entry
+z or PageDn     page-down       go to the next page
+Z or PageUp     page-up         go to the previous page
+= or Home       first-entry     jump to the first entry
+* or End        last-entry      jump to the last entry
+q               quit            exit the current menu
+?               help            list all keybindings for the current menu
+</verb></tscreen>
+
+<sect1>Editing Input Fields<label id="editing">
+<p>
+Mutt has a builtin line editor which is used as the primary way to input
+textual data such as email addresses or filenames.  The keys used to move
+around while editing are very similar to those of Emacs.
+
+<tscreen><verb>
+^A or <Home>    bol             move to the start of the line
+^B or <Left>    backward-char   move back one char
+Esc B          backward-word   move back one word
+^D or <Delete>  delete-char     delete the char under the cursor
+^E or <End>     eol             move to the end of the line
+^F or <Right>   forward-char    move forward one char
+Esc F          forward-word    move forward one word
+<Tab>           complete        complete filename or alias
+^T              complete-query  complete address with query
+^K              kill-eol        delete to the end of the line
+ESC d          kill-eow        delete to the end ot the word
+^W              kill-word       kill the word in front of the cursor
+^U              kill-line       delete entire line
+^V              quote-char      quote the next typed key
+<Up>            history-up      recall previous string from history
+<Down>          history-down    recall next string from history
+<BackSpace>     backspace       kill the char in front of the cursor
+Esc u          upcase-word     convert word to upper case
+Esc l          downcase-word   convert word to lower case
+Esc c          capitalize-word capitalize the word
+^G              n/a             abort
+<Return>        n/a             finish editing
+</verb></tscreen>
+
+You can remap the <em/editor/ functions using the <ref id="bind" name="bind">
+command.  For example, to make the <em/Delete/ key delete the character in
+front of the cursor rather than under, you could use
+
+<tt/bind editor &lt;delete&gt; backspace/
+
+<sect1>Reading Mail - The Index and Pager
+<p>
+
+Similar to many other mail clients, there are two modes in which mail is
+read in Mutt.  The first is the index of messages in the mailbox, which is
+called the ``index'' in Mutt.  The second mode is the display of the
+message contents.  This is called the ``pager.''
+
+The next few sections describe the functions provided in each of these
+modes.
+
+<sect2>The Message Index
+<p>
+
+<tscreen><verb>
+c               change to a different mailbox
+ESC c           change to a folder in read-only mode
+C               copy the current message to another mailbox
+ESC C           decode a message and copy it to a folder
+ESC s           decode a message and save it to a folder
+D               delete messages matching a pattern
+d               delete the current message
+F               mark as important
+l               show messages matching a pattern
+N               mark message as new
+o               change the current sort method
+O               reverse sort the mailbox
+q               save changes and exit
+s               save-message
+T               tag messages matching a pattern
+t               toggle the tag on a message
+ESC t           toggle tag on entire message thread
+U               undelete messages matching a pattern
+u               undelete-message
+v               view-attachments
+x               abort changes and exit
+<Return>        display-message
+<Tab>           jump to the next new message
+@               show the author's full e-mail address
+$               save changes to mailbox
+/               search
+ESC /           search-reverse
+^L              clear and redraw the screen
+^T              untag messages matching a pattern
+</verb></tscreen>
+
+<sect3>Status Flags
+<p>
+
+In addition to who sent the message and the subject, a short summary of
+the disposition of each message is printed beside the message number.
+Zero or more of the following ``flags'' may appear, which mean:
+
+<p>
+<descrip>
+<tag/D/ message is deleted (is marked for deletion)
+<tag/d/ message have attachments marked for deletion
+<tag/K/ contains a PGP public key
+<tag/N/ message is new
+<tag/O/ message is old
+<tag/P/ message is PGP encrypted
+<tag/r/ message has been replied to
+<tag/S/ message is signed, and the signature is succesfully verified
+<tag/s/ message is signed
+<tag/!/ message is flagged
+<tag/*/ message is tagged
+</descrip>
+
+Some of the status flags can be turned on or off using
+<itemize>
+<item><bf/set-flag/ (default: w)
+<item><bf/clear-flag/ (default: W)
+</itemize>
+
+<p>
+Furthermore, the following flags reflect who the message is addressed
+to.  They can be customized with the
+<ref id="to_chars" name="&dollar;to&lowbar;chars"> variable.
+
+<p>
+<descrip>
+<tag/+/ message is to you and you only
+<tag/T/ message is to you, but also to or cc'ed to others
+<tag/C/ message is cc'ed to you
+<tag/F/ message is from you
+<tag/L/ message is sent to a subscribed mailing list
+</descrip>
+
+<sect2>The Pager
+<p>
+
+By default, Mutt uses its builtin pager to display the body of messages.
+The pager is very similar to the Unix program <em/less/ though not nearly as
+featureful.
+
+<tscreen><verb>
+<Return>        go down one line
+<Space>         display the next page (or next message if at the end of a message)
+-               go back to the previous page
+n               search for next match
+S               skip beyond quoted text
+T               toggle display of quoted text
+?               show keybindings
+/               search for a regular expression (pattern)
+ESC /           search backwards for a regular expression
+\               toggle search pattern coloring
+^               jump to the top of the message
+</verb></tscreen>
+
+In addition, many of the functions from the <em/index/ are available in
+the pager, such as <em/delete-message/ or <em/copy-message/ (this is one
+advantage over using an external pager to view messages).
+
+Also, the internal pager supports a couple other advanced features. For
+one, it will accept and translate the ``standard'' nroff sequences for
+bold and underline. These sequences are a series of either the letter,
+backspace (^H), the letter again for bold or the letter, backspace,
+``&lowbar;'' for denoting underline. Mutt will attempt to display these
+in bold and underline respectively if your terminal supports them. If
+not, you can use the bold and underline <ref id="color" name="color">
+objects to specify a color or mono attribute for them.
+
+Additionally, the internal pager supports the ANSI escape sequences for
+character attributes.  Mutt translates them into the correct color and
+character settings.  The sequences Mutt supports are:
+
+<p>
+<tscreen><verb>
+ESC [ Ps;Ps;Ps;...;Ps m
+where Ps =
+0    All Attributes Off
+1    Bold on
+4    Underline on
+5    Blink on
+7    Reverse video on
+3x   Foreground color is x
+4x   Background color is x
+
+Colors are
+0    black
+1    red
+2    green
+3    yellow
+4    blue
+5    magenta
+6    cyan
+7    white
+</verb></tscreen>
+
+Mutt uses these attributes for handling text/enriched messages, and they
+can also be used by an external <ref id="auto_view" name="autoview">
+script for highlighting purposes.  <bf/Note:/ If you change the colors for your
+display, for example by changing the color associated with color2 for
+your xterm, then that color will be used instead of green.
+
+<sect2>Threaded Mode<label id="threads">
+<p>
+When the mailbox is <ref id="sort" name="sorted"> by <em/threads/, there are
+a few additional functions available in the <em/index/ and <em/pager/ modes.
+
+<tscreen><verb>
+^D      delete-thread           delete all messages in the current thread
+^U      undelete-thread         undelete all messages in the current thread
+^N      next-thread             jump to the start of the next thread
+^P      previous-thread         jump to the start of the previous thread
+^R      read-thread             mark the current thread as read
+ESC d   delete-subthread        delete all messages in the current subthread
+ESC u   undelete-subthread      undelete all messages in the current subthread
+ESC n   next-subthread          jump to the start of the next subthread
+ESC p   previous-subthread      jump to the start of the previous subthread
+ESC r   read-subthread          mark the current subthread as read
+ESC t   tag-thread              toggle the tag on the current thread
+ESC v  collapse-thread         toggle collapse for the current thread
+ESC V  collapse-all            toggle collapse for all threads
+P       parent-message          jump to parent message in thread
+</verb></tscreen>
+
+<bf/Note:/ Collapsing a thread displays only the first message
+in the thread and hides the others. This is useful when threads
+contain so many messages that you can only see a handful of threads on
+the screen. See %M in <ref id="index_format"name="&dollar;index&lowbar;format">.
+For example, you could use "&percnt;?M?(#&percnt;03M)&amp;(&percnt;4l)?" in <ref
+id="index_format"name="&dollar;index&lowbar;format"> to optionally
+display the number of hidden messages if the thread is collapsed.
+
+See also: <ref id="strict_threads" name="&dollar;strict&lowbar;threads">.
+
+<sect2>Miscellaneous Functions
+<p><bf/create-alias/<label id="create-alias"> (default: a)<newline>
+
+Creates a new alias based upon the current message (or prompts for a
+new one).  Once editing is complete, an <ref id="alias" name="alias">
+command is added to the file specified by the <ref id="alias_file"
+name="&dollar;alias&lowbar;file"> variable for future use. <bf/Note:/
+Specifying an <ref id="alias_file" name="&dollar;alias&lowbar;file">
+does not add the aliases specified there-in, you must also <ref
+id="source" name="source"> the file.
+
+<p><bf/check-traditional-pgp/<label id="check-traditional-pgp"> (default: ESC P)<newline>
+
+This function will search the current message for content signed or
+encrypted with PGP the "traditional" way, that is, without proper
+MIME tagging.  Technically, this function will temporarily change
+the MIME content types of the body parts containing PGP data; this
+is similar to the <ref id="edit-type" name="edit-type"> function's
+effect.
+
+
+<p><bf/display-toggle-weed/<label id="display-toggle-weed"> (default: h)<newline>
+
+Toggles the weeding of message header fields specified by <ref id="ignore"
+name="ignore"> commands.
+
+<p><bf/edit/<label id="edit"> (default: e)<newline>
+
+This command (available in the ``index'' and ``pager'') allows you to
+edit the raw current message as it's present in the mail folder.
+After you have finished editing, the changed message will be
+appended to the current folder, and the original message will be
+marked for deletion.
+
+<p><bf/edit-type/<label id="edit-type"><newline>
+(default: ^E on the attachment menu, and in the pager and index menus; ^T on the
+compose menu)
+
+This command is used to temporarily edit an attachment's content
+type to fix, for instance, bogus character set parameters.  When
+invoked from the index or from the pager, you'll have the
+opportunity to edit the top-level attachment's content type.  On the
+<ref id="attach_menu" name="attachment menu">, you can change any
+attachment's content type. These changes are not persistent, and get
+lost upon changing folders.
+
+Note that this command is also available on the <ref
+id="compose_menu" name="compose menu">.  There, it's used to
+fine-tune the properties of attachments you are going to send.
+
+<p><bf/enter-command/<label id="enter-command"> (default: ``:'')<newline>
+
+This command is used to execute any command you would normally put in a
+configuration file.  A common use is to check the settings of variables, or
+in conjunction with <ref id="macro" name="macros"> to change settings on the
+fly.
+
+<p><bf/extract-keys/<label id="extract-keys"> (default: ^K)<newline>
+
+This command extracts PGP public keys from the current or tagged
+message(s) and adds them to your PGP public key ring.
+
+<p><bf/forget-passphrase/<label id="forget-passphrase"> (default:
+^F)<newline> 
+
+This command wipes the passphrase(s) from memory. It is useful, if
+you misspelled the passphrase.
+
+<p><bf/list-reply/<label id="list-reply"> (default: L)<newline>
+
+Reply to the current or tagged message(s) by extracting any addresses which
+match the addresses given by the <ref id="lists" name="lists or subscribe">
+commands, but also honor any <tt/Mail-Followup-To/ header(s) if the
+<ref id="honor_followup_to" name="&dollar;honor&lowbar;followup&lowbar;to">
+configuration variable is set.  Using this when replying to messages posted
+to mailing lists helps avoid duplicate copies being sent to the author of
+the message you are replying to.
+
+<bf/pipe-message/<label id="pipe-message"> (default: |)<newline>
+
+Asks for an external Unix command and pipes the current or
+tagged message(s) to it.  The variables <ref id="pipe_decode"
+name="&dollar;pipe&lowbar;decode">, <ref id="pipe_split"
+name="&dollar;pipe&lowbar;split">, <ref id="pipe_sep"
+name="&dollar;pipe&lowbar;sep"> and <ref id="wait_key"
+name="&dollar;wait&lowbar;key"> control the exact behaviour of this
+function.
+
+<bf/resend-message/<label id="resend-message"> (default: ESC e)<newline>
+
+With resend-message, mutt takes the current message as a template for a
+new message.  This function is best described as "recall from arbitrary
+folders".  It can conveniently be used to forward MIME messages while
+preserving the original mail structure. Note that the amount of headers
+included here depends on the value of the <ref id="weed" name="&dollar;weed">
+variable.
+
+This function is also available from the attachment menu. You can use this
+to easily resend a message which was included with a bounce message
+as a message/rfc822 body part.
+
+<bf/shell-escape/<label id="shell-escape"> (default: !)<newline>
+
+Asks for an external Unix command and executes it.  The <ref
+id="wait_key" name="&dollar;wait&lowbar;key"> can be used to control
+whether Mutt will wait for a key to be pressed when the command returns
+(presumably to let the user read the output of the command), based on
+the return status of the named command.
+
+<bf/toggle-quoted/<label id="toggle-quoted"> (default: T)<newline>
+
+The <em/pager/ uses the <ref id="quote_regexp"
+name="&dollar;quote&lowbar;regexp"> variable to detect quoted text when
+displaying the body of the message.  This function toggles the display
+of the quoted material in the message.  It is particularly useful when
+are interested in just the response and there is a large amount of
+quoted text in the way.
+
+<bf/skip-quoted/<label id="skip-quoted"> (default: S)<newline>
+
+This function will go to the next line of non-quoted text which come
+after a line of quoted text in the internal pager.
+
+<sect1>Sending Mail
+<p>
+
+The following bindings are available in the <em/index/ for sending
+messages.
+
+<tscreen><verb>
+m       compose         compose a new message
+r       reply           reply to sender
+g       group-reply     reply to all recipients
+L       list-reply      reply to mailing list address
+f       forward         forward message
+b       bounce          bounce (remail) message
+ESC k   mail-key        mail a PGP public key to someone
+</verb></tscreen>
+
+Bouncing a message sends the message as is to the recipient you
+specify.  Forwarding a message allows you to add comments or
+modify the message you are forwarding.  These items are discussed
+in greater detail in the next chapter <ref id="forwarding_mail"
+name="``Forwarding and Bouncing Mail''">.
+
+Mutt will then enter the <em/compose/ menu and prompt you for the
+recipients to place on the ``To:'' header field.  Next, it will ask
+you for the ``Subject:'' field for the message, providing a default if
+you are replying to or forwarding a message.  See also <ref id="askcc"
+name="&dollar;askcc">, <ref id="askbcc" name="&dollar;askbcc">, <ref
+id="autoedit" name="&dollar;autoedit">, <ref id="bounce"
+name="&dollar;bounce">, and <ref id="fast_reply"
+name="&dollar;fast&lowbar;reply"> for changing how Mutt asks these
+questions.
+
+Mutt will then automatically start your <ref id="editor"
+name="&dollar;editor"> on the message body.  If the <ref id="edit_headers"
+name="&dollar;edit&lowbar;headers"> variable is set, the headers will be at
+the top of the message in your editor.  Any messages you are replying
+to will be added in sort order to the message, with appropriate <ref
+id="attribution" name="&dollar;attribution">, <ref id="indent_string"
+name="&dollar;indent&lowbar;string"> and <ref id="post_indent_string"
+name="&dollar;post&lowbar;indent&lowbar;string">.  When forwarding a
+message, if the <ref id="mime_forward" name="&dollar;mime&lowbar;forward">
+variable is unset, a copy of the forwarded message will be included.  If
+you have specified a <ref id="signature" name="&dollar;signature">, it
+will be appended to the message.
+
+Once you have finished editing the body of your mail message, you are
+returned to the <em/compose/ menu.  The following options are available:
+
+<tscreen><verb>
+a       attach-file             attach a file
+A      attach-message          attach message(s) to the message
+ESC k   attach-key              attach a PGP public key
+d       edit-description        edit description on attachment
+D       detach-file             detach a file
+t       edit-to                 edit the To field
+ESC f   edit-from               edit the From field
+r       edit-reply-to           edit the Reply-To field
+c       edit-cc                 edit the Cc field
+b       edit-bcc                edit the Bcc field
+y       send-message            send the message
+s       edit-subject            edit the Subject
+S       smime-menu              select S/MIME options
+f       edit-fcc                specify an ``Fcc'' mailbox
+p       pgp-menu                select PGP options
+P       postpone-message        postpone this message until later
+q       quit                    quit (abort) sending the message
+w      write-fcc               write the message to a folder
+i       ispell                  check spelling (if available on your system)
+^F      forget-passphrase       wipe passphrase(s) from memory
+</verb></tscreen>
+
+<bf/Note:/ The attach-message function will prompt you for a folder to
+attach messages from. You can now tag messages in that folder and they
+will be attached to the message you are sending. Note that certain
+operations like composing a new mail, replying, forwarding, etc. are
+not permitted when you are in that folder. The %r in <ref
+id="status_format" name="&dollar;status&lowbar;format"> will change to
+a 'A' to indicate that you are in attach-message mode.
+
+<sect2>Editing the message header
+<p>
+When editing the header of your outgoing message, there are a couple of
+special features available.
+
+If you specify<newline>
+<tt/Fcc:/ <em/filename/<newline>
+Mutt will pick up <em/filename/
+just as if you had used the <em/edit-fcc/ function in the <em/compose/ menu.
+
+You can also attach files to your message by specifying<newline>
+<tt/Attach:/ <em/filename/  &lsqb; <em/description/ &rsqb;<newline>
+where <em/filename/ is the file to attach and <em/description/ is an
+optional string to use as the description of the attached file.
+
+When replying to messages, if you remove the <em/In-Reply-To:/ field from
+the header field, Mutt will not generate a <em/References:/ field, which
+allows you to create a new message thread.
+
+Also see <ref id="edit_headers" name="edit&lowbar;headers">.
+
+<sect2>Using Mutt with PGP
+
+<p>
+If you want to use PGP, you can specify 
+
+<tt/Pgp:/ &lsqb; <tt/E/ | <tt/S/ | <tt/S&lt;id/&gt; &rsqb; <newline>
+
+``E'' encrypts, ``S'' signs and
+``S&lt;id&gt;'' signs with the given key, setting <ref
+id="pgp_sign_as" name="&dollar;pgp&lowbar;sign&lowbar;as"> permanently.
+
+If you have told mutt to PGP encrypt a message, it will guide you
+through a key selection process when you try to send the message.
+Mutt will not ask you any questions about keys which have a
+certified user ID matching one of the message recipients' mail
+addresses.  However, there may be situations in which there are
+several keys, weakly certified user ID fields, or where no matching
+keys can be found.
+
+In these cases, you are dropped into a menu with a list of keys from
+which you can select one.  When you quit this menu, or mutt can't
+find any matching keys, you are prompted for a user ID.  You can, as
+usually, abort this prompt using <tt/^G/.  When you do so, mutt will
+return to the compose screen.
+
+Once you have successfully finished the key selection, the message
+will be encrypted using the selected public keys, and sent out.
+
+Most fields of the entries in the key selection menu (see also <ref
+id="pgp_entry_format" name="&dollar;pgp&lowbar;entry&lowbar;format">) 
+have obvious meanings.  But some explanations on the capabilities, flags, 
+and validity fields are in order.
+
+The flags sequence (&percnt;f) will expand to one of the following flags:
+<tscreen><verb>
+R            The key has been revoked and can't be used.
+X            The key is expired and can't be used.
+d            You have marked the key as disabled.
+c            There are unknown critical self-signature 
+             packets.
+</verb></tscreen>
+
+The capabilities field (&percnt;c) expands to a two-character sequence
+representing a key's capabilities.  The first character gives
+the key's encryption capabilities: A minus sign (<bf/-/) means 
+that the key cannot be used for encryption.  A dot (<bf/./) means that
+it's marked as a signature key in one of the user IDs, but may 
+also be used for encryption.  The letter <bf/e/ indicates that 
+this key can be used for encryption.
+The second character indicates the key's signing capabilities.  Once 
+again, a ``<bf/-/'' implies ``not for signing'', ``<bf/./'' implies
+that the key is marked as an encryption key in one of the user-ids, and
+``<bf/s/'' denotes a key which can be used for signing.
+
+Finally, the validity field (%t) indicates how well-certified a user-id
+is.  A question mark (<bf/?/) indicates undefined validity, a minus 
+character (<bf/-/) marks an untrusted association, a space character 
+means a partially trusted association, and a plus character (<bf/+/) 
+indicates complete validity.
+
+<sect2>Sending anonymous messages via mixmaster.
+
+<p>
+You may also have configured mutt to co-operate with Mixmaster, an
+anonymous remailer.  Mixmaster permits you to send your messages
+anonymously using a chain of remailers. Mixmaster support in mutt is for 
+mixmaster version 2.04 (beta 45 appears to be the latest) and 2.03. 
+It does not support earlier versions or the later so-called version 3 betas, 
+of which the latest appears to be called 2.9b23.
+
+To use it, you'll have to obey certain restrictions.  Most
+important, you cannot use the <tt/Cc/ and <tt/Bcc/ headers.  To tell
+Mutt to use mixmaster, you have to select a remailer chain, using
+the mix function on the compose menu.  
+
+The chain selection screen is divided into two parts.  In the
+(larger) upper part, you get a list of remailers you may use.  In
+the lower part, you see the currently selected chain of remailers.
+
+You can navigate in the chain using the <tt/chain-prev/ and
+<tt/chain-next/ functions, which are by default bound to the left
+and right arrows and to the <tt/h/ and <tt/l/ keys (think vi
+keyboard bindings).  To insert a remailer at the current chain
+position, use the <tt/insert/ function.  To append a remailer behind
+the current chain position, use <tt/select-entry/ or <tt/append/.
+You can also delete entries from the chain, using the corresponding
+function.  Finally, to abandon your changes, leave the menu, or
+<tt/accept/ them pressing (by default) the <tt/Return/ key.
+
+Note that different remailers do have different capabilities,
+indicated in the &percnt;c entry of the remailer menu lines (see
+<ref id="mix_entry_format"
+name="&dollar;mix&lowbar;entry&lowbar;format">).  Most important is
+the ``middleman'' capability, indicated by a capital ``M'': This
+means that the remailer in question cannot be used as the final
+element of a chain, but will only forward messages to other
+mixmaster remailers.  For details on the other capabilities, please
+have a look at the mixmaster documentation.
+
+<sect1>Forwarding and Bouncing Mail<label id="forwarding_mail">
+<p>
+
+Bouncing and forwarding let you send an existing message to recipients
+that you specify.  Bouncing a message uses the <ref id="sendmail"
+name="sendmail"> command to send a copy to alternative addresses as if
+they were the message's original recipients.  Forwarding a message, on
+the other hand, allows you to modify the message before it is resent
+(for example, by adding your own comments).
+
+The following keys are bound by default:
+
+<tscreen><verb>
+f       forward         forward message
+b       bounce          bounce (remail) message
+</verb></tscreen>
+
+Forwarding can be done by including the original message in the new
+message's body (surrounded by indicating lines) or including it as a MIME
+attachment, depending on the value of the <ref id="mime_forward"
+name="&dollar;mime&lowbar;forward"> variable.  Decoding of attachments,
+like in the pager, can be controlled by the <ref id="forward_decode"
+name="&dollar;forward&lowbar;decode"> and <ref id="mime_forward_decode"
+name="&dollar;mime&lowbar;forward&lowbar;decode"> variables,
+respectively.  The desired forwarding format may depend on the content,
+therefore <em/&dollar;mime&lowbar;forward/ is a quadoption which, for
+example, can be set to ``ask-no''.
+
+The inclusion of headers is controlled by the current setting of the
+<ref id="weed" name="&dollar;weed"> variable, unless <ref
+id="mime_forward" name="mime&lowbar;forward"> is set.
+
+Editing the message to forward follows the same procedure as sending or
+replying to a message does.
+
+<sect1>Postponing Mail<label id="postponing_mail">
+<p>
+
+At times it is desirable to delay sending a message that you have
+already begun to compose.  When the <em/postpone-message/ function is
+used in the <em/compose/ menu, the body of your message and attachments
+are stored in the mailbox specified by the <ref id="postponed"
+name="&dollar;postponed"> variable.  This means that you can recall the
+message even if you exit Mutt and then restart it at a later time.
+
+Once a message is postponed, there are several ways to resume it.  From the
+command line you can use the ``-p'' option, or if you <em/compose/ a new
+message from the <em/index/ or <em/pager/ you will be prompted if postponed
+messages exist.  If multiple messages are currently postponed, the
+<em/postponed/ menu will pop up and you can select which message you would
+like to resume.
+
+<bf/Note:/ If you postpone a reply to a message, the reply setting of
+the message is only updated when you actually finish the message and
+send it.  Also, you must be in the same folder with the message you
+replied to for the status of the message to be updated.
+
+See also the <ref id="postpone" name="&dollar;postpone"> quad-option.
+
+<sect1>Reading news via NNTP<label id="reading_news">
+<p>
+
+If compiled with ``--enable-nntp'' option, Mutt can read news from newsserver
+via NNTP.  You can open a newsgroup with function ``change-newsgroup''
+(default: i).  Default newsserver can be obtained from <em/NNTPSERVER/
+environment variable.  Like other news readers, info about subscribed
+newsgroups is saved in file by <ref id="newsrc" name="&dollar;newsrc">
+variable.  Article headers are cached and can be loaded from file when
+newsgroup entered instead loading from newsserver.
+
+<sect>Configuration
+<p>
+
+While the default configuration (or ``preferences'') make Mutt
+usable right out of the box, it is often desirable to tailor Mutt to
+suit your own tastes. When Mutt is first invoked, it will attempt to
+read the ``system'' configuration file (defaults set by your local
+system administrator), unless the ``-n'' <ref id="commandline"
+name="command line"> option is specified.  This file is typically
+<tt>/usr/local/share/mutt/Muttrc</tt> or <tt>/etc/Muttrc</tt>. Mutt
+will next look for a file named <tt>.muttrc</tt> in your home
+directory.  If this file does not exist and your home directory has
+a subdirectory named <tt/.mutt/, mutt try to load a file named
+<tt>.mutt/muttrc</tt>. 
+
+<tt>.muttrc</tt> is the file where you will usually place your <ref
+ id="commands" name="commands"> to configure Mutt.
+
+In addition, mutt supports version specific configuration files that are
+parsed instead of the default files as explained above.  For instance, if
+your system has a <tt/Muttrc-0.88/ file in the system configuration
+directory, and you are running version 0.88 of mutt, this file will be
+sourced instead of the <tt/Muttrc/ file.  The same is true of the user
+configuration file, if you have a file <tt/.muttrc-0.88.6/ in your home
+directory, when you run mutt version 0.88.6, it will source this file
+instead of the default <tt/.muttrc/ file.  The version number is the
+same which is visible using the ``-v'' <ref id="commandline"
+name="command line"> switch or using the <tt/show-version/ key (default:
+V) from the index menu.
+
+<sect1>Syntax of Initialization Files<label id="muttrc-syntax">
+<p>
+
+An initialization file consists of a series of <ref id="commands"
+name="commands">.  Each line of the file may contain one or more commands.
+When multiple commands are used, they must be separated by a semicolon (;).
+<tscreen><verb>
+set realname='Mutt user' ; ignore x-
+</verb></tscreen>
+The hash mark, or pound sign
+(``&num;''), is used as a ``comment'' character. You can use it to
+annotate your initialization file. All text after the comment character
+to the end of the line is ignored. For example,
+
+<tscreen><verb>
+my_hdr X-Disclaimer: Why are you listening to me? &num; This is a comment
+</verb></tscreen>
+
+Single quotes (') and double quotes (&dquot;) can be used to quote strings
+which contain spaces or other special characters.  The difference between
+the two types of quotes is similar to that of many popular shell programs,
+namely that a single quote is used to specify a literal string (one that is
+not interpreted for shell variables or quoting with a backslash &lsqb;see
+next paragraph&rsqb;), while double quotes indicate a string for which
+should be evaluated.  For example, backtics are evaluated inside of double
+quotes, but <bf/not/ for single quotes.
+
+&bsol; quotes the next character, just as in shells such as bash and zsh.
+For example, if want to put quotes ``&dquot;'' inside of a string, you can use
+``&bsol;'' to force the next character to be a literal instead of interpreted
+character.
+<tscreen><verb>
+set realname="Michael \"MuttDude\" Elkins"
+</verb></tscreen>
+
+``&bsol;&bsol;'' means to insert a literal ``&bsol;'' into the line.
+``&bsol;n'' and ``&bsol;r'' have their usual C meanings of linefeed and
+carriage-return, respectively.
+
+A &bsol; at the end of a line can be used to split commands over
+multiple lines, provided that the split points don't appear in the
+middle of command names.
+
+It is also possible to substitute the output of a Unix command in an
+initialization file.  This is accomplished by enclosing the command in
+backquotes (``).  For example,
+<tscreen><verb>
+my_hdr X-Operating-System: `uname -a`
+</verb></tscreen>
+The output of the Unix command ``uname -a'' will be substituted before the
+line is parsed.  Note that since initialization files are line oriented, only
+the first line of output from the Unix command will be substituted.
+
+UNIX environments can be accessed like the way it is done in shells like
+sh and bash: Prepend the name of the environment by a ``&dollar;''.  For
+example,
+<tscreen><verb>
+set record=+sent_on_$HOSTNAME
+</verb></tscreen>
+
+The commands understood by mutt are explained in the next paragraphs.
+For a complete list, see the <ref id="commands" name="command reference">.
+
+<sect1>Defining/Using aliases<label id="alias">
+<p>
+
+Usage: <tt/alias/ <em/key/ <em/address/ &lsqb; , <em/address/, ... &rsqb;
+
+It's usually very cumbersome to remember or type out the address of someone
+you are communicating with.  Mutt allows you to create ``aliases'' which map
+a short string to a full address.
+
+<bf/Note:/ if you want to create an alias for a group (by specifying more than
+one address), you <bf/must/ separate the addresses with a comma (``,'').
+
+To remove an alias or aliases (``*'' means all aliases):
+
+<tt/unalias/ &lsqb; * | <em/key/ <em/.../ &rsqb;
+
+<tscreen><verb>
+alias muttdude me@cs.hmc.edu (Michael Elkins)
+alias theguys manny, moe, jack
+</verb></tscreen>
+
+Unlike other mailers, Mutt doesn't require aliases to be defined
+in a special file.  The <tt/alias/ command can appear anywhere in
+a configuration file, as long as this file is <ref id="source"
+name="sourced">.  Consequently, you can have multiple alias files, or
+you can have all aliases defined in your muttrc.
+
+On the other hand, the <ref id="create-alias" name="create-alias">
+function can use only one file, the one pointed to by the <ref
+id="alias_file" name="&dollar;alias&lowbar;file"> variable (which is
+<tt>&tilde;/.muttrc</tt> by default). This file is not special either,
+in the sense that Mutt will happily append aliases to any file, but in
+order for the new aliases to take effect you need to explicitly <ref
+id="source" name="source"> this file too.
+
+For example:
+
+<tscreen><verb>
+source /usr/local/share/Mutt.aliases
+source ~/.mail_aliases
+set alias_file=~/.mail_aliases
+</verb></tscreen>
+
+To use aliases, you merely use the alias at any place in mutt where mutt
+prompts for addresses, such as the <em/To:/ or <em/Cc:/ prompt.  You can
+also enter aliases in your editor at the appropriate headers if you have the
+<ref id="edit_headers" name="&dollar;edit&lowbar;headers"> variable set.
+
+In addition, at the various address prompts, you can use the tab character
+to expand a partial alias to the full alias.  If there are multiple matches,
+mutt will bring up a menu with the matching aliases.  In order to be
+presented with the full list of aliases, you must hit tab with out a partial
+alias, such as at the beginning of the prompt or after a comma denoting
+multiple addresses.
+
+In the alias menu, you can select as many aliases as you want with the
+<em/select-entry/ key (default: RET), and use the <em/exit/ key
+(default: q) to return to the address prompt.
+
+<sect1>Changing the default key bindings<label id="bind">
+<p>
+Usage: <tt/bind/ <em/map/ <em/key/ <em/function/
+
+This command allows you to change the default key bindings (operation
+invoked when pressing a key).
+
+<em/map/ specifies in which menu the binding belongs.  The currently
+defined maps are:
+
+<descrip>
+<tag/generic/
+This is not a real menu, but is used as a fallback for all of the other
+menus except for the pager and editor modes.  If a key is not defined in
+another menu, Mutt will look for a binding to use in this menu.  This allows
+you to bind a key to a certain function in multiple menus instead of having
+multiple bind statements to accomplish the same task.
+<tag/alias/
+The alias menu is the list of your personal aliases as defined in your
+muttrc.  It is the mapping from a short alias name to the full email
+address(es) of the recipient(s).
+<tag/attach/
+The attachment menu is used to access the attachments on received messages.
+<tag/browser/
+The browser is used for both browsing the local directory structure, and for
+listing all of your incoming mailboxes.
+<tag/editor/
+The editor is the line-based editor the user enters text data.
+<tag/index/
+The index is the list of messages contained in a mailbox.
+<tag/compose/
+The compose menu is the screen used when sending a new message.
+<tag/pager/
+The pager is the mode used to display message/attachment data, and help
+listings.
+<tag/pgp/
+The pgp menu is used to select the OpenPGP keys used for encrypting outgoing
+messages.
+<tag/postpone/
+The postpone menu is similar to the index menu, except is used when
+recalling a message the user was composing, but saved until later.
+</descrip>
+
+<em/key/ is the key (or key sequence) you wish to bind.  To specify a
+control character, use the sequence <em/&bsol;Cx/, where <em/x/ is the
+letter of the control character (for example, to specify control-A use
+``&bsol;Ca'').  Note that the case of <em/x/ as well as <em/&bsol;C/ is
+ignored, so that <em/&bsol;CA, &bsol;Ca, &bsol;cA/ and <em/&bsol;ca/ are all
+equivalent.  An alternative form is to specify the key as a three digit
+octal number prefixed with a ``&bsol;'' (for example <em/&bsol;177/ is
+equivalent to <em/&bsol;c?/).
+
+In addition, <em/key/ may consist of:
+
+<tscreen><verb>
+\t              tab
+<tab>           tab
+\r              carriage return
+\n              newline
+\e              escape
+<esc>           escape
+<up>            up arrow
+<down>          down arrow
+<left>          left arrow
+<right>         right arrow
+<pageup>        Page Up
+<pagedown>      Page Down
+<backspace>     Backspace
+<delete>        Delete
+<insert>        Insert
+<enter>         Enter
+<return>        Return
+<home>          Home
+<end>           End
+<space>         Space bar
+<f1>            function key 1
+<f10>           function key 10
+</verb></tscreen>
+
+<em/key/ does not need to be enclosed in quotes unless it contains a
+space (`` '').
+
+<em/function/ specifies which action to take when <em/key/ is pressed.
+For a complete list of functions, see the <ref id="functions"
+name="reference">.  The special function <tt/noop/ unbinds the specified key
+sequence.
+
+<sect1>Defining aliases for character sets <label id="charset-hook">
+<p>
+Usage: <tt/charset-hook/ <em/alias/ <em/charset/<newline>
+Usage: <tt/iconv-hook/ <em/charset/ <em/local-charset/
+
+The <tt/charset-hook/ command defines an alias for a character set.
+This is useful to properly display messages which are tagged with a
+character set name not known to mutt.
+
+The <tt/iconv-hook/ command defines a system-specific name for a
+character set.  This is helpful when your systems character
+conversion library insists on using strange, system-specific names
+for character sets.
+
+
+<sect1>Setting variables based upon mailbox<label id="folder-hook">
+<p>
+Usage: <tt/folder-hook/ &lsqb;!&rsqb;<em/regexp/ <em/command/
+
+It is often desirable to change settings based on which mailbox you are
+reading.  The folder-hook command provides a method by which you can execute
+any configuration command.  <em/regexp/ is a regular expression specifying
+in which mailboxes to execute <em/command/ before loading.  If a mailbox
+matches multiple folder-hook's, they are executed in the order given in the
+muttrc.
+
+<bf/Note:/ if you use the ``!'' shortcut for <ref id="spoolfile"
+name="&dollar;spoolfile"> at the beginning of the pattern, you must place it
+inside of double or single quotes in order to distinguish it from the
+logical <em/not/ operator for the expression.
+
+Note that the settings are <em/not/ restored when you leave the mailbox.
+For example, a command action to perform is to change the sorting method
+based upon the mailbox being read:
+
+<tscreen><verb>
+folder-hook mutt set sort=threads
+</verb></tscreen>
+
+However, the sorting method is not restored to its previous value when
+reading a different mailbox.  To specify a <em/default/ command, use the
+pattern ``.'':
+
+<p>
+<tscreen><verb>
+folder-hook . set sort=date-sent
+</verb></tscreen>
+
+<sect1>Keyboard macros<label id="macro">
+<p>
+Usage: <tt/macro/ <em/menu/ <em/key/ <em/sequence/ &lsqb; <em/description/ &rsqb;
+
+Macros are useful when you would like a single key to perform a series of
+actions.  When you press <em/key/ in menu <em/menu/, Mutt will behave as if
+you had typed <em/sequence/.  So if you have a common sequence of commands
+you type, you can create a macro to execute those commands with a single
+key.
+
+<em/key/ and <em/sequence/ are expanded by the same rules as the <ref
+id="bind" name="key bindings">.  There are some additions however.  The
+first is that control characters in <em/sequence/ can also be specified
+as <em/&circ;x/.  In order to get a caret (`&circ;'') you need to use
+<em/&circ;&circ;/.  Secondly, to specify a certain key such as <em/up/
+or to invoke a function directly, you can use the format
+<em/&lt;key name&gt;/ and <em/&lt;function name&gt;/.  For a listing of key
+names see the section on <ref id="bind" name="key bindings">.  Functions
+are listed in the <ref id="functions" name="function reference">.
+
+The advantage with using function names directly is that the macros will
+work regardless of the current key bindings, so they are not dependent on
+the user having particular key definitions.  This makes them more robust
+and portable, and also facilitates defining of macros in files used by more
+than one user (eg. the system Muttrc).
+
+Optionally you can specify a descriptive text after <em/sequence/,
+which is shown in the help screens.
+
+<bf/Note:/ Macro definitions (if any) listed in the help screen(s), are
+silently truncated at the screen width, and are not wrapped.   
+
+<sect1>Using color and mono video attributes<label id="color">
+<p>
+Usage: <tt/color/ <em/object/ <em/foreground/ <em/background/ &lsqb; <em/regexp/ &rsqb;<newline>
+Usage: <tt/color/ index <em/foreground/ <em/background/ <em/pattern/<newline>
+Usage: <tt/uncolor/ index <em/pattern/ &lsqb; <em/pattern/ ...  &rsqb;<newline>
+
+If your terminal supports color, you can spice up Mutt by creating your own
+color scheme.  To define the color of an object (type of information), you
+must specify both a foreground color <bf/and/ a background color (it is not
+possible to only specify one or the other).
+
+<em/object/ can be one of:
+
+<itemize>
+<item>attachment
+<item>body (match <em/regexp/ in the body of messages)
+<item>bold (hiliting bold patterns in the body of messages)
+<item>error (error messages printed by Mutt)
+<item>header (match <em/regexp/ in the message header)
+<item>hdrdefault (default color of the message header in the pager)
+<item>index (match <em/pattern/ in the message index)
+<item>indicator (arrow or bar used to indicate the current item in a menu)
+<item>markers (the ``+'' markers at the beginning of wrapped lines in the pager)
+<item>message (informational messages)
+<item>normal
+<item>quoted (text matching <ref id="quote_regexp"
+name="&dollar;quote&lowbar;regexp"> in the body of a message)
+<item>quoted1, quoted2, ..., quoted<bf/N/ (higher levels of quoting)
+<item>search (hiliting of words in the pager)
+<item>signature
+<item>status (mode lines used to display info about the mailbox or message)
+<item>tilde (the ``&tilde;'' used to pad blank lines in the pager)
+<item>tree (thread tree drawn in the message index and attachment menu)
+<item>underline (hiliting underlined patterns in the body of messages)
+</itemize>
+
+<em/foreground/ and <em/background/ can be one of the following:
+
+<itemize>
+<item>white
+<item>black
+<item>green
+<item>magenta
+<item>blue
+<item>cyan
+<item>yellow
+<item>red
+<item>default
+<item>color<em/x/
+</itemize>
+
+<em/foreground/ can optionally be prefixed with the keyword <tt/bright/ to make
+the foreground color boldfaced (e.g., <tt/brightred/).
+
+If your terminal supports it, the special keyword <em/default/ can be
+used as a transparent color.  The value <em/brightdefault/ is also valid.
+If Mutt is linked against the <em/S-Lang/ library, you also need to set
+the <em/COLORFGBG/ environment variable to the default colors of your
+terminal for this to work; for example (for Bourne-like shells):
+
+<tscreen><verb>
+set COLORFGBG="green;black"
+export COLORFGBG
+</verb></tscreen>
+
+<bf/Note:/ The <em/S-Lang/ library requires you to use the <em/lightgray/
+and <em/brown/ keywords instead of <em/white/ and <em/yellow/ when
+setting this variable.
+
+<bf/Note:/ The uncolor command can be applied to the index object only.  It
+removes entries from the list. You <bf/must/ specify the same pattern
+specified in the color command for it to be removed.  The pattern ``*'' is
+a special token which means to clear the color index list of all entries.
+
+Mutt also recognizes the keywords <em/color0/, <em/color1/, &hellip;,
+<em/color/<bf/N-1/ (<bf/N/ being the number of colors supported
+by your terminal).  This is useful when you remap the colors for your
+display (for example by changing the color associated with <em/color2/
+for your xterm), since color names may then lose their normal meaning.
+
+If your terminal does not support color, it is still possible change the video
+attributes through the use of the ``mono'' command:
+
+Usage: <tt/mono/ <em/&lt;object&gt; &lt;attribute&gt;/ &lsqb; <em/regexp/ &rsqb;<newline>
+Usage: <tt/mono/ index <em/attribute/ <em/pattern/<newline>
+Usage: <tt/unmono/ index <em/pattern/ &lsqb; <em/pattern/ ...  &rsqb;<newline>
+
+where <em/attribute/ is one of the following:
+
+<itemize>
+<item>none
+<item>bold
+<item>underline
+<item>reverse
+<item>standout
+</itemize>
+
+<sect1>Ignoring (weeding) unwanted message headers<label id="ignore">
+<p>
+Usage: <tt/&lsqb;un&rsqb;ignore/ <em/pattern/ &lsqb; <em/pattern/ ... &rsqb;
+
+Messages often have many header fields added by automatic processing systems,
+or which may not seem useful to display on the screen.  This command allows
+you to specify header fields which you don't normally want to see.
+
+You do not need to specify the full header field name.  For example,
+``ignore content-'' will ignore all header fields that begin with the pattern
+``content-''. ``ignore *'' will ignore all headers.
+
+To remove a previously added token from the list, use the ``unignore'' command.
+The ``unignore'' command will make Mutt display headers with the given pattern.
+For example, if you do ``ignore x-'' it is possible to ``unignore x-mailer''.
+
+``unignore *'' will remove all tokens from the ignore list.
+
+For example:
+<tscreen><verb>
+# Sven's draconian header weeding
+ignore *
+unignore from date subject to cc
+unignore organization organisation x-mailer: x-newsreader: x-mailing-list:
+unignore posted-to:
+</verb></tscreen>
+
+<sect1>Alternative addresses<label id="alternates">
+<p>
+Usage: <tt/&lsqb;un&rsqb;alternates/ <em/regexp/ &lsqb; <em/regexp/ ... &rsqb;<newline>
+
+With various functions, mutt will treat messages differently,
+depending on whether you sent them or whether you received them from
+someone else.  For instance, when replying to a message that you
+sent to a different party, mutt will automatically suggest to send
+the response to the original message's recipients -- responding to
+yourself won't make much sense in many cases.  (See <ref
+id="reply_to" name="&dollar;reply_to">.)
+
+Many users receive e-mail under a number of different addresses. To
+fully use mutt's features here, the program must be able to
+recognize what e-mail addresses you receive mail under. That's the
+purpose of the <tt/alternates/ command: It takes a list of regular
+expressions, each of which can identify an address under which you
+receive e-mail.
+
+To remove a regular expression from this list, use the
+<tt/unalternates/ command.
+
+<sect1>Mailing lists<label id="lists">
+<p>
+Usage: <tt/&lsqb;un&rsqb;lists/ <em/regexp/ &lsqb; <em/regexp/ ... &rsqb;<newline>
+Usage: <tt/&lsqb;un&rsqb;subscribe/ <em/regexp/ &lsqb; <em/regexp/ ... &rsqb;
+
+Mutt has a few nice features for <ref id="using_lists" name="handling
+mailing lists">.  In order to take advantage of them, you must
+specify which addresses belong to mailing lists, and which mailing
+lists you are subscribed to.  Once you have done this, the <ref
+id="list-reply" name="list-reply"> function will work for all known lists.
+Additionally, when you send a message to a subscribed list, mutt will
+add a Mail-Followup-To header to tell other users' mail user agents
+not to send copies of replies to your personal address.   Note that
+the Mail-Followup-To header is a non-standard extension which is not
+supported by all mail user agents.  Adding it is not bullet-proof against
+receiving personal CCs of list messages.  Also note that the generation
+of the Mail-Followup-To header is controlled by the <ref id="followup_to"
+name="&dollar;followup_to"> configuration variable.
+
+More precisely, Mutt maintains lists of patterns for the addresses
+of known and subscribed mailing lists.  Every subscribed mailing
+list is known. To mark a mailing list as known, use the ``lists''
+command.  To mark it as subscribed, use ``subscribe''.
+
+You can use regular expressions with both commands.  To mark all
+messages sent to a specific bug report's address on mutt's bug
+tracking system as list mail, for instance, you could say
+``subscribe [0-9]*@bugs.guug.de''.  Often, it's sufficient to just
+give a portion of the list's e-mail address.
+
+Specify as much of the address as you need to to remove ambiguity.  For
+example, if you've subscribed to the Mutt mailing list, you will receive mail
+addresssed to <em/mutt-users@mutt.org/.  So, to tell Mutt that this is a
+mailing list, you could add ``lists mutt-users'' to your
+initialization file.  To tell mutt that you are subscribed to it,
+add ``subscribe mutt-users'' to your initialization file instead.
+If you also happen to get mail from someone whose address is
+<em/mutt-users@example.com/, you could use ``lists mutt-users@mutt.org'' 
+or ``subscribe mutt-users@mutt.org'' to
+match only mail from the actual list.
+
+The ``unlists'' command is used to remove a token from the list of
+known and subscribed mailing-lists. Use ``unlists *'' to remove all
+tokens.
+
+To remove a mailing list from the list of subscribed mailing lists,
+but keep it on the list of known mailing lists, use ``unsubscribe''.
+
+<sect1>Using Multiple spool mailboxes<label id="mbox-hook">
+<p>
+Usage: <tt/mbox-hook/ &lsqb;!&rsqb;<em/pattern/ <em/mailbox/
+
+This command is used to move read messages from a specified mailbox to a
+different mailbox automatically when you quit or change folders.
+<em/pattern/ is a regular expression specifying the mailbox to treat as a
+``spool'' mailbox and <em/mailbox/ specifies where mail should be saved when
+read.
+
+Unlike some of the other <em/hook/ commands, only the <em/first/ matching
+pattern is used (it is not possible to save read mail in more than a single
+mailbox).
+
+<sect1>Defining mailboxes which receive mail<label id="mailboxes">
+<p>
+Usage: <tt/&lsqb;un&rsqb;mailboxes/ &lsqb;!&rsqb;<em/filename/ &lsqb; <em/filename/ ... &rsqb;
+
+This command specifies folders which can receive mail and
+which will be checked for new messages.  By default, the
+main menu status bar displays how many of these folders have
+new messages.
+<p>
+When changing folders, pressing <em/space/ will cycle
+through folders with new mail.
+<p>
+Pressing TAB in the directory browser will bring up a menu showing the files
+specified by the <tt/mailboxes/ command, and indicate which contain new
+messages.  Mutt will automatically enter this mode when invoked from the
+command line with the <tt/-y/ option.
+
+The ``unmailboxes'' command is used to remove a token from the list
+of folders which receive mail. Use ``unmailboxes *'' to remove all
+tokens.
+
+<p>
+<bf/Note:/ new mail is detected by comparing the last modification time to
+the last access time.  Utilities like <tt/biff/ or <tt/frm/ or any other
+program which accesses the mailbox might cause Mutt to never detect new mail
+for that mailbox if they do not properly reset the access time.  Backup
+tools are another common reason for updated access times.
+<p>
+
+<bf/Note:/ the filenames in the <tt/mailboxes/ command are resolved when
+the command is executed, so if these names contain <ref id="shortcuts"
+name="shortcut characters"> (such as ``='' and ``!''), any variable
+definition that affect these characters (like <ref id="folder"
+name="&dollar;folder"> and <ref id="spoolfile" name="&dollar;spoolfile">)
+should be executed before the <tt/mailboxes/ command.
+
+<sect1>User defined headers<label id="my_hdr">
+<p>
+Usage:<newline>
+<tt/my_hdr/ <em/string/<newline>
+<tt/unmy_hdr/ <em/field/ &lsqb; <em/field/ ... &rsqb;
+
+The ``my&lowbar;hdr'' command allows you to create your own header
+fields which will be added to every message you send.
+
+For example, if you would like to add an ``Organization:'' header field to
+all of your outgoing messages, you can put the command
+
+<quote>
+my_hdr Organization: A Really Big Company, Anytown, USA
+</quote>
+
+in your <tt/.muttrc/.
+
+<bf/Note:/  space characters are <em/not/ allowed between the keyword and
+the colon (``:'').  The standard for electronic mail (RFC822) says that
+space is illegal there, so Mutt enforces the rule.
+
+If you would like to add a header field to a single message, you should
+either set the <ref id="edit_headers" name="edit&lowbar;headers"> variable,
+or use the <em/edit-headers/ function (default: ``E'') in the send-menu so
+that you can edit the header of your message along with the body.
+
+To remove user defined header fields, use the ``unmy&lowbar;hdr''
+command.  You may specify an asterisk (``*'') to remove all header
+fields, or the fields to remove.  For example, to remove all ``To'' and
+``Cc'' header fields, you could use:
+
+<quote>
+unmy_hdr to cc
+</quote>
+
+<sect1>Defining the order of headers when viewing messages<label id="hdr_order">
+<p>
+Usage: <tt/hdr&lowbar;order/ <em/header1/ <em/header2/ <em/header3/
+
+With this command, you can specify an order in which mutt will attempt
+to present headers to you when viewing messages.
+
+``unhdr_order *'' will clear all previous headers from the order list,
+thus removing the header order effects set by the system-wide startup
+file.
+
+<tscreen><verb>
+hdr&lowbar;order From Date: From: To: Cc: Subject:
+</verb></tscreen>
+
+<sect1>Specify default save filename<label id="save-hook">
+<p>
+Usage: <tt/save-hook/ &lsqb;!&rsqb;<em/pattern/ <em/filename/
+
+This command is used to override the default filename used when saving
+messages.  <em/filename/ will be used as the default filename if the message is
+<em/From:/ an address matching <em/regexp/ or if you are the author and the
+message is addressed <em/to:/ something matching <em/regexp/.
+
+See <ref id="pattern_hook" name="Message Matching in Hooks"> for information on the exact format of <em/pattern/.
+
+Examples:
+
+<tscreen><verb>
+save-hook me@(turing\\.)?cs\\.hmc\\.edu$ +elkins
+save-hook aol\\.com$ +spam
+</verb></tscreen>
+
+Also see the <ref id="fcc-save-hook" name="fcc-save-hook"> command.
+
+<sect1>Specify default Fcc: mailbox when composing<label id="fcc-hook">
+<p>
+Usage: <tt/fcc-hook/ &lsqb;!&rsqb;<em/pattern/ <em/mailbox/
+
+This command is used to save outgoing mail in a mailbox other than
+<ref id="record" name="&dollar;record">.  Mutt searches the initial list of
+message recipients for the first matching <em/regexp/ and uses <em/mailbox/
+as the default Fcc: mailbox.  If no match is found the message will be saved
+to <ref id="record" name="&dollar;record"> mailbox.
+
+See <ref id="pattern_hook" name="Message Matching in Hooks"> for information on the exact format of <em/pattern/.
+
+Example: <tt/fcc-hook aol.com&dollar; +spammers/
+
+The above will save a copy of all messages going to the aol.com domain to
+the `+spammers' mailbox by default.  Also see the <ref id="fcc-save-hook" 
+name="fcc-save-hook"> command.
+
+<sect1>Specify default save filename and default Fcc: mailbox at once<label
+id="fcc-save-hook">
+<p>
+Usage: <tt/fcc-save-hook/ &lsqb;!&rsqb;<em/pattern/ <em/mailbox/
+
+This command is a shortcut, equivalent to doing both a <ref id="fcc-hook" name="fcc-hook">
+and a <ref id="save-hook" name="save-hook"> with its arguments.
+
+<sect1>Change settings based upon message recipients<label id="send-hook"><label id="reply-hook">
+<p>
+Usage: <tt/reply-hook/ &lsqb;!&rsqb;<em/pattern/ <em/command/<newline>
+Usage: <tt/send-hook/ &lsqb;!&rsqb;<em/pattern/ <em/command/
+
+These commands can be used to execute arbitrary configuration commands based
+upon recipients of the message.  <em/pattern/ is a regular expression
+matching the desired address.  <em/command/ is executed when <em/regexp/
+matches recipients of the message.
+
+<tt/reply-hook/ is matched against the message you are <em/replying/
+<bf/to/, instead of the message you are <em/sending/.  <tt/send-hook/ is
+matched against all messages, both <em/new/ and <em/replies/.  <bf/Note:/
+<tt/reply-hook/s are matched <bf/before/ the <tt/send-hook/, <bf/regardless/
+of the order specified in the users's configuration file.
+
+For each type of <tt/send-hook/ or <tt/reply-hook/, When multiple matches
+occur, commands are executed in the order they are specified in the muttrc
+(for that type of hook).
+
+See <ref id="pattern_hook" name="Message Matching in Hooks"> for information on the exact format of <em/pattern/.
+
+Example: <tt/send-hook mutt &dquot;set mime&lowbar;forward signature=''&dquot;/
+
+Another typical use for this command is to change the values of the
+<ref id="attribution" name="&dollar;attribution">, <ref id="signature"
+name="&dollar;signature"> and <ref id="locale" name="&dollar;locale">
+variables in order to change the language of the attributions and
+signatures based upon the recipients.
+
+<bf/Note:/ the send-hook's are only executed ONCE after getting the initial
+list of recipients.  Adding a recipient after replying or editing the
+message will NOT cause any send-hook to be executed.  Also note that
+my_hdr commands which modify recipient headers, or the message's
+subject, don't have any effect on the current message when executed
+from a send-hook.
+
+<sect1>Change settings before formatting a message<label id="message-hook">
+<p>
+Usage: <tt/message-hook/ &lsqb;!&rsqb;<em/pattern/ <em/command/
+
+This command can be used to execute arbitrary configuration commands
+before viewing or formatting a message based upon information about the message.
+<em/command/ is executed if the <em/pattern/ matches the message to be
+displayed. When multiple matches occur, commands are executed in the order
+they are specified in the muttrc.
+
+See <ref id="pattern_hook" name="Message Matching in Hooks"> for
+information on the exact format of <em/pattern/.
+
+Example:
+<tscreen><verb>
+message-hook ~A 'set pager=builtin'
+message-hook '~f freshmeat-news' 'set pager="less \"+/^  subject: .*\""'
+</verb></tscreen>
+
+<sect1>Choosing the cryptographic key of the recipient<label id="crypt-hook">
+<p>
+Usage: <tt/crypt-hook/ <em/pattern/ <em/keyid/
+
+When encrypting messages with PGP or OpenSSL, you may want to associate a certain
+key with a given e-mail address automatically, either because the
+recipient's public key can't be deduced from the destination address,
+or because, for some reasons, you need to override the key Mutt would
+normally use.  The crypt-hook command provides a method by which you can
+specify the ID of the public key to be used when encrypting messages to
+a certain recipient.
+
+The meaning of "key id" is to be taken broadly in this context:  You
+can either put a numerical key ID here, an e-mail address, or even
+just a real name.
+
+<sect1>Adding key sequences to the keyboard buffer<label id="push">
+<p>
+Usage: <tt/push/ <em/string/
+
+This command adds the named string to the keyboard buffer. The string may
+contain control characters, key names and function names like the sequence
+string in the <ref id="macro" name="macro"> command. You may use it to
+automatically run a sequence of commands at startup, or when entering
+certain folders.
+
+<sect1>Executing functions<label id="exec">
+<p>
+Usage: <tt/exec/ <em/function/ &lsqb; <em/function/ ... &rsqb;
+
+This command can be used to execute any function. Functions are
+listed in the <ref id="functions" name="function reference">.
+``exec function'' is equivalent to ``push &lt;function&gt;''.
+
+<sect1>Message Scoring<label id="score-command">
+<p>
+Usage: <tt/score/ <em/pattern/ <em/value/<newline>
+Usage: <tt/unscore/ <em/pattern/ &lsqb; <em/pattern/ ... &rsqb;
+
+The <tt/score/ commands adds <em/value/ to a message's score if <em/pattern/
+matches it.  <em/pattern/ is a string in the format described in the <ref
+id="patterns" name="patterns"> section (note: For efficiency reasons, patterns
+which scan information not available in the index, such as <tt>&tilde;b</tt>,
+<tt>&tilde;B</tt> or <tt>&tilde;h</tt>, may not be used).  <em/value/ is a
+positive or negative integer.  A message's final score is the sum total of all
+matching <tt/score/ entries.  However, you may optionally prefix <em/value/ with
+an equal sign (=) to cause evaluation to stop at a particular entry if there is
+a match.  Negative final scores are rounded up to 0.
+
+The <tt/unscore/ command removes score entries from the list.  You <bf/must/
+specify the same pattern specified in the <tt/score/ command for it to be
+removed.  The pattern ``*'' is a special token which means to clear the list
+of all score entries.
+
+<sect1>Setting variables<label id="set">
+<p>
+Usage: <tt/set/ &lsqb;no|inv&rsqb;<em/variable/&lsqb;=<em/value/&rsqb; &lsqb; <em/variable/ ... &rsqb;<newline>
+Usage: <tt/toggle/ <em/variable/ &lsqb;<em/variable/ ... &rsqb;<newline>
+Usage: <tt/unset/ <em/variable/ &lsqb;<em/variable/ ... &rsqb;<newline>
+Usage: <tt/reset/ <em/variable/ &lsqb;<em/variable/ ... &rsqb;
+
+This command is used to set (and unset) <ref id="variables"
+name="configuration variables">.  There are four basic types of variables:
+boolean, number, string and quadoption.  <em/boolean/ variables can be
+<em/set/ (true) or <em/unset/ (false).  <em/number/ variables can be
+assigned a positive integer value.
+
+<em/string/ variables consist of any number of printable characters.
+<em/strings/ must be enclosed in quotes if they contain spaces or tabs.  You
+may also use the ``C'' escape sequences <bf/&bsol;n/ and <bf/&bsol;t/ for
+newline and tab, respectively.
+
+<em/quadoption/ variables are used to control whether or not to be prompted
+for certain actions, or to specify a default action.  A value of <em/yes/
+will cause the action to be carried out automatically as if you had answered
+yes to the question.  Similarly, a value of <em/no/ will cause the the
+action to be carried out as if you had answered ``no.''  A value of
+<em/ask-yes/ will cause a prompt with a default answer of ``yes'' and
+<em/ask-no/ will provide a default answer of ``no.''
+
+Prefixing a variable with ``no'' will unset it.  Example: <tt/set noaskbcc/.
+
+For <em/boolean/ variables, you may optionally prefix the variable name with
+<tt/inv/ to toggle the value (on or off).  This is useful when writing
+macros.  Example: <tt/set invsmart&lowbar;wrap/.
+
+The <tt/toggle/ command automatically prepends the <tt/inv/ prefix to all
+specified variables.
+
+The <tt/unset/ command automatically prepends the <tt/no/ prefix to all
+specified variables.
+
+Using the enter-command function in the <em/index/ menu, you can query the
+value of a variable by prefixing the name of the variable with a question
+mark:
+
+<tscreen><verb>
+set ?allow_8bit
+</verb></tscreen>
+
+The question mark is actually only required for boolean and quadoption 
+variables.
+
+The <tt/reset/ command resets all given variables to the compile time
+defaults (hopefully mentioned in this manual). If you use the command
+<tt/set/ and prefix the variable with ``&amp;'' this has the same
+behavior as the reset command.
+
+With the <tt/reset/ command there exists the special variable ``all'',
+which allows you to reset all variables to their system defaults.
+
+<sect1>Reading initialization commands from another file<label id="source">
+<p>
+Usage: <tt/source/ <em/filename/ &lsqb; <em/filename/ ... &rsqb;
+
+This command allows the inclusion of initialization commands
+from other files.  For example, I place all of my aliases in
+<tt>&tilde;/.mail&lowbar;aliases</tt> so that I can make my
+<tt>&tilde;/.muttrc</tt> readable and keep my aliases private.
+
+If the filename begins with a tilde (``&tilde;''), it will be expanded to the
+path of your home directory.
+
+If the filename ends with a vertical bar (|), then <em/filename/ is
+considered to be an executable program from which to read input (eg.
+<tt/source ~/bin/myscript|/).
+
+<sect1>Removing hooks<label id="unhook">
+<p>
+Usage: <tt/unhook/ &lsqb; * | <em/hook-type/ &rsqb;
+
+This command permits you to flush hooks you have previously defined.
+You can either remove all hooks by giving the ``*'' character as an
+argument, or you can remove all hooks of a specific type by saying
+something like <tt/unhook send-hook/.
+
+<sect>Advanced Usage
+
+<sect1>Regular Expressions<label id="regexp">
+<p>
+All string patterns in Mutt including those in more complex
+<ref id="patterns" name="patterns"> must be specified
+using regular expressions (regexp) in the ``POSIX extended'' syntax (which
+is more or less the syntax used by egrep and GNU awk).  For your
+convenience, we have included below a brief description of this syntax.
+
+The search is case sensitive if the pattern contains at least one upper
+case letter, and case insensitive otherwise. Note that ``&bsol;''
+must be quoted if used for a regular expression in an initialization
+command: ``&bsol;&bsol;''.
+
+A regular expression is a pattern that describes a set of strings.
+Regular expressions are constructed analogously to arithmetic
+expressions, by using various operators to combine smaller expressions.
+
+Note that the regular expression can be enclosed/delimited by either &dquot;
+or ' which is useful if the regular expression includes a white-space
+character.  See <ref id="muttrc-syntax" name="Syntax of Initialization Files">
+for more information on &dquot; and ' delimiter processing.  To match a
+literal &dquot; or ' you must preface it with \ (backslash).
+
+The fundamental building blocks are the regular expressions that match
+a single character.  Most characters, including all letters and digits,
+are regular expressions that match themselves.  Any metacharacter with
+special meaning may be quoted by preceding it with a backslash.
+
+The period ``.'' matches any single character.  The caret ``&circ;'' and
+the dollar sign ``&dollar'' are metacharacters that respectively match
+the empty string at the beginning and end of a line.
+
+A list of characters enclosed by ``&lsqb;'' and ``&rsqb;'' matches any
+single character in that list; if the first character of the list
+is a caret ``&circ;'' then it matches any character <bf/not/ in the
+list.  For example, the regular expression <bf/&lsqb;0123456789&rsqb;/
+matches any single digit.  A range of ASCII characters may be specified
+by giving the first and last characters, separated by a hyphen
+``&hyphen;''.  Most metacharacters lose their special meaning inside
+lists.  To include a literal ``&rsqb;'' place it first in the list.
+Similarly, to include a literal ``&circ;'' place it anywhere but first.
+Finally, to include a literal hyphen ``&hyphen;'' place it last.
+
+Certain named classes of characters are predefined.  Character classes
+consist of ``&lsqb;:'', a keyword denoting the class, and ``:&rsqb;''.
+The following classes are defined by the POSIX standard:
+
+<descrip>
+<tag/&lsqb;:alnum:&rsqb;/
+Alphanumeric characters.
+<tag/&lsqb;:alpha:&rsqb;/
+Alphabetic characters.
+<tag/&lsqb;:blank:&rsqb;/
+Space or tab characters.
+<tag/&lsqb;:cntrl:&rsqb;/
+Control characters.
+<tag/&lsqb;:digit:&rsqb;/
+Numeric characters.
+<tag/&lsqb;:graph:&rsqb;/
+Characters that are both printable and visible.  (A space is printable,
+but not visible, while an ``a'' is both.)
+<tag/&lsqb;:lower:&rsqb;/
+Lower-case alphabetic characters.
+<tag/&lsqb;:print:&rsqb;/
+Printable characters (characters that are not control characters.)
+<tag/&lsqb;:punct:&rsqb;/
+Punctuation characters (characters that are not letter, digits, control
+characters, or space characters).
+<tag/&lsqb;:space:&rsqb;/
+Space characters (such as space, tab and formfeed, to name a few).
+<tag/&lsqb;:upper:&rsqb;/
+Upper-case alphabetic characters.
+<tag/&lsqb;:xdigit:&rsqb;/
+Characters that are hexadecimal digits.
+</descrip>
+
+A character class is only valid in a regular expression inside the
+brackets of a character list.  Note that the brackets in these
+class names are part of the symbolic names, and must be included
+in addition to the brackets delimiting the bracket list.  For
+example, <bf/&lsqb;&lsqb;:digit:&rsqb;&rsqb;/ is equivalent to
+<bf/&lsqb;0-9&rsqb;/.
+
+Two additional special sequences can appear in character lists.  These
+apply to non-ASCII character sets, which can have single symbols (called
+collating elements) that are represented with more than one character,
+as well as several characters that are equivalent for collating or
+sorting purposes:
+
+<descrip>
+<tag/Collating Symbols/
+A collating symbol is a multi-character collating element enclosed in
+``&lsqb;.'' and ``.&rsqb;''.  For example, if ``ch'' is a collating
+element, then <bf/&lsqb;&lsqb;.ch.&rsqb;&rsqb;/ is a regexp that matches
+this collating element, while <bf/&lsqb;ch&rsqb;/ is a regexp that
+matches either ``c'' or ``h''.
+<tag/Equivalence Classes/
+An equivalence class is a locale-specific name for a list of
+characters that are equivalent. The name is enclosed in ``&lsqb;=''
+and ``=&rsqb;''.  For example, the name ``e'' might be used to
+represent all of ``&egrave;'' ``&eacute;'' and ``e''.  In this case,
+<bf/&lsqb;&lsqb;=e=&rsqb;&rsqb;/ is a regexp that matches any of
+``&egrave;'', ``&eacute;'' and ``e''.
+</descrip>
+
+A regular expression matching a single character may be followed by one
+of several repetition operators:
+
+<descrip>
+<tag/?/
+The preceding item is optional and matched at most once.
+<tag/*/
+The preceding item will be matched zero or more times.
+<tag/+/
+The preceding item will be matched one or more times.
+<tag/&lcub;n&rcub;/
+The preceding item is matched exactly <em/n/ times.
+<tag/&lcub;n,&rcub;/
+The preceding item is matched <em/n/ or more times.
+<tag/&lcub;,m&rcub;/
+The preceding item is matched at most <em/m/ times.
+<tag/&lcub;n,m&rcub;/
+The preceding item is matched at least <em/n/ times, but no more than
+<em/m/ times.
+</descrip>
+
+Two regular expressions may be concatenated; the resulting regular
+expression matches any string formed by concatenating two substrings
+that respectively match the concatenated subexpressions.
+
+Two regular expressions may be joined by the infix operator ``|'';
+the resulting regular expression matches any string matching either
+subexpression.
+
+Repetition takes precedence over concatenation, which in turn takes
+precedence over alternation.  A whole subexpression may be enclosed in
+parentheses to override these precedence rules.
+
+<bf/Note:/ If you compile Mutt with the GNU <em/rx/ package, the
+following operators may also be used in regular expressions:
+
+<descrip>
+<tag/&bsol;&bsol;y/
+Matches the empty string at either the beginning or the end of a word.
+<tag/&bsol;&bsol;B/
+Matches the empty string within a word.
+<tag/&bsol;&bsol;&lt;/
+Matches the empty string at the beginning of a word.
+<tag/&bsol;&bsol;&gt;/
+Matches the empty string at the end of a word.
+<tag/&bsol;&bsol;w/
+Matches any word-constituent character (letter, digit, or underscore).
+<tag/&bsol;&bsol;W/
+Matches any character that is not word-constituent.
+<tag/&bsol;&bsol;`/
+Matches the empty string at the beginning of a buffer (string).
+<tag/&bsol;&bsol;'/
+Matches the empty string at the end of a buffer.
+</descrip>
+
+Please note however that these operators are not defined by POSIX, so
+they may or may not be available in stock libraries on various systems.
+
+<sect1>Patterns<label id="patterns">
+<p>
+Many of Mutt's commands allow you to specify a pattern to match
+(limit, tag-pattern, delete-pattern, etc.).  There are several ways to select
+messages:
+
+<tscreen><verb>
+~A              all messages
+~b EXPR         messages which contain EXPR in the message body
+~B EXPR         messages which contain EXPR in the whole message
+~c USER         messages carbon-copied to USER
+~C EXPR         message is either to: or cc: EXPR
+~D              deleted messages
+~d [MIN]-[MAX]  messages with ``date-sent'' in a Date range
+~E              expired messages
+~e EXPR         message which contains EXPR in the ``Sender'' field
+~F              flagged messages
+~f USER         messages originating from USER
+~g              cryptographically signed messages
+~G              cryptographically encrypted messages
+~h EXPR         messages which contain EXPR in the message header
+~k             message contains PGP key material
+~i ID           message which match ID in the ``Message-ID'' field
+~L EXPR         message is either originated or received by EXPR
+~l              message is addressed to a known mailing list
+~m [MIN]-[MAX]  message in the range MIN to MAX *)
+~n [MIN]-[MAX]  messages with a score in the range MIN to MAX *)
+~N              new messages
+~O              old messages
+~p              message is addressed to you (consults alternates)
+~P              message is from you (consults alternates)
+~Q              messages which have been replied to
+~R              read messages
+~r [MIN]-[MAX]  messages with ``date-received'' in a Date range
+~S              superseded messages
+~s SUBJECT      messages having SUBJECT in the ``Subject'' field.
+~T              tagged messages
+~t USER         messages addressed to USER
+~U              unread messages
+~v             message is part of a collapsed thread.
+~V             cryptographically verified messages
+~x EXPR         messages which contain EXPR in the `References' field
+~y EXPR         messages which contain EXPR in the `X-Label' field
+~z [MIN]-[MAX]  messages with a size in the range MIN to MAX *)
+~=             duplicated messages (see $duplicate_threads)
+</verb></tscreen>
+
+Where EXPR, USER, ID, and SUBJECT are 
+<ref id="regexp" name="regular expressions">.  Special attention has to be
+made when using regular expressions inside of patterns.  Specifically,
+Mutt's parser for these patterns will strip one level of backslash (\),
+which is normally used for quoting.  If it is your intention to use a
+backslash in the regular expression, you will need to use two backslashes
+instead (\\).
+
+*) The forms <tt/&lt;&lsqb;MAX&rsqb;/, <tt/&gt;&lsqb;MIN&rsqb;/,
+<tt/&lsqb;MIN&rsqb;-/ and <tt/-&lsqb;MAX&rsqb;/
+are allowed, too.
+
+<sect2>Pattern Modifier
+<p>
+
+Note that patterns matching 'lists' of addresses (notably c,C,p,P and t)
+match if there is at least one match in the whole list. If you want to
+make sure that all elements of that list match, you need to prefix your
+pattern with ^.
+This example matches all mails which only has recipients from Germany.
+
+<tscreen><verb>
+^~C \.de$
+</verb></tscreen>
+
+<sect2>Complex Patterns
+<p>
+
+Logical AND is performed by specifying more than one criterion.  For
+example:
+
+<tscreen><verb>
+~t mutt ~f elkins
+</verb></tscreen>
+
+would select messages which contain the word ``mutt'' in the list of
+recipients <bf/and/ that have the word ``elkins'' in the ``From'' header
+field.
+
+Mutt also recognizes the following operators to create more complex search
+patterns:
+
+<itemize>
+<item>! -- logical NOT operator
+<item>| -- logical OR operator
+<item>() -- logical grouping operator
+</itemize>
+
+Here is an example illustrating a complex search pattern.  This pattern will
+select all messages which do not contain ``mutt'' in the ``To'' or ``Cc''
+field and which are from ``elkins''.
+
+<tscreen><verb>
+!(~t mutt|~c mutt) ~f elkins
+</verb></tscreen>
+
+Here is an example using white space in the regular expression (note
+the ' and &dquot; delimiters).  For this to match, the mail's subject must
+match the ``^Junk +From +Me$'' and it must be from either ``Jim +Somebody''
+or ``Ed +SomeoneElse'':
+
+<tscreen><verb>
+ '~s "^Junk +From +Me$" ~f ("Jim +Somebody"|"Ed +SomeoneElse")'
+</verb></tscreen>
+
+Note that if a regular expression contains parenthesis, or a veritical bar
+("|"), you <bf/must/ enclose the expression in double or single quotes since
+those characters are also used to separate different parts of Mutt's
+pattern language.  For example,
+
+<tscreen><verb>
+~f "me@(mutt\.org|cs\.hmc\.edu)"
+</verb></tscreen>
+
+Without the quotes, the parenthesis would truncate the regular expression
+to simply <em/me@/, which is probably not what you want.
+
+<sect2>Searching by Date
+<p>
+Mutt supports two types of dates, <em/absolute/ and <em/relative/.
+
+<bf/Absolute/.  Dates <bf/must/ be in DD/MM/YY format (month and year are
+optional, defaulting to the current month and year).  An example of a valid
+range of dates is:
+
+<tscreen><verb>
+Limit to messages matching: ~d 20/1/95-31/10
+</verb></tscreen>
+
+If you omit the minimum (first) date, and just specify ``-DD/MM/YY'', all
+messages <em/before/ the given date will be selected.  If you omit the maximum
+(second) date, and specify ``DD/MM/YY-'', all messages <em/after/ the given
+date will be selected.  If you specify a single date with no dash (``-''),
+only messages sent on the given date will be selected. 
+
+<bf/Error Margins/.  You can add error margins to absolute dates.
+An error margin is a sign (+ or -), followed by a digit, followed by
+one of the following units:
+<verb>
+y      years
+m      months
+w      weeks
+d      days
+</verb>
+As a special case, you can replace the sign by a ``*'' character,
+which is equivalent to giving identical plus and minus error margins.
+
+Example: To select any messages two weeks around January 15, 2001,
+you'd use the following pattern: 
+<tscreen><verb> 
+Limit to messages matching: ~d 15/1/2001*2w
+</verb></tscreen>
+
+
+<bf/Relative/.  This type of date is relative to the current date, and may
+be specified as:
+<itemize>
+<item>&gt;<em/offset/ (messages older than <em/offset/ units)
+<item>&lt;<em/offset/ (messages newer than <em/offset/ units)
+<item>=<em/offset/ (messages exactly <em/offset/ units old)
+</itemize>
+
+<em/offset/ is specified as a positive number with one of the following
+units:
+<verb>
+y       years
+m       months
+w       weeks
+d       days
+</verb>
+
+Example: to select messages less than 1 month old, you would use
+<tscreen><verb>
+Limit to messages matching: ~d <1m
+</verb></tscreen>
+
+
+
+<bf/Note:/ all dates used when searching are relative to the
+<bf/local/ time zone, so unless you change the setting of your <ref
+id="index_format" name="&dollar;index&lowbar;format"> to include a
+<tt/&percnt;&lsqb;...&rsqb;/ format, these are <bf/not/ the dates shown
+in the main index.
+
+<sect1>Using Tags
+<p>
+
+Sometimes it is desirable to perform an operation on a group of
+messages all at once rather than one at a time.  An example might be
+to save messages to a mailing list to a separate folder, or to
+delete all messages with a given subject.  To tag all messages
+matching a pattern, use the tag-pattern function, which is bound to
+``shift-T'' by default.  Or you can select individual messages by
+hand using the ``tag-message'' function, which is bound to ``t'' by
+default.  See <ref id="patterns" name="patterns"> for Mutt's pattern
+matching syntax.
+
+Once you have tagged the desired messages, you can use the
+``tag-prefix'' operator, which is the ``;'' (semicolon) key by default.
+When the ``tag-prefix'' operator is used, the <bf/next/ operation will
+be applied to all tagged messages if that operation can be used in that
+manner.  If the <ref id="auto_tag" name="&dollar;auto&lowbar;tag">
+variable is set, the next operation applies to the tagged messages
+automatically, without requiring the ``tag-prefix''.
+
+<sect1>Using Hooks<label id="hooks">
+<p>
+A <em/hook/ is a concept borrowed from the EMACS editor which allows you to
+execute arbitrary commands before performing some operation.  For example,
+you may wish to tailor your configuration based upon which mailbox you are
+reading, or to whom you are sending mail.  In the Mutt world, a <em/hook/
+consists of a <ref id="regexp" name="regular expression"> or
+<ref id="patterns" name="pattern"> along with a
+configuration option/command.  See
+<itemize>
+<item><ref id="folder-hook" name="folder-hook">
+<item><ref id="send-hook" name="send-hook">
+<item><ref id="message-hook" name="message-hook">
+<item><ref id="save-hook" name="save-hook">
+<item><ref id="mbox-hook" name="mbox-hook">
+<item><ref id="fcc-hook" name="fcc-hook">
+<item><ref id="fcc-save-hook" name="fcc-save-hook">
+</itemize>
+for specific details on each type of <em/hook/ available.
+
+<bf/Note:/ if a hook changes configuration settings, these changes remain
+effective until the end of the current mutt session. As this is generally
+not desired, a default hook needs to be added before all other hooks to
+restore configuration defaults. Here is an example with send-hook and the
+my_hdr directive:
+
+<tscreen><verb>
+send-hook . 'unmy_hdr From:'
+send-hook ~Cb@b.b my_hdr from: c@c.c
+</verb></tscreen>
+
+<sect2>Message Matching in Hooks<label id="pattern_hook">
+<p>
+Hooks that act upon messages (<tt/send-hook, save-hook, fcc-hook,
+message-hook/) are evaluated in a slightly different manner.  For the other
+types of hooks, a <ref id="regexp" name="regular expression"> is
+sufficient.  But in dealing with messages a finer grain of control is
+needed for matching since for different purposes you want to match
+different criteria.
+
+Mutt allows the use of the <ref id="patterns" name="search pattern">
+language for matching messages in hook commands.  This works in
+exactly the same way as it would when <em/limiting/ or
+<em/searching/ the mailbox, except that you are restricted to those
+operators which match information mutt extracts from the header of
+the message (i.e.  from, to, cc, date, subject, etc.).
+
+For example, if you wanted to set your return address based upon sending
+mail to a specific address, you could do something like:
+<tscreen><verb>
+send-hook '~t ^me@cs\.hmc\.edu$' 'my_hdr From: Mutt User <user@host>'
+</verb></tscreen>
+which would execute the given command when sending mail to
+<em/me@cs.hmc.edu/.
+
+However, it is not required that you write the pattern to match using the
+full searching language.  You can still specify a simple <em/regular
+expression/ like the other hooks, in which case Mutt will translate your
+pattern into the full language, using the translation specified by the 
+<ref id="default_hook" name="&dollar;default&lowbar;hook"> variable.  The
+pattern is translated at the time the hook is declared, so the value of 
+<ref id="default_hook" name="&dollar;default&lowbar;hook"> that is in effect
+at that time will be used.
+
+<sect1>External Address Queries<label id="query">
+<p>
+Mutt supports connecting to external directory databases such as LDAP,
+ph/qi, bbdb, or NIS through a wrapper script which connects to mutt
+using a simple interface.  Using the <ref id="query_command"
+name="&dollar;query&lowbar;command"> variable, you specify the wrapper
+command to use.  For example:
+
+<tscreen><verb>
+set query_command = "mutt_ldap_query.pl '%s'"
+</verb></tscreen>
+
+The wrapper script should accept the query on the command-line.  It
+should return a one line message, then each matching response on a
+single line, each line containing a tab separated address then name then
+some other optional information.  On error, or if there are no matching
+addresses, return a non-zero exit code and a one line error message.
+
+An example multiple response output:
+<tscreen><verb>
+Searching database ... 20 entries ... 3 matching:
+me@cs.hmc.edu           Michael Elkins  mutt dude
+blong@fiction.net       Brandon Long    mutt and more
+roessler@guug.de        Thomas Roessler mutt pgp
+</verb></tscreen>
+
+There are two mechanisms for accessing the query function of mutt.  One
+is to do a query from the index menu using the query function (default: Q).
+This will prompt for a query, then bring up the query menu which will
+list the matching responses.  From the query menu, you can select
+addresses to create aliases, or to mail.  You can tag multiple messages
+to mail, start a new query, or have a new query appended to the current
+responses.
+
+The other mechanism for accessing the query function is for address
+completion, similar to the alias completion.  In any prompt for address
+entry, you can use the complete-query function (default: ^T) to run a
+query based on the current address you have typed.  Like aliases, mutt
+will look for what you have typed back to the last space or comma.  If
+there is a single response for that query, mutt will expand the address
+in place.  If there are multiple responses, mutt will activate the query
+menu.  At the query menu, you can select one or more addresses to be
+added to the prompt.
+
+<sect1>Mailbox Formats
+<p>
+Mutt supports reading and writing of four different mailbox formats:
+mbox, MMDF, MH and Maildir.  The mailbox type is autodetected, so there
+is no need to use a flag for different mailbox types.  When creating new
+mailboxes, Mutt uses the default specified with the <ref id="mbox_type"
+name="&dollar;mbox&lowbar;type"> variable.
+
+<bf/mbox/.  This is the most widely used mailbox format for UNIX.  All
+messages are stored in a single file.  Each message has a line of the form:
+
+<tscreen><verb>
+From me@cs.hmc.edu Fri, 11 Apr 1997 11:44:56 PST
+</verb></tscreen>
+
+to denote the start of a new message (this is often referred to as the
+``From&lowbar;'' line).
+
+<bf/MMDF/.  This is a variant of the <em/mbox/ format.  Each message is
+surrounded by lines containing ``^A^A^A^A'' (four control-A's).
+
+<bf/MH/. A radical departure from <em/mbox/ and <em/MMDF/, a mailbox
+consists of a directory and each message is stored in a separate file.
+The filename indicates the message number (however, this is may not
+correspond to the message number Mutt displays). Deleted messages are
+renamed with a comma (,) prepended to the filename. <bf/Note:/ Mutt
+detects this type of mailbox by looking for either <tt/.mh&lowbar;sequences/
+or <tt/.xmhcache/ (needed to distinguish normal directories from MH
+mailboxes).
+
+<bf/Maildir/.  The newest of the mailbox formats, used by the Qmail MTA (a
+replacement for sendmail).  Similar to <em/MH/, except that it adds three
+subdirectories of the mailbox: <em/tmp/, <em/new/ and <em/cur/.  Filenames
+for the messages are chosen in such a way they are unique, even when two
+programs are writing the mailbox over NFS, which means that no file locking
+is needed.
+
+<sect1>Mailbox Shortcuts<label id="shortcuts">
+<p>
+There are a number of built in shortcuts which refer to specific mailboxes.
+These shortcuts can be used anywhere you are prompted for a file or mailbox
+path.
+
+<itemize>
+<item>! -- refers to your <ref id="spoolfile" name="&dollar;spoolfile"> (incoming) mailbox
+<item>&gt; -- refers to your <ref id="mbox" name="&dollar;mbox"> file
+<item>&lt; -- refers to your <ref id="record" name="&dollar;record"> file
+<item>- or !! -- refers to the file you've last visited
+<item>&tilde; -- refers to your home directory
+<item>= or + -- refers to your <ref id="folder" name="&dollar;folder"> directory
+<item>@<em/alias/ -- refers to the <ref id="save-hook" 
+name="default save folder"> as determined by the address of the alias
+</itemize>
+
+<sect1>Handling Mailing Lists<label id="using_lists">
+<p>
+
+Mutt has a few configuration options that make dealing with large
+amounts of mail easier.  The first thing you must do is to let Mutt
+know what addresses you consider to be mailing lists (technically
+this does not have to be a mailing list, but that is what it is most
+often used for), and what lists you are subscribed to.  This is
+accomplished through the use of the <ref id="lists"
+name="lists and subscribe"> commands in your muttrc.
+
+Now that Mutt knows what your mailing lists are, it can do several
+things, the first of which is the ability to show the name of a list
+through which you received a message (i.e., of a subscribed list) in
+the <em/index/ menu display.  This is useful to distinguish between
+personal and list mail in the same mailbox.  In the <ref id="index_format"
+name="&dollar;index&lowbar;format"> variable, the escape ``&percnt;L''
+will return the string ``To &lt;list&gt;'' when ``list'' appears in the
+``To'' field, and ``Cc &lt;list&gt;'' when it appears in the ``Cc''
+field (otherwise it returns the name of the author).
+
+Often times the ``To'' and ``Cc'' fields in mailing list messages
+tend to get quite large. Most people do not bother to remove the
+author of the message they are reply to from the list, resulting in
+two or more copies being sent to that person.  The ``list-reply''
+function, which by default is bound to ``L'' in the <em/index/ menu
+and <em/pager/, helps reduce the clutter by only replying to the
+known mailing list addresses instead of all recipients (except as
+specified by <tt/Mail-Followup-To/, see below).
+
+Mutt also supports the <tt/Mail-Followup-To/ header.  When you send
+a message to a list of recipients which includes one or several
+subscribed mailing lists, and if the <ref id="followup_to"
+name="&dollar;followup&lowbar;to"> option is set, mutt will generate
+a Mail-Followup-To header which contains all the recipients to whom
+you send this message, but not your address. This indicates that
+group-replies or list-replies (also known as ``followups'') to this
+message should only be sent to the original recipients of the
+message, and not separately to you - you'll receive your copy through
+one of the mailing lists you are subscribed to.
+
+Conversely, when group-replying or list-replying to a message which
+has a <tt/Mail-Followup-To/ header, mutt will respect this header if
+the <ref id="honor_followup_to"
+name="&dollar;honor&lowbar;followup&lowbar;to"> configuration
+variable is set.  Using list-reply will in this case also make sure
+that the reply goes to the mailing list, even if it's not specified
+in the list of recipients in the <tt/Mail-Followup-To/.
+
+Note that, when header editing is enabled, you can create a
+<tt/Mail-Followup-To/ header manually.  Mutt will only auto-generate
+this header if it doesn't exist when you send the message.
+
+
+The other method some mailing list admins use is to generate a
+``Reply-To'' field which points back to the mailing list address rather
+than the author of the message.  This can create problems when trying
+to reply directly to the author in private, since most mail clients
+will automatically reply to the address given in the ``Reply-To''
+field.  Mutt uses the <ref id="reply_to" name="&dollar;reply&lowbar;to">
+variable to help decide which address to use.  If set, you will be
+prompted as to whether or not you would like to use the address given in
+the ``Reply-To'' field, or reply directly to the address given in the
+``From'' field.  When unset, the ``Reply-To'' field will be used when
+present.
+
+The ``X-Label:'' header field can be used to further identify mailing
+lists or list subject matter (or just to annotate messages
+individually).  The <ref id="index_format"
+name="&dollar;index&lowbar;format"> variable's ``&percnt;y'' and
+``&percnt;Y'' escapes can be used to expand ``X-Label:'' fields in the
+index, and Mutt's pattern-matcher can match regular expressions to
+``X-Label:'' fields with the ``~y'' selector.  ``X-Label:'' is not a
+standard message header field, but it can easily be inserted by procmail
+and other mail filtering agents.
+
+Lastly, Mutt has the ability to <ref id="sort" name="sort"> the mailbox into
+<ref id="threads" name="threads">.  A thread is a group of messages which all relate to the same
+subject.  This is usually organized into a tree-like structure where a
+message and all of its replies are represented graphically.  If you've ever
+used a threaded news client, this is the same concept.  It makes dealing
+with large volume mailing lists easier because you can easily delete
+uninteresting threads and quickly find topics of value.
+
+<sect1>Delivery Status Notification (DSN) Support
+<p>
+RFC1894 defines a set of MIME content types for relaying information
+about the status of electronic mail messages.  These can be thought of as
+``return receipts.'' Berkeley sendmail 8.8.x currently has some command
+line options in which the mail client can make requests as to what type
+of status messages should be returned.
+
+To support this, there are two variables. <ref id="dsn_notify"
+name="&dollar;dsn&lowbar;notify"> is used to request receipts for
+different results (such as failed message, message delivered, etc.).
+<ref id="dsn_return" name="&dollar;dsn&lowbar;return"> requests how much
+of your message should be returned with the receipt (headers or full
+message).  Refer to the man page on sendmail for more details on DSN.
+
+<sect1>POP3 Support (OPTIONAL)
+<p>
+
+If Mutt was compiled with POP3 support (by running the <em/configure/
+script with the <em/--enable-pop/ flag), it has the ability to work
+with mailboxes located on a remote POP3 server and fetch mail for local
+browsing.
+
+You can access the remote POP3 mailbox by selecting the folder
+<tt>pop://popserver/</tt>.
+
+You can select an alternative port by specifying it with the server, ie:
+<tt>pop://popserver:port/</tt>.
+
+You can also specify different username for each folder, ie:
+<tt>pop://username@popserver[:port]/</tt>.
+
+Polling for new mail is more expensive over POP3 than locally. For this
+reason the frequency at which Mutt will check for mail remotely can be
+controlled by the
+<ref id="pop&lowbar;checkinterval" name="&dollar;pop&lowbar;checkinterval">
+variable, which defaults to every 60 seconds.
+
+If Mutt was compiled with SSL support (by running the <em/configure/
+script with the <em/--with-ssl/ flag), connections to POP3 servers
+can be encrypted. This naturally requires that the server supports
+SSL encrypted connections. To access a folder with POP3/SSL, you should
+use pops: prefix, ie:
+<tt>pops://[username@]popserver[:port]/</tt>.
+
+Another way to access your POP3 mail is the <em/fetch-mail/ function
+(default: G).  It allows to connect to <ref id="pop_host"
+name="pop&lowbar;host">, fetch all your new mail and place it in the
+local <ref id="spoolfile" name="spoolfile">.  After this
+point, Mutt runs exactly as if the mail had always been local.
+
+<bf/Note:/ If you only need to fetch all messages to local mailbox
+you should consider using a specialized program, such as <htmlurl
+url="http://www.ccil.org/~esr/fetchmail" name="fetchmail">
+
+<sect1>IMAP Support (OPTIONAL)
+<p>
+
+If Mutt was compiled with IMAP support (by running the <em/configure/
+script with the <em/--enable-imap/ flag), it has the ability to work
+with folders located on a remote IMAP server.
+
+You can access the remote inbox by selecting the folder
+<tt>imap://imapserver/INBOX</tt>, where <tt/imapserver/ is the name of the
+IMAP server and <tt/INBOX/ is the special name for your spool mailbox on
+the IMAP server. If you want to access another mail folder at the IMAP
+server, you should use <tt>imap://imapserver/path/to/folder</tt> where
+<tt>path/to/folder</tt> is the path of the folder you want to access.
+
+You can select an alternative port by specifying it with the server, ie:
+<tt>imap://imapserver:port/INBOX</tt>.
+
+You can also specify different username for each folder, ie:
+<tt>imap://username@imapserver[:port]/INBOX</tt>.
+
+If Mutt was compiled with SSL support (by running the <em/configure/
+script with the <em/--with-ssl/ flag), connections to IMAP servers
+can be encrypted. This naturally requires that the server supports
+SSL encrypted connections. To access a folder with IMAP/SSL, you should
+use <tt>imaps://[username@]imapserver[:port]/path/to/folder</tt> as your 
+folder path.
+
+Pine-compatible notation is also supported, ie
+<tt>{[username@]imapserver[:port][/ssl]}path/to/folder</tt>
+
+Note that not all servers use / as the hierarchy separator.  Mutt should
+correctly notice which separator is being used by the server and convert
+paths accordingly.
+
+When browsing folders on an IMAP server, you can toggle whether to look
+at only the folders you are subscribed to, or all folders with the
+<em/toggle-subscribed/ command.  See also the 
+<ref id="imap&lowbar;list&lowbar;subscribed"
+name="&dollar;imap&lowbar;list&lowbar;subscribed"> variable.
+
+Polling for new mail on an IMAP server can cause noticeable delays. So, you'll
+want to carefully tune the
+<ref id="mail&lowbar;check" name="&dollar;mail&lowbar;check">
+and
+<ref id="timeout" name="&dollar;timeout">
+variables. Personally I use
+<tscreen><verb>
+set mail_check=90
+set timeout=15
+</verb></tscreen>
+with relatively good results over my slow modem line.
+
+Note that if you are using mbox as the mail store on UW servers prior to
+v12.250, the server has been reported to disconnect a client if another client
+selects the same folder.
+
+<sect2>The Folder Browser
+<p>
+
+As of version 1.2, mutt supports browsing mailboxes on an IMAP
+server. This is mostly the same as the local file browser, with the
+following differences:
+<itemize>
+<item>In lieu of file permissions, mutt displays the string "IMAP",
+  possibly followed by the symbol "+", indicating
+  that the entry contains both messages and subfolders. On
+  Cyrus-like servers folders will often contain both messages and
+  subfolders. 
+<item>For the case where an entry can contain both messages and
+  subfolders, the selection key (bound to <tt>enter</tt> by default)
+  will choose to descend into the subfolder view. If you wish to view
+  the messages in that folder, you must use <tt>view-file</tt> instead
+  (bound to <tt>space</tt> by default).
+<item>You can delete mailboxes with the <tt>delete-mailbox</tt>
+  command (bound to <tt>d</tt> by default. You may also
+  <tt>subscribe</tt> and <tt>unsubscribe</tt> to mailboxes (normally
+  these are bound to <tt>s</tt> and <tt>u</tt>, respectively).
+</itemize>
+
+<sect2>Authentication
+<p>
+
+Mutt supports four authentication methods with IMAP servers: SASL,
+GSSAPI, CRAM-MD5, and LOGIN (there is a patch by Grant Edwards to add
+NTLM authentication for you poor exchange users out there, but it has
+yet to be integrated into the main tree). There is also support for
+the pseudo-protocol ANONYMOUS, which allows you to log in to a public
+IMAP server without having an account. To use ANONYMOUS, simply make
+your username blank or "anonymous".
+<p>
+SASL is a special super-authenticator, which selects among several protocols
+(including GSSAPI, CRAM-MD5, ANONYMOUS, and DIGEST-MD5) the most secure
+method available on your host and the server. Using some of these methods
+(including DIGEST-MD5 and possibly GSSAPI), your entire session will be
+encrypted and invisible to those teeming network snoops. It is the best
+option if you have it. To use it, you must have the Cyrus SASL library
+installed on your system and compile mutt with the <em/--with-sasl/ flag.
+<p>
+Mutt will try whichever methods are compiled in and available on the server,
+in the following order: SASL, ANONYMOUS, GSSAPI, CRAM-MD5, LOGIN.
+
+There are a few variables which control authentication: 
+<itemize>
+<item><ref id="imap&lowbar;user" name="&dollar;imap&lowbar;user"> - controls
+  the username under which you request authentication on the IMAP server,
+  for all authenticators. This is overridden by an explicit username in
+  the mailbox path (ie by using a mailbox name of the form
+  <tt/{user@host}/).
+<item><ref id="imap&lowbar;pass" name="&dollar;imap&lowbar;pass"> - a
+  password which you may preset, used by all authentication methods where
+  a password is needed.
+<item><ref id="imap&lowbar;authenticators"
+  name="&dollar;imap&lowbar;authenticators"> - a colon-delimited list of IMAP
+  authentication methods to try, in the order you wish to try them. If
+  specified, this overrides mutt's default (attempt everything, in the order
+  listed above).
+</itemize>
+
+<sect1>Managing multiple IMAP/POP accounts (OPTIONAL)<label id="account-hook">
+<p>
+
+If you happen to have accounts on multiple IMAP and/or POP servers,
+you may find managing all the authentication settings inconvenient and
+error-prone.  The account-hook command may help. This hook works like
+folder-hook but is invoked whenever you access a remote mailbox
+(including inside the folder browser), not just when you open the
+mailbox.
+<p>
+Some examples:
+
+<tscreen><verb>
+account-hook . 'unset imap_user; unset imap_pass; unset tunnel'
+account-hook imap://host1/ 'set imap_user=me1 imap_pass=foo'
+account-hook imap://host2/ 'set tunnel="ssh host2 /usr/libexec/imapd"'
+</verb></tscreen>
+
+<sect1>Start a WWW Browser on URLs (EXTERNAL)<label id="urlview">
+<p>
+If a message contains URLs (<em/unified ressource locator/ = address in the
+WWW space like <em>http://www.mutt.org/</em>), it is efficient to get
+a menu with all the URLs and start a WWW browser on one of them.  This
+functionality is provided by the external urlview program which can be
+retrieved at <htmlurl url="ftp://ftp.mutt.org/mutt/contrib/"
+name="ftp://ftp.mutt.org/mutt/contrib/"> and the configuration commands:
+<tscreen><verb>
+macro index \cb |urlview\n
+macro pager \cb |urlview\n
+</verb></tscreen>
+
+<sect>Mutt's MIME Support
+<p>
+Quite a bit of effort has been made to make Mutt the premier text-mode
+MIME MUA.  Every effort has been made to provide the functionality that
+the discerning MIME user requires, and the conformance to the standards
+wherever possible.  When configuring Mutt for MIME, there are two extra
+types of configuration files which Mutt uses.  One is the
+<tt/mime.types/ file, which contains the mapping of file extensions to 
+IANA MIME types.  The other is the <tt/mailcap/ file, which specifies
+the external commands to use for handling specific MIME types.
+
+<sect1>Using MIME in Mutt
+<p>
+There are three areas/menus in Mutt which deal with MIME, they are the
+pager (while viewing a message), the attachment menu and the compose
+menu.
+
+<sect2>Viewing MIME messages in the pager
+<p>
+When you select a message from the index and view it in the pager, Mutt
+decodes the message to a text representation.  Mutt internally supports
+a number of MIME types, including <tt>text/plain, text/enriched,
+message/rfc822, and message/news</tt>.  In addition, the export
+controlled version of Mutt recognizes a variety of PGP MIME types,
+including PGP/MIME and application/pgp.
+
+Mutt will denote attachments with a couple lines describing them.
+These lines are of the form:
+<tscreen><verb>
+[-- Attachment #1: Description --]
+[-- Type: text/plain, Encoding: 7bit, Size: 10000 --]
+</verb></tscreen>
+Where the <tt/Description/ is the description or filename given for the
+attachment, and the <tt/Encoding/ is one of
+<tt>7bit/8bit/quoted-printable/base64/binary</tt>.
+
+If Mutt cannot deal with a MIME type, it will display a message like:
+<tscreen><verb>
+[-- image/gif is unsupported (use 'v' to view this part) --]
+</verb></tscreen>
+
+<sect2>The Attachment Menu<label id="attach_menu">
+<p>
+The default binding for <tt/view-attachments/ is `v', which displays the
+attachment menu for a message.  The attachment menu displays a list of
+the attachments in a message.  From the attachment menu, you can save,
+print, pipe, delete, and view attachments.  You can apply these
+operations to a group of attachments at once, by tagging the attachments
+and by using the ``tag-prefix'' operator.  You can also reply to the
+current message from this menu, and only the current attachment (or the
+attachments tagged) will be quoted in your reply.  You can view
+attachments as text, or view them using the mailcap viewer definition.
+
+Finally, you can apply the usual message-related functions (like 
+<ref id="resend-message" name="resend-message">, and the reply
+and forward functions) to attachments of type <tt>message/rfc822</tt>.
+
+See the help on the attachment menu for more information.
+
+<sect2>The Compose Menu<label id="compose_menu">
+<p>
+The compose menu is the menu you see before you send a message.  It
+allows you to edit the recipient list, the subject, and other aspects
+of your message.  It also contains a list of the attachments of your
+message, including the main body.  From this menu, you can print, copy,
+filter, pipe, edit, compose, review, and rename an attachment or a
+list of tagged attachments.  You can also modifying the attachment
+information, notably the type, encoding and description.
+
+Attachments appear as follows:
+<verb>
+-   1 [text/plain, 7bit, 1K]             /tmp/mutt-euler-8082-0 <no description>
+    2 [applica/x-gunzip, base64, 422K]   ~/src/mutt-0.85.tar.gz <no description>
+</verb>
+
+The '-' denotes that Mutt will delete the file after sending (or
+postponing, or cancelling) the message.  It can be toggled with the
+<tt/toggle-unlink/ command (default: u).  The next field is the MIME
+content-type, and can be changed with the <tt/edit-type/ command
+(default: ^T).  The next field is the encoding for the attachment,
+which allows a binary message to be encoded for transmission on 7bit
+links.  It can be changed with the <tt/edit-encoding/ command
+(default: ^E).  The next field is the size of the attachment,
+rounded to kilobytes or megabytes.  The next field is the filename,
+which can be changed with the <tt/rename-file/ command (default: R).
+The final field is the description of the attachment, and can be
+changed with the <tt/edit-description/ command (default: d).
+
+<sect1>MIME Type configuration with <tt/mime.types/
+<p>
+When you add an attachment to your mail message, Mutt searches your
+personal mime.types file at <tt>&dollar;{HOME}/.mime.types</tt>, and then
+the system mime.types file at <tt>/usr/local/share/mutt/mime.types</tt> or
+<tt>/etc/mime.types</tt>
+
+The mime.types file consist of lines containing a MIME type and a space
+separated list of extensions.  For example:
+<tscreen><verb>
+application/postscript          ps eps
+application/pgp                 pgp
+audio/x-aiff                    aif aifc aiff
+</verb></tscreen>
+A sample <tt/mime.types/ file comes with the Mutt distribution, and
+should contain most of the MIME types you are likely to use.  
+
+If Mutt can not determine the mime type by the extension of the file you
+attach, it will look at the file.  If the file is free of binary
+information, Mutt will assume that the file is plain text, and mark it
+as <tt>text/plain</tt>.  If the file contains binary information, then Mutt will
+mark it as <tt>application/octet-stream</tt>.  You can change the MIME
+type that Mutt assigns to an attachment by using the <tt/edit-type/
+command from the compose menu (default: ^T). The MIME type is actually a
+major mime type followed by the sub-type, separated by a '/'. 6 major
+types: application, text, image, video, audio, and model have been approved
+after various internet discussions. Mutt recognises all of these if the 
+appropriate entry is found in the mime.types file. It also recognises other
+major mime types, such as the chemical type that is widely used in the 
+molecular modelling community to pass molecular data in various forms to 
+various molecular viewers. Non-recognised mime types should only be used 
+if the recipient of the message is likely to be expecting such attachments.
+
+<sect1>MIME Viewer configuration with <tt/mailcap/
+<p>
+Mutt supports RFC 1524 MIME Configuration, in particular the Unix
+specific format specified in Appendix A of RFC 1524.  This file format
+is commonly referred to as the mailcap format.  Many MIME compliant
+programs utilize the mailcap format, allowing you to specify handling
+for all MIME types in one place for all programs.  Programs known to
+use this format include Netscape, XMosaic, lynx and metamail.
+
+In order to handle various MIME types that Mutt can not handle
+internally, Mutt parses a series of external configuration files to
+find an external handler.  The default search string for these files
+is a colon delimited list set to
+<tscreen><verb>
+${HOME}/.mailcap:/usr/local/share/mutt/mailcap:/etc/mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap
+</verb></tscreen>
+where <tt/&dollar;HOME/ is your home directory.
+
+In particular, the metamail distribution will install a mailcap file,
+usually as <tt>/usr/local/etc/mailcap</tt>, which contains some baseline
+entries.
+
+<sect2>The Basics of the mailcap file
+<p>
+A mailcap file consists of a series of lines which are comments, blank,
+or definitions.
+
+A comment line consists of a &num; character followed by anything you want.
+
+A blank line is blank.
+
+A definition line consists of a content type, a view command, and any
+number of optional fields.  Each field of a definition line is divided
+by a semicolon ';' character.
+
+The content type is specified in the MIME standard type/subtype method.
+For example,
+<tt>text/plain, text/html, image/gif, </tt>
+etc.  In addition, the mailcap format includes two formats for
+wildcards, one using the special '*' subtype, the other is the implicit
+wild, where you only include the major type.  For example, <tt>image/*</tt>, or
+<tt>video,</tt> will match all image types and video types,
+respectively.
+
+The view command is a Unix command for viewing the type specified. There
+are two different types of commands supported. The default is to send
+the body of the MIME message to the command on stdin. You can change
+this behaviour by using &percnt;s as a parameter to your view command.
+This will cause Mutt to save the body of the MIME message to a temporary
+file, and then call the view command with the &percnt;s replaced by
+the name of the temporary file. In both cases, Mutt will turn over the
+terminal to the view program until the program quits, at which time Mutt
+will remove the temporary file if it exists.
+
+So, in the simplest form, you can send a text/plain message to the
+external pager more on stdin:
+<tscreen><verb>
+text/plain; more
+</verb></tscreen>
+Or, you could send the message as a file:
+<tscreen><verb>
+text/plain; more %s
+</verb></tscreen>
+Perhaps you would like to use lynx to interactively view a text/html 
+message:
+<tscreen><verb>
+text/html; lynx %s
+</verb></tscreen>
+In this case, lynx does not support viewing a file from stdin, so you
+must use the &percnt;s syntax.
+<bf/Note:/ <em>Some older versions of lynx contain a bug where they
+will check the mailcap file for a viewer for text/html.  They will find
+the line which calls lynx, and run it.  This causes lynx to continuously
+spawn itself to view the object.</em>
+
+On the other hand, maybe you don't want to use lynx interactively, you
+just want to have it convert the text/html to text/plain, then you can
+use:
+<tscreen><verb>
+text/html; lynx -dump %s | more
+</verb></tscreen>
+
+Perhaps you wish to use lynx to view text/html files, and a pager on
+all other text formats, then you would use the following:
+<tscreen><verb>
+text/html; lynx %s
+text/*; more
+</verb></tscreen>
+This is the simplest form of a mailcap file.
+
+<sect2>Secure use of mailcap
+<p>
+The interpretion of shell meta-characters embedded in MIME parameters
+can lead to security problems in general.  Mutt tries to quote parameters
+in expansion of %s syntaxes properly, and avoids risky characters by
+substituting them, see the <ref id="mailcap_sanitize"
+name="mailcap&lowbar;sanitize"> variable.
+
+Although mutt's procedures to invoke programs with mailcap seem to be
+safe, there are other applications parsing mailcap, maybe taking less care
+of it.  Therefore you should pay attention to the following rules:
+
+<em/Keep the %-expandos away from shell quoting./
+Don't quote them with single or double quotes.  Mutt does this for
+you, the right way, as should any other program which interprets
+mailcap.  Don't put them into backtick expansions.  Be highly careful
+with eval statements, and avoid them if possible at all.  Trying to fix
+broken behaviour with quotes introduces new leaks - there is no
+alternative to correct quoting in the first place.
+
+If you have to use the %-expandos' values in context where you need
+quoting or backtick expansions, put that value into a shell variable
+and reference the shell variable where necessary, as in the following
+example (using <tt/&dollar;charset/ inside the backtick expansion is safe,
+since it is not itself subject to any further expansion):
+
+<tscreen><verb>
+text/test-mailcap-bug; cat %s; copiousoutput; test=charset=%{charset} \
+        && test "`echo $charset | tr '[A-Z]' '[a-z]'`" != iso-8859-1
+</verb></tscreen>
+
+<sect2>Advanced mailcap Usage
+<p>
+
+<sect3>Optional Fields
+<p>
+In addition to the required content-type and view command fields, you
+can add semi-colon ';' separated fields to set flags and other options.
+Mutt recognizes the following optional fields:
+<descrip>
+<tag/copiousoutput/
+This flag tells Mutt that the command passes possibly large amounts of
+text on stdout.  This causes Mutt to invoke a pager (either the internal
+pager or the external pager defined by the pager variable) on the output
+of the view command.  Without this flag, Mutt assumes that the command
+is interactive.  One could use this to replace the pipe to <tt>more</tt>
+in the <tt>lynx -dump</tt> example in the Basic section:
+<tscreen><verb>
+text/html; lynx -dump %s ; copiousoutput
+</verb></tscreen>
+This will cause lynx to format the text/html output as text/plain
+and Mutt will use your standard pager to display the results.
+<tag/needsterminal/
+Mutt uses this flag when viewing attachments with <ref id="auto_view"
+name="autoview">, in order to decide whether it should honor the setting
+of the <ref id="wait_key" name="&dollar;wait&lowbar;key"> variable or
+not.  When an attachment is viewed using an interactive program, and the
+corresponding mailcap entry has a <em/needsterminal/ flag, Mutt will use
+<ref id="wait_key" name="&dollar;wait&lowbar;key"> and the exit status
+of the program to decide if it will ask you to press a key after the
+external program has exited.  In all other situations it will not prompt
+you for a key.
+<tag>compose=&lt;command&gt;</tag>
+This flag specifies the command to use to create a new attachment of a
+specific MIME type.  Mutt supports this from the compose menu.
+<tag>composetyped=&lt;command&gt;</tag>
+This flag specifies the command to use to create a new attachment of a
+specific MIME type.  This command differs from the compose command in
+that mutt will expect standard MIME headers on the data.  This can be
+used to specify parameters, filename, description, etc. for a new
+attachment.   Mutt supports this from the compose menu.
+<tag>print=&lt;command&gt;</tag>
+This flag specifies the command to use to print a specific MIME type.
+Mutt supports this from the attachment and compose menus.
+<tag>edit=&lt;command&gt;</tag>
+This flag specifies the command to use to edit a specific MIME type.  
+Mutt supports this from the compose menu, and also uses it to compose
+new attachments.  Mutt will default to the defined editor for text
+attachments.
+<tag>nametemplate=&lt;template&gt;</tag>
+This field specifies the format for the file denoted by &percnt;s in the
+command fields.  Certain programs will require a certain file extension,
+for instance, to correctly view a file.  For instance, lynx will only
+interpret a file as <tt>text/html</tt> if the file ends in <tt/.html/.
+So, you would specify lynx as a <tt>text/html</tt> viewer with a line in
+the mailcap file like:
+<tscreen><verb>
+text/html; lynx %s; nametemplate=%s.html
+</verb></tscreen>
+<tag>test=&lt;command&gt;</tag>
+This field specifies a command to run to test whether this mailcap
+entry should be used.  The command is defined with the command expansion
+rules defined in the next section.  If the command returns 0, then the
+test passed, and Mutt uses this entry.  If the command returns non-zero,
+then the test failed, and Mutt continues searching for the right entry.
+<bf/Note:/ <em>the content-type must match before Mutt performs the test.</em>
+For example:
+<tscreen><verb>
+text/html; netscape -remote 'openURL(%s)' ; test=RunningX
+text/html; lynx %s
+</verb></tscreen>
+In this example, Mutt will run the program RunningX which will return 0
+if the X Window manager is running, and non-zero if it isn't.  If
+RunningX returns 0, then Mutt will call netscape to display the
+text/html object.  If RunningX doesn't return 0, then Mutt will go on
+to the next entry and use lynx to display the text/html object.
+</descrip>
+
+<sect3>Search Order
+<p>
+When searching for an entry in the mailcap file, Mutt will search for
+the most useful entry for its purpose.  For instance, if you are
+attempting to print an <tt>image/gif</tt>, and you have the following
+entries in your mailcap file, Mutt will search for an entry with the
+print command:
+<tscreen><verb>
+image/*;        xv %s
+image/gif;      ; print= anytopnm %s | pnmtops | lpr; \
+                nametemplate=%s.gif
+</verb></tscreen>
+Mutt will skip the <tt>image/*</tt> entry and use the <tt>image/gif</tt>
+entry with the print command.
+
+In addition, you can use this with <ref id="auto_view" name="Autoview"> 
+to denote two commands for viewing an attachment, one to be viewed
+automatically, the other to be viewed interactively from the attachment
+menu.  In addition, you can then use the test feature to determine which
+viewer to use interactively depending on your environment.
+<tscreen><verb>
+text/html;      netscape -remote 'openURL(%s)' ; test=RunningX
+text/html;      lynx %s; nametemplate=%s.html
+text/html;      lynx -dump %s; nametemplate=%s.html; copiousoutput
+</verb></tscreen>
+For <ref id="auto_view" name="Autoview">, Mutt will choose the third
+entry because of the copiousoutput tag.  For interactive viewing, Mutt
+will run the program RunningX to determine if it should use the first
+entry.  If the program returns non-zero, Mutt will use the second entry
+for interactive viewing.
+
+<sect3>Command Expansion
+<p>
+The various commands defined in the mailcap files are passed to the
+<tt>/bin/sh</tt> shell using the system() function.  Before the
+command is passed to <tt>/bin/sh -c</tt>, it is parsed to expand
+various special parameters with information from Mutt.  The keywords
+Mutt expands are:
+<descrip>
+<tag/&percnt;s/
+As seen in the basic mailcap section, this variable is expanded
+to a filename specified by the calling program.  This file contains
+the body of the message to view/print/edit or where the composing
+program should place the results of composition.  In addition, the
+use of this keyword causes Mutt to not pass the body of the message
+to the view/print/edit program on stdin.
+<tag/&percnt;t/
+Mutt will expand &percnt;t to the text representation of the content
+type of the message in the same form as the first parameter of the
+mailcap definition line, ie <tt>text/html</tt> or
+<tt>image/gif</tt>.
+<tag>&percnt;{&lt;parameter&gt;}</tag>
+Mutt will expand this to the value of the specified parameter
+from the Content-Type: line of the mail message.  For instance, if
+Your mail message contains:
+<tscreen><verb>
+Content-Type: text/plain; charset=iso-8859-1
+</verb></tscreen>
+then Mutt will expand &percnt;{charset} to iso-8859-1.  The default metamail
+mailcap file uses this feature to test the charset to spawn an xterm
+using the right charset to view the message.
+<tag>&bsol;&percnt;</tag>
+This will be replaced by a &percnt;
+</descrip>
+Mutt does not currently support the &percnt;F and &percnt;n keywords
+specified in RFC 1524.  The main purpose of these parameters is for
+multipart messages, which is handled internally by Mutt.
+
+<sect2>Example mailcap files
+<p>
+This mailcap file is fairly simple and standard:
+<code>
+# I'm always running X :)
+video/*;        xanim %s > /dev/null
+image/*;        xv %s > /dev/null
+
+# I'm always running netscape (if my computer had more memory, maybe)
+text/html;      netscape -remote 'openURL(%s)'
+</code>
+
+This mailcap file shows quite a number of examples:
+
+<code>
+# Use xanim to view all videos   Xanim produces a header on startup,
+# send that to /dev/null so I don't see it
+video/*;        xanim %s > /dev/null
+
+# Send html to a running netscape by remote
+text/html;      netscape -remote 'openURL(%s)'; test=RunningNetscape
+
+# If I'm not running netscape but I am running X, start netscape on the
+# object
+text/html;      netscape %s; test=RunningX
+
+# Else use lynx to view it as text
+text/html;      lynx %s
+
+# This version would convert the text/html to text/plain
+text/html;      lynx -dump %s; copiousoutput
+
+# I use enscript to print text in two columns to a page
+text/*;         more %s; print=enscript -2Gr %s
+
+# Netscape adds a flag to tell itself to view jpegs internally
+image/jpeg;xv %s; x-mozilla-flags=internal
+
+# Use xv to view images if I'm running X
+# In addition, this uses the \ to extend the line and set my editor
+# for images
+image/*;xv %s; test=RunningX; \
+        edit=xpaint %s
+
+# Convert images to text using the netpbm tools
+image/*;  (anytopnm %s | pnmscale -xysize 80 46 | ppmtopgm | pgmtopbm |
+pbmtoascii -1x2 ) 2>&1 ; copiousoutput
+
+# Send excel spreadsheets to my NT box
+application/ms-excel; open.pl %s
+</code>
+
+<sect1>MIME Autoview<label id="auto_view">
+<p>
+In addition to explicitly telling Mutt to view an attachment with the
+MIME viewer defined in the mailcap file, Mutt has support for
+automatically viewing MIME attachments while in the pager.
+
+To work, you must define a viewer in the mailcap file which uses the 
+<tt/copiousoutput/ option to denote that it is non-interactive.
+Usually, you also use the entry to convert the attachment to a text
+representation which you can view in the pager.
+
+You then use the <tt/auto&lowbar;view/ muttrc command to list the
+content-types that you wish to view automatically.
+
+For instance, if you set auto&lowbar;view to:
+<tscreen><verb>
+auto_view text/html application/x-gunzip application/postscript image/gif application/x-tar-gz
+</verb></tscreen>
+
+Mutt could use the following mailcap entries to automatically view
+attachments of these types.
+<tscreen><verb>
+text/html;      lynx -dump %s; copiousoutput; nametemplate=%s.html
+image/*;        anytopnm %s | pnmscale -xsize 80 -ysize 50 | ppmtopgm | pgmtopbm | pbmtoascii ; copiousoutput
+application/x-gunzip;   gzcat; copiousoutput
+application/x-tar-gz; gunzip -c %s | tar -tf - ; copiousoutput
+application/postscript; ps2ascii %s; copiousoutput
+</verb></tscreen>
+
+``unauto_view'' can be used to remove previous entries from the autoview list.
+This can be used with message-hook to autoview messages based on size, etc.
+``unauto_view *'' will remove all previous entries.
+
+<sect1>MIME Multipart/Alternative<label id="alternative_order">
+<p>
+Mutt has some heuristics for determining which attachment of a
+multipart/alternative type to display.  First, mutt will check the 
+alternative&lowbar;order list to determine if one of the available types
+is preferred.  The alternative&lowbar;order list consists of a number of
+mimetypes in order, including support for implicit and explicit
+wildcards, for example:
+<tscreen><verb>
+alternative_order text/enriched text/plain text application/postscript image/*
+</verb></tscreen>
+
+Next, mutt will check if any of the types have a defined 
+<ref id="auto_view" name="auto&lowbar;view">, and use that.  Failing
+that, Mutt will look for any text type.  As a last attempt, mutt will
+look for any type it knows how to handle.
+
+To remove a MIME type from the <tt/alternative_order/ list, use the
+<tt/unalternative_order/ command.
+
+<sect1>MIME Lookup<label id="mime_lookup">
+<p>
+Mutt's mime&lowbar;lookup list specifies a list of mime-types that should not
+be treated according to their mailcap entry.  This option is designed to
+deal with binary types such as application/octet-stream.  When an attachment's
+mime-type is listed in mime&lowbar;lookup, then the extension of the filename will
+be compared to the list of extensions in the mime.types file.  The mime-type
+associated with this extension will then be used to process the attachment
+according to the rules in the mailcap file and according to any other configuration
+options (such as auto&lowbar;view) specified.  Common usage would be:
+<tscreen><verb>
+mime-lookup application/octet-stream application/X-Lotus-Manuscript
+</verb></tscreen>
+
+In addition, the unmime&lowbar;lookup command may be used to disable this feature
+for any particular mime-type if it had been set, for example, in a global
+muttrc.
+
+<sect>Reference
+<sect1>Command line options<label id="commandline">
+<p>
+Running <tt/mutt/ with no arguments will make Mutt attempt to read your spool
+mailbox.  However, it is possible to read other mailboxes and
+to send messages from the command line as well.
+
+<tscreen><verb>
+-A     expand an alias
+-a      attach a file to a message
+-b      specify a blind carbon-copy (BCC) address
+-c      specify a carbon-copy (Cc) address
+-e      specify a config command to be run after initilization files are read
+-f      specify a mailbox to load
+-F      specify an alternate file to read initialization commands
+-h      print help on command line options
+-H      specify a draft file from which to read a header and body
+-i      specify a file to include in a message composition
+-m      specify a default mailbox type
+-n      do not read the system Muttrc
+-p      recall a postponed message
+-Q      query a configuration variable
+-R      open mailbox in read-only mode
+-s      specify a subject (enclose in quotes if it contains spaces)
+-v      show version number and compile-time definitions
+-x      simulate the mailx(1) compose mode
+-y      show a menu containing the files specified by the mailboxes command
+-z      exit immediately if there are no messages in the mailbox
+-Z      open the first folder with new message,exit immediately if none
+</verb></tscreen>
+
+To read messages in a mailbox
+
+<tt/mutt/ &lsqb; -nz &rsqb; &lsqb; -F <em/muttrc/ &rsqb; &lsqb; -m <em/type/ &rsqb; &lsqb; -f <em/mailbox/ &rsqb; 
+
+To compose a new message
+
+<tt/mutt/ &lsqb; -n &rsqb; &lsqb; -F <em/muttrc/ &rsqb; &lsqb; -a <em/file/ &rsqb; &lsqb; -c <em/address/ &rsqb; &lsqb; -i <em/filename/ &rsqb; &lsqb; -s <em/subject/ &rsqb; <em/address/ &lsqb; <em/address/ ... &rsqb; 
+
+Mutt also supports a ``batch'' mode to send prepared messages.  Simply redirect
+input from the file you wish to send.  For example,
+
+<tt>mutt -s &dquot;data set for run &num;2&dquot; professor@bigschool.edu
+&lt; &tilde;/run2.dat</tt>
+
+This command will send a message to ``professor@bigschool.edu'' with a subject
+of ``data set for run &num;2''.  In the body of the message will be the contents
+of the file ``&tilde;/run2.dat''.
+
+<sect1>Configuration Commands<label id="commands">
+<p>
+The following are the commands understood by mutt.
+
+<itemize>
+<item>
+<tt><ref id="account-hook" name="account-hook"></tt> <em/pattern/ <em/command/
+<item>
+<tt><ref id="alias" name="alias"></tt> <em/key/ <em/address/ &lsqb; , <em/address/, ... &rsqb;
+<item>
+<tt><ref id="alias" name="unalias"></tt> &lsqb; * | <em/key/ ... &rsqb;
+<item>
+<tt><ref id="alternates" name="alternates"></tt> <em/regexp/ &lsqb; <em/regexp/ ... &rsqb;
+<item>
+<tt><ref id="alternates" name="unalternates"></tt> &lsqb; * | <em/regexp/ ... &rsqb;
+<item>
+<tt><ref id="alternative_order" name="alternative&lowbar;order"></tt> <em/mimetype/ &lsqb; <em/mimetype/ ... &rsqb;
+<item>
+<tt><ref id="alternative_order" name="unalternative&lowbar;order"></tt> <em/mimetype/ &lsqb; <em/mimetype/ ... &rsqb;
+<item>
+<tt><ref id="auto_view" name="auto&lowbar;view"></tt> <em/mimetype/ &lsqb; <em/mimetype/ ... &rsqb;
+<item>
+<tt><ref id="auto_view" name="unauto&lowbar;view"></tt> <em/mimetype/ &lsqb; <em/mimetype/ ... &rsqb;
+<item>
+<tt><ref id="bind" name="bind"></tt> <em/map/ <em/key/ <em/function/
+<item>
+<tt><ref id="charset-hook" name="charset-hook"></tt> <em/alias/ <em/charset/
+<item>
+<tt><ref id="color" name="color"></tt> <em/object/ <em/foreground/ <em/background/ &lsqb; <em/regexp/ &rsqb;
+<item>
+<tt><ref id="color" name="uncolor"></tt> <em/index/ <em/pattern/ &lsqb; <em/pattern/ ... &rsqb;
+<item>
+<tt><ref id="exec" name="exec"></tt> <em/function/ &lsqb; <em/function/ ... &rsqb;
+<item>
+<tt><ref id="fcc-hook" name="fcc-hook"></tt> <em/pattern/ <em/mailbox/
+<item>
+<tt><ref id="fcc-save-hook" name="fcc-save-hook"></tt> <em/pattern/ <em/mailbox/
+<item>
+<tt><ref id="folder-hook" name="folder-hook"></tt> <em/pattern/ <em/command/
+<item>
+<tt><ref id="hdr_order" name="hdr&lowbar;order"></tt> <em/header/ &lsqb; <em/header/ ... &rsqb;
+<item>
+<tt><ref id="hdr_order" name="unhdr&lowbar;order"></tt> <em/header/ &lsqb; <em/header/ ... &rsqb;
+<item>
+<tt><ref id="charset-hook" name="iconv-hook"></tt> <em/charset/ <em/local-charset/
+<item>
+<tt><ref id="ignore" name="ignore"></tt> <em/pattern/ &lsqb; <em/pattern/ ... &rsqb;
+<item>
+<tt><ref id="ignore" name="unignore"></tt> <em/pattern/ &lsqb; <em/pattern/ ... &rsqb;
+<item>
+<tt><ref id="lists" name="lists"></tt> <em/address/ &lsqb; <em/address/ ... &rsqb; 
+<item>
+<tt><ref id="lists" name="unlists"></tt> <em/address/ &lsqb; <em/address/ ... &rsqb; 
+<item>
+<tt><ref id="macro" name="macro"></tt> <em/menu/ <em/key/ <em/sequence/ &lsqb; <em/description/ &rsqb; 
+<item>
+<tt><ref id="mailboxes" name="mailboxes"></tt> <em/filename/ &lsqb; <em/filename/ ... &rsqb;
+<item>
+<tt><ref id="mbox-hook" name="mbox-hook"></tt> <em/pattern/ <em/mailbox/
+<item>
+<tt><ref id="message-hook" name="message-hook"></tt> <em/pattern/ <em/command/
+<item>
+<tt><ref id="mime_lookup" name="mime&lowbar;lookup"></tt> <em/mimetype/ &lsqb; <em/mimetype/ ... &rsqb;
+<item>
+<tt><ref id="mime_lookup" name="unmime&lowbar;lookup"></tt> <em/mimetype/ &lsqb; <em/mimetype/ ... &rsqb;
+<item>
+<tt><ref id="color" name="mono"></tt> <em/object attribute/ &lsqb; <em/regexp/ &rsqb;
+<item>
+<tt><ref id="color" name="unmono"></tt> <em/index/ <em/pattern/ &lsqb; <em/pattern/ ... &rsqb;
+<item>
+<tt><ref id="my_hdr" name="my&lowbar;hdr"></tt> <em/string/
+<item>
+<tt><ref id="my_hdr" name="unmy&lowbar;hdr"></tt> <em/field/ &lsqb; <em/field/ ... &rsqb;
+<item>
+<tt><ref id="crypt-hook" name="crypt-hook"></tt> <em/pattern/ <em/key-id/
+<item>
+<tt><ref id="push" name="push"></tt> <em/string/
+<item>
+<tt><ref id="set" name="reset"></tt> <em/variable/ &lsqb;<em/variable/ ... &rsqb;
+<item>
+<tt><ref id="save-hook" name="save-hook"></tt> <em/regexp/ <em/filename/
+<item>
+<tt><ref id="score-command" name="score"></tt> <em/pattern/ <em/value/
+<item>
+<tt><ref id="score-command" name="unscore"></tt> <em/pattern/ &lsqb; <em/pattern/ ... &rsqb;
+<item>
+<tt><ref id="send-hook" name="send-hook"></tt> <em/regexp/ <em/command/
+<item>
+<tt><ref id="set" name="set"></tt> &lsqb;no|inv&rsqb;<em/variable/&lsqb;=<em/value/&rsqb; &lsqb; <em/variable/ ... &rsqb;
+<item>
+<tt><ref id="set" name="unset"></tt> <em/variable/ &lsqb;<em/variable/ ... &rsqb;
+<item>
+<tt><ref id="source" name="source"></tt> <em/filename/
+<item>
+<tt><ref id="lists" name="subscribe"></tt> <em/address/ &lsqb; <em/address/ ... &rsqb; 
+<item>
+<tt><ref id="lists" name="unsubscribe"></tt> <em/address/ &lsqb; <em/address/ ... &rsqb; 
+<item>
+<tt><ref id="set" name="toggle"></tt> <em/variable/ &lsqb;<em/variable/ ... &rsqb;
+<item>
+<tt><ref id="unhook" name="unhook"></tt> <em/hook-type/
+</itemize>
+
+<sect1>Configuration variables<label id="variables">
+<p>
+
+
+<sect2>abort&lowbar;nosubject<label id="abort_nosubject">
+<p>
+Type: quadoption<newline>
+Default: ask-yes
+
+<p>
+If set to <em>yes</em>, when composing messages and no subject is given
+at the subject prompt, composition will be aborted.  If set to
+<em>no</em>, composing messages with no subject given at the subject
+prompt will never be aborted.
+
+
+<sect2>abort&lowbar;unmodified<label id="abort_unmodified">
+<p>
+Type: quadoption<newline>
+Default: yes
+
+<p>
+If set to <em>yes</em>, composition will automatically abort after
+editing the message body if no changes are made to the file (this
+check only happens after the <em>first</em> edit of the file).  When set
+to <em>no</em>, composition will never be aborted.
+
+
+<sect2>alias&lowbar;file<label id="alias_file">
+<p>
+Type: path<newline>
+Default: &dquot;&tilde;/.muttrc&dquot;
+
+<p>
+The default file in which to save aliases created by the 
+``<ref id="create-alias" name="create-alias">'' function.
+<p>
+<bf>Note:</bf> Mutt will not automatically source this file; you must
+explicitly use the ``<ref id="source" name="source">'' command for it to be executed.
+
+
+<sect2>alias&lowbar;format<label id="alias_format">
+<p>
+Type: string<newline>
+Default: &dquot;&percnt;4n &percnt;2f &percnt;t &percnt;-10a   &percnt;r&dquot;
+
+<p>
+Specifies the format of the data displayed for the `alias' menu.  The
+following printf(3)-style sequences are available:
+<p>
+
+<descrip>
+<tag>&percnt;a </tag>alias name
+<tag>&percnt;f </tag>flags - currently, a &dquot;d&dquot; for an alias marked for deletion
+<tag>&percnt;n </tag>index number
+<tag>&percnt;r </tag>address which alias expands to
+<tag>&percnt;t </tag>character which indicates if the alias is tagged for inclusion
+</descrip>
+
+
+<sect2>allow&lowbar;8bit<label id="allow_8bit">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+Controls whether 8-bit data is converted to 7-bit using either Quoted-
+Printable or Base64 encoding when sending mail.
+
+
+<sect2>allow&lowbar;ansi<label id="allow_ansi">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+Controls whether ANSI color codes in messages (and color tags in 
+rich text messages) are to be interpreted.
+Messages containing these codes are rare, but if this option is set,
+their text will be colored accordingly. Note that this may override
+your color choices, and even present a security problem, since a
+message could include a line like &dquot;&lsqb;-- PGP output follows ...&dquot; and
+give it the same color as your attachment color.
+
+
+<sect2>arrow&lowbar;cursor<label id="arrow_cursor">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When set, an arrow (``-&gt;'') will be used to indicate the current entry
+in menus instead of highlighting the whole line.  On slow network or modem
+links this will make response faster because there is less that has to
+be redrawn on the screen when moving to the next or previous entries
+in the menu.
+
+
+<sect2>ascii&lowbar;chars<label id="ascii_chars">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set, Mutt will use plain ASCII characters when displaying thread
+and attachment trees, instead of the default <em>ACS</em> characters.
+
+
+<sect2>askbcc<label id="askbcc">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set, Mutt will prompt you for blind-carbon-copy (Bcc) recipients
+before editing an outgoing message.
+
+
+<sect2>askcc<label id="askcc">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set, Mutt will prompt you for carbon-copy (Cc) recipients before
+editing the body of an outgoing message.
+
+
+<sect2>ask&lowbar;follow&lowbar;up<label id="ask_follow_up">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set, Mutt will prompt you for follow-up groups before editing
+the body of an outgoing message.
+
+
+<sect2>ask&lowbar;x&lowbar;comment&lowbar;to<label id="ask_x_comment_to">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set, Mutt will prompt you for x-comment-to field before editing
+the body of an outgoing message.
+
+
+<sect2>attach&lowbar;format<label id="attach_format">
+<p>
+Type: string<newline>
+Default: &dquot;&percnt;u&percnt;D&percnt;I &percnt;t&percnt;4n &percnt;T&percnt;.40d&percnt;&gt; &lsqb;&percnt;.7m/&percnt;.10M, &percnt;.6e&percnt;?C?, &percnt;C?, &percnt;s&rsqb; &dquot;
+
+<p>
+This variable describes the format of the `attachment' menu.  The
+following printf-style sequences are understood:
+<p>
+
+<descrip>
+<tag>&percnt;C  </tag>charset
+<tag>&percnt;c  </tag>reqiures charset conversion (n or c)
+<tag>&percnt;D  </tag>deleted flag
+<tag>&percnt;d  </tag>description
+<tag>&percnt;e  </tag>MIME content-transfer-encoding
+<tag>&percnt;f  </tag>filename
+<tag>&percnt;I  </tag>disposition (I=inline, A=attachment)
+<tag>&percnt;m  </tag>major MIME type
+<tag>&percnt;M  </tag>MIME subtype
+<tag>&percnt;n  </tag>attachment number
+<tag>&percnt;s  </tag>size
+<tag>&percnt;t  </tag>tagged flag
+<tag>&percnt;T  </tag>graphic tree characters
+<tag>&percnt;u  </tag>unlink (=to delete) flag
+<tag>&percnt;&gt;X </tag>right justify the rest of the string and pad with character &dquot;X&dquot;
+<tag>&percnt;|X </tag>pad to the end of the line with character &dquot;X&dquot;
+</descrip>
+
+
+<sect2>attach&lowbar;sep<label id="attach_sep">
+<p>
+Type: string<newline>
+Default: &dquot;&bsol;n&dquot;
+
+<p>
+The separator to add between attachments when operating (saving,
+printing, piping, etc) on a list of tagged attachments.
+
+
+<sect2>attach&lowbar;split<label id="attach_split">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If this variable is unset, when operating (saving, printing, piping,
+etc) on a list of tagged attachments, Mutt will concatenate the
+attachments and will operate on them as a single attachment. The
+``<ref id="attach_sep" name="&dollar;attach&lowbar;sep">'' separator is added after each attachment. When set,
+Mutt will operate on the attachments one by one.
+
+
+<sect2>attribution<label id="attribution">
+<p>
+Type: string<newline>
+Default: &dquot;On &percnt;d, &percnt;n wrote:&dquot;
+
+<p>
+This is the string that will precede a message which has been included
+in a reply.  For a full listing of defined printf()-like sequences see
+the section on ``<ref id="index_format" name="&dollar;index&lowbar;format">''.
+
+
+<sect2>autoedit<label id="autoedit">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When set along with ``<ref id="edit_headers" name="&dollar;edit&lowbar;headers">'', Mutt will skip the initial
+send-menu and allow you to immediately begin editing the body of your
+message.  The send-menu may still be accessed once you have finished
+editing the body of your message.
+<p>
+Also see ``<ref id="fast_reply" name="&dollar;fast&lowbar;reply">''.
+
+
+<sect2>auto&lowbar;tag<label id="auto_tag">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When set, functions in the <em>index</em> menu which affect a message
+will be applied to all tagged messages (if there are any).  When
+unset, you must first use the tag-prefix function (default: &dquot;;&dquot;) to
+make the next function apply to all tagged messages.
+
+
+<sect2>beep<label id="beep">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When this variable is set, mutt will beep when an error occurs.
+
+
+<sect2>beep&lowbar;new<label id="beep_new">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When this variable is set, mutt will beep whenever it prints a message
+notifying you of new mail.  This is independent of the setting of the
+``<ref id="beep" name="&dollar;beep">'' variable.
+
+
+<sect2>bounce<label id="bounce">
+<p>
+Type: quadoption<newline>
+Default: ask-yes
+
+<p>
+Controls whether you will be asked to confirm bouncing messages.
+If set to <em>yes</em> you don't get asked if you want to bounce a
+message. Setting this variable to <em>no</em> is not generally useful,
+and thus not recommended, because you are unable to bounce messages.
+
+
+<sect2>bounce&lowbar;delivered<label id="bounce_delivered">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When this variable is set, mutt will include Delivered-To headers when
+bouncing messages.  Postfix users may wish to unset this variable.
+
+
+<sect2>catchup&lowbar;newsgroup<label id="catchup_newsgroup">
+<p>
+Type: quadoption<newline>
+Default: ask-yes
+
+<p>
+If this variable is <em>set</em>, Mutt will mark all articles in newsgroup
+as read when you quit the newsgroup (catchup newsgroup).
+
+
+<sect2>charset<label id="charset">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+Character set your terminal uses to display and enter textual data.
+
+
+<sect2>check&lowbar;new<label id="check_new">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+<bf>Note:</bf> this option only affects <em>maildir</em> and <em>MH</em> style
+mailboxes.
+<p>
+When <em>set</em>, Mutt will check for new mail delivered while the
+mailbox is open.  Especially with MH mailboxes, this operation can
+take quite some time since it involves scanning the directory and
+checking each file to see if it has already been looked at.  If
+<em>check&lowbar;new</em> is <em>unset</em>, no check for new mail is performed
+while the mailbox is open.
+
+
+<sect2>collapse&lowbar;unread<label id="collapse_unread">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When <em>unset</em>, Mutt will not collapse a thread if it contains any
+unread messages.
+
+
+<sect2>uncollapse&lowbar;jump<label id="uncollapse_jump">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When <em>set</em>, Mutt will jump to the next unread message, if any,
+when the current thread is <em>un</em>collapsed.
+
+
+<sect2>compose&lowbar;format<label id="compose_format">
+<p>
+Type: string<newline>
+Default: &dquot;-- Mutt: Compose  &lsqb;Approx. msg size: &percnt;l   Atts: &percnt;a&rsqb;&percnt;&gt;-&dquot;
+
+<p>
+Controls the format of the status line displayed in the &bsol;fCompose
+menu.  This string is similar to ``<ref id="status_format" name="&dollar;status&lowbar;format">'', but has its own
+set of printf()-like sequences:
+<p>
+
+<descrip>
+<tag>&percnt;a </tag>total number of attachments 
+<tag>&percnt;h </tag>local hostname
+<tag>&percnt;l </tag>approximate size (in bytes) of the current message
+<tag>&percnt;v </tag>Mutt version string
+</descrip>
+
+<p>
+See the text describing the ``<ref id="status_format" name="&dollar;status&lowbar;format">'' option for more 
+information on how to set ``<ref id="compose_format" name="&dollar;compose&lowbar;format">''.
+
+
+<sect2>confirmappend<label id="confirmappend">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When set, Mutt will prompt for confirmation when appending messages to
+an existing mailbox.
+
+
+<sect2>confirmcreate<label id="confirmcreate">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When set, Mutt will prompt for confirmation when saving messages to a
+mailbox which does not yet exist before creating it.
+
+
+<sect2>connect&lowbar;timeout<label id="connect_timeout">
+<p>
+Type: number<newline>
+Default: 30
+
+<p>
+Causes Mutt to timeout a network connection (for IMAP or POP) after this
+many seconds if the connection is not able to be established.  A negative
+value causes Mutt to wait indefinitely for the connection to succeed.
+
+
+<sect2>content&lowbar;type<label id="content_type">
+<p>
+Type: string<newline>
+Default: &dquot;text/plain&dquot;
+
+<p>
+Sets the default Content-Type for the body of newly composed messages.
+
+
+<sect2>copy<label id="copy">
+<p>
+Type: quadoption<newline>
+Default: yes
+
+<p>
+This variable controls whether or not copies of your outgoing messages
+will be saved for later references.  Also see ``<ref id="record" name="&dollar;record">'',
+``<ref id="save_name" name="&dollar;save&lowbar;name">'', ``<ref id="force_name" name="&dollar;force&lowbar;name">'' and ``<ref id="fcc-hook" name="fcc-hook">''.
+
+
+<sect2>crypt&lowbar;autopgp<label id="crypt_autopgp">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+This variable controls whether or not mutt may automatically enable
+PGP encryption/signing for messages.  See also ``<ref id="crypt_autoencrypt" name="&dollar;crypt&lowbar;autoencrypt">'',
+``<ref id="crypt_replyencrypt" name="&dollar;crypt&lowbar;replyencrypt">'',
+``<ref id="crypt_autosign" name="&dollar;crypt&lowbar;autosign">'', ``<ref id="crypt_replysign" name="&dollar;crypt&lowbar;replysign">'' and ``<ref id="smime_is_default" name="&dollar;smime&lowbar;is&lowbar;default">''.
+
+
+<sect2>crypt&lowbar;autosmime<label id="crypt_autosmime">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+This variable controls whether or not mutt may automatically enable
+S/MIME encryption/signing for messages. See also ``<ref id="crypt_autoencrypt" name="&dollar;crypt&lowbar;autoencrypt">'',
+``<ref id="crypt_replyencrypt" name="&dollar;crypt&lowbar;replyencrypt">'',
+``<ref id="crypt_autosign" name="&dollar;crypt&lowbar;autosign">'', ``<ref id="crypt_replysign" name="&dollar;crypt&lowbar;replysign">'' and ``<ref id="smime_is_default" name="&dollar;smime&lowbar;is&lowbar;default">''.
+
+
+<sect2>date&lowbar;format<label id="date_format">
+<p>
+Type: string<newline>
+Default: &dquot;!&percnt;a, &percnt;b &percnt;d, &percnt;Y at &percnt;I:&percnt;M:&percnt;S&percnt;p &percnt;Z&dquot;
+
+<p>
+This variable controls the format of the date printed by the ``&percnt;d''
+sequence in ``<ref id="index_format" name="&dollar;index&lowbar;format">''.  This is passed to the <em>strftime</em>
+call to process the date. See the man page for <em>strftime(3)</em> for
+the proper syntax.
+<p>
+Unless the first character in the string is a bang (``!''), the month
+and week day names are expanded according to the locale specified in
+the variable ``<ref id="locale" name="&dollar;locale">''. If the first character in the string is a
+bang, the bang is discarded, and the month and week day names in the
+rest of the string are expanded in the <em>C</em> locale (that is in US
+English).
+
+
+<sect2>default&lowbar;hook<label id="default_hook">
+<p>
+Type: string<newline>
+Default: &dquot;&tilde;f &percnt;s !&tilde;P | (&tilde;P &tilde;C &percnt;s)&dquot;
+
+<p>
+This variable controls how send-hooks, message-hooks, save-hooks,
+and fcc-hooks will
+be interpreted if they are specified with only a simple regexp,
+instead of a matching pattern.  The hooks are expanded when they are
+declared, so a hook will be interpreted according to the value of this
+variable at the time the hook is declared.  The default value matches
+if the message is either from a user matching the regular expression
+given, or if it is from you (if the from address matches
+``alternates'') and is to or cc'ed to a user matching the given
+regular expression.
+
+
+<sect2>delete<label id="delete">
+<p>
+Type: quadoption<newline>
+Default: ask-yes
+
+<p>
+Controls whether or not messages are really deleted when closing or
+synchronizing a mailbox.  If set to <em>yes</em>, messages marked for
+deleting will automatically be purged without prompting.  If set to
+<em>no</em>, messages marked for deletion will be kept in the mailbox.
+
+
+<sect2>delete&lowbar;untag<label id="delete_untag">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If this option is <em>set</em>, mutt will untag messages when marking them
+for deletion.  This applies when you either explicitly delete a message,
+or when you save it to another folder.
+
+
+<sect2>digest&lowbar;collapse<label id="digest_collapse">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If this option is <em>set</em>, mutt's revattach menu will not show the subparts of
+individual messages in a digest.  To see these subparts, press 'v' on that menu.
+
+
+<sect2>display&lowbar;filter<label id="display_filter">
+<p>
+Type: path<newline>
+Default: &dquot;&dquot;
+
+<p>
+When set, specifies a command used to filter messages.  When a message
+is viewed it is passed as standard input to <ref id="display_filter" name="&dollar;display&lowbar;filter">, and the
+filtered message is read from the standard output.
+
+
+<sect2>dotlock&lowbar;program<label id="dotlock_program">
+<p>
+Type: path<newline>
+Default: &dquot;/usr/local/bin/mutt&lowbar;dotlock&dquot;
+
+<p>
+Contains the path of the mutt&lowbar;dotlock (8) binary to be used by
+mutt.
+
+
+<sect2>dsn&lowbar;notify<label id="dsn_notify">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+<bf>Note:</bf> you should not enable this unless you are using Sendmail
+8.8.x or greater.
+<p>
+This variable sets the request for when notification is returned.  The
+string consists of a comma separated list (no spaces!) of one or more
+of the following: <em>never</em>, to never request notification,
+<em>failure</em>, to request notification on transmission failure,
+<em>delay</em>, to be notified of message delays, <em>success</em>, to be
+notified of successful transmission.
+<p>
+Example: set dsn&lowbar;notify=&dquot;failure,delay&dquot;
+
+
+<sect2>dsn&lowbar;return<label id="dsn_return">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+<bf>Note:</bf> you should not enable this unless you are using Sendmail
+8.8.x or greater.
+<p>
+This variable controls how much of your message is returned in DSN
+messages.  It may be set to either <em>hdrs</em> to return just the
+message header, or <em>full</em> to return the full message.
+<p>
+Example: set dsn&lowbar;return=hdrs
+
+
+<sect2>duplicate&lowbar;threads<label id="duplicate_threads">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+This variable controls whether mutt, when sorting by threads, threads
+messages with the same message-id together.  If it is set, it will indicate
+that it thinks they are duplicates of each other with an equals sign
+in the thread diagram.
+
+
+<sect2>edit&lowbar;headers<label id="edit_headers">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+This option allows you to edit the header of your outgoing messages
+along with the body of your message.
+
+
+<sect2>editor<label id="editor">
+<p>
+Type: path<newline>
+Default: &dquot;&dquot;
+
+<p>
+This variable specifies which editor is used by mutt.
+It defaults to the value of the VISUAL, or EDITOR, environment
+variable, or to the string &dquot;vi&dquot; if neither of those are set.
+
+
+<sect2>encode&lowbar;from<label id="encode_from">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When <em>set</em>, mutt will quoted-printable encode messages when
+they contain the string &dquot;From &dquot; in the beginning of a line.
+Useful to avoid the tampering certain mail delivery and transport
+agents tend to do with messages.
+
+
+<sect2>envelope&lowbar;from<label id="envelope_from">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When <em>set</em>, mutt will try to derive the message's <em>envelope</em>
+sender from the &dquot;From:&dquot; header.  Note that this information is passed 
+to sendmail command using the &dquot;-f&dquot; command line switch, so don't set this
+option if you are using that switch in <ref id="sendmail" name="&dollar;sendmail"> yourself,
+or if the sendmail on your machine doesn't support that command
+line switch.
+
+
+<sect2>escape<label id="escape">
+<p>
+Type: string<newline>
+Default: &dquot;&tilde;&dquot;
+
+<p>
+Escape character to use for functions in the builtin editor.
+
+
+<sect2>fast&lowbar;reply<label id="fast_reply">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When set, the initial prompt for recipients and subject are skipped
+when replying to messages, and the initial prompt for subject is
+skipped when forwarding messages.
+<p>
+<bf>Note:</bf> this variable has no effect when the ``<ref id="autoedit" name="&dollar;autoedit">''
+variable is set.
+
+
+<sect2>fcc&lowbar;attach<label id="fcc_attach">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+This variable controls whether or not attachments on outgoing messages
+are saved along with the main body of your message.
+
+
+<sect2>fcc&lowbar;clear<label id="fcc_clear">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When this variable is set, FCCs will be stored unencrypted and
+unsigned, even when the actual message is encrypted and/or
+signed.
+(PGP only)
+
+
+<sect2>folder<label id="folder">
+<p>
+Type: path<newline>
+Default: &dquot;&tilde;/Mail&dquot;
+
+<p>
+Specifies the default location of your mailboxes.  A `+' or `=' at the
+beginning of a pathname will be expanded to the value of this
+variable.  Note that if you change this variable from the default
+value you need to make sure that the assignment occurs <em>before</em>
+you use `+' or `=' for any other variables since expansion takes place
+during the `set' command.
+
+
+<sect2>folder&lowbar;format<label id="folder_format">
+<p>
+Type: string<newline>
+Default: &dquot;&percnt;2C &percnt;t &percnt;N &percnt;F &percnt;2l &percnt;-8.8u &percnt;-8.8g &percnt;8s &percnt;d &percnt;f&dquot;
+
+<p>
+This variable allows you to customize the file browser display to your
+personal taste.  This string is similar to ``<ref id="index_format" name="&dollar;index&lowbar;format">'', but has
+its own set of printf()-like sequences:
+<p>
+
+<descrip>
+<tag>&percnt;C  </tag>current file number
+<tag>&percnt;d  </tag>date/time folder was last modified
+<tag>&percnt;f  </tag>filename
+<tag>&percnt;F  </tag>file permissions
+<tag>&percnt;g  </tag>group name (or numeric gid, if missing)
+<tag>&percnt;l  </tag>number of hard links
+<tag>&percnt;N  </tag>N if folder has new mail, blank otherwise
+<tag>&percnt;s  </tag>size in bytes
+<tag>&percnt;t  </tag>* if the file is tagged, blank otherwise
+<tag>&percnt;u  </tag>owner name (or numeric uid, if missing)
+<tag>&percnt;&gt;X </tag>right justify the rest of the string and pad with character &dquot;X&dquot;
+<tag>&percnt;|X </tag>pad to the end of the line with character &dquot;X&dquot;
+</descrip>
+
+
+<sect2>followup&lowbar;to<label id="followup_to">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+Controls whether or not the <em>Mail-Followup-To</em> header field is
+generated when sending mail.  When <em>set</em>, Mutt will generate this
+field when you are replying to a known mailing list, specified with
+the ``subscribe'' or ``<ref id="lists" name="lists">'' commands.
+<p>
+This field has two purposes.  First, preventing you from
+receiving duplicate copies of replies to messages which you send
+to mailing lists, and second, ensuring that you do get a reply
+separately for any messages sent to known lists to which you are
+not subscribed.  The header will contain only the list's address
+for subscribed lists, and both the list address and your own
+email address for unsubscribed lists.  Without this header, a
+group reply to your message sent to a subscribed list will be
+sent to both the list and your address, resulting in two copies
+of the same email for you.
+
+
+<sect2>followup&lowbar;to&lowbar;poster<label id="followup_to_poster">
+<p>
+Type: quadoption<newline>
+Default: ask-yes
+
+<p>
+If this variable is <em>set</em> and the keyword &dquot;poster&dquot; is present in
+<em>Followup-To</em> header, follow-up to newsgroup function is not
+permitted.  The message will be mailed to the submitter of the
+message via mail.
+
+
+<sect2>force&lowbar;name<label id="force_name">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+This variable is similar to ``<ref id="save_name" name="&dollar;save&lowbar;name">'', except that Mutt will
+store a copy of your outgoing message by the username of the address
+you are sending to even if that mailbox does not exist.
+<p>
+Also see the ``<ref id="record" name="&dollar;record">'' variable.
+
+
+<sect2>forward&lowbar;decode<label id="forward_decode">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+Controls the decoding of complex MIME messages into text/plain when
+forwarding a message.  The message header is also RFC2047 decoded.
+This variable is only used, if ``<ref id="mime_forward" name="&dollar;mime&lowbar;forward">'' is <em>unset</em>,
+otherwise ``<ref id="mime_forward_decode" name="&dollar;mime&lowbar;forward&lowbar;decode">'' is used instead.
+
+
+<sect2>forward&lowbar;edit<label id="forward_edit">
+<p>
+Type: quadoption<newline>
+Default: yes
+
+<p>
+This quadoption controls whether or not the user is automatically
+placed in the editor when forwarding messages.  For those who always want
+to forward with no modification, use a setting of ``no''.
+
+
+<sect2>forward&lowbar;format<label id="forward_format">
+<p>
+Type: string<newline>
+Default: &dquot;&lsqb;&percnt;a: &percnt;s&rsqb;&dquot;
+
+<p>
+This variable controls the default subject when forwarding a message.
+It uses the same format sequences as the ``<ref id="index_format" name="&dollar;index&lowbar;format">'' variable.
+
+
+<sect2>forward&lowbar;quote<label id="forward_quote">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When <em>set</em> forwarded messages included in the main body of the
+message (when ``<ref id="mime_forward" name="&dollar;mime&lowbar;forward">'' is <em>unset</em>) will be quoted using
+``<ref id="indent_string" name="&dollar;indent&lowbar;string">''.
+
+
+<sect2>from<label id="from">
+<p>
+Type: e-mail address<newline>
+Default: &dquot;&dquot;
+
+<p>
+When set, this variable contains a default from address.  It
+can be overridden using my&lowbar;hdr (including from send-hooks) and
+``<ref id="reverse_name" name="&dollar;reverse&lowbar;name">''.  This variable is ignored if ``<ref id="use_from" name="&dollar;use&lowbar;from">''
+is unset.
+<p>
+Defaults to the contents of the environment variable EMAIL.
+
+
+<sect2>gecos&lowbar;mask<label id="gecos_mask">
+<p>
+Type: regular expression<newline>
+Default: &dquot;^&lsqb;^,&rsqb;*&dquot;
+
+<p>
+A regular expression used by mutt to parse the GECOS field of a password
+entry when expanding the alias.  By default the regular expression is set
+to &dquot;^&lsqb;^,&rsqb;*&dquot; which will return the string up to the first &dquot;,&dquot; encountered.
+If the GECOS field contains a string like &dquot;lastname, firstname&dquot; then you
+should set the gecos&lowbar;mask=&dquot;.*&dquot;.
+<p>
+This can be useful if you see the following behavior: you address a e-mail
+to user ID stevef whose full name is Steve Franklin.  If mutt expands 
+stevef to &dquot;Franklin&dquot; stevef@foo.bar then you should set the gecos&lowbar;mask to
+a regular expression that will match the whole name so mutt will expand
+&dquot;Franklin&dquot; to &dquot;Franklin, Steve&dquot;.
+
+
+<sect2>group&lowbar;index&lowbar;format<label id="group_index_format">
+<p>
+Type: string<newline>
+Default: &dquot;&percnt;4C &percnt;M&percnt;N &percnt;5s  &percnt;-45.45f &percnt;d&dquot;
+
+<p>
+This variable allows you to customize the newsgroup browser display to
+your personal taste.  This string is similar to ``<ref id="index_format" name="index&lowbar;format">'', but
+has its own set of printf()-like sequences:
+<p>
+
+<tscreen><verb>
+%C      current newsgroup number
+%d      description of newsgroup (becomes from server)
+%f      newsgroup name
+%M      - if newsgroup not allowed for direct post (moderated for example)
+%N      N if newsgroup is new, u if unsubscribed, blank otherwise
+%n      number of new articles in newsgroup
+%s      number of unread articles in newsgroup
+%>X     right justify the rest of the string and pad with character "X"
+%|X     pad to the end of the line with character "X"
+
+</verb></tscreen>
+
+<sect2>hdrs<label id="hdrs">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When unset, the header fields normally added by the ``<ref id="my_hdr" name="my&lowbar;hdr">''
+command are not created.  This variable <em>must</em> be unset before
+composing a new message or replying in order to take effect.  If set,
+the user defined header fields are added to every new message.
+
+
+<sect2>header<label id="header">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When set, this variable causes Mutt to include the header
+of the message you are replying to into the edit buffer.
+The ``<ref id="weed" name="&dollar;weed">'' setting applies.
+
+
+<sect2>help<label id="help">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When set, help lines describing the bindings for the major functions
+provided by each menu are displayed on the first line of the screen.
+<p>
+<bf>Note:</bf> The binding will not be displayed correctly if the
+function is bound to a sequence rather than a single keystroke.  Also,
+the help line may not be updated if a binding is changed while Mutt is
+running.  Since this variable is primarily aimed at new users, neither
+of these should present a major problem.
+
+
+<sect2>hidden&lowbar;host<label id="hidden_host">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When set, mutt will skip the host name part of ``<ref id="hostname" name="&dollar;hostname">'' variable
+when adding the domain part to addresses.  This variable does not
+affect the generation of Message-IDs, and it will not lead to the 
+cut-off of first-level domains.
+
+
+<sect2>hide&lowbar;limited<label id="hide_limited">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When set, mutt will not show the presence of messages that are hidden
+by limiting, in the thread tree.
+
+
+<sect2>hide&lowbar;missing<label id="hide_missing">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When set, mutt will not show the presence of missing messages in the
+thread tree.
+
+
+<sect2>hide&lowbar;top&lowbar;limited<label id="hide_top_limited">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When set, mutt will not show the presence of messages that are hidden
+by limiting, at the top of threads in the thread tree.  Note that when
+<ref id="hide_missing" name="&dollar;hide&lowbar;missing"> is set, this option will have no effect.
+
+
+<sect2>hide&lowbar;top&lowbar;missing<label id="hide_top_missing">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When set, mutt will not show the presence of missing messages at the
+top of threads in the thread tree.  Note that when <ref id="hide_limited" name="&dollar;hide&lowbar;limited"> is
+set, this option will have no effect.
+
+
+<sect2>history<label id="history">
+<p>
+Type: number<newline>
+Default: 10
+
+<p>
+This variable controls the size (in number of strings remembered) of
+the string history buffer. The buffer is cleared each time the
+variable is set.
+
+
+<sect2>honor&lowbar;followup&lowbar;to<label id="honor_followup_to">
+<p>
+Type: quadoption<newline>
+Default: yes
+
+<p>
+This variable controls whether or not a Mail-Followup-To header is
+honored when group-replying to a message.
+
+
+<sect2>hostname<label id="hostname">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+Specifies the hostname to use after the ``@'' in local e-mail
+addresses.  This overrides the compile time definition obtained from
+/etc/resolv.conf.
+
+
+<sect2>ignore&lowbar;list&lowbar;reply&lowbar;to<label id="ignore_list_reply_to">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+Affects the behaviour of the <em>reply</em> function when replying to
+messages from mailing lists.  When set, if the ``Reply-To:'' field is
+set to the same value as the ``To:'' field, Mutt assumes that the
+``Reply-To:'' field was set by the mailing list to automate responses
+to the list, and will ignore this field.  To direct a response to the
+mailing list when this option is set, use the <em>list-reply</em>
+function; <em>group-reply</em> will reply to both the sender and the
+list.
+
+
+<sect2>imap&lowbar;authenticators<label id="imap_authenticators">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This is a colon-delimited list of authentication methods mutt may
+attempt to use to log in to an IMAP server, in the order mutt should
+try them.  Authentication methods are either 'login' or the right
+side of an IMAP 'AUTH=xxx' capability string, eg 'digest-md5',
+'gssapi' or 'cram-md5'. This parameter is case-insensitive. If this
+parameter is unset (the default) mutt will try all available methods,
+in order from most-secure to least-secure.
+<p>
+Example: set imap&lowbar;authenticators=&dquot;gssapi:cram-md5:login&dquot;
+<p>
+<bf>Note:</bf> Mutt will only fall back to other authentication methods if
+the previous methods are unavailable. If a method is available but
+authentication fails, mutt will not connect to the IMAP server.
+
+
+<sect2>imap&lowbar;delim&lowbar;chars<label id="imap_delim_chars">
+<p>
+Type: string<newline>
+Default: &dquot;/.&dquot;
+
+<p>
+This contains the list of characters which you would like to treat
+as folder separators for displaying IMAP paths. In particular it
+helps in using the '=' shortcut for your <em>folder</em> variable.
+
+
+<sect2>imap&lowbar;force&lowbar;ssl<label id="imap_force_ssl">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If this variable is set, Mutt will always use SSL when
+connecting to IMAP servers.
+
+
+<sect2>imap&lowbar;home&lowbar;namespace<label id="imap_home_namespace">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+You normally want to see your personal folders alongside
+your INBOX in the IMAP browser. If you see something else, you may set
+this variable to the IMAP path to your folders.
+
+
+<sect2>imap&lowbar;keepalive<label id="imap_keepalive">
+<p>
+Type: number<newline>
+Default: 900
+
+<p>
+This variable specifies the maximum amount of time in seconds that mutt
+will wait before polling open IMAP connections, to prevent the server
+from closing them before mutt has finished with them. The default is
+well within the RFC-specified minimum amount of time (30 minutes) before
+a server is allowed to do this, but in practice the RFC does get
+violated every now and then. Reduce this number if you find yourself
+getting disconnected from your IMAP server due to inactivity.
+
+
+<sect2>imap&lowbar;list&lowbar;subscribed<label id="imap_list_subscribed">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+This variable configures whether IMAP folder browsing will look for
+only subscribed folders or all folders.  This can be toggled in the
+IMAP browser with the <em>toggle-subscribed</em> function.
+
+
+<sect2>imap&lowbar;pass<label id="imap_pass">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+Specifies the password for your IMAP account.  If unset, Mutt will
+prompt you for your password when you invoke the fetch-mail function.
+<bf>Warning</bf>: you should only use this option when you are on a
+fairly secure machine, because the superuser can read your muttrc even
+if you are the only one who can read the file.
+
+
+<sect2>imap&lowbar;passive<label id="imap_passive">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When set, mutt will not open new IMAP connections to check for new
+mail.  Mutt will only check for new mail over existing IMAP
+connections.  This is useful if you don't want to be prompted to
+user/password pairs on mutt invocation, or if opening the connection
+is slow.
+
+
+<sect2>imap&lowbar;peek<label id="imap_peek">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If set, mutt will avoid implicitly marking your mail as read whenever
+you fetch a message from the server. This is generally a good thing,
+but can make closing an IMAP folder somewhat slower. This option
+exists to appease speed freaks.
+
+
+<sect2>imap&lowbar;servernoise<label id="imap_servernoise">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When set, mutt will display warning messages from the IMAP
+server as error messages. Since these messages are often
+harmless, or generated due to configuration problems on the
+server which are out of the users' hands, you may wish to suppress
+them at some point.
+
+
+<sect2>imap&lowbar;user<label id="imap_user">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+Your login name on the IMAP server.
+<p>
+This variable defaults to your user name on the local machine.
+
+
+<sect2>implicit&lowbar;autoview<label id="implicit_autoview">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set to ``yes'', mutt will look for a mailcap entry with the
+copiousoutput flag set for <em>every</em> MIME attachment it doesn't have
+an internal viewer defined for.  If such an entry is found, mutt will
+use the viewer defined in that entry to convert the body part to text
+form.
+
+
+<sect2>include<label id="include">
+<p>
+Type: quadoption<newline>
+Default: ask-yes
+
+<p>
+Controls whether or not a copy of the message(s) you are replying to
+is included in your reply.
+
+
+<sect2>indent&lowbar;string<label id="indent_string">
+<p>
+Type: string<newline>
+Default: &dquot;&gt; &dquot;
+
+<p>
+Specifies the string to prepend to each line of text quoted in a
+message to which you are replying.  You are strongly encouraged not to
+change this value, as it tends to agitate the more fanatical netizens.
+
+
+<sect2>index&lowbar;format<label id="index_format">
+<p>
+Type: string<newline>
+Default: &dquot;&percnt;4C &percnt;Z &percnt;{&percnt;b &percnt;d} &percnt;-15.15L (&percnt;?l?&percnt;4l&amp;&percnt;4c?) &percnt;s&dquot;
+
+<p>
+This variable allows you to customize the message index display to
+your personal taste.
+<p>
+``Format strings'' are similar to the strings used in the ``C''
+function printf to format output (see the man page for more detail).
+The following sequences are defined in Mutt:
+<p>
+
+<descrip>
+<tag>&percnt;a </tag>address of the author
+<tag>&percnt;A </tag>reply-to address (if present; otherwise: address of author)
+<tag>&percnt;b </tag>filename of the original message folder (think mailBox)
+<tag>&percnt;B </tag>the list to which the letter was sent, or else the folder name (&percnt;b).
+<tag>&percnt;c </tag>number of characters (bytes) in the message
+<tag>&percnt;C </tag>current message number
+<tag>&percnt;d </tag>date and time of the message in the format specified by
+``date&lowbar;format'' converted to sender's time zone
+<tag>&percnt;D </tag>date and time of the message in the format specified by
+``date&lowbar;format'' converted to the local time zone
+<tag>&percnt;e </tag>current message number in thread
+<tag>&percnt;E </tag>number of messages in current thread
+<tag>&percnt;f </tag>entire From: line (address + real name)
+<tag>&percnt;F </tag>author name, or recipient name if the message is from you
+<tag>&percnt;g </tag>newsgroup name (if compiled with nntp support)
+<tag>&percnt;i </tag>message-id of the current message
+<tag>&percnt;l </tag>number of lines in the message (does not work with maildir,
+mh, and possibly IMAP folders)
+<tag>&percnt;L </tag>If an address in the To or CC header field matches an address
+defined by the users ``subscribe'' command, this displays
+&dquot;To &lt;list-name&gt;&dquot;, otherwise the same as &percnt;F.
+<tag>&percnt;m </tag>total number of message in the mailbox
+<tag>&percnt;M </tag>number of hidden messages if the thread is collapsed.
+<tag>&percnt;N </tag>message score
+<tag>&percnt;n </tag>author's real name (or address if missing)
+<tag>&percnt;O </tag>(&lowbar;O&lowbar;riginal save folder)  Where mutt would formerly have
+stashed the message: list name or recipient name if no list
+<tag>&percnt;s </tag>subject of the message
+<tag>&percnt;S </tag>status of the message (N/D/d/!/r/*)
+<tag>&percnt;t </tag>`to:' field (recipients)
+<tag>&percnt;T </tag>the appropriate character from the <ref id="to_chars" name="&dollar;to&lowbar;chars"> string
+<tag>&percnt;u </tag>user (login) name of the author
+<tag>&percnt;v </tag>first name of the author, or the recipient if the message is from you
+<tag>&percnt;W </tag>name of organization of author (`organization:' field)
+<tag>&percnt;y </tag>`x-label:' field, if present
+<tag>&percnt;Y </tag>`x-label' field, if present, and (1) not at part of a thread tree,
+(2) at the top of a thread, or (3) `x-label' is different from
+preceding message's `x-label'.
+<tag>&percnt;Z </tag>message status flags
+<tag>&percnt;{fmt} </tag>the date and time of the message is converted to sender's
+time zone, and ``fmt'' is expanded by the library function
+``strftime''; a leading bang disables locales
+<tag>&percnt;&lsqb;fmt&rsqb; </tag>the date and time of the message is converted to the local
+time zone, and ``fmt'' is expanded by the library function
+``strftime''; a leading bang disables locales
+<tag>&percnt;(fmt) </tag>the local date and time when the message was received.
+``fmt'' is expanded by the library function ``strftime'';
+a leading bang disables locales
+<tag>&percnt;&lt;fmt&gt; </tag>the current local time. ``fmt'' is expanded by the library
+function ``strftime''; a leading bang disables locales.
+<tag>&percnt;&gt;X    </tag>right justify the rest of the string and pad with character &dquot;X&dquot;
+<tag>&percnt;|X    </tag>pad to the end of the line with character &dquot;X&dquot;
+</descrip>
+
+<p>
+See also: ``<ref id="to_chars" name="&dollar;to&lowbar;chars">''.
+
+
+<sect2>inews<label id="inews">
+<p>
+Type: path<newline>
+Default: &dquot;&dquot;
+
+<p>
+If set, specifies the program and arguments used to deliver news posted
+by Mutt.  Otherwise, mutt posts article using current connection to
+news server.  The following printf-style sequence is understood:
+<p>
+
+<tscreen><verb>
+%s      newsserver name
+
+</verb></tscreen><p>
+Example: set inews=&dquot;/usr/local/bin/inews -hS&dquot;
+
+
+<sect2>ispell<label id="ispell">
+<p>
+Type: path<newline>
+Default: &dquot;/sw/bin/ispell&dquot;
+
+<p>
+How to invoke ispell (GNU's spell-checking software).
+
+
+<sect2>keep&lowbar;flagged<label id="keep_flagged">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set, read messages marked as flagged will not be moved
+from your spool mailbox to your ``<ref id="mbox" name="&dollar;mbox">'' mailbox, or as a result of
+a ``<ref id="mbox-hook" name="mbox-hook">'' command.
+
+
+<sect2>locale<label id="locale">
+<p>
+Type: string<newline>
+Default: &dquot;C&dquot;
+
+<p>
+The locale used by <em>strftime(3)</em> to format dates. Legal values are
+the strings your system accepts for the locale variable <em>LC&lowbar;TIME</em>.
+
+
+<sect2>list&lowbar;reply<label id="list_reply">
+<p>
+Type: quadoption<newline>
+Default: no
+
+<p>
+When set, address replies to the mailing list the original message came
+from (instead to the author only). Setting this option to ``ask-yes'' or
+``ask-no'' will ask if you really intended to reply to the author only.
+
+
+<sect2>mail&lowbar;check<label id="mail_check">
+<p>
+Type: number<newline>
+Default: 5
+
+<p>
+This variable configures how often (in seconds) mutt should look for
+new mail.
+
+
+<sect2>mailcap&lowbar;path<label id="mailcap_path">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This variable specifies which files to consult when attempting to
+display MIME bodies not directly supported by Mutt.
+
+
+<sect2>mailcap&lowbar;sanitize<label id="mailcap_sanitize">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If set, mutt will restrict possible characters in mailcap &percnt; expandos
+to a well-defined set of safe characters.  This is the safe setting,
+but we are not sure it doesn't break some more advanced MIME stuff.
+<p>
+<bf>DON'T CHANGE THIS SETTING UNLESS YOU ARE REALLY SURE WHAT YOU ARE
+DOING!</bf>
+
+
+<sect2>maildir&lowbar;trash<label id="maildir_trash">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set, messages marked as deleted will be saved with the maildir
+(T)rashed flag instead of unlinked.  <bf>NOTE:</bf> this only applies
+to maildir-style mailboxes.  Setting it will have no effect on other
+mailbox types.
+
+
+<sect2>mark&lowbar;old<label id="mark_old">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+Controls whether or not mutt marks <em>new</em> <bf>unread</bf>
+messages as <em>old</em> if you exit a mailbox without reading them.
+With this option set, the next time you start mutt, the messages
+will show up with an &dquot;O&dquot; next to them in the index menu,
+indicating that they are old.
+
+
+<sect2>markers<label id="markers">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+Controls the display of wrapped lines in the internal pager. If set, a
+``+'' marker is displayed at the beginning of wrapped lines. Also see
+the ``<ref id="smart_wrap" name="&dollar;smart&lowbar;wrap">'' variable.
+
+
+<sect2>mask<label id="mask">
+<p>
+Type: regular expression<newline>
+Default: &dquot;!^&bsol;.&lsqb;^.&rsqb;&dquot;
+
+<p>
+A regular expression used in the file browser, optionally preceded by
+the <em>not</em> operator ``!''.  Only files whose names match this mask
+will be shown. The match is always case-sensitive.
+
+
+<sect2>mbox<label id="mbox">
+<p>
+Type: path<newline>
+Default: &dquot;&tilde;/mbox&dquot;
+
+<p>
+This specifies the folder into which read mail in your ``<ref id="spoolfile" name="&dollar;spoolfile">''
+folder will be appended.
+
+
+<sect2>mbox&lowbar;type<label id="mbox_type">
+<p>
+Type: folder magic<newline>
+Default: mbox
+
+<p>
+The default mailbox type used when creating new folders. May be any of
+mbox, MMDF, MH and Maildir.
+
+
+<sect2>metoo<label id="metoo">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If unset, Mutt will remove your address (see the ``alternates''
+command) from the list of recipients when replying to a message.
+
+
+<sect2>menu&lowbar;scroll<label id="menu_scroll">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When <em>set</em>, menus will be scrolled up or down one line when you
+attempt to move across a screen boundary.  If <em>unset</em>, the screen
+is cleared and the next or previous page of the menu is displayed
+(useful for slow links to avoid many redraws).
+
+
+<sect2>meta&lowbar;key<label id="meta_key">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set, forces Mutt to interpret keystrokes with the high bit (bit 8)
+set as if the user had pressed the ESC key and whatever key remains
+after having the high bit removed.  For example, if the key pressed
+has an ASCII value of 0xf4, then this is treated as if the user had
+pressed ESC then ``x''.  This is because the result of removing the
+high bit from ``0xf4'' is ``0x74'', which is the ASCII character
+``x''.
+
+
+<sect2>mh&lowbar;purge<label id="mh_purge">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When unset, mutt will mimic mh's behaviour and rename deleted messages
+to <em>,&lt;old file name&gt;</em> in mh folders instead of really deleting
+them.  If the variable is set, the message files will simply be
+deleted.
+
+
+<sect2>mh&lowbar;seq&lowbar;flagged<label id="mh_seq_flagged">
+<p>
+Type: string<newline>
+Default: &dquot;flagged&dquot;
+
+<p>
+The name of the MH sequence used for flagged messages.
+
+
+<sect2>mh&lowbar;seq&lowbar;replied<label id="mh_seq_replied">
+<p>
+Type: string<newline>
+Default: &dquot;replied&dquot;
+
+<p>
+The name of the MH sequence used to tag replied messages.
+
+
+<sect2>mh&lowbar;seq&lowbar;unseen<label id="mh_seq_unseen">
+<p>
+Type: string<newline>
+Default: &dquot;unseen&dquot;
+
+<p>
+The name of the MH sequence used for unseen messages.
+
+
+<sect2>mime&lowbar;forward<label id="mime_forward">
+<p>
+Type: quadoption<newline>
+Default: no
+
+<p>
+When set, the message you are forwarding will be attached as a
+separate MIME part instead of included in the main body of the
+message.  This is useful for forwarding MIME messages so the receiver
+can properly view the message as it was delivered to you. If you like
+to switch between MIME and not MIME from mail to mail, set this
+variable to ask-no or ask-yes.
+<p>
+Also see ``<ref id="forward_decode" name="&dollar;forward&lowbar;decode">'' and ``<ref id="mime_forward_decode" name="&dollar;mime&lowbar;forward&lowbar;decode">''.
+
+
+<sect2>mime&lowbar;forward&lowbar;decode<label id="mime_forward_decode">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+Controls the decoding of complex MIME messages into text/plain when
+forwarding a message while ``<ref id="mime_forward" name="&dollar;mime&lowbar;forward">'' is <em>set</em>. Otherwise
+``<ref id="forward_decode" name="&dollar;forward&lowbar;decode">'' is used instead.
+
+
+<sect2>mime&lowbar;forward&lowbar;rest<label id="mime_forward_rest">
+<p>
+Type: quadoption<newline>
+Default: yes
+
+<p>
+When forwarding multiple attachments of a MIME message from the recvattach
+menu, attachments which cannot be decoded in a reasonable manner will
+be attached to the newly composed message if this option is set.
+
+
+<sect2>mime&lowbar;subject<label id="mime_subject">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If <em>unset</em>, 8-bit ``subject:'' line in article header will not be
+encoded according to RFC2047 to base64.  This is useful when message
+is Usenet article, because MIME for news is nonstandard feature.
+
+
+<sect2>mix&lowbar;entry&lowbar;format<label id="mix_entry_format">
+<p>
+Type: string<newline>
+Default: &dquot;&percnt;4n &percnt;c &percnt;-16s &percnt;a&dquot;
+
+<p>
+This variable describes the format of a remailer line on the mixmaster
+chain selection screen.  The following printf-like sequences are 
+supported:
+<p>
+
+<descrip>
+<tag>&percnt;n </tag>The running number on the menu.
+<tag>&percnt;c </tag>Remailer capabilities.
+<tag>&percnt;s </tag>The remailer's short name.
+<tag>&percnt;a </tag>The remailer's e-mail address.
+</descrip>
+
+
+<sect2>mixmaster<label id="mixmaster">
+<p>
+Type: path<newline>
+Default: &dquot;mixmaster&dquot;
+
+<p>
+This variable contains the path to the Mixmaster binary on your
+system.  It is used with various sets of parameters to gather the
+list of known remailers, and to finally send a message through the
+mixmaster chain.
+
+
+<sect2>move<label id="move">
+<p>
+Type: quadoption<newline>
+Default: ask-no
+
+<p>
+Controls whether you will be asked to confirm moving read messages
+from your spool mailbox to your ``<ref id="mbox" name="&dollar;mbox">'' mailbox, or as a result of
+a ``<ref id="mbox-hook" name="mbox-hook">'' command.
+
+
+<sect2>message&lowbar;format<label id="message_format">
+<p>
+Type: string<newline>
+Default: &dquot;&percnt;s&dquot;
+
+<p>
+This is the string displayed in the ``attachment'' menu for
+attachments of type message/rfc822.  For a full listing of defined
+printf()-like sequences see the section on ``<ref id="index_format" name="&dollar;index&lowbar;format">''.
+
+
+<sect2>narrow&lowbar;tree<label id="narrow_tree">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+This variable, when set, makes the thread tree narrower, allowing
+deeper threads to fit on the screen.
+
+
+<sect2>news&lowbar;cache&lowbar;dir<label id="news_cache_dir">
+<p>
+Type: path<newline>
+Default: &dquot;&tilde;/.mutt&dquot;
+
+<p>
+This variable pointing to directory where Mutt will save cached news
+articles headers in. If <em>unset</em>, headers will not be saved at all
+and will be reloaded each time when you enter to newsgroup.
+
+
+<sect2>news&lowbar;server<label id="news_server">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This variable specifies domain name or address of NNTP server. It
+defaults to the newsserver specified in the environment variable
+&dollar;NNTPSERVER or contained in the file /etc/nntpserver.  You can also
+specify username and an alternative port for each newsserver, ie:
+<p>
+&lsqb;nntp&lsqb;s&rsqb;://&rsqb;&lsqb;username&lsqb;:password&rsqb;@&rsqb;newsserver&lsqb;:port&rsqb;
+
+
+<sect2>newsrc<label id="newsrc">
+<p>
+Type: path<newline>
+Default: &dquot;&tilde;/.newsrc&dquot;
+
+<p>
+The file, containing info about subscribed newsgroups - names and
+indexes of read articles.  The following printf-style sequence
+is understood:
+<p>
+
+<tscreen><verb>
+%s      newsserver name
+
+</verb></tscreen>
+
+<sect2>nntp&lowbar;context<label id="nntp_context">
+<p>
+Type: number<newline>
+Default: 1000
+
+<p>
+This variable defines number of articles which will be in index when
+newsgroup entered.  If active newsgroup have more articles than this
+number, oldest articles will be ignored.  Also controls how many
+articles headers will be saved in cache when you quit newsgroup.
+
+
+<sect2>nntp&lowbar;load&lowbar;description<label id="nntp_load_description">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+This variable controls whether or not descriptions for each newsgroup
+must be loaded when newsgroup is added to list (first time list
+loading or new newsgroup adding).
+
+
+<sect2>nntp&lowbar;user<label id="nntp_user">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+Your login name on the NNTP server.  If <em>unset</em> and NNTP server requires
+authentification, Mutt will prompt you for your account name when you
+connect to newsserver.
+
+
+<sect2>nntp&lowbar;pass<label id="nntp_pass">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+Your password for NNTP account.
+
+
+<sect2>nntp&lowbar;poll<label id="nntp_poll">
+<p>
+Type: number<newline>
+Default: 60
+
+<p>
+The time in seconds until any operations on newsgroup except post new
+article will cause recheck for new news.  If set to 0, Mutt will
+recheck newsgroup on each operation in index (stepping, read article,
+etc.).
+
+
+<sect2>nntp&lowbar;reconnect<label id="nntp_reconnect">
+<p>
+Type: quadoption<newline>
+Default: ask-yes
+
+<p>
+Controls whether or not Mutt will try to reconnect to newsserver when
+connection lost.
+
+
+<sect2>pager<label id="pager">
+<p>
+Type: path<newline>
+Default: &dquot;builtin&dquot;
+
+<p>
+This variable specifies which pager you would like to use to view
+messages.  builtin means to use the builtin pager, otherwise this
+variable should specify the pathname of the external pager you would
+like to use.
+<p>
+Using an external pager may have some disadvantages: Additional
+keystrokes are necessary because you can't call mutt functions
+directly from the pager, and screen resizes cause lines longer than
+the screen width to be badly formatted in the help menu.
+
+
+<sect2>pager&lowbar;context<label id="pager_context">
+<p>
+Type: number<newline>
+Default: 0
+
+<p>
+This variable controls the number of lines of context that are given
+when displaying the next or previous page in the internal pager.  By
+default, Mutt will display the line after the last one on the screen
+at the top of the next page (0 lines of context).
+
+
+<sect2>pager&lowbar;format<label id="pager_format">
+<p>
+Type: string<newline>
+Default: &dquot;-&percnt;Z- &percnt;C/&percnt;m: &percnt;-20.20n   &percnt;s&dquot;
+
+<p>
+This variable controls the format of the one-line message ``status''
+displayed before each message in either the internal or an external
+pager.  The valid sequences are listed in the ``<ref id="index_format" name="&dollar;index&lowbar;format">''
+section.
+
+
+<sect2>pager&lowbar;index&lowbar;lines<label id="pager_index_lines">
+<p>
+Type: number<newline>
+Default: 0
+
+<p>
+Determines the number of lines of a mini-index which is shown when in
+the pager.  The current message, unless near the top or bottom of the
+folder, will be roughly one third of the way down this mini-index,
+giving the reader the context of a few messages before and after the
+message.  This is useful, for example, to determine how many messages
+remain to be read in the current thread.  One of the lines is reserved
+for the status bar from the index, so a <em>pager&lowbar;index&lowbar;lines</em> of 6
+will only show 5 lines of the actual index.  A value of 0 results in
+no index being shown.  If the number of messages in the current folder
+is less than <em>pager&lowbar;index&lowbar;lines</em>, then the index will only use as
+many lines as it needs.
+
+
+<sect2>pager&lowbar;stop<label id="pager_stop">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When set, the internal-pager will <bf>not</bf> move to the next message
+when you are at the end of a message and invoke the <em>next-page</em>
+function.
+
+
+<sect2>crypt&lowbar;autosign<label id="crypt_autosign">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+Setting this variable will cause Mutt to always attempt to
+cryptographically sign outgoing messages.  This can be overridden
+by use of the <em>pgp-menu</em>, when signing is not required or
+encryption is requested as well. If ``<ref id="smime_is_default" name="&dollar;smime&lowbar;is&lowbar;default">'' is set,
+then OpenSSL is used instead to create S/MIME messages and settings can
+be overridden by use of the <em>smime-menu</em>.
+(Crypto only)
+
+
+<sect2>crypt&lowbar;autoencrypt<label id="crypt_autoencrypt">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+Setting this variable will cause Mutt to always attempt to PGP
+encrypt outgoing messages.  This is probably only useful in
+connection to the <em>send-hook</em> command.  It can be overridden
+by use of the <em>pgp-menu</em>, when encryption is not required or
+signing is requested as well.  IF ``<ref id="smime_is_default" name="&dollar;smime&lowbar;is&lowbar;default">'' is set,
+then OpenSSL is used instead to create S/MIME messages and
+settings can be overridden by use of the <em>smime-menu</em>.
+(Crypto only)
+
+
+<sect2>pgp&lowbar;ignore&lowbar;subkeys<label id="pgp_ignore_subkeys">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+Setting this variable will cause Mutt to ignore OpenPGP subkeys. Instead,
+the principal key will inherit the subkeys' capabilities.  Unset this
+if you want to play interesting key selection games.
+(PGP only)
+
+
+<sect2>crypt&lowbar;replyencrypt<label id="crypt_replyencrypt">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If set, automatically PGP or OpenSSL encrypt replies to messages which are
+encrypted.
+(Crypto only)
+
+
+<sect2>crypt&lowbar;replysign<label id="crypt_replysign">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set, automatically PGP or OpenSSL sign replies to messages which are
+signed.
+<p>
+<bf>Note:</bf> this does not work on messages that are encrypted
+<bf>and</bf> signed!
+(Crypto only)
+
+
+<sect2>crypt&lowbar;replysignencrypted<label id="crypt_replysignencrypted">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set, automatically PGP or OpenSSL sign replies to messages
+which are encrypted. This makes sense in combination with
+``<ref id="crypt_replyencrypt" name="&dollar;crypt&lowbar;replyencrypt">'', because it allows you to sign all
+messages which are automatically encrypted.  This works around
+the problem noted in ``<ref id="crypt_replysign" name="&dollar;crypt&lowbar;replysign">'', that mutt is not able
+to find out whether an encrypted message is also signed.
+(Crypto only)
+
+
+<sect2>crypt&lowbar;timestamp<label id="crypt_timestamp">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If set, mutt will include a time stamp in the lines surrounding
+PGP or S/MIME output, so spoofing such lines is more difficult.
+If you are using colors to mark these lines, and rely on these,
+you may unset this setting.
+(Crypto only)
+
+
+<sect2>pgp&lowbar;use&lowbar;gpg&lowbar;agent<label id="pgp_use_gpg_agent">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set, mutt will use a possibly-running gpg-agent process.
+(PGP only)
+
+
+<sect2>crypt&lowbar;verify&lowbar;sig<label id="crypt_verify_sig">
+<p>
+Type: quadoption<newline>
+Default: yes
+
+<p>
+If ``yes'', always attempt to verify PGP or S/MIME signatures.
+If ``ask'', ask whether or not to verify the signature. 
+If ``no'', never attempt to verify cryptographic signatures.
+(Crypto only)
+
+
+<sect2>smime&lowbar;is&lowbar;default<label id="smime_is_default">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+The default behaviour of mutt is to use PGP on all auto-sign/encryption
+operations. To override and to use OpenSSL instead this must be set.
+However, this has no effect while replying, since mutt will automatically 
+select the same application that was used to sign/encrypt the original
+message.  (Note that this variable can be overridden by unsetting <ref id="crypt_autosmime" name="&dollar;crypt&lowbar;autosmime">.)
+(S/MIME only)
+
+
+<sect2>smime&lowbar;ask&lowbar;cert&lowbar;label<label id="smime_ask_cert_label">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+This flag controls whether you want to be asked to enter a label
+for a certificate about to be added to the database or not. It is
+set by default.
+(S/MIME only)
+
+
+<sect2>smime&lowbar;decrypt&lowbar;use&lowbar;default&lowbar;key<label id="smime_decrypt_use_default_key">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If set (default) this tells mutt to use the default key for decryption. Otherwise,
+if manage multiple certificate-key-pairs, mutt will try to use the mailbox-address
+to determine the key to use. It will ask you to supply a key, if it can't find one.
+(S/MIME only)
+
+
+<sect2>pgp&lowbar;entry&lowbar;format<label id="pgp_entry_format">
+<p>
+Type: string<newline>
+Default: &dquot;&percnt;4n &percnt;t&percnt;f &percnt;4l/0x&percnt;k &percnt;-4a &percnt;2c &percnt;u&dquot;
+
+<p>
+This variable allows you to customize the PGP key selection menu to
+your personal taste. This string is similar to ``<ref id="index_format" name="&dollar;index&lowbar;format">'', but
+has its own set of printf()-like sequences:
+<p>
+
+<descrip>
+<tag>&percnt;n     </tag>number
+<tag>&percnt;k     </tag>key id
+<tag>&percnt;u     </tag>user id
+<tag>&percnt;a     </tag>algorithm
+<tag>&percnt;l     </tag>key length
+<tag>&percnt;f     </tag>flags
+<tag>&percnt;c     </tag>capabilities
+<tag>&percnt;t     </tag>trust/validity of the key-uid association
+<tag>&percnt;&lsqb;&lt;s&gt;&rsqb; </tag>date of the key where &lt;s&gt; is an strftime(3) expression
+</descrip>
+
+<p>
+(PGP only)
+
+
+<sect2>pgp&lowbar;good&lowbar;sign<label id="pgp_good_sign">
+<p>
+Type: regular expression<newline>
+Default: &dquot;&dquot;
+
+<p>
+If you assign a text to this variable, then a PGP signature is only
+considered verified if the output from <ref id="pgp_verify_command" name="&dollar;pgp&lowbar;verify&lowbar;command"> contains
+the text. Use this variable if the exit code from the command is 0
+even for bad signatures.
+(PGP only)
+
+
+<sect2>pgp&lowbar;check&lowbar;exit<label id="pgp_check_exit">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If set, mutt will check the exit code of the PGP subprocess when
+signing or encrypting.  A non-zero exit code means that the
+subprocess failed.
+(PGP only)
+
+
+<sect2>pgp&lowbar;long&lowbar;ids<label id="pgp_long_ids">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set, use 64 bit PGP key IDs. Unset uses the normal 32 bit Key IDs.
+(PGP only)
+
+
+<sect2>pgp&lowbar;retainable&lowbar;sigs<label id="pgp_retainable_sigs">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set, signed and encrypted messages will consist of nested
+multipart/signed and multipart/encrypted body parts.
+<p>
+This is useful for applications like encrypted and signed mailing
+lists, where the outer layer (multipart/encrypted) can be easily
+removed, while the inner multipart/signed part is retained.
+(PGP only)
+
+
+<sect2>pgp&lowbar;show&lowbar;unusable<label id="pgp_show_unusable">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If set, mutt will display non-usable keys on the PGP key selection
+menu.  This includes keys which have been revoked, have expired, or
+have been marked as ``disabled'' by the user.
+(PGP only)
+
+
+<sect2>pgp&lowbar;sign&lowbar;as<label id="pgp_sign_as">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+If you have more than one key pair, this option allows you to specify
+which of your private keys to use.  It is recommended that you use the
+keyid form to specify your key (e.g., ``0x00112233'').
+(PGP only)
+
+
+<sect2>pgp&lowbar;strict&lowbar;enc<label id="pgp_strict_enc">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If set, Mutt will automatically encode PGP/MIME signed messages as
+<em>quoted-printable</em>.  Please note that unsetting this variable may
+lead to problems with non-verifyable PGP signatures, so only change
+this if you know what you are doing.
+(PGP only)
+
+
+<sect2>pgp&lowbar;timeout<label id="pgp_timeout">
+<p>
+Type: number<newline>
+Default: 300
+
+<p>
+The number of seconds after which a cached passphrase will expire if
+not used.
+(PGP only)
+
+
+<sect2>pgp&lowbar;sort&lowbar;keys<label id="pgp_sort_keys">
+<p>
+Type: sort order<newline>
+Default: address
+
+<p>
+Specifies how the entries in the `pgp keys' menu are sorted. The
+following are legal values:
+<p>
+
+<descrip>
+<tag>address </tag>sort alphabetically by user id
+<tag>keyid   </tag>sort alphabetically by key id
+<tag>date    </tag>sort by key creation date
+<tag>trust   </tag>sort by the trust of the key
+</descrip>
+
+<p>
+If you prefer reverse order of the above values, prefix it with
+`reverse-'.
+(PGP only)
+
+
+<sect2>pgp&lowbar;create&lowbar;traditional<label id="pgp_create_traditional">
+<p>
+Type: quadoption<newline>
+Default: no
+
+<p>
+This option controls whether Mutt generates old-style inline PGP
+encrypted or signed messages.
+<p>
+Note that PGP/MIME will be used automatically for messages which have
+a character set different from us-ascii, or which consist of more than
+a single MIME part.
+<p>
+Also note that using the old-style PGP message format is <bf>strongly</bf>
+<bf>deprecated</bf>.
+(PGP only)
+
+
+<sect2>pgp&lowbar;auto&lowbar;traditional<label id="pgp_auto_traditional">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+This option causes Mutt to generate an old-style inline PGP
+encrypted or signed message when replying to an old-style
+message, and a PGP/MIME message when replying to a PGP/MIME
+message.  Note that this option is only meaningful when using
+``<ref id="crypt_replyencrypt" name="&dollar;crypt&lowbar;replyencrypt">'', ``<ref id="crypt_replysign" name="&dollar;crypt&lowbar;replysign">'', or
+``<ref id="crypt_replysignencrypted" name="&dollar;crypt&lowbar;replysignencrypted">''.
+<p>
+Also note that PGP/MIME will be used automatically for messages
+which have a character set different from us-ascii, or which
+consist of more than a single MIME part.
+<p>
+This option overrides ``<ref id="pgp_create_traditional" name="&dollar;pgp&lowbar;create&lowbar;traditional">''
+(PGP only)
+
+
+<sect2>pgp&lowbar;decode&lowbar;command<label id="pgp_decode_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This format strings specifies a command which is used to decode 
+application/pgp attachments.
+<p>
+The PGP command formats have their own set of printf-like sequences:
+<p>
+
+<descrip>
+<tag>&percnt;p </tag>Expands to PGPPASSFD=0 when a pass phrase is needed, to an empty
+string otherwise. Note: This may be used with a &percnt;? construct.
+<tag>&percnt;f </tag>Expands to the name of a file containing a message.
+<tag>&percnt;s </tag>Expands to the name of a file containing the signature part
+           of a multipart/signed attachment when verifying it.
+<tag>&percnt;a </tag>The value of <ref id="pgp_sign_as" name="&dollar;pgp&lowbar;sign&lowbar;as">.
+<tag>&percnt;r </tag>One or more key IDs.
+</descrip>
+
+<p>
+For examples on how to configure these formats for the various versions
+of PGP which are floating around, see the pgp*.rc and gpg.rc files in
+the samples/ subdirectory which has been installed on your system
+alongside the documentation.
+(PGP only)
+
+
+<sect2>pgp&lowbar;getkeys&lowbar;command<label id="pgp_getkeys_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is invoked whenever mutt will need public key information.
+&percnt;r is the only printf-like sequence used with this format.
+(PGP only)
+
+
+<sect2>pgp&lowbar;verify&lowbar;command<label id="pgp_verify_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to verify PGP signatures.
+(PGP only)
+
+
+<sect2>pgp&lowbar;decrypt&lowbar;command<label id="pgp_decrypt_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to decrypt a PGP encrypted message.
+(PGP only)
+
+
+<sect2>pgp&lowbar;clearsign&lowbar;command<label id="pgp_clearsign_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This format is used to create a old-style &dquot;clearsigned&dquot; PGP
+message.  Note that the use of this format is <bf>strongly</bf>
+<bf>deprecated</bf>.
+(PGP only)
+
+
+<sect2>pgp&lowbar;sign&lowbar;command<label id="pgp_sign_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to create the detached PGP signature for a 
+multipart/signed PGP/MIME body part.
+(PGP only)
+
+
+<sect2>pgp&lowbar;encrypt&lowbar;sign&lowbar;command<label id="pgp_encrypt_sign_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to both sign and encrypt a body part.
+(PGP only)
+
+
+<sect2>pgp&lowbar;encrypt&lowbar;only&lowbar;command<label id="pgp_encrypt_only_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to encrypt a body part without signing it.
+(PGP only)
+
+
+<sect2>pgp&lowbar;import&lowbar;command<label id="pgp_import_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to import a key from a message into 
+the user's public key ring.
+(PGP only)
+
+
+<sect2>pgp&lowbar;export&lowbar;command<label id="pgp_export_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to export a public key from the user's
+key ring.
+(PGP only)
+
+
+<sect2>pgp&lowbar;verify&lowbar;key&lowbar;command<label id="pgp_verify_key_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to verify key information from the key selection
+menu.
+(PGP only)
+
+
+<sect2>pgp&lowbar;list&lowbar;secring&lowbar;command<label id="pgp_list_secring_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to list the secret key ring's contents.  The
+output format must be analogous to the one used by 
+gpg --list-keys --with-colons.
+<p>
+This format is also generated by the pgpring utility which comes 
+with mutt.
+(PGP only)
+
+
+<sect2>pgp&lowbar;list&lowbar;pubring&lowbar;command<label id="pgp_list_pubring_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to list the public key ring's contents.  The
+output format must be analogous to the one used by 
+gpg --list-keys --with-colons.
+<p>
+This format is also generated by the pgpring utility which comes 
+with mutt.
+(PGP only)
+
+
+<sect2>forward&lowbar;decrypt<label id="forward_decrypt">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+Controls the handling of encrypted messages when forwarding a message.
+When set, the outer layer of encryption is stripped off.  This
+variable is only used if ``<ref id="mime_forward" name="&dollar;mime&lowbar;forward">'' is <em>set</em> and
+``<ref id="mime_forward_decode" name="&dollar;mime&lowbar;forward&lowbar;decode">'' is <em>unset</em>.
+(PGP only)
+
+
+<sect2>smime&lowbar;timeout<label id="smime_timeout">
+<p>
+Type: number<newline>
+Default: 300
+
+<p>
+The number of seconds after which a cached passphrase will expire if
+not used.
+(S/MIME only)
+
+
+<sect2>smime&lowbar;encrypt&lowbar;with<label id="smime_encrypt_with">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This sets the algorithm that should be used for encryption.
+Valid choices are &dquot;des&dquot;, &dquot;des3&dquot;, &dquot;rc2-40&dquot;, &dquot;rc2-64&dquot;, &dquot;rc2-128&dquot;.
+If unset &dquot;3des&dquot; (TripleDES) is used.
+(S/MIME only)
+
+
+<sect2>smime&lowbar;keys<label id="smime_keys">
+<p>
+Type: path<newline>
+Default: &dquot;&dquot;
+
+<p>
+Since there is no pubring/secring as with PGP, mutt has to handle
+storage ad retrieval of keys/certs by itself. This is very basic right now,
+and stores keys and certificates in two different directories, both
+named as the hash-value retrieved from OpenSSL. There is an index file
+which contains mailbox-address keyid pair, and which can be manually
+edited. This one points to the location of the private keys.
+(S/MIME only)
+
+
+<sect2>smime&lowbar;ca&lowbar;location<label id="smime_ca_location">
+<p>
+Type: path<newline>
+Default: &dquot;&dquot;
+
+<p>
+This variable contains the name of either a directory, or a file which
+contains trusted certificates for use with OpenSSL.
+(S/MIME only)
+
+
+<sect2>smime&lowbar;certificates<label id="smime_certificates">
+<p>
+Type: path<newline>
+Default: &dquot;&dquot;
+
+<p>
+Since there is no pubring/secring as with PGP, mutt has to handle
+storage and retrieval of keys by itself. This is very basic right
+now, and keys and certificates are stored in two different
+directories, both named as the hash-value retrieved from
+OpenSSL. There is an index file which contains mailbox-address
+keyid pairs, and which can be manually edited. This one points to
+the location of the certificates.
+(S/MIME only)
+
+
+<sect2>smime&lowbar;decrypt&lowbar;command<label id="smime_decrypt_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This format string specifies a command which is used to decrypt
+application/x-pkcs7-mime attachments.
+<p>
+The OpenSSL command formats have their own set of printf-like sequences
+similar to PGP's:
+<p>
+
+<descrip>
+<tag>&percnt;f </tag>Expands to the name of a file containing a message.
+<tag>&percnt;s </tag>Expands to the name of a file containing the signature part
+           of a multipart/signed attachment when verifying it.
+<tag>&percnt;k </tag>The key-pair specified with <ref id="smime_default_key" name="&dollar;smime&lowbar;default&lowbar;key">
+<tag>&percnt;c </tag>One or more certificate IDs.
+<tag>&percnt;a </tag>The algorithm used for encryption.
+<tag>&percnt;C </tag>CA location:  Depending on whether <ref id="smime_ca_location" name="&dollar;smime&lowbar;ca&lowbar;location">
+           points to a directory or file, this expands to 
+           &dquot;-CApath <ref id="smime_ca_location" name="&dollar;smime&lowbar;ca&lowbar;location">&dquot; or &dquot;-CAfile <ref id="smime_ca_location" name="&dollar;smime&lowbar;ca&lowbar;location">&dquot;.
+</descrip>
+
+<p>
+For examples on how to configure these formats, see the smime.rc in
+the samples/ subdirectory which has been installed on your system
+alongside the documentation.
+(S/MIME only)
+
+
+<sect2>smime&lowbar;verify&lowbar;command<label id="smime_verify_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to verify S/MIME signatures of type multipart/signed.
+(S/MIME only)
+
+
+<sect2>smime&lowbar;verify&lowbar;opaque&lowbar;command<label id="smime_verify_opaque_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to verify S/MIME signatures of type
+application/x-pkcs7-mime.
+(S/MIME only)
+
+
+<sect2>smime&lowbar;sign&lowbar;command<label id="smime_sign_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to created S/MIME signatures of type
+multipart/signed, which can be read by all mail clients.
+(S/MIME only)
+
+
+<sect2>smime&lowbar;sign&lowbar;opaque&lowbar;command<label id="smime_sign_opaque_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to created S/MIME signatures of type
+application/x-pkcs7-signature, which can only be handled by mail
+clients supporting the S/MIME extension.
+(S/MIME only)
+
+
+<sect2>smime&lowbar;encrypt&lowbar;command<label id="smime_encrypt_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to create encrypted S/MIME messages.
+(S/MIME only)
+
+
+<sect2>smime&lowbar;pk7out&lowbar;command<label id="smime_pk7out_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to extract PKCS7 structures of S/MIME signatures,
+in order to extract the public X509 certificate(s).
+(S/MIME only)
+
+
+<sect2>smime&lowbar;get&lowbar;cert&lowbar;command<label id="smime_get_cert_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to extract X509 certificates from a PKCS7 structure.
+(S/MIME only)
+
+
+<sect2>smime&lowbar;get&lowbar;signer&lowbar;cert&lowbar;command<label id="smime_get_signer_cert_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to extract only the signers X509 certificate from a S/MIME
+signature, so that the certificate's owner may get compared to the email's 
+'From'-field.
+(S/MIME only)
+
+
+<sect2>smime&lowbar;import&lowbar;cert&lowbar;command<label id="smime_import_cert_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to import a certificate via smime&lowbar;keys.
+(S/MIME only)
+
+
+<sect2>smime&lowbar;get&lowbar;cert&lowbar;email&lowbar;command<label id="smime_get_cert_email_command">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This command is used to extract the mail address(es) used for storing
+X509 certificates, and for verification purposes (to check whether the
+certificate was issued for the sender's mailbox).
+(S/MIME only)
+
+
+<sect2>smime&lowbar;default&lowbar;key<label id="smime_default_key">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This is the default key-pair to use for signing. This must be set to the
+keyid (the hash-value that OpenSSL generates) to work properly
+(S/MIME only)
+
+
+<sect2>smtp&lowbar;auth&lowbar;username<label id="smtp_auth_username">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+Defines the username to use with SMTP AUTH.  Setting this variable will
+cause mutt to attempt to use SMTP AUTH when sending.
+
+
+<sect2>smtp&lowbar;auth&lowbar;password<label id="smtp_auth_password">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+Defines the password to use with SMTP AUTH.  If ``<ref id="smtp_auth_username" name="&dollar;smtp&lowbar;auth&lowbar;username">''
+is set, but this variable is not, you will be prompted for a password
+when sending.
+
+
+<sect2>smtp&lowbar;host<label id="smtp_host">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+Defines the SMTP host which will be used to deliver mail, as opposed
+to invoking the sendmail binary.  Setting this variable overrides the
+value of ``<ref id="sendmail" name="&dollar;sendmail">'', and any associated variables.
+
+
+<sect2>smtp&lowbar;port<label id="smtp_port">
+<p>
+Type: number<newline>
+Default: 25
+
+<p>
+Defines the port that the SMTP host is listening on for mail delivery.
+Must be specified as a number.
+<p>
+Defaults to 25, the standard SMTP port, but RFC 2476-compliant SMTP
+servers will probably desire 587, the mail submission port.
+
+
+<sect2>ssl&lowbar;starttls<label id="ssl_starttls">
+<p>
+Type: quadoption<newline>
+Default: yes
+
+<p>
+If set (the default), mutt will attempt to use STARTTLS on servers
+advertising the capability. When unset, mutt will not attempt to
+use STARTTLS regardless of the server's capabilities.
+
+
+<sect2>certificate&lowbar;file<label id="certificate_file">
+<p>
+Type: path<newline>
+Default: &dquot;&dquot;
+
+<p>
+This variable specifies the file where the certificates you trust
+are saved. When an unknown certificate is encountered, you are asked
+if you accept it or not. If you accept it, the certificate can also 
+be saved in this file and further connections are automatically 
+accepted.
+<p>
+You can also manually add CA certificates in this file. Any server
+certificate that is signed with one of these CA certificates are 
+also automatically accepted.
+<p>
+Example: set certificate&lowbar;file=&tilde;/.mutt/certificates
+
+
+<sect2>ssl&lowbar;usesystemcerts<label id="ssl_usesystemcerts">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If set to <em>yes</em>, mutt will use CA certificates in the
+system-wide certificate store when checking if server certificate 
+is signed by a trusted CA.
+
+
+<sect2>entropy&lowbar;file<label id="entropy_file">
+<p>
+Type: path<newline>
+Default: &dquot;&dquot;
+
+<p>
+The file which includes random data that is used to initialize SSL
+library functions.
+
+
+<sect2>ssl&lowbar;use&lowbar;sslv2<label id="ssl_use_sslv2">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+This variables specifies whether to attempt to use SSLv2 in the
+SSL authentication process.
+
+
+<sect2>ssl&lowbar;use&lowbar;sslv3<label id="ssl_use_sslv3">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+This variables specifies whether to attempt to use SSLv3 in the
+SSL authentication process.
+
+
+<sect2>ssl&lowbar;use&lowbar;tlsv1<label id="ssl_use_tlsv1">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+This variables specifies whether to attempt to use TLSv1 in the
+SSL authentication process.
+
+
+<sect2>pipe&lowbar;split<label id="pipe_split">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+Used in connection with the <em>pipe-message</em> command and the ``tag-
+prefix'' operator.  If this variable is unset, when piping a list of
+tagged messages Mutt will concatenate the messages and will pipe them
+as a single folder.  When set, Mutt will pipe the messages one by one.
+In both cases the messages are piped in the current sorted order,
+and the ``<ref id="pipe_sep" name="&dollar;pipe&lowbar;sep">'' separator is added after each message.
+
+
+<sect2>pipe&lowbar;decode<label id="pipe_decode">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+Used in connection with the <em>pipe-message</em> command.  When unset,
+Mutt will pipe the messages without any preprocessing. When set, Mutt
+will weed headers and will attempt to PGP/MIME decode the messages
+first.
+
+
+<sect2>pipe&lowbar;sep<label id="pipe_sep">
+<p>
+Type: string<newline>
+Default: &dquot;&bsol;n&dquot;
+
+<p>
+The separator to add between messages when piping a list of tagged
+messages to an external Unix command.
+
+
+<sect2>pop&lowbar;authenticators<label id="pop_authenticators">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This is a colon-delimited list of authentication methods mutt may
+attempt to use to log in to an POP server, in the order mutt should
+try them.  Authentication methods are either 'user', 'apop' or any
+SASL mechanism, eg 'digest-md5', 'gssapi' or 'cram-md5'.
+This parameter is case-insensitive. If this parameter is unset
+(the default) mutt will try all available methods, in order from
+most-secure to least-secure.
+<p>
+Example: set pop&lowbar;authenticators=&dquot;digest-md5:apop:user&dquot;
+
+
+<sect2>pop&lowbar;auth&lowbar;try&lowbar;all<label id="pop_auth_try_all">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If set, Mutt will try all available methods. When unset, Mutt will
+only fall back to other authentication methods if the previous
+methods are unavailable. If a method is available but authentication
+fails, Mutt will not connect to the POP server.
+
+
+<sect2>pop&lowbar;checkinterval<label id="pop_checkinterval">
+<p>
+Type: number<newline>
+Default: 60
+
+<p>
+This variable configures how often (in seconds) POP should look for
+new mail.
+
+
+<sect2>pop&lowbar;delete<label id="pop_delete">
+<p>
+Type: quadoption<newline>
+Default: ask-no
+
+<p>
+If set, Mutt will delete successfully downloaded messages from the POP
+server when using the fetch-mail function.  When unset, Mutt will
+download messages but also leave them on the POP server.
+
+
+<sect2>pop&lowbar;host<label id="pop_host">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+The name of your POP server for the fetch-mail function.  You
+can also specify an alternative port, username and password, ie:
+<p>
+&lsqb;pop&lsqb;s&rsqb;://&rsqb;&lsqb;username&lsqb;:password&rsqb;@&rsqb;popserver&lsqb;:port&rsqb;
+
+
+<sect2>pop&lowbar;last<label id="pop_last">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If this variable is set, mutt will try to use the &dquot;LAST&dquot; POP command
+for retrieving only unread messages from the POP server when using
+the fetch-mail function.
+
+
+<sect2>pop&lowbar;reconnect<label id="pop_reconnect">
+<p>
+Type: quadoption<newline>
+Default: ask-yes
+
+<p>
+Controls whether or not Mutt will try to reconnect to POP server when
+connection lost.
+
+
+<sect2>pop&lowbar;user<label id="pop_user">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+Your login name on the POP server.
+<p>
+This variable defaults to your user name on the local machine.
+
+
+<sect2>pop&lowbar;pass<label id="pop_pass">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+Specifies the password for your POP account.  If unset, Mutt will
+prompt you for your password when you open POP mailbox.
+<bf>Warning</bf>: you should only use this option when you are on a
+fairly secure machine, because the superuser can read your muttrc
+even if you are the only one who can read the file.
+
+
+<sect2>post&lowbar;indent&lowbar;string<label id="post_indent_string">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+Similar to the ``<ref id="attribution" name="&dollar;attribution">'' variable, Mutt will append this
+string after the inclusion of a message which is being replied to.
+
+
+<sect2>post&lowbar;moderated<label id="post_moderated">
+<p>
+Type: quadoption<newline>
+Default: ask-yes
+
+<p>
+If set to <em>yes</em>, Mutt will post article to newsgroup that have
+not permissions to posting (e.g. moderated).  <bf>Note:</bf> if newsserver
+does not support posting to that newsgroup or totally read-only, that
+posting will not have an effect.
+
+
+<sect2>postpone<label id="postpone">
+<p>
+Type: quadoption<newline>
+Default: ask-yes
+
+<p>
+Controls whether or not messages are saved in the ``<ref id="postponed" name="&dollar;postponed">''
+mailbox when you elect not to send immediately.
+
+
+<sect2>postponed<label id="postponed">
+<p>
+Type: path<newline>
+Default: &dquot;&tilde;/postponed&dquot;
+
+<p>
+Mutt allows you to indefinitely ``<ref id="postpone" name="postpone"> sending a message'' which
+you are editing.  When you choose to postpone a message, Mutt saves it
+in the mailbox specified by this variable.  Also see the ``<ref id="postpone" name="&dollar;postpone">''
+variable.
+
+
+<sect2>preconnect<label id="preconnect">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+If set, a shell command to be executed if mutt fails to establish
+a connection to the server. This is useful for setting up secure
+connections, e.g. with ssh(1). If the command returns a  nonzero
+status, mutt gives up opening the server. Example:
+<p>
+preconnect=&dquot;ssh -f -q -L 1234:mailhost.net:143 mailhost.net
+sleep 20 &lt; /dev/null &gt; /dev/null&dquot;
+<p>
+Mailbox 'foo' on mailhost.net can now be reached
+as '{localhost:1234}foo'.
+<p>
+NOTE: For this example to work, you must be able to log in to the
+remote machine without having to enter a password.
+
+
+<sect2>print<label id="print">
+<p>
+Type: quadoption<newline>
+Default: ask-no
+
+<p>
+Controls whether or not Mutt asks for confirmation before printing.
+This is useful for people (like me) who accidentally hit ``p'' often.
+
+
+<sect2>print&lowbar;command<label id="print_command">
+<p>
+Type: path<newline>
+Default: &dquot;lpr&dquot;
+
+<p>
+This specifies the command pipe that should be used to print messages.
+
+
+<sect2>print&lowbar;decode<label id="print_decode">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+Used in connection with the print-message command.  If this
+option is set, the message is decoded before it is passed to the
+external command specified by <ref id="print_command" name="&dollar;print&lowbar;command">.  If this option
+is unset, no processing will be applied to the message when
+printing it.  The latter setting may be useful if you are using
+some advanced printer filter which is able to properly format
+e-mail messages for printing.
+
+
+<sect2>print&lowbar;split<label id="print_split">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+Used in connection with the print-message command.  If this option
+is set, the command specified by <ref id="print_command" name="&dollar;print&lowbar;command"> is executed once for
+each message which is to be printed.  If this option is unset, 
+the command specified by <ref id="print_command" name="&dollar;print&lowbar;command"> is executed only once, and
+all the messages are concatenated, with a form feed as the message
+separator.
+<p>
+Those who use the <bf>enscript</bf>(1) program's mail-printing mode will
+most likely want to set this option.
+
+
+<sect2>prompt&lowbar;after<label id="prompt_after">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If you use an <em>external</em> ``<ref id="pager" name="&dollar;pager">'', setting this variable will
+cause Mutt to prompt you for a command when the pager exits rather
+than returning to the index menu.  If unset, Mutt will return to the
+index menu when the external pager exits.
+
+
+<sect2>query&lowbar;command<label id="query_command">
+<p>
+Type: path<newline>
+Default: &dquot;&dquot;
+
+<p>
+This specifies the command that mutt will use to make external address
+queries.  The string should contain a &percnt;s, which will be substituted
+with the query string the user types.  See ``<ref id="query" name="query">'' for more
+information.
+
+
+<sect2>quit<label id="quit">
+<p>
+Type: quadoption<newline>
+Default: yes
+
+<p>
+This variable controls whether ``quit'' and ``exit'' actually quit
+from mutt.  If it set to yes, they do quit, if it is set to no, they
+have no effect, and if it is set to ask-yes or ask-no, you are
+prompted for confirmation when you try to quit.
+
+
+<sect2>quote&lowbar;empty<label id="quote_empty">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+Controls whether or not empty lines will be quoted using
+``<ref id="indent_string" name="indent&lowbar;string">''.
+
+
+<sect2>quote&lowbar;quoted<label id="quote_quoted">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+Controls how quoted lines will be quoted. If set, one quote
+character will be added to the end of existing prefix.  Otherwise,
+quoted lines will be prepended by ``<ref id="indent_string" name="indent&lowbar;string">''.
+
+
+<sect2>quote&lowbar;regexp<label id="quote_regexp">
+<p>
+Type: regular expression<newline>
+Default: &dquot;^(&lsqb; &bsol;t&rsqb;*&lsqb;|&gt;:}#&rsqb;)+&dquot;
+
+<p>
+A regular expression used in the internal-pager to determine quoted
+sections of text in the body of a message.
+<p>
+<bf>Note:</bf> In order to use the <em>quoted</em><bf>x</bf> patterns in the
+internal pager, you need to set this to a regular expression that
+matches <em>exactly</em> the quote characters at the beginning of quoted
+lines.
+
+
+<sect2>read&lowbar;inc<label id="read_inc">
+<p>
+Type: number<newline>
+Default: 10
+
+<p>
+If set to a value greater than 0, Mutt will display which message it
+is currently on when reading a mailbox.  The message is printed after
+<em>read&lowbar;inc</em> messages have been read (e.g., if set to 25, Mutt will
+print a message when it reads message 25, and then again when it gets
+to message 50).  This variable is meant to indicate progress when
+reading large mailboxes which may take some time.
+When set to 0, only a single message will appear before the reading
+the mailbox.
+<p>
+Also see the ``<ref id="write_inc" name="&dollar;write&lowbar;inc">'' variable.
+
+
+<sect2>read&lowbar;only<label id="read_only">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set, all folders are opened in read-only mode.
+
+
+<sect2>realname<label id="realname">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+This variable specifies what &dquot;real&dquot; or &dquot;personal&dquot; name should be used
+when sending messages.
+<p>
+By default, this is the GECOS field from /etc/passwd.  Note that this
+variable will <em>not</em> be used when the user has set a real name
+in the <ref id="from" name="&dollar;from"> variable.
+
+
+<sect2>recall<label id="recall">
+<p>
+Type: quadoption<newline>
+Default: ask-yes
+
+<p>
+Controls whether or not you are prompted to recall postponed messages
+when composing a new message.  Also see ``<ref id="postponed" name="&dollar;postponed">''.
+<p>
+Setting this variable to ``yes'' is not generally useful, and thus not
+recommended.
+
+
+<sect2>record<label id="record">
+<p>
+Type: path<newline>
+Default: &dquot;&dquot;
+
+<p>
+This specifies the file into which your outgoing messages should be
+appended.  (This is meant as the primary method for saving a copy of
+your messages, but another way to do this is using the ``<ref id="my_hdr" name="my&lowbar;hdr">''
+command to create a <em>Bcc:</em> field with your email address in it.)
+<p>
+The value of <em><ref id="record" name="&dollar;record"></em> is overridden by the ``<ref id="force_name" name="&dollar;force&lowbar;name">'' and
+``<ref id="save_name" name="&dollar;save&lowbar;name">'' variables, and the ``<ref id="fcc-hook" name="fcc-hook">'' command.
+
+
+<sect2>reply&lowbar;regexp<label id="reply_regexp">
+<p>
+Type: regular expression<newline>
+Default: &dquot;^(re(&lsqb;&bsol;&lsqb;0-9&bsol;&rsqb;+&rsqb;)*|aw):&lsqb; &bsol;t&rsqb;*&dquot;
+
+<p>
+A regular expression used to recognize reply messages when threading
+and replying. The default value corresponds to the English &dquot;Re:&dquot; and
+the German &dquot;Aw:&dquot;.
+
+
+<sect2>reply&lowbar;self<label id="reply_self">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If unset and you are replying to a message sent by you, Mutt will
+assume that you want to reply to the recipients of that message rather
+than to yourself.
+
+
+<sect2>reply&lowbar;to<label id="reply_to">
+<p>
+Type: quadoption<newline>
+Default: ask-yes
+
+<p>
+If set, Mutt will ask you if you want to use the address listed in the
+Reply-To: header field when replying to a message.  If you answer no,
+it will use the address in the From: header field instead.  This
+option is useful for reading a mailing list that sets the Reply-To:
+header field to the list address and you want to send a private
+message to the author of a message.
+
+
+<sect2>resolve<label id="resolve">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When set, the cursor will be automatically advanced to the next
+(possibly undeleted) message whenever a command that modifies the
+current message is executed.
+
+
+<sect2>reverse&lowbar;alias<label id="reverse_alias">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+This variable controls whether or not Mutt will display the &dquot;personal&dquot;
+name from your aliases in the index menu if it finds an alias that
+matches the message's sender.  For example, if you have the following
+alias:
+<p>
+
+<tscreen><verb>
+alias juser abd30425@somewhere.net (Joe User)
+
+</verb></tscreen><p>
+and then you receive mail which contains the following header:
+<p>
+
+<tscreen><verb>
+From: abd30425@somewhere.net
+
+</verb></tscreen><p>
+It would be displayed in the index menu as ``Joe User'' instead of
+``abd30425@somewhere.net.''  This is useful when the person's e-mail
+address is not human friendly (like CompuServe addresses).
+
+
+<sect2>reverse&lowbar;name<label id="reverse_name">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+It may sometimes arrive that you receive mail to a certain machine,
+move the messages to another machine, and reply to some the messages
+from there.  If this variable is set, the default <em>From:</em> line of
+the reply messages is built using the address where you received the
+messages you are replying to.  If the variable is unset, the
+<em>From:</em> line will use your address on the current machine.
+
+
+<sect2>reverse&lowbar;realname<label id="reverse_realname">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+This variable fine-tunes the behaviour of the <ref id="reverse_name" name="reverse&lowbar;name"> feature.
+When it is set, mutt will use the address from incoming messages as-is,
+possibly including eventual real names.  When it is unset, mutt will
+override any such real names with the setting of the <ref id="realname" name="realname"> variable.
+
+
+<sect2>rfc2047&lowbar;parameters<label id="rfc2047_parameters">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When this variable is set, Mutt will decode RFC-2047-encoded MIME 
+parameters. You want to set this variable when mutt suggests you
+to save attachments to files named like this: 
+=?iso-8859-1?Q?file=5F=E4=5F991116=2Ezip?=
+<p>
+When this variable is set interactively, the change doesn't have
+the desired effect before you have changed folders.
+<p>
+Note that this use of RFC 2047's encoding is explicitly,
+prohibited by the standard, but nevertheless encountered in the
+wild.
+Also note that setting this parameter will <em>not</em> have the effect 
+that mutt <em>generates</em> this kind of encoding.  Instead, mutt will
+unconditionally use the encoding specified in RFC 2231.
+
+
+<sect2>save&lowbar;address<label id="save_address">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set, mutt will take the sender's full address when choosing a
+default folder for saving a mail. If ``<ref id="save_name" name="&dollar;save&lowbar;name">'' or ``<ref id="force_name" name="&dollar;force&lowbar;name">''
+is set too, the selection of the fcc folder will be changed as well.
+
+
+<sect2>save&lowbar;empty<label id="save_empty">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When unset, mailboxes which contain no saved messages will be removed
+when closed (the exception is ``<ref id="spoolfile" name="&dollar;spoolfile">'' which is never removed).
+If set, mailboxes are never removed.
+<p>
+<bf>Note:</bf> This only applies to mbox and MMDF folders, Mutt does not
+delete MH and Maildir directories.
+
+
+<sect2>save&lowbar;name<label id="save_name">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+This variable controls how copies of outgoing messages are saved.
+When set, a check is made to see if a mailbox specified by the
+recipient address exists (this is done by searching for a mailbox in
+the ``<ref id="folder" name="&dollar;folder">'' directory with the <em>username</em> part of the
+recipient address).  If the mailbox exists, the outgoing message will
+be saved to that mailbox, otherwise the message is saved to the
+``<ref id="record" name="&dollar;record">'' mailbox.
+<p>
+Also see the ``<ref id="force_name" name="&dollar;force&lowbar;name">'' variable.
+
+
+<sect2>score<label id="score">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When this variable is <em>unset</em>, scoring is turned off.  This can
+be useful to selectively disable scoring for certain folders when the
+``<ref id="score_threshold_delete" name="&dollar;score&lowbar;threshold&lowbar;delete">'' variable and friends are used.
+
+
+<sect2>score&lowbar;threshold&lowbar;delete<label id="score_threshold_delete">
+<p>
+Type: number<newline>
+Default: -1
+
+<p>
+Messages which have been assigned a score equal to or lower than the value
+of this variable are automatically marked for deletion by mutt.  Since
+mutt scores are always greater than or equal to zero, the default setting
+of this variable will never mark a message for deletion.
+
+
+<sect2>score&lowbar;threshold&lowbar;flag<label id="score_threshold_flag">
+<p>
+Type: number<newline>
+Default: 9999
+
+<p>
+Messages which have been assigned a score greater than or equal to this 
+variable's value are automatically marked &dquot;flagged&dquot;.
+
+
+<sect2>score&lowbar;threshold&lowbar;read<label id="score_threshold_read">
+<p>
+Type: number<newline>
+Default: -1
+
+<p>
+Messages which have been assigned a score equal to or lower than the value
+of this variable are automatically marked as read by mutt.  Since
+mutt scores are always greater than or equal to zero, the default setting
+of this variable will never mark a message read.
+
+
+<sect2>send&lowbar;charset<label id="send_charset">
+<p>
+Type: string<newline>
+Default: &dquot;us-ascii:iso-8859-1:utf-8&dquot;
+
+<p>
+A list of character sets for outgoing messages. Mutt will use the
+first character set into which the text can be converted exactly.
+If your ``<ref id="charset" name="&dollar;charset">'' is not iso-8859-1 and recipients may not
+understand UTF-8, it is advisable to include in the list an
+appropriate widely used standard character set (such as
+iso-8859-2, koi8-r or iso-2022-jp) either instead of or after
+&dquot;iso-8859-1&dquot;.
+
+
+<sect2>sendmail<label id="sendmail">
+<p>
+Type: path<newline>
+Default: &dquot;/sw/sbin/sendmail -oem -oi&dquot;
+
+<p>
+Specifies the program and arguments used to deliver mail sent by Mutt.
+Mutt expects that the specified program interprets additional
+arguments as recipient addresses.
+
+
+<sect2>sendmail&lowbar;wait<label id="sendmail_wait">
+<p>
+Type: number<newline>
+Default: 0
+
+<p>
+Specifies the number of seconds to wait for the ``<ref id="sendmail" name="&dollar;sendmail">'' process
+to finish before giving up and putting delivery in the background.
+<p>
+Mutt interprets the value of this variable as follows:
+
+<descrip>
+<tag>&gt;0 </tag>number of seconds to wait for sendmail to finish before continuing
+<tag>0  </tag>wait forever for sendmail to finish
+<tag>&lt;0 </tag>always put sendmail in the background without waiting
+</descrip>
+
+<p>
+Note that if you specify a value other than 0, the output of the child
+process will be put in a temporary file.  If there is some error, you
+will be informed as to where to find the output.
+
+
+<sect2>shell<label id="shell">
+<p>
+Type: path<newline>
+Default: &dquot;&dquot;
+
+<p>
+Command to use when spawning a subshell.  By default, the user's login
+shell from /etc/passwd is used.
+
+
+<sect2>save&lowbar;unsubscribed<label id="save_unsubscribed">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When <em>set</em>, info about unsubscribed newsgroups will be saved into
+``newsrc'' file and into cache.
+
+
+<sect2>show&lowbar;new&lowbar;news<label id="show_new_news">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If <em>set</em>, newsserver will be asked for new newsgroups on entering
+the browser.  Otherwise, it will be done only once for a newsserver.
+Also controls whether or not number of new articles of subscribed
+newsgroups will be then checked.
+
+
+<sect2>show&lowbar;only&lowbar;unread<label id="show_only_unread">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If <em>set</em>, only subscribed newsgroups that contain unread articles
+will be displayed in browser.
+
+
+<sect2>sig&lowbar;dashes<label id="sig_dashes">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If set, a line containing ``-- '' will be inserted before your
+``<ref id="signature" name="&dollar;signature">''.  It is <bf>strongly</bf> recommended that you not unset
+this variable unless your ``signature'' contains just your name.  The
+reason for this is because many software packages use ``-- &bsol;n'' to
+detect your signature.  For example, Mutt has the ability to highlight
+the signature in a different color in the builtin pager.
+
+
+<sect2>sig&lowbar;on&lowbar;top<label id="sig_on_top">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set, the signature will be included before any quoted or forwarded
+text.  It is <bf>strongly</bf> recommended that you do not set this variable
+unless you really know what you are doing, and are prepared to take
+some heat from netiquette guardians.
+
+
+<sect2>signature<label id="signature">
+<p>
+Type: path<newline>
+Default: &dquot;&tilde;/.signature&dquot;
+
+<p>
+Specifies the filename of your signature, which is appended to all
+outgoing messages.   If the filename ends with a pipe (``|''), it is
+assumed that filename is a shell command and input should be read from
+its stdout.
+
+
+<sect2>simple&lowbar;search<label id="simple_search">
+<p>
+Type: string<newline>
+Default: &dquot;&tilde;f &percnt;s | &tilde;s &percnt;s&dquot;
+
+<p>
+Specifies how Mutt should expand a simple search into a real search
+pattern.  A simple search is one that does not contain any of the &tilde;
+operators.  See ``<ref id="patterns" name="patterns">'' for more information on search patterns.
+<p>
+For example, if you simply type joe at a search or limit prompt, Mutt
+will automatically expand it to the value specified by this variable.
+For the default value it would be:
+<p>
+&tilde;f joe | &tilde;s joe
+
+
+<sect2>smart&lowbar;wrap<label id="smart_wrap">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+Controls the display of lines longer than the screen width in the
+internal pager. If set, long lines are wrapped at a word boundary.  If
+unset, lines are simply wrapped at the screen edge. Also see the
+``<ref id="markers" name="&dollar;markers">'' variable.
+
+
+<sect2>smileys<label id="smileys">
+<p>
+Type: regular expression<newline>
+Default: &dquot;(&gt;From )|(:&lsqb;-^&rsqb;?&lsqb;&rsqb;&lsqb;)(&gt;&lt;}{|/DP&rsqb;)&dquot;
+
+<p>
+The <em>pager</em> uses this variable to catch some common false
+positives of ``<ref id="quote_regexp" name="&dollar;quote&lowbar;regexp">'', most notably smileys in the beginning
+of a line
+
+
+<sect2>sleep&lowbar;time<label id="sleep_time">
+<p>
+Type: number<newline>
+Default: 1
+
+<p>
+Specifies time, in seconds, to pause while displaying certain informational
+messages, while moving from folder to folder and after expunging
+messages from the current folder.  The default is to pause one second, so 
+a value of zero for this option suppresses the pause.
+
+
+<sect2>sort<label id="sort">
+<p>
+Type: sort order<newline>
+Default: date
+
+<p>
+Specifies how to sort messages in the <em>index</em> menu.  Valid values
+are:
+<p>
+
+<tscreen><verb>
+   date or date-sent
+   date-received
+   from
+   mailbox-order (unsorted)
+   score
+   size
+   subject
+   threads
+   to
+
+</verb></tscreen><p>
+You may optionally use the reverse- prefix to specify reverse sorting
+order (example: set sort=reverse-date-sent).
+
+
+<sect2>sort&lowbar;alias<label id="sort_alias">
+<p>
+Type: sort order<newline>
+Default: alias
+
+<p>
+Specifies how the entries in the `alias' menu are sorted.  The
+following are legal values:
+<p>
+
+<tscreen><verb>
+   address (sort alphabetically by email address)
+   alias (sort alphabetically by alias name)
+   unsorted (leave in order specified in .muttrc)
+
+</verb></tscreen>
+
+<sect2>sort&lowbar;aux<label id="sort_aux">
+<p>
+Type: sort order<newline>
+Default: date
+
+<p>
+When sorting by threads, this variable controls how threads are sorted
+in relation to other threads, and how the branches of the thread trees
+are sorted.  This can be set to any value that ``<ref id="sort" name="&dollar;sort">'' can, except
+threads (in that case, mutt will just use date-sent).  You can also
+specify the last- prefix in addition to the reverse- prefix, but last-
+must come after reverse-.  The last- prefix causes messages to be
+sorted against its siblings by which has the last descendant, using
+the rest of sort&lowbar;aux as an ordering.  For instance, set sort&lowbar;aux=last-
+date-received would mean that if a new message is received in a
+thread, that thread becomes the last one displayed (or the first, if
+you have set sort=reverse-threads.) Note: For reversed ``<ref id="sort" name="&dollar;sort">''
+order <ref id="sort_aux" name="&dollar;sort&lowbar;aux"> is reversed again (which is not the right thing to do,
+but kept to not break any existing configuration setting).
+
+
+<sect2>sort&lowbar;browser<label id="sort_browser">
+<p>
+Type: sort order<newline>
+Default: subject
+
+<p>
+Specifies how to sort entries in the file browser.  By default, the
+entries are sorted alphabetically.  Valid values:
+<p>
+
+<tscreen><verb>
+   alpha (alphabetically)
+   date
+   size
+   unsorted
+
+</verb></tscreen><p>
+You may optionally use the reverse- prefix to specify reverse sorting
+order (example: set sort&lowbar;browser=reverse-date).
+
+
+<sect2>sort&lowbar;re<label id="sort_re">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+This variable is only useful when sorting by threads with
+``<ref id="strict_threads" name="&dollar;strict&lowbar;threads">'' unset.  In that case, it changes the heuristic
+mutt uses to thread messages by subject.  With sort&lowbar;re set, mutt will
+only attach a message as the child of another message by subject if
+the subject of the child message starts with a substring matching the
+setting of ``<ref id="reply_regexp" name="&dollar;reply&lowbar;regexp">''.  With sort&lowbar;re unset, mutt will attach
+the message whether or not this is the case, as long as the
+non-``<ref id="reply_regexp" name="&dollar;reply&lowbar;regexp">'' parts of both messages are identical.
+
+
+<sect2>spoolfile<label id="spoolfile">
+<p>
+Type: path<newline>
+Default: &dquot;&dquot;
+
+<p>
+If your spool mailbox is in a non-default place where Mutt cannot find
+it, you can specify its location with this variable.  Mutt will
+automatically set this variable to the value of the environment
+variable &dollar;MAIL if it is not set.
+
+
+<sect2>status&lowbar;chars<label id="status_chars">
+<p>
+Type: string<newline>
+Default: &dquot;-*&percnt;A&dquot;
+
+<p>
+Controls the characters used by the &dquot;&percnt;r&dquot; indicator in
+``<ref id="status_format" name="&dollar;status&lowbar;format">''. The first character is used when the mailbox is
+unchanged. The second is used when the mailbox has been changed, and
+it needs to be resynchronized. The third is used if the mailbox is in
+read-only mode, or if the mailbox will not be written when exiting
+that mailbox (You can toggle whether to write changes to a mailbox
+with the toggle-write operation, bound by default to &dquot;&percnt;&dquot;). The fourth
+is used to indicate that the current folder has been opened in attach-
+message mode (Certain operations like composing a new mail, replying,
+forwarding, etc. are not permitted in this mode).
+
+
+<sect2>status&lowbar;format<label id="status_format">
+<p>
+Type: string<newline>
+Default: &dquot;-&percnt;r-Mutt: &percnt;f &lsqb;Msgs:&percnt;?M?&percnt;M/?&percnt;m&percnt;?n? New:&percnt;n?&percnt;?o? Old:&percnt;o?&percnt;?d? Del:&percnt;d?&percnt;?F? Flag:&percnt;F?&percnt;?t? Tag:&percnt;t?&percnt;?p? Post:&percnt;p?&percnt;?b? Inc:&percnt;b?&percnt;?l? &percnt;l?&rsqb;---(&percnt;s/&percnt;S)-&percnt;&gt;-(&percnt;P)---&dquot;
+
+<p>
+Controls the format of the status line displayed in the <em>index</em>
+menu.  This string is similar to ``<ref id="index_format" name="&dollar;index&lowbar;format">'', but has its own
+set of printf()-like sequences:
+<p>
+
+<descrip>
+<tag>&percnt;b  </tag>number of mailboxes with new mail *
+<tag>&percnt;d  </tag>number of deleted messages *
+<tag>&percnt;f  </tag>the full pathname of the current mailbox
+<tag>&percnt;F  </tag>number of flagged messages *
+<tag>&percnt;h  </tag>local hostname
+<tag>&percnt;l  </tag>size (in bytes) of the current mailbox *
+<tag>&percnt;L  </tag>size (in bytes) of the messages shown 
+(i.e., which match the current limit) *
+<tag>&percnt;m  </tag>the number of messages in the mailbox *
+<tag>&percnt;M  </tag>the number of messages shown (i.e., which match the current limit) *
+<tag>&percnt;n  </tag>number of new messages in the mailbox *
+<tag>&percnt;o  </tag>number of old unread messages
+<tag>&percnt;p  </tag>number of postponed messages *
+<tag>&percnt;P  </tag>percentage of the way through the index
+<tag>&percnt;r  </tag>modified/read-only/won't-write/attach-message indicator,
+according to <ref id="status_chars" name="&dollar;status&lowbar;chars">
+<tag>&percnt;s  </tag>current sorting mode (<ref id="sort" name="&dollar;sort">)
+<tag>&percnt;S  </tag>current aux sorting method (<ref id="sort_aux" name="&dollar;sort&lowbar;aux">)
+<tag>&percnt;t  </tag>number of tagged messages *
+<tag>&percnt;u  </tag>number of unread messages *
+<tag>&percnt;v  </tag>Mutt version string
+<tag>&percnt;V  </tag>currently active limit pattern, if any *
+<tag>&percnt;&gt;X </tag>right justify the rest of the string and pad with &dquot;X&dquot;
+<tag>&percnt;|X </tag>pad to the end of the line with &dquot;X&dquot;
+</descrip>
+
+<p>
+* = can be optionally printed if nonzero
+<p>
+Some of the above sequences can be used to optionally print a string
+if their value is nonzero.  For example, you may only want to see the
+number of flagged messages if such messages exist, since zero is not
+particularly meaningful.  To optionally print a string based upon one
+of the above sequences, the following construct is used
+<p>
+&percnt;?&lt;sequence&lowbar;char&gt;?&lt;optional&lowbar;string&gt;?
+<p>
+where <em>sequence&lowbar;char</em> is a character from the table above, and
+<em>optional&lowbar;string</em> is the string you would like printed if
+<em>status&lowbar;char</em> is nonzero.  <em>optional&lowbar;string</em> <bf>may</bf> contain
+other sequence as well as normal text, but you may <bf>not</bf> nest
+optional strings.
+<p>
+Here is an example illustrating how to optionally print the number of
+new messages in a mailbox:
+&percnt;?n?&percnt;n new messages.?
+<p>
+Additionally you can switch between two strings, the first one, if a
+value is zero, the second one, if the value is nonzero, by using the
+following construct:
+&percnt;?&lt;sequence&lowbar;char&gt;?&lt;if&lowbar;string&gt;&amp;&lt;else&lowbar;string&gt;?
+<p>
+You can additionally force the result of any printf-like sequence to
+be lowercase by prefixing the sequence character with an underscore
+(&lowbar;) sign.  For example, if you want to display the local hostname in
+lowercase, you would use:
+&percnt;&lowbar;h
+<p>
+If you prefix the sequence character with a colon (:) character, mutt
+will replace any dots in the expansion by underscores. This might be helpful 
+with IMAP folders that don't like dots in folder names.
+
+
+<sect2>status&lowbar;on&lowbar;top<label id="status_on_top">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+Setting this variable causes the ``status bar'' to be displayed on
+the first line of the screen rather than near the bottom.
+
+
+<sect2>strict&lowbar;threads<label id="strict_threads">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If set, threading will only make use of the ``In-Reply-To'' and
+``References'' fields when you ``<ref id="sort" name="&dollar;sort">'' by message threads.  By
+default, messages with the same subject are grouped together in
+``pseudo threads.''  This may not always be desirable, such as in a
+personal mailbox where you might have several unrelated messages with
+the subject ``hi'' which will get grouped together.
+
+
+<sect2>suspend<label id="suspend">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When <em>unset</em>, mutt won't stop when the user presses the terminal's
+<em>susp</em> key, usually ``control-Z''. This is useful if you run mutt
+inside an xterm using a command like xterm -e mutt.
+
+
+<sect2>text&lowbar;flowed<label id="text_flowed">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When set, mutt will generate text/plain; format=flowed attachments.
+This format is easier to handle for some mailing software, and generally
+just looks like ordinary text.  To actually make use of this format's 
+features, you'll need support in your editor.
+<p>
+Note that <ref id="indent_string" name="&dollar;indent&lowbar;string"> is ignored when this option is set.
+
+
+<sect2>thread&lowbar;received<label id="thread_received">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When set, mutt uses the date received rather than the date sent
+to thread messages by subject.
+
+
+<sect2>thorough&lowbar;search<label id="thorough_search">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+Affects the <em>&tilde;b</em> and <em>&tilde;h</em> search operations described in
+section ``<ref id="patterns" name="patterns">'' above.  If set, the headers and attachments of
+messages to be searched are decoded before searching.  If unset,
+messages are searched as they appear in the folder.
+
+
+<sect2>tilde<label id="tilde">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+When set, the internal-pager will pad blank lines to the bottom of the
+screen with a tilde (&tilde;).
+
+
+<sect2>timeout<label id="timeout">
+<p>
+Type: number<newline>
+Default: 600
+
+<p>
+This variable controls the <em>number of seconds</em> Mutt will wait
+for a key to be pressed in the main menu before timing out and
+checking for new mail.  A value of zero or less will cause Mutt
+to never time out.
+
+
+<sect2>tmpdir<label id="tmpdir">
+<p>
+Type: path<newline>
+Default: &dquot;&dquot;
+
+<p>
+This variable allows you to specify where Mutt will place its
+temporary files needed for displaying and composing messages.  If
+this variable is not set, the environment variable TMPDIR is
+used.  If TMPDIR is not set then &dquot;/tmp&dquot; is used.
+
+
+<sect2>to&lowbar;chars<label id="to_chars">
+<p>
+Type: string<newline>
+Default: &dquot; +TCFL&dquot;
+
+<p>
+Controls the character used to indicate mail addressed to you.  The
+first character is the one used when the mail is NOT addressed to your
+address (default: space).  The second is used when you are the only
+recipient of the message (default: +).  The third is when your address
+appears in the TO header field, but you are not the only recipient of
+the message (default: T).  The fourth character is used when your
+address is specified in the CC header field, but you are not the only
+recipient.  The fifth character is used to indicate mail that was sent
+by <em>you</em>.  The sixth character is used to indicate when a mail
+was sent to a mailing-list you subscribe to (default: L).
+
+
+<sect2>trash<label id="trash">
+<p>
+Type: path<newline>
+Default: &dquot;&dquot;
+
+<p>
+If set, this variable specifies the path of the trash folder where the
+mails marked for deletion will be moved, instead of being irremediably
+purged.
+<p>
+NOTE: When you delete a message in the trash folder, it is really
+deleted, so that you have a way to clean the trash.
+
+
+<sect2>tunnel<label id="tunnel">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+Setting this variable will cause mutt to open a pipe to a command
+instead of a raw socket. You may be able to use this to set up
+preauthenticated connections to your IMAP/POP3 server. Example:
+<p>
+tunnel=&dquot;ssh -q mailhost.net /usr/local/libexec/imapd&dquot;
+<p>
+NOTE: For this example to work you must be able to log in to the remote
+machine without having to enter a password.
+
+
+<sect2>use&lowbar;8bitmime<label id="use_8bitmime">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+<bf>Warning:</bf> do not set this variable unless you are using a version
+of sendmail which supports the -B8BITMIME flag (such as sendmail
+8.8.x) or you may not be able to send mail.
+<p>
+When <em>set</em>, Mutt will invoke ``<ref id="sendmail" name="&dollar;sendmail">'' with the -B8BITMIME
+flag when sending 8-bit messages to enable ESMTP negotiation.
+
+
+<sect2>use&lowbar;domain<label id="use_domain">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When set, Mutt will qualify all local addresses (ones without the
+@host portion) with the value of ``<ref id="hostname" name="&dollar;hostname">''.  If <em>unset</em>, no
+addresses will be qualified.
+
+
+<sect2>use&lowbar;from<label id="use_from">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When <em>set</em>, Mutt will generate the `From:' header field when
+sending messages.  If <em>unset</em>, no `From:' header field will be
+generated unless the user explicitly sets one using the ``<ref id="my_hdr" name="my&lowbar;hdr">''
+command.
+
+
+<sect2>use&lowbar;ipv6<label id="use_ipv6">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When <em>set</em>, Mutt will look for IPv6 addresses of hosts it tries to
+contact.  If this option is unset, Mutt will restrict itself to IPv4 addresses.
+Normally, the default should work.
+
+
+<sect2>user&lowbar;agent<label id="user_agent">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When <em>set</em>, mutt will add a &dquot;User-Agent&dquot; header to outgoing
+messages, indicating which version of mutt was used for composing
+them.
+
+
+<sect2>visual<label id="visual">
+<p>
+Type: path<newline>
+Default: &dquot;&dquot;
+
+<p>
+Specifies the visual editor to invoke when the <em>&tilde;v</em> command is
+given in the builtin editor.
+
+
+<sect2>wait&lowbar;key<label id="wait_key">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+Controls whether Mutt will ask you to press a key after <em>shell-
+escape</em>, <em>pipe-message</em>, <em>pipe-entry</em>, <em>print-message</em>,
+and <em>print-entry</em> commands.
+<p>
+It is also used when viewing attachments with ``<ref id="auto_view" name="auto&lowbar;view">'', provided
+that the corresponding mailcap entry has a <em>needsterminal</em> flag,
+and the external program is interactive.
+<p>
+When set, Mutt will always ask for a key. When unset, Mutt will wait
+for a key only if the external command returned a non-zero status.
+
+
+<sect2>weed<label id="weed">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When set, mutt will weed headers when when displaying, forwarding,
+printing, or replying to messages.
+
+
+<sect2>wrap&lowbar;search<label id="wrap_search">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+Controls whether searches wrap around the end of the mailbox.
+<p>
+When set, searches will wrap around the first (or last) message. When
+unset, searches will not wrap.
+
+
+<sect2>wrapmargin<label id="wrapmargin">
+<p>
+Type: number<newline>
+Default: 0
+
+<p>
+Controls the size of the margin remaining at the right side of
+the terminal when mutt's pager does smart wrapping.
+
+
+<sect2>write&lowbar;inc<label id="write_inc">
+<p>
+Type: number<newline>
+Default: 10
+
+<p>
+When writing a mailbox, a message will be printed every
+<em>write&lowbar;inc</em> messages to indicate progress.  If set to 0, only a
+single message will be displayed before writing a mailbox.
+<p>
+Also see the ``<ref id="read_inc" name="&dollar;read&lowbar;inc">'' variable.
+
+
+<sect2>write&lowbar;bcc<label id="write_bcc">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+Controls whether mutt writes out the Bcc header when preparing
+messages to be sent.  Exim users may wish to use this.
+
+
+<sect2>x&lowbar;comment&lowbar;to<label id="x_comment_to">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+If <em>set</em>, Mutt will add ``X-Comment-To:'' field (that contains full
+name of original article author) to article that followuped to newsgroup.
+
+
+<sect1>Functions<label id="functions">
+<p>
+The following is the list of available functions listed by the mapping
+in which they are available.  The default key setting is given, and an
+explanation of what the function does.  The key bindings of these
+functions can be changed with the <ref name="bind" id="bind">
+command.
+
+<sect2>generic
+<p>
+
+The <em/generic/ menu is not a real menu, but specifies common functions
+(such as movement) available in all menus except for <em/pager/ and
+<em/editor/.  Changing settings for this menu will affect the default
+bindings for all menus (except as noted).
+
+<verb>
+bottom-page                L   move to the bottom of the page
+current-bottom     not bound   move current entry to bottom of page
+current-middle     not bound   move current entry to middle of page
+current-top        not bound   move current entry to top of page
+enter-command              :   enter a muttrc command
+exit                       q   exit this menu
+first-entry                =   move to the first entry
+half-down                  ]   scroll down 1/2 page
+half-up                    [   scroll up 1/2 page
+help                       ?   this screen
+jump                  number   jump to an index number
+last-entry                 *   move to the last entry
+middle-page                M   move to the middle of the page
+next-entry                 j   move to the next entry
+next-line                  >   scroll down one line
+next-page                  z   move to the next page
+previous-entry             k   move to the previous entry
+previous-line              <   scroll up one line
+previous-page              Z   move to the previous page
+refresh                   ^L   clear and redraw the screen
+search                     /   search for a regular expression
+search-next                n   search for next match
+search-opposite    not bound   search for next match in opposite direction
+search-reverse         ESC /   search backwards for a regular expression
+select-entry             RET   select the current entry
+shell-escape               !   run a program in a subshell
+tag-entry                  t   toggle the tag on the current entry
+tag-prefix                 ;   apply next command to tagged entries
+top-page                   H   move to the top of the page
+</verb>
+<sect2>index
+<p>
+<verb>
+bounce-message             b   remail a message to another user
+change-folder              c   open a different folder
+change-folder-readonly ESC c   open a different folder in read only mode
+check-traditional-pgp  ESC P   check for classic pgp
+clear-flag                 W   clear a status flag from a message
+copy-message               C   copy a message to a file/mailbox
+create-alias               a   create an alias from a message sender
+decode-copy            ESC C   decode a message and copy it to a file/mailbox
+decode-save            ESC s   decode a message and save it to a file/mailbox
+delete-message             d   delete the current entry
+delete-pattern             D   delete messages matching a pattern
+delete-subthread       ESC d   delete all messages in subthread
+delete-thread             ^D   delete all messages in thread
+display-address            @   display full address of sender
+display-toggle-weed        h   display message and toggle header weeding
+display-message          RET   display a message
+edit                       e   edit the current message
+edit-type                 ^E   edit the current message's Content-Type
+exit                       x   exit without saving changes
+extract-keys              ^K   extract PGP public keys
+fetch-mail                 G   retrieve mail from POP server
+flag-message               F   toggle a message's 'important' flag
+forget-passphrase         ^F   wipe PGP passphrase from memory
+forward-message            f   forward a message with comments
+group-reply                g   reply to all recipients
+limit                      l   show only messages matching a pattern
+list-reply                 L   reply to specified mailing list
+mail                       m   compose a new mail message
+mail-key               ESC k   mail a PGP public key
+next-new                 TAB   jump to the next new message
+next-subthread         ESC n   jump to the next subthread
+next-thread               ^N   jump to the next thread
+next-undeleted             j   move to the next undeleted message
+next-unread        not bound   jump to the next unread message
+parent-message             P   jump to parent message in thread
+pipe-message               |   pipe message/attachment to a shell command
+previous-new         ESC TAB   jump to the previous new message
+previous-page              Z   move to the previous page
+previous-subthread     ESC p   jump to previous subthread
+previous-thread           ^P   jump to previous thread
+previous-undeleted         k   move to the last undelete message
+previous-unread    not bound   jump to the previous unread message
+print-message              p   print the current entry
+query                      Q   query external program for addresses
+quit                       q   save changes to mailbox and quit
+read-subthread         ESC r   mark the current subthread as read
+read-thread               ^R   mark the current thread as read
+recall-message             R   recall a postponed message
+reply                      r   reply to a message
+resend-message         ESC e   resend message and preserve MIME structure
+save-message               s   save message/attachment to a file
+set-flag                   w   set a status flag on a message
+show-version               V   show the Mutt version number and date
+show-limit             ESC l   show currently active limit pattern, if any
+sort-mailbox               o   sort messages
+sort-reverse               O   sort messages in reverse order
+sync-mailbox               $   save changes to mailbox
+tag-pattern                T   tag messages matching a pattern
+tag-thread             ESC t   tag/untag all messages in the current thread
+toggle-new                 N   toggle a message's 'new' flag
+toggle-write               %   toggle whether the mailbox will be rewritten
+undelete-message           u   undelete the current entry
+undelete-pattern           U   undelete messages matching a pattern
+undelete-subthread     ESC u   undelete all messages in subthread
+undelete-thread           ^U   undelete all messages in thread
+untag-pattern             ^T   untag messages matching a pattern
+view-attachments           v   show MIME attachments
+</verb>
+<sect2>pager
+<p>
+<verb>
+bottom             not bound   jump to the bottom of the message
+bounce-message             b   remail a message to another user
+change-folder              c   open a different folder
+change-folder-readonly ESC c   open a different folder in read only mode
+check-traditional-pgp  ESC P   check for classic pgp
+copy-message               C   copy a message to a file/mailbox
+create-alias               a   create an alias from a message sender
+decode-copy            ESC C   decode a message and copy it to a file/mailbox
+decode-save            ESC s   decode a message and save it to a file/mailbox
+delete-message             d   delete the current entry
+delete-subthread       ESC d   delete all messages in subthread
+delete-thread             ^D   delete all messages in thread
+display-address            @   display full address of sender
+display-toggle-weed        h   display message and toggle header weeding
+edit                       e   edit the current message
+edit-type                 ^E   edit the current message's Content-Type
+enter-command              :   enter a muttrc command
+exit                       i   return to the main-menu
+extract-keys              ^K   extract PGP public keys
+flag-message               F   toggle a message's 'important' flag
+forget-passphrase         ^F   wipe PGP passphrase from memory
+forward-message            f   forward a message with comments
+group-reply                g   reply to all recipients
+half-up            not bound   move up one-half page
+half-down          not bound   move down one-half page
+help                       ?   this screen
+list-reply                 L   reply to specified mailing list
+mail                       m   compose a new mail message
+mail-key               ESC k   mail a PGP public key
+mark-as-new                N   toggle a message's 'new' flag
+next-line                RET   scroll down one line
+next-entry                 J   move to the next entry
+next-new                 TAB   jump to the next new message
+next-page                      move to the next page
+next-subthread         ESC n   jump to the next subthread
+next-thread               ^N   jump to the next thread
+next-undeleted             j   move to the next undeleted message
+next-unread        not bound   jump to the next unread message
+parent-message             P   jump to parent message in thread
+pipe-message               |   pipe message/attachment to a shell command
+previous-line      BackSpace   scroll up one line
+previous-entry             K   move to the previous entry
+previous-new       not bound   jump to the previous new message
+previous-page              -   move to the previous page
+previous-subthread     ESC p   jump to previous subthread
+previous-thread           ^P   jump to previous thread
+previous-undeleted         k   move to the last undelete message
+previous-unread    not bound   jump to the previous unread message
+print-message              p   print the current entry
+quit                       Q   save changes to mailbox and quit
+read-subthread         ESC r   mark the current subthread as read
+read-thread               ^R   mark the current thread as read
+recall-message             R   recall a postponed message
+redraw-screen             ^L   clear and redraw the screen
+reply                      r   reply to a message
+save-message               s   save message/attachment to a file
+search                     /   search for a regular expression
+search-next                n   search for next match
+search-opposite    not bound   search for next match in opposite direction
+search-reverse         ESC /   search backwards for a regular expression
+search-toggle              \   toggle search pattern coloring
+shell-escape               !   invoke a command in a subshell
+show-version               V   show the Mutt version number and date
+skip-quoted                S   skip beyond quoted text
+sync-mailbox               $   save changes to mailbox
+tag-message                t   tag a message
+toggle-quoted              T   toggle display of quoted text
+top                        ^   jump to the top of the message
+undelete-message           u   undelete the current entry
+undelete-subthread     ESC u   undelete all messages in subthread
+undelete-thread           ^U   undelete all messages in thread
+view-attachments           v   show MIME attachments
+</verb>
+<sect2>alias
+<p>
+<verb>
+search                     /   search for a regular expression
+search-next                n   search for next match
+search-reverse         ESC /   search backwards for a regular expression
+</verb>
+<sect2>query
+<p>
+<verb>
+create-alias               a   create an alias from a message sender
+mail                       m   compose a new mail message
+query                      Q   query external program for addresses
+query-append               A   append new query results to current results
+search                     /   search for a regular expression
+search-next                n   search for next match
+search-opposite    not bound   search for next match in opposite direction
+search-reverse         ESC /   search backwards for a regular expression
+</verb>
+<sect2>attach
+<p>
+<verb>
+bounce-message             b   remail a message to another user
+collapse-parts             v   toggle display of subparts
+delete-entry               d   delete the current entry
+display-toggle-weed        h   display message and toggle header weeding
+edit-type                 ^E   edit the current entry's Content-Type
+extract-keys              ^K   extract PGP public keys
+forward-message            f   forward a message with comments
+group-reply                g   reply to all recipients
+list-reply                 L   reply to specified mailing list
+pipe-entry                 |   pipe message/attachment to a shell command
+print-entry                p   print the current entry
+reply                      r   reply to a message
+resend-message         ESC e   resend message and preserve MIME structure
+save-entry                 s   save message/attachment to a file
+undelete-entry             u   undelete the current entry
+view-attach              RET   view attachment using mailcap entry if necessary
+view-mailcap               m   force viewing of attachment using mailcap
+view-text                  T   view attachment as text
+</verb>
+<sect2>compose
+<p>
+<verb>
+attach-file                a   attach a file(s) to this message
+attach-message             A   attach message(s) to this message
+attach-key             ESC k   attach a PGP public key
+copy-file                  C   save message/attachment to a file
+detach-file                D   delete the current entry
+display-toggle-weed        h   display message and toggle header weeding
+edit-bcc                   b   edit the BCC list
+edit-cc                    c   edit the CC list
+edit-description           d   edit attachment description
+edit-encoding             ^E   edit attachment transfer-encoding
+edit-fcc                   f   enter a file to save a copy of this message in
+edit-from              ESC f   edit the from: field
+edit-file               ^X e   edit the file to be attached
+edit-headers               E   edit the message with headers
+edit                       e   edit the message
+edit-mime                  m   edit attachment using mailcap entry
+edit-reply-to              r   edit the Reply-To field
+edit-subject               s   edit the subject of this message
+edit-to                    t   edit the TO list
+edit-type                 ^T   edit attachment type
+filter-entry               F   filter attachment through a shell command
+forget-passphrase         ^F   wipe PGP passphrase from memory
+ispell                     i   run ispell on the message
+new-mime                   n   compose new attachment using mailcap entry
+pgp-menu                   p   show PGP options
+pipe-entry                 |   pipe message/attachment to a shell command
+postpone-message           P   save this message to send later
+print-entry                l   print the current entry
+rename-file                R   rename/move an attached file
+send-message               y   send the message
+toggle-unlink              u   toggle whether to delete file after sending it
+view-attach              RET   view attachment using mailcap entry if necessary
+write-fcc                 w   write the message to a folder
+</verb>
+<sect2>postpone
+<p>
+<verb>
+delete-entry               d   delete the current entry
+undelete-entry             u   undelete the current entry
+</verb>
+<sect2>browser
+<p>
+<verb>
+change-dir                 c   change directories
+check-new                TAB   check mailboxes for new mail
+enter-mask                 m   enter a file mask
+search                     /   search for a regular expression
+search-next                n   search for next match
+search-reverse         ESC /   search backwards for a regular expression
+select-new                 N   select a new file in this directory
+sort                       o   sort messages
+sort-reverse               O   sort messages in reverse order
+toggle-mailboxes         TAB   toggle whether to browse mailboxes or all files
+view-file              SPACE   view file
+subscribe                  s   subscribe to current mailbox (IMAP Only)
+unsubscribe                u   unsubscribe to current mailbox (IMAP Only)
+toggle-subscribed          T   toggle view all/subscribed mailboxes (IMAP Only)
+</verb>
+<sect2>pgp
+<p>
+<verb>
+view-name                  %   view the key's user id
+verify-key                 c   verify a PGP public key
+</verb>
+<sect2>editor
+<p>
+<verb>
+backspace          BackSpace   delete the char in front of the cursor
+backward-char             ^B   move the cursor one character to the left
+backward-word          ESC b   move the cursor to the previous word
+bol                       ^A   jump to the beginning of the line
+buffy-cycle            Space   cycle among incoming mailboxes
+capitalize-word        ESC c   uppercase the first character in the word
+complete                 TAB   complete filename or alias
+complete-query            ^T   complete address with query
+delete-char               ^D   delete the char under the cursor
+downcase-word          ESC l   lowercase all characters in current word
+eol                       ^E   jump to the end of the line
+forward-char              ^F   move the cursor one character to the right
+forward-word           ESC f   move the cursor to the next word
+history-down       not bound   scroll down through the history list
+history-up         not bound   scroll up through the history list
+kill-eol                  ^K   delete chars from cursor to end of line
+kill-eow               ESC d   delete chars from cursor to end of word
+kill-line                 ^U   delete all chars on the line
+kill-word                 ^W   delete the word in front of the cursor
+quote-char                ^V   quote the next typed key
+transpose-chars    not bound   transpose character under cursor with previous
+upcase-word            ESC u   uppercase all characters in current word
+</verb>
+
+<sect>Miscellany
+<p>
+
+<sect1>Acknowledgements
+<p>
+Kari Hurtta
+<htmlurl url="mailto:kari.hurtta@fmi.fi" name="&lt;kari.hurtta@fmi.fi&gt;">
+co-developed the original MIME parsing code back in the ELM-ME days.
+
+The following people have been very helpful to the development of Mutt:
+
+Vikas Agnihotri <htmlurl url="mailto:vikasa@writeme.com" name="&lt;vikasa@writeme.com&gt;">,<newline>
+Francois Berjon <htmlurl url="mailto:Francois.Berjon@aar.alcatel-alsthom.fr" name="&lt;Francois.Berjon@aar.alcatel-alsthom.fr&gt;">,<newline>
+Aric Blumer <htmlurl url="mailto:aric@fore.com" name="&lt;aric@fore.com&gt;">,<newline>
+John Capo <htmlurl url="mailto:jc@irbs.com" name="&lt;jc@irbs.com&gt;">,<newline>
+David Champion <htmlurl url="mailto:dgc@uchicago.edu" name="&lt;dgc@uchicago.edu">,<newline>
+Brendan Cully <htmlurl url="mailto:brendan@kublai.com" name="&lt;brendan@kublai.com&gt">,<newline>
+Liviu Daia <htmlurl url="mailto:daia@stoilow.imar.ro" name="&lt;daia@stoilow.imar.ro&gt;">,<newline>
+Thomas E. Dickey <htmlurl url="mailto:dickey@herndon4.his.com" name="&lt;dickey@herndon4.his.com&gt;">,<newline>
+David DeSimone <htmlurl url="mailto:fox@convex.hp.com" name="&lt;fox@convex.hp.com&gt;">,<newline>
+Nickolay N. Dudorov <htmlurl url="mailto:nnd@wint.itfs.nsk.su" name="&lt;nnd@wint.itfs.nsk.su&gt;">,<newline>
+Ruslan Ermilov <htmlurl url="mailto:ru@freebsd.org" name="&lt;ru@freebsd.org&gt;">,<newline>
+Edmund Grimley Evans <htmlurl url="mailto:edmundo@rano.org" name="&lt;edmundo@rano.org">,<newline>
+Michael Finken <htmlurl url="mailto:finken@conware.de" name="&lt;finken@conware.de&gt;">,<newline>
+Sven Guckes <htmlurl url="mailto:guckes@math.fu-berlin.de" name="&lt;guckes@math.fu-berlin.de&gt;">,<newline>
+Lars Hecking <htmlurl url="mailto:lhecking@nmrc.ie" name="&lt;lhecking@nmrc.ie&gt;">,<newline>
+Mark Holloman <htmlurl url="mailto:holloman@nando.net" name="&lt;holloman@nando.net&gt;">,<newline>
+Andreas Holzmann <htmlurl url="mailto:holzmann@fmi.uni-passau.de" name="&lt;holzmann@fmi.uni-passau.de&gt;">,<newline>
+Marco d'Itri <htmlurl url="mailto:md@linux.it" name="&lt;md@linux.it&gt;">,<newline>
+Björn Jacke <htmlurl url="mailto:bjacke@suse.com" name="&lt;bjacke@suse.com&gt;">,<newline>
+Byrial Jensen <htmlurl url="mailto:byrial@image.dk" name="&lt;byrial@image.dk&gt;">,<newline>
+David Jeske <htmlurl url="mailto:jeske@igcom.net" name="&lt;jeske@igcom.net&gt;">,<newline>
+Christophe Kalt <htmlurl url="mailto:kalt@hugo.int-evry.fr" name="&lt;kalt@hugo.int-evry.fr&gt;">,<newline>
+Tommi Komulainen <htmlurl url="mailto:Tommi.Komulainen@iki.fi" name="&lt;Tommi.Komulainen@iki.fi&gt;">,<newline>
+Felix von Leitner (a.k.a ``Fefe'') <htmlurl url="mailto:leitner@math.fu-berlin.de" name="&lt;leitner@math.fu-berlin.de&gt;">,<newline>
+Brandon Long <htmlurl url="mailto:blong@fiction.net" name="&lt;blong@fiction.net&gt;">,<newline>
+Jimmy Mäkelä <htmlurl url="mailto:jmy@flashback.net" name="&lt;jmy@flashback.net&gt;">,<newline>
+Lars Marowsky-Bree <htmlurl url="mailto:lmb@pointer.in-minden.de" name="&lt;lmb@pointer.in-minden.de&gt;">,<newline>
+Thomas ``Mike'' Michlmayr <htmlurl url="mailto:mike@cosy.sbg.ac.at" name="&lt;mike@cosy.sbg.ac.at&gt;">,<newline>
+Andrew W. Nosenko <htmlurl url="mailto:awn@bcs.zp.ua" name="&lt;awn@bcs.zp.ua&gt;">,<newline>
+David O'Brien <htmlurl url="mailto:obrien@Nuxi.cs.ucdavis.edu" name="&lt;obrien@Nuxi.cs.ucdavis.edu&gt;">,<newline>
+Clint Olsen <htmlurl url="mailto:olsenc@ichips.intel.com" name="&lt;olsenc@ichips.intel.com&gt;">,<newline>
+Park Myeong Seok <htmlurl url="mailto:pms@romance.kaist.ac.kr" name="&lt;pms@romance.kaist.ac.kr&gt;">,<newline>
+Thomas Parmelan <htmlurl url="mailto:tom@ankh.fr.eu.org" name="&lt;tom@ankh.fr.eu.org&gt;">,<newline>
+Ollivier Robert <htmlurl url="mailto:roberto@keltia.freenix.fr" name="&lt;roberto@keltia.freenix.fr&gt;">,<newline>
+Thomas Roessler <htmlurl url="mailto:roessler@does-not-exist.org" name="&lt;roessler@does-not-exist.org&gt;">,<newline>
+Roland Rosenfeld <htmlurl url="roland@spinnaker.de" name="&lt;roland@spinnaker.de&gt;">,<newline>
+TAKIZAWA Takashi <htmlurl url="taki@luna.email.ne.jp" name="&lt;taki@luna.email.ne.jp&gt;">,<newline>
+Allain Thivillon <htmlurl url="mailto:Allain.Thivillon@alma.fr" name="&lt;Allain.Thivillon@alma.fr&gt;">,<newline>
+Gero Treuner <htmlurl url="mailto:gero@faveve.uni-stuttgart.de" name="&lt;gero@faveve.uni-stuttgart.de&gt;">,<newline>
+Vsevolod Volkov <htmlurl url="mailto:vvv@lucky.net" name="&lt;vvv@lucky.net&gt;">,<newline>
+Ken Weinert <htmlurl url="mailto:kenw@ihs.com" name="&lt;kenw@ihs.com&gt;">
+
+<sect1>About this document
+<p>
+This document was written in SGML, and then rendered using the
+<htmlurl url="http://www.sgmltools.org/" name="sgml-tools"> package.
+
+</article>
diff --git a/doc/manual.sgml.head b/doc/manual.sgml.head
new file mode 100644 (file)
index 0000000..8ad8d3b
--- /dev/null
@@ -0,0 +1,3079 @@
+<!doctype linuxdoc system>
+
+<article>
+
+<title>The Mutt E-Mail Client
+<author>by Michael Elkins <htmlurl url="mailto:me@cs.hmc.edu" name="&lt;me@cs.hmc.edu&gt;">
+<date>version @VERSION@
+<abstract>
+``All mail clients suck.  This one just sucks less.'' -me, circa 1995
+</abstract>
+
+<toc>
+
+<sect>Introduction
+<p>
+<bf/Mutt/ is a small but very powerful text-based MIME mail client.  Mutt is
+highly configurable, and is well suited to the mail power user with advanced
+features like key bindings, keyboard macros, mail threading, regular
+expression searches and a powerful pattern matching language for selecting
+groups of messages.
+
+<sect1>Mutt Home Page
+<p>
+<htmlurl url="http://www.mutt.org/"
+name="http://www.mutt.org/">
+
+<sect1>Mailing Lists
+<p>
+To subscribe to one of the following mailing lists, send a message with the
+word <em/subscribe/ in the body to
+<tt/list-name/<em/-request/<tt/@mutt.org/.
+
+<itemize>
+<item><htmlurl url="mailto:mutt-announce-request@mutt.org"
+name="mutt-announce@mutt.org"> -- low traffic list for announcements
+<item><htmlurl url="mailto:mutt-users-request@mutt.org"
+name="mutt-users@mutt.org"> -- help, bug reports and feature requests
+<item><htmlurl url="mailto:mutt-dev-request@mutt.org" name="mutt-dev@mutt.org"> -- development mailing list
+</itemize>
+
+<bf/Note:/ all messages posted to <em/mutt-announce/ are automatically
+forwarded to <em/mutt-users/, so you do not need to be subscribed to both
+lists.
+
+<sect1>Software Distribution Sites
+<p>
+<itemize>
+<item><htmlurl url="ftp://ftp.mutt.org/mutt/"
+name="ftp://ftp.mutt.org/mutt/">
+</itemize>
+<p>
+For a list of mirror sites, please refer to <htmlurl
+url="http://www.mutt.org/download.html"
+name="http://www.mutt.org/download.html">.
+
+<sect1>IRC
+<p>
+Visit channel <em/#mutt/ on <htmlurl
+url="http://www.openprojects.net" name="OpenProjects.Net
+(www.openprojects.net)"> to chat with other people interested in Mutt.
+
+<sect1>USENET
+<p>
+See the newsgroup <htmlurl url="news:comp.mail.mutt" name="comp.mail.mutt">.
+
+<sect1>Copyright
+<p>
+Mutt is Copyright (C) 1996-2000 Michael R. Elkins
+&lt;me@cs.hmc.edu&gt; and others
+
+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.
+
+<sect>Getting Started
+<p>
+
+This section is intended as a brief overview of how to use Mutt.  There are
+many other features which are described elsewhere in the manual.  There
+is even more information available in the Mutt FAQ and various web
+pages.  See the <htmlurl url="http://www.mutt.org/mutt/"
+name="Mutt Page"> for more details.
+
+The keybindings described in this section are the defaults as distributed.
+Your local system administrator may have altered the defaults for your site.
+You can always type ``?'' in any menu to display the current bindings.
+
+The first thing you need to do is invoke mutt, simply by typing mutt
+at the command line.  There are various command-line options, see 
+either the mutt man page or the <ref id="commandline" name="reference">.
+
+<sect1>Moving Around in Menus
+<p>
+
+Information is presented in menus, very similar to ELM.  Here is a table
+showing the common keys used to navigate menus in Mutt.
+
+<tscreen><verb>
+j or Down       next-entry      move to the next entry
+k or Up         previous-entry  move to the previous entry
+z or PageDn     page-down       go to the next page
+Z or PageUp     page-up         go to the previous page
+= or Home       first-entry     jump to the first entry
+* or End        last-entry      jump to the last entry
+q               quit            exit the current menu
+?               help            list all keybindings for the current menu
+</verb></tscreen>
+
+<sect1>Editing Input Fields<label id="editing">
+<p>
+Mutt has a builtin line editor which is used as the primary way to input
+textual data such as email addresses or filenames.  The keys used to move
+around while editing are very similar to those of Emacs.
+
+<tscreen><verb>
+^A or <Home>    bol             move to the start of the line
+^B or <Left>    backward-char   move back one char
+Esc B          backward-word   move back one word
+^D or <Delete>  delete-char     delete the char under the cursor
+^E or <End>     eol             move to the end of the line
+^F or <Right>   forward-char    move forward one char
+Esc F          forward-word    move forward one word
+<Tab>           complete        complete filename or alias
+^T              complete-query  complete address with query
+^K              kill-eol        delete to the end of the line
+ESC d          kill-eow        delete to the end ot the word
+^W              kill-word       kill the word in front of the cursor
+^U              kill-line       delete entire line
+^V              quote-char      quote the next typed key
+<Up>            history-up      recall previous string from history
+<Down>          history-down    recall next string from history
+<BackSpace>     backspace       kill the char in front of the cursor
+Esc u          upcase-word     convert word to upper case
+Esc l          downcase-word   convert word to lower case
+Esc c          capitalize-word capitalize the word
+^G              n/a             abort
+<Return>        n/a             finish editing
+</verb></tscreen>
+
+You can remap the <em/editor/ functions using the <ref id="bind" name="bind">
+command.  For example, to make the <em/Delete/ key delete the character in
+front of the cursor rather than under, you could use
+
+<tt/bind editor &lt;delete&gt; backspace/
+
+<sect1>Reading Mail - The Index and Pager
+<p>
+
+Similar to many other mail clients, there are two modes in which mail is
+read in Mutt.  The first is the index of messages in the mailbox, which is
+called the ``index'' in Mutt.  The second mode is the display of the
+message contents.  This is called the ``pager.''
+
+The next few sections describe the functions provided in each of these
+modes.
+
+<sect2>The Message Index
+<p>
+
+<tscreen><verb>
+c               change to a different mailbox
+ESC c           change to a folder in read-only mode
+C               copy the current message to another mailbox
+ESC C           decode a message and copy it to a folder
+ESC s           decode a message and save it to a folder
+D               delete messages matching a pattern
+d               delete the current message
+F               mark as important
+l               show messages matching a pattern
+N               mark message as new
+o               change the current sort method
+O               reverse sort the mailbox
+q               save changes and exit
+s               save-message
+T               tag messages matching a pattern
+t               toggle the tag on a message
+ESC t           toggle tag on entire message thread
+U               undelete messages matching a pattern
+u               undelete-message
+v               view-attachments
+x               abort changes and exit
+<Return>        display-message
+<Tab>           jump to the next new message
+@               show the author's full e-mail address
+$               save changes to mailbox
+/               search
+ESC /           search-reverse
+^L              clear and redraw the screen
+^T              untag messages matching a pattern
+</verb></tscreen>
+
+<sect3>Status Flags
+<p>
+
+In addition to who sent the message and the subject, a short summary of
+the disposition of each message is printed beside the message number.
+Zero or more of the following ``flags'' may appear, which mean:
+
+<p>
+<descrip>
+<tag/D/ message is deleted (is marked for deletion)
+<tag/d/ message have attachments marked for deletion
+<tag/K/ contains a PGP public key
+<tag/N/ message is new
+<tag/O/ message is old
+<tag/P/ message is PGP encrypted
+<tag/r/ message has been replied to
+<tag/S/ message is signed, and the signature is succesfully verified
+<tag/s/ message is signed
+<tag/!/ message is flagged
+<tag/*/ message is tagged
+</descrip>
+
+Some of the status flags can be turned on or off using
+<itemize>
+<item><bf/set-flag/ (default: w)
+<item><bf/clear-flag/ (default: W)
+</itemize>
+
+<p>
+Furthermore, the following flags reflect who the message is addressed
+to.  They can be customized with the
+<ref id="to_chars" name="&dollar;to&lowbar;chars"> variable.
+
+<p>
+<descrip>
+<tag/+/ message is to you and you only
+<tag/T/ message is to you, but also to or cc'ed to others
+<tag/C/ message is cc'ed to you
+<tag/F/ message is from you
+<tag/L/ message is sent to a subscribed mailing list
+</descrip>
+
+<sect2>The Pager
+<p>
+
+By default, Mutt uses its builtin pager to display the body of messages.
+The pager is very similar to the Unix program <em/less/ though not nearly as
+featureful.
+
+<tscreen><verb>
+<Return>        go down one line
+<Space>         display the next page (or next message if at the end of a message)
+-               go back to the previous page
+n               search for next match
+S               skip beyond quoted text
+T               toggle display of quoted text
+?               show keybindings
+/               search for a regular expression (pattern)
+ESC /           search backwards for a regular expression
+\               toggle search pattern coloring
+^               jump to the top of the message
+</verb></tscreen>
+
+In addition, many of the functions from the <em/index/ are available in
+the pager, such as <em/delete-message/ or <em/copy-message/ (this is one
+advantage over using an external pager to view messages).
+
+Also, the internal pager supports a couple other advanced features. For
+one, it will accept and translate the ``standard'' nroff sequences for
+bold and underline. These sequences are a series of either the letter,
+backspace (^H), the letter again for bold or the letter, backspace,
+``&lowbar;'' for denoting underline. Mutt will attempt to display these
+in bold and underline respectively if your terminal supports them. If
+not, you can use the bold and underline <ref id="color" name="color">
+objects to specify a color or mono attribute for them.
+
+Additionally, the internal pager supports the ANSI escape sequences for
+character attributes.  Mutt translates them into the correct color and
+character settings.  The sequences Mutt supports are:
+
+<p>
+<tscreen><verb>
+ESC [ Ps;Ps;Ps;...;Ps m
+where Ps =
+0    All Attributes Off
+1    Bold on
+4    Underline on
+5    Blink on
+7    Reverse video on
+3x   Foreground color is x
+4x   Background color is x
+
+Colors are
+0    black
+1    red
+2    green
+3    yellow
+4    blue
+5    magenta
+6    cyan
+7    white
+</verb></tscreen>
+
+Mutt uses these attributes for handling text/enriched messages, and they
+can also be used by an external <ref id="auto_view" name="autoview">
+script for highlighting purposes.  <bf/Note:/ If you change the colors for your
+display, for example by changing the color associated with color2 for
+your xterm, then that color will be used instead of green.
+
+<sect2>Threaded Mode<label id="threads">
+<p>
+When the mailbox is <ref id="sort" name="sorted"> by <em/threads/, there are
+a few additional functions available in the <em/index/ and <em/pager/ modes.
+
+<tscreen><verb>
+^D      delete-thread           delete all messages in the current thread
+^U      undelete-thread         undelete all messages in the current thread
+^N      next-thread             jump to the start of the next thread
+^P      previous-thread         jump to the start of the previous thread
+^R      read-thread             mark the current thread as read
+ESC d   delete-subthread        delete all messages in the current subthread
+ESC u   undelete-subthread      undelete all messages in the current subthread
+ESC n   next-subthread          jump to the start of the next subthread
+ESC p   previous-subthread      jump to the start of the previous subthread
+ESC r   read-subthread          mark the current subthread as read
+ESC t   tag-thread              toggle the tag on the current thread
+ESC v  collapse-thread         toggle collapse for the current thread
+ESC V  collapse-all            toggle collapse for all threads
+P       parent-message          jump to parent message in thread
+</verb></tscreen>
+
+<bf/Note:/ Collapsing a thread displays only the first message
+in the thread and hides the others. This is useful when threads
+contain so many messages that you can only see a handful of threads on
+the screen. See %M in <ref id="index_format"name="&dollar;index&lowbar;format">.
+For example, you could use "&percnt;?M?(#&percnt;03M)&amp;(&percnt;4l)?" in <ref
+id="index_format"name="&dollar;index&lowbar;format"> to optionally
+display the number of hidden messages if the thread is collapsed.
+
+See also: <ref id="strict_threads" name="&dollar;strict&lowbar;threads">.
+
+<sect2>Miscellaneous Functions
+<p><bf/create-alias/<label id="create-alias"> (default: a)<newline>
+
+Creates a new alias based upon the current message (or prompts for a
+new one).  Once editing is complete, an <ref id="alias" name="alias">
+command is added to the file specified by the <ref id="alias_file"
+name="&dollar;alias&lowbar;file"> variable for future use. <bf/Note:/
+Specifying an <ref id="alias_file" name="&dollar;alias&lowbar;file">
+does not add the aliases specified there-in, you must also <ref
+id="source" name="source"> the file.
+
+<p><bf/check-traditional-pgp/<label id="check-traditional-pgp"> (default: ESC P)<newline>
+
+This function will search the current message for content signed or
+encrypted with PGP the "traditional" way, that is, without proper
+MIME tagging.  Technically, this function will temporarily change
+the MIME content types of the body parts containing PGP data; this
+is similar to the <ref id="edit-type" name="edit-type"> function's
+effect.
+
+
+<p><bf/display-toggle-weed/<label id="display-toggle-weed"> (default: h)<newline>
+
+Toggles the weeding of message header fields specified by <ref id="ignore"
+name="ignore"> commands.
+
+<p><bf/edit/<label id="edit"> (default: e)<newline>
+
+This command (available in the ``index'' and ``pager'') allows you to
+edit the raw current message as it's present in the mail folder.
+After you have finished editing, the changed message will be
+appended to the current folder, and the original message will be
+marked for deletion.
+
+<p><bf/edit-type/<label id="edit-type"><newline>
+(default: ^E on the attachment menu, and in the pager and index menus; ^T on the
+compose menu)
+
+This command is used to temporarily edit an attachment's content
+type to fix, for instance, bogus character set parameters.  When
+invoked from the index or from the pager, you'll have the
+opportunity to edit the top-level attachment's content type.  On the
+<ref id="attach_menu" name="attachment menu">, you can change any
+attachment's content type. These changes are not persistent, and get
+lost upon changing folders.
+
+Note that this command is also available on the <ref
+id="compose_menu" name="compose menu">.  There, it's used to
+fine-tune the properties of attachments you are going to send.
+
+<p><bf/enter-command/<label id="enter-command"> (default: ``:'')<newline>
+
+This command is used to execute any command you would normally put in a
+configuration file.  A common use is to check the settings of variables, or
+in conjunction with <ref id="macro" name="macros"> to change settings on the
+fly.
+
+<p><bf/extract-keys/<label id="extract-keys"> (default: ^K)<newline>
+
+This command extracts PGP public keys from the current or tagged
+message(s) and adds them to your PGP public key ring.
+
+<p><bf/forget-passphrase/<label id="forget-passphrase"> (default:
+^F)<newline> 
+
+This command wipes the passphrase(s) from memory. It is useful, if
+you misspelled the passphrase.
+
+<p><bf/list-reply/<label id="list-reply"> (default: L)<newline>
+
+Reply to the current or tagged message(s) by extracting any addresses which
+match the addresses given by the <ref id="lists" name="lists or subscribe">
+commands, but also honor any <tt/Mail-Followup-To/ header(s) if the
+<ref id="honor_followup_to" name="&dollar;honor&lowbar;followup&lowbar;to">
+configuration variable is set.  Using this when replying to messages posted
+to mailing lists helps avoid duplicate copies being sent to the author of
+the message you are replying to.
+
+<bf/pipe-message/<label id="pipe-message"> (default: |)<newline>
+
+Asks for an external Unix command and pipes the current or
+tagged message(s) to it.  The variables <ref id="pipe_decode"
+name="&dollar;pipe&lowbar;decode">, <ref id="pipe_split"
+name="&dollar;pipe&lowbar;split">, <ref id="pipe_sep"
+name="&dollar;pipe&lowbar;sep"> and <ref id="wait_key"
+name="&dollar;wait&lowbar;key"> control the exact behaviour of this
+function.
+
+<bf/resend-message/<label id="resend-message"> (default: ESC e)<newline>
+
+With resend-message, mutt takes the current message as a template for a
+new message.  This function is best described as "recall from arbitrary
+folders".  It can conveniently be used to forward MIME messages while
+preserving the original mail structure. Note that the amount of headers
+included here depends on the value of the <ref id="weed" name="&dollar;weed">
+variable.
+
+This function is also available from the attachment menu. You can use this
+to easily resend a message which was included with a bounce message
+as a message/rfc822 body part.
+
+<bf/shell-escape/<label id="shell-escape"> (default: !)<newline>
+
+Asks for an external Unix command and executes it.  The <ref
+id="wait_key" name="&dollar;wait&lowbar;key"> can be used to control
+whether Mutt will wait for a key to be pressed when the command returns
+(presumably to let the user read the output of the command), based on
+the return status of the named command.
+
+<bf/toggle-quoted/<label id="toggle-quoted"> (default: T)<newline>
+
+The <em/pager/ uses the <ref id="quote_regexp"
+name="&dollar;quote&lowbar;regexp"> variable to detect quoted text when
+displaying the body of the message.  This function toggles the display
+of the quoted material in the message.  It is particularly useful when
+are interested in just the response and there is a large amount of
+quoted text in the way.
+
+<bf/skip-quoted/<label id="skip-quoted"> (default: S)<newline>
+
+This function will go to the next line of non-quoted text which come
+after a line of quoted text in the internal pager.
+
+<sect1>Sending Mail
+<p>
+
+The following bindings are available in the <em/index/ for sending
+messages.
+
+<tscreen><verb>
+m       compose         compose a new message
+r       reply           reply to sender
+g       group-reply     reply to all recipients
+L       list-reply      reply to mailing list address
+f       forward         forward message
+b       bounce          bounce (remail) message
+ESC k   mail-key        mail a PGP public key to someone
+</verb></tscreen>
+
+Bouncing a message sends the message as is to the recipient you
+specify.  Forwarding a message allows you to add comments or
+modify the message you are forwarding.  These items are discussed
+in greater detail in the next chapter <ref id="forwarding_mail"
+name="``Forwarding and Bouncing Mail''">.
+
+Mutt will then enter the <em/compose/ menu and prompt you for the
+recipients to place on the ``To:'' header field.  Next, it will ask
+you for the ``Subject:'' field for the message, providing a default if
+you are replying to or forwarding a message.  See also <ref id="askcc"
+name="&dollar;askcc">, <ref id="askbcc" name="&dollar;askbcc">, <ref
+id="autoedit" name="&dollar;autoedit">, <ref id="bounce"
+name="&dollar;bounce">, and <ref id="fast_reply"
+name="&dollar;fast&lowbar;reply"> for changing how Mutt asks these
+questions.
+
+Mutt will then automatically start your <ref id="editor"
+name="&dollar;editor"> on the message body.  If the <ref id="edit_headers"
+name="&dollar;edit&lowbar;headers"> variable is set, the headers will be at
+the top of the message in your editor.  Any messages you are replying
+to will be added in sort order to the message, with appropriate <ref
+id="attribution" name="&dollar;attribution">, <ref id="indent_string"
+name="&dollar;indent&lowbar;string"> and <ref id="post_indent_string"
+name="&dollar;post&lowbar;indent&lowbar;string">.  When forwarding a
+message, if the <ref id="mime_forward" name="&dollar;mime&lowbar;forward">
+variable is unset, a copy of the forwarded message will be included.  If
+you have specified a <ref id="signature" name="&dollar;signature">, it
+will be appended to the message.
+
+Once you have finished editing the body of your mail message, you are
+returned to the <em/compose/ menu.  The following options are available:
+
+<tscreen><verb>
+a       attach-file             attach a file
+A      attach-message          attach message(s) to the message
+ESC k   attach-key              attach a PGP public key
+d       edit-description        edit description on attachment
+D       detach-file             detach a file
+t       edit-to                 edit the To field
+ESC f   edit-from               edit the From field
+r       edit-reply-to           edit the Reply-To field
+c       edit-cc                 edit the Cc field
+b       edit-bcc                edit the Bcc field
+y       send-message            send the message
+s       edit-subject            edit the Subject
+S       smime-menu              select S/MIME options
+f       edit-fcc                specify an ``Fcc'' mailbox
+p       pgp-menu                select PGP options
+P       postpone-message        postpone this message until later
+q       quit                    quit (abort) sending the message
+w      write-fcc               write the message to a folder
+i       ispell                  check spelling (if available on your system)
+^F      forget-passphrase       wipe passphrase(s) from memory
+</verb></tscreen>
+
+<bf/Note:/ The attach-message function will prompt you for a folder to
+attach messages from. You can now tag messages in that folder and they
+will be attached to the message you are sending. Note that certain
+operations like composing a new mail, replying, forwarding, etc. are
+not permitted when you are in that folder. The %r in <ref
+id="status_format" name="&dollar;status&lowbar;format"> will change to
+a 'A' to indicate that you are in attach-message mode.
+
+<sect2>Editing the message header
+<p>
+When editing the header of your outgoing message, there are a couple of
+special features available.
+
+If you specify<newline>
+<tt/Fcc:/ <em/filename/<newline>
+Mutt will pick up <em/filename/
+just as if you had used the <em/edit-fcc/ function in the <em/compose/ menu.
+
+You can also attach files to your message by specifying<newline>
+<tt/Attach:/ <em/filename/  &lsqb; <em/description/ &rsqb;<newline>
+where <em/filename/ is the file to attach and <em/description/ is an
+optional string to use as the description of the attached file.
+
+When replying to messages, if you remove the <em/In-Reply-To:/ field from
+the header field, Mutt will not generate a <em/References:/ field, which
+allows you to create a new message thread.
+
+Also see <ref id="edit_headers" name="edit&lowbar;headers">.
+
+<sect2>Using Mutt with PGP
+
+<p>
+If you want to use PGP, you can specify 
+
+<tt/Pgp:/ &lsqb; <tt/E/ | <tt/S/ | <tt/S&lt;id/&gt; &rsqb; <newline>
+
+``E'' encrypts, ``S'' signs and
+``S&lt;id&gt;'' signs with the given key, setting <ref
+id="pgp_sign_as" name="&dollar;pgp&lowbar;sign&lowbar;as"> permanently.
+
+If you have told mutt to PGP encrypt a message, it will guide you
+through a key selection process when you try to send the message.
+Mutt will not ask you any questions about keys which have a
+certified user ID matching one of the message recipients' mail
+addresses.  However, there may be situations in which there are
+several keys, weakly certified user ID fields, or where no matching
+keys can be found.
+
+In these cases, you are dropped into a menu with a list of keys from
+which you can select one.  When you quit this menu, or mutt can't
+find any matching keys, you are prompted for a user ID.  You can, as
+usually, abort this prompt using <tt/^G/.  When you do so, mutt will
+return to the compose screen.
+
+Once you have successfully finished the key selection, the message
+will be encrypted using the selected public keys, and sent out.
+
+Most fields of the entries in the key selection menu (see also <ref
+id="pgp_entry_format" name="&dollar;pgp&lowbar;entry&lowbar;format">) 
+have obvious meanings.  But some explanations on the capabilities, flags, 
+and validity fields are in order.
+
+The flags sequence (&percnt;f) will expand to one of the following flags:
+<tscreen><verb>
+R            The key has been revoked and can't be used.
+X            The key is expired and can't be used.
+d            You have marked the key as disabled.
+c            There are unknown critical self-signature 
+             packets.
+</verb></tscreen>
+
+The capabilities field (&percnt;c) expands to a two-character sequence
+representing a key's capabilities.  The first character gives
+the key's encryption capabilities: A minus sign (<bf/-/) means 
+that the key cannot be used for encryption.  A dot (<bf/./) means that
+it's marked as a signature key in one of the user IDs, but may 
+also be used for encryption.  The letter <bf/e/ indicates that 
+this key can be used for encryption.
+The second character indicates the key's signing capabilities.  Once 
+again, a ``<bf/-/'' implies ``not for signing'', ``<bf/./'' implies
+that the key is marked as an encryption key in one of the user-ids, and
+``<bf/s/'' denotes a key which can be used for signing.
+
+Finally, the validity field (%t) indicates how well-certified a user-id
+is.  A question mark (<bf/?/) indicates undefined validity, a minus 
+character (<bf/-/) marks an untrusted association, a space character 
+means a partially trusted association, and a plus character (<bf/+/) 
+indicates complete validity.
+
+<sect2>Sending anonymous messages via mixmaster.
+
+<p>
+You may also have configured mutt to co-operate with Mixmaster, an
+anonymous remailer.  Mixmaster permits you to send your messages
+anonymously using a chain of remailers. Mixmaster support in mutt is for 
+mixmaster version 2.04 (beta 45 appears to be the latest) and 2.03. 
+It does not support earlier versions or the later so-called version 3 betas, 
+of which the latest appears to be called 2.9b23.
+
+To use it, you'll have to obey certain restrictions.  Most
+important, you cannot use the <tt/Cc/ and <tt/Bcc/ headers.  To tell
+Mutt to use mixmaster, you have to select a remailer chain, using
+the mix function on the compose menu.  
+
+The chain selection screen is divided into two parts.  In the
+(larger) upper part, you get a list of remailers you may use.  In
+the lower part, you see the currently selected chain of remailers.
+
+You can navigate in the chain using the <tt/chain-prev/ and
+<tt/chain-next/ functions, which are by default bound to the left
+and right arrows and to the <tt/h/ and <tt/l/ keys (think vi
+keyboard bindings).  To insert a remailer at the current chain
+position, use the <tt/insert/ function.  To append a remailer behind
+the current chain position, use <tt/select-entry/ or <tt/append/.
+You can also delete entries from the chain, using the corresponding
+function.  Finally, to abandon your changes, leave the menu, or
+<tt/accept/ them pressing (by default) the <tt/Return/ key.
+
+Note that different remailers do have different capabilities,
+indicated in the &percnt;c entry of the remailer menu lines (see
+<ref id="mix_entry_format"
+name="&dollar;mix&lowbar;entry&lowbar;format">).  Most important is
+the ``middleman'' capability, indicated by a capital ``M'': This
+means that the remailer in question cannot be used as the final
+element of a chain, but will only forward messages to other
+mixmaster remailers.  For details on the other capabilities, please
+have a look at the mixmaster documentation.
+
+<sect1>Forwarding and Bouncing Mail<label id="forwarding_mail">
+<p>
+
+Bouncing and forwarding let you send an existing message to recipients
+that you specify.  Bouncing a message uses the <ref id="sendmail"
+name="sendmail"> command to send a copy to alternative addresses as if
+they were the message's original recipients.  Forwarding a message, on
+the other hand, allows you to modify the message before it is resent
+(for example, by adding your own comments).
+
+The following keys are bound by default:
+
+<tscreen><verb>
+f       forward         forward message
+b       bounce          bounce (remail) message
+</verb></tscreen>
+
+Forwarding can be done by including the original message in the new
+message's body (surrounded by indicating lines) or including it as a MIME
+attachment, depending on the value of the <ref id="mime_forward"
+name="&dollar;mime&lowbar;forward"> variable.  Decoding of attachments,
+like in the pager, can be controlled by the <ref id="forward_decode"
+name="&dollar;forward&lowbar;decode"> and <ref id="mime_forward_decode"
+name="&dollar;mime&lowbar;forward&lowbar;decode"> variables,
+respectively.  The desired forwarding format may depend on the content,
+therefore <em/&dollar;mime&lowbar;forward/ is a quadoption which, for
+example, can be set to ``ask-no''.
+
+The inclusion of headers is controlled by the current setting of the
+<ref id="weed" name="&dollar;weed"> variable, unless <ref
+id="mime_forward" name="mime&lowbar;forward"> is set.
+
+Editing the message to forward follows the same procedure as sending or
+replying to a message does.
+
+<sect1>Postponing Mail<label id="postponing_mail">
+<p>
+
+At times it is desirable to delay sending a message that you have
+already begun to compose.  When the <em/postpone-message/ function is
+used in the <em/compose/ menu, the body of your message and attachments
+are stored in the mailbox specified by the <ref id="postponed"
+name="&dollar;postponed"> variable.  This means that you can recall the
+message even if you exit Mutt and then restart it at a later time.
+
+Once a message is postponed, there are several ways to resume it.  From the
+command line you can use the ``-p'' option, or if you <em/compose/ a new
+message from the <em/index/ or <em/pager/ you will be prompted if postponed
+messages exist.  If multiple messages are currently postponed, the
+<em/postponed/ menu will pop up and you can select which message you would
+like to resume.
+
+<bf/Note:/ If you postpone a reply to a message, the reply setting of
+the message is only updated when you actually finish the message and
+send it.  Also, you must be in the same folder with the message you
+replied to for the status of the message to be updated.
+
+See also the <ref id="postpone" name="&dollar;postpone"> quad-option.
+
+<sect1>Reading news via NNTP<label id="reading_news">
+<p>
+
+If compiled with ``--enable-nntp'' option, Mutt can read news from newsserver
+via NNTP.  You can open a newsgroup with function ``change-newsgroup''
+(default: i).  Default newsserver can be obtained from <em/NNTPSERVER/
+environment variable.  Like other news readers, info about subscribed
+newsgroups is saved in file by <ref id="newsrc" name="&dollar;newsrc">
+variable.  Article headers are cached and can be loaded from file when
+newsgroup entered instead loading from newsserver.
+
+<sect>Configuration
+<p>
+
+While the default configuration (or ``preferences'') make Mutt
+usable right out of the box, it is often desirable to tailor Mutt to
+suit your own tastes. When Mutt is first invoked, it will attempt to
+read the ``system'' configuration file (defaults set by your local
+system administrator), unless the ``-n'' <ref id="commandline"
+name="command line"> option is specified.  This file is typically
+<tt>/usr/local/share/mutt/Muttrc</tt> or <tt>/etc/Muttrc</tt>. Mutt
+will next look for a file named <tt>.muttrc</tt> in your home
+directory.  If this file does not exist and your home directory has
+a subdirectory named <tt/.mutt/, mutt try to load a file named
+<tt>.mutt/muttrc</tt>. 
+
+<tt>.muttrc</tt> is the file where you will usually place your <ref
+ id="commands" name="commands"> to configure Mutt.
+
+In addition, mutt supports version specific configuration files that are
+parsed instead of the default files as explained above.  For instance, if
+your system has a <tt/Muttrc-0.88/ file in the system configuration
+directory, and you are running version 0.88 of mutt, this file will be
+sourced instead of the <tt/Muttrc/ file.  The same is true of the user
+configuration file, if you have a file <tt/.muttrc-0.88.6/ in your home
+directory, when you run mutt version 0.88.6, it will source this file
+instead of the default <tt/.muttrc/ file.  The version number is the
+same which is visible using the ``-v'' <ref id="commandline"
+name="command line"> switch or using the <tt/show-version/ key (default:
+V) from the index menu.
+
+<sect1>Syntax of Initialization Files<label id="muttrc-syntax">
+<p>
+
+An initialization file consists of a series of <ref id="commands"
+name="commands">.  Each line of the file may contain one or more commands.
+When multiple commands are used, they must be separated by a semicolon (;).
+<tscreen><verb>
+set realname='Mutt user' ; ignore x-
+</verb></tscreen>
+The hash mark, or pound sign
+(``&num;''), is used as a ``comment'' character. You can use it to
+annotate your initialization file. All text after the comment character
+to the end of the line is ignored. For example,
+
+<tscreen><verb>
+my_hdr X-Disclaimer: Why are you listening to me? &num; This is a comment
+</verb></tscreen>
+
+Single quotes (') and double quotes (&dquot;) can be used to quote strings
+which contain spaces or other special characters.  The difference between
+the two types of quotes is similar to that of many popular shell programs,
+namely that a single quote is used to specify a literal string (one that is
+not interpreted for shell variables or quoting with a backslash &lsqb;see
+next paragraph&rsqb;), while double quotes indicate a string for which
+should be evaluated.  For example, backtics are evaluated inside of double
+quotes, but <bf/not/ for single quotes.
+
+&bsol; quotes the next character, just as in shells such as bash and zsh.
+For example, if want to put quotes ``&dquot;'' inside of a string, you can use
+``&bsol;'' to force the next character to be a literal instead of interpreted
+character.
+<tscreen><verb>
+set realname="Michael \"MuttDude\" Elkins"
+</verb></tscreen>
+
+``&bsol;&bsol;'' means to insert a literal ``&bsol;'' into the line.
+``&bsol;n'' and ``&bsol;r'' have their usual C meanings of linefeed and
+carriage-return, respectively.
+
+A &bsol; at the end of a line can be used to split commands over
+multiple lines, provided that the split points don't appear in the
+middle of command names.
+
+It is also possible to substitute the output of a Unix command in an
+initialization file.  This is accomplished by enclosing the command in
+backquotes (``).  For example,
+<tscreen><verb>
+my_hdr X-Operating-System: `uname -a`
+</verb></tscreen>
+The output of the Unix command ``uname -a'' will be substituted before the
+line is parsed.  Note that since initialization files are line oriented, only
+the first line of output from the Unix command will be substituted.
+
+UNIX environments can be accessed like the way it is done in shells like
+sh and bash: Prepend the name of the environment by a ``&dollar;''.  For
+example,
+<tscreen><verb>
+set record=+sent_on_$HOSTNAME
+</verb></tscreen>
+
+The commands understood by mutt are explained in the next paragraphs.
+For a complete list, see the <ref id="commands" name="command reference">.
+
+<sect1>Defining/Using aliases<label id="alias">
+<p>
+
+Usage: <tt/alias/ <em/key/ <em/address/ &lsqb; , <em/address/, ... &rsqb;
+
+It's usually very cumbersome to remember or type out the address of someone
+you are communicating with.  Mutt allows you to create ``aliases'' which map
+a short string to a full address.
+
+<bf/Note:/ if you want to create an alias for a group (by specifying more than
+one address), you <bf/must/ separate the addresses with a comma (``,'').
+
+To remove an alias or aliases (``*'' means all aliases):
+
+<tt/unalias/ &lsqb; * | <em/key/ <em/.../ &rsqb;
+
+<tscreen><verb>
+alias muttdude me@cs.hmc.edu (Michael Elkins)
+alias theguys manny, moe, jack
+</verb></tscreen>
+
+Unlike other mailers, Mutt doesn't require aliases to be defined
+in a special file.  The <tt/alias/ command can appear anywhere in
+a configuration file, as long as this file is <ref id="source"
+name="sourced">.  Consequently, you can have multiple alias files, or
+you can have all aliases defined in your muttrc.
+
+On the other hand, the <ref id="create-alias" name="create-alias">
+function can use only one file, the one pointed to by the <ref
+id="alias_file" name="&dollar;alias&lowbar;file"> variable (which is
+<tt>&tilde;/.muttrc</tt> by default). This file is not special either,
+in the sense that Mutt will happily append aliases to any file, but in
+order for the new aliases to take effect you need to explicitly <ref
+id="source" name="source"> this file too.
+
+For example:
+
+<tscreen><verb>
+source /usr/local/share/Mutt.aliases
+source ~/.mail_aliases
+set alias_file=~/.mail_aliases
+</verb></tscreen>
+
+To use aliases, you merely use the alias at any place in mutt where mutt
+prompts for addresses, such as the <em/To:/ or <em/Cc:/ prompt.  You can
+also enter aliases in your editor at the appropriate headers if you have the
+<ref id="edit_headers" name="&dollar;edit&lowbar;headers"> variable set.
+
+In addition, at the various address prompts, you can use the tab character
+to expand a partial alias to the full alias.  If there are multiple matches,
+mutt will bring up a menu with the matching aliases.  In order to be
+presented with the full list of aliases, you must hit tab with out a partial
+alias, such as at the beginning of the prompt or after a comma denoting
+multiple addresses.
+
+In the alias menu, you can select as many aliases as you want with the
+<em/select-entry/ key (default: RET), and use the <em/exit/ key
+(default: q) to return to the address prompt.
+
+<sect1>Changing the default key bindings<label id="bind">
+<p>
+Usage: <tt/bind/ <em/map/ <em/key/ <em/function/
+
+This command allows you to change the default key bindings (operation
+invoked when pressing a key).
+
+<em/map/ specifies in which menu the binding belongs.  The currently
+defined maps are:
+
+<descrip>
+<tag/generic/
+This is not a real menu, but is used as a fallback for all of the other
+menus except for the pager and editor modes.  If a key is not defined in
+another menu, Mutt will look for a binding to use in this menu.  This allows
+you to bind a key to a certain function in multiple menus instead of having
+multiple bind statements to accomplish the same task.
+<tag/alias/
+The alias menu is the list of your personal aliases as defined in your
+muttrc.  It is the mapping from a short alias name to the full email
+address(es) of the recipient(s).
+<tag/attach/
+The attachment menu is used to access the attachments on received messages.
+<tag/browser/
+The browser is used for both browsing the local directory structure, and for
+listing all of your incoming mailboxes.
+<tag/editor/
+The editor is the line-based editor the user enters text data.
+<tag/index/
+The index is the list of messages contained in a mailbox.
+<tag/compose/
+The compose menu is the screen used when sending a new message.
+<tag/pager/
+The pager is the mode used to display message/attachment data, and help
+listings.
+<tag/pgp/
+The pgp menu is used to select the OpenPGP keys used for encrypting outgoing
+messages.
+<tag/postpone/
+The postpone menu is similar to the index menu, except is used when
+recalling a message the user was composing, but saved until later.
+</descrip>
+
+<em/key/ is the key (or key sequence) you wish to bind.  To specify a
+control character, use the sequence <em/&bsol;Cx/, where <em/x/ is the
+letter of the control character (for example, to specify control-A use
+``&bsol;Ca'').  Note that the case of <em/x/ as well as <em/&bsol;C/ is
+ignored, so that <em/&bsol;CA, &bsol;Ca, &bsol;cA/ and <em/&bsol;ca/ are all
+equivalent.  An alternative form is to specify the key as a three digit
+octal number prefixed with a ``&bsol;'' (for example <em/&bsol;177/ is
+equivalent to <em/&bsol;c?/).
+
+In addition, <em/key/ may consist of:
+
+<tscreen><verb>
+\t              tab
+<tab>           tab
+\r              carriage return
+\n              newline
+\e              escape
+<esc>           escape
+<up>            up arrow
+<down>          down arrow
+<left>          left arrow
+<right>         right arrow
+<pageup>        Page Up
+<pagedown>      Page Down
+<backspace>     Backspace
+<delete>        Delete
+<insert>        Insert
+<enter>         Enter
+<return>        Return
+<home>          Home
+<end>           End
+<space>         Space bar
+<f1>            function key 1
+<f10>           function key 10
+</verb></tscreen>
+
+<em/key/ does not need to be enclosed in quotes unless it contains a
+space (`` '').
+
+<em/function/ specifies which action to take when <em/key/ is pressed.
+For a complete list of functions, see the <ref id="functions"
+name="reference">.  The special function <tt/noop/ unbinds the specified key
+sequence.
+
+<sect1>Defining aliases for character sets <label id="charset-hook">
+<p>
+Usage: <tt/charset-hook/ <em/alias/ <em/charset/<newline>
+Usage: <tt/iconv-hook/ <em/charset/ <em/local-charset/
+
+The <tt/charset-hook/ command defines an alias for a character set.
+This is useful to properly display messages which are tagged with a
+character set name not known to mutt.
+
+The <tt/iconv-hook/ command defines a system-specific name for a
+character set.  This is helpful when your systems character
+conversion library insists on using strange, system-specific names
+for character sets.
+
+
+<sect1>Setting variables based upon mailbox<label id="folder-hook">
+<p>
+Usage: <tt/folder-hook/ &lsqb;!&rsqb;<em/regexp/ <em/command/
+
+It is often desirable to change settings based on which mailbox you are
+reading.  The folder-hook command provides a method by which you can execute
+any configuration command.  <em/regexp/ is a regular expression specifying
+in which mailboxes to execute <em/command/ before loading.  If a mailbox
+matches multiple folder-hook's, they are executed in the order given in the
+muttrc.
+
+<bf/Note:/ if you use the ``!'' shortcut for <ref id="spoolfile"
+name="&dollar;spoolfile"> at the beginning of the pattern, you must place it
+inside of double or single quotes in order to distinguish it from the
+logical <em/not/ operator for the expression.
+
+Note that the settings are <em/not/ restored when you leave the mailbox.
+For example, a command action to perform is to change the sorting method
+based upon the mailbox being read:
+
+<tscreen><verb>
+folder-hook mutt set sort=threads
+</verb></tscreen>
+
+However, the sorting method is not restored to its previous value when
+reading a different mailbox.  To specify a <em/default/ command, use the
+pattern ``.'':
+
+<p>
+<tscreen><verb>
+folder-hook . set sort=date-sent
+</verb></tscreen>
+
+<sect1>Keyboard macros<label id="macro">
+<p>
+Usage: <tt/macro/ <em/menu/ <em/key/ <em/sequence/ &lsqb; <em/description/ &rsqb;
+
+Macros are useful when you would like a single key to perform a series of
+actions.  When you press <em/key/ in menu <em/menu/, Mutt will behave as if
+you had typed <em/sequence/.  So if you have a common sequence of commands
+you type, you can create a macro to execute those commands with a single
+key.
+
+<em/key/ and <em/sequence/ are expanded by the same rules as the <ref
+id="bind" name="key bindings">.  There are some additions however.  The
+first is that control characters in <em/sequence/ can also be specified
+as <em/&circ;x/.  In order to get a caret (`&circ;'') you need to use
+<em/&circ;&circ;/.  Secondly, to specify a certain key such as <em/up/
+or to invoke a function directly, you can use the format
+<em/&lt;key name&gt;/ and <em/&lt;function name&gt;/.  For a listing of key
+names see the section on <ref id="bind" name="key bindings">.  Functions
+are listed in the <ref id="functions" name="function reference">.
+
+The advantage with using function names directly is that the macros will
+work regardless of the current key bindings, so they are not dependent on
+the user having particular key definitions.  This makes them more robust
+and portable, and also facilitates defining of macros in files used by more
+than one user (eg. the system Muttrc).
+
+Optionally you can specify a descriptive text after <em/sequence/,
+which is shown in the help screens.
+
+<bf/Note:/ Macro definitions (if any) listed in the help screen(s), are
+silently truncated at the screen width, and are not wrapped.   
+
+<sect1>Using color and mono video attributes<label id="color">
+<p>
+Usage: <tt/color/ <em/object/ <em/foreground/ <em/background/ &lsqb; <em/regexp/ &rsqb;<newline>
+Usage: <tt/color/ index <em/foreground/ <em/background/ <em/pattern/<newline>
+Usage: <tt/uncolor/ index <em/pattern/ &lsqb; <em/pattern/ ...  &rsqb;<newline>
+
+If your terminal supports color, you can spice up Mutt by creating your own
+color scheme.  To define the color of an object (type of information), you
+must specify both a foreground color <bf/and/ a background color (it is not
+possible to only specify one or the other).
+
+<em/object/ can be one of:
+
+<itemize>
+<item>attachment
+<item>body (match <em/regexp/ in the body of messages)
+<item>bold (hiliting bold patterns in the body of messages)
+<item>error (error messages printed by Mutt)
+<item>header (match <em/regexp/ in the message header)
+<item>hdrdefault (default color of the message header in the pager)
+<item>index (match <em/pattern/ in the message index)
+<item>indicator (arrow or bar used to indicate the current item in a menu)
+<item>markers (the ``+'' markers at the beginning of wrapped lines in the pager)
+<item>message (informational messages)
+<item>normal
+<item>quoted (text matching <ref id="quote_regexp"
+name="&dollar;quote&lowbar;regexp"> in the body of a message)
+<item>quoted1, quoted2, ..., quoted<bf/N/ (higher levels of quoting)
+<item>search (hiliting of words in the pager)
+<item>signature
+<item>status (mode lines used to display info about the mailbox or message)
+<item>tilde (the ``&tilde;'' used to pad blank lines in the pager)
+<item>tree (thread tree drawn in the message index and attachment menu)
+<item>underline (hiliting underlined patterns in the body of messages)
+</itemize>
+
+<em/foreground/ and <em/background/ can be one of the following:
+
+<itemize>
+<item>white
+<item>black
+<item>green
+<item>magenta
+<item>blue
+<item>cyan
+<item>yellow
+<item>red
+<item>default
+<item>color<em/x/
+</itemize>
+
+<em/foreground/ can optionally be prefixed with the keyword <tt/bright/ to make
+the foreground color boldfaced (e.g., <tt/brightred/).
+
+If your terminal supports it, the special keyword <em/default/ can be
+used as a transparent color.  The value <em/brightdefault/ is also valid.
+If Mutt is linked against the <em/S-Lang/ library, you also need to set
+the <em/COLORFGBG/ environment variable to the default colors of your
+terminal for this to work; for example (for Bourne-like shells):
+
+<tscreen><verb>
+set COLORFGBG="green;black"
+export COLORFGBG
+</verb></tscreen>
+
+<bf/Note:/ The <em/S-Lang/ library requires you to use the <em/lightgray/
+and <em/brown/ keywords instead of <em/white/ and <em/yellow/ when
+setting this variable.
+
+<bf/Note:/ The uncolor command can be applied to the index object only.  It
+removes entries from the list. You <bf/must/ specify the same pattern
+specified in the color command for it to be removed.  The pattern ``*'' is
+a special token which means to clear the color index list of all entries.
+
+Mutt also recognizes the keywords <em/color0/, <em/color1/, &hellip;,
+<em/color/<bf/N-1/ (<bf/N/ being the number of colors supported
+by your terminal).  This is useful when you remap the colors for your
+display (for example by changing the color associated with <em/color2/
+for your xterm), since color names may then lose their normal meaning.
+
+If your terminal does not support color, it is still possible change the video
+attributes through the use of the ``mono'' command:
+
+Usage: <tt/mono/ <em/&lt;object&gt; &lt;attribute&gt;/ &lsqb; <em/regexp/ &rsqb;<newline>
+Usage: <tt/mono/ index <em/attribute/ <em/pattern/<newline>
+Usage: <tt/unmono/ index <em/pattern/ &lsqb; <em/pattern/ ...  &rsqb;<newline>
+
+where <em/attribute/ is one of the following:
+
+<itemize>
+<item>none
+<item>bold
+<item>underline
+<item>reverse
+<item>standout
+</itemize>
+
+<sect1>Ignoring (weeding) unwanted message headers<label id="ignore">
+<p>
+Usage: <tt/&lsqb;un&rsqb;ignore/ <em/pattern/ &lsqb; <em/pattern/ ... &rsqb;
+
+Messages often have many header fields added by automatic processing systems,
+or which may not seem useful to display on the screen.  This command allows
+you to specify header fields which you don't normally want to see.
+
+You do not need to specify the full header field name.  For example,
+``ignore content-'' will ignore all header fields that begin with the pattern
+``content-''. ``ignore *'' will ignore all headers.
+
+To remove a previously added token from the list, use the ``unignore'' command.
+The ``unignore'' command will make Mutt display headers with the given pattern.
+For example, if you do ``ignore x-'' it is possible to ``unignore x-mailer''.
+
+``unignore *'' will remove all tokens from the ignore list.
+
+For example:
+<tscreen><verb>
+# Sven's draconian header weeding
+ignore *
+unignore from date subject to cc
+unignore organization organisation x-mailer: x-newsreader: x-mailing-list:
+unignore posted-to:
+</verb></tscreen>
+
+<sect1>Alternative addresses<label id="alternates">
+<p>
+Usage: <tt/&lsqb;un&rsqb;alternates/ <em/regexp/ &lsqb; <em/regexp/ ... &rsqb;<newline>
+
+With various functions, mutt will treat messages differently,
+depending on whether you sent them or whether you received them from
+someone else.  For instance, when replying to a message that you
+sent to a different party, mutt will automatically suggest to send
+the response to the original message's recipients -- responding to
+yourself won't make much sense in many cases.  (See <ref
+id="reply_to" name="&dollar;reply_to">.)
+
+Many users receive e-mail under a number of different addresses. To
+fully use mutt's features here, the program must be able to
+recognize what e-mail addresses you receive mail under. That's the
+purpose of the <tt/alternates/ command: It takes a list of regular
+expressions, each of which can identify an address under which you
+receive e-mail.
+
+To remove a regular expression from this list, use the
+<tt/unalternates/ command.
+
+<sect1>Mailing lists<label id="lists">
+<p>
+Usage: <tt/&lsqb;un&rsqb;lists/ <em/regexp/ &lsqb; <em/regexp/ ... &rsqb;<newline>
+Usage: <tt/&lsqb;un&rsqb;subscribe/ <em/regexp/ &lsqb; <em/regexp/ ... &rsqb;
+
+Mutt has a few nice features for <ref id="using_lists" name="handling
+mailing lists">.  In order to take advantage of them, you must
+specify which addresses belong to mailing lists, and which mailing
+lists you are subscribed to.  Once you have done this, the <ref
+id="list-reply" name="list-reply"> function will work for all known lists.
+Additionally, when you send a message to a subscribed list, mutt will
+add a Mail-Followup-To header to tell other users' mail user agents
+not to send copies of replies to your personal address.   Note that
+the Mail-Followup-To header is a non-standard extension which is not
+supported by all mail user agents.  Adding it is not bullet-proof against
+receiving personal CCs of list messages.  Also note that the generation
+of the Mail-Followup-To header is controlled by the <ref id="followup_to"
+name="&dollar;followup_to"> configuration variable.
+
+More precisely, Mutt maintains lists of patterns for the addresses
+of known and subscribed mailing lists.  Every subscribed mailing
+list is known. To mark a mailing list as known, use the ``lists''
+command.  To mark it as subscribed, use ``subscribe''.
+
+You can use regular expressions with both commands.  To mark all
+messages sent to a specific bug report's address on mutt's bug
+tracking system as list mail, for instance, you could say
+``subscribe [0-9]*@bugs.guug.de''.  Often, it's sufficient to just
+give a portion of the list's e-mail address.
+
+Specify as much of the address as you need to to remove ambiguity.  For
+example, if you've subscribed to the Mutt mailing list, you will receive mail
+addresssed to <em/mutt-users@mutt.org/.  So, to tell Mutt that this is a
+mailing list, you could add ``lists mutt-users'' to your
+initialization file.  To tell mutt that you are subscribed to it,
+add ``subscribe mutt-users'' to your initialization file instead.
+If you also happen to get mail from someone whose address is
+<em/mutt-users@example.com/, you could use ``lists mutt-users@mutt.org'' 
+or ``subscribe mutt-users@mutt.org'' to
+match only mail from the actual list.
+
+The ``unlists'' command is used to remove a token from the list of
+known and subscribed mailing-lists. Use ``unlists *'' to remove all
+tokens.
+
+To remove a mailing list from the list of subscribed mailing lists,
+but keep it on the list of known mailing lists, use ``unsubscribe''.
+
+<sect1>Using Multiple spool mailboxes<label id="mbox-hook">
+<p>
+Usage: <tt/mbox-hook/ &lsqb;!&rsqb;<em/pattern/ <em/mailbox/
+
+This command is used to move read messages from a specified mailbox to a
+different mailbox automatically when you quit or change folders.
+<em/pattern/ is a regular expression specifying the mailbox to treat as a
+``spool'' mailbox and <em/mailbox/ specifies where mail should be saved when
+read.
+
+Unlike some of the other <em/hook/ commands, only the <em/first/ matching
+pattern is used (it is not possible to save read mail in more than a single
+mailbox).
+
+<sect1>Defining mailboxes which receive mail<label id="mailboxes">
+<p>
+Usage: <tt/&lsqb;un&rsqb;mailboxes/ &lsqb;!&rsqb;<em/filename/ &lsqb; <em/filename/ ... &rsqb;
+
+This command specifies folders which can receive mail and
+which will be checked for new messages.  By default, the
+main menu status bar displays how many of these folders have
+new messages.
+<p>
+When changing folders, pressing <em/space/ will cycle
+through folders with new mail.
+<p>
+Pressing TAB in the directory browser will bring up a menu showing the files
+specified by the <tt/mailboxes/ command, and indicate which contain new
+messages.  Mutt will automatically enter this mode when invoked from the
+command line with the <tt/-y/ option.
+
+The ``unmailboxes'' command is used to remove a token from the list
+of folders which receive mail. Use ``unmailboxes *'' to remove all
+tokens.
+
+<p>
+<bf/Note:/ new mail is detected by comparing the last modification time to
+the last access time.  Utilities like <tt/biff/ or <tt/frm/ or any other
+program which accesses the mailbox might cause Mutt to never detect new mail
+for that mailbox if they do not properly reset the access time.  Backup
+tools are another common reason for updated access times.
+<p>
+
+<bf/Note:/ the filenames in the <tt/mailboxes/ command are resolved when
+the command is executed, so if these names contain <ref id="shortcuts"
+name="shortcut characters"> (such as ``='' and ``!''), any variable
+definition that affect these characters (like <ref id="folder"
+name="&dollar;folder"> and <ref id="spoolfile" name="&dollar;spoolfile">)
+should be executed before the <tt/mailboxes/ command.
+
+<sect1>User defined headers<label id="my_hdr">
+<p>
+Usage:<newline>
+<tt/my_hdr/ <em/string/<newline>
+<tt/unmy_hdr/ <em/field/ &lsqb; <em/field/ ... &rsqb;
+
+The ``my&lowbar;hdr'' command allows you to create your own header
+fields which will be added to every message you send.
+
+For example, if you would like to add an ``Organization:'' header field to
+all of your outgoing messages, you can put the command
+
+<quote>
+my_hdr Organization: A Really Big Company, Anytown, USA
+</quote>
+
+in your <tt/.muttrc/.
+
+<bf/Note:/  space characters are <em/not/ allowed between the keyword and
+the colon (``:'').  The standard for electronic mail (RFC822) says that
+space is illegal there, so Mutt enforces the rule.
+
+If you would like to add a header field to a single message, you should
+either set the <ref id="edit_headers" name="edit&lowbar;headers"> variable,
+or use the <em/edit-headers/ function (default: ``E'') in the send-menu so
+that you can edit the header of your message along with the body.
+
+To remove user defined header fields, use the ``unmy&lowbar;hdr''
+command.  You may specify an asterisk (``*'') to remove all header
+fields, or the fields to remove.  For example, to remove all ``To'' and
+``Cc'' header fields, you could use:
+
+<quote>
+unmy_hdr to cc
+</quote>
+
+<sect1>Defining the order of headers when viewing messages<label id="hdr_order">
+<p>
+Usage: <tt/hdr&lowbar;order/ <em/header1/ <em/header2/ <em/header3/
+
+With this command, you can specify an order in which mutt will attempt
+to present headers to you when viewing messages.
+
+``unhdr_order *'' will clear all previous headers from the order list,
+thus removing the header order effects set by the system-wide startup
+file.
+
+<tscreen><verb>
+hdr&lowbar;order From Date: From: To: Cc: Subject:
+</verb></tscreen>
+
+<sect1>Specify default save filename<label id="save-hook">
+<p>
+Usage: <tt/save-hook/ &lsqb;!&rsqb;<em/pattern/ <em/filename/
+
+This command is used to override the default filename used when saving
+messages.  <em/filename/ will be used as the default filename if the message is
+<em/From:/ an address matching <em/regexp/ or if you are the author and the
+message is addressed <em/to:/ something matching <em/regexp/.
+
+See <ref id="pattern_hook" name="Message Matching in Hooks"> for information on the exact format of <em/pattern/.
+
+Examples:
+
+<tscreen><verb>
+save-hook me@(turing\\.)?cs\\.hmc\\.edu$ +elkins
+save-hook aol\\.com$ +spam
+</verb></tscreen>
+
+Also see the <ref id="fcc-save-hook" name="fcc-save-hook"> command.
+
+<sect1>Specify default Fcc: mailbox when composing<label id="fcc-hook">
+<p>
+Usage: <tt/fcc-hook/ &lsqb;!&rsqb;<em/pattern/ <em/mailbox/
+
+This command is used to save outgoing mail in a mailbox other than
+<ref id="record" name="&dollar;record">.  Mutt searches the initial list of
+message recipients for the first matching <em/regexp/ and uses <em/mailbox/
+as the default Fcc: mailbox.  If no match is found the message will be saved
+to <ref id="record" name="&dollar;record"> mailbox.
+
+See <ref id="pattern_hook" name="Message Matching in Hooks"> for information on the exact format of <em/pattern/.
+
+Example: <tt/fcc-hook aol.com&dollar; +spammers/
+
+The above will save a copy of all messages going to the aol.com domain to
+the `+spammers' mailbox by default.  Also see the <ref id="fcc-save-hook" 
+name="fcc-save-hook"> command.
+
+<sect1>Specify default save filename and default Fcc: mailbox at once<label
+id="fcc-save-hook">
+<p>
+Usage: <tt/fcc-save-hook/ &lsqb;!&rsqb;<em/pattern/ <em/mailbox/
+
+This command is a shortcut, equivalent to doing both a <ref id="fcc-hook" name="fcc-hook">
+and a <ref id="save-hook" name="save-hook"> with its arguments.
+
+<sect1>Change settings based upon message recipients<label id="send-hook"><label id="reply-hook">
+<p>
+Usage: <tt/reply-hook/ &lsqb;!&rsqb;<em/pattern/ <em/command/<newline>
+Usage: <tt/send-hook/ &lsqb;!&rsqb;<em/pattern/ <em/command/
+
+These commands can be used to execute arbitrary configuration commands based
+upon recipients of the message.  <em/pattern/ is a regular expression
+matching the desired address.  <em/command/ is executed when <em/regexp/
+matches recipients of the message.
+
+<tt/reply-hook/ is matched against the message you are <em/replying/
+<bf/to/, instead of the message you are <em/sending/.  <tt/send-hook/ is
+matched against all messages, both <em/new/ and <em/replies/.  <bf/Note:/
+<tt/reply-hook/s are matched <bf/before/ the <tt/send-hook/, <bf/regardless/
+of the order specified in the users's configuration file.
+
+For each type of <tt/send-hook/ or <tt/reply-hook/, When multiple matches
+occur, commands are executed in the order they are specified in the muttrc
+(for that type of hook).
+
+See <ref id="pattern_hook" name="Message Matching in Hooks"> for information on the exact format of <em/pattern/.
+
+Example: <tt/send-hook mutt &dquot;set mime&lowbar;forward signature=''&dquot;/
+
+Another typical use for this command is to change the values of the
+<ref id="attribution" name="&dollar;attribution">, <ref id="signature"
+name="&dollar;signature"> and <ref id="locale" name="&dollar;locale">
+variables in order to change the language of the attributions and
+signatures based upon the recipients.
+
+<bf/Note:/ the send-hook's are only executed ONCE after getting the initial
+list of recipients.  Adding a recipient after replying or editing the
+message will NOT cause any send-hook to be executed.  Also note that
+my_hdr commands which modify recipient headers, or the message's
+subject, don't have any effect on the current message when executed
+from a send-hook.
+
+<sect1>Change settings before formatting a message<label id="message-hook">
+<p>
+Usage: <tt/message-hook/ &lsqb;!&rsqb;<em/pattern/ <em/command/
+
+This command can be used to execute arbitrary configuration commands
+before viewing or formatting a message based upon information about the message.
+<em/command/ is executed if the <em/pattern/ matches the message to be
+displayed. When multiple matches occur, commands are executed in the order
+they are specified in the muttrc.
+
+See <ref id="pattern_hook" name="Message Matching in Hooks"> for
+information on the exact format of <em/pattern/.
+
+Example:
+<tscreen><verb>
+message-hook ~A 'set pager=builtin'
+message-hook '~f freshmeat-news' 'set pager="less \"+/^  subject: .*\""'
+</verb></tscreen>
+
+<sect1>Choosing the cryptographic key of the recipient<label id="crypt-hook">
+<p>
+Usage: <tt/crypt-hook/ <em/pattern/ <em/keyid/
+
+When encrypting messages with PGP or OpenSSL, you may want to associate a certain
+key with a given e-mail address automatically, either because the
+recipient's public key can't be deduced from the destination address,
+or because, for some reasons, you need to override the key Mutt would
+normally use.  The crypt-hook command provides a method by which you can
+specify the ID of the public key to be used when encrypting messages to
+a certain recipient.
+
+The meaning of "key id" is to be taken broadly in this context:  You
+can either put a numerical key ID here, an e-mail address, or even
+just a real name.
+
+<sect1>Adding key sequences to the keyboard buffer<label id="push">
+<p>
+Usage: <tt/push/ <em/string/
+
+This command adds the named string to the keyboard buffer. The string may
+contain control characters, key names and function names like the sequence
+string in the <ref id="macro" name="macro"> command. You may use it to
+automatically run a sequence of commands at startup, or when entering
+certain folders.
+
+<sect1>Executing functions<label id="exec">
+<p>
+Usage: <tt/exec/ <em/function/ &lsqb; <em/function/ ... &rsqb;
+
+This command can be used to execute any function. Functions are
+listed in the <ref id="functions" name="function reference">.
+``exec function'' is equivalent to ``push &lt;function&gt;''.
+
+<sect1>Message Scoring<label id="score-command">
+<p>
+Usage: <tt/score/ <em/pattern/ <em/value/<newline>
+Usage: <tt/unscore/ <em/pattern/ &lsqb; <em/pattern/ ... &rsqb;
+
+The <tt/score/ commands adds <em/value/ to a message's score if <em/pattern/
+matches it.  <em/pattern/ is a string in the format described in the <ref
+id="patterns" name="patterns"> section (note: For efficiency reasons, patterns
+which scan information not available in the index, such as <tt>&tilde;b</tt>,
+<tt>&tilde;B</tt> or <tt>&tilde;h</tt>, may not be used).  <em/value/ is a
+positive or negative integer.  A message's final score is the sum total of all
+matching <tt/score/ entries.  However, you may optionally prefix <em/value/ with
+an equal sign (=) to cause evaluation to stop at a particular entry if there is
+a match.  Negative final scores are rounded up to 0.
+
+The <tt/unscore/ command removes score entries from the list.  You <bf/must/
+specify the same pattern specified in the <tt/score/ command for it to be
+removed.  The pattern ``*'' is a special token which means to clear the list
+of all score entries.
+
+<sect1>Setting variables<label id="set">
+<p>
+Usage: <tt/set/ &lsqb;no|inv&rsqb;<em/variable/&lsqb;=<em/value/&rsqb; &lsqb; <em/variable/ ... &rsqb;<newline>
+Usage: <tt/toggle/ <em/variable/ &lsqb;<em/variable/ ... &rsqb;<newline>
+Usage: <tt/unset/ <em/variable/ &lsqb;<em/variable/ ... &rsqb;<newline>
+Usage: <tt/reset/ <em/variable/ &lsqb;<em/variable/ ... &rsqb;
+
+This command is used to set (and unset) <ref id="variables"
+name="configuration variables">.  There are four basic types of variables:
+boolean, number, string and quadoption.  <em/boolean/ variables can be
+<em/set/ (true) or <em/unset/ (false).  <em/number/ variables can be
+assigned a positive integer value.
+
+<em/string/ variables consist of any number of printable characters.
+<em/strings/ must be enclosed in quotes if they contain spaces or tabs.  You
+may also use the ``C'' escape sequences <bf/&bsol;n/ and <bf/&bsol;t/ for
+newline and tab, respectively.
+
+<em/quadoption/ variables are used to control whether or not to be prompted
+for certain actions, or to specify a default action.  A value of <em/yes/
+will cause the action to be carried out automatically as if you had answered
+yes to the question.  Similarly, a value of <em/no/ will cause the the
+action to be carried out as if you had answered ``no.''  A value of
+<em/ask-yes/ will cause a prompt with a default answer of ``yes'' and
+<em/ask-no/ will provide a default answer of ``no.''
+
+Prefixing a variable with ``no'' will unset it.  Example: <tt/set noaskbcc/.
+
+For <em/boolean/ variables, you may optionally prefix the variable name with
+<tt/inv/ to toggle the value (on or off).  This is useful when writing
+macros.  Example: <tt/set invsmart&lowbar;wrap/.
+
+The <tt/toggle/ command automatically prepends the <tt/inv/ prefix to all
+specified variables.
+
+The <tt/unset/ command automatically prepends the <tt/no/ prefix to all
+specified variables.
+
+Using the enter-command function in the <em/index/ menu, you can query the
+value of a variable by prefixing the name of the variable with a question
+mark:
+
+<tscreen><verb>
+set ?allow_8bit
+</verb></tscreen>
+
+The question mark is actually only required for boolean and quadoption 
+variables.
+
+The <tt/reset/ command resets all given variables to the compile time
+defaults (hopefully mentioned in this manual). If you use the command
+<tt/set/ and prefix the variable with ``&amp;'' this has the same
+behavior as the reset command.
+
+With the <tt/reset/ command there exists the special variable ``all'',
+which allows you to reset all variables to their system defaults.
+
+<sect1>Reading initialization commands from another file<label id="source">
+<p>
+Usage: <tt/source/ <em/filename/ &lsqb; <em/filename/ ... &rsqb;
+
+This command allows the inclusion of initialization commands
+from other files.  For example, I place all of my aliases in
+<tt>&tilde;/.mail&lowbar;aliases</tt> so that I can make my
+<tt>&tilde;/.muttrc</tt> readable and keep my aliases private.
+
+If the filename begins with a tilde (``&tilde;''), it will be expanded to the
+path of your home directory.
+
+If the filename ends with a vertical bar (|), then <em/filename/ is
+considered to be an executable program from which to read input (eg.
+<tt/source ~/bin/myscript|/).
+
+<sect1>Removing hooks<label id="unhook">
+<p>
+Usage: <tt/unhook/ &lsqb; * | <em/hook-type/ &rsqb;
+
+This command permits you to flush hooks you have previously defined.
+You can either remove all hooks by giving the ``*'' character as an
+argument, or you can remove all hooks of a specific type by saying
+something like <tt/unhook send-hook/.
+
+<sect>Advanced Usage
+
+<sect1>Regular Expressions<label id="regexp">
+<p>
+All string patterns in Mutt including those in more complex
+<ref id="patterns" name="patterns"> must be specified
+using regular expressions (regexp) in the ``POSIX extended'' syntax (which
+is more or less the syntax used by egrep and GNU awk).  For your
+convenience, we have included below a brief description of this syntax.
+
+The search is case sensitive if the pattern contains at least one upper
+case letter, and case insensitive otherwise. Note that ``&bsol;''
+must be quoted if used for a regular expression in an initialization
+command: ``&bsol;&bsol;''.
+
+A regular expression is a pattern that describes a set of strings.
+Regular expressions are constructed analogously to arithmetic
+expressions, by using various operators to combine smaller expressions.
+
+Note that the regular expression can be enclosed/delimited by either &dquot;
+or ' which is useful if the regular expression includes a white-space
+character.  See <ref id="muttrc-syntax" name="Syntax of Initialization Files">
+for more information on &dquot; and ' delimiter processing.  To match a
+literal &dquot; or ' you must preface it with \ (backslash).
+
+The fundamental building blocks are the regular expressions that match
+a single character.  Most characters, including all letters and digits,
+are regular expressions that match themselves.  Any metacharacter with
+special meaning may be quoted by preceding it with a backslash.
+
+The period ``.'' matches any single character.  The caret ``&circ;'' and
+the dollar sign ``&dollar'' are metacharacters that respectively match
+the empty string at the beginning and end of a line.
+
+A list of characters enclosed by ``&lsqb;'' and ``&rsqb;'' matches any
+single character in that list; if the first character of the list
+is a caret ``&circ;'' then it matches any character <bf/not/ in the
+list.  For example, the regular expression <bf/&lsqb;0123456789&rsqb;/
+matches any single digit.  A range of ASCII characters may be specified
+by giving the first and last characters, separated by a hyphen
+``&hyphen;''.  Most metacharacters lose their special meaning inside
+lists.  To include a literal ``&rsqb;'' place it first in the list.
+Similarly, to include a literal ``&circ;'' place it anywhere but first.
+Finally, to include a literal hyphen ``&hyphen;'' place it last.
+
+Certain named classes of characters are predefined.  Character classes
+consist of ``&lsqb;:'', a keyword denoting the class, and ``:&rsqb;''.
+The following classes are defined by the POSIX standard:
+
+<descrip>
+<tag/&lsqb;:alnum:&rsqb;/
+Alphanumeric characters.
+<tag/&lsqb;:alpha:&rsqb;/
+Alphabetic characters.
+<tag/&lsqb;:blank:&rsqb;/
+Space or tab characters.
+<tag/&lsqb;:cntrl:&rsqb;/
+Control characters.
+<tag/&lsqb;:digit:&rsqb;/
+Numeric characters.
+<tag/&lsqb;:graph:&rsqb;/
+Characters that are both printable and visible.  (A space is printable,
+but not visible, while an ``a'' is both.)
+<tag/&lsqb;:lower:&rsqb;/
+Lower-case alphabetic characters.
+<tag/&lsqb;:print:&rsqb;/
+Printable characters (characters that are not control characters.)
+<tag/&lsqb;:punct:&rsqb;/
+Punctuation characters (characters that are not letter, digits, control
+characters, or space characters).
+<tag/&lsqb;:space:&rsqb;/
+Space characters (such as space, tab and formfeed, to name a few).
+<tag/&lsqb;:upper:&rsqb;/
+Upper-case alphabetic characters.
+<tag/&lsqb;:xdigit:&rsqb;/
+Characters that are hexadecimal digits.
+</descrip>
+
+A character class is only valid in a regular expression inside the
+brackets of a character list.  Note that the brackets in these
+class names are part of the symbolic names, and must be included
+in addition to the brackets delimiting the bracket list.  For
+example, <bf/&lsqb;&lsqb;:digit:&rsqb;&rsqb;/ is equivalent to
+<bf/&lsqb;0-9&rsqb;/.
+
+Two additional special sequences can appear in character lists.  These
+apply to non-ASCII character sets, which can have single symbols (called
+collating elements) that are represented with more than one character,
+as well as several characters that are equivalent for collating or
+sorting purposes:
+
+<descrip>
+<tag/Collating Symbols/
+A collating symbol is a multi-character collating element enclosed in
+``&lsqb;.'' and ``.&rsqb;''.  For example, if ``ch'' is a collating
+element, then <bf/&lsqb;&lsqb;.ch.&rsqb;&rsqb;/ is a regexp that matches
+this collating element, while <bf/&lsqb;ch&rsqb;/ is a regexp that
+matches either ``c'' or ``h''.
+<tag/Equivalence Classes/
+An equivalence class is a locale-specific name for a list of
+characters that are equivalent. The name is enclosed in ``&lsqb;=''
+and ``=&rsqb;''.  For example, the name ``e'' might be used to
+represent all of ``&egrave;'' ``&eacute;'' and ``e''.  In this case,
+<bf/&lsqb;&lsqb;=e=&rsqb;&rsqb;/ is a regexp that matches any of
+``&egrave;'', ``&eacute;'' and ``e''.
+</descrip>
+
+A regular expression matching a single character may be followed by one
+of several repetition operators:
+
+<descrip>
+<tag/?/
+The preceding item is optional and matched at most once.
+<tag/*/
+The preceding item will be matched zero or more times.
+<tag/+/
+The preceding item will be matched one or more times.
+<tag/&lcub;n&rcub;/
+The preceding item is matched exactly <em/n/ times.
+<tag/&lcub;n,&rcub;/
+The preceding item is matched <em/n/ or more times.
+<tag/&lcub;,m&rcub;/
+The preceding item is matched at most <em/m/ times.
+<tag/&lcub;n,m&rcub;/
+The preceding item is matched at least <em/n/ times, but no more than
+<em/m/ times.
+</descrip>
+
+Two regular expressions may be concatenated; the resulting regular
+expression matches any string formed by concatenating two substrings
+that respectively match the concatenated subexpressions.
+
+Two regular expressions may be joined by the infix operator ``|'';
+the resulting regular expression matches any string matching either
+subexpression.
+
+Repetition takes precedence over concatenation, which in turn takes
+precedence over alternation.  A whole subexpression may be enclosed in
+parentheses to override these precedence rules.
+
+<bf/Note:/ If you compile Mutt with the GNU <em/rx/ package, the
+following operators may also be used in regular expressions:
+
+<descrip>
+<tag/&bsol;&bsol;y/
+Matches the empty string at either the beginning or the end of a word.
+<tag/&bsol;&bsol;B/
+Matches the empty string within a word.
+<tag/&bsol;&bsol;&lt;/
+Matches the empty string at the beginning of a word.
+<tag/&bsol;&bsol;&gt;/
+Matches the empty string at the end of a word.
+<tag/&bsol;&bsol;w/
+Matches any word-constituent character (letter, digit, or underscore).
+<tag/&bsol;&bsol;W/
+Matches any character that is not word-constituent.
+<tag/&bsol;&bsol;`/
+Matches the empty string at the beginning of a buffer (string).
+<tag/&bsol;&bsol;'/
+Matches the empty string at the end of a buffer.
+</descrip>
+
+Please note however that these operators are not defined by POSIX, so
+they may or may not be available in stock libraries on various systems.
+
+<sect1>Patterns<label id="patterns">
+<p>
+Many of Mutt's commands allow you to specify a pattern to match
+(limit, tag-pattern, delete-pattern, etc.).  There are several ways to select
+messages:
+
+<tscreen><verb>
+~A              all messages
+~b EXPR         messages which contain EXPR in the message body
+~B EXPR         messages which contain EXPR in the whole message
+~c USER         messages carbon-copied to USER
+~C EXPR         message is either to: or cc: EXPR
+~D              deleted messages
+~d [MIN]-[MAX]  messages with ``date-sent'' in a Date range
+~E              expired messages
+~e EXPR         message which contains EXPR in the ``Sender'' field
+~F              flagged messages
+~f USER         messages originating from USER
+~g              cryptographically signed messages
+~G              cryptographically encrypted messages
+~h EXPR         messages which contain EXPR in the message header
+~k             message contains PGP key material
+~i ID           message which match ID in the ``Message-ID'' field
+~L EXPR         message is either originated or received by EXPR
+~l              message is addressed to a known mailing list
+~m [MIN]-[MAX]  message in the range MIN to MAX *)
+~n [MIN]-[MAX]  messages with a score in the range MIN to MAX *)
+~N              new messages
+~O              old messages
+~p              message is addressed to you (consults alternates)
+~P              message is from you (consults alternates)
+~Q              messages which have been replied to
+~R              read messages
+~r [MIN]-[MAX]  messages with ``date-received'' in a Date range
+~S              superseded messages
+~s SUBJECT      messages having SUBJECT in the ``Subject'' field.
+~T              tagged messages
+~t USER         messages addressed to USER
+~U              unread messages
+~v             message is part of a collapsed thread.
+~V             cryptographically verified messages
+~x EXPR         messages which contain EXPR in the `References' field
+~y EXPR         messages which contain EXPR in the `X-Label' field
+~z [MIN]-[MAX]  messages with a size in the range MIN to MAX *)
+~=             duplicated messages (see $duplicate_threads)
+</verb></tscreen>
+
+Where EXPR, USER, ID, and SUBJECT are 
+<ref id="regexp" name="regular expressions">.  Special attention has to be
+made when using regular expressions inside of patterns.  Specifically,
+Mutt's parser for these patterns will strip one level of backslash (\),
+which is normally used for quoting.  If it is your intention to use a
+backslash in the regular expression, you will need to use two backslashes
+instead (\\).
+
+*) The forms <tt/&lt;&lsqb;MAX&rsqb;/, <tt/&gt;&lsqb;MIN&rsqb;/,
+<tt/&lsqb;MIN&rsqb;-/ and <tt/-&lsqb;MAX&rsqb;/
+are allowed, too.
+
+<sect2>Pattern Modifier
+<p>
+
+Note that patterns matching 'lists' of addresses (notably c,C,p,P and t)
+match if there is at least one match in the whole list. If you want to
+make sure that all elements of that list match, you need to prefix your
+pattern with ^.
+This example matches all mails which only has recipients from Germany.
+
+<tscreen><verb>
+^~C \.de$
+</verb></tscreen>
+
+<sect2>Complex Patterns
+<p>
+
+Logical AND is performed by specifying more than one criterion.  For
+example:
+
+<tscreen><verb>
+~t mutt ~f elkins
+</verb></tscreen>
+
+would select messages which contain the word ``mutt'' in the list of
+recipients <bf/and/ that have the word ``elkins'' in the ``From'' header
+field.
+
+Mutt also recognizes the following operators to create more complex search
+patterns:
+
+<itemize>
+<item>! -- logical NOT operator
+<item>| -- logical OR operator
+<item>() -- logical grouping operator
+</itemize>
+
+Here is an example illustrating a complex search pattern.  This pattern will
+select all messages which do not contain ``mutt'' in the ``To'' or ``Cc''
+field and which are from ``elkins''.
+
+<tscreen><verb>
+!(~t mutt|~c mutt) ~f elkins
+</verb></tscreen>
+
+Here is an example using white space in the regular expression (note
+the ' and &dquot; delimiters).  For this to match, the mail's subject must
+match the ``^Junk +From +Me$'' and it must be from either ``Jim +Somebody''
+or ``Ed +SomeoneElse'':
+
+<tscreen><verb>
+ '~s "^Junk +From +Me$" ~f ("Jim +Somebody"|"Ed +SomeoneElse")'
+</verb></tscreen>
+
+Note that if a regular expression contains parenthesis, or a veritical bar
+("|"), you <bf/must/ enclose the expression in double or single quotes since
+those characters are also used to separate different parts of Mutt's
+pattern language.  For example,
+
+<tscreen><verb>
+~f "me@(mutt\.org|cs\.hmc\.edu)"
+</verb></tscreen>
+
+Without the quotes, the parenthesis would truncate the regular expression
+to simply <em/me@/, which is probably not what you want.
+
+<sect2>Searching by Date
+<p>
+Mutt supports two types of dates, <em/absolute/ and <em/relative/.
+
+<bf/Absolute/.  Dates <bf/must/ be in DD/MM/YY format (month and year are
+optional, defaulting to the current month and year).  An example of a valid
+range of dates is:
+
+<tscreen><verb>
+Limit to messages matching: ~d 20/1/95-31/10
+</verb></tscreen>
+
+If you omit the minimum (first) date, and just specify ``-DD/MM/YY'', all
+messages <em/before/ the given date will be selected.  If you omit the maximum
+(second) date, and specify ``DD/MM/YY-'', all messages <em/after/ the given
+date will be selected.  If you specify a single date with no dash (``-''),
+only messages sent on the given date will be selected. 
+
+<bf/Error Margins/.  You can add error margins to absolute dates.
+An error margin is a sign (+ or -), followed by a digit, followed by
+one of the following units:
+<verb>
+y      years
+m      months
+w      weeks
+d      days
+</verb>
+As a special case, you can replace the sign by a ``*'' character,
+which is equivalent to giving identical plus and minus error margins.
+
+Example: To select any messages two weeks around January 15, 2001,
+you'd use the following pattern: 
+<tscreen><verb> 
+Limit to messages matching: ~d 15/1/2001*2w
+</verb></tscreen>
+
+
+<bf/Relative/.  This type of date is relative to the current date, and may
+be specified as:
+<itemize>
+<item>&gt;<em/offset/ (messages older than <em/offset/ units)
+<item>&lt;<em/offset/ (messages newer than <em/offset/ units)
+<item>=<em/offset/ (messages exactly <em/offset/ units old)
+</itemize>
+
+<em/offset/ is specified as a positive number with one of the following
+units:
+<verb>
+y       years
+m       months
+w       weeks
+d       days
+</verb>
+
+Example: to select messages less than 1 month old, you would use
+<tscreen><verb>
+Limit to messages matching: ~d <1m
+</verb></tscreen>
+
+
+
+<bf/Note:/ all dates used when searching are relative to the
+<bf/local/ time zone, so unless you change the setting of your <ref
+id="index_format" name="&dollar;index&lowbar;format"> to include a
+<tt/&percnt;&lsqb;...&rsqb;/ format, these are <bf/not/ the dates shown
+in the main index.
+
+<sect1>Using Tags
+<p>
+
+Sometimes it is desirable to perform an operation on a group of
+messages all at once rather than one at a time.  An example might be
+to save messages to a mailing list to a separate folder, or to
+delete all messages with a given subject.  To tag all messages
+matching a pattern, use the tag-pattern function, which is bound to
+``shift-T'' by default.  Or you can select individual messages by
+hand using the ``tag-message'' function, which is bound to ``t'' by
+default.  See <ref id="patterns" name="patterns"> for Mutt's pattern
+matching syntax.
+
+Once you have tagged the desired messages, you can use the
+``tag-prefix'' operator, which is the ``;'' (semicolon) key by default.
+When the ``tag-prefix'' operator is used, the <bf/next/ operation will
+be applied to all tagged messages if that operation can be used in that
+manner.  If the <ref id="auto_tag" name="&dollar;auto&lowbar;tag">
+variable is set, the next operation applies to the tagged messages
+automatically, without requiring the ``tag-prefix''.
+
+<sect1>Using Hooks<label id="hooks">
+<p>
+A <em/hook/ is a concept borrowed from the EMACS editor which allows you to
+execute arbitrary commands before performing some operation.  For example,
+you may wish to tailor your configuration based upon which mailbox you are
+reading, or to whom you are sending mail.  In the Mutt world, a <em/hook/
+consists of a <ref id="regexp" name="regular expression"> or
+<ref id="patterns" name="pattern"> along with a
+configuration option/command.  See
+<itemize>
+<item><ref id="folder-hook" name="folder-hook">
+<item><ref id="send-hook" name="send-hook">
+<item><ref id="message-hook" name="message-hook">
+<item><ref id="save-hook" name="save-hook">
+<item><ref id="mbox-hook" name="mbox-hook">
+<item><ref id="fcc-hook" name="fcc-hook">
+<item><ref id="fcc-save-hook" name="fcc-save-hook">
+</itemize>
+for specific details on each type of <em/hook/ available.
+
+<bf/Note:/ if a hook changes configuration settings, these changes remain
+effective until the end of the current mutt session. As this is generally
+not desired, a default hook needs to be added before all other hooks to
+restore configuration defaults. Here is an example with send-hook and the
+my_hdr directive:
+
+<tscreen><verb>
+send-hook . 'unmy_hdr From:'
+send-hook ~Cb@b.b my_hdr from: c@c.c
+</verb></tscreen>
+
+<sect2>Message Matching in Hooks<label id="pattern_hook">
+<p>
+Hooks that act upon messages (<tt/send-hook, save-hook, fcc-hook,
+message-hook/) are evaluated in a slightly different manner.  For the other
+types of hooks, a <ref id="regexp" name="regular expression"> is
+sufficient.  But in dealing with messages a finer grain of control is
+needed for matching since for different purposes you want to match
+different criteria.
+
+Mutt allows the use of the <ref id="patterns" name="search pattern">
+language for matching messages in hook commands.  This works in
+exactly the same way as it would when <em/limiting/ or
+<em/searching/ the mailbox, except that you are restricted to those
+operators which match information mutt extracts from the header of
+the message (i.e.  from, to, cc, date, subject, etc.).
+
+For example, if you wanted to set your return address based upon sending
+mail to a specific address, you could do something like:
+<tscreen><verb>
+send-hook '~t ^me@cs\.hmc\.edu$' 'my_hdr From: Mutt User <user@host>'
+</verb></tscreen>
+which would execute the given command when sending mail to
+<em/me@cs.hmc.edu/.
+
+However, it is not required that you write the pattern to match using the
+full searching language.  You can still specify a simple <em/regular
+expression/ like the other hooks, in which case Mutt will translate your
+pattern into the full language, using the translation specified by the 
+<ref id="default_hook" name="&dollar;default&lowbar;hook"> variable.  The
+pattern is translated at the time the hook is declared, so the value of 
+<ref id="default_hook" name="&dollar;default&lowbar;hook"> that is in effect
+at that time will be used.
+
+<sect1>External Address Queries<label id="query">
+<p>
+Mutt supports connecting to external directory databases such as LDAP,
+ph/qi, bbdb, or NIS through a wrapper script which connects to mutt
+using a simple interface.  Using the <ref id="query_command"
+name="&dollar;query&lowbar;command"> variable, you specify the wrapper
+command to use.  For example:
+
+<tscreen><verb>
+set query_command = "mutt_ldap_query.pl '%s'"
+</verb></tscreen>
+
+The wrapper script should accept the query on the command-line.  It
+should return a one line message, then each matching response on a
+single line, each line containing a tab separated address then name then
+some other optional information.  On error, or if there are no matching
+addresses, return a non-zero exit code and a one line error message.
+
+An example multiple response output:
+<tscreen><verb>
+Searching database ... 20 entries ... 3 matching:
+me@cs.hmc.edu           Michael Elkins  mutt dude
+blong@fiction.net       Brandon Long    mutt and more
+roessler@guug.de        Thomas Roessler mutt pgp
+</verb></tscreen>
+
+There are two mechanisms for accessing the query function of mutt.  One
+is to do a query from the index menu using the query function (default: Q).
+This will prompt for a query, then bring up the query menu which will
+list the matching responses.  From the query menu, you can select
+addresses to create aliases, or to mail.  You can tag multiple messages
+to mail, start a new query, or have a new query appended to the current
+responses.
+
+The other mechanism for accessing the query function is for address
+completion, similar to the alias completion.  In any prompt for address
+entry, you can use the complete-query function (default: ^T) to run a
+query based on the current address you have typed.  Like aliases, mutt
+will look for what you have typed back to the last space or comma.  If
+there is a single response for that query, mutt will expand the address
+in place.  If there are multiple responses, mutt will activate the query
+menu.  At the query menu, you can select one or more addresses to be
+added to the prompt.
+
+<sect1>Mailbox Formats
+<p>
+Mutt supports reading and writing of four different mailbox formats:
+mbox, MMDF, MH and Maildir.  The mailbox type is autodetected, so there
+is no need to use a flag for different mailbox types.  When creating new
+mailboxes, Mutt uses the default specified with the <ref id="mbox_type"
+name="&dollar;mbox&lowbar;type"> variable.
+
+<bf/mbox/.  This is the most widely used mailbox format for UNIX.  All
+messages are stored in a single file.  Each message has a line of the form:
+
+<tscreen><verb>
+From me@cs.hmc.edu Fri, 11 Apr 1997 11:44:56 PST
+</verb></tscreen>
+
+to denote the start of a new message (this is often referred to as the
+``From&lowbar;'' line).
+
+<bf/MMDF/.  This is a variant of the <em/mbox/ format.  Each message is
+surrounded by lines containing ``^A^A^A^A'' (four control-A's).
+
+<bf/MH/. A radical departure from <em/mbox/ and <em/MMDF/, a mailbox
+consists of a directory and each message is stored in a separate file.
+The filename indicates the message number (however, this is may not
+correspond to the message number Mutt displays). Deleted messages are
+renamed with a comma (,) prepended to the filename. <bf/Note:/ Mutt
+detects this type of mailbox by looking for either <tt/.mh&lowbar;sequences/
+or <tt/.xmhcache/ (needed to distinguish normal directories from MH
+mailboxes).
+
+<bf/Maildir/.  The newest of the mailbox formats, used by the Qmail MTA (a
+replacement for sendmail).  Similar to <em/MH/, except that it adds three
+subdirectories of the mailbox: <em/tmp/, <em/new/ and <em/cur/.  Filenames
+for the messages are chosen in such a way they are unique, even when two
+programs are writing the mailbox over NFS, which means that no file locking
+is needed.
+
+<sect1>Mailbox Shortcuts<label id="shortcuts">
+<p>
+There are a number of built in shortcuts which refer to specific mailboxes.
+These shortcuts can be used anywhere you are prompted for a file or mailbox
+path.
+
+<itemize>
+<item>! -- refers to your <ref id="spoolfile" name="&dollar;spoolfile"> (incoming) mailbox
+<item>&gt; -- refers to your <ref id="mbox" name="&dollar;mbox"> file
+<item>&lt; -- refers to your <ref id="record" name="&dollar;record"> file
+<item>- or !! -- refers to the file you've last visited
+<item>&tilde; -- refers to your home directory
+<item>= or + -- refers to your <ref id="folder" name="&dollar;folder"> directory
+<item>@<em/alias/ -- refers to the <ref id="save-hook" 
+name="default save folder"> as determined by the address of the alias
+</itemize>
+
+<sect1>Handling Mailing Lists<label id="using_lists">
+<p>
+
+Mutt has a few configuration options that make dealing with large
+amounts of mail easier.  The first thing you must do is to let Mutt
+know what addresses you consider to be mailing lists (technically
+this does not have to be a mailing list, but that is what it is most
+often used for), and what lists you are subscribed to.  This is
+accomplished through the use of the <ref id="lists"
+name="lists and subscribe"> commands in your muttrc.
+
+Now that Mutt knows what your mailing lists are, it can do several
+things, the first of which is the ability to show the name of a list
+through which you received a message (i.e., of a subscribed list) in
+the <em/index/ menu display.  This is useful to distinguish between
+personal and list mail in the same mailbox.  In the <ref id="index_format"
+name="&dollar;index&lowbar;format"> variable, the escape ``&percnt;L''
+will return the string ``To &lt;list&gt;'' when ``list'' appears in the
+``To'' field, and ``Cc &lt;list&gt;'' when it appears in the ``Cc''
+field (otherwise it returns the name of the author).
+
+Often times the ``To'' and ``Cc'' fields in mailing list messages
+tend to get quite large. Most people do not bother to remove the
+author of the message they are reply to from the list, resulting in
+two or more copies being sent to that person.  The ``list-reply''
+function, which by default is bound to ``L'' in the <em/index/ menu
+and <em/pager/, helps reduce the clutter by only replying to the
+known mailing list addresses instead of all recipients (except as
+specified by <tt/Mail-Followup-To/, see below).
+
+Mutt also supports the <tt/Mail-Followup-To/ header.  When you send
+a message to a list of recipients which includes one or several
+subscribed mailing lists, and if the <ref id="followup_to"
+name="&dollar;followup&lowbar;to"> option is set, mutt will generate
+a Mail-Followup-To header which contains all the recipients to whom
+you send this message, but not your address. This indicates that
+group-replies or list-replies (also known as ``followups'') to this
+message should only be sent to the original recipients of the
+message, and not separately to you - you'll receive your copy through
+one of the mailing lists you are subscribed to.
+
+Conversely, when group-replying or list-replying to a message which
+has a <tt/Mail-Followup-To/ header, mutt will respect this header if
+the <ref id="honor_followup_to"
+name="&dollar;honor&lowbar;followup&lowbar;to"> configuration
+variable is set.  Using list-reply will in this case also make sure
+that the reply goes to the mailing list, even if it's not specified
+in the list of recipients in the <tt/Mail-Followup-To/.
+
+Note that, when header editing is enabled, you can create a
+<tt/Mail-Followup-To/ header manually.  Mutt will only auto-generate
+this header if it doesn't exist when you send the message.
+
+
+The other method some mailing list admins use is to generate a
+``Reply-To'' field which points back to the mailing list address rather
+than the author of the message.  This can create problems when trying
+to reply directly to the author in private, since most mail clients
+will automatically reply to the address given in the ``Reply-To''
+field.  Mutt uses the <ref id="reply_to" name="&dollar;reply&lowbar;to">
+variable to help decide which address to use.  If set, you will be
+prompted as to whether or not you would like to use the address given in
+the ``Reply-To'' field, or reply directly to the address given in the
+``From'' field.  When unset, the ``Reply-To'' field will be used when
+present.
+
+The ``X-Label:'' header field can be used to further identify mailing
+lists or list subject matter (or just to annotate messages
+individually).  The <ref id="index_format"
+name="&dollar;index&lowbar;format"> variable's ``&percnt;y'' and
+``&percnt;Y'' escapes can be used to expand ``X-Label:'' fields in the
+index, and Mutt's pattern-matcher can match regular expressions to
+``X-Label:'' fields with the ``~y'' selector.  ``X-Label:'' is not a
+standard message header field, but it can easily be inserted by procmail
+and other mail filtering agents.
+
+Lastly, Mutt has the ability to <ref id="sort" name="sort"> the mailbox into
+<ref id="threads" name="threads">.  A thread is a group of messages which all relate to the same
+subject.  This is usually organized into a tree-like structure where a
+message and all of its replies are represented graphically.  If you've ever
+used a threaded news client, this is the same concept.  It makes dealing
+with large volume mailing lists easier because you can easily delete
+uninteresting threads and quickly find topics of value.
+
+<sect1>Delivery Status Notification (DSN) Support
+<p>
+RFC1894 defines a set of MIME content types for relaying information
+about the status of electronic mail messages.  These can be thought of as
+``return receipts.'' Berkeley sendmail 8.8.x currently has some command
+line options in which the mail client can make requests as to what type
+of status messages should be returned.
+
+To support this, there are two variables. <ref id="dsn_notify"
+name="&dollar;dsn&lowbar;notify"> is used to request receipts for
+different results (such as failed message, message delivered, etc.).
+<ref id="dsn_return" name="&dollar;dsn&lowbar;return"> requests how much
+of your message should be returned with the receipt (headers or full
+message).  Refer to the man page on sendmail for more details on DSN.
+
+<sect1>POP3 Support (OPTIONAL)
+<p>
+
+If Mutt was compiled with POP3 support (by running the <em/configure/
+script with the <em/--enable-pop/ flag), it has the ability to work
+with mailboxes located on a remote POP3 server and fetch mail for local
+browsing.
+
+You can access the remote POP3 mailbox by selecting the folder
+<tt>pop://popserver/</tt>.
+
+You can select an alternative port by specifying it with the server, ie:
+<tt>pop://popserver:port/</tt>.
+
+You can also specify different username for each folder, ie:
+<tt>pop://username@popserver[:port]/</tt>.
+
+Polling for new mail is more expensive over POP3 than locally. For this
+reason the frequency at which Mutt will check for mail remotely can be
+controlled by the
+<ref id="pop&lowbar;checkinterval" name="&dollar;pop&lowbar;checkinterval">
+variable, which defaults to every 60 seconds.
+
+If Mutt was compiled with SSL support (by running the <em/configure/
+script with the <em/--with-ssl/ flag), connections to POP3 servers
+can be encrypted. This naturally requires that the server supports
+SSL encrypted connections. To access a folder with POP3/SSL, you should
+use pops: prefix, ie:
+<tt>pops://[username@]popserver[:port]/</tt>.
+
+Another way to access your POP3 mail is the <em/fetch-mail/ function
+(default: G).  It allows to connect to <ref id="pop_host"
+name="pop&lowbar;host">, fetch all your new mail and place it in the
+local <ref id="spoolfile" name="spoolfile">.  After this
+point, Mutt runs exactly as if the mail had always been local.
+
+<bf/Note:/ If you only need to fetch all messages to local mailbox
+you should consider using a specialized program, such as <htmlurl
+url="http://www.ccil.org/~esr/fetchmail" name="fetchmail">
+
+<sect1>IMAP Support (OPTIONAL)
+<p>
+
+If Mutt was compiled with IMAP support (by running the <em/configure/
+script with the <em/--enable-imap/ flag), it has the ability to work
+with folders located on a remote IMAP server.
+
+You can access the remote inbox by selecting the folder
+<tt>imap://imapserver/INBOX</tt>, where <tt/imapserver/ is the name of the
+IMAP server and <tt/INBOX/ is the special name for your spool mailbox on
+the IMAP server. If you want to access another mail folder at the IMAP
+server, you should use <tt>imap://imapserver/path/to/folder</tt> where
+<tt>path/to/folder</tt> is the path of the folder you want to access.
+
+You can select an alternative port by specifying it with the server, ie:
+<tt>imap://imapserver:port/INBOX</tt>.
+
+You can also specify different username for each folder, ie:
+<tt>imap://username@imapserver[:port]/INBOX</tt>.
+
+If Mutt was compiled with SSL support (by running the <em/configure/
+script with the <em/--with-ssl/ flag), connections to IMAP servers
+can be encrypted. This naturally requires that the server supports
+SSL encrypted connections. To access a folder with IMAP/SSL, you should
+use <tt>imaps://[username@]imapserver[:port]/path/to/folder</tt> as your 
+folder path.
+
+Pine-compatible notation is also supported, ie
+<tt>{[username@]imapserver[:port][/ssl]}path/to/folder</tt>
+
+Note that not all servers use / as the hierarchy separator.  Mutt should
+correctly notice which separator is being used by the server and convert
+paths accordingly.
+
+When browsing folders on an IMAP server, you can toggle whether to look
+at only the folders you are subscribed to, or all folders with the
+<em/toggle-subscribed/ command.  See also the 
+<ref id="imap&lowbar;list&lowbar;subscribed"
+name="&dollar;imap&lowbar;list&lowbar;subscribed"> variable.
+
+Polling for new mail on an IMAP server can cause noticeable delays. So, you'll
+want to carefully tune the
+<ref id="mail&lowbar;check" name="&dollar;mail&lowbar;check">
+and
+<ref id="timeout" name="&dollar;timeout">
+variables. Personally I use
+<tscreen><verb>
+set mail_check=90
+set timeout=15
+</verb></tscreen>
+with relatively good results over my slow modem line.
+
+Note that if you are using mbox as the mail store on UW servers prior to
+v12.250, the server has been reported to disconnect a client if another client
+selects the same folder.
+
+<sect2>The Folder Browser
+<p>
+
+As of version 1.2, mutt supports browsing mailboxes on an IMAP
+server. This is mostly the same as the local file browser, with the
+following differences:
+<itemize>
+<item>In lieu of file permissions, mutt displays the string "IMAP",
+  possibly followed by the symbol "+", indicating
+  that the entry contains both messages and subfolders. On
+  Cyrus-like servers folders will often contain both messages and
+  subfolders. 
+<item>For the case where an entry can contain both messages and
+  subfolders, the selection key (bound to <tt>enter</tt> by default)
+  will choose to descend into the subfolder view. If you wish to view
+  the messages in that folder, you must use <tt>view-file</tt> instead
+  (bound to <tt>space</tt> by default).
+<item>You can delete mailboxes with the <tt>delete-mailbox</tt>
+  command (bound to <tt>d</tt> by default. You may also
+  <tt>subscribe</tt> and <tt>unsubscribe</tt> to mailboxes (normally
+  these are bound to <tt>s</tt> and <tt>u</tt>, respectively).
+</itemize>
+
+<sect2>Authentication
+<p>
+
+Mutt supports four authentication methods with IMAP servers: SASL,
+GSSAPI, CRAM-MD5, and LOGIN (there is a patch by Grant Edwards to add
+NTLM authentication for you poor exchange users out there, but it has
+yet to be integrated into the main tree). There is also support for
+the pseudo-protocol ANONYMOUS, which allows you to log in to a public
+IMAP server without having an account. To use ANONYMOUS, simply make
+your username blank or "anonymous".
+<p>
+SASL is a special super-authenticator, which selects among several protocols
+(including GSSAPI, CRAM-MD5, ANONYMOUS, and DIGEST-MD5) the most secure
+method available on your host and the server. Using some of these methods
+(including DIGEST-MD5 and possibly GSSAPI), your entire session will be
+encrypted and invisible to those teeming network snoops. It is the best
+option if you have it. To use it, you must have the Cyrus SASL library
+installed on your system and compile mutt with the <em/--with-sasl/ flag.
+<p>
+Mutt will try whichever methods are compiled in and available on the server,
+in the following order: SASL, ANONYMOUS, GSSAPI, CRAM-MD5, LOGIN.
+
+There are a few variables which control authentication: 
+<itemize>
+<item><ref id="imap&lowbar;user" name="&dollar;imap&lowbar;user"> - controls
+  the username under which you request authentication on the IMAP server,
+  for all authenticators. This is overridden by an explicit username in
+  the mailbox path (ie by using a mailbox name of the form
+  <tt/{user@host}/).
+<item><ref id="imap&lowbar;pass" name="&dollar;imap&lowbar;pass"> - a
+  password which you may preset, used by all authentication methods where
+  a password is needed.
+<item><ref id="imap&lowbar;authenticators"
+  name="&dollar;imap&lowbar;authenticators"> - a colon-delimited list of IMAP
+  authentication methods to try, in the order you wish to try them. If
+  specified, this overrides mutt's default (attempt everything, in the order
+  listed above).
+</itemize>
+
+<sect1>Managing multiple IMAP/POP accounts (OPTIONAL)<label id="account-hook">
+<p>
+
+If you happen to have accounts on multiple IMAP and/or POP servers,
+you may find managing all the authentication settings inconvenient and
+error-prone.  The account-hook command may help. This hook works like
+folder-hook but is invoked whenever you access a remote mailbox
+(including inside the folder browser), not just when you open the
+mailbox.
+<p>
+Some examples:
+
+<tscreen><verb>
+account-hook . 'unset imap_user; unset imap_pass; unset tunnel'
+account-hook imap://host1/ 'set imap_user=me1 imap_pass=foo'
+account-hook imap://host2/ 'set tunnel="ssh host2 /usr/libexec/imapd"'
+</verb></tscreen>
+
+<sect1>Start a WWW Browser on URLs (EXTERNAL)<label id="urlview">
+<p>
+If a message contains URLs (<em/unified ressource locator/ = address in the
+WWW space like <em>http://www.mutt.org/</em>), it is efficient to get
+a menu with all the URLs and start a WWW browser on one of them.  This
+functionality is provided by the external urlview program which can be
+retrieved at <htmlurl url="ftp://ftp.mutt.org/mutt/contrib/"
+name="ftp://ftp.mutt.org/mutt/contrib/"> and the configuration commands:
+<tscreen><verb>
+macro index \cb |urlview\n
+macro pager \cb |urlview\n
+</verb></tscreen>
+
+<sect>Mutt's MIME Support
+<p>
+Quite a bit of effort has been made to make Mutt the premier text-mode
+MIME MUA.  Every effort has been made to provide the functionality that
+the discerning MIME user requires, and the conformance to the standards
+wherever possible.  When configuring Mutt for MIME, there are two extra
+types of configuration files which Mutt uses.  One is the
+<tt/mime.types/ file, which contains the mapping of file extensions to 
+IANA MIME types.  The other is the <tt/mailcap/ file, which specifies
+the external commands to use for handling specific MIME types.
+
+<sect1>Using MIME in Mutt
+<p>
+There are three areas/menus in Mutt which deal with MIME, they are the
+pager (while viewing a message), the attachment menu and the compose
+menu.
+
+<sect2>Viewing MIME messages in the pager
+<p>
+When you select a message from the index and view it in the pager, Mutt
+decodes the message to a text representation.  Mutt internally supports
+a number of MIME types, including <tt>text/plain, text/enriched,
+message/rfc822, and message/news</tt>.  In addition, the export
+controlled version of Mutt recognizes a variety of PGP MIME types,
+including PGP/MIME and application/pgp.
+
+Mutt will denote attachments with a couple lines describing them.
+These lines are of the form:
+<tscreen><verb>
+[-- Attachment #1: Description --]
+[-- Type: text/plain, Encoding: 7bit, Size: 10000 --]
+</verb></tscreen>
+Where the <tt/Description/ is the description or filename given for the
+attachment, and the <tt/Encoding/ is one of
+<tt>7bit/8bit/quoted-printable/base64/binary</tt>.
+
+If Mutt cannot deal with a MIME type, it will display a message like:
+<tscreen><verb>
+[-- image/gif is unsupported (use 'v' to view this part) --]
+</verb></tscreen>
+
+<sect2>The Attachment Menu<label id="attach_menu">
+<p>
+The default binding for <tt/view-attachments/ is `v', which displays the
+attachment menu for a message.  The attachment menu displays a list of
+the attachments in a message.  From the attachment menu, you can save,
+print, pipe, delete, and view attachments.  You can apply these
+operations to a group of attachments at once, by tagging the attachments
+and by using the ``tag-prefix'' operator.  You can also reply to the
+current message from this menu, and only the current attachment (or the
+attachments tagged) will be quoted in your reply.  You can view
+attachments as text, or view them using the mailcap viewer definition.
+
+Finally, you can apply the usual message-related functions (like 
+<ref id="resend-message" name="resend-message">, and the reply
+and forward functions) to attachments of type <tt>message/rfc822</tt>.
+
+See the help on the attachment menu for more information.
+
+<sect2>The Compose Menu<label id="compose_menu">
+<p>
+The compose menu is the menu you see before you send a message.  It
+allows you to edit the recipient list, the subject, and other aspects
+of your message.  It also contains a list of the attachments of your
+message, including the main body.  From this menu, you can print, copy,
+filter, pipe, edit, compose, review, and rename an attachment or a
+list of tagged attachments.  You can also modifying the attachment
+information, notably the type, encoding and description.
+
+Attachments appear as follows:
+<verb>
+-   1 [text/plain, 7bit, 1K]             /tmp/mutt-euler-8082-0 <no description>
+    2 [applica/x-gunzip, base64, 422K]   ~/src/mutt-0.85.tar.gz <no description>
+</verb>
+
+The '-' denotes that Mutt will delete the file after sending (or
+postponing, or cancelling) the message.  It can be toggled with the
+<tt/toggle-unlink/ command (default: u).  The next field is the MIME
+content-type, and can be changed with the <tt/edit-type/ command
+(default: ^T).  The next field is the encoding for the attachment,
+which allows a binary message to be encoded for transmission on 7bit
+links.  It can be changed with the <tt/edit-encoding/ command
+(default: ^E).  The next field is the size of the attachment,
+rounded to kilobytes or megabytes.  The next field is the filename,
+which can be changed with the <tt/rename-file/ command (default: R).
+The final field is the description of the attachment, and can be
+changed with the <tt/edit-description/ command (default: d).
+
+<sect1>MIME Type configuration with <tt/mime.types/
+<p>
+When you add an attachment to your mail message, Mutt searches your
+personal mime.types file at <tt>&dollar;{HOME}/.mime.types</tt>, and then
+the system mime.types file at <tt>/usr/local/share/mutt/mime.types</tt> or
+<tt>/etc/mime.types</tt>
+
+The mime.types file consist of lines containing a MIME type and a space
+separated list of extensions.  For example:
+<tscreen><verb>
+application/postscript          ps eps
+application/pgp                 pgp
+audio/x-aiff                    aif aifc aiff
+</verb></tscreen>
+A sample <tt/mime.types/ file comes with the Mutt distribution, and
+should contain most of the MIME types you are likely to use.  
+
+If Mutt can not determine the mime type by the extension of the file you
+attach, it will look at the file.  If the file is free of binary
+information, Mutt will assume that the file is plain text, and mark it
+as <tt>text/plain</tt>.  If the file contains binary information, then Mutt will
+mark it as <tt>application/octet-stream</tt>.  You can change the MIME
+type that Mutt assigns to an attachment by using the <tt/edit-type/
+command from the compose menu (default: ^T). The MIME type is actually a
+major mime type followed by the sub-type, separated by a '/'. 6 major
+types: application, text, image, video, audio, and model have been approved
+after various internet discussions. Mutt recognises all of these if the 
+appropriate entry is found in the mime.types file. It also recognises other
+major mime types, such as the chemical type that is widely used in the 
+molecular modelling community to pass molecular data in various forms to 
+various molecular viewers. Non-recognised mime types should only be used 
+if the recipient of the message is likely to be expecting such attachments.
+
+<sect1>MIME Viewer configuration with <tt/mailcap/
+<p>
+Mutt supports RFC 1524 MIME Configuration, in particular the Unix
+specific format specified in Appendix A of RFC 1524.  This file format
+is commonly referred to as the mailcap format.  Many MIME compliant
+programs utilize the mailcap format, allowing you to specify handling
+for all MIME types in one place for all programs.  Programs known to
+use this format include Netscape, XMosaic, lynx and metamail.
+
+In order to handle various MIME types that Mutt can not handle
+internally, Mutt parses a series of external configuration files to
+find an external handler.  The default search string for these files
+is a colon delimited list set to
+<tscreen><verb>
+${HOME}/.mailcap:/usr/local/share/mutt/mailcap:/etc/mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap
+</verb></tscreen>
+where <tt/&dollar;HOME/ is your home directory.
+
+In particular, the metamail distribution will install a mailcap file,
+usually as <tt>/usr/local/etc/mailcap</tt>, which contains some baseline
+entries.
+
+<sect2>The Basics of the mailcap file
+<p>
+A mailcap file consists of a series of lines which are comments, blank,
+or definitions.
+
+A comment line consists of a &num; character followed by anything you want.
+
+A blank line is blank.
+
+A definition line consists of a content type, a view command, and any
+number of optional fields.  Each field of a definition line is divided
+by a semicolon ';' character.
+
+The content type is specified in the MIME standard type/subtype method.
+For example,
+<tt>text/plain, text/html, image/gif, </tt>
+etc.  In addition, the mailcap format includes two formats for
+wildcards, one using the special '*' subtype, the other is the implicit
+wild, where you only include the major type.  For example, <tt>image/*</tt>, or
+<tt>video,</tt> will match all image types and video types,
+respectively.
+
+The view command is a Unix command for viewing the type specified. There
+are two different types of commands supported. The default is to send
+the body of the MIME message to the command on stdin. You can change
+this behaviour by using &percnt;s as a parameter to your view command.
+This will cause Mutt to save the body of the MIME message to a temporary
+file, and then call the view command with the &percnt;s replaced by
+the name of the temporary file. In both cases, Mutt will turn over the
+terminal to the view program until the program quits, at which time Mutt
+will remove the temporary file if it exists.
+
+So, in the simplest form, you can send a text/plain message to the
+external pager more on stdin:
+<tscreen><verb>
+text/plain; more
+</verb></tscreen>
+Or, you could send the message as a file:
+<tscreen><verb>
+text/plain; more %s
+</verb></tscreen>
+Perhaps you would like to use lynx to interactively view a text/html 
+message:
+<tscreen><verb>
+text/html; lynx %s
+</verb></tscreen>
+In this case, lynx does not support viewing a file from stdin, so you
+must use the &percnt;s syntax.
+<bf/Note:/ <em>Some older versions of lynx contain a bug where they
+will check the mailcap file for a viewer for text/html.  They will find
+the line which calls lynx, and run it.  This causes lynx to continuously
+spawn itself to view the object.</em>
+
+On the other hand, maybe you don't want to use lynx interactively, you
+just want to have it convert the text/html to text/plain, then you can
+use:
+<tscreen><verb>
+text/html; lynx -dump %s | more
+</verb></tscreen>
+
+Perhaps you wish to use lynx to view text/html files, and a pager on
+all other text formats, then you would use the following:
+<tscreen><verb>
+text/html; lynx %s
+text/*; more
+</verb></tscreen>
+This is the simplest form of a mailcap file.
+
+<sect2>Secure use of mailcap
+<p>
+The interpretion of shell meta-characters embedded in MIME parameters
+can lead to security problems in general.  Mutt tries to quote parameters
+in expansion of %s syntaxes properly, and avoids risky characters by
+substituting them, see the <ref id="mailcap_sanitize"
+name="mailcap&lowbar;sanitize"> variable.
+
+Although mutt's procedures to invoke programs with mailcap seem to be
+safe, there are other applications parsing mailcap, maybe taking less care
+of it.  Therefore you should pay attention to the following rules:
+
+<em/Keep the %-expandos away from shell quoting./
+Don't quote them with single or double quotes.  Mutt does this for
+you, the right way, as should any other program which interprets
+mailcap.  Don't put them into backtick expansions.  Be highly careful
+with eval statements, and avoid them if possible at all.  Trying to fix
+broken behaviour with quotes introduces new leaks - there is no
+alternative to correct quoting in the first place.
+
+If you have to use the %-expandos' values in context where you need
+quoting or backtick expansions, put that value into a shell variable
+and reference the shell variable where necessary, as in the following
+example (using <tt/&dollar;charset/ inside the backtick expansion is safe,
+since it is not itself subject to any further expansion):
+
+<tscreen><verb>
+text/test-mailcap-bug; cat %s; copiousoutput; test=charset=%{charset} \
+        && test "`echo $charset | tr '[A-Z]' '[a-z]'`" != iso-8859-1
+</verb></tscreen>
+
+<sect2>Advanced mailcap Usage
+<p>
+
+<sect3>Optional Fields
+<p>
+In addition to the required content-type and view command fields, you
+can add semi-colon ';' separated fields to set flags and other options.
+Mutt recognizes the following optional fields:
+<descrip>
+<tag/copiousoutput/
+This flag tells Mutt that the command passes possibly large amounts of
+text on stdout.  This causes Mutt to invoke a pager (either the internal
+pager or the external pager defined by the pager variable) on the output
+of the view command.  Without this flag, Mutt assumes that the command
+is interactive.  One could use this to replace the pipe to <tt>more</tt>
+in the <tt>lynx -dump</tt> example in the Basic section:
+<tscreen><verb>
+text/html; lynx -dump %s ; copiousoutput
+</verb></tscreen>
+This will cause lynx to format the text/html output as text/plain
+and Mutt will use your standard pager to display the results.
+<tag/needsterminal/
+Mutt uses this flag when viewing attachments with <ref id="auto_view"
+name="autoview">, in order to decide whether it should honor the setting
+of the <ref id="wait_key" name="&dollar;wait&lowbar;key"> variable or
+not.  When an attachment is viewed using an interactive program, and the
+corresponding mailcap entry has a <em/needsterminal/ flag, Mutt will use
+<ref id="wait_key" name="&dollar;wait&lowbar;key"> and the exit status
+of the program to decide if it will ask you to press a key after the
+external program has exited.  In all other situations it will not prompt
+you for a key.
+<tag>compose=&lt;command&gt;</tag>
+This flag specifies the command to use to create a new attachment of a
+specific MIME type.  Mutt supports this from the compose menu.
+<tag>composetyped=&lt;command&gt;</tag>
+This flag specifies the command to use to create a new attachment of a
+specific MIME type.  This command differs from the compose command in
+that mutt will expect standard MIME headers on the data.  This can be
+used to specify parameters, filename, description, etc. for a new
+attachment.   Mutt supports this from the compose menu.
+<tag>print=&lt;command&gt;</tag>
+This flag specifies the command to use to print a specific MIME type.
+Mutt supports this from the attachment and compose menus.
+<tag>edit=&lt;command&gt;</tag>
+This flag specifies the command to use to edit a specific MIME type.  
+Mutt supports this from the compose menu, and also uses it to compose
+new attachments.  Mutt will default to the defined editor for text
+attachments.
+<tag>nametemplate=&lt;template&gt;</tag>
+This field specifies the format for the file denoted by &percnt;s in the
+command fields.  Certain programs will require a certain file extension,
+for instance, to correctly view a file.  For instance, lynx will only
+interpret a file as <tt>text/html</tt> if the file ends in <tt/.html/.
+So, you would specify lynx as a <tt>text/html</tt> viewer with a line in
+the mailcap file like:
+<tscreen><verb>
+text/html; lynx %s; nametemplate=%s.html
+</verb></tscreen>
+<tag>test=&lt;command&gt;</tag>
+This field specifies a command to run to test whether this mailcap
+entry should be used.  The command is defined with the command expansion
+rules defined in the next section.  If the command returns 0, then the
+test passed, and Mutt uses this entry.  If the command returns non-zero,
+then the test failed, and Mutt continues searching for the right entry.
+<bf/Note:/ <em>the content-type must match before Mutt performs the test.</em>
+For example:
+<tscreen><verb>
+text/html; netscape -remote 'openURL(%s)' ; test=RunningX
+text/html; lynx %s
+</verb></tscreen>
+In this example, Mutt will run the program RunningX which will return 0
+if the X Window manager is running, and non-zero if it isn't.  If
+RunningX returns 0, then Mutt will call netscape to display the
+text/html object.  If RunningX doesn't return 0, then Mutt will go on
+to the next entry and use lynx to display the text/html object.
+</descrip>
+
+<sect3>Search Order
+<p>
+When searching for an entry in the mailcap file, Mutt will search for
+the most useful entry for its purpose.  For instance, if you are
+attempting to print an <tt>image/gif</tt>, and you have the following
+entries in your mailcap file, Mutt will search for an entry with the
+print command:
+<tscreen><verb>
+image/*;        xv %s
+image/gif;      ; print= anytopnm %s | pnmtops | lpr; \
+                nametemplate=%s.gif
+</verb></tscreen>
+Mutt will skip the <tt>image/*</tt> entry and use the <tt>image/gif</tt>
+entry with the print command.
+
+In addition, you can use this with <ref id="auto_view" name="Autoview"> 
+to denote two commands for viewing an attachment, one to be viewed
+automatically, the other to be viewed interactively from the attachment
+menu.  In addition, you can then use the test feature to determine which
+viewer to use interactively depending on your environment.
+<tscreen><verb>
+text/html;      netscape -remote 'openURL(%s)' ; test=RunningX
+text/html;      lynx %s; nametemplate=%s.html
+text/html;      lynx -dump %s; nametemplate=%s.html; copiousoutput
+</verb></tscreen>
+For <ref id="auto_view" name="Autoview">, Mutt will choose the third
+entry because of the copiousoutput tag.  For interactive viewing, Mutt
+will run the program RunningX to determine if it should use the first
+entry.  If the program returns non-zero, Mutt will use the second entry
+for interactive viewing.
+
+<sect3>Command Expansion
+<p>
+The various commands defined in the mailcap files are passed to the
+<tt>/bin/sh</tt> shell using the system() function.  Before the
+command is passed to <tt>/bin/sh -c</tt>, it is parsed to expand
+various special parameters with information from Mutt.  The keywords
+Mutt expands are:
+<descrip>
+<tag/&percnt;s/
+As seen in the basic mailcap section, this variable is expanded
+to a filename specified by the calling program.  This file contains
+the body of the message to view/print/edit or where the composing
+program should place the results of composition.  In addition, the
+use of this keyword causes Mutt to not pass the body of the message
+to the view/print/edit program on stdin.
+<tag/&percnt;t/
+Mutt will expand &percnt;t to the text representation of the content
+type of the message in the same form as the first parameter of the
+mailcap definition line, ie <tt>text/html</tt> or
+<tt>image/gif</tt>.
+<tag>&percnt;{&lt;parameter&gt;}</tag>
+Mutt will expand this to the value of the specified parameter
+from the Content-Type: line of the mail message.  For instance, if
+Your mail message contains:
+<tscreen><verb>
+Content-Type: text/plain; charset=iso-8859-1
+</verb></tscreen>
+then Mutt will expand &percnt;{charset} to iso-8859-1.  The default metamail
+mailcap file uses this feature to test the charset to spawn an xterm
+using the right charset to view the message.
+<tag>&bsol;&percnt;</tag>
+This will be replaced by a &percnt;
+</descrip>
+Mutt does not currently support the &percnt;F and &percnt;n keywords
+specified in RFC 1524.  The main purpose of these parameters is for
+multipart messages, which is handled internally by Mutt.
+
+<sect2>Example mailcap files
+<p>
+This mailcap file is fairly simple and standard:
+<code>
+# I'm always running X :)
+video/*;        xanim %s > /dev/null
+image/*;        xv %s > /dev/null
+
+# I'm always running netscape (if my computer had more memory, maybe)
+text/html;      netscape -remote 'openURL(%s)'
+</code>
+
+This mailcap file shows quite a number of examples:
+
+<code>
+# Use xanim to view all videos   Xanim produces a header on startup,
+# send that to /dev/null so I don't see it
+video/*;        xanim %s > /dev/null
+
+# Send html to a running netscape by remote
+text/html;      netscape -remote 'openURL(%s)'; test=RunningNetscape
+
+# If I'm not running netscape but I am running X, start netscape on the
+# object
+text/html;      netscape %s; test=RunningX
+
+# Else use lynx to view it as text
+text/html;      lynx %s
+
+# This version would convert the text/html to text/plain
+text/html;      lynx -dump %s; copiousoutput
+
+# I use enscript to print text in two columns to a page
+text/*;         more %s; print=enscript -2Gr %s
+
+# Netscape adds a flag to tell itself to view jpegs internally
+image/jpeg;xv %s; x-mozilla-flags=internal
+
+# Use xv to view images if I'm running X
+# In addition, this uses the \ to extend the line and set my editor
+# for images
+image/*;xv %s; test=RunningX; \
+        edit=xpaint %s
+
+# Convert images to text using the netpbm tools
+image/*;  (anytopnm %s | pnmscale -xysize 80 46 | ppmtopgm | pgmtopbm |
+pbmtoascii -1x2 ) 2>&1 ; copiousoutput
+
+# Send excel spreadsheets to my NT box
+application/ms-excel; open.pl %s
+</code>
+
+<sect1>MIME Autoview<label id="auto_view">
+<p>
+In addition to explicitly telling Mutt to view an attachment with the
+MIME viewer defined in the mailcap file, Mutt has support for
+automatically viewing MIME attachments while in the pager.
+
+To work, you must define a viewer in the mailcap file which uses the 
+<tt/copiousoutput/ option to denote that it is non-interactive.
+Usually, you also use the entry to convert the attachment to a text
+representation which you can view in the pager.
+
+You then use the <tt/auto&lowbar;view/ muttrc command to list the
+content-types that you wish to view automatically.
+
+For instance, if you set auto&lowbar;view to:
+<tscreen><verb>
+auto_view text/html application/x-gunzip application/postscript image/gif application/x-tar-gz
+</verb></tscreen>
+
+Mutt could use the following mailcap entries to automatically view
+attachments of these types.
+<tscreen><verb>
+text/html;      lynx -dump %s; copiousoutput; nametemplate=%s.html
+image/*;        anytopnm %s | pnmscale -xsize 80 -ysize 50 | ppmtopgm | pgmtopbm | pbmtoascii ; copiousoutput
+application/x-gunzip;   gzcat; copiousoutput
+application/x-tar-gz; gunzip -c %s | tar -tf - ; copiousoutput
+application/postscript; ps2ascii %s; copiousoutput
+</verb></tscreen>
+
+``unauto_view'' can be used to remove previous entries from the autoview list.
+This can be used with message-hook to autoview messages based on size, etc.
+``unauto_view *'' will remove all previous entries.
+
+<sect1>MIME Multipart/Alternative<label id="alternative_order">
+<p>
+Mutt has some heuristics for determining which attachment of a
+multipart/alternative type to display.  First, mutt will check the 
+alternative&lowbar;order list to determine if one of the available types
+is preferred.  The alternative&lowbar;order list consists of a number of
+mimetypes in order, including support for implicit and explicit
+wildcards, for example:
+<tscreen><verb>
+alternative_order text/enriched text/plain text application/postscript image/*
+</verb></tscreen>
+
+Next, mutt will check if any of the types have a defined 
+<ref id="auto_view" name="auto&lowbar;view">, and use that.  Failing
+that, Mutt will look for any text type.  As a last attempt, mutt will
+look for any type it knows how to handle.
+
+To remove a MIME type from the <tt/alternative_order/ list, use the
+<tt/unalternative_order/ command.
+
+<sect1>MIME Lookup<label id="mime_lookup">
+<p>
+Mutt's mime&lowbar;lookup list specifies a list of mime-types that should not
+be treated according to their mailcap entry.  This option is designed to
+deal with binary types such as application/octet-stream.  When an attachment's
+mime-type is listed in mime&lowbar;lookup, then the extension of the filename will
+be compared to the list of extensions in the mime.types file.  The mime-type
+associated with this extension will then be used to process the attachment
+according to the rules in the mailcap file and according to any other configuration
+options (such as auto&lowbar;view) specified.  Common usage would be:
+<tscreen><verb>
+mime-lookup application/octet-stream application/X-Lotus-Manuscript
+</verb></tscreen>
+
+In addition, the unmime&lowbar;lookup command may be used to disable this feature
+for any particular mime-type if it had been set, for example, in a global
+muttrc.
+
+<sect>Reference
+<sect1>Command line options<label id="commandline">
+<p>
+Running <tt/mutt/ with no arguments will make Mutt attempt to read your spool
+mailbox.  However, it is possible to read other mailboxes and
+to send messages from the command line as well.
+
+<tscreen><verb>
+-A     expand an alias
+-a      attach a file to a message
+-b      specify a blind carbon-copy (BCC) address
+-c      specify a carbon-copy (Cc) address
+-e      specify a config command to be run after initilization files are read
+-f      specify a mailbox to load
+-F      specify an alternate file to read initialization commands
+-h      print help on command line options
+-H      specify a draft file from which to read a header and body
+-i      specify a file to include in a message composition
+-m      specify a default mailbox type
+-n      do not read the system Muttrc
+-p      recall a postponed message
+-Q      query a configuration variable
+-R      open mailbox in read-only mode
+-s      specify a subject (enclose in quotes if it contains spaces)
+-v      show version number and compile-time definitions
+-x      simulate the mailx(1) compose mode
+-y      show a menu containing the files specified by the mailboxes command
+-z      exit immediately if there are no messages in the mailbox
+-Z      open the first folder with new message,exit immediately if none
+</verb></tscreen>
+
+To read messages in a mailbox
+
+<tt/mutt/ &lsqb; -nz &rsqb; &lsqb; -F <em/muttrc/ &rsqb; &lsqb; -m <em/type/ &rsqb; &lsqb; -f <em/mailbox/ &rsqb; 
+
+To compose a new message
+
+<tt/mutt/ &lsqb; -n &rsqb; &lsqb; -F <em/muttrc/ &rsqb; &lsqb; -a <em/file/ &rsqb; &lsqb; -c <em/address/ &rsqb; &lsqb; -i <em/filename/ &rsqb; &lsqb; -s <em/subject/ &rsqb; <em/address/ &lsqb; <em/address/ ... &rsqb; 
+
+Mutt also supports a ``batch'' mode to send prepared messages.  Simply redirect
+input from the file you wish to send.  For example,
+
+<tt>mutt -s &dquot;data set for run &num;2&dquot; professor@bigschool.edu
+&lt; &tilde;/run2.dat</tt>
+
+This command will send a message to ``professor@bigschool.edu'' with a subject
+of ``data set for run &num;2''.  In the body of the message will be the contents
+of the file ``&tilde;/run2.dat''.
+
+<sect1>Configuration Commands<label id="commands">
+<p>
+The following are the commands understood by mutt.
+
+<itemize>
+<item>
+<tt><ref id="account-hook" name="account-hook"></tt> <em/pattern/ <em/command/
+<item>
+<tt><ref id="alias" name="alias"></tt> <em/key/ <em/address/ &lsqb; , <em/address/, ... &rsqb;
+<item>
+<tt><ref id="alias" name="unalias"></tt> &lsqb; * | <em/key/ ... &rsqb;
+<item>
+<tt><ref id="alternates" name="alternates"></tt> <em/regexp/ &lsqb; <em/regexp/ ... &rsqb;
+<item>
+<tt><ref id="alternates" name="unalternates"></tt> &lsqb; * | <em/regexp/ ... &rsqb;
+<item>
+<tt><ref id="alternative_order" name="alternative&lowbar;order"></tt> <em/mimetype/ &lsqb; <em/mimetype/ ... &rsqb;
+<item>
+<tt><ref id="alternative_order" name="unalternative&lowbar;order"></tt> <em/mimetype/ &lsqb; <em/mimetype/ ... &rsqb;
+<item>
+<tt><ref id="auto_view" name="auto&lowbar;view"></tt> <em/mimetype/ &lsqb; <em/mimetype/ ... &rsqb;
+<item>
+<tt><ref id="auto_view" name="unauto&lowbar;view"></tt> <em/mimetype/ &lsqb; <em/mimetype/ ... &rsqb;
+<item>
+<tt><ref id="bind" name="bind"></tt> <em/map/ <em/key/ <em/function/
+<item>
+<tt><ref id="charset-hook" name="charset-hook"></tt> <em/alias/ <em/charset/
+<item>
+<tt><ref id="color" name="color"></tt> <em/object/ <em/foreground/ <em/background/ &lsqb; <em/regexp/ &rsqb;
+<item>
+<tt><ref id="color" name="uncolor"></tt> <em/index/ <em/pattern/ &lsqb; <em/pattern/ ... &rsqb;
+<item>
+<tt><ref id="exec" name="exec"></tt> <em/function/ &lsqb; <em/function/ ... &rsqb;
+<item>
+<tt><ref id="fcc-hook" name="fcc-hook"></tt> <em/pattern/ <em/mailbox/
+<item>
+<tt><ref id="fcc-save-hook" name="fcc-save-hook"></tt> <em/pattern/ <em/mailbox/
+<item>
+<tt><ref id="folder-hook" name="folder-hook"></tt> <em/pattern/ <em/command/
+<item>
+<tt><ref id="hdr_order" name="hdr&lowbar;order"></tt> <em/header/ &lsqb; <em/header/ ... &rsqb;
+<item>
+<tt><ref id="hdr_order" name="unhdr&lowbar;order"></tt> <em/header/ &lsqb; <em/header/ ... &rsqb;
+<item>
+<tt><ref id="charset-hook" name="iconv-hook"></tt> <em/charset/ <em/local-charset/
+<item>
+<tt><ref id="ignore" name="ignore"></tt> <em/pattern/ &lsqb; <em/pattern/ ... &rsqb;
+<item>
+<tt><ref id="ignore" name="unignore"></tt> <em/pattern/ &lsqb; <em/pattern/ ... &rsqb;
+<item>
+<tt><ref id="lists" name="lists"></tt> <em/address/ &lsqb; <em/address/ ... &rsqb; 
+<item>
+<tt><ref id="lists" name="unlists"></tt> <em/address/ &lsqb; <em/address/ ... &rsqb; 
+<item>
+<tt><ref id="macro" name="macro"></tt> <em/menu/ <em/key/ <em/sequence/ &lsqb; <em/description/ &rsqb; 
+<item>
+<tt><ref id="mailboxes" name="mailboxes"></tt> <em/filename/ &lsqb; <em/filename/ ... &rsqb;
+<item>
+<tt><ref id="mbox-hook" name="mbox-hook"></tt> <em/pattern/ <em/mailbox/
+<item>
+<tt><ref id="message-hook" name="message-hook"></tt> <em/pattern/ <em/command/
+<item>
+<tt><ref id="mime_lookup" name="mime&lowbar;lookup"></tt> <em/mimetype/ &lsqb; <em/mimetype/ ... &rsqb;
+<item>
+<tt><ref id="mime_lookup" name="unmime&lowbar;lookup"></tt> <em/mimetype/ &lsqb; <em/mimetype/ ... &rsqb;
+<item>
+<tt><ref id="color" name="mono"></tt> <em/object attribute/ &lsqb; <em/regexp/ &rsqb;
+<item>
+<tt><ref id="color" name="unmono"></tt> <em/index/ <em/pattern/ &lsqb; <em/pattern/ ... &rsqb;
+<item>
+<tt><ref id="my_hdr" name="my&lowbar;hdr"></tt> <em/string/
+<item>
+<tt><ref id="my_hdr" name="unmy&lowbar;hdr"></tt> <em/field/ &lsqb; <em/field/ ... &rsqb;
+<item>
+<tt><ref id="crypt-hook" name="crypt-hook"></tt> <em/pattern/ <em/key-id/
+<item>
+<tt><ref id="push" name="push"></tt> <em/string/
+<item>
+<tt><ref id="set" name="reset"></tt> <em/variable/ &lsqb;<em/variable/ ... &rsqb;
+<item>
+<tt><ref id="save-hook" name="save-hook"></tt> <em/regexp/ <em/filename/
+<item>
+<tt><ref id="score-command" name="score"></tt> <em/pattern/ <em/value/
+<item>
+<tt><ref id="score-command" name="unscore"></tt> <em/pattern/ &lsqb; <em/pattern/ ... &rsqb;
+<item>
+<tt><ref id="send-hook" name="send-hook"></tt> <em/regexp/ <em/command/
+<item>
+<tt><ref id="set" name="set"></tt> &lsqb;no|inv&rsqb;<em/variable/&lsqb;=<em/value/&rsqb; &lsqb; <em/variable/ ... &rsqb;
+<item>
+<tt><ref id="set" name="unset"></tt> <em/variable/ &lsqb;<em/variable/ ... &rsqb;
+<item>
+<tt><ref id="source" name="source"></tt> <em/filename/
+<item>
+<tt><ref id="lists" name="subscribe"></tt> <em/address/ &lsqb; <em/address/ ... &rsqb; 
+<item>
+<tt><ref id="lists" name="unsubscribe"></tt> <em/address/ &lsqb; <em/address/ ... &rsqb; 
+<item>
+<tt><ref id="set" name="toggle"></tt> <em/variable/ &lsqb;<em/variable/ ... &rsqb;
+<item>
+<tt><ref id="unhook" name="unhook"></tt> <em/hook-type/
+</itemize>
+
+<sect1>Configuration variables<label id="variables">
+<p>
+
diff --git a/doc/manual.sgml.tail b/doc/manual.sgml.tail
new file mode 100644 (file)
index 0000000..0e86a6f
--- /dev/null
@@ -0,0 +1,388 @@
+<sect1>Functions<label id="functions">
+<p>
+The following is the list of available functions listed by the mapping
+in which they are available.  The default key setting is given, and an
+explanation of what the function does.  The key bindings of these
+functions can be changed with the <ref name="bind" id="bind">
+command.
+
+<sect2>generic
+<p>
+
+The <em/generic/ menu is not a real menu, but specifies common functions
+(such as movement) available in all menus except for <em/pager/ and
+<em/editor/.  Changing settings for this menu will affect the default
+bindings for all menus (except as noted).
+
+<verb>
+bottom-page                L   move to the bottom of the page
+current-bottom     not bound   move current entry to bottom of page
+current-middle     not bound   move current entry to middle of page
+current-top        not bound   move current entry to top of page
+enter-command              :   enter a muttrc command
+exit                       q   exit this menu
+first-entry                =   move to the first entry
+half-down                  ]   scroll down 1/2 page
+half-up                    [   scroll up 1/2 page
+help                       ?   this screen
+jump                  number   jump to an index number
+last-entry                 *   move to the last entry
+middle-page                M   move to the middle of the page
+next-entry                 j   move to the next entry
+next-line                  >   scroll down one line
+next-page                  z   move to the next page
+previous-entry             k   move to the previous entry
+previous-line              <   scroll up one line
+previous-page              Z   move to the previous page
+refresh                   ^L   clear and redraw the screen
+search                     /   search for a regular expression
+search-next                n   search for next match
+search-opposite    not bound   search for next match in opposite direction
+search-reverse         ESC /   search backwards for a regular expression
+select-entry             RET   select the current entry
+shell-escape               !   run a program in a subshell
+tag-entry                  t   toggle the tag on the current entry
+tag-prefix                 ;   apply next command to tagged entries
+top-page                   H   move to the top of the page
+</verb>
+<sect2>index
+<p>
+<verb>
+bounce-message             b   remail a message to another user
+change-folder              c   open a different folder
+change-folder-readonly ESC c   open a different folder in read only mode
+check-traditional-pgp  ESC P   check for classic pgp
+clear-flag                 W   clear a status flag from a message
+copy-message               C   copy a message to a file/mailbox
+create-alias               a   create an alias from a message sender
+decode-copy            ESC C   decode a message and copy it to a file/mailbox
+decode-save            ESC s   decode a message and save it to a file/mailbox
+delete-message             d   delete the current entry
+delete-pattern             D   delete messages matching a pattern
+delete-subthread       ESC d   delete all messages in subthread
+delete-thread             ^D   delete all messages in thread
+display-address            @   display full address of sender
+display-toggle-weed        h   display message and toggle header weeding
+display-message          RET   display a message
+edit                       e   edit the current message
+edit-type                 ^E   edit the current message's Content-Type
+exit                       x   exit without saving changes
+extract-keys              ^K   extract PGP public keys
+fetch-mail                 G   retrieve mail from POP server
+flag-message               F   toggle a message's 'important' flag
+forget-passphrase         ^F   wipe PGP passphrase from memory
+forward-message            f   forward a message with comments
+group-reply                g   reply to all recipients
+limit                      l   show only messages matching a pattern
+list-reply                 L   reply to specified mailing list
+mail                       m   compose a new mail message
+mail-key               ESC k   mail a PGP public key
+next-new                 TAB   jump to the next new message
+next-subthread         ESC n   jump to the next subthread
+next-thread               ^N   jump to the next thread
+next-undeleted             j   move to the next undeleted message
+next-unread        not bound   jump to the next unread message
+parent-message             P   jump to parent message in thread
+pipe-message               |   pipe message/attachment to a shell command
+previous-new         ESC TAB   jump to the previous new message
+previous-page              Z   move to the previous page
+previous-subthread     ESC p   jump to previous subthread
+previous-thread           ^P   jump to previous thread
+previous-undeleted         k   move to the last undelete message
+previous-unread    not bound   jump to the previous unread message
+print-message              p   print the current entry
+query                      Q   query external program for addresses
+quit                       q   save changes to mailbox and quit
+read-subthread         ESC r   mark the current subthread as read
+read-thread               ^R   mark the current thread as read
+recall-message             R   recall a postponed message
+reply                      r   reply to a message
+resend-message         ESC e   resend message and preserve MIME structure
+save-message               s   save message/attachment to a file
+set-flag                   w   set a status flag on a message
+show-version               V   show the Mutt version number and date
+show-limit             ESC l   show currently active limit pattern, if any
+sort-mailbox               o   sort messages
+sort-reverse               O   sort messages in reverse order
+sync-mailbox               $   save changes to mailbox
+tag-pattern                T   tag messages matching a pattern
+tag-thread             ESC t   tag/untag all messages in the current thread
+toggle-new                 N   toggle a message's 'new' flag
+toggle-write               %   toggle whether the mailbox will be rewritten
+undelete-message           u   undelete the current entry
+undelete-pattern           U   undelete messages matching a pattern
+undelete-subthread     ESC u   undelete all messages in subthread
+undelete-thread           ^U   undelete all messages in thread
+untag-pattern             ^T   untag messages matching a pattern
+view-attachments           v   show MIME attachments
+</verb>
+<sect2>pager
+<p>
+<verb>
+bottom             not bound   jump to the bottom of the message
+bounce-message             b   remail a message to another user
+change-folder              c   open a different folder
+change-folder-readonly ESC c   open a different folder in read only mode
+check-traditional-pgp  ESC P   check for classic pgp
+copy-message               C   copy a message to a file/mailbox
+create-alias               a   create an alias from a message sender
+decode-copy            ESC C   decode a message and copy it to a file/mailbox
+decode-save            ESC s   decode a message and save it to a file/mailbox
+delete-message             d   delete the current entry
+delete-subthread       ESC d   delete all messages in subthread
+delete-thread             ^D   delete all messages in thread
+display-address            @   display full address of sender
+display-toggle-weed        h   display message and toggle header weeding
+edit                       e   edit the current message
+edit-type                 ^E   edit the current message's Content-Type
+enter-command              :   enter a muttrc command
+exit                       i   return to the main-menu
+extract-keys              ^K   extract PGP public keys
+flag-message               F   toggle a message's 'important' flag
+forget-passphrase         ^F   wipe PGP passphrase from memory
+forward-message            f   forward a message with comments
+group-reply                g   reply to all recipients
+half-up            not bound   move up one-half page
+half-down          not bound   move down one-half page
+help                       ?   this screen
+list-reply                 L   reply to specified mailing list
+mail                       m   compose a new mail message
+mail-key               ESC k   mail a PGP public key
+mark-as-new                N   toggle a message's 'new' flag
+next-line                RET   scroll down one line
+next-entry                 J   move to the next entry
+next-new                 TAB   jump to the next new message
+next-page                      move to the next page
+next-subthread         ESC n   jump to the next subthread
+next-thread               ^N   jump to the next thread
+next-undeleted             j   move to the next undeleted message
+next-unread        not bound   jump to the next unread message
+parent-message             P   jump to parent message in thread
+pipe-message               |   pipe message/attachment to a shell command
+previous-line      BackSpace   scroll up one line
+previous-entry             K   move to the previous entry
+previous-new       not bound   jump to the previous new message
+previous-page              -   move to the previous page
+previous-subthread     ESC p   jump to previous subthread
+previous-thread           ^P   jump to previous thread
+previous-undeleted         k   move to the last undelete message
+previous-unread    not bound   jump to the previous unread message
+print-message              p   print the current entry
+quit                       Q   save changes to mailbox and quit
+read-subthread         ESC r   mark the current subthread as read
+read-thread               ^R   mark the current thread as read
+recall-message             R   recall a postponed message
+redraw-screen             ^L   clear and redraw the screen
+reply                      r   reply to a message
+save-message               s   save message/attachment to a file
+search                     /   search for a regular expression
+search-next                n   search for next match
+search-opposite    not bound   search for next match in opposite direction
+search-reverse         ESC /   search backwards for a regular expression
+search-toggle              \   toggle search pattern coloring
+shell-escape               !   invoke a command in a subshell
+show-version               V   show the Mutt version number and date
+skip-quoted                S   skip beyond quoted text
+sync-mailbox               $   save changes to mailbox
+tag-message                t   tag a message
+toggle-quoted              T   toggle display of quoted text
+top                        ^   jump to the top of the message
+undelete-message           u   undelete the current entry
+undelete-subthread     ESC u   undelete all messages in subthread
+undelete-thread           ^U   undelete all messages in thread
+view-attachments           v   show MIME attachments
+</verb>
+<sect2>alias
+<p>
+<verb>
+search                     /   search for a regular expression
+search-next                n   search for next match
+search-reverse         ESC /   search backwards for a regular expression
+</verb>
+<sect2>query
+<p>
+<verb>
+create-alias               a   create an alias from a message sender
+mail                       m   compose a new mail message
+query                      Q   query external program for addresses
+query-append               A   append new query results to current results
+search                     /   search for a regular expression
+search-next                n   search for next match
+search-opposite    not bound   search for next match in opposite direction
+search-reverse         ESC /   search backwards for a regular expression
+</verb>
+<sect2>attach
+<p>
+<verb>
+bounce-message             b   remail a message to another user
+collapse-parts             v   toggle display of subparts
+delete-entry               d   delete the current entry
+display-toggle-weed        h   display message and toggle header weeding
+edit-type                 ^E   edit the current entry's Content-Type
+extract-keys              ^K   extract PGP public keys
+forward-message            f   forward a message with comments
+group-reply                g   reply to all recipients
+list-reply                 L   reply to specified mailing list
+pipe-entry                 |   pipe message/attachment to a shell command
+print-entry                p   print the current entry
+reply                      r   reply to a message
+resend-message         ESC e   resend message and preserve MIME structure
+save-entry                 s   save message/attachment to a file
+undelete-entry             u   undelete the current entry
+view-attach              RET   view attachment using mailcap entry if necessary
+view-mailcap               m   force viewing of attachment using mailcap
+view-text                  T   view attachment as text
+</verb>
+<sect2>compose
+<p>
+<verb>
+attach-file                a   attach a file(s) to this message
+attach-message             A   attach message(s) to this message
+attach-key             ESC k   attach a PGP public key
+copy-file                  C   save message/attachment to a file
+detach-file                D   delete the current entry
+display-toggle-weed        h   display message and toggle header weeding
+edit-bcc                   b   edit the BCC list
+edit-cc                    c   edit the CC list
+edit-description           d   edit attachment description
+edit-encoding             ^E   edit attachment transfer-encoding
+edit-fcc                   f   enter a file to save a copy of this message in
+edit-from              ESC f   edit the from: field
+edit-file               ^X e   edit the file to be attached
+edit-headers               E   edit the message with headers
+edit                       e   edit the message
+edit-mime                  m   edit attachment using mailcap entry
+edit-reply-to              r   edit the Reply-To field
+edit-subject               s   edit the subject of this message
+edit-to                    t   edit the TO list
+edit-type                 ^T   edit attachment type
+filter-entry               F   filter attachment through a shell command
+forget-passphrase         ^F   wipe PGP passphrase from memory
+ispell                     i   run ispell on the message
+new-mime                   n   compose new attachment using mailcap entry
+pgp-menu                   p   show PGP options
+pipe-entry                 |   pipe message/attachment to a shell command
+postpone-message           P   save this message to send later
+print-entry                l   print the current entry
+rename-file                R   rename/move an attached file
+send-message               y   send the message
+toggle-unlink              u   toggle whether to delete file after sending it
+view-attach              RET   view attachment using mailcap entry if necessary
+write-fcc                 w   write the message to a folder
+</verb>
+<sect2>postpone
+<p>
+<verb>
+delete-entry               d   delete the current entry
+undelete-entry             u   undelete the current entry
+</verb>
+<sect2>browser
+<p>
+<verb>
+change-dir                 c   change directories
+check-new                TAB   check mailboxes for new mail
+enter-mask                 m   enter a file mask
+search                     /   search for a regular expression
+search-next                n   search for next match
+search-reverse         ESC /   search backwards for a regular expression
+select-new                 N   select a new file in this directory
+sort                       o   sort messages
+sort-reverse               O   sort messages in reverse order
+toggle-mailboxes         TAB   toggle whether to browse mailboxes or all files
+view-file              SPACE   view file
+subscribe                  s   subscribe to current mailbox (IMAP Only)
+unsubscribe                u   unsubscribe to current mailbox (IMAP Only)
+toggle-subscribed          T   toggle view all/subscribed mailboxes (IMAP Only)
+</verb>
+<sect2>pgp
+<p>
+<verb>
+view-name                  %   view the key's user id
+verify-key                 c   verify a PGP public key
+</verb>
+<sect2>editor
+<p>
+<verb>
+backspace          BackSpace   delete the char in front of the cursor
+backward-char             ^B   move the cursor one character to the left
+backward-word          ESC b   move the cursor to the previous word
+bol                       ^A   jump to the beginning of the line
+buffy-cycle            Space   cycle among incoming mailboxes
+capitalize-word        ESC c   uppercase the first character in the word
+complete                 TAB   complete filename or alias
+complete-query            ^T   complete address with query
+delete-char               ^D   delete the char under the cursor
+downcase-word          ESC l   lowercase all characters in current word
+eol                       ^E   jump to the end of the line
+forward-char              ^F   move the cursor one character to the right
+forward-word           ESC f   move the cursor to the next word
+history-down       not bound   scroll down through the history list
+history-up         not bound   scroll up through the history list
+kill-eol                  ^K   delete chars from cursor to end of line
+kill-eow               ESC d   delete chars from cursor to end of word
+kill-line                 ^U   delete all chars on the line
+kill-word                 ^W   delete the word in front of the cursor
+quote-char                ^V   quote the next typed key
+transpose-chars    not bound   transpose character under cursor with previous
+upcase-word            ESC u   uppercase all characters in current word
+</verb>
+
+<sect>Miscellany
+<p>
+
+<sect1>Acknowledgements
+<p>
+Kari Hurtta
+<htmlurl url="mailto:kari.hurtta@fmi.fi" name="&lt;kari.hurtta@fmi.fi&gt;">
+co-developed the original MIME parsing code back in the ELM-ME days.
+
+The following people have been very helpful to the development of Mutt:
+
+Vikas Agnihotri <htmlurl url="mailto:vikasa@writeme.com" name="&lt;vikasa@writeme.com&gt;">,<newline>
+Francois Berjon <htmlurl url="mailto:Francois.Berjon@aar.alcatel-alsthom.fr" name="&lt;Francois.Berjon@aar.alcatel-alsthom.fr&gt;">,<newline>
+Aric Blumer <htmlurl url="mailto:aric@fore.com" name="&lt;aric@fore.com&gt;">,<newline>
+John Capo <htmlurl url="mailto:jc@irbs.com" name="&lt;jc@irbs.com&gt;">,<newline>
+David Champion <htmlurl url="mailto:dgc@uchicago.edu" name="&lt;dgc@uchicago.edu">,<newline>
+Brendan Cully <htmlurl url="mailto:brendan@kublai.com" name="&lt;brendan@kublai.com&gt">,<newline>
+Liviu Daia <htmlurl url="mailto:daia@stoilow.imar.ro" name="&lt;daia@stoilow.imar.ro&gt;">,<newline>
+Thomas E. Dickey <htmlurl url="mailto:dickey@herndon4.his.com" name="&lt;dickey@herndon4.his.com&gt;">,<newline>
+David DeSimone <htmlurl url="mailto:fox@convex.hp.com" name="&lt;fox@convex.hp.com&gt;">,<newline>
+Nickolay N. Dudorov <htmlurl url="mailto:nnd@wint.itfs.nsk.su" name="&lt;nnd@wint.itfs.nsk.su&gt;">,<newline>
+Ruslan Ermilov <htmlurl url="mailto:ru@freebsd.org" name="&lt;ru@freebsd.org&gt;">,<newline>
+Edmund Grimley Evans <htmlurl url="mailto:edmundo@rano.org" name="&lt;edmundo@rano.org">,<newline>
+Michael Finken <htmlurl url="mailto:finken@conware.de" name="&lt;finken@conware.de&gt;">,<newline>
+Sven Guckes <htmlurl url="mailto:guckes@math.fu-berlin.de" name="&lt;guckes@math.fu-berlin.de&gt;">,<newline>
+Lars Hecking <htmlurl url="mailto:lhecking@nmrc.ie" name="&lt;lhecking@nmrc.ie&gt;">,<newline>
+Mark Holloman <htmlurl url="mailto:holloman@nando.net" name="&lt;holloman@nando.net&gt;">,<newline>
+Andreas Holzmann <htmlurl url="mailto:holzmann@fmi.uni-passau.de" name="&lt;holzmann@fmi.uni-passau.de&gt;">,<newline>
+Marco d'Itri <htmlurl url="mailto:md@linux.it" name="&lt;md@linux.it&gt;">,<newline>
+Björn Jacke <htmlurl url="mailto:bjacke@suse.com" name="&lt;bjacke@suse.com&gt;">,<newline>
+Byrial Jensen <htmlurl url="mailto:byrial@image.dk" name="&lt;byrial@image.dk&gt;">,<newline>
+David Jeske <htmlurl url="mailto:jeske@igcom.net" name="&lt;jeske@igcom.net&gt;">,<newline>
+Christophe Kalt <htmlurl url="mailto:kalt@hugo.int-evry.fr" name="&lt;kalt@hugo.int-evry.fr&gt;">,<newline>
+Tommi Komulainen <htmlurl url="mailto:Tommi.Komulainen@iki.fi" name="&lt;Tommi.Komulainen@iki.fi&gt;">,<newline>
+Felix von Leitner (a.k.a ``Fefe'') <htmlurl url="mailto:leitner@math.fu-berlin.de" name="&lt;leitner@math.fu-berlin.de&gt;">,<newline>
+Brandon Long <htmlurl url="mailto:blong@fiction.net" name="&lt;blong@fiction.net&gt;">,<newline>
+Jimmy Mäkelä <htmlurl url="mailto:jmy@flashback.net" name="&lt;jmy@flashback.net&gt;">,<newline>
+Lars Marowsky-Bree <htmlurl url="mailto:lmb@pointer.in-minden.de" name="&lt;lmb@pointer.in-minden.de&gt;">,<newline>
+Thomas ``Mike'' Michlmayr <htmlurl url="mailto:mike@cosy.sbg.ac.at" name="&lt;mike@cosy.sbg.ac.at&gt;">,<newline>
+Andrew W. Nosenko <htmlurl url="mailto:awn@bcs.zp.ua" name="&lt;awn@bcs.zp.ua&gt;">,<newline>
+David O'Brien <htmlurl url="mailto:obrien@Nuxi.cs.ucdavis.edu" name="&lt;obrien@Nuxi.cs.ucdavis.edu&gt;">,<newline>
+Clint Olsen <htmlurl url="mailto:olsenc@ichips.intel.com" name="&lt;olsenc@ichips.intel.com&gt;">,<newline>
+Park Myeong Seok <htmlurl url="mailto:pms@romance.kaist.ac.kr" name="&lt;pms@romance.kaist.ac.kr&gt;">,<newline>
+Thomas Parmelan <htmlurl url="mailto:tom@ankh.fr.eu.org" name="&lt;tom@ankh.fr.eu.org&gt;">,<newline>
+Ollivier Robert <htmlurl url="mailto:roberto@keltia.freenix.fr" name="&lt;roberto@keltia.freenix.fr&gt;">,<newline>
+Thomas Roessler <htmlurl url="mailto:roessler@does-not-exist.org" name="&lt;roessler@does-not-exist.org&gt;">,<newline>
+Roland Rosenfeld <htmlurl url="roland@spinnaker.de" name="&lt;roland@spinnaker.de&gt;">,<newline>
+TAKIZAWA Takashi <htmlurl url="taki@luna.email.ne.jp" name="&lt;taki@luna.email.ne.jp&gt;">,<newline>
+Allain Thivillon <htmlurl url="mailto:Allain.Thivillon@alma.fr" name="&lt;Allain.Thivillon@alma.fr&gt;">,<newline>
+Gero Treuner <htmlurl url="mailto:gero@faveve.uni-stuttgart.de" name="&lt;gero@faveve.uni-stuttgart.de&gt;">,<newline>
+Vsevolod Volkov <htmlurl url="mailto:vvv@lucky.net" name="&lt;vvv@lucky.net&gt;">,<newline>
+Ken Weinert <htmlurl url="mailto:kenw@ihs.com" name="&lt;kenw@ihs.com&gt;">
+
+<sect1>About this document
+<p>
+This document was written in SGML, and then rendered using the
+<htmlurl url="http://www.sgmltools.org/" name="sgml-tools"> package.
+
+</article>
diff --git a/doc/manual.txt b/doc/manual.txt
new file mode 100644 (file)
index 0000000..6b1b1e9
--- /dev/null
@@ -0,0 +1,7016 @@
+  The Mutt E-Mail Client
+  by Michael Elkins <me@cs.hmc.edu>
+  version 1.5.6
+
+  ``All mail clients suck.  This one just sucks less.'' -me, circa 1995
+  ______________________________________________________________________
+
+  Table of Contents
+
+  1. Introduction
+
+     1.1 Mutt Home Page
+     1.2 Mailing Lists
+     1.3 Software Distribution Sites
+     1.4 IRC
+     1.5 USENET
+     1.6 Copyright
+
+  2. Getting Started
+
+     2.1 Moving Around in Menus
+     2.2 Editing Input Fields
+     2.3 Reading Mail - The Index and Pager
+        2.3.1 The Message Index
+           2.3.1.1 Status Flags
+        2.3.2 The Pager
+        2.3.3 Threaded Mode
+        2.3.4 Miscellaneous Functions
+     2.4 Sending Mail
+        2.4.1 Editing the message header
+        2.4.2 Using Mutt with PGP
+        2.4.3 Sending anonymous messages via mixmaster.
+     2.5 Forwarding and Bouncing Mail
+     2.6 Postponing Mail
+     2.7 Reading news via NNTP
+
+  3. Configuration
+
+     3.1 Syntax of Initialization Files
+     3.2 Defining/Using aliases
+     3.3 Changing the default key bindings
+     3.4 Defining aliases for character sets
+     3.5 Setting variables based upon mailbox
+     3.6 Keyboard macros
+     3.7 Using color and mono video attributes
+     3.8 Ignoring (weeding) unwanted message headers
+     3.9 Alternative addresses
+     3.10 Mailing lists
+     3.11 Using Multiple spool mailboxes
+     3.12 Defining mailboxes which receive mail
+     3.13 User defined headers
+     3.14 Defining the order of headers when viewing messages
+     3.15 Specify default save filename
+     3.16 Specify default Fcc: mailbox when composing
+     3.17 Specify default save filename and default Fcc: mailbox at once
+     3.18 Change settings based upon message recipients
+     3.19 Change settings before formatting a message
+     3.20 Choosing the cryptographic key of the recipient
+     3.21 Adding key sequences to the keyboard buffer
+     3.22 Executing functions
+     3.23 Message Scoring
+     3.24 Setting variables
+     3.25 Reading initialization commands from another file
+     3.26 Removing hooks
+
+  4. Advanced Usage
+
+     4.1 Regular Expressions
+     4.2 Patterns
+        4.2.1 Pattern Modifier
+        4.2.2 Complex Patterns
+        4.2.3 Searching by Date
+     4.3 Using Tags
+     4.4 Using Hooks
+        4.4.1 Message Matching in Hooks
+     4.5 External Address Queries
+     4.6 Mailbox Formats
+     4.7 Mailbox Shortcuts
+     4.8 Handling Mailing Lists
+     4.9 Delivery Status Notification (DSN) Support
+     4.10 POP3 Support (OPTIONAL)
+     4.11 IMAP Support (OPTIONAL)
+        4.11.1 The Folder Browser
+        4.11.2 Authentication
+     4.12 Managing multiple IMAP/POP accounts (OPTIONAL)
+     4.13 Start a WWW Browser on URLs (EXTERNAL)
+
+  5. Mutt's MIME Support
+
+     5.1 Using MIME in Mutt
+        5.1.1 Viewing MIME messages in the pager
+        5.1.2 The Attachment Menu
+        5.1.3 The Compose Menu
+     5.2 MIME Type configuration with
+     5.3 MIME Viewer configuration with
+        5.3.1 The Basics of the mailcap file
+        5.3.2 Secure use of mailcap
+        5.3.3 Advanced mailcap Usage
+           5.3.3.1 Optional Fields
+           5.3.3.2 Search Order
+           5.3.3.3 Command Expansion
+        5.3.4 Example mailcap files
+     5.4 MIME Autoview
+     5.5 MIME Multipart/Alternative
+     5.6 MIME Lookup
+
+  6. Reference
+
+     6.1 Command line options
+     6.2 Configuration Commands
+     6.3 Configuration variables
+        6.3.1 abort_nosubject
+        6.3.2 abort_unmodified
+        6.3.3 alias_file
+        6.3.4 alias_format
+        6.3.5 allow_8bit
+        6.3.6 allow_ansi
+        6.3.7 arrow_cursor
+        6.3.8 ascii_chars
+        6.3.9 askbcc
+        6.3.10 askcc
+        6.3.11 ask_follow_up
+        6.3.12 ask_x_comment_to
+        6.3.13 attach_format
+        6.3.14 attach_sep
+        6.3.15 attach_split
+        6.3.16 attribution
+        6.3.17 autoedit
+        6.3.18 auto_tag
+        6.3.19 beep
+        6.3.20 beep_new
+        6.3.21 bounce
+        6.3.22 bounce_delivered
+        6.3.23 catchup_newsgroup
+        6.3.24 charset
+        6.3.25 check_new
+        6.3.26 collapse_unread
+        6.3.27 uncollapse_jump
+        6.3.28 compose_format
+        6.3.29 confirmappend
+        6.3.30 confirmcreate
+        6.3.31 connect_timeout
+        6.3.32 content_type
+        6.3.33 copy
+        6.3.34 crypt_autopgp
+        6.3.35 crypt_autosmime
+        6.3.36 date_format
+        6.3.37 default_hook
+        6.3.38 delete
+        6.3.39 delete_untag
+        6.3.40 digest_collapse
+        6.3.41 display_filter
+        6.3.42 dotlock_program
+        6.3.43 dsn_notify
+        6.3.44 dsn_return
+        6.3.45 duplicate_threads
+        6.3.46 edit_headers
+        6.3.47 editor
+        6.3.48 encode_from
+        6.3.49 envelope_from
+        6.3.50 escape
+        6.3.51 fast_reply
+        6.3.52 fcc_attach
+        6.3.53 fcc_clear
+        6.3.54 folder
+        6.3.55 folder_format
+        6.3.56 followup_to
+        6.3.57 followup_to_poster
+        6.3.58 force_name
+        6.3.59 forward_decode
+        6.3.60 forward_edit
+        6.3.61 forward_format
+        6.3.62 forward_quote
+        6.3.63 from
+        6.3.64 gecos_mask
+        6.3.65 group_index_format
+        6.3.66 hdrs
+        6.3.67 header
+        6.3.68 help
+        6.3.69 hidden_host
+        6.3.70 hide_limited
+        6.3.71 hide_missing
+        6.3.72 hide_top_limited
+        6.3.73 hide_top_missing
+        6.3.74 history
+        6.3.75 honor_followup_to
+        6.3.76 hostname
+        6.3.77 ignore_list_reply_to
+        6.3.78 imap_authenticators
+        6.3.79 imap_delim_chars
+        6.3.80 imap_force_ssl
+        6.3.81 imap_home_namespace
+        6.3.82 imap_keepalive
+        6.3.83 imap_list_subscribed
+        6.3.84 imap_pass
+        6.3.85 imap_passive
+        6.3.86 imap_peek
+        6.3.87 imap_servernoise
+        6.3.88 imap_user
+        6.3.89 implicit_autoview
+        6.3.90 include
+        6.3.91 indent_string
+        6.3.92 index_format
+        6.3.93 inews
+        6.3.94 ispell
+        6.3.95 keep_flagged
+        6.3.96 locale
+        6.3.97 mail_check
+        6.3.98 mailcap_path
+        6.3.99 mailcap_sanitize
+        6.3.100 maildir_trash
+        6.3.101 mark_old
+        6.3.102 markers
+        6.3.103 mask
+        6.3.104 mbox
+        6.3.105 mbox_type
+        6.3.106 metoo
+        6.3.107 menu_scroll
+        6.3.108 meta_key
+        6.3.109 mh_purge
+        6.3.110 mh_seq_flagged
+        6.3.111 mh_seq_replied
+        6.3.112 mh_seq_unseen
+        6.3.113 mime_forward
+        6.3.114 mime_forward_decode
+        6.3.115 mime_forward_rest
+        6.3.116 mime_subject
+        6.3.117 mix_entry_format
+        6.3.118 mixmaster
+        6.3.119 move
+        6.3.120 message_format
+        6.3.121 narrow_tree
+        6.3.122 news_cache_dir
+        6.3.123 news_server
+        6.3.124 newsrc
+        6.3.125 nntp_context
+        6.3.126 nntp_load_description
+        6.3.127 nntp_user
+        6.3.128 nntp_pass
+        6.3.129 nntp_poll
+        6.3.130 nntp_reconnect
+        6.3.131 pager
+        6.3.132 pager_context
+        6.3.133 pager_format
+        6.3.134 pager_index_lines
+        6.3.135 pager_stop
+        6.3.136 crypt_autosign
+        6.3.137 crypt_autoencrypt
+        6.3.138 pgp_ignore_subkeys
+        6.3.139 crypt_replyencrypt
+        6.3.140 crypt_replysign
+        6.3.141 crypt_replysignencrypted
+        6.3.142 crypt_timestamp
+        6.3.143 pgp_use_gpg_agent
+        6.3.144 crypt_verify_sig
+        6.3.145 smime_is_default
+        6.3.146 smime_ask_cert_label
+        6.3.147 smime_decrypt_use_default_key
+        6.3.148 pgp_entry_format
+        6.3.149 pgp_good_sign
+        6.3.150 pgp_check_exit
+        6.3.151 pgp_long_ids
+        6.3.152 pgp_retainable_sigs
+        6.3.153 pgp_show_unusable
+        6.3.154 pgp_sign_as
+        6.3.155 pgp_strict_enc
+        6.3.156 pgp_timeout
+        6.3.157 pgp_sort_keys
+        6.3.158 pgp_create_traditional
+        6.3.159 pgp_auto_traditional
+        6.3.160 pgp_decode_command
+        6.3.161 pgp_getkeys_command
+        6.3.162 pgp_verify_command
+        6.3.163 pgp_decrypt_command
+        6.3.164 pgp_clearsign_command
+        6.3.165 pgp_sign_command
+        6.3.166 pgp_encrypt_sign_command
+        6.3.167 pgp_encrypt_only_command
+        6.3.168 pgp_import_command
+        6.3.169 pgp_export_command
+        6.3.170 pgp_verify_key_command
+        6.3.171 pgp_list_secring_command
+        6.3.172 pgp_list_pubring_command
+        6.3.173 forward_decrypt
+        6.3.174 smime_timeout
+        6.3.175 smime_encrypt_with
+        6.3.176 smime_keys
+        6.3.177 smime_ca_location
+        6.3.178 smime_certificates
+        6.3.179 smime_decrypt_command
+        6.3.180 smime_verify_command
+        6.3.181 smime_verify_opaque_command
+        6.3.182 smime_sign_command
+        6.3.183 smime_sign_opaque_command
+        6.3.184 smime_encrypt_command
+        6.3.185 smime_pk7out_command
+        6.3.186 smime_get_cert_command
+        6.3.187 smime_get_signer_cert_command
+        6.3.188 smime_import_cert_command
+        6.3.189 smime_get_cert_email_command
+        6.3.190 smime_default_key
+        6.3.191 ssl_starttls
+        6.3.192 certificate_file
+        6.3.193 ssl_usesystemcerts
+        6.3.194 entropy_file
+        6.3.195 ssl_use_sslv2
+        6.3.196 ssl_use_sslv3
+        6.3.197 ssl_use_tlsv1
+        6.3.198 pipe_split
+        6.3.199 pipe_decode
+        6.3.200 pipe_sep
+        6.3.201 pop_authenticators
+        6.3.202 pop_auth_try_all
+        6.3.203 pop_checkinterval
+        6.3.204 pop_delete
+        6.3.205 pop_host
+        6.3.206 pop_last
+        6.3.207 pop_reconnect
+        6.3.208 pop_user
+        6.3.209 pop_pass
+        6.3.210 post_indent_string
+        6.3.211 post_moderated
+        6.3.212 postpone
+        6.3.213 postponed
+        6.3.214 preconnect
+        6.3.215 print
+        6.3.216 print_command
+        6.3.217 print_decode
+        6.3.218 print_split
+        6.3.219 prompt_after
+        6.3.220 query_command
+        6.3.221 quit
+        6.3.222 quote_regexp
+        6.3.223 read_inc
+        6.3.224 read_only
+        6.3.225 realname
+        6.3.226 recall
+        6.3.227 record
+        6.3.228 reply_regexp
+        6.3.229 reply_self
+        6.3.230 reply_to
+        6.3.231 resolve
+        6.3.232 reverse_alias
+        6.3.233 reverse_name
+        6.3.234 reverse_realname
+        6.3.235 rfc2047_parameters
+        6.3.236 save_address
+        6.3.237 save_empty
+        6.3.238 save_name
+        6.3.239 score
+        6.3.240 score_threshold_delete
+        6.3.241 score_threshold_flag
+        6.3.242 score_threshold_read
+        6.3.243 send_charset
+        6.3.244 sendmail
+        6.3.245 sendmail_wait
+        6.3.246 shell
+        6.3.247 save_unsubscribed
+        6.3.248 show_new_news
+        6.3.249 show_only_unread
+        6.3.250 sig_dashes
+        6.3.251 sig_on_top
+        6.3.252 signature
+        6.3.253 simple_search
+        6.3.254 smart_wrap
+        6.3.255 smileys
+        6.3.256 sleep_time
+        6.3.257 sort
+        6.3.258 sort_alias
+        6.3.259 sort_aux
+        6.3.260 sort_browser
+        6.3.261 sort_re
+        6.3.262 spoolfile
+        6.3.263 status_chars
+        6.3.264 status_format
+        6.3.265 status_on_top
+        6.3.266 strict_threads
+        6.3.267 suspend
+        6.3.268 text_flowed
+        6.3.269 thread_received
+        6.3.270 thorough_search
+        6.3.271 tilde
+        6.3.272 timeout
+        6.3.273 tmpdir
+        6.3.274 to_chars
+        6.3.275 tunnel
+        6.3.276 use_8bitmime
+        6.3.277 use_domain
+        6.3.278 use_from
+        6.3.279 use_ipv6
+        6.3.280 user_agent
+        6.3.281 visual
+        6.3.282 wait_key
+        6.3.283 weed
+        6.3.284 wrap_search
+        6.3.285 wrapmargin
+        6.3.286 write_inc
+        6.3.287 write_bcc
+        6.3.288 x_comment_to
+     6.4 Functions
+        6.4.1 generic
+        6.4.2 index
+        6.4.3 pager
+        6.4.4 alias
+        6.4.5 query
+        6.4.6 attach
+        6.4.7 compose
+        6.4.8 postpone
+        6.4.9 browser
+        6.4.10 pgp
+        6.4.11 editor
+
+  7. Miscellany
+
+     7.1 Acknowledgements
+     7.2 About this document
+
+  ______________________________________________________________________
+
+  1\b1.\b.  I\bIn\bnt\btr\bro\bod\bdu\buc\bct\bti\bio\bon\bn
+
+  M\bMu\but\btt\bt is a small but very powerful text-based MIME mail client.  Mutt
+  is highly configurable, and is well suited to the mail power user with
+  advanced features like key bindings, keyboard macros, mail threading,
+  regular expression searches and a powerful pattern matching language
+  for selecting groups of messages.
+
+  1\b1.\b.1\b1.\b.  M\bMu\but\btt\bt H\bHo\bom\bme\be P\bPa\bag\bge\be
+
+  http://www.mutt.org/
+
+  1\b1.\b.2\b2.\b.  M\bMa\bai\bil\bli\bin\bng\bg L\bLi\bis\bst\bts\bs
+
+  To subscribe to one of the following mailing lists, send a message
+  with the word _\bs_\bu_\bb_\bs_\bc_\br_\bi_\bb_\be in the body to list-name_\b-_\br_\be_\bq_\bu_\be_\bs_\bt@mutt.org.
+
+  ·  mutt-announce@mutt.org -- low traffic list for announcements
+
+  ·  mutt-users@mutt.org -- help, bug reports and feature requests
+
+  ·  mutt-dev@mutt.org -- development mailing list
+
+  N\bNo\bot\bte\be:\b: all messages posted to _\bm_\bu_\bt_\bt_\b-_\ba_\bn_\bn_\bo_\bu_\bn_\bc_\be are automatically forwarded
+  to _\bm_\bu_\bt_\bt_\b-_\bu_\bs_\be_\br_\bs, so you do not need to be subscribed to both lists.
+
+  1\b1.\b.3\b3.\b.  S\bSo\bof\bft\btw\bwa\bar\bre\be D\bDi\bis\bst\btr\bri\bib\bbu\but\bti\bio\bon\bn S\bSi\bit\bte\bes\bs
+
+  ·  ftp://ftp.mutt.org/mutt/
+
+  For a list of mirror sites, please refer to
+  http://www.mutt.org/download.html.
+
+  1\b1.\b.4\b4.\b.  I\bIR\bRC\bC
+
+  Visit channel _\b#_\bm_\bu_\bt_\bt on OpenProjects.Net (www.openprojects.net) to chat
+  with other people interested in Mutt.
+
+  1\b1.\b.5\b5.\b.  U\bUS\bSE\bEN\bNE\bET\bT
+
+  See the newsgroup comp.mail.mutt.
+
+  1\b1.\b.6\b6.\b.  C\bCo\bop\bpy\byr\bri\big\bgh\bht\bt
+
+  Mutt is Copyright (C) 1996-2000 Michael R. Elkins <me@cs.hmc.edu> and
+  others
+
+  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.
+
+  2\b2.\b.  G\bGe\bet\btt\bti\bin\bng\bg S\bSt\bta\bar\brt\bte\bed\bd
+
+  This section is intended as a brief overview of how to use Mutt.
+  There are many other features which are described elsewhere in the
+  manual.  There is even more information available in the Mutt FAQ and
+  various web pages.  See the Mutt Page for more details.
+
+  The keybindings described in this section are the defaults as
+  distributed.  Your local system administrator may have altered the
+  defaults for your site.  You can always type ``?'' in any menu to
+  display the current bindings.
+
+  The first thing you need to do is invoke mutt, simply by typing mutt
+  at the command line.  There are various command-line options, see
+  either the mutt man page or the ``reference''.
+
+  2\b2.\b.1\b1.\b.  M\bMo\bov\bvi\bin\bng\bg A\bAr\bro\bou\bun\bnd\bd i\bin\bn M\bMe\ben\bnu\bus\bs
+
+  Information is presented in menus, very similar to ELM.  Here is a
+  table showing the common keys used to navigate menus in Mutt.
+
+       j or Down       next-entry      move to the next entry
+       k or Up         previous-entry  move to the previous entry
+       z or PageDn     page-down       go to the next page
+       Z or PageUp     page-up         go to the previous page
+       = or Home       first-entry     jump to the first entry
+       * or End        last-entry      jump to the last entry
+       q               quit            exit the current menu
+       ?               help            list all keybindings for the current menu
+
+  2\b2.\b.2\b2.\b.  E\bEd\bdi\bit\bti\bin\bng\bg I\bIn\bnp\bpu\but\bt F\bFi\bie\bel\bld\bds\bs
+
+  Mutt has a builtin line editor which is used as the primary way to
+  input textual data such as email addresses or filenames.  The keys
+  used to move around while editing are very similar to those of Emacs.
+
+       ^A or <Home>    bol             move to the start of the line
+       ^B or <Left>    backward-char   move back one char
+       Esc B           backward-word   move back one word
+       ^D or <Delete>  delete-char     delete the char under the cursor
+       ^E or <End>     eol             move to the end of the line
+       ^F or <Right>   forward-char    move forward one char
+       Esc F           forward-word    move forward one word
+       <Tab>           complete        complete filename or alias
+       ^T              complete-query  complete address with query
+       ^K              kill-eol        delete to the end of the line
+       ESC d           kill-eow        delete to the end ot the word
+       ^W              kill-word       kill the word in front of the cursor
+       ^U              kill-line       delete entire line
+       ^V              quote-char      quote the next typed key
+       <Up>            history-up      recall previous string from history
+       <Down>          history-down    recall next string from history
+       <BackSpace>     backspace       kill the char in front of the cursor
+       Esc u           upcase-word     convert word to upper case
+       Esc l           downcase-word   convert word to lower case
+       Esc c           capitalize-word capitalize the word
+       ^G              n/a             abort
+       <Return>        n/a             finish editing
+
+  You can remap the _\be_\bd_\bi_\bt_\bo_\br functions using the ``bind'' command.  For
+  example, to make the _\bD_\be_\bl_\be_\bt_\be key delete the character in front of the
+  cursor rather than under, you could use
+
+  bind editor <delete> backspace
+
+  2\b2.\b.3\b3.\b.  R\bRe\bea\bad\bdi\bin\bng\bg M\bMa\bai\bil\bl -\b- T\bTh\bhe\be I\bIn\bnd\bde\bex\bx a\ban\bnd\bd P\bPa\bag\bge\ber\br
+
+  Similar to many other mail clients, there are two modes in which mail
+  is read in Mutt.  The first is the index of messages in the mailbox,
+  which is called the ``index'' in Mutt.  The second mode is the display
+  of the message contents.  This is called the ``pager.''
+
+  The next few sections describe the functions provided in each of these
+  modes.
+
+  2\b2.\b.3\b3.\b.1\b1.\b.  T\bTh\bhe\be M\bMe\bes\bss\bsa\bag\bge\be I\bIn\bnd\bde\bex\bx
+
+  c               change to a different mailbox
+  ESC c           change to a folder in read-only mode
+  C               copy the current message to another mailbox
+  ESC C           decode a message and copy it to a folder
+  ESC s           decode a message and save it to a folder
+  D               delete messages matching a pattern
+  d               delete the current message
+  F               mark as important
+  l               show messages matching a pattern
+  N               mark message as new
+  o               change the current sort method
+  O               reverse sort the mailbox
+  q               save changes and exit
+  s               save-message
+  T               tag messages matching a pattern
+  t               toggle the tag on a message
+  ESC t           toggle tag on entire message thread
+  U               undelete messages matching a pattern
+  u               undelete-message
+  v               view-attachments
+  x               abort changes and exit
+  <Return>        display-message
+  <Tab>           jump to the next new message
+  @               show the author's full e-mail address
+  $               save changes to mailbox
+  /               search
+  ESC /           search-reverse
+  ^L              clear and redraw the screen
+  ^T              untag messages matching a pattern
+
+  2\b2.\b.3\b3.\b.1\b1.\b.1\b1.\b.  S\bSt\bta\bat\btu\bus\bs F\bFl\bla\bag\bgs\bs
+
+  In addition to who sent the message and the subject, a short summary
+  of the disposition of each message is printed beside the message
+  number.  Zero or more of the following ``flags'' may appear, which
+  mean:
+
+     D\bD  message is deleted (is marked for deletion)
+
+     d\bd  message have attachments marked for deletion
+
+     K\bK  contains a PGP public key
+
+     N\bN  message is new
+
+     O\bO  message is old
+
+     P\bP  message is PGP encrypted
+
+     r\br  message has been replied to
+
+     S\bS  message is signed, and the signature is succesfully verified
+
+     s\bs  message is signed
+
+     !\b!  message is flagged
+
+     *\b*  message is tagged
+
+  Some of the status flags can be turned on or off using
+
+  ·  s\bse\bet\bt-\b-f\bfl\bla\bag\bg (default: w)
+
+  ·  c\bcl\ble\bea\bar\br-\b-f\bfl\bla\bag\bg (default: W)
+
+  Furthermore, the following flags reflect who the message is addressed
+  to.  They can be customized with the ``$to_chars'' variable.
+
+     +\b+  message is to you and you only
+
+     T\bT  message is to you, but also to or cc'ed to others
+
+     C\bC  message is cc'ed to you
+
+     F\bF  message is from you
+
+     L\bL  message is sent to a subscribed mailing list
+
+  2\b2.\b.3\b3.\b.2\b2.\b.  T\bTh\bhe\be P\bPa\bag\bge\ber\br
+
+  By default, Mutt uses its builtin pager to display the body of
+  messages.  The pager is very similar to the Unix program _\bl_\be_\bs_\bs though
+  not nearly as featureful.
+
+       <Return>        go down one line
+       <Space>         display the next page (or next message if at the end of a message)
+       -               go back to the previous page
+       n               search for next match
+       S               skip beyond quoted text
+       T               toggle display of quoted text
+       ?               show keybindings
+       /               search for a regular expression (pattern)
+       ESC /           search backwards for a regular expression
+       \               toggle search pattern coloring
+       ^               jump to the top of the message
+
+  In addition, many of the functions from the _\bi_\bn_\bd_\be_\bx are available in the
+  pager, such as _\bd_\be_\bl_\be_\bt_\be_\b-_\bm_\be_\bs_\bs_\ba_\bg_\be or _\bc_\bo_\bp_\by_\b-_\bm_\be_\bs_\bs_\ba_\bg_\be (this is one advantage
+  over using an external pager to view messages).
+
+  Also, the internal pager supports a couple other advanced features.
+  For one, it will accept and translate the ``standard'' nroff sequences
+  for bold and underline. These sequences are a series of either the
+  letter, backspace (^H), the letter again for bold or the letter,
+  backspace, ``_'' for denoting underline. Mutt will attempt to display
+  these in bold and underline respectively if your terminal supports
+  them. If not, you can use the bold and underline ``color'' objects to
+  specify a color or mono attribute for them.
+
+  Additionally, the internal pager supports the ANSI escape sequences
+  for character attributes.  Mutt translates them into the correct color
+  and character settings.  The sequences Mutt supports are:
+
+       ESC [ Ps;Ps;Ps;...;Ps m
+       where Ps =
+       0    All Attributes Off
+       1    Bold on
+       4    Underline on
+       5    Blink on
+       7    Reverse video on
+       3x   Foreground color is x
+       4x   Background color is x
+
+       Colors are
+       0    black
+       1    red
+       2    green
+       3    yellow
+       4    blue
+       5    magenta
+       6    cyan
+       7    white
+
+  Mutt uses these attributes for handling text/enriched messages, and
+  they can also be used by an external ``autoview'' script for
+  highlighting purposes.  N\bNo\bot\bte\be:\b: If you change the colors for your
+  display, for example by changing the color associated with color2 for
+  your xterm, then that color will be used instead of green.
+
+  2\b2.\b.3\b3.\b.3\b3.\b.  T\bTh\bhr\bre\bea\bad\bde\bed\bd M\bMo\bod\bde\be
+
+  When the mailbox is ``sorted'' by _\bt_\bh_\br_\be_\ba_\bd_\bs, there are a few additional
+  functions available in the _\bi_\bn_\bd_\be_\bx and _\bp_\ba_\bg_\be_\br modes.
+
+       ^D      delete-thread           delete all messages in the current thread
+       ^U      undelete-thread         undelete all messages in the current thread
+       ^N      next-thread             jump to the start of the next thread
+       ^P      previous-thread         jump to the start of the previous thread
+       ^R      read-thread             mark the current thread as read
+       ESC d   delete-subthread        delete all messages in the current subthread
+       ESC u   undelete-subthread      undelete all messages in the current subthread
+       ESC n   next-subthread          jump to the start of the next subthread
+       ESC p   previous-subthread      jump to the start of the previous subthread
+       ESC r   read-subthread          mark the current subthread as read
+       ESC t   tag-thread              toggle the tag on the current thread
+       ESC v   collapse-thread         toggle collapse for the current thread
+       ESC V   collapse-all            toggle collapse for all threads
+       P       parent-message          jump to parent message in thread
+
+  N\bNo\bot\bte\be:\b: Collapsing a thread displays only the first message in the
+  thread and hides the others. This is useful when threads contain so
+  many messages that you can only see a handful of threads on the
+  screen. See %M in ``$index_format''.  For example, you could use
+  "%?M?(#%03M)&(%4l)?" in ``$index_format'' to optionally display the
+  number of hidden messages if the thread is collapsed.
+
+  See also: ``$strict_threads''.
+
+  2\b2.\b.3\b3.\b.4\b4.\b.  M\bMi\bis\bsc\bce\bel\bll\bla\ban\bne\beo\bou\bus\bs F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs
+
+  c\bcr\bre\bea\bat\bte\be-\b-a\bal\bli\bia\bas\bs (default: a)
+
+  Creates a new alias based upon the current message (or prompts for a
+  new one).  Once editing is complete, an ``alias'' command is added to
+  the file specified by the ``$alias_file'' variable for future use.
+  N\bNo\bot\bte\be:\b: Specifying an ``$alias_file'' does not add the aliases specified
+  there-in, you must also ``source'' the file.
+
+  c\bch\bhe\bec\bck\bk-\b-t\btr\bra\bad\bdi\bit\bti\bio\bon\bna\bal\bl-\b-p\bpg\bgp\bp (default: ESC P)
+
+  This function will search the current message for content signed or
+  encrypted with PGP the "traditional" way, that is, without proper MIME
+  tagging.  Technically, this function will temporarily change the MIME
+  content types of the body parts containing PGP data; this is similar
+  to the ``edit-type'' function's effect.
+
+  d\bdi\bis\bsp\bpl\bla\bay\by-\b-t\bto\bog\bgg\bgl\ble\be-\b-w\bwe\bee\bed\bd (default: h)
+
+  Toggles the weeding of message header fields specified by ``ignore''
+  commands.
+
+  e\bed\bdi\bit\bt (default: e)
+
+  This command (available in the ``index'' and ``pager'') allows you to
+  edit the raw current message as it's present in the mail folder.
+  After you have finished editing, the changed message will be appended
+  to the current folder, and the original message will be marked for
+  deletion.
+
+  e\bed\bdi\bit\bt-\b-t\bty\byp\bpe\be
+  (default: ^E on the attachment menu, and in the pager and index menus;
+  ^T on the compose menu)
+
+  This command is used to temporarily edit an attachment's content type
+  to fix, for instance, bogus character set parameters.  When invoked
+  from the index or from the pager, you'll have the opportunity to edit
+  the top-level attachment's content type.  On the ``attachment menu'',
+  you can change any attachment's content type. These changes are not
+  persistent, and get lost upon changing folders.
+
+  Note that this command is also available on the ``compose menu''.
+  There, it's used to fine-tune the properties of attachments you are
+  going to send.
+
+  e\ben\bnt\bte\ber\br-\b-c\bco\bom\bmm\bma\ban\bnd\bd (default: ``:'')
+
+  This command is used to execute any command you would normally put in
+  a configuration file.  A common use is to check the settings of
+  variables, or in conjunction with ``macros'' to change settings on the
+  fly.
+
+  e\bex\bxt\btr\bra\bac\bct\bt-\b-k\bke\bey\bys\bs (default: ^K)
+
+  This command extracts PGP public keys from the current or tagged
+  message(s) and adds them to your PGP public key ring.
+
+  f\bfo\bor\brg\bge\bet\bt-\b-p\bpa\bas\bss\bsp\bph\bhr\bra\bas\bse\be (default: ^F)
+
+  This command wipes the passphrase(s) from memory. It is useful, if you
+  misspelled the passphrase.
+
+  l\bli\bis\bst\bt-\b-r\bre\bep\bpl\bly\by (default: L)
+
+  Reply to the current or tagged message(s) by extracting any addresses
+  which match the addresses given by the ``lists or subscribe''
+  commands, but also honor any Mail-Followup-To header(s) if the
+  ``$honor_followup_to'' configuration variable is set.  Using this when
+  replying to messages posted to mailing lists helps avoid duplicate
+  copies being sent to the author of the message you are replying to.
+
+  p\bpi\bip\bpe\be-\b-m\bme\bes\bss\bsa\bag\bge\be (default: |)
+
+  Asks for an external Unix command and pipes the current or tagged
+  message(s) to it.  The variables ``$pipe_decode'', ``$pipe_split'',
+  ``$pipe_sep'' and ``$wait_key'' control the exact behaviour of this
+  function.
+
+  r\bre\bes\bse\ben\bnd\bd-\b-m\bme\bes\bss\bsa\bag\bge\be (default: ESC e)
+
+  With resend-message, mutt takes the current message as a template for
+  a new message.  This function is best described as "recall from
+  arbitrary folders".  It can conveniently be used to forward MIME
+  messages while preserving the original mail structure. Note that the
+  amount of headers included here depends on the value of the ``$weed''
+  variable.
+
+  This function is also available from the attachment menu. You can use
+  this to easily resend a message which was included with a bounce
+  message as a message/rfc822 body part.
+
+  s\bsh\bhe\bel\bll\bl-\b-e\bes\bsc\bca\bap\bpe\be (default: !)
+
+  Asks for an external Unix command and executes it.  The ``$wait_key''
+  can be used to control whether Mutt will wait for a key to be pressed
+  when the command returns (presumably to let the user read the output
+  of the command), based on the return status of the named command.
+
+  t\bto\bog\bgg\bgl\ble\be-\b-q\bqu\buo\bot\bte\bed\bd (default: T)
+
+  The _\bp_\ba_\bg_\be_\br uses the ``$quote_regexp'' variable to detect quoted text
+  when displaying the body of the message.  This function toggles the
+  display of the quoted material in the message.  It is particularly
+  useful when are interested in just the response and there is a large
+  amount of quoted text in the way.
+
+  s\bsk\bki\bip\bp-\b-q\bqu\buo\bot\bte\bed\bd (default: S)
+
+  This function will go to the next line of non-quoted text which come
+  after a line of quoted text in the internal pager.
+
+  2\b2.\b.4\b4.\b.  S\bSe\ben\bnd\bdi\bin\bng\bg M\bMa\bai\bil\bl
+
+  The following bindings are available in the _\bi_\bn_\bd_\be_\bx for sending
+  messages.
+
+  m       compose         compose a new message
+  r       reply           reply to sender
+  g       group-reply     reply to all recipients
+  L       list-reply      reply to mailing list address
+  f       forward         forward message
+  b       bounce          bounce (remail) message
+  ESC k   mail-key        mail a PGP public key to someone
+
+  Bouncing a message sends the message as is to the recipient you
+  specify.  Forwarding a message allows you to add comments or modify
+  the message you are forwarding.  These items are discussed in greater
+  detail in the next chapter ````Forwarding and Bouncing Mail''''.
+
+  Mutt will then enter the _\bc_\bo_\bm_\bp_\bo_\bs_\be menu and prompt you for the
+  recipients to place on the ``To:'' header field.  Next, it will ask
+  you for the ``Subject:'' field for the message, providing a default if
+  you are replying to or forwarding a message.  See also ``$askcc'',
+  ``$askbcc'', ``$autoedit'', ``$bounce'', and ``$fast_reply'' for
+  changing how Mutt asks these questions.
+
+  Mutt will then automatically start your ``$editor'' on the message
+  body.  If the ``$edit_headers'' variable is set, the headers will be
+  at the top of the message in your editor.  Any messages you are
+  replying to will be added in sort order to the message, with
+  appropriate ``$attribution'', ``$indent_string'' and
+  ``$post_indent_string''.  When forwarding a message, if the
+  ``$mime_forward'' variable is unset, a copy of the forwarded message
+  will be included.  If you have specified a ``$signature'', it will be
+  appended to the message.
+
+  Once you have finished editing the body of your mail message, you are
+  returned to the _\bc_\bo_\bm_\bp_\bo_\bs_\be menu.  The following options are available:
+
+       a       attach-file             attach a file
+       A       attach-message          attach message(s) to the message
+       ESC k   attach-key              attach a PGP public key
+       d       edit-description        edit description on attachment
+       D       detach-file             detach a file
+       t       edit-to                 edit the To field
+       ESC f   edit-from               edit the From field
+       r       edit-reply-to           edit the Reply-To field
+       c       edit-cc                 edit the Cc field
+       b       edit-bcc                edit the Bcc field
+       y       send-message            send the message
+       s       edit-subject            edit the Subject
+       S       smime-menu              select S/MIME options
+       f       edit-fcc                specify an ``Fcc'' mailbox
+       p       pgp-menu                select PGP options
+       P       postpone-message        postpone this message until later
+       q       quit                    quit (abort) sending the message
+       w       write-fcc               write the message to a folder
+       i       ispell                  check spelling (if available on your system)
+       ^F      forget-passphrase       wipe passphrase(s) from memory
+
+  N\bNo\bot\bte\be:\b: The attach-message function will prompt you for a folder to
+  attach messages from. You can now tag messages in that folder and they
+  will be attached to the message you are sending. Note that certain
+  operations like composing a new mail, replying, forwarding, etc. are
+  not permitted when you are in that folder. The %r in
+  ``$status_format'' will change to a 'A' to indicate that you are in
+  attach-message mode.
+
+  2\b2.\b.4\b4.\b.1\b1.\b.  E\bEd\bdi\bit\bti\bin\bng\bg t\bth\bhe\be m\bme\bes\bss\bsa\bag\bge\be h\bhe\bea\bad\bde\ber\br
+
+  When editing the header of your outgoing message, there are a couple
+  of special features available.
+
+  If you specify
+  Fcc: _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
+  Mutt will pick up _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be just as if you had used the _\be_\bd_\bi_\bt_\b-_\bf_\bc_\bc
+  function in the _\bc_\bo_\bm_\bp_\bo_\bs_\be menu.
+
+  You can also attach files to your message by specifying
+  Attach: _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be  [ _\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn ]
+  where _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be is the file to attach and _\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn is an optional
+  string to use as the description of the attached file.
+
+  When replying to messages, if you remove the _\bI_\bn_\b-_\bR_\be_\bp_\bl_\by_\b-_\bT_\bo_\b: field from
+  the header field, Mutt will not generate a _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bs_\b: field, which
+  allows you to create a new message thread.
+
+  Also see ``edit_headers''.
+
+  2\b2.\b.4\b4.\b.2\b2.\b.  U\bUs\bsi\bin\bng\bg M\bMu\but\btt\bt w\bwi\bit\bth\bh P\bPG\bGP\bP
+
+  If you want to use PGP, you can specify
+
+  Pgp: [ E | S | S<id> ]
+
+  ``E'' encrypts, ``S'' signs and ``S<id>'' signs with the given key,
+  setting ``$pgp_sign_as'' permanently.
+
+  If you have told mutt to PGP encrypt a message, it will guide you
+  through a key selection process when you try to send the message.
+  Mutt will not ask you any questions about keys which have a certified
+  user ID matching one of the message recipients' mail addresses.
+  However, there may be situations in which there are several keys,
+  weakly certified user ID fields, or where no matching keys can be
+  found.
+
+  In these cases, you are dropped into a menu with a list of keys from
+  which you can select one.  When you quit this menu, or mutt can't find
+  any matching keys, you are prompted for a user ID.  You can, as
+  usually, abort this prompt using ^G.  When you do so, mutt will return
+  to the compose screen.
+
+  Once you have successfully finished the key selection, the message
+  will be encrypted using the selected public keys, and sent out.
+
+  Most fields of the entries in the key selection menu (see also
+  ``$pgp_entry_format'') have obvious meanings.  But some explanations
+  on the capabilities, flags, and validity fields are in order.
+
+  The flags sequence (%f) will expand to one of the following flags:
+
+       R            The key has been revoked and can't be used.
+       X            The key is expired and can't be used.
+       d            You have marked the key as disabled.
+       c            There are unknown critical self-signature
+                    packets.
+
+  The capabilities field (%c) expands to a two-character sequence
+  representing a key's capabilities.  The first character gives the
+  key's encryption capabilities: A minus sign (-\b-) means that the key
+  cannot be used for encryption.  A dot (.\b.) means that it's marked as a
+  signature key in one of the user IDs, but may also be used for
+  encryption.  The letter e\be indicates that this key can be used for
+  encryption.
+
+  The second character indicates the key's signing capabilities.  Once
+  again, a ``-\b-'' implies ``not for signing'', ``.\b.'' implies that the key
+  is marked as an encryption key in one of the user-ids, and ``s\bs''
+  denotes a key which can be used for signing.
+
+  Finally, the validity field (%t) indicates how well-certified a user-
+  id is.  A question mark (?\b?) indicates undefined validity, a minus
+  character (-\b-) marks an untrusted association, a space character means
+  a partially trusted association, and a plus character (+\b+) indicates
+  complete validity.
+
+  2\b2.\b.4\b4.\b.3\b3.\b.  S\bSe\ben\bnd\bdi\bin\bng\bg a\ban\bno\bon\bny\bym\bmo\bou\bus\bs m\bme\bes\bss\bsa\bag\bge\bes\bs v\bvi\bia\ba m\bmi\bix\bxm\bma\bas\bst\bte\ber\br.\b.
+
+  You may also have configured mutt to co-operate with Mixmaster, an
+  anonymous remailer.  Mixmaster permits you to send your messages
+  anonymously using a chain of remailers. Mixmaster support in mutt is
+  for mixmaster version 2.04 (beta 45 appears to be the latest) and
+  2.03.  It does not support earlier versions or the later so-called
+  version 3 betas, of which the latest appears to be called 2.9b23.
+
+  To use it, you'll have to obey certain restrictions.  Most important,
+  you cannot use the Cc and Bcc headers.  To tell Mutt to use mixmaster,
+  you have to select a remailer chain, using the mix function on the
+  compose menu.
+
+  The chain selection screen is divided into two parts.  In the (larger)
+  upper part, you get a list of remailers you may use.  In the lower
+  part, you see the currently selected chain of remailers.
+
+  You can navigate in the chain using the chain-prev and chain-next
+  functions, which are by default bound to the left and right arrows and
+  to the h and l keys (think vi keyboard bindings).  To insert a
+  remailer at the current chain position, use the insert function.  To
+  append a remailer behind the current chain position, use select-entry
+  or append.  You can also delete entries from the chain, using the
+  corresponding function.  Finally, to abandon your changes, leave the
+  menu, or accept them pressing (by default) the Return key.
+
+  Note that different remailers do have different capabilities,
+  indicated in the %c entry of the remailer menu lines (see
+  ``$mix_entry_format'').  Most important is the ``middleman''
+  capability, indicated by a capital ``M'': This means that the remailer
+  in question cannot be used as the final element of a chain, but will
+  only forward messages to other mixmaster remailers.  For details on
+  the other capabilities, please have a look at the mixmaster
+  documentation.
+
+  2\b2.\b.5\b5.\b.  F\bFo\bor\brw\bwa\bar\brd\bdi\bin\bng\bg a\ban\bnd\bd B\bBo\bou\bun\bnc\bci\bin\bng\bg M\bMa\bai\bil\bl
+
+  Bouncing and forwarding let you send an existing message to recipients
+  that you specify.  Bouncing a message uses the ``sendmail'' command to
+  send a copy to alternative addresses as if they were the message's
+  original recipients.  Forwarding a message, on the other hand, allows
+  you to modify the message before it is resent (for example, by adding
+  your own comments).
+  The following keys are bound by default:
+
+       f       forward         forward message
+       b       bounce          bounce (remail) message
+
+  Forwarding can be done by including the original message in the new
+  message's body (surrounded by indicating lines) or including it as a
+  MIME attachment, depending on the value of the ``$mime_forward''
+  variable.  Decoding of attachments, like in the pager, can be
+  controlled by the ``$forward_decode'' and ``$mime_forward_decode''
+  variables, respectively.  The desired forwarding format may depend on
+  the content, therefore _\b$_\bm_\bi_\bm_\be_\b__\bf_\bo_\br_\bw_\ba_\br_\bd is a quadoption which, for
+  example, can be set to ``ask-no''.
+
+  The inclusion of headers is controlled by the current setting of the
+  ``$weed'' variable, unless ``mime_forward'' is set.
+
+  Editing the message to forward follows the same procedure as sending
+  or replying to a message does.
+
+  2\b2.\b.6\b6.\b.  P\bPo\bos\bst\btp\bpo\bon\bni\bin\bng\bg M\bMa\bai\bil\bl
+
+  At times it is desirable to delay sending a message that you have
+  already begun to compose.  When the _\bp_\bo_\bs_\bt_\bp_\bo_\bn_\be_\b-_\bm_\be_\bs_\bs_\ba_\bg_\be function is used
+  in the _\bc_\bo_\bm_\bp_\bo_\bs_\be menu, the body of your message and attachments are
+  stored in the mailbox specified by the ``$postponed'' variable.  This
+  means that you can recall the message even if you exit Mutt and then
+  restart it at a later time.
+
+  Once a message is postponed, there are several ways to resume it.
+  From the command line you can use the ``-p'' option, or if you _\bc_\bo_\bm_\bp_\bo_\bs_\be
+  a new message from the _\bi_\bn_\bd_\be_\bx or _\bp_\ba_\bg_\be_\br you will be prompted if
+  postponed messages exist.  If multiple messages are currently
+  postponed, the _\bp_\bo_\bs_\bt_\bp_\bo_\bn_\be_\bd menu will pop up and you can select which
+  message you would like to resume.
+
+  N\bNo\bot\bte\be:\b: If you postpone a reply to a message, the reply setting of the
+  message is only updated when you actually finish the message and send
+  it.  Also, you must be in the same folder with the message you replied
+  to for the status of the message to be updated.
+
+  See also the ``$postpone'' quad-option.
+
+  2\b2.\b.7\b7.\b.  R\bRe\bea\bad\bdi\bin\bng\bg n\bne\bew\bws\bs v\bvi\bia\ba N\bNN\bNT\bTP\bP
+
+  If compiled with ``--enable-nntp'' option, Mutt can read news from
+  newsserver via NNTP.  You can open a newsgroup with function ``change-
+  newsgroup'' (default: i).  Default newsserver can be obtained from
+  _\bN_\bN_\bT_\bP_\bS_\bE_\bR_\bV_\bE_\bR environment variable.  Like other news readers, info about
+  subscribed newsgroups is saved in file by ``$newsrc'' variable.
+  Article headers are cached and can be loaded from file when newsgroup
+  entered instead loading from newsserver.
+
+  3\b3.\b.  C\bCo\bon\bnf\bfi\big\bgu\bur\bra\bat\bti\bio\bon\bn
+
+  While the default configuration (or ``preferences'') make Mutt usable
+  right out of the box, it is often desirable to tailor Mutt to suit
+  your own tastes. When Mutt is first invoked, it will attempt to read
+  the ``system'' configuration file (defaults set by your local system
+  administrator), unless the ``-n'' ``command line'' option is
+  specified.  This file is typically /usr/local/share/mutt/Muttrc or
+  /etc/Muttrc. Mutt will next look for a file named .muttrc in your home
+  directory.  If this file does not exist and your home directory has a
+  subdirectory named .mutt, mutt try to load a file named .mutt/muttrc.
+
+  .muttrc is the file where you will usually place your ``commands'' to
+  configure Mutt.
+
+  In addition, mutt supports version specific configuration files that
+  are parsed instead of the default files as explained above.  For
+  instance, if your system has a Muttrc-0.88 file in the system
+  configuration directory, and you are running version 0.88 of mutt,
+  this file will be sourced instead of the Muttrc file.  The same is
+  true of the user configuration file, if you have a file .muttrc-0.88.6
+  in your home directory, when you run mutt version 0.88.6, it will
+  source this file instead of the default .muttrc file.  The version
+  number is the same which is visible using the ``-v'' ``command line''
+  switch or using the show-version key (default: V) from the index menu.
+
+  3\b3.\b.1\b1.\b.  S\bSy\byn\bnt\bta\bax\bx o\bof\bf I\bIn\bni\bit\bti\bia\bal\bli\biz\bza\bat\bti\bio\bon\bn F\bFi\bil\ble\bes\bs
+
+  An initialization file consists of a series of ``commands''.  Each
+  line of the file may contain one or more commands.  When multiple
+  commands are used, they must be separated by a semicolon (;).
+
+       set realname='Mutt user' ; ignore x-
+
+  The hash mark, or pound sign (``#''), is used as a ``comment'' charac­
+  ter. You can use it to annotate your initialization file. All text
+  after the comment character to the end of the line is ignored. For
+  example,
+
+       my_hdr X-Disclaimer: Why are you listening to me? # This is a comment
+
+  Single quotes (') and double quotes (") can be used to quote strings
+  which contain spaces or other special characters.  The difference
+  between the two types of quotes is similar to that of many popular
+  shell programs, namely that a single quote is used to specify a
+  literal string (one that is not interpreted for shell variables or
+  quoting with a backslash [see next paragraph]), while double quotes
+  indicate a string for which should be evaluated.  For example,
+  backtics are evaluated inside of double quotes, but n\bno\bot\bt for single
+  quotes.
+
+  \ quotes the next character, just as in shells such as bash and zsh.
+  For example, if want to put quotes ``"'' inside of a string, you can
+  use ``\'' to force the next character to be a literal instead of
+  interpreted character.
+
+       set realname="Michael \"MuttDude\" Elkins"
+
+  ``\\'' means to insert a literal ``\'' into the line.  ``\n'' and
+  ``\r'' have their usual C meanings of linefeed and carriage-return,
+  respectively.
+
+  A \ at the end of a line can be used to split commands over multiple
+  lines, provided that the split points don't appear in the middle of
+  command names.
+
+  It is also possible to substitute the output of a Unix command in an
+  initialization file.  This is accomplished by enclosing the command in
+  backquotes (``).  For example,
+
+       my_hdr X-Operating-System: `uname -a`
+
+  The output of the Unix command ``uname -a'' will be substituted before
+  the line is parsed.  Note that since initialization files are line
+  oriented, only the first line of output from the Unix command will be
+  substituted.
+
+  UNIX environments can be accessed like the way it is done in shells
+  like sh and bash: Prepend the name of the environment by a ``$''.  For
+  example,
+
+       set record=+sent_on_$HOSTNAME
+
+  The commands understood by mutt are explained in the next paragraphs.
+  For a complete list, see the ``command reference''.
+
+  3\b3.\b.2\b2.\b.  D\bDe\bef\bfi\bin\bni\bin\bng\bg/\b/U\bUs\bsi\bin\bng\bg a\bal\bli\bia\bas\bse\bes\bs
+
+  Usage: alias _\bk_\be_\by _\ba_\bd_\bd_\br_\be_\bs_\bs [ , _\ba_\bd_\bd_\br_\be_\bs_\bs, ... ]
+
+  It's usually very cumbersome to remember or type out the address of
+  someone you are communicating with.  Mutt allows you to create
+  ``aliases'' which map a short string to a full address.
+
+  N\bNo\bot\bte\be:\b: if you want to create an alias for a group (by specifying more
+  than one address), you m\bmu\bus\bst\bt separate the addresses with a comma
+  (``,'').
+
+  To remove an alias or aliases (``*'' means all aliases):
+
+  unalias [ * | _\bk_\be_\by _\b._\b._\b. ]
+
+  alias muttdude me@cs.hmc.edu (Michael Elkins)
+  alias theguys manny, moe, jack
+
+  Unlike other mailers, Mutt doesn't require aliases to be defined in a
+  special file.  The alias command can appear anywhere in a
+  configuration file, as long as this file is ``sourced''.
+  Consequently, you can have multiple alias files, or you can have all
+  aliases defined in your muttrc.
+
+  On the other hand, the ``create-alias'' function can use only one
+  file, the one pointed to by the ``$alias_file'' variable (which is
+  ~/.muttrc by default). This file is not special either, in the sense
+  that Mutt will happily append aliases to any file, but in order for
+  the new aliases to take effect you need to explicitly ``source'' this
+  file too.
+
+  For example:
+
+       source /usr/local/share/Mutt.aliases
+       source ~/.mail_aliases
+       set alias_file=~/.mail_aliases
+
+  To use aliases, you merely use the alias at any place in mutt where
+  mutt prompts for addresses, such as the _\bT_\bo_\b: or _\bC_\bc_\b: prompt.  You can
+  also enter aliases in your editor at the appropriate headers if you
+  have the ``$edit_headers'' variable set.
+
+  In addition, at the various address prompts, you can use the tab
+  character to expand a partial alias to the full alias.  If there are
+  multiple matches, mutt will bring up a menu with the matching aliases.
+  In order to be presented with the full list of aliases, you must hit
+  tab with out a partial alias, such as at the beginning of the prompt
+  or after a comma denoting multiple addresses.
+
+  In the alias menu, you can select as many aliases as you want with the
+  _\bs_\be_\bl_\be_\bc_\bt_\b-_\be_\bn_\bt_\br_\by key (default: RET), and use the _\be_\bx_\bi_\bt key (default: q) to
+  return to the address prompt.
+
+  3\b3.\b.3\b3.\b.  C\bCh\bha\ban\bng\bgi\bin\bng\bg t\bth\bhe\be d\bde\bef\bfa\bau\bul\blt\bt k\bke\bey\by b\bbi\bin\bnd\bdi\bin\bng\bgs\bs
+
+  Usage: bind _\bm_\ba_\bp _\bk_\be_\by _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn
+
+  This command allows you to change the default key bindings (operation
+  invoked when pressing a key).
+
+  _\bm_\ba_\bp specifies in which menu the binding belongs.  The currently
+  defined maps are:
+
+     g\bge\ben\bne\ber\bri\bic\bc
+        This is not a real menu, but is used as a fallback for all of
+        the other menus except for the pager and editor modes.  If a key
+        is not defined in another menu, Mutt will look for a binding to
+        use in this menu.  This allows you to bind a key to a certain
+        function in multiple menus instead of having multiple bind
+        statements to accomplish the same task.
+
+     a\bal\bli\bia\bas\bs
+        The alias menu is the list of your personal aliases as defined
+        in your muttrc.  It is the mapping from a short alias name to
+        the full email address(es) of the recipient(s).
+
+     a\bat\btt\bta\bac\bch\bh
+        The attachment menu is used to access the attachments on
+        received messages.
+
+     b\bbr\bro\bow\bws\bse\ber\br
+        The browser is used for both browsing the local directory
+        structure, and for listing all of your incoming mailboxes.
+
+     e\bed\bdi\bit\bto\bor\br
+        The editor is the line-based editor the user enters text data.
+
+     i\bin\bnd\bde\bex\bx
+        The index is the list of messages contained in a mailbox.
+
+     c\bco\bom\bmp\bpo\bos\bse\be
+        The compose menu is the screen used when sending a new message.
+
+     p\bpa\bag\bge\ber\br
+        The pager is the mode used to display message/attachment data,
+        and help listings.
+
+     p\bpg\bgp\bp
+        The pgp menu is used to select the OpenPGP keys used for
+        encrypting outgoing messages.
+
+     p\bpo\bos\bst\btp\bpo\bon\bne\be
+        The postpone menu is similar to the index menu, except is used
+        when recalling a message the user was composing, but saved until
+        later.
+
+  _\bk_\be_\by is the key (or key sequence) you wish to bind.  To specify a
+  control character, use the sequence _\b\_\bC_\bx, where _\bx is the letter of the
+  control character (for example, to specify control-A use ``\Ca'').
+  Note that the case of _\bx as well as _\b\_\bC is ignored, so that _\b\_\bC_\bA_\b, _\b\_\bC_\ba_\b,
+  _\b\_\bc_\bA and _\b\_\bc_\ba are all equivalent.  An alternative form is to specify the
+  key as a three digit octal number prefixed with a ``\'' (for example
+  _\b\_\b1_\b7_\b7 is equivalent to _\b\_\bc_\b?).
+
+  In addition, _\bk_\be_\by may consist of:
+
+  \t              tab
+  <tab>           tab
+  \r              carriage return
+  \n              newline
+  \e              escape
+  <esc>           escape
+  <up>            up arrow
+  <down>          down arrow
+  <left>          left arrow
+  <right>         right arrow
+  <pageup>        Page Up
+  <pagedown>      Page Down
+  <backspace>     Backspace
+  <delete>        Delete
+  <insert>        Insert
+  <enter>         Enter
+  <return>        Return
+  <home>          Home
+  <end>           End
+  <space>         Space bar
+  <f1>            function key 1
+  <f10>           function key 10
+
+  _\bk_\be_\by does not need to be enclosed in quotes unless it contains a space
+  (`` '').
+
+  _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn specifies which action to take when _\bk_\be_\by is pressed.  For a
+  complete list of functions, see the ``reference''.  The special
+  function noop unbinds the specified key sequence.
+
+  3\b3.\b.4\b4.\b.  D\bDe\bef\bfi\bin\bni\bin\bng\bg a\bal\bli\bia\bas\bse\bes\bs f\bfo\bor\br c\bch\bha\bar\bra\bac\bct\bte\ber\br s\bse\bet\bts\bs
+
+  Usage: charset-hook _\ba_\bl_\bi_\ba_\bs _\bc_\bh_\ba_\br_\bs_\be_\bt
+  Usage: iconv-hook _\bc_\bh_\ba_\br_\bs_\be_\bt _\bl_\bo_\bc_\ba_\bl_\b-_\bc_\bh_\ba_\br_\bs_\be_\bt
+
+  The charset-hook command defines an alias for a character set.  This
+  is useful to properly display messages which are tagged with a
+  character set name not known to mutt.
+
+  The iconv-hook command defines a system-specific name for a character
+  set.  This is helpful when your systems character conversion library
+  insists on using strange, system-specific names for character sets.
+
+  3\b3.\b.5\b5.\b.  S\bSe\bet\btt\bti\bin\bng\bg v\bva\bar\bri\bia\bab\bbl\ble\bes\bs b\bba\bas\bse\bed\bd u\bup\bpo\bon\bn m\bma\bai\bil\blb\bbo\box\bx
+
+  Usage: folder-hook [!]_\br_\be_\bg_\be_\bx_\bp _\bc_\bo_\bm_\bm_\ba_\bn_\bd
+
+  It is often desirable to change settings based on which mailbox you
+  are reading.  The folder-hook command provides a method by which you
+  can execute any configuration command.  _\br_\be_\bg_\be_\bx_\bp is a regular expression
+  specifying in which mailboxes to execute _\bc_\bo_\bm_\bm_\ba_\bn_\bd before loading.  If a
+  mailbox matches multiple folder-hook's, they are executed in the order
+  given in the muttrc.
+
+  N\bNo\bot\bte\be:\b: if you use the ``!'' shortcut for ``$spoolfile'' at the
+  beginning of the pattern, you must place it inside of double or single
+  quotes in order to distinguish it from the logical _\bn_\bo_\bt operator for
+  the expression.
+
+  Note that the settings are _\bn_\bo_\bt restored when you leave the mailbox.
+  For example, a command action to perform is to change the sorting
+  method based upon the mailbox being read:
+
+       folder-hook mutt set sort=threads
+
+  However, the sorting method is not restored to its previous value when
+  reading a different mailbox.  To specify a _\bd_\be_\bf_\ba_\bu_\bl_\bt command, use the
+  pattern ``.'':
+
+       folder-hook . set sort=date-sent
+
+  3\b3.\b.6\b6.\b.  K\bKe\bey\byb\bbo\boa\bar\brd\bd m\bma\bac\bcr\bro\bos\bs
+
+  Usage: macro _\bm_\be_\bn_\bu _\bk_\be_\by _\bs_\be_\bq_\bu_\be_\bn_\bc_\be [ _\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn ]
+
+  Macros are useful when you would like a single key to perform a series
+  of actions.  When you press _\bk_\be_\by in menu _\bm_\be_\bn_\bu, Mutt will behave as if
+  you had typed _\bs_\be_\bq_\bu_\be_\bn_\bc_\be.  So if you have a common sequence of commands
+  you type, you can create a macro to execute those commands with a
+  single key.
+
+  _\bk_\be_\by and _\bs_\be_\bq_\bu_\be_\bn_\bc_\be are expanded by the same rules as the ``key
+  bindings''.  There are some additions however.  The first is that
+  control characters in _\bs_\be_\bq_\bu_\be_\bn_\bc_\be can also be specified as _\b^_\bx.  In order
+  to get a caret (`^'') you need to use _\b^_\b^.  Secondly, to specify a
+  certain key such as _\bu_\bp or to invoke a function directly, you can use
+  the format _\b<_\bk_\be_\by _\bn_\ba_\bm_\be_\b> and _\b<_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn _\bn_\ba_\bm_\be_\b>.  For a listing of key names
+  see the section on ``key bindings''.  Functions are listed in the
+  ``function reference''.
+
+  The advantage with using function names directly is that the macros
+  will work regardless of the current key bindings, so they are not
+  dependent on the user having particular key definitions.  This makes
+  them more robust and portable, and also facilitates defining of macros
+  in files used by more than one user (eg. the system Muttrc).
+
+  Optionally you can specify a descriptive text after _\bs_\be_\bq_\bu_\be_\bn_\bc_\be, which is
+  shown in the help screens.
+
+  N\bNo\bot\bte\be:\b: Macro definitions (if any) listed in the help screen(s), are
+  silently truncated at the screen width, and are not wrapped.
+
+  3\b3.\b.7\b7.\b.  U\bUs\bsi\bin\bng\bg c\bco\bol\blo\bor\br a\ban\bnd\bd m\bmo\bon\bno\bo v\bvi\bid\bde\beo\bo a\bat\btt\btr\bri\bib\bbu\but\bte\bes\bs
+
+  Usage: color _\bo_\bb_\bj_\be_\bc_\bt _\bf_\bo_\br_\be_\bg_\br_\bo_\bu_\bn_\bd _\bb_\ba_\bc_\bk_\bg_\br_\bo_\bu_\bn_\bd [ _\br_\be_\bg_\be_\bx_\bp ]
+  Usage: color index _\bf_\bo_\br_\be_\bg_\br_\bo_\bu_\bn_\bd _\bb_\ba_\bc_\bk_\bg_\br_\bo_\bu_\bn_\bd _\bp_\ba_\bt_\bt_\be_\br_\bn
+  Usage: uncolor index _\bp_\ba_\bt_\bt_\be_\br_\bn [ _\bp_\ba_\bt_\bt_\be_\br_\bn ...  ]
+
+  If your terminal supports color, you can spice up Mutt by creating
+  your own color scheme.  To define the color of an object (type of
+  information), you must specify both a foreground color a\ban\bnd\bd a
+  background color (it is not possible to only specify one or the
+  other).
+
+  _\bo_\bb_\bj_\be_\bc_\bt can be one of:
+
+  ·  attachment
+
+  ·  body (match _\br_\be_\bg_\be_\bx_\bp in the body of messages)
+
+  ·  bold (hiliting bold patterns in the body of messages)
+
+  ·  error (error messages printed by Mutt)
+
+  ·  header (match _\br_\be_\bg_\be_\bx_\bp in the message header)
+
+  ·  hdrdefault (default color of the message header in the pager)
+
+  ·  index (match _\bp_\ba_\bt_\bt_\be_\br_\bn in the message index)
+
+  ·  indicator (arrow or bar used to indicate the current item in a
+     menu)
+
+  ·  markers (the ``+'' markers at the beginning of wrapped lines in the
+     pager)
+
+  ·  message (informational messages)
+
+  ·  normal
+
+  ·  quoted (text matching ``$quote_regexp'' in the body of a message)
+
+  ·  quoted1, quoted2, ..., quotedN\bN (higher levels of quoting)
+
+  ·  search (hiliting of words in the pager)
+
+  ·  signature
+
+  ·  status (mode lines used to display info about the mailbox or
+     message)
+
+  ·  tilde (the ``~'' used to pad blank lines in the pager)
+
+  ·  tree (thread tree drawn in the message index and attachment menu)
+
+  ·  underline (hiliting underlined patterns in the body of messages)
+
+  _\bf_\bo_\br_\be_\bg_\br_\bo_\bu_\bn_\bd and _\bb_\ba_\bc_\bk_\bg_\br_\bo_\bu_\bn_\bd can be one of the following:
+
+  ·  white
+
+  ·  black
+
+  ·  green
+
+  ·  magenta
+
+  ·  blue
+
+  ·  cyan
+
+  ·  yellow
+
+  ·  red
+
+  ·  default
+
+  ·  color_\bx
+
+  _\bf_\bo_\br_\be_\bg_\br_\bo_\bu_\bn_\bd can optionally be prefixed with the keyword bright to make
+  the foreground color boldfaced (e.g., brightred).
+
+  If your terminal supports it, the special keyword _\bd_\be_\bf_\ba_\bu_\bl_\bt can be used
+  as a transparent color.  The value _\bb_\br_\bi_\bg_\bh_\bt_\bd_\be_\bf_\ba_\bu_\bl_\bt is also valid.  If
+  Mutt is linked against the _\bS_\b-_\bL_\ba_\bn_\bg library, you also need to set the
+  _\bC_\bO_\bL_\bO_\bR_\bF_\bG_\bB_\bG environment variable to the default colors of your terminal
+  for this to work; for example (for Bourne-like shells):
+
+       set COLORFGBG="green;black"
+       export COLORFGBG
+
+  N\bNo\bot\bte\be:\b: The _\bS_\b-_\bL_\ba_\bn_\bg library requires you to use the _\bl_\bi_\bg_\bh_\bt_\bg_\br_\ba_\by and _\bb_\br_\bo_\bw_\bn
+  keywords instead of _\bw_\bh_\bi_\bt_\be and _\by_\be_\bl_\bl_\bo_\bw when setting this variable.
+
+  N\bNo\bot\bte\be:\b: The uncolor command can be applied to the index object only.  It
+  removes entries from the list. You m\bmu\bus\bst\bt specify the same pattern
+  specified in the color command for it to be removed.  The pattern
+  ``*'' is a special token which means to clear the color index list of
+  all entries.
+
+  Mutt also recognizes the keywords _\bc_\bo_\bl_\bo_\br_\b0, _\bc_\bo_\bl_\bo_\br_\b1, ..., _\bc_\bo_\bl_\bo_\brN\bN-\b-1\b1 (N\bN
+  being the number of colors supported by your terminal).  This is
+  useful when you remap the colors for your display (for example by
+  changing the color associated with _\bc_\bo_\bl_\bo_\br_\b2 for your xterm), since color
+  names may then lose their normal meaning.
+
+  If your terminal does not support color, it is still possible change
+  the video attributes through the use of the ``mono'' command:
+
+  Usage: mono _\b<_\bo_\bb_\bj_\be_\bc_\bt_\b> _\b<_\ba_\bt_\bt_\br_\bi_\bb_\bu_\bt_\be_\b> [ _\br_\be_\bg_\be_\bx_\bp ]
+  Usage: mono index _\ba_\bt_\bt_\br_\bi_\bb_\bu_\bt_\be _\bp_\ba_\bt_\bt_\be_\br_\bn
+  Usage: unmono index _\bp_\ba_\bt_\bt_\be_\br_\bn [ _\bp_\ba_\bt_\bt_\be_\br_\bn ...  ]
+
+  where _\ba_\bt_\bt_\br_\bi_\bb_\bu_\bt_\be is one of the following:
+
+  ·  none
+
+  ·  bold
+
+  ·  underline
+
+  ·  reverse
+
+  ·  standout
+
+  3\b3.\b.8\b8.\b.  I\bIg\bgn\bno\bor\bri\bin\bng\bg (\b(w\bwe\bee\bed\bdi\bin\bng\bg)\b) u\bun\bnw\bwa\ban\bnt\bte\bed\bd m\bme\bes\bss\bsa\bag\bge\be h\bhe\bea\bad\bde\ber\brs\bs
+
+  Usage: [un]ignore _\bp_\ba_\bt_\bt_\be_\br_\bn [ _\bp_\ba_\bt_\bt_\be_\br_\bn ... ]
+
+  Messages often have many header fields added by automatic processing
+  systems, or which may not seem useful to display on the screen.  This
+  command allows you to specify header fields which you don't normally
+  want to see.
+
+  You do not need to specify the full header field name.  For example,
+  ``ignore content-'' will ignore all header fields that begin with the
+  pattern ``content-''. ``ignore *'' will ignore all headers.
+
+  To remove a previously added token from the list, use the ``unignore''
+  command.  The ``unignore'' command will make Mutt display headers with
+  the given pattern.  For example, if you do ``ignore x-'' it is
+  possible to ``unignore x-mailer''.
+
+  ``unignore *'' will remove all tokens from the ignore list.
+
+  For example:
+
+       # Sven's draconian header weeding
+       ignore *
+       unignore from date subject to cc
+       unignore organization organisation x-mailer: x-newsreader: x-mailing-list:
+       unignore posted-to:
+
+  3\b3.\b.9\b9.\b.  A\bAl\blt\bte\ber\brn\bna\bat\bti\biv\bve\be a\bad\bdd\bdr\bre\bes\bss\bse\bes\bs
+
+  Usage: [un]alternates _\br_\be_\bg_\be_\bx_\bp [ _\br_\be_\bg_\be_\bx_\bp ... ]
+
+  With various functions, mutt will treat messages differently,
+  depending on whether you sent them or whether you received them from
+  someone else.  For instance, when replying to a message that you sent
+  to a different party, mutt will automatically suggest to send the
+  response to the original message's recipients -- responding to
+  yourself won't make much sense in many cases.  (See ``$reply_to''.)
+
+  Many users receive e-mail under a number of different addresses. To
+  fully use mutt's features here, the program must be able to recognize
+  what e-mail addresses you receive mail under. That's the purpose of
+  the alternates command: It takes a list of regular expressions, each
+  of which can identify an address under which you receive e-mail.
+
+  To remove a regular expression from this list, use the unalternates
+  command.
+
+  3\b3.\b.1\b10\b0.\b.  M\bMa\bai\bil\bli\bin\bng\bg l\bli\bis\bst\bts\bs
+
+  Usage: [un]lists _\br_\be_\bg_\be_\bx_\bp [ _\br_\be_\bg_\be_\bx_\bp ... ]
+  Usage: [un]subscribe _\br_\be_\bg_\be_\bx_\bp [ _\br_\be_\bg_\be_\bx_\bp ... ]
+
+  Mutt has a few nice features for ``handling mailing lists''.  In order
+  to take advantage of them, you must specify which addresses belong to
+  mailing lists, and which mailing lists you are subscribed to.  Once
+  you have done this, the ``list-reply'' function will work for all
+  known lists.  Additionally, when you send a message to a subscribed
+  list, mutt will add a Mail-Followup-To header to tell other users'
+  mail user agents not to send copies of replies to your personal
+  address.   Note that the Mail-Followup-To header is a non-standard
+  extension which is not supported by all mail user agents.  Adding it
+  is not bullet-proof against receiving personal CCs of list messages.
+  Also note that the generation of the Mail-Followup-To header is
+  controlled by the ``$followup_to'' configuration variable.
+
+  More precisely, Mutt maintains lists of patterns for the addresses of
+  known and subscribed mailing lists.  Every subscribed mailing list is
+  known. To mark a mailing list as known, use the ``lists'' command.  To
+  mark it as subscribed, use ``subscribe''.
+
+  You can use regular expressions with both commands.  To mark all
+  messages sent to a specific bug report's address on mutt's bug
+  tracking system as list mail, for instance, you could say ``subscribe
+  [0-9]*@bugs.guug.de''.  Often, it's sufficient to just give a portion
+  of the list's e-mail address.
+
+  Specify as much of the address as you need to to remove ambiguity.
+  For example, if you've subscribed to the Mutt mailing list, you will
+  receive mail addresssed to _\bm_\bu_\bt_\bt_\b-_\bu_\bs_\be_\br_\bs_\b@_\bm_\bu_\bt_\bt_\b._\bo_\br_\bg.  So, to tell Mutt that
+  this is a mailing list, you could add ``lists mutt-users'' to your
+  initialization file.  To tell mutt that you are subscribed to it, add
+  ``subscribe mutt-users'' to your initialization file instead.  If you
+  also happen to get mail from someone whose address is _\bm_\bu_\bt_\bt_\b-
+  _\bu_\bs_\be_\br_\bs_\b@_\be_\bx_\ba_\bm_\bp_\bl_\be_\b._\bc_\bo_\bm, you could use ``lists mutt-users@mutt.org'' or
+  ``subscribe mutt-users@mutt.org'' to match only mail from the actual
+  list.
+
+  The ``unlists'' command is used to remove a token from the list of
+  known and subscribed mailing-lists. Use ``unlists *'' to remove all
+  tokens.
+
+  To remove a mailing list from the list of subscribed mailing lists,
+  but keep it on the list of known mailing lists, use ``unsubscribe''.
+
+  3\b3.\b.1\b11\b1.\b.  U\bUs\bsi\bin\bng\bg M\bMu\bul\blt\bti\bip\bpl\ble\be s\bsp\bpo\boo\bol\bl m\bma\bai\bil\blb\bbo\box\bxe\bes\bs
+
+  Usage: mbox-hook [!]_\bp_\ba_\bt_\bt_\be_\br_\bn _\bm_\ba_\bi_\bl_\bb_\bo_\bx
+
+  This command is used to move read messages from a specified mailbox to
+  a different mailbox automatically when you quit or change folders.
+  _\bp_\ba_\bt_\bt_\be_\br_\bn is a regular expression specifying the mailbox to treat as a
+  ``spool'' mailbox and _\bm_\ba_\bi_\bl_\bb_\bo_\bx specifies where mail should be saved
+  when read.
+
+  Unlike some of the other _\bh_\bo_\bo_\bk commands, only the _\bf_\bi_\br_\bs_\bt matching
+  pattern is used (it is not possible to save read mail in more than a
+  single mailbox).
+
+  3\b3.\b.1\b12\b2.\b.  D\bDe\bef\bfi\bin\bni\bin\bng\bg m\bma\bai\bil\blb\bbo\box\bxe\bes\bs w\bwh\bhi\bic\bch\bh r\bre\bec\bce\bei\biv\bve\be m\bma\bai\bil\bl
+
+  Usage: [un]mailboxes [!]_\bf_\bi_\bl_\be_\bn_\ba_\bm_\be [ _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be ... ]
+
+  This command specifies folders which can receive mail and which will
+  be checked for new messages.  By default, the main menu status bar
+  displays how many of these folders have new messages.
+
+  When changing folders, pressing _\bs_\bp_\ba_\bc_\be will cycle through folders with
+  new mail.
+
+  Pressing TAB in the directory browser will bring up a menu showing the
+  files specified by the mailboxes command, and indicate which contain
+  new messages.  Mutt will automatically enter this mode when invoked
+  from the command line with the -y option.
+
+  The ``unmailboxes'' command is used to remove a token from the list of
+  folders which receive mail. Use ``unmailboxes *'' to remove all
+  tokens.
+
+  N\bNo\bot\bte\be:\b: new mail is detected by comparing the last modification time to
+  the last access time.  Utilities like biff or frm or any other program
+  which accesses the mailbox might cause Mutt to never detect new mail
+  for that mailbox if they do not properly reset the access time.
+  Backup tools are another common reason for updated access times.
+
+  N\bNo\bot\bte\be:\b: the filenames in the mailboxes command are resolved when the
+  command is executed, so if these names contain ``shortcut characters''
+  (such as ``='' and ``!''), any variable definition that affect these
+  characters (like ``$folder'' and ``$spoolfile'') should be executed
+  before the mailboxes command.
+
+  3\b3.\b.1\b13\b3.\b.  U\bUs\bse\ber\br d\bde\bef\bfi\bin\bne\bed\bd h\bhe\bea\bad\bde\ber\brs\bs
+
+  Usage:
+  my_hdr _\bs_\bt_\br_\bi_\bn_\bg
+  unmy_hdr _\bf_\bi_\be_\bl_\bd [ _\bf_\bi_\be_\bl_\bd ... ]
+
+  The ``my_hdr'' command allows you to create your own header fields
+  which will be added to every message you send.
+
+  For example, if you would like to add an ``Organization:'' header
+  field to all of your outgoing messages, you can put the command
+
+       my_hdr Organization: A Really Big Company, Anytown, USA
+
+  in your .muttrc.
+
+  N\bNo\bot\bte\be:\b:  space characters are _\bn_\bo_\bt allowed between the keyword and the
+  colon (``:'').  The standard for electronic mail (RFC822) says that
+  space is illegal there, so Mutt enforces the rule.
+
+  If you would like to add a header field to a single message, you
+  should either set the ``edit_headers'' variable, or use the _\be_\bd_\bi_\bt_\b-
+  _\bh_\be_\ba_\bd_\be_\br_\bs function (default: ``E'') in the send-menu so that you can
+  edit the header of your message along with the body.
+
+  To remove user defined header fields, use the ``unmy_hdr'' command.
+  You may specify an asterisk (``*'') to remove all header fields, or
+  the fields to remove.  For example, to remove all ``To'' and ``Cc''
+  header fields, you could use:
+
+       unmy_hdr to cc
+
+  3\b3.\b.1\b14\b4.\b.  D\bDe\bef\bfi\bin\bni\bin\bng\bg t\bth\bhe\be o\bor\brd\bde\ber\br o\bof\bf h\bhe\bea\bad\bde\ber\brs\bs w\bwh\bhe\ben\bn v\bvi\bie\bew\bwi\bin\bng\bg m\bme\bes\bss\bsa\bag\bge\bes\bs
+
+  Usage: hdr_order _\bh_\be_\ba_\bd_\be_\br_\b1 _\bh_\be_\ba_\bd_\be_\br_\b2 _\bh_\be_\ba_\bd_\be_\br_\b3
+
+  With this command, you can specify an order in which mutt will attempt
+  to present headers to you when viewing messages.
+
+  ``unhdr_order *'' will clear all previous headers from the order list,
+  thus removing the header order effects set by the system-wide startup
+  file.
+
+       hdr_order From Date: From: To: Cc: Subject:
+
+  3\b3.\b.1\b15\b5.\b.  S\bSp\bpe\bec\bci\bif\bfy\by d\bde\bef\bfa\bau\bul\blt\bt s\bsa\bav\bve\be f\bfi\bil\ble\ben\bna\bam\bme\be
+
+  Usage: save-hook [!]_\bp_\ba_\bt_\bt_\be_\br_\bn _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
+
+  This command is used to override the default filename used when saving
+  messages.  _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be will be used as the default filename if the
+  message is _\bF_\br_\bo_\bm_\b: an address matching _\br_\be_\bg_\be_\bx_\bp or if you are the author
+  and the message is addressed _\bt_\bo_\b: something matching _\br_\be_\bg_\be_\bx_\bp.
+
+  See ``Message Matching in Hooks'' for information on the exact format
+  of _\bp_\ba_\bt_\bt_\be_\br_\bn.
+
+  Examples:
+
+       save-hook me@(turing\\.)?cs\\.hmc\\.edu$ +elkins
+       save-hook aol\\.com$ +spam
+
+  Also see the ``fcc-save-hook'' command.
+
+  3\b3.\b.1\b16\b6.\b.  S\bSp\bpe\bec\bci\bif\bfy\by d\bde\bef\bfa\bau\bul\blt\bt F\bFc\bcc\bc:\b: m\bma\bai\bil\blb\bbo\box\bx w\bwh\bhe\ben\bn c\bco\bom\bmp\bpo\bos\bsi\bin\bng\bg
+
+  Usage: fcc-hook [!]_\bp_\ba_\bt_\bt_\be_\br_\bn _\bm_\ba_\bi_\bl_\bb_\bo_\bx
+
+  This command is used to save outgoing mail in a mailbox other than
+  ``$record''.  Mutt searches the initial list of message recipients for
+  the first matching _\br_\be_\bg_\be_\bx_\bp and uses _\bm_\ba_\bi_\bl_\bb_\bo_\bx as the default Fcc:
+  mailbox.  If no match is found the message will be saved to
+  ``$record'' mailbox.
+
+  See ``Message Matching in Hooks'' for information on the exact format
+  of _\bp_\ba_\bt_\bt_\be_\br_\bn.
+
+  Example: fcc-hook aol.com$ +spammers
+
+  The above will save a copy of all messages going to the aol.com domain
+  to the `+spammers' mailbox by default.  Also see the ``fcc-save-hook''
+  command.
+
+  3\b3.\b.1\b17\b7.\b.  S\bSp\bpe\bec\bci\bif\bfy\by d\bde\bef\bfa\bau\bul\blt\bt s\bsa\bav\bve\be f\bfi\bil\ble\ben\bna\bam\bme\be a\ban\bnd\bd d\bde\bef\bfa\bau\bul\blt\bt F\bFc\bcc\bc:\b: m\bma\bai\bil\blb\bbo\box\bx a\bat\bt o\bon\bnc\bce\be
+
+  Usage: fcc-save-hook [!]_\bp_\ba_\bt_\bt_\be_\br_\bn _\bm_\ba_\bi_\bl_\bb_\bo_\bx
+
+  This command is a shortcut, equivalent to doing both a ``fcc-hook''
+  and a ``save-hook'' with its arguments.
+
+  3\b3.\b.1\b18\b8.\b.  C\bCh\bha\ban\bng\bge\be s\bse\bet\btt\bti\bin\bng\bgs\bs b\bba\bas\bse\bed\bd u\bup\bpo\bon\bn m\bme\bes\bss\bsa\bag\bge\be r\bre\bec\bci\bip\bpi\bie\ben\bnt\bts\bs
+
+  Usage: reply-hook [!]_\bp_\ba_\bt_\bt_\be_\br_\bn _\bc_\bo_\bm_\bm_\ba_\bn_\bd
+  Usage: send-hook [!]_\bp_\ba_\bt_\bt_\be_\br_\bn _\bc_\bo_\bm_\bm_\ba_\bn_\bd
+
+  These commands can be used to execute arbitrary configuration commands
+  based upon recipients of the message.  _\bp_\ba_\bt_\bt_\be_\br_\bn is a regular expression
+  matching the desired address.  _\bc_\bo_\bm_\bm_\ba_\bn_\bd is executed when _\br_\be_\bg_\be_\bx_\bp matches
+  recipients of the message.
+
+  reply-hook is matched against the message you are _\br_\be_\bp_\bl_\by_\bi_\bn_\bg t\bto\bo, instead
+  of the message you are _\bs_\be_\bn_\bd_\bi_\bn_\bg.  send-hook is matched against all
+  messages, both _\bn_\be_\bw and _\br_\be_\bp_\bl_\bi_\be_\bs.  N\bNo\bot\bte\be:\b: reply-hooks are matched b\bbe\bef\bfo\bor\bre\be
+  the send-hook, r\bre\beg\bga\bar\brd\bdl\ble\bes\bss\bs of the order specified in the users's
+  configuration file.
+
+  For each type of send-hook or reply-hook, When multiple matches occur,
+  commands are executed in the order they are specified in the muttrc
+  (for that type of hook).
+
+  See ``Message Matching in Hooks'' for information on the exact format
+  of _\bp_\ba_\bt_\bt_\be_\br_\bn.
+
+  Example: send-hook mutt "set mime_forward signature=''"
+
+  Another typical use for this command is to change the values of the
+  ``$attribution'', ``$signature'' and ``$locale'' variables in order to
+  change the language of the attributions and signatures based upon the
+  recipients.
+
+  N\bNo\bot\bte\be:\b: the send-hook's are only executed ONCE after getting the initial
+  list of recipients.  Adding a recipient after replying or editing the
+  message will NOT cause any send-hook to be executed.  Also note that
+  my_hdr commands which modify recipient headers, or the message's
+  subject, don't have any effect on the current message when executed
+  from a send-hook.
+
+  3\b3.\b.1\b19\b9.\b.  C\bCh\bha\ban\bng\bge\be s\bse\bet\btt\bti\bin\bng\bgs\bs b\bbe\bef\bfo\bor\bre\be f\bfo\bor\brm\bma\bat\btt\bti\bin\bng\bg a\ba m\bme\bes\bss\bsa\bag\bge\be
+
+  Usage: message-hook [!]_\bp_\ba_\bt_\bt_\be_\br_\bn _\bc_\bo_\bm_\bm_\ba_\bn_\bd
+
+  This command can be used to execute arbitrary configuration commands
+  before viewing or formatting a message based upon information about
+  the message.  _\bc_\bo_\bm_\bm_\ba_\bn_\bd is executed if the _\bp_\ba_\bt_\bt_\be_\br_\bn matches the message
+  to be displayed. When multiple matches occur, commands are executed in
+  the order they are specified in the muttrc.
+
+  See ``Message Matching in Hooks'' for information on the exact format
+  of _\bp_\ba_\bt_\bt_\be_\br_\bn.
+
+  Example:
+
+       message-hook ~A 'set pager=builtin'
+       message-hook '~f freshmeat-news' 'set pager="less \"+/^  subject: .*\""'
+
+  3\b3.\b.2\b20\b0.\b.  C\bCh\bho\boo\bos\bsi\bin\bng\bg t\bth\bhe\be c\bcr\bry\byp\bpt\bto\bog\bgr\bra\bap\bph\bhi\bic\bc k\bke\bey\by o\bof\bf t\bth\bhe\be r\bre\bec\bci\bip\bpi\bie\ben\bnt\bt
+
+  Usage: crypt-hook _\bp_\ba_\bt_\bt_\be_\br_\bn _\bk_\be_\by_\bi_\bd
+
+  When encrypting messages with PGP or OpenSSL, you may want to
+  associate a certain key with a given e-mail address automatically,
+  either because the recipient's public key can't be deduced from the
+  destination address, or because, for some reasons, you need to
+  override the key Mutt would normally use.  The crypt-hook command
+  provides a method by which you can specify the ID of the public key to
+  be used when encrypting messages to a certain recipient.
+
+  The meaning of "key id" is to be taken broadly in this context:  You
+  can either put a numerical key ID here, an e-mail address, or even
+  just a real name.
+
+  3\b3.\b.2\b21\b1.\b.  A\bAd\bdd\bdi\bin\bng\bg k\bke\bey\by s\bse\beq\bqu\bue\ben\bnc\bce\bes\bs t\bto\bo t\bth\bhe\be k\bke\bey\byb\bbo\boa\bar\brd\bd b\bbu\buf\bff\bfe\ber\br
+
+  Usage: push _\bs_\bt_\br_\bi_\bn_\bg
+
+  This command adds the named string to the keyboard buffer. The string
+  may contain control characters, key names and function names like the
+  sequence string in the ``macro'' command. You may use it to
+  automatically run a sequence of commands at startup, or when entering
+  certain folders.
+
+  3\b3.\b.2\b22\b2.\b.  E\bEx\bxe\bec\bcu\but\bti\bin\bng\bg f\bfu\bun\bnc\bct\bti\bio\bon\bns\bs
+
+  Usage: exec _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn [ _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn ... ]
+
+  This command can be used to execute any function. Functions are listed
+  in the ``function reference''.  ``exec function'' is equivalent to
+  ``push <function>''.
+
+  3\b3.\b.2\b23\b3.\b.  M\bMe\bes\bss\bsa\bag\bge\be S\bSc\bco\bor\bri\bin\bng\bg
+
+  Usage: score _\bp_\ba_\bt_\bt_\be_\br_\bn _\bv_\ba_\bl_\bu_\be
+  Usage: unscore _\bp_\ba_\bt_\bt_\be_\br_\bn [ _\bp_\ba_\bt_\bt_\be_\br_\bn ... ]
+
+  The score commands adds _\bv_\ba_\bl_\bu_\be to a message's score if _\bp_\ba_\bt_\bt_\be_\br_\bn matches
+  it.  _\bp_\ba_\bt_\bt_\be_\br_\bn is a string in the format described in the ``patterns''
+  section (note: For efficiency reasons, patterns which scan information
+  not available in the index, such as ~b, ~B or ~h, may not be used).
+  _\bv_\ba_\bl_\bu_\be is a positive or negative integer.  A message's final score is
+  the sum total of all matching score entries.  However, you may
+  optionally prefix _\bv_\ba_\bl_\bu_\be with an equal sign (=) to cause evaluation to
+  stop at a particular entry if there is a match.  Negative final scores
+  are rounded up to 0.
+
+  The unscore command removes score entries from the list.  You m\bmu\bus\bst\bt
+  specify the same pattern specified in the score command for it to be
+  removed.  The pattern ``*'' is a special token which means to clear
+  the list of all score entries.
+
+  3\b3.\b.2\b24\b4.\b.  S\bSe\bet\btt\bti\bin\bng\bg v\bva\bar\bri\bia\bab\bbl\ble\bes\bs
+
+  Usage: set [no|inv]_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be[=_\bv_\ba_\bl_\bu_\be] [ _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be ... ]
+  Usage: toggle _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be [_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be ... ]
+  Usage: unset _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be [_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be ... ]
+  Usage: reset _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be [_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be ... ]
+
+  This command is used to set (and unset) ``configuration variables''.
+  There are four basic types of variables: boolean, number, string and
+  quadoption.  _\bb_\bo_\bo_\bl_\be_\ba_\bn variables can be _\bs_\be_\bt (true) or _\bu_\bn_\bs_\be_\bt (false).
+  _\bn_\bu_\bm_\bb_\be_\br variables can be assigned a positive integer value.
+
+  _\bs_\bt_\br_\bi_\bn_\bg variables consist of any number of printable characters.
+  _\bs_\bt_\br_\bi_\bn_\bg_\bs must be enclosed in quotes if they contain spaces or tabs.
+  You may also use the ``C'' escape sequences \\b\n\bn and \\b\t\bt for newline and
+  tab, respectively.
+
+  _\bq_\bu_\ba_\bd_\bo_\bp_\bt_\bi_\bo_\bn variables are used to control whether or not to be prompted
+  for certain actions, or to specify a default action.  A value of _\by_\be_\bs
+  will cause the action to be carried out automatically as if you had
+  answered yes to the question.  Similarly, a value of _\bn_\bo will cause the
+  the action to be carried out as if you had answered ``no.''  A value
+  of _\ba_\bs_\bk_\b-_\by_\be_\bs will cause a prompt with a default answer of ``yes'' and
+  _\ba_\bs_\bk_\b-_\bn_\bo will provide a default answer of ``no.''
+
+  Prefixing a variable with ``no'' will unset it.  Example: set
+  noaskbcc.
+
+  For _\bb_\bo_\bo_\bl_\be_\ba_\bn variables, you may optionally prefix the variable name
+  with inv to toggle the value (on or off).  This is useful when writing
+  macros.  Example: set invsmart_wrap.
+
+  The toggle command automatically prepends the inv prefix to all
+  specified variables.
+
+  The unset command automatically prepends the no prefix to all
+  specified variables.
+
+  Using the enter-command function in the _\bi_\bn_\bd_\be_\bx menu, you can query the
+  value of a variable by prefixing the name of the variable with a
+  question mark:
+
+       set ?allow_8bit
+
+  The question mark is actually only required for boolean and quadoption
+  variables.
+
+  The reset command resets all given variables to the compile time
+  defaults (hopefully mentioned in this manual). If you use the command
+  set and prefix the variable with ``&'' this has the same behavior as
+  the reset command.
+
+  With the reset command there exists the special variable ``all'',
+  which allows you to reset all variables to their system defaults.
+
+  3\b3.\b.2\b25\b5.\b.  R\bRe\bea\bad\bdi\bin\bng\bg i\bin\bni\bit\bti\bia\bal\bli\biz\bza\bat\bti\bio\bon\bn c\bco\bom\bmm\bma\ban\bnd\bds\bs f\bfr\bro\bom\bm a\ban\bno\bot\bth\bhe\ber\br f\bfi\bil\ble\be
+
+  Usage: source _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
+
+  This command allows the inclusion of initialization commands from
+  other files.  For example, I place all of my aliases in
+  ~/.mail_aliases so that I can make my ~/.muttrc readable and keep my
+  aliases private.
+
+  If the filename begins with a tilde (``~''), it will be expanded to
+  the path of your home directory.
+
+  If the filename ends with a vertical bar (|), then _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be is
+  considered to be an executable program from which to read input (eg.
+  source ~bin/myscript|/).
+
+  3\b3.\b.2\b26\b6.\b.  R\bRe\bem\bmo\bov\bvi\bin\bng\bg h\bho\boo\bok\bks\bs
+
+  Usage: unhook [ * | _\bh_\bo_\bo_\bk_\b-_\bt_\by_\bp_\be ]
+
+  This command permits you to flush hooks you have previously defined.
+  You can either remove all hooks by giving the ``*'' character as an
+  argument, or you can remove all hooks of a specific type by saying
+  something like unhook send-hook.
+
+  4\b4.\b.  A\bAd\bdv\bva\ban\bnc\bce\bed\bd U\bUs\bsa\bag\bge\be
+
+  4\b4.\b.1\b1.\b.  R\bRe\beg\bgu\bul\bla\bar\br E\bEx\bxp\bpr\bre\bes\bss\bsi\bio\bon\bns\bs
+
+  All string patterns in Mutt including those in more complex
+  ``patterns'' must be specified using regular expressions (regexp) in
+  the ``POSIX extended'' syntax (which is more or less the syntax used
+  by egrep and GNU awk).  For your convenience, we have included below a
+  brief description of this syntax.
+
+  The search is case sensitive if the pattern contains at least one
+  upper case letter, and case insensitive otherwise. Note that ``\''
+  must be quoted if used for a regular expression in an initialization
+  command: ``\\''.
+
+  A regular expression is a pattern that describes a set of strings.
+  Regular expressions are constructed analogously to arithmetic
+  expressions, by using various operators to combine smaller
+  expressions.
+
+  Note that the regular expression can be enclosed/delimited by either "
+  or ' which is useful if the regular expression includes a white-space
+  character.  See ``Syntax of Initialization Files'' for more
+  information on " and ' delimiter processing.  To match a literal " or
+  ' you must preface it with \ (backslash).
+
+  The fundamental building blocks are the regular expressions that match
+  a single character.  Most characters, including all letters and
+  digits, are regular expressions that match themselves.  Any
+  metacharacter with special meaning may be quoted by preceding it with
+  a backslash.
+
+  The period ``.'' matches any single character.  The caret ``^'' and
+  the dollar sign ``$'' are metacharacters that respectively match the
+  empty string at the beginning and end of a line.
+
+  A list of characters enclosed by ``['' and ``]'' matches any single
+  character in that list; if the first character of the list is a caret
+  ``^'' then it matches any character n\bno\bot\bt in the list.  For example, the
+  regular expression [\b[0\b01\b12\b23\b34\b45\b56\b67\b78\b89\b9]\b] matches any single digit.  A range of
+  ASCII characters may be specified by giving the first and last
+  characters, separated by a hyphen ``-''.  Most metacharacters lose
+  their special meaning inside lists.  To include a literal ``]'' place
+  it first in the list.  Similarly, to include a literal ``^'' place it
+  anywhere but first.  Finally, to include a literal hyphen ``-'' place
+  it last.
+
+  Certain named classes of characters are predefined.  Character classes
+  consist of ``[:'', a keyword denoting the class, and ``:]''.  The
+  following classes are defined by the POSIX standard:
+
+     [\b[:\b:a\bal\bln\bnu\bum\bm:\b:]\b]
+        Alphanumeric characters.
+
+     [\b[:\b:a\bal\blp\bph\bha\ba:\b:]\b]
+        Alphabetic characters.
+
+     [\b[:\b:b\bbl\bla\ban\bnk\bk:\b:]\b]
+        Space or tab characters.
+
+     [\b[:\b:c\bcn\bnt\btr\brl\bl:\b:]\b]
+        Control characters.
+
+     [\b[:\b:d\bdi\big\bgi\bit\bt:\b:]\b]
+        Numeric characters.
+     [\b[:\b:g\bgr\bra\bap\bph\bh:\b:]\b]
+        Characters that are both printable and visible.  (A space is
+        printable, but not visible, while an ``a'' is both.)
+
+     [\b[:\b:l\blo\bow\bwe\ber\br:\b:]\b]
+        Lower-case alphabetic characters.
+
+     [\b[:\b:p\bpr\bri\bin\bnt\bt:\b:]\b]
+        Printable characters (characters that are not control
+        characters.)
+
+     [\b[:\b:p\bpu\bun\bnc\bct\bt:\b:]\b]
+        Punctuation characters (characters that are not letter, digits,
+        control characters, or space characters).
+
+     [\b[:\b:s\bsp\bpa\bac\bce\be:\b:]\b]
+        Space characters (such as space, tab and formfeed, to name a
+        few).
+
+     [\b[:\b:u\bup\bpp\bpe\ber\br:\b:]\b]
+        Upper-case alphabetic characters.
+
+     [\b[:\b:x\bxd\bdi\big\bgi\bit\bt:\b:]\b]
+        Characters that are hexadecimal digits.
+
+  A character class is only valid in a regular expression inside the
+  brackets of a character list.  Note that the brackets in these class
+  names are part of the symbolic names, and must be included in addition
+  to the brackets delimiting the bracket list.  For example, [\b[[\b[:\b:d\bdi\big\bgi\bit\bt:\b:]\b]]\b]
+  is equivalent to [\b[0\b0-\b-9\b9]\b].
+
+  Two additional special sequences can appear in character lists.  These
+  apply to non-ASCII character sets, which can have single symbols
+  (called collating elements) that are represented with more than one
+  character, as well as several characters that are equivalent for
+  collating or sorting purposes:
+
+     C\bCo\bol\bll\bla\bat\bti\bin\bng\bg S\bSy\bym\bmb\bbo\bol\bls\bs
+        A collating symbol is a multi-character collating element
+        enclosed in ``[.'' and ``.]''.  For example, if ``ch'' is a
+        collating element, then [\b[[\b[.\b.c\bch\bh.\b.]\b]]\b] is a regexp that matches this
+        collating element, while [\b[c\bch\bh]\b] is a regexp that matches either
+        ``c'' or ``h''.
+
+     E\bEq\bqu\bui\biv\bva\bal\ble\ben\bnc\bce\be C\bCl\bla\bas\bss\bse\bes\bs
+        An equivalence class is a locale-specific name for a list of
+        characters that are equivalent. The name is enclosed in ``[=''
+        and ``=]''.  For example, the name ``e'' might be used to
+        represent all of ``è'' ``é'' and ``e''.  In this case, [\b[[\b[=\b=e\be=\b=]\b]]\b]
+        is a regexp that matches any of ``è'', ``é'' and ``e''.
+
+  A regular expression matching a single character may be followed by
+  one of several repetition operators:
+
+     ?\b?  The preceding item is optional and matched at most once.
+
+     *\b*  The preceding item will be matched zero or more times.
+
+     +\b+  The preceding item will be matched one or more times.
+
+     {\b{n\bn}\b}
+        The preceding item is matched exactly _\bn times.
+
+     {\b{n\bn,\b,}\b}
+        The preceding item is matched _\bn or more times.
+
+     {\b{,\b,m\bm}\b}
+        The preceding item is matched at most _\bm times.
+
+     {\b{n\bn,\b,m\bm}\b}
+        The preceding item is matched at least _\bn times, but no more than
+        _\bm times.
+
+  Two regular expressions may be concatenated; the resulting regular
+  expression matches any string formed by concatenating two substrings
+  that respectively match the concatenated subexpressions.
+
+  Two regular expressions may be joined by the infix operator ``|''; the
+  resulting regular expression matches any string matching either
+  subexpression.
+
+  Repetition takes precedence over concatenation, which in turn takes
+  precedence over alternation.  A whole subexpression may be enclosed in
+  parentheses to override these precedence rules.
+
+  N\bNo\bot\bte\be:\b: If you compile Mutt with the GNU _\br_\bx package, the following
+  operators may also be used in regular expressions:
+
+     \\b\\\b\y\by
+        Matches the empty string at either the beginning or the end of a
+        word.
+
+     \\b\\\b\B\bB
+        Matches the empty string within a word.
+
+     \\b\\\b\<\b<
+        Matches the empty string at the beginning of a word.
+
+     \\b\\\b\>\b>
+        Matches the empty string at the end of a word.
+
+     \\b\\\b\w\bw
+        Matches any word-constituent character (letter, digit, or
+        underscore).
+
+     \\b\\\b\W\bW
+        Matches any character that is not word-constituent.
+
+     \\b\\\b\`\b`
+        Matches the empty string at the beginning of a buffer (string).
+
+     \\b\\\b\'\b'
+        Matches the empty string at the end of a buffer.
+
+  Please note however that these operators are not defined by POSIX, so
+  they may or may not be available in stock libraries on various
+  systems.
+
+  4\b4.\b.2\b2.\b.  P\bPa\bat\btt\bte\ber\brn\bns\bs
+
+  Many of Mutt's commands allow you to specify a pattern to match
+  (limit, tag-pattern, delete-pattern, etc.).  There are several ways to
+  select messages:
+
+  ~A              all messages
+  ~b EXPR         messages which contain EXPR in the message body
+  ~B EXPR         messages which contain EXPR in the whole message
+  ~c USER         messages carbon-copied to USER
+  ~C EXPR         message is either to: or cc: EXPR
+  ~D              deleted messages
+  ~d [MIN]-[MAX]  messages with ``date-sent'' in a Date range
+  ~E              expired messages
+  ~e EXPR         message which contains EXPR in the ``Sender'' field
+  ~F              flagged messages
+  ~f USER         messages originating from USER
+  ~g              cryptographically signed messages
+  ~G              cryptographically encrypted messages
+  ~h EXPR         messages which contain EXPR in the message header
+  ~k              message contains PGP key material
+  ~i ID           message which match ID in the ``Message-ID'' field
+  ~L EXPR         message is either originated or received by EXPR
+  ~l              message is addressed to a known mailing list
+  ~m [MIN]-[MAX]  message in the range MIN to MAX *)
+  ~n [MIN]-[MAX]  messages with a score in the range MIN to MAX *)
+  ~N              new messages
+  ~O              old messages
+  ~p              message is addressed to you (consults alternates)
+  ~P              message is from you (consults alternates)
+  ~Q              messages which have been replied to
+  ~R              read messages
+  ~r [MIN]-[MAX]  messages with ``date-received'' in a Date range
+  ~S              superseded messages
+  ~s SUBJECT      messages having SUBJECT in the ``Subject'' field.
+  ~T              tagged messages
+  ~t USER         messages addressed to USER
+  ~U              unread messages
+  ~v              message is part of a collapsed thread.
+  ~V              cryptographically verified messages
+  ~x EXPR         messages which contain EXPR in the `References' field
+  ~y EXPR         messages which contain EXPR in the `X-Label' field
+  ~z [MIN]-[MAX]  messages with a size in the range MIN to MAX *)
+  ~=              duplicated messages (see $duplicate_threads)
+
+  Where EXPR, USER, ID, and SUBJECT are ``regular expressions''.
+  Special attention has to be made when using regular expressions inside
+  of patterns.  Specifically, Mutt's parser for these patterns will
+  strip one level of backslash (\), which is normally used for quoting.
+  If it is your intention to use a backslash in the regular expression,
+  you will need to use two backslashes instead (\\).
+
+  *) The forms <[MAX], >[MIN], [MIN]- and -[MAX] are allowed, too.
+
+  4\b4.\b.2\b2.\b.1\b1.\b.  P\bPa\bat\btt\bte\ber\brn\bn M\bMo\bod\bdi\bif\bfi\bie\ber\br
+
+  Note that patterns matching 'lists' of addresses (notably c,C,p,P and
+  t) match if there is at least one match in the whole list. If you want
+  to make sure that all elements of that list match, you need to prefix
+  your pattern with ^.  This example matches all mails which only has
+  recipients from Germany.
+
+       ^~C \.de$
+
+  4\b4.\b.2\b2.\b.2\b2.\b.  C\bCo\bom\bmp\bpl\ble\bex\bx P\bPa\bat\btt\bte\ber\brn\bns\bs
+
+  Logical AND is performed by specifying more than one criterion.  For
+  example:
+
+       ~t mutt ~f elkins
+
+  would select messages which contain the word ``mutt'' in the list of
+  recipients a\ban\bnd\bd that have the word ``elkins'' in the ``From'' header
+  field.
+
+  Mutt also recognizes the following operators to create more complex
+  search patterns:
+
+  ·  ! -- logical NOT operator
+
+  ·  | -- logical OR operator
+
+  ·  () -- logical grouping operator
+
+  Here is an example illustrating a complex search pattern.  This
+  pattern will select all messages which do not contain ``mutt'' in the
+  ``To'' or ``Cc'' field and which are from ``elkins''.
+
+       !(~t mutt|~c mutt) ~f elkins
+
+  Here is an example using white space in the regular expression (note
+  the ' and " delimiters).  For this to match, the mail's subject must
+  match the ``^Junk +From +Me$'' and it must be from either ``Jim
+  +Somebody'' or ``Ed +SomeoneElse'':
+
+        '~s "^Junk +From +Me$" ~f ("Jim +Somebody"|"Ed +SomeoneElse")'
+
+  Note that if a regular expression contains parenthesis, or a veritical
+  bar ("|"), you m\bmu\bus\bst\bt enclose the expression in double or single quotes
+  since those characters are also used to separate different parts of
+  Mutt's pattern language.  For example,
+
+       ~f "me@(mutt\.org|cs\.hmc\.edu)"
+
+  Without the quotes, the parenthesis would truncate the regular
+  expression to simply _\bm_\be_\b@, which is probably not what you want.
+
+  4\b4.\b.2\b2.\b.3\b3.\b.  S\bSe\bea\bar\brc\bch\bhi\bin\bng\bg b\bby\by D\bDa\bat\bte\be
+
+  Mutt supports two types of dates, _\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be and _\br_\be_\bl_\ba_\bt_\bi_\bv_\be.
+
+  A\bAb\bbs\bso\bol\blu\but\bte\be.  Dates m\bmu\bus\bst\bt be in DD/MM/YY format (month and year are
+  optional, defaulting to the current month and year).  An example of a
+  valid range of dates is:
+
+       Limit to messages matching: ~d 20/1/95-31/10
+
+  If you omit the minimum (first) date, and just specify ``-DD/MM/YY'',
+  all messages _\bb_\be_\bf_\bo_\br_\be the given date will be selected.  If you omit the
+  maximum (second) date, and specify ``DD/MM/YY-'', all messages _\ba_\bf_\bt_\be_\br
+  the given date will be selected.  If you specify a single date with no
+  dash (``-''), only messages sent on the given date will be selected.
+
+  E\bEr\brr\bro\bor\br M\bMa\bar\brg\bgi\bin\bns\bs.  You can add error margins to absolute dates.  An error
+  margin is a sign (+ or -), followed by a digit, followed by one of the
+  following units:
+
+  y       years
+  m       months
+  w       weeks
+  d       days
+
+  As a special case, you can replace the sign by a ``*'' character,
+  which is equivalent to giving identical plus and minus error margins.
+
+  Example: To select any messages two weeks around January 15, 2001,
+  you'd use the following pattern:
+
+       Limit to messages matching: ~d 15/1/2001*2w
+
+  R\bRe\bel\bla\bat\bti\biv\bve\be.  This type of date is relative to the current date, and may
+  be specified as:
+
+  ·  >_\bo_\bf_\bf_\bs_\be_\bt (messages older than _\bo_\bf_\bf_\bs_\be_\bt units)
+
+  ·  <_\bo_\bf_\bf_\bs_\be_\bt (messages newer than _\bo_\bf_\bf_\bs_\be_\bt units)
+
+  ·  =_\bo_\bf_\bf_\bs_\be_\bt (messages exactly _\bo_\bf_\bf_\bs_\be_\bt units old)
+
+  _\bo_\bf_\bf_\bs_\be_\bt is specified as a positive number with one of the following
+  units:
+
+  y       years
+  m       months
+  w       weeks
+  d       days
+
+  Example: to select messages less than 1 month old, you would use
+
+  Limit to messages matching: ~d <1m
+
+  N\bNo\bot\bte\be:\b: all dates used when searching are relative to the l\blo\boc\bca\bal\bl time
+  zone, so unless you change the setting of your ``$index_format'' to
+  include a %[...] format, these are n\bno\bot\bt the dates shown in the main
+  index.
+
+  4\b4.\b.3\b3.\b.  U\bUs\bsi\bin\bng\bg T\bTa\bag\bgs\bs
+
+  Sometimes it is desirable to perform an operation on a group of
+  messages all at once rather than one at a time.  An example might be
+  to save messages to a mailing list to a separate folder, or to delete
+  all messages with a given subject.  To tag all messages matching a
+  pattern, use the tag-pattern function, which is bound to ``shift-T''
+  by default.  Or you can select individual messages by hand using the
+  ``tag-message'' function, which is bound to ``t'' by default.  See
+  ``patterns'' for Mutt's pattern matching syntax.
+
+  Once you have tagged the desired messages, you can use the ``tag-
+  prefix'' operator, which is the ``;'' (semicolon) key by default.
+  When the ``tag-prefix'' operator is used, the n\bne\bex\bxt\bt operation will be
+  applied to all tagged messages if that operation can be used in that
+  manner.  If the ``$auto_tag'' variable is set, the next operation
+  applies to the tagged messages automatically, without requiring the
+  ``tag-prefix''.
+
+  4\b4.\b.4\b4.\b.  U\bUs\bsi\bin\bng\bg H\bHo\boo\bok\bks\bs
+
+  A _\bh_\bo_\bo_\bk is a concept borrowed from the EMACS editor which allows you to
+  execute arbitrary commands before performing some operation.  For
+  example, you may wish to tailor your configuration based upon which
+  mailbox you are reading, or to whom you are sending mail.  In the Mutt
+  world, a _\bh_\bo_\bo_\bk consists of a ``regular expression'' or ``pattern''
+  along with a configuration option/command.  See
+
+  ·  ``folder-hook''
+
+  ·  ``send-hook''
+
+  ·  ``message-hook''
+
+  ·  ``save-hook''
+
+  ·  ``mbox-hook''
+
+  ·  ``fcc-hook''
+
+  ·  ``fcc-save-hook''
+
+     for specific details on each type of _\bh_\bo_\bo_\bk available.
+
+  N\bNo\bot\bte\be:\b: if a hook changes configuration settings, these changes remain
+  effective until the end of the current mutt session. As this is
+  generally not desired, a default hook needs to be added before all
+  other hooks to restore configuration defaults. Here is an example with
+  send-hook and the my_hdr directive:
+
+       send-hook . 'unmy_hdr From:'
+       send-hook ~Cb@b.b my_hdr from: c@c.c
+
+  4\b4.\b.4\b4.\b.1\b1.\b.  M\bMe\bes\bss\bsa\bag\bge\be M\bMa\bat\btc\bch\bhi\bin\bng\bg i\bin\bn H\bHo\boo\bok\bks\bs
+
+  Hooks that act upon messages (send-hook, save-hook, fcc-hook, message-
+  hook) are evaluated in a slightly different manner.  For the other
+  types of hooks, a ``regular expression'' is sufficient.  But in
+  dealing with messages a finer grain of control is needed for matching
+  since for different purposes you want to match different criteria.
+
+  Mutt allows the use of the ``search pattern'' language for matching
+  messages in hook commands.  This works in exactly the same way as it
+  would when _\bl_\bi_\bm_\bi_\bt_\bi_\bn_\bg or _\bs_\be_\ba_\br_\bc_\bh_\bi_\bn_\bg the mailbox, except that you are
+  restricted to those operators which match information mutt extracts
+  from the header of the message (i.e.  from, to, cc, date, subject,
+  etc.).
+
+  For example, if you wanted to set your return address based upon
+  sending mail to a specific address, you could do something like:
+
+       send-hook '~t ^me@cs\.hmc\.edu$' 'my_hdr From: Mutt User <user@host>'
+
+  which would execute the given command when sending mail to
+  _\bm_\be_\b@_\bc_\bs_\b._\bh_\bm_\bc_\b._\be_\bd_\bu.
+
+  However, it is not required that you write the pattern to match using
+  the full searching language.  You can still specify a simple _\br_\be_\bg_\bu_\bl_\ba_\br
+  _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn like the other hooks, in which case Mutt will translate
+  your pattern into the full language, using the translation specified
+  by the ``$default_hook'' variable.  The pattern is translated at the
+  time the hook is declared, so the value of ``$default_hook'' that is
+  in effect at that time will be used.
+
+  4\b4.\b.5\b5.\b.  E\bEx\bxt\bte\ber\brn\bna\bal\bl A\bAd\bdd\bdr\bre\bes\bss\bs Q\bQu\bue\ber\bri\bie\bes\bs
+
+  Mutt supports connecting to external directory databases such as LDAP,
+  ph/qi, bbdb, or NIS through a wrapper script which connects to mutt
+  using a simple interface.  Using the ``$query_command'' variable, you
+  specify the wrapper command to use.  For example:
+
+       set query_command = "mutt_ldap_query.pl '%s'"
+
+  The wrapper script should accept the query on the command-line.  It
+  should return a one line message, then each matching response on a
+  single line, each line containing a tab separated address then name
+  then some other optional information.  On error, or if there are no
+  matching addresses, return a non-zero exit code and a one line error
+  message.
+
+  An example multiple response output:
+
+  Searching database ... 20 entries ... 3 matching:
+  me@cs.hmc.edu           Michael Elkins  mutt dude
+  blong@fiction.net       Brandon Long    mutt and more
+  roessler@guug.de        Thomas Roessler mutt pgp
+
+  There are two mechanisms for accessing the query function of mutt.
+  One is to do a query from the index menu using the query function
+  (default: Q).  This will prompt for a query, then bring up the query
+  menu which will list the matching responses.  From the query menu, you
+  can select addresses to create aliases, or to mail.  You can tag
+  multiple messages to mail, start a new query, or have a new query
+  appended to the current responses.
+
+  The other mechanism for accessing the query function is for address
+  completion, similar to the alias completion.  In any prompt for
+  address entry, you can use the complete-query function (default: ^T)
+  to run a query based on the current address you have typed.  Like
+  aliases, mutt will look for what you have typed back to the last space
+  or comma.  If there is a single response for that query, mutt will
+  expand the address in place.  If there are multiple responses, mutt
+  will activate the query menu.  At the query menu, you can select one
+  or more addresses to be added to the prompt.
+
+  4\b4.\b.6\b6.\b.  M\bMa\bai\bil\blb\bbo\box\bx F\bFo\bor\brm\bma\bat\bts\bs
+
+  Mutt supports reading and writing of four different mailbox formats:
+  mbox, MMDF, MH and Maildir.  The mailbox type is autodetected, so
+  there is no need to use a flag for different mailbox types.  When
+  creating new mailboxes, Mutt uses the default specified with the
+  ``$mbox_type'' variable.
+
+  m\bmb\bbo\box\bx.  This is the most widely used mailbox format for UNIX.  All
+  messages are stored in a single file.  Each message has a line of the
+  form:
+
+       From me@cs.hmc.edu Fri, 11 Apr 1997 11:44:56 PST
+
+  to denote the start of a new message (this is often referred to as the
+  ``From_'' line).
+
+  M\bMM\bMD\bDF\bF.  This is a variant of the _\bm_\bb_\bo_\bx format.  Each message is
+  surrounded by lines containing ``^A^A^A^A'' (four control-A's).
+
+  M\bMH\bH. A radical departure from _\bm_\bb_\bo_\bx and _\bM_\bM_\bD_\bF, a mailbox consists of a
+  directory and each message is stored in a separate file.  The filename
+  indicates the message number (however, this is may not correspond to
+  the message number Mutt displays). Deleted messages are renamed with a
+  comma (,) prepended to the filename. N\bNo\bot\bte\be:\b: Mutt detects this type of
+  mailbox by looking for either .mh_sequences or .xmhcache (needed to
+  distinguish normal directories from MH mailboxes).
+
+  M\bMa\bai\bil\bld\bdi\bir\br.  The newest of the mailbox formats, used by the Qmail MTA (a
+  replacement for sendmail).  Similar to _\bM_\bH, except that it adds three
+  subdirectories of the mailbox: _\bt_\bm_\bp, _\bn_\be_\bw and _\bc_\bu_\br.  Filenames for the
+  messages are chosen in such a way they are unique, even when two
+  programs are writing the mailbox over NFS, which means that no file
+  locking is needed.
+  4\b4.\b.7\b7.\b.  M\bMa\bai\bil\blb\bbo\box\bx S\bSh\bho\bor\brt\btc\bcu\but\bts\bs
+
+  There are a number of built in shortcuts which refer to specific
+  mailboxes.  These shortcuts can be used anywhere you are prompted for
+  a file or mailbox path.
+
+  ·  ! -- refers to your ``$spoolfile'' (incoming) mailbox
+
+  ·  > -- refers to your ``$mbox'' file
+
+  ·  < -- refers to your ``$record'' file
+
+  ·  - or !! -- refers to the file you've last visited
+
+  ·  ~ -- refers to your home directory
+
+  ·  = or + -- refers to your ``$folder'' directory
+
+  ·  @_\ba_\bl_\bi_\ba_\bs -- refers to the ``default save folder'' as determined by
+     the address of the alias
+
+  4\b4.\b.8\b8.\b.  H\bHa\ban\bnd\bdl\bli\bin\bng\bg M\bMa\bai\bil\bli\bin\bng\bg L\bLi\bis\bst\bts\bs
+
+  Mutt has a few configuration options that make dealing with large
+  amounts of mail easier.  The first thing you must do is to let Mutt
+  know what addresses you consider to be mailing lists (technically this
+  does not have to be a mailing list, but that is what it is most often
+  used for), and what lists you are subscribed to.  This is accomplished
+  through the use of the ``lists and subscribe'' commands in your
+  muttrc.
+
+  Now that Mutt knows what your mailing lists are, it can do several
+  things, the first of which is the ability to show the name of a list
+  through which you received a message (i.e., of a subscribed list) in
+  the _\bi_\bn_\bd_\be_\bx menu display.  This is useful to distinguish between
+  personal and list mail in the same mailbox.  In the ``$index_format''
+  variable, the escape ``%L'' will return the string ``To <list>'' when
+  ``list'' appears in the ``To'' field, and ``Cc <list>'' when it
+  appears in the ``Cc'' field (otherwise it returns the name of the
+  author).
+
+  Often times the ``To'' and ``Cc'' fields in mailing list messages tend
+  to get quite large. Most people do not bother to remove the author of
+  the message they are reply to from the list, resulting in two or more
+  copies being sent to that person.  The ``list-reply'' function, which
+  by default is bound to ``L'' in the _\bi_\bn_\bd_\be_\bx menu and _\bp_\ba_\bg_\be_\br, helps reduce
+  the clutter by only replying to the known mailing list addresses
+  instead of all recipients (except as specified by Mail-Followup-To,
+  see below).
+
+  Mutt also supports the Mail-Followup-To header.  When you send a
+  message to a list of recipients which includes one or several
+  subscribed mailing lists, and if the ``$followup_to'' option is set,
+  mutt will generate a Mail-Followup-To header which contains all the
+  recipients to whom you send this message, but not your address. This
+  indicates that group-replies or list-replies (also known as
+  ``followups'') to this message should only be sent to the original
+  recipients of the message, and not separately to you - you'll receive
+  your copy through one of the mailing lists you are subscribed to.
+
+  Conversely, when group-replying or list-replying to a message which
+  has a Mail-Followup-To header, mutt will respect this header if the
+  ``$honor_followup_to'' configuration variable is set.  Using list-
+  reply will in this case also make sure that the reply goes to the
+  mailing list, even if it's not specified in the list of recipients in
+  the Mail-Followup-To.
+
+  Note that, when header editing is enabled, you can create a Mail-
+  Followup-To header manually.  Mutt will only auto-generate this header
+  if it doesn't exist when you send the message.
+
+  The other method some mailing list admins use is to generate a
+  ``Reply-To'' field which points back to the mailing list address
+  rather than the author of the message.  This can create problems when
+  trying to reply directly to the author in private, since most mail
+  clients will automatically reply to the address given in the ``Reply-
+  To'' field.  Mutt uses the ``$reply_to'' variable to help decide which
+  address to use.  If set, you will be prompted as to whether or not you
+  would like to use the address given in the ``Reply-To'' field, or
+  reply directly to the address given in the ``From'' field.  When
+  unset, the ``Reply-To'' field will be used when present.
+
+  The ``X-Label:'' header field can be used to further identify mailing
+  lists or list subject matter (or just to annotate messages
+  individually).  The ``$index_format'' variable's ``%y'' and ``%Y''
+  escapes can be used to expand ``X-Label:'' fields in the index, and
+  Mutt's pattern-matcher can match regular expressions to ``X-Label:''
+  fields with the `` y'' selector.  ``X-Label:'' is not a standard
+  message header field, but it can easily be inserted by procmail and
+  other mail filtering agents.
+
+  Lastly, Mutt has the ability to ``sort'' the mailbox into ``threads''.
+  A thread is a group of messages which all relate to the same subject.
+  This is usually organized into a tree-like structure where a message
+  and all of its replies are represented graphically.  If you've ever
+  used a threaded news client, this is the same concept.  It makes
+  dealing with large volume mailing lists easier because you can easily
+  delete uninteresting threads and quickly find topics of value.
+
+  4\b4.\b.9\b9.\b.  D\bDe\bel\bli\biv\bve\ber\bry\by S\bSt\bta\bat\btu\bus\bs N\bNo\bot\bti\bif\bfi\bic\bca\bat\bti\bio\bon\bn (\b(D\bDS\bSN\bN)\b) S\bSu\bup\bpp\bpo\bor\brt\bt
+
+  RFC1894 defines a set of MIME content types for relaying information
+  about the status of electronic mail messages.  These can be thought of
+  as ``return receipts.'' Berkeley sendmail 8.8.x currently has some
+  command line options in which the mail client can make requests as to
+  what type of status messages should be returned.
+
+  To support this, there are two variables. ``$dsn_notify'' is used to
+  request receipts for different results (such as failed message,
+  message delivered, etc.).  ``$dsn_return'' requests how much of your
+  message should be returned with the receipt (headers or full message).
+  Refer to the man page on sendmail for more details on DSN.
+
+  4\b4.\b.1\b10\b0.\b.  P\bPO\bOP\bP3\b3 S\bSu\bup\bpp\bpo\bor\brt\bt (\b(O\bOP\bPT\bTI\bIO\bON\bNA\bAL\bL)\b)
+
+  If Mutt was compiled with POP3 support (by running the _\bc_\bo_\bn_\bf_\bi_\bg_\bu_\br_\be
+  script with the _\b-_\b-_\be_\bn_\ba_\bb_\bl_\be_\b-_\bp_\bo_\bp flag), it has the ability to work with
+  mailboxes located on a remote POP3 server and fetch mail for local
+  browsing.
+
+  You can access the remote POP3 mailbox by selecting the folder
+  pop://popserver/.
+
+  You can select an alternative port by specifying it with the server,
+  ie: pop://popserver:port/.
+  You can also specify different username for each folder, ie:
+  pop://username@popserver[:port]/.
+
+  Polling for new mail is more expensive over POP3 than locally. For
+  this reason the frequency at which Mutt will check for mail remotely
+  can be controlled by the ``$pop_checkinterval'' variable, which
+  defaults to every 60 seconds.
+
+  If Mutt was compiled with SSL support (by running the _\bc_\bo_\bn_\bf_\bi_\bg_\bu_\br_\be script
+  with the _\b-_\b-_\bw_\bi_\bt_\bh_\b-_\bs_\bs_\bl flag), connections to POP3 servers can be
+  encrypted. This naturally requires that the server supports SSL
+  encrypted connections. To access a folder with POP3/SSL, you should
+  use pops: prefix, ie: pops://[username@]popserver[:port]/.
+
+  Another way to access your POP3 mail is the _\bf_\be_\bt_\bc_\bh_\b-_\bm_\ba_\bi_\bl function
+  (default: G).  It allows to connect to ``pop_host'', fetch all your
+  new mail and place it in the local ``spoolfile''.  After this point,
+  Mutt runs exactly as if the mail had always been local.
+
+  N\bNo\bot\bte\be:\b: If you only need to fetch all messages to local mailbox you
+  should consider using a specialized program, such as fetchmail
+
+  4\b4.\b.1\b11\b1.\b.  I\bIM\bMA\bAP\bP S\bSu\bup\bpp\bpo\bor\brt\bt (\b(O\bOP\bPT\bTI\bIO\bON\bNA\bAL\bL)\b)
+
+  If Mutt was compiled with IMAP support (by running the _\bc_\bo_\bn_\bf_\bi_\bg_\bu_\br_\be
+  script with the _\b-_\b-_\be_\bn_\ba_\bb_\bl_\be_\b-_\bi_\bm_\ba_\bp flag), it has the ability to work with
+  folders located on a remote IMAP server.
+
+  You can access the remote inbox by selecting the folder
+  imap://imapserver/INBOX, where imapserver is the name of the IMAP
+  server and INBOX is the special name for your spool mailbox on the
+  IMAP server. If you want to access another mail folder at the IMAP
+  server, you should use imap://imapserver/path/to/folder where
+  path/to/folder is the path of the folder you want to access.
+
+  You can select an alternative port by specifying it with the server,
+  ie: imap://imapserver:port/INBOX.
+
+  You can also specify different username for each folder, ie:
+  imap://username@imapserver[:port]/INBOX.
+
+  If Mutt was compiled with SSL support (by running the _\bc_\bo_\bn_\bf_\bi_\bg_\bu_\br_\be script
+  with the _\b-_\b-_\bw_\bi_\bt_\bh_\b-_\bs_\bs_\bl flag), connections to IMAP servers can be
+  encrypted. This naturally requires that the server supports SSL
+  encrypted connections. To access a folder with IMAP/SSL, you should
+  use imaps://[username@]imapserver[:port]/path/to/folder as your folder
+  path.
+
+  Pine-compatible notation is also supported, ie
+  {[username@]imapserver[:port][/ssl]}path/to/folder
+
+  Note that not all servers use / as the hierarchy separator.  Mutt
+  should correctly notice which separator is being used by the server
+  and convert paths accordingly.
+
+  When browsing folders on an IMAP server, you can toggle whether to
+  look at only the folders you are subscribed to, or all folders with
+  the _\bt_\bo_\bg_\bg_\bl_\be_\b-_\bs_\bu_\bb_\bs_\bc_\br_\bi_\bb_\be_\bd command.  See also the ``$imap_list_subscribed''
+  variable.
+
+  Polling for new mail on an IMAP server can cause noticeable delays.
+  So, you'll want to carefully tune the ``$mail_check'' and ``$timeout''
+  variables. Personally I use
+
+  set mail_check=90
+  set timeout=15
+
+  with relatively good results over my slow modem line.
+
+  Note that if you are using mbox as the mail store on UW servers prior
+  to v12.250, the server has been reported to disconnect a client if
+  another client selects the same folder.
+
+  4\b4.\b.1\b11\b1.\b.1\b1.\b.  T\bTh\bhe\be F\bFo\bol\bld\bde\ber\br B\bBr\bro\bow\bws\bse\ber\br
+
+  As of version 1.2, mutt supports browsing mailboxes on an IMAP server.
+  This is mostly the same as the local file browser, with the following
+  differences:
+
+  ·  In lieu of file permissions, mutt displays the string "IMAP",
+     possibly followed by the symbol "+", indicating that the entry
+     contains both messages and subfolders. On Cyrus-like servers
+     folders will often contain both messages and subfolders.
+
+  ·  For the case where an entry can contain both messages and
+     subfolders, the selection key (bound to enter by default) will
+     choose to descend into the subfolder view. If you wish to view the
+     messages in that folder, you must use view-file instead (bound to
+     space by default).
+
+  ·  You can delete mailboxes with the delete-mailbox command (bound to
+     d by default. You may also subscribe and unsubscribe to mailboxes
+     (normally these are bound to s and u, respectively).
+
+  4\b4.\b.1\b11\b1.\b.2\b2.\b.  A\bAu\but\bth\bhe\ben\bnt\bti\bic\bca\bat\bti\bio\bon\bn
+
+  Mutt supports four authentication methods with IMAP servers: SASL,
+  GSSAPI, CRAM-MD5, and LOGIN (there is a patch by Grant Edwards to add
+  NTLM authentication for you poor exchange users out there, but it has
+  yet to be integrated into the main tree). There is also support for
+  the pseudo-protocol ANONYMOUS, which allows you to log in to a public
+  IMAP server without having an account. To use ANONYMOUS, simply make
+  your username blank or "anonymous".
+
+  SASL is a special super-authenticator, which selects among several
+  protocols (including GSSAPI, CRAM-MD5, ANONYMOUS, and DIGEST-MD5) the
+  most secure method available on your host and the server. Using some
+  of these methods (including DIGEST-MD5 and possibly GSSAPI), your
+  entire session will be encrypted and invisible to those teeming
+  network snoops. It is the best option if you have it. To use it, you
+  must have the Cyrus SASL library installed on your system and compile
+  mutt with the _\b-_\b-_\bw_\bi_\bt_\bh_\b-_\bs_\ba_\bs_\bl flag.
+
+  Mutt will try whichever methods are compiled in and available on the
+  server, in the following order: SASL, ANONYMOUS, GSSAPI, CRAM-MD5,
+  LOGIN.
+
+  There are a few variables which control authentication:
+
+  ·  ``$imap_user'' - controls the username under which you request
+     authentication on the IMAP server, for all authenticators. This is
+     overridden by an explicit username in the mailbox path (ie by using
+     a mailbox name of the form {user@host}).
+  ·  ``$imap_pass'' - a password which you may preset, used by all
+     authentication methods where a password is needed.
+
+  ·  ``$imap_authenticators'' - a colon-delimited list of IMAP
+     authentication methods to try, in the order you wish to try them.
+     If specified, this overrides mutt's default (attempt everything, in
+     the order listed above).
+
+  4\b4.\b.1\b12\b2.\b.  M\bMa\ban\bna\bag\bgi\bin\bng\bg m\bmu\bul\blt\bti\bip\bpl\ble\be I\bIM\bMA\bAP\bP/\b/P\bPO\bOP\bP a\bac\bcc\bco\bou\bun\bnt\bts\bs (\b(O\bOP\bPT\bTI\bIO\bON\bNA\bAL\bL)\b)
+
+  If you happen to have accounts on multiple IMAP and/or POP servers,
+  you may find managing all the authentication settings inconvenient and
+  error-prone.  The account-hook command may help. This hook works like
+  folder-hook but is invoked whenever you access a remote mailbox
+  (including inside the folder browser), not just when you open the
+  mailbox.
+
+  Some examples:
+
+       account-hook . 'unset imap_user; unset imap_pass; unset tunnel'
+       account-hook imap://host1/ 'set imap_user=me1 imap_pass=foo'
+       account-hook imap://host2/ 'set tunnel="ssh host2 /usr/libexec/imapd"'
+
+  4\b4.\b.1\b13\b3.\b.  S\bSt\bta\bar\brt\bt a\ba W\bWW\bWW\bW B\bBr\bro\bow\bws\bse\ber\br o\bon\bn U\bUR\bRL\bLs\bs (\b(E\bEX\bXT\bTE\bER\bRN\bNA\bAL\bL)\b)
+
+  If a message contains URLs (_\bu_\bn_\bi_\bf_\bi_\be_\bd _\br_\be_\bs_\bs_\bo_\bu_\br_\bc_\be _\bl_\bo_\bc_\ba_\bt_\bo_\br = address in the
+  WWW space like _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bw_\bw_\bw_\b._\bm_\bu_\bt_\bt_\b._\bo_\br_\bg_\b/), it is efficient to get a menu
+  with all the URLs and start a WWW browser on one of them.  This
+  functionality is provided by the external urlview program which can be
+  retrieved at ftp://ftp.mutt.org/mutt/contrib/ and the configuration
+  commands:
+
+       macro index \cb |urlview\n
+       macro pager \cb |urlview\n
+
+  5\b5.\b.  M\bMu\but\btt\bt'\b's\bs M\bMI\bIM\bME\bE S\bSu\bup\bpp\bpo\bor\brt\bt
+
+  Quite a bit of effort has been made to make Mutt the premier text-mode
+  MIME MUA.  Every effort has been made to provide the functionality
+  that the discerning MIME user requires, and the conformance to the
+  standards wherever possible.  When configuring Mutt for MIME, there
+  are two extra types of configuration files which Mutt uses.  One is
+  the mime.types file, which contains the mapping of file extensions to
+  IANA MIME types.  The other is the mailcap file, which specifies the
+  external commands to use for handling specific MIME types.
+
+  5\b5.\b.1\b1.\b.  U\bUs\bsi\bin\bng\bg M\bMI\bIM\bME\bE i\bin\bn M\bMu\but\btt\bt
+
+  There are three areas/menus in Mutt which deal with MIME, they are the
+  pager (while viewing a message), the attachment menu and the compose
+  menu.
+
+  5\b5.\b.1\b1.\b.1\b1.\b.  V\bVi\bie\bew\bwi\bin\bng\bg M\bMI\bIM\bME\bE m\bme\bes\bss\bsa\bag\bge\bes\bs i\bin\bn t\bth\bhe\be p\bpa\bag\bge\ber\br
+
+  When you select a message from the index and view it in the pager,
+  Mutt decodes the message to a text representation.  Mutt internally
+  supports a number of MIME types, including text/plain, text/enriched,
+  message/rfc822, and message/news.  In addition, the export controlled
+  version of Mutt recognizes a variety of PGP MIME types, including
+  PGP/MIME and application/pgp.
+
+  Mutt will denote attachments with a couple lines describing them.
+  These lines are of the form:
+
+       [-- Attachment #1: Description --]
+       [-- Type: text/plain, Encoding: 7bit, Size: 10000 --]
+
+  Where the Description is the description or filename given for the
+  attachment, and the Encoding is one of 7bit/8bit/quoted-print­
+  able/base64/binary.
+
+  If Mutt cannot deal with a MIME type, it will display a message like:
+
+       [-- image/gif is unsupported (use 'v' to view this part) --]
+
+  5\b5.\b.1\b1.\b.2\b2.\b.  T\bTh\bhe\be A\bAt\btt\bta\bac\bch\bhm\bme\ben\bnt\bt M\bMe\ben\bnu\bu
+
+  The default binding for view-attachments is `v', which displays the
+  attachment menu for a message.  The attachment menu displays a list of
+  the attachments in a message.  From the attachment menu, you can save,
+  print, pipe, delete, and view attachments.  You can apply these
+  operations to a group of attachments at once, by tagging the
+  attachments and by using the ``tag-prefix'' operator.  You can also
+  reply to the current message from this menu, and only the current
+  attachment (or the attachments tagged) will be quoted in your reply.
+  You can view attachments as text, or view them using the mailcap
+  viewer definition.
+
+  Finally, you can apply the usual message-related functions (like
+  ``resend-message'', and the reply and forward functions) to
+  attachments of type message/rfc822.
+
+  See the help on the attachment menu for more information.
+
+  5\b5.\b.1\b1.\b.3\b3.\b.  T\bTh\bhe\be C\bCo\bom\bmp\bpo\bos\bse\be M\bMe\ben\bnu\bu
+
+  The compose menu is the menu you see before you send a message.  It
+  allows you to edit the recipient list, the subject, and other aspects
+  of your message.  It also contains a list of the attachments of your
+  message, including the main body.  From this menu, you can print,
+  copy, filter, pipe, edit, compose, review, and rename an attachment or
+  a list of tagged attachments.  You can also modifying the attachment
+  information, notably the type, encoding and description.
+
+  Attachments appear as follows:
+
+  -   1 [text/plain, 7bit, 1K]             /tmp/mutt-euler-8082-0 <no description>
+      2 [applica/x-gunzip, base64, 422K]   ~/src/mutt-0.85.tar.gz <no description>
+
+  The '-' denotes that Mutt will delete the file after sending (or
+  postponing, or cancelling) the message.  It can be toggled with the
+  toggle-unlink command (default: u).  The next field is the MIME
+  content-type, and can be changed with the edit-type command (default:
+  ^T).  The next field is the encoding for the attachment, which allows
+  a binary message to be encoded for transmission on 7bit links.  It can
+  be changed with the edit-encoding command (default: ^E).  The next
+  field is the size of the attachment, rounded to kilobytes or
+  megabytes.  The next field is the filename, which can be changed with
+  the rename-file command (default: R).  The final field is the
+  description of the attachment, and can be changed with the edit-
+  description command (default: d).
+
+  5\b5.\b.2\b2.\b.  M\bMI\bIM\bME\bE T\bTy\byp\bpe\be c\bco\bon\bnf\bfi\big\bgu\bur\bra\bat\bti\bio\bon\bn w\bwi\bit\bth\bh m\bmi\bim\bme\be.\b.t\bty\byp\bpe\bes\bs
+
+  When you add an attachment to your mail message, Mutt searches your
+  personal mime.types file at ${HOME}/.mime.types, and then the system
+  mime.types file at /usr/local/share/mutt/mime.types or /etc/mime.types
+
+  The mime.types file consist of lines containing a MIME type and a
+  space separated list of extensions.  For example:
+
+       application/postscript          ps eps
+       application/pgp                 pgp
+       audio/x-aiff                    aif aifc aiff
+
+  A sample mime.types file comes with the Mutt distribution, and should
+  contain most of the MIME types you are likely to use.
+
+  If Mutt can not determine the mime type by the extension of the file
+  you attach, it will look at the file.  If the file is free of binary
+  information, Mutt will assume that the file is plain text, and mark it
+  as text/plain.  If the file contains binary information, then Mutt
+  will mark it as application/octet-stream.  You can change the MIME
+  type that Mutt assigns to an attachment by using the edit-type command
+  from the compose menu (default: ^T). The MIME type is actually a major
+  mime type followed by the sub-type, separated by a '/'. 6 major types:
+  application, text, image, video, audio, and model have been approved
+  after various internet discussions. Mutt recognises all of these if
+  the appropriate entry is found in the mime.types file. It also
+  recognises other major mime types, such as the chemical type that is
+  widely used in the molecular modelling community to pass molecular
+  data in various forms to various molecular viewers. Non-recognised
+  mime types should only be used if the recipient of the message is
+  likely to be expecting such attachments.
+
+  5\b5.\b.3\b3.\b.  M\bMI\bIM\bME\bE V\bVi\bie\bew\bwe\ber\br c\bco\bon\bnf\bfi\big\bgu\bur\bra\bat\bti\bio\bon\bn w\bwi\bit\bth\bh m\bma\bai\bil\blc\bca\bap\bp
+
+  Mutt supports RFC 1524 MIME Configuration, in particular the Unix
+  specific format specified in Appendix A of RFC 1524.  This file format
+  is commonly referred to as the mailcap format.  Many MIME compliant
+  programs utilize the mailcap format, allowing you to specify handling
+  for all MIME types in one place for all programs.  Programs known to
+  use this format include Netscape, XMosaic, lynx and metamail.
+
+  In order to handle various MIME types that Mutt can not handle
+  internally, Mutt parses a series of external configuration files to
+  find an external handler.  The default search string for these files
+  is a colon delimited list set to
+
+       ${HOME}/.mailcap:/usr/local/share/mutt/mailcap:/etc/mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap
+
+  where $HOME is your home directory.
+
+  In particular, the metamail distribution will install a mailcap file,
+  usually as /usr/local/etc/mailcap, which contains some baseline
+  entries.
+
+  5\b5.\b.3\b3.\b.1\b1.\b.  T\bTh\bhe\be B\bBa\bas\bsi\bic\bcs\bs o\bof\bf t\bth\bhe\be m\bma\bai\bil\blc\bca\bap\bp f\bfi\bil\ble\be
+
+  A mailcap file consists of a series of lines which are comments,
+  blank, or definitions.
+
+  A comment line consists of a # character followed by anything you
+  want.
+
+  A blank line is blank.
+
+  A definition line consists of a content type, a view command, and any
+  number of optional fields.  Each field of a definition line is divided
+  by a semicolon ';' character.
+
+  The content type is specified in the MIME standard type/subtype
+  method.  For example, text/plain, text/html, image/gif, etc.  In
+  addition, the mailcap format includes two formats for wildcards, one
+  using the special '*' subtype, the other is the implicit wild, where
+  you only include the major type.  For example, image/*, or video, will
+  match all image types and video types, respectively.
+
+  The view command is a Unix command for viewing the type specified.
+  There are two different types of commands supported. The default is to
+  send the body of the MIME message to the command on stdin. You can
+  change this behaviour by using %s as a parameter to your view command.
+  This will cause Mutt to save the body of the MIME message to a
+  temporary file, and then call the view command with the %s replaced by
+  the name of the temporary file. In both cases, Mutt will turn over the
+  terminal to the view program until the program quits, at which time
+  Mutt will remove the temporary file if it exists.
+
+  So, in the simplest form, you can send a text/plain message to the
+  external pager more on stdin:
+
+       text/plain; more
+
+  Or, you could send the message as a file:
+
+       text/plain; more %s
+
+  Perhaps you would like to use lynx to interactively view a text/html
+  message:
+
+       text/html; lynx %s
+
+  In this case, lynx does not support viewing a file from stdin, so you
+  must use the %s syntax.  N\bNo\bot\bte\be:\b: _\bS_\bo_\bm_\be _\bo_\bl_\bd_\be_\br _\bv_\be_\br_\bs_\bi_\bo_\bn_\bs _\bo_\bf _\bl_\by_\bn_\bx _\bc_\bo_\bn_\bt_\ba_\bi_\bn _\ba
+  _\bb_\bu_\bg _\bw_\bh_\be_\br_\be _\bt_\bh_\be_\by _\bw_\bi_\bl_\bl _\bc_\bh_\be_\bc_\bk _\bt_\bh_\be _\bm_\ba_\bi_\bl_\bc_\ba_\bp _\bf_\bi_\bl_\be _\bf_\bo_\br _\ba _\bv_\bi_\be_\bw_\be_\br _\bf_\bo_\br _\bt_\be_\bx_\bt_\b/_\bh_\bt_\bm_\bl_\b.
+  _\bT_\bh_\be_\by _\bw_\bi_\bl_\bl _\bf_\bi_\bn_\bd _\bt_\bh_\be _\bl_\bi_\bn_\be _\bw_\bh_\bi_\bc_\bh _\bc_\ba_\bl_\bl_\bs _\bl_\by_\bn_\bx_\b, _\ba_\bn_\bd _\br_\bu_\bn _\bi_\bt_\b.  _\bT_\bh_\bi_\bs _\bc_\ba_\bu_\bs_\be_\bs
+  _\bl_\by_\bn_\bx _\bt_\bo _\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bl_\by _\bs_\bp_\ba_\bw_\bn _\bi_\bt_\bs_\be_\bl_\bf _\bt_\bo _\bv_\bi_\be_\bw _\bt_\bh_\be _\bo_\bb_\bj_\be_\bc_\bt_\b.
+
+  On the other hand, maybe you don't want to use lynx interactively, you
+  just want to have it convert the text/html to text/plain, then you can
+  use:
+
+       text/html; lynx -dump %s | more
+
+  Perhaps you wish to use lynx to view text/html files, and a pager on
+  all other text formats, then you would use the following:
+
+       text/html; lynx %s
+       text/*; more
+
+  This is the simplest form of a mailcap file.
+
+  5\b5.\b.3\b3.\b.2\b2.\b.  S\bSe\bec\bcu\bur\bre\be u\bus\bse\be o\bof\bf m\bma\bai\bil\blc\bca\bap\bp
+
+  The interpretion of shell meta-characters embedded in MIME parameters
+  can lead to security problems in general.  Mutt tries to quote
+  parameters in expansion of %s syntaxes properly, and avoids risky
+  characters by substituting them, see the ``mailcap_sanitize''
+  variable.
+
+  Although mutt's procedures to invoke programs with mailcap seem to be
+  safe, there are other applications parsing mailcap, maybe taking less
+  care of it.  Therefore you should pay attention to the following
+  rules:
+
+  _\bK_\be_\be_\bp _\bt_\bh_\be _\b%_\b-_\be_\bx_\bp_\ba_\bn_\bd_\bo_\bs _\ba_\bw_\ba_\by _\bf_\br_\bo_\bm _\bs_\bh_\be_\bl_\bl _\bq_\bu_\bo_\bt_\bi_\bn_\bg_\b.  Don't quote them with
+  single or double quotes.  Mutt does this for you, the right way, as
+  should any other program which interprets mailcap.  Don't put them
+  into backtick expansions.  Be highly careful with eval statements, and
+  avoid them if possible at all.  Trying to fix broken behaviour with
+  quotes introduces new leaks - there is no alternative to correct
+  quoting in the first place.
+
+  If you have to use the %-expandos' values in context where you need
+  quoting or backtick expansions, put that value into a shell variable
+  and reference the shell variable where necessary, as in the following
+  example (using $charset inside the backtick expansion is safe, since
+  it is not itself subject to any further expansion):
+
+       text/test-mailcap-bug; cat %s; copiousoutput; test=charset=%{charset} \
+               && test "`echo $charset | tr '[A-Z]' '[a-z]'`" != iso-8859-1
+
+  5\b5.\b.3\b3.\b.3\b3.\b.  A\bAd\bdv\bva\ban\bnc\bce\bed\bd m\bma\bai\bil\blc\bca\bap\bp U\bUs\bsa\bag\bge\be
+
+  5\b5.\b.3\b3.\b.3\b3.\b.1\b1.\b.  O\bOp\bpt\bti\bio\bon\bna\bal\bl F\bFi\bie\bel\bld\bds\bs
+
+  In addition to the required content-type and view command fields, you
+  can add semi-colon ';' separated fields to set flags and other
+  options.  Mutt recognizes the following optional fields:
+
+     c\bco\bop\bpi\bio\bou\bus\bso\bou\but\btp\bpu\but\bt
+        This flag tells Mutt that the command passes possibly large
+        amounts of text on stdout.  This causes Mutt to invoke a pager
+        (either the internal pager or the external pager defined by the
+        pager variable) on the output of the view command.  Without this
+        flag, Mutt assumes that the command is interactive.  One could
+        use this to replace the pipe to more in the lynx -dump example
+        in the Basic section:
+
+          text/html; lynx -dump %s ; copiousoutput
+
+     This will cause lynx to format the text/html output as text/plain
+     and Mutt will use your standard pager to display the results.
+
+     n\bne\bee\bed\bds\bst\bte\ber\brm\bmi\bin\bna\bal\bl
+        Mutt uses this flag when viewing attachments with ``autoview'',
+        in order to decide whether it should honor the setting of the
+        ``$wait_key'' variable or not.  When an attachment is viewed
+        using an interactive program, and the corresponding mailcap
+        entry has a _\bn_\be_\be_\bd_\bs_\bt_\be_\br_\bm_\bi_\bn_\ba_\bl flag, Mutt will use ``$wait_key'' and
+        the exit status of the program to decide if it will ask you to
+        press a key after the external program has exited.  In all other
+        situations it will not prompt you for a key.
+
+     c\bco\bom\bmp\bpo\bos\bse\be=\b=<\b<c\bco\bom\bmm\bma\ban\bnd\bd>\b>
+        This flag specifies the command to use to create a new
+        attachment of a specific MIME type.  Mutt supports this from the
+        compose menu.
+
+     c\bco\bom\bmp\bpo\bos\bse\bet\bty\byp\bpe\bed\bd=\b=<\b<c\bco\bom\bmm\bma\ban\bnd\bd>\b>
+        This flag specifies the command to use to create a new
+        attachment of a specific MIME type.  This command differs from
+        the compose command in that mutt will expect standard MIME
+        headers on the data.  This can be used to specify parameters,
+        filename, description, etc. for a new attachment.   Mutt
+        supports this from the compose menu.
+
+     p\bpr\bri\bin\bnt\bt=\b=<\b<c\bco\bom\bmm\bma\ban\bnd\bd>\b>
+        This flag specifies the command to use to print a specific MIME
+        type.  Mutt supports this from the attachment and compose menus.
+
+     e\bed\bdi\bit\bt=\b=<\b<c\bco\bom\bmm\bma\ban\bnd\bd>\b>
+        This flag specifies the command to use to edit a specific MIME
+        type.  Mutt supports this from the compose menu, and also uses
+        it to compose new attachments.  Mutt will default to the defined
+        editor for text attachments.
+
+     n\bna\bam\bme\bet\bte\bem\bmp\bpl\bla\bat\bte\be=\b=<\b<t\bte\bem\bmp\bpl\bla\bat\bte\be>\b>
+        This field specifies the format for the file denoted by %s in
+        the command fields.  Certain programs will require a certain
+        file extension, for instance, to correctly view a file.  For
+        instance, lynx will only interpret a file as text/html if the
+        file ends in .html.  So, you would specify lynx as a text/html
+        viewer with a line in the mailcap file like:
+
+          text/html; lynx %s; nametemplate=%s.html
+
+     t\bte\bes\bst\bt=\b=<\b<c\bco\bom\bmm\bma\ban\bnd\bd>\b>
+        This field specifies a command to run to test whether this
+        mailcap entry should be used.  The command is defined with the
+        command expansion rules defined in the next section.  If the
+        command returns 0, then the test passed, and Mutt uses this
+        entry.  If the command returns non-zero, then the test failed,
+        and Mutt continues searching for the right entry.  N\bNo\bot\bte\be:\b: _\bt_\bh_\be
+        _\bc_\bo_\bn_\bt_\be_\bn_\bt_\b-_\bt_\by_\bp_\be _\bm_\bu_\bs_\bt _\bm_\ba_\bt_\bc_\bh _\bb_\be_\bf_\bo_\br_\be _\bM_\bu_\bt_\bt _\bp_\be_\br_\bf_\bo_\br_\bm_\bs _\bt_\bh_\be _\bt_\be_\bs_\bt_\b.  For
+        example:
+
+          text/html; netscape -remote 'openURL(%s)' ; test=RunningX
+          text/html; lynx %s
+
+     In this example, Mutt will run the program RunningX which will
+     return 0 if the X Window manager is running, and non-zero if it
+     isn't.  If RunningX returns 0, then Mutt will call netscape to dis­
+     play the text/html object.  If RunningX doesn't return 0, then Mutt
+     will go on to the next entry and use lynx to display the text/html
+     object.
+
+  5\b5.\b.3\b3.\b.3\b3.\b.2\b2.\b.  S\bSe\bea\bar\brc\bch\bh O\bOr\brd\bde\ber\br
+
+  When searching for an entry in the mailcap file, Mutt will search for
+  the most useful entry for its purpose.  For instance, if you are
+  attempting to print an image/gif, and you have the following entries
+  in your mailcap file, Mutt will search for an entry with the print
+  command:
+
+       image/*;        xv %s
+       image/gif;      ; print= anytopnm %s | pnmtops | lpr; \
+                       nametemplate=%s.gif
+
+  Mutt will skip the image/* entry and use the image/gif entry with the
+  print command.
+
+  In addition, you can use this with ``Autoview'' to denote two commands
+  for viewing an attachment, one to be viewed automatically, the other
+  to be viewed interactively from the attachment menu.  In addition, you
+  can then use the test feature to determine which viewer to use
+  interactively depending on your environment.
+
+  text/html;      netscape -remote 'openURL(%s)' ; test=RunningX
+  text/html;      lynx %s; nametemplate=%s.html
+  text/html;      lynx -dump %s; nametemplate=%s.html; copiousoutput
+
+  For ``Autoview'', Mutt will choose the third entry because of the
+  copiousoutput tag.  For interactive viewing, Mutt will run the program
+  RunningX to determine if it should use the first entry.  If the pro­
+  gram returns non-zero, Mutt will use the second entry for interactive
+  viewing.
+
+  5\b5.\b.3\b3.\b.3\b3.\b.3\b3.\b.  C\bCo\bom\bmm\bma\ban\bnd\bd E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn
+
+  The various commands defined in the mailcap files are passed to the
+  /bin/sh shell using the system() function.  Before the command is
+  passed to /bin/sh -c, it is parsed to expand various special
+  parameters with information from Mutt.  The keywords Mutt expands are:
+
+     %\b%s\bs As seen in the basic mailcap section, this variable is expanded
+        to a filename specified by the calling program.  This file
+        contains the body of the message to view/print/edit or where the
+        composing program should place the results of composition.  In
+        addition, the use of this keyword causes Mutt to not pass the
+        body of the message to the view/print/edit program on stdin.
+
+     %\b%t\bt Mutt will expand %t to the text representation of the content
+        type of the message in the same form as the first parameter of
+        the mailcap definition line, ie text/html or image/gif.
+
+     %\b%{\b{<\b<p\bpa\bar\bra\bam\bme\bet\bte\ber\br>\b>}\b}
+        Mutt will expand this to the value of the specified parameter
+        from the Content-Type: line of the mail message.  For instance,
+        if Your mail message contains:
+
+          Content-Type: text/plain; charset=iso-8859-1
+
+     then Mutt will expand %{charset} to iso-8859-1.  The default meta­
+     mail mailcap file uses this feature to test the charset to spawn an
+     xterm using the right charset to view the message.
+
+     \\b\%\b% This will be replaced by a %
+
+  Mutt does not currently support the %F and %n keywords specified in
+  RFC 1524.  The main purpose of these parameters is for multipart mes­
+  sages, which is handled internally by Mutt.
+
+  5\b5.\b.3\b3.\b.4\b4.\b.  E\bEx\bxa\bam\bmp\bpl\ble\be m\bma\bai\bil\blc\bca\bap\bp f\bfi\bil\ble\bes\bs
+
+  This mailcap file is fairly simple and standard:
+
+  ______________________________________________________________________
+  # I'm always running X :)
+  video/*;        xanim %s > /dev/null
+  image/*;        xv %s > /dev/null
+
+  # I'm always running netscape (if my computer had more memory, maybe)
+  text/html;      netscape -remote 'openURL(%s)'
+  ______________________________________________________________________
+
+  This mailcap file shows quite a number of examples:
+
+  ______________________________________________________________________
+  # Use xanim to view all videos   Xanim produces a header on startup,
+  # send that to /dev/null so I don't see it
+  video/*;        xanim %s > /dev/null
+
+  # Send html to a running netscape by remote
+  text/html;      netscape -remote 'openURL(%s)'; test=RunningNetscape
+
+  # If I'm not running netscape but I am running X, start netscape on the
+  # object
+  text/html;      netscape %s; test=RunningX
+
+  # Else use lynx to view it as text
+  text/html;      lynx %s
+
+  # This version would convert the text/html to text/plain
+  text/html;      lynx -dump %s; copiousoutput
+
+  # I use enscript to print text in two columns to a page
+  text/*;         more %s; print=enscript -2Gr %s
+
+  # Netscape adds a flag to tell itself to view jpegs internally
+  image/jpeg;xv %s; x-mozilla-flags=internal
+
+  # Use xv to view images if I'm running X
+  # In addition, this uses the \ to extend the line and set my editor
+  # for images
+  image/*;xv %s; test=RunningX; \
+          edit=xpaint %s
+
+  # Convert images to text using the netpbm tools
+  image/*;  (anytopnm %s | pnmscale -xysize 80 46 | ppmtopgm | pgmtopbm |
+  pbmtoascii -1x2 ) 2>&1 ; copiousoutput
+
+  # Send excel spreadsheets to my NT box
+  application/ms-excel; open.pl %s
+  ______________________________________________________________________
+
+  5\b5.\b.4\b4.\b.  M\bMI\bIM\bME\bE A\bAu\but\bto\bov\bvi\bie\bew\bw
+
+  In addition to explicitly telling Mutt to view an attachment with the
+  MIME viewer defined in the mailcap file, Mutt has support for
+  automatically viewing MIME attachments while in the pager.
+
+  To work, you must define a viewer in the mailcap file which uses the
+  copiousoutput option to denote that it is non-interactive.  Usually,
+  you also use the entry to convert the attachment to a text
+  representation which you can view in the pager.
+
+  You then use the auto_view muttrc command to list the content-types
+  that you wish to view automatically.
+
+  For instance, if you set auto_view to:
+
+       auto_view text/html application/x-gunzip application/postscript image/gif application/x-tar-gz
+
+  Mutt could use the following mailcap entries to automatically view
+  attachments of these types.
+
+       text/html;      lynx -dump %s; copiousoutput; nametemplate=%s.html
+       image/*;        anytopnm %s | pnmscale -xsize 80 -ysize 50 | ppmtopgm | pgmtopbm | pbmtoascii ; copiousoutput
+       application/x-gunzip;   gzcat; copiousoutput
+       application/x-tar-gz; gunzip -c %s | tar -tf - ; copiousoutput
+       application/postscript; ps2ascii %s; copiousoutput
+
+  ``unauto_view'' can be used to remove previous entries from the
+  autoview list.  This can be used with message-hook to autoview
+  messages based on size, etc.  ``unauto_view *'' will remove all
+  previous entries.
+
+  5\b5.\b.5\b5.\b.  M\bMI\bIM\bME\bE M\bMu\bul\blt\bti\bip\bpa\bar\brt\bt/\b/A\bAl\blt\bte\ber\brn\bna\bat\bti\biv\bve\be
+
+  Mutt has some heuristics for determining which attachment of a
+  multipart/alternative type to display.  First, mutt will check the
+  alternative_order list to determine if one of the available types is
+  preferred.  The alternative_order list consists of a number of
+  mimetypes in order, including support for implicit and explicit
+  wildcards, for example:
+
+       alternative_order text/enriched text/plain text application/postscript image/*
+
+  Next, mutt will check if any of the types have a defined
+  ``auto_view'', and use that.  Failing that, Mutt will look for any
+  text type.  As a last attempt, mutt will look for any type it knows
+  how to handle.
+
+  To remove a MIME type from the alternative_order list, use the
+  unalternative_order command.
+
+  5\b5.\b.6\b6.\b.  M\bMI\bIM\bME\bE L\bLo\boo\bok\bku\bup\bp
+
+  Mutt's mime_lookup list specifies a list of mime-types that should not
+  be treated according to their mailcap entry.  This option is designed
+  to deal with binary types such as application/octet-stream.  When an
+  attachment's mime-type is listed in mime_lookup, then the extension of
+  the filename will be compared to the list of extensions in the
+  mime.types file.  The mime-type associated with this extension will
+  then be used to process the attachment according to the rules in the
+  mailcap file and according to any other configuration options (such as
+  auto_view) specified.  Common usage would be:
+
+  mime-lookup application/octet-stream application/X-Lotus-Manuscript
+
+  In addition, the unmime_lookup command may be used to disable this
+  feature for any particular mime-type if it had been set, for example,
+  in a global muttrc.
+
+  6\b6.\b.  R\bRe\bef\bfe\ber\bre\ben\bnc\bce\be
+
+  6\b6.\b.1\b1.\b.  C\bCo\bom\bmm\bma\ban\bnd\bd l\bli\bin\bne\be o\bop\bpt\bti\bio\bon\bns\bs
+
+  Running mutt with no arguments will make Mutt attempt to read your
+  spool mailbox.  However, it is possible to read other mailboxes and to
+  send messages from the command line as well.
+
+       -A      expand an alias
+       -a      attach a file to a message
+       -b      specify a blind carbon-copy (BCC) address
+       -c      specify a carbon-copy (Cc) address
+       -e      specify a config command to be run after initilization files are read
+       -f      specify a mailbox to load
+       -F      specify an alternate file to read initialization commands
+       -h      print help on command line options
+       -H      specify a draft file from which to read a header and body
+       -i      specify a file to include in a message composition
+       -m      specify a default mailbox type
+       -n      do not read the system Muttrc
+       -p      recall a postponed message
+       -Q      query a configuration variable
+       -R      open mailbox in read-only mode
+       -s      specify a subject (enclose in quotes if it contains spaces)
+       -v      show version number and compile-time definitions
+       -x      simulate the mailx(1) compose mode
+       -y      show a menu containing the files specified by the mailboxes command
+       -z      exit immediately if there are no messages in the mailbox
+       -Z      open the first folder with new message,exit immediately if none
+
+  To read messages in a mailbox
+
+  mutt [ -nz ] [ -F _\bm_\bu_\bt_\bt_\br_\bc ] [ -m _\bt_\by_\bp_\be ] [ -f _\bm_\ba_\bi_\bl_\bb_\bo_\bx ]
+
+  To compose a new message
+
+  mutt [ -n ] [ -F _\bm_\bu_\bt_\bt_\br_\bc ] [ -a _\bf_\bi_\bl_\be ] [ -c _\ba_\bd_\bd_\br_\be_\bs_\bs ] [ -i _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be ] [
+  -s _\bs_\bu_\bb_\bj_\be_\bc_\bt ] _\ba_\bd_\bd_\br_\be_\bs_\bs [ _\ba_\bd_\bd_\br_\be_\bs_\bs ... ]
+
+  Mutt also supports a ``batch'' mode to send prepared messages.  Simply
+  redirect input from the file you wish to send.  For example,
+
+  mutt -s "data set for run #2" professor@bigschool.edu < ~/run2.dat
+
+  This command will send a message to ``professor@bigschool.edu'' with a
+  subject of ``data set for run #2''.  In the body of the message will
+  be the contents of the file ``~/run2.dat''.
+
+  6\b6.\b.2\b2.\b.  C\bCo\bon\bnf\bfi\big\bgu\bur\bra\bat\bti\bio\bon\bn C\bCo\bom\bmm\bma\ban\bnd\bds\bs
+
+  The following are the commands understood by mutt.
+
+  ·  ``account-hook'' _\bp_\ba_\bt_\bt_\be_\br_\bn _\bc_\bo_\bm_\bm_\ba_\bn_\bd
+
+  ·  ``alias'' _\bk_\be_\by _\ba_\bd_\bd_\br_\be_\bs_\bs [ , _\ba_\bd_\bd_\br_\be_\bs_\bs, ... ]
+
+  ·  ``unalias'' [ * | _\bk_\be_\by ... ]
+
+  ·  ``alternates'' _\br_\be_\bg_\be_\bx_\bp [ _\br_\be_\bg_\be_\bx_\bp ... ]
+
+  ·  ``unalternates'' [ * | _\br_\be_\bg_\be_\bx_\bp ... ]
+
+  ·  ``alternative_order'' _\bm_\bi_\bm_\be_\bt_\by_\bp_\be [ _\bm_\bi_\bm_\be_\bt_\by_\bp_\be ... ]
+
+  ·  ``unalternative_order'' _\bm_\bi_\bm_\be_\bt_\by_\bp_\be [ _\bm_\bi_\bm_\be_\bt_\by_\bp_\be ... ]
+
+  ·  ``auto_view'' _\bm_\bi_\bm_\be_\bt_\by_\bp_\be [ _\bm_\bi_\bm_\be_\bt_\by_\bp_\be ... ]
+
+  ·  ``unauto_view'' _\bm_\bi_\bm_\be_\bt_\by_\bp_\be [ _\bm_\bi_\bm_\be_\bt_\by_\bp_\be ... ]
+
+  ·  ``bind'' _\bm_\ba_\bp _\bk_\be_\by _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn
+
+  ·  ``charset-hook'' _\ba_\bl_\bi_\ba_\bs _\bc_\bh_\ba_\br_\bs_\be_\bt
+
+  ·  ``color'' _\bo_\bb_\bj_\be_\bc_\bt _\bf_\bo_\br_\be_\bg_\br_\bo_\bu_\bn_\bd _\bb_\ba_\bc_\bk_\bg_\br_\bo_\bu_\bn_\bd [ _\br_\be_\bg_\be_\bx_\bp ]
+
+  ·  ``uncolor'' _\bi_\bn_\bd_\be_\bx _\bp_\ba_\bt_\bt_\be_\br_\bn [ _\bp_\ba_\bt_\bt_\be_\br_\bn ... ]
+
+  ·  ``exec'' _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn [ _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn ... ]
+
+  ·  ``fcc-hook'' _\bp_\ba_\bt_\bt_\be_\br_\bn _\bm_\ba_\bi_\bl_\bb_\bo_\bx
+
+  ·  ``fcc-save-hook'' _\bp_\ba_\bt_\bt_\be_\br_\bn _\bm_\ba_\bi_\bl_\bb_\bo_\bx
+
+  ·  ``folder-hook'' _\bp_\ba_\bt_\bt_\be_\br_\bn _\bc_\bo_\bm_\bm_\ba_\bn_\bd
+
+  ·  ``hdr_order'' _\bh_\be_\ba_\bd_\be_\br [ _\bh_\be_\ba_\bd_\be_\br ... ]
+
+  ·  ``unhdr_order'' _\bh_\be_\ba_\bd_\be_\br [ _\bh_\be_\ba_\bd_\be_\br ... ]
+
+  ·  ``iconv-hook'' _\bc_\bh_\ba_\br_\bs_\be_\bt _\bl_\bo_\bc_\ba_\bl_\b-_\bc_\bh_\ba_\br_\bs_\be_\bt
+
+  ·  ``ignore'' _\bp_\ba_\bt_\bt_\be_\br_\bn [ _\bp_\ba_\bt_\bt_\be_\br_\bn ... ]
+
+  ·  ``unignore'' _\bp_\ba_\bt_\bt_\be_\br_\bn [ _\bp_\ba_\bt_\bt_\be_\br_\bn ... ]
+
+  ·  ``lists'' _\ba_\bd_\bd_\br_\be_\bs_\bs [ _\ba_\bd_\bd_\br_\be_\bs_\bs ... ]
+
+  ·  ``unlists'' _\ba_\bd_\bd_\br_\be_\bs_\bs [ _\ba_\bd_\bd_\br_\be_\bs_\bs ... ]
+
+  ·  ``macro'' _\bm_\be_\bn_\bu _\bk_\be_\by _\bs_\be_\bq_\bu_\be_\bn_\bc_\be [ _\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn ]
+
+  ·  ``mailboxes'' _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be [ _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be ... ]
+
+  ·  ``mbox-hook'' _\bp_\ba_\bt_\bt_\be_\br_\bn _\bm_\ba_\bi_\bl_\bb_\bo_\bx
+
+  ·  ``message-hook'' _\bp_\ba_\bt_\bt_\be_\br_\bn _\bc_\bo_\bm_\bm_\ba_\bn_\bd
+
+  ·  ``mime_lookup'' _\bm_\bi_\bm_\be_\bt_\by_\bp_\be [ _\bm_\bi_\bm_\be_\bt_\by_\bp_\be ... ]
+
+  ·  ``unmime_lookup'' _\bm_\bi_\bm_\be_\bt_\by_\bp_\be [ _\bm_\bi_\bm_\be_\bt_\by_\bp_\be ... ]
+
+  ·  ``mono'' _\bo_\bb_\bj_\be_\bc_\bt _\ba_\bt_\bt_\br_\bi_\bb_\bu_\bt_\be [ _\br_\be_\bg_\be_\bx_\bp ]
+
+  ·  ``unmono'' _\bi_\bn_\bd_\be_\bx _\bp_\ba_\bt_\bt_\be_\br_\bn [ _\bp_\ba_\bt_\bt_\be_\br_\bn ... ]
+
+  ·  ``my_hdr'' _\bs_\bt_\br_\bi_\bn_\bg
+
+  ·  ``unmy_hdr'' _\bf_\bi_\be_\bl_\bd [ _\bf_\bi_\be_\bl_\bd ... ]
+
+  ·  ``crypt-hook'' _\bp_\ba_\bt_\bt_\be_\br_\bn _\bk_\be_\by_\b-_\bi_\bd
+
+  ·  ``push'' _\bs_\bt_\br_\bi_\bn_\bg
+
+  ·  ``reset'' _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be [_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be ... ]
+
+  ·  ``save-hook'' _\br_\be_\bg_\be_\bx_\bp _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
+
+  ·  ``score'' _\bp_\ba_\bt_\bt_\be_\br_\bn _\bv_\ba_\bl_\bu_\be
+
+  ·  ``unscore'' _\bp_\ba_\bt_\bt_\be_\br_\bn [ _\bp_\ba_\bt_\bt_\be_\br_\bn ... ]
+
+  ·  ``send-hook'' _\br_\be_\bg_\be_\bx_\bp _\bc_\bo_\bm_\bm_\ba_\bn_\bd
+
+  ·  ``set'' [no|inv]_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be[=_\bv_\ba_\bl_\bu_\be] [ _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be ... ]
+
+  ·  ``unset'' _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be [_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be ... ]
+
+  ·  ``source'' _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
+
+  ·  ``subscribe'' _\ba_\bd_\bd_\br_\be_\bs_\bs [ _\ba_\bd_\bd_\br_\be_\bs_\bs ... ]
+
+  ·  ``unsubscribe'' _\ba_\bd_\bd_\br_\be_\bs_\bs [ _\ba_\bd_\bd_\br_\be_\bs_\bs ... ]
+
+  ·  ``toggle'' _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be [_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be ... ]
+
+  ·  ``unhook'' _\bh_\bo_\bo_\bk_\b-_\bt_\by_\bp_\be
+
+  6\b6.\b.3\b3.\b.  C\bCo\bon\bnf\bfi\big\bgu\bur\bra\bat\bti\bio\bon\bn v\bva\bar\bri\bia\bab\bbl\ble\bes\bs
+
+  6\b6.\b.3\b3.\b.1\b1.\b.  a\bab\bbo\bor\brt\bt_\b_n\bno\bos\bsu\bub\bbj\bje\bec\bct\bt
+
+  Type: quadoption
+  Default: ask-yes
+
+  If set to _\by_\be_\bs, when composing messages and no subject is given at the
+  subject prompt, composition will be aborted.  If set to _\bn_\bo, composing
+  messages with no subject given at the subject prompt will never be
+  aborted.
+
+  6\b6.\b.3\b3.\b.2\b2.\b.  a\bab\bbo\bor\brt\bt_\b_u\bun\bnm\bmo\bod\bdi\bif\bfi\bie\bed\bd
+
+  Type: quadoption
+  Default: yes
+
+  If set to _\by_\be_\bs, composition will automatically abort after editing the
+  message body if no changes are made to the file (this check only
+  happens after the _\bf_\bi_\br_\bs_\bt edit of the file).  When set to _\bn_\bo,
+  composition will never be aborted.
+
+  6\b6.\b.3\b3.\b.3\b3.\b.  a\bal\bli\bia\bas\bs_\b_f\bfi\bil\ble\be
+
+  Type: path
+  Default: "~/.muttrc"
+
+  The default file in which to save aliases created by the ````create-
+  alias'''' function.
+
+  N\bNo\bot\bte\be:\b: Mutt will not automatically source this file; you must
+  explicitly use the ````source'''' command for it to be executed.
+
+  6\b6.\b.3\b3.\b.4\b4.\b.  a\bal\bli\bia\bas\bs_\b_f\bfo\bor\brm\bma\bat\bt
+
+  Type: string
+  Default: "%4n %2f %t %-10a   %r"
+
+  Specifies the format of the data displayed for the `alias' menu.  The
+  following printf(3)-style sequences are available:
+
+     %\b%a\ba alias name
+
+     %\b%f\bf flags - currently, a "d" for an alias marked for deletion
+
+     %\b%n\bn index number
+
+     %\b%r\br address which alias expands to
+
+     %\b%t\bt character which indicates if the alias is tagged for inclusion
+
+  6\b6.\b.3\b3.\b.5\b5.\b.  a\bal\bll\blo\bow\bw_\b_8\b8b\bbi\bit\bt
+
+  Type: boolean
+  Default: yes
+
+  Controls whether 8-bit data is converted to 7-bit using either Quoted-
+  Printable or Base64 encoding when sending mail.
+
+  6\b6.\b.3\b3.\b.6\b6.\b.  a\bal\bll\blo\bow\bw_\b_a\ban\bns\bsi\bi
+
+  Type: boolean
+  Default: no
+
+  Controls whether ANSI color codes in messages (and color tags in rich
+  text messages) are to be interpreted.  Messages containing these codes
+  are rare, but if this option is set, their text will be colored
+  accordingly. Note that this may override your color choices, and even
+  present a security problem, since a message could include a line like
+  "[-- PGP output follows ..." and give it the same color as your
+  attachment color.
+
+  6\b6.\b.3\b3.\b.7\b7.\b.  a\bar\brr\bro\bow\bw_\b_c\bcu\bur\brs\bso\bor\br
+
+  Type: boolean
+  Default: no
+
+  When set, an arrow (``->'') will be used to indicate the current entry
+  in menus instead of highlighting the whole line.  On slow network or
+  modem links this will make response faster because there is less that
+  has to be redrawn on the screen when moving to the next or previous
+  entries in the menu.
+
+  6\b6.\b.3\b3.\b.8\b8.\b.  a\bas\bsc\bci\bii\bi_\b_c\bch\bha\bar\brs\bs
+
+  Type: boolean
+  Default: no
+
+  If set, Mutt will use plain ASCII characters when displaying thread
+  and attachment trees, instead of the default _\bA_\bC_\bS characters.
+
+  6\b6.\b.3\b3.\b.9\b9.\b.  a\bas\bsk\bkb\bbc\bcc\bc
+
+  Type: boolean
+  Default: no
+
+  If set, Mutt will prompt you for blind-carbon-copy (Bcc) recipients
+  before editing an outgoing message.
+
+  6\b6.\b.3\b3.\b.1\b10\b0.\b.  a\bas\bsk\bkc\bcc\bc
+
+  Type: boolean
+  Default: no
+
+  If set, Mutt will prompt you for carbon-copy (Cc) recipients before
+  editing the body of an outgoing message.
+
+  6\b6.\b.3\b3.\b.1\b11\b1.\b.  a\bas\bsk\bk_\b_f\bfo\bol\bll\blo\bow\bw_\b_u\bup\bp
+
+  Type: boolean
+  Default: no
+
+  If set, Mutt will prompt you for follow-up groups before editing the
+  body of an outgoing message.
+
+  6\b6.\b.3\b3.\b.1\b12\b2.\b.  a\bas\bsk\bk_\b_x\bx_\b_c\bco\bom\bmm\bme\ben\bnt\bt_\b_t\bto\bo
+
+  Type: boolean
+  Default: no
+
+  If set, Mutt will prompt you for x-comment-to field before editing the
+  body of an outgoing message.
+  6\b6.\b.3\b3.\b.1\b13\b3.\b.  a\bat\btt\bta\bac\bch\bh_\b_f\bfo\bor\brm\bma\bat\bt
+
+  Type: string
+  Default: "%u%D%I %t%4n %T%.40d%> [%.7m/%.10M, %.6e%?C?, %C?, %s] "
+
+  This variable describes the format of the `attachment' menu.  The
+  following printf-style sequences are understood:
+
+     %\b%C\bC charset
+
+     %\b%c\bc reqiures charset conversion (n or c)
+
+     %\b%D\bD deleted flag
+
+     %\b%d\bd description
+
+     %\b%e\be MIME content-transfer-encoding
+
+     %\b%f\bf filename
+
+     %\b%I\bI disposition (I=inline, A=attachment)
+
+     %\b%m\bm major MIME type
+
+     %\b%M\bM MIME subtype
+
+     %\b%n\bn attachment number
+
+     %\b%s\bs size
+
+     %\b%t\bt tagged flag
+
+     %\b%T\bT graphic tree characters
+
+     %\b%u\bu unlink (=to delete) flag
+
+     %\b%>\b>X\bX
+        right justify the rest of the string and pad with character "X"
+
+     %\b%|\b|X\bX
+        pad to the end of the line with character "X"
+
+  6\b6.\b.3\b3.\b.1\b14\b4.\b.  a\bat\btt\bta\bac\bch\bh_\b_s\bse\bep\bp
+
+  Type: string
+  Default: "\n"
+
+  The separator to add between attachments when operating (saving,
+  printing, piping, etc) on a list of tagged attachments.
+
+  6\b6.\b.3\b3.\b.1\b15\b5.\b.  a\bat\btt\bta\bac\bch\bh_\b_s\bsp\bpl\bli\bit\bt
+
+  Type: boolean
+  Default: yes
+
+  If this variable is unset, when operating (saving, printing, piping,
+  etc) on a list of tagged attachments, Mutt will concatenate the
+  attachments and will operate on them as a single attachment. The
+  ````$attach_sep'''' separator is added after each attachment. When
+  set, Mutt will operate on the attachments one by one.
+
+  6\b6.\b.3\b3.\b.1\b16\b6.\b.  a\bat\btt\btr\bri\bib\bbu\but\bti\bio\bon\bn
+
+  Type: string
+  Default: "On %d, %n wrote:"
+
+  This is the string that will precede a message which has been included
+  in a reply.  For a full listing of defined printf()-like sequences see
+  the section on ````$index_format''''.
+
+  6\b6.\b.3\b3.\b.1\b17\b7.\b.  a\bau\but\bto\boe\bed\bdi\bit\bt
+
+  Type: boolean
+  Default: no
+
+  When set along with ````$edit_headers'''', Mutt will skip the initial
+  send-menu and allow you to immediately begin editing the body of your
+  message.  The send-menu may still be accessed once you have finished
+  editing the body of your message.
+
+  Also see ````$fast_reply''''.
+
+  6\b6.\b.3\b3.\b.1\b18\b8.\b.  a\bau\but\bto\bo_\b_t\bta\bag\bg
+
+  Type: boolean
+  Default: no
+
+  When set, functions in the _\bi_\bn_\bd_\be_\bx menu which affect a message will be
+  applied to all tagged messages (if there are any).  When unset, you
+  must first use the tag-prefix function (default: ";") to make the next
+  function apply to all tagged messages.
+
+  6\b6.\b.3\b3.\b.1\b19\b9.\b.  b\bbe\bee\bep\bp
+
+  Type: boolean
+  Default: yes
+
+  When this variable is set, mutt will beep when an error occurs.
+
+  6\b6.\b.3\b3.\b.2\b20\b0.\b.  b\bbe\bee\bep\bp_\b_n\bne\bew\bw
+
+  Type: boolean
+  Default: no
+
+  When this variable is set, mutt will beep whenever it prints a message
+  notifying you of new mail.  This is independent of the setting of the
+  ````$beep'''' variable.
+
+  6\b6.\b.3\b3.\b.2\b21\b1.\b.  b\bbo\bou\bun\bnc\bce\be
+
+  Type: quadoption
+  Default: ask-yes
+
+  Controls whether you will be asked to confirm bouncing messages.  If
+  set to _\by_\be_\bs you don't get asked if you want to bounce a message.
+  Setting this variable to _\bn_\bo is not generally useful, and thus not
+  recommended, because you are unable to bounce messages.
+
+  6\b6.\b.3\b3.\b.2\b22\b2.\b.  b\bbo\bou\bun\bnc\bce\be_\b_d\bde\bel\bli\biv\bve\ber\bre\bed\bd
+
+  Type: boolean
+  Default: yes
+
+  When this variable is set, mutt will include Delivered-To headers when
+  bouncing messages.  Postfix users may wish to unset this variable.
+
+  6\b6.\b.3\b3.\b.2\b23\b3.\b.  c\bca\bat\btc\bch\bhu\bup\bp_\b_n\bne\bew\bws\bsg\bgr\bro\bou\bup\bp
+
+  Type: quadoption
+  Default: ask-yes
+
+  If this variable is _\bs_\be_\bt, Mutt will mark all articles in newsgroup as
+  read when you quit the newsgroup (catchup newsgroup).
+
+  6\b6.\b.3\b3.\b.2\b24\b4.\b.  c\bch\bha\bar\brs\bse\bet\bt
+
+  Type: string
+  Default: ""
+
+  Character set your terminal uses to display and enter textual data.
+
+  6\b6.\b.3\b3.\b.2\b25\b5.\b.  c\bch\bhe\bec\bck\bk_\b_n\bne\bew\bw
+
+  Type: boolean
+  Default: yes
+
+  N\bNo\bot\bte\be:\b: this option only affects _\bm_\ba_\bi_\bl_\bd_\bi_\br and _\bM_\bH style mailboxes.
+
+  When _\bs_\be_\bt, Mutt will check for new mail delivered while the mailbox is
+  open.  Especially with MH mailboxes, this operation can take quite
+  some time since it involves scanning the directory and checking each
+  file to see if it has already been looked at.  If _\bc_\bh_\be_\bc_\bk_\b__\bn_\be_\bw is _\bu_\bn_\bs_\be_\bt,
+  no check for new mail is performed while the mailbox is open.
+
+  6\b6.\b.3\b3.\b.2\b26\b6.\b.  c\bco\bol\bll\bla\bap\bps\bse\be_\b_u\bun\bnr\bre\bea\bad\bd
+
+  Type: boolean
+  Default: yes
+
+  When _\bu_\bn_\bs_\be_\bt, Mutt will not collapse a thread if it contains any unread
+  messages.
+
+  6\b6.\b.3\b3.\b.2\b27\b7.\b.  u\bun\bnc\bco\bol\bll\bla\bap\bps\bse\be_\b_j\bju\bum\bmp\bp
+
+  Type: boolean
+  Default: no
+
+  When _\bs_\be_\bt, Mutt will jump to the next unread message, if any, when the
+  current thread is _\bu_\bncollapsed.
+
+  6\b6.\b.3\b3.\b.2\b28\b8.\b.  c\bco\bom\bmp\bpo\bos\bse\be_\b_f\bfo\bor\brm\bma\bat\bt
+
+  Type: string
+  Default: "-- Mutt: Compose  [Approx. msg size: %l   Atts: %a]%>-"
+
+  Controls the format of the status line displayed in the \fCompose
+  menu.  This string is similar to ````$status_format'''', but has its
+  own set of printf()-like sequences:
+
+     %\b%a\ba total number of attachments
+
+     %\b%h\bh local hostname
+
+     %\b%l\bl approximate size (in bytes) of the current message
+
+     %\b%v\bv Mutt version string
+
+  See the text describing the ````$status_format'''' option for more
+  information on how to set ````$compose_format''''.
+
+  6\b6.\b.3\b3.\b.2\b29\b9.\b.  c\bco\bon\bnf\bfi\bir\brm\bma\bap\bpp\bpe\ben\bnd\bd
+
+  Type: boolean
+  Default: yes
+
+  When set, Mutt will prompt for confirmation when appending messages to
+  an existing mailbox.
+
+  6\b6.\b.3\b3.\b.3\b30\b0.\b.  c\bco\bon\bnf\bfi\bir\brm\bmc\bcr\bre\bea\bat\bte\be
+
+  Type: boolean
+  Default: yes
+
+  When set, Mutt will prompt for confirmation when saving messages to a
+  mailbox which does not yet exist before creating it.
+
+  6\b6.\b.3\b3.\b.3\b31\b1.\b.  c\bco\bon\bnn\bne\bec\bct\bt_\b_t\bti\bim\bme\beo\bou\but\bt
+
+  Type: number
+  Default: 30
+
+  Causes Mutt to timeout a network connection (for IMAP or POP) after
+  this many seconds if the connection is not able to be established.  A
+  negative value causes Mutt to wait indefinitely for the connection to
+  succeed.
+
+  6\b6.\b.3\b3.\b.3\b32\b2.\b.  c\bco\bon\bnt\bte\ben\bnt\bt_\b_t\bty\byp\bpe\be
+
+  Type: string
+  Default: "text/plain"
+
+  Sets the default Content-Type for the body of newly composed messages.
+
+  6\b6.\b.3\b3.\b.3\b33\b3.\b.  c\bco\bop\bpy\by
+
+  Type: quadoption
+  Default: yes
+
+  This variable controls whether or not copies of your outgoing messages
+  will be saved for later references.  Also see ````$record'''',
+  ````$save_name'''', ````$force_name'''' and ````fcc-hook''''.
+
+  6\b6.\b.3\b3.\b.3\b34\b4.\b.  c\bcr\bry\byp\bpt\bt_\b_a\bau\but\bto\bop\bpg\bgp\bp
+
+  Type: boolean
+  Default: yes
+
+  This variable controls whether or not mutt may automatically enable
+  PGP encryption/signing for messages.  See also
+  ````$crypt_autoencrypt'''', ````$crypt_replyencrypt'''',
+  ````$crypt_autosign'''', ````$crypt_replysign'''' and
+  ````$smime_is_default''''.
+
+  6\b6.\b.3\b3.\b.3\b35\b5.\b.  c\bcr\bry\byp\bpt\bt_\b_a\bau\but\bto\bos\bsm\bmi\bim\bme\be
+
+  Type: boolean
+  Default: yes
+
+  This variable controls whether or not mutt may automatically enable
+  S/MIME encryption/signing for messages. See also
+  ````$crypt_autoencrypt'''', ````$crypt_replyencrypt'''',
+  ````$crypt_autosign'''', ````$crypt_replysign'''' and
+  ````$smime_is_default''''.
+
+  6\b6.\b.3\b3.\b.3\b36\b6.\b.  d\bda\bat\bte\be_\b_f\bfo\bor\brm\bma\bat\bt
+
+  Type: string
+  Default: "!%a, %b %d, %Y at %I:%M:%S%p %Z"
+
+  This variable controls the format of the date printed by the ``%d''
+  sequence in ````$index_format''''.  This is passed to the _\bs_\bt_\br_\bf_\bt_\bi_\bm_\be
+  call to process the date. See the man page for _\bs_\bt_\br_\bf_\bt_\bi_\bm_\be_\b(_\b3_\b) for the
+  proper syntax.
+
+  Unless the first character in the string is a bang (``!''), the month
+  and week day names are expanded according to the locale specified in
+  the variable ````$locale''''. If the first character in the string is
+  a bang, the bang is discarded, and the month and week day names in the
+  rest of the string are expanded in the _\bC locale (that is in US
+  English).
+
+  6\b6.\b.3\b3.\b.3\b37\b7.\b.  d\bde\bef\bfa\bau\bul\blt\bt_\b_h\bho\boo\bok\bk
+
+  Type: string
+  Default: "~f %s !~P | (~P ~C %s)"
+
+  This variable controls how send-hooks, message-hooks, save-hooks, and
+  fcc-hooks will be interpreted if they are specified with only a simple
+  regexp, instead of a matching pattern.  The hooks are expanded when
+  they are declared, so a hook will be interpreted according to the
+  value of this variable at the time the hook is declared.  The default
+  value matches if the message is either from a user matching the
+  regular expression given, or if it is from you (if the from address
+  matches ``alternates'') and is to or cc'ed to a user matching the
+  given regular expression.
+
+  6\b6.\b.3\b3.\b.3\b38\b8.\b.  d\bde\bel\ble\bet\bte\be
+
+  Type: quadoption
+  Default: ask-yes
+
+  Controls whether or not messages are really deleted when closing or
+  synchronizing a mailbox.  If set to _\by_\be_\bs, messages marked for deleting
+  will automatically be purged without prompting.  If set to _\bn_\bo,
+  messages marked for deletion will be kept in the mailbox.
+
+  6\b6.\b.3\b3.\b.3\b39\b9.\b.  d\bde\bel\ble\bet\bte\be_\b_u\bun\bnt\bta\bag\bg
+
+  Type: boolean
+  Default: yes
+
+  If this option is _\bs_\be_\bt, mutt will untag messages when marking them for
+  deletion.  This applies when you either explicitly delete a message,
+  or when you save it to another folder.
+
+  6\b6.\b.3\b3.\b.4\b40\b0.\b.  d\bdi\big\bge\bes\bst\bt_\b_c\bco\bol\bll\bla\bap\bps\bse\be
+
+  Type: boolean
+  Default: yes
+
+  If this option is _\bs_\be_\bt, mutt's revattach menu will not show the
+  subparts of individual messages in a digest.  To see these subparts,
+  press 'v' on that menu.
+
+  6\b6.\b.3\b3.\b.4\b41\b1.\b.  d\bdi\bis\bsp\bpl\bla\bay\by_\b_f\bfi\bil\blt\bte\ber\br
+
+  Type: path
+  Default: ""
+
+  When set, specifies a command used to filter messages.  When a message
+  is viewed it is passed as standard input to ``$display_filter'', and
+  the filtered message is read from the standard output.
+
+  6\b6.\b.3\b3.\b.4\b42\b2.\b.  d\bdo\bot\btl\blo\boc\bck\bk_\b_p\bpr\bro\bog\bgr\bra\bam\bm
+
+  Type: path
+  Default: "/usr/local/bin/mutt_dotlock"
+
+  Contains the path of the mutt_dotlock (8) binary to be used by mutt.
+
+  6\b6.\b.3\b3.\b.4\b43\b3.\b.  d\bds\bsn\bn_\b_n\bno\bot\bti\bif\bfy\by
+
+  Type: string
+  Default: ""
+
+  N\bNo\bot\bte\be:\b: you should not enable this unless you are using Sendmail 8.8.x
+  or greater.
+
+  This variable sets the request for when notification is returned.  The
+  string consists of a comma separated list (no spaces!) of one or more
+  of the following: _\bn_\be_\bv_\be_\br, to never request notification, _\bf_\ba_\bi_\bl_\bu_\br_\be, to
+  request notification on transmission failure, _\bd_\be_\bl_\ba_\by, to be notified of
+  message delays, _\bs_\bu_\bc_\bc_\be_\bs_\bs, to be notified of successful transmission.
+
+  Example: set dsn_notify="failure,delay"
+
+  6\b6.\b.3\b3.\b.4\b44\b4.\b.  d\bds\bsn\bn_\b_r\bre\bet\btu\bur\brn\bn
+
+  Type: string
+  Default: ""
+
+  N\bNo\bot\bte\be:\b: you should not enable this unless you are using Sendmail 8.8.x
+  or greater.
+
+  This variable controls how much of your message is returned in DSN
+  messages.  It may be set to either _\bh_\bd_\br_\bs to return just the message
+  header, or _\bf_\bu_\bl_\bl to return the full message.
+
+  Example: set dsn_return=hdrs
+
+  6\b6.\b.3\b3.\b.4\b45\b5.\b.  d\bdu\bup\bpl\bli\bic\bca\bat\bte\be_\b_t\bth\bhr\bre\bea\bad\bds\bs
+
+  Type: boolean
+  Default: yes
+
+  This variable controls whether mutt, when sorting by threads, threads
+  messages with the same message-id together.  If it is set, it will
+  indicate that it thinks they are duplicates of each other with an
+  equals sign in the thread diagram.
+
+  6\b6.\b.3\b3.\b.4\b46\b6.\b.  e\bed\bdi\bit\bt_\b_h\bhe\bea\bad\bde\ber\brs\bs
+
+  Type: boolean
+  Default: no
+
+  This option allows you to edit the header of your outgoing messages
+  along with the body of your message.
+
+  6\b6.\b.3\b3.\b.4\b47\b7.\b.  e\bed\bdi\bit\bto\bor\br
+
+  Type: path
+  Default: ""
+
+  This variable specifies which editor is used by mutt.  It defaults to
+  the value of the VISUAL, or EDITOR, environment variable, or to the
+  string "vi" if neither of those are set.
+
+  6\b6.\b.3\b3.\b.4\b48\b8.\b.  e\ben\bnc\bco\bod\bde\be_\b_f\bfr\bro\bom\bm
+
+  Type: boolean
+  Default: no
+
+  When _\bs_\be_\bt, mutt will quoted-printable encode messages when they contain
+  the string "From " in the beginning of a line.  Useful to avoid the
+  tampering certain mail delivery and transport agents tend to do with
+  messages.
+
+  6\b6.\b.3\b3.\b.4\b49\b9.\b.  e\ben\bnv\bve\bel\blo\bop\bpe\be_\b_f\bfr\bro\bom\bm
+
+  Type: boolean
+  Default: no
+
+  When _\bs_\be_\bt, mutt will try to derive the message's _\be_\bn_\bv_\be_\bl_\bo_\bp_\be sender from
+  the "From:" header.  Note that this information is passed to sendmail
+  command using the "-f" command line switch, so don't set this option
+  if you are using that switch in ``$sendmail'' yourself, or if the
+  sendmail on your machine doesn't support that command line switch.
+
+  6\b6.\b.3\b3.\b.5\b50\b0.\b.  e\bes\bsc\bca\bap\bpe\be
+
+  Type: string
+  Default: "~"
+
+  Escape character to use for functions in the builtin editor.
+
+  6\b6.\b.3\b3.\b.5\b51\b1.\b.  f\bfa\bas\bst\bt_\b_r\bre\bep\bpl\bly\by
+
+  Type: boolean
+  Default: no
+
+  When set, the initial prompt for recipients and subject are skipped
+  when replying to messages, and the initial prompt for subject is
+  skipped when forwarding messages.
+
+  N\bNo\bot\bte\be:\b: this variable has no effect when the ````$autoedit'''' variable
+  is set.
+
+  6\b6.\b.3\b3.\b.5\b52\b2.\b.  f\bfc\bcc\bc_\b_a\bat\btt\bta\bac\bch\bh
+
+  Type: boolean
+  Default: yes
+
+  This variable controls whether or not attachments on outgoing messages
+  are saved along with the main body of your message.
+
+  6\b6.\b.3\b3.\b.5\b53\b3.\b.  f\bfc\bcc\bc_\b_c\bcl\ble\bea\bar\br
+
+  Type: boolean
+  Default: no
+
+  When this variable is set, FCCs will be stored unencrypted and
+  unsigned, even when the actual message is encrypted and/or signed.
+  (PGP only)
+
+  6\b6.\b.3\b3.\b.5\b54\b4.\b.  f\bfo\bol\bld\bde\ber\br
+
+  Type: path
+  Default: "~/Mail"
+
+  Specifies the default location of your mailboxes.  A `+' or `=' at the
+  beginning of a pathname will be expanded to the value of this
+  variable.  Note that if you change this variable from the default
+  value you need to make sure that the assignment occurs _\bb_\be_\bf_\bo_\br_\be you use
+  `+' or `=' for any other variables since expansion takes place during
+  the `set' command.
+
+  6\b6.\b.3\b3.\b.5\b55\b5.\b.  f\bfo\bol\bld\bde\ber\br_\b_f\bfo\bor\brm\bma\bat\bt
+
+  Type: string
+  Default: "%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f"
+
+  This variable allows you to customize the file browser display to your
+  personal taste.  This string is similar to ````$index_format'''', but
+  has its own set of printf()-like sequences:
+
+     %\b%C\bC current file number
+
+     %\b%d\bd date/time folder was last modified
+
+     %\b%f\bf filename
+
+     %\b%F\bF file permissions
+
+     %\b%g\bg group name (or numeric gid, if missing)
+
+     %\b%l\bl number of hard links
+
+     %\b%N\bN N if folder has new mail, blank otherwise
+
+     %\b%s\bs size in bytes
+
+     %\b%t\bt * if the file is tagged, blank otherwise
+
+     %\b%u\bu owner name (or numeric uid, if missing)
+
+     %\b%>\b>X\bX
+        right justify the rest of the string and pad with character "X"
+
+     %\b%|\b|X\bX
+        pad to the end of the line with character "X"
+
+  6\b6.\b.3\b3.\b.5\b56\b6.\b.  f\bfo\bol\bll\blo\bow\bwu\bup\bp_\b_t\bto\bo
+
+  Type: boolean
+  Default: yes
+
+  Controls whether or not the _\bM_\ba_\bi_\bl_\b-_\bF_\bo_\bl_\bl_\bo_\bw_\bu_\bp_\b-_\bT_\bo header field is generated
+  when sending mail.  When _\bs_\be_\bt, Mutt will generate this field when you
+  are replying to a known mailing list, specified with the ``subscribe''
+  or ````lists'''' commands.
+
+  This field has two purposes.  First, preventing you from receiving
+  duplicate copies of replies to messages which you send to mailing
+  lists, and second, ensuring that you do get a reply separately for any
+  messages sent to known lists to which you are not subscribed.  The
+  header will contain only the list's address for subscribed lists, and
+  both the list address and your own email address for unsubscribed
+  lists.  Without this header, a group reply to your message sent to a
+  subscribed list will be sent to both the list and your address,
+  resulting in two copies of the same email for you.
+
+  6\b6.\b.3\b3.\b.5\b57\b7.\b.  f\bfo\bol\bll\blo\bow\bwu\bup\bp_\b_t\bto\bo_\b_p\bpo\bos\bst\bte\ber\br
+
+  Type: quadoption
+  Default: ask-yes
+
+  If this variable is _\bs_\be_\bt and the keyword "poster" is present in
+  _\bF_\bo_\bl_\bl_\bo_\bw_\bu_\bp_\b-_\bT_\bo header, follow-up to newsgroup function is not permitted.
+  The message will be mailed to the submitter of the message via mail.
+
+  6\b6.\b.3\b3.\b.5\b58\b8.\b.  f\bfo\bor\brc\bce\be_\b_n\bna\bam\bme\be
+
+  Type: boolean
+  Default: no
+
+  This variable is similar to ````$save_name'''', except that Mutt will
+  store a copy of your outgoing message by the username of the address
+  you are sending to even if that mailbox does not exist.
+
+  Also see the ````$record'''' variable.
+
+  6\b6.\b.3\b3.\b.5\b59\b9.\b.  f\bfo\bor\brw\bwa\bar\brd\bd_\b_d\bde\bec\bco\bod\bde\be
+
+  Type: boolean
+  Default: yes
+
+  Controls the decoding of complex MIME messages into text/plain when
+  forwarding a message.  The message header is also RFC2047 decoded.
+  This variable is only used, if ````$mime_forward'''' is _\bu_\bn_\bs_\be_\bt,
+  otherwise ````$mime_forward_decode'''' is used instead.
+
+  6\b6.\b.3\b3.\b.6\b60\b0.\b.  f\bfo\bor\brw\bwa\bar\brd\bd_\b_e\bed\bdi\bit\bt
+
+  Type: quadoption
+  Default: yes
+
+  This quadoption controls whether or not the user is automatically
+  placed in the editor when forwarding messages.  For those who always
+  want to forward with no modification, use a setting of ``no''.
+
+  6\b6.\b.3\b3.\b.6\b61\b1.\b.  f\bfo\bor\brw\bwa\bar\brd\bd_\b_f\bfo\bor\brm\bma\bat\bt
+
+  Type: string
+  Default: "[%a: %s]"
+
+  This variable controls the default subject when forwarding a message.
+  It uses the same format sequences as the ````$index_format''''
+  variable.
+
+  6\b6.\b.3\b3.\b.6\b62\b2.\b.  f\bfo\bor\brw\bwa\bar\brd\bd_\b_q\bqu\buo\bot\bte\be
+
+  Type: boolean
+  Default: no
+
+  When _\bs_\be_\bt forwarded messages included in the main body of the message
+  (when ````$mime_forward'''' is _\bu_\bn_\bs_\be_\bt) will be quoted using
+  ````$indent_string''''.
+
+  6\b6.\b.3\b3.\b.6\b63\b3.\b.  f\bfr\bro\bom\bm
+
+  Type: e-mail address
+  Default: ""
+
+  When set, this variable contains a default from address.  It can be
+  overridden using my_hdr (including from send-hooks) and
+  ````$reverse_name''''.  This variable is ignored if ````$use_from''''
+  is unset.
+
+  Defaults to the contents of the environment variable EMAIL.
+
+  6\b6.\b.3\b3.\b.6\b64\b4.\b.  g\bge\bec\bco\bos\bs_\b_m\bma\bas\bsk\bk
+
+  Type: regular expression
+  Default: "^[^,]*"
+
+  A regular expression used by mutt to parse the GECOS field of a
+  password entry when expanding the alias.  By default the regular
+  expression is set to "^[^,]*" which will return the string up to the
+  first "," encountered.  If the GECOS field contains a string like
+  "lastname, firstname" then you should set the gecos_mask=".*".
+
+  This can be useful if you see the following behavior: you address a e-
+  mail to user ID stevef whose full name is Steve Franklin.  If mutt
+  expands stevef to "Franklin" stevef@foo.bar then you should set the
+  gecos_mask to a regular expression that will match the whole name so
+  mutt will expand "Franklin" to "Franklin, Steve".
+
+  6\b6.\b.3\b3.\b.6\b65\b5.\b.  g\bgr\bro\bou\bup\bp_\b_i\bin\bnd\bde\bex\bx_\b_f\bfo\bor\brm\bma\bat\bt
+
+  Type: string
+  Default: "%4C %M%N %5s  %-45.45f %d"
+
+  This variable allows you to customize the newsgroup browser display to
+  your personal taste.  This string is similar to ````index_format'''',
+  but has its own set of printf()-like sequences:
+
+  %C      current newsgroup number
+  %d      description of newsgroup (becomes from server)
+  %f      newsgroup name
+  %M      - if newsgroup not allowed for direct post (moderated for example)
+  %N      N if newsgroup is new, u if unsubscribed, blank otherwise
+  %n      number of new articles in newsgroup
+  %s      number of unread articles in newsgroup
+  %>X     right justify the rest of the string and pad with character "X"
+  %|X     pad to the end of the line with character "X"
+
+  6\b6.\b.3\b3.\b.6\b66\b6.\b.  h\bhd\bdr\brs\bs
+
+  Type: boolean
+  Default: yes
+
+  When unset, the header fields normally added by the ````my_hdr''''
+  command are not created.  This variable _\bm_\bu_\bs_\bt be unset before composing
+  a new message or replying in order to take effect.  If set, the user
+  defined header fields are added to every new message.
+
+  6\b6.\b.3\b3.\b.6\b67\b7.\b.  h\bhe\bea\bad\bde\ber\br
+
+  Type: boolean
+  Default: no
+
+  When set, this variable causes Mutt to include the header of the
+  message you are replying to into the edit buffer.  The ````$weed''''
+  setting applies.
+
+  6\b6.\b.3\b3.\b.6\b68\b8.\b.  h\bhe\bel\blp\bp
+
+  Type: boolean
+  Default: yes
+
+  When set, help lines describing the bindings for the major functions
+  provided by each menu are displayed on the first line of the screen.
+
+  N\bNo\bot\bte\be:\b: The binding will not be displayed correctly if the function is
+  bound to a sequence rather than a single keystroke.  Also, the help
+  line may not be updated if a binding is changed while Mutt is running.
+  Since this variable is primarily aimed at new users, neither of these
+  should present a major problem.
+
+  6\b6.\b.3\b3.\b.6\b69\b9.\b.  h\bhi\bid\bdd\bde\ben\bn_\b_h\bho\bos\bst\bt
+
+  Type: boolean
+  Default: no
+
+  When set, mutt will skip the host name part of ````$hostname''''
+  variable when adding the domain part to addresses.  This variable does
+  not affect the generation of Message-IDs, and it will not lead to the
+  cut-off of first-level domains.
+  6\b6.\b.3\b3.\b.7\b70\b0.\b.  h\bhi\bid\bde\be_\b_l\bli\bim\bmi\bit\bte\bed\bd
+
+  Type: boolean
+  Default: no
+
+  When set, mutt will not show the presence of messages that are hidden
+  by limiting, in the thread tree.
+
+  6\b6.\b.3\b3.\b.7\b71\b1.\b.  h\bhi\bid\bde\be_\b_m\bmi\bis\bss\bsi\bin\bng\bg
+
+  Type: boolean
+  Default: yes
+
+  When set, mutt will not show the presence of missing messages in the
+  thread tree.
+
+  6\b6.\b.3\b3.\b.7\b72\b2.\b.  h\bhi\bid\bde\be_\b_t\bto\bop\bp_\b_l\bli\bim\bmi\bit\bte\bed\bd
+
+  Type: boolean
+  Default: no
+
+  When set, mutt will not show the presence of messages that are hidden
+  by limiting, at the top of threads in the thread tree.  Note that when
+  ``$hide_missing'' is set, this option will have no effect.
+
+  6\b6.\b.3\b3.\b.7\b73\b3.\b.  h\bhi\bid\bde\be_\b_t\bto\bop\bp_\b_m\bmi\bis\bss\bsi\bin\bng\bg
+
+  Type: boolean
+  Default: yes
+
+  When set, mutt will not show the presence of missing messages at the
+  top of threads in the thread tree.  Note that when ``$hide_limited''
+  is set, this option will have no effect.
+
+  6\b6.\b.3\b3.\b.7\b74\b4.\b.  h\bhi\bis\bst\bto\bor\bry\by
+
+  Type: number
+  Default: 10
+
+  This variable controls the size (in number of strings remembered) of
+  the string history buffer. The buffer is cleared each time the
+  variable is set.
+
+  6\b6.\b.3\b3.\b.7\b75\b5.\b.  h\bho\bon\bno\bor\br_\b_f\bfo\bol\bll\blo\bow\bwu\bup\bp_\b_t\bto\bo
+
+  Type: quadoption
+  Default: yes
+
+  This variable controls whether or not a Mail-Followup-To header is
+  honored when group-replying to a message.
+  6\b6.\b.3\b3.\b.7\b76\b6.\b.  h\bho\bos\bst\btn\bna\bam\bme\be
+
+  Type: string
+  Default: ""
+
+  Specifies the hostname to use after the ``@'' in local e-mail
+  addresses.  This overrides the compile time definition obtained from
+  /etc/resolv.conf.
+
+  6\b6.\b.3\b3.\b.7\b77\b7.\b.  i\big\bgn\bno\bor\bre\be_\b_l\bli\bis\bst\bt_\b_r\bre\bep\bpl\bly\by_\b_t\bto\bo
+
+  Type: boolean
+  Default: no
+
+  Affects the behaviour of the _\br_\be_\bp_\bl_\by function when replying to messages
+  from mailing lists.  When set, if the ``Reply-To:'' field is set to
+  the same value as the ``To:'' field, Mutt assumes that the ``Reply-
+  To:'' field was set by the mailing list to automate responses to the
+  list, and will ignore this field.  To direct a response to the mailing
+  list when this option is set, use the _\bl_\bi_\bs_\bt_\b-_\br_\be_\bp_\bl_\by function; _\bg_\br_\bo_\bu_\bp_\b-_\br_\be_\bp_\bl_\by
+  will reply to both the sender and the list.
+
+  6\b6.\b.3\b3.\b.7\b78\b8.\b.  i\bim\bma\bap\bp_\b_a\bau\but\bth\bhe\ben\bnt\bti\bic\bca\bat\bto\bor\brs\bs
+
+  Type: string
+  Default: ""
+
+  This is a colon-delimited list of authentication methods mutt may
+  attempt to use to log in to an IMAP server, in the order mutt should
+  try them.  Authentication methods are either 'login' or the right side
+  of an IMAP 'AUTH=xxx' capability string, eg 'digest-md5', parameter is
+  unset (the default) mutt will try all available methods, in order from
+  most-secure to least-secure.
+
+  Example: set imap_authenticators="gssapi:cram-md5:login"
+
+  N\bNo\bot\bte\be:\b: Mutt will only fall back to other authentication methods if the
+  previous methods are unavailable. If a method is available but
+  authentication fails, mutt will not connect to the IMAP server.
+
+  6\b6.\b.3\b3.\b.7\b79\b9.\b.  i\bim\bma\bap\bp_\b_d\bde\bel\bli\bim\bm_\b_c\bch\bha\bar\brs\bs
+
+  Type: string
+  Default: "/."
+
+  This contains the list of characters which you would like to treat as
+  folder separators for displaying IMAP paths. In particular it helps in
+  using the '=' shortcut for your _\bf_\bo_\bl_\bd_\be_\br variable.
+
+  6\b6.\b.3\b3.\b.8\b80\b0.\b.  i\bim\bma\bap\bp_\b_f\bfo\bor\brc\bce\be_\b_s\bss\bsl\bl
+
+  Type: boolean
+  Default: no
+
+  If this variable is set, Mutt will always use SSL when connecting to
+  IMAP servers.
+
+  6\b6.\b.3\b3.\b.8\b81\b1.\b.  i\bim\bma\bap\bp_\b_h\bho\bom\bme\be_\b_n\bna\bam\bme\bes\bsp\bpa\bac\bce\be
+
+  Type: string
+  Default: ""
+
+  You normally want to see your personal folders alongside your INBOX in
+  the IMAP browser. If you see something else, you may set this variable
+  to the IMAP path to your folders.
+
+  6\b6.\b.3\b3.\b.8\b82\b2.\b.  i\bim\bma\bap\bp_\b_k\bke\bee\bep\bpa\bal\bli\biv\bve\be
+
+  Type: number
+  Default: 900
+
+  This variable specifies the maximum amount of time in seconds that
+  mutt will wait before polling open IMAP connections, to prevent the
+  server from closing them before mutt has finished with them. The
+  default is well within the RFC-specified minimum amount of time (30
+  minutes) before a server is allowed to do this, but in practice the
+  RFC does get violated every now and then. Reduce this number if you
+  find yourself getting disconnected from your IMAP server due to
+  inactivity.
+
+  6\b6.\b.3\b3.\b.8\b83\b3.\b.  i\bim\bma\bap\bp_\b_l\bli\bis\bst\bt_\b_s\bsu\bub\bbs\bsc\bcr\bri\bib\bbe\bed\bd
+
+  Type: boolean
+  Default: no
+
+  This variable configures whether IMAP folder browsing will look for
+  only subscribed folders or all folders.  This can be toggled in the
+  IMAP browser with the _\bt_\bo_\bg_\bg_\bl_\be_\b-_\bs_\bu_\bb_\bs_\bc_\br_\bi_\bb_\be_\bd function.
+
+  6\b6.\b.3\b3.\b.8\b84\b4.\b.  i\bim\bma\bap\bp_\b_p\bpa\bas\bss\bs
+
+  Type: string
+  Default: ""
+
+  Specifies the password for your IMAP account.  If unset, Mutt will
+  prompt you for your password when you invoke the fetch-mail function.
+  W\bWa\bar\brn\bni\bin\bng\bg: you should only use this option when you are on a fairly
+  secure machine, because the superuser can read your muttrc even if you
+  are the only one who can read the file.
+
+  6\b6.\b.3\b3.\b.8\b85\b5.\b.  i\bim\bma\bap\bp_\b_p\bpa\bas\bss\bsi\biv\bve\be
+
+  Type: boolean
+  Default: yes
+
+  When set, mutt will not open new IMAP connections to check for new
+  mail.  Mutt will only check for new mail over existing IMAP
+  connections.  This is useful if you don't want to be prompted to
+  user/password pairs on mutt invocation, or if opening the connection
+  is slow.
+
+  6\b6.\b.3\b3.\b.8\b86\b6.\b.  i\bim\bma\bap\bp_\b_p\bpe\bee\bek\bk
+
+  Type: boolean
+  Default: yes
+
+  If set, mutt will avoid implicitly marking your mail as read whenever
+  you fetch a message from the server. This is generally a good thing,
+  but can make closing an IMAP folder somewhat slower. This option
+  exists to appease speed freaks.
+
+  6\b6.\b.3\b3.\b.8\b87\b7.\b.  i\bim\bma\bap\bp_\b_s\bse\ber\brv\bve\ber\brn\bno\boi\bis\bse\be
+
+  Type: boolean
+  Default: yes
+
+  When set, mutt will display warning messages from the IMAP server as
+  error messages. Since these messages are often harmless, or generated
+  due to configuration problems on the server which are out of the
+  users' hands, you may wish to suppress them at some point.
+
+  6\b6.\b.3\b3.\b.8\b88\b8.\b.  i\bim\bma\bap\bp_\b_u\bus\bse\ber\br
+
+  Type: string
+  Default: ""
+
+  Your login name on the IMAP server.
+
+  This variable defaults to your user name on the local machine.
+
+  6\b6.\b.3\b3.\b.8\b89\b9.\b.  i\bim\bmp\bpl\bli\bic\bci\bit\bt_\b_a\bau\but\bto\bov\bvi\bie\bew\bw
+
+  Type: boolean
+  Default: no
+
+  If set to ``yes'', mutt will look for a mailcap entry with the
+  copiousoutput flag set for _\be_\bv_\be_\br_\by MIME attachment it doesn't have an
+  internal viewer defined for.  If such an entry is found, mutt will use
+  the viewer defined in that entry to convert the body part to text
+  form.
+
+  6\b6.\b.3\b3.\b.9\b90\b0.\b.  i\bin\bnc\bcl\blu\bud\bde\be
+
+  Type: quadoption
+  Default: ask-yes
+
+  Controls whether or not a copy of the message(s) you are replying to
+  is included in your reply.
+
+  6\b6.\b.3\b3.\b.9\b91\b1.\b.  i\bin\bnd\bde\ben\bnt\bt_\b_s\bst\btr\bri\bin\bng\bg
+
+  Type: string
+  Default: "> "
+
+  Specifies the string to prepend to each line of text quoted in a
+  message to which you are replying.  You are strongly encouraged not to
+  change this value, as it tends to agitate the more fanatical netizens.
+
+  6\b6.\b.3\b3.\b.9\b92\b2.\b.  i\bin\bnd\bde\bex\bx_\b_f\bfo\bor\brm\bma\bat\bt
+
+  Type: string
+  Default: "%4C %Z %{%b %d} %-15.15L (%?l?%4l&%4c?) %s"
+
+  This variable allows you to customize the message index display to
+  your personal taste.
+
+  ``Format strings'' are similar to the strings used in the ``C''
+  function printf to format output (see the man page for more detail).
+  The following sequences are defined in Mutt:
+
+     %\b%a\ba address of the author
+
+     %\b%A\bA reply-to address (if present; otherwise: address of author)
+
+     %\b%b\bb filename of the original message folder (think mailBox)
+
+     %\b%B\bB the list to which the letter was sent, or else the folder name
+        (%b).
+
+     %\b%c\bc number of characters (bytes) in the message
+
+     %\b%C\bC current message number
+
+     %\b%d\bd date and time of the message in the format specified by
+        ``date_format'' converted to sender's time zone
+
+     %\b%D\bD date and time of the message in the format specified by
+        ``date_format'' converted to the local time zone
+
+     %\b%e\be current message number in thread
+
+     %\b%E\bE number of messages in current thread
+
+     %\b%f\bf entire From: line (address + real name)
+
+     %\b%F\bF author name, or recipient name if the message is from you
+
+     %\b%g\bg newsgroup name (if compiled with nntp support)
+
+     %\b%i\bi message-id of the current message
+
+     %\b%l\bl number of lines in the message (does not work with maildir, mh,
+        and possibly IMAP folders)
+
+     %\b%L\bL If an address in the To or CC header field matches an address
+        defined by the users ``subscribe'' command, this displays "To
+        <list-name>", otherwise the same as %F.
+
+     %\b%m\bm total number of message in the mailbox
+
+     %\b%M\bM number of hidden messages if the thread is collapsed.
+
+     %\b%N\bN message score
+
+     %\b%n\bn author's real name (or address if missing)
+
+     %\b%O\bO (_O_riginal save folder)  Where mutt would formerly have stashed
+        the message: list name or recipient name if no list
+
+     %\b%s\bs subject of the message
+
+     %\b%S\bS status of the message (N/D/d/!/r/*)
+
+     %\b%t\bt `to:' field (recipients)
+
+     %\b%T\bT the appropriate character from the ``$to_chars'' string
+
+     %\b%u\bu user (login) name of the author
+
+     %\b%v\bv first name of the author, or the recipient if the message is
+        from you
+
+     %\b%W\bW name of organization of author (`organization:' field)
+
+     %\b%y\by `x-label:' field, if present
+
+     %\b%Y\bY `x-label' field, if present, and (1) not at part of a thread
+        tree, (2) at the top of a thread, or (3) `x-label' is different
+        from preceding message's `x-label'.
+
+     %\b%Z\bZ message status flags
+
+     %\b%{\b{f\bfm\bmt\bt}\b}
+        the date and time of the message is converted to sender's time
+        zone, and ``fmt'' is expanded by the library function
+        ``strftime''; a leading bang disables locales
+
+     %\b%[\b[f\bfm\bmt\bt]\b]
+        the date and time of the message is converted to the local time
+        zone, and ``fmt'' is expanded by the library function
+        ``strftime''; a leading bang disables locales
+
+     %\b%(\b(f\bfm\bmt\bt)\b)
+        the local date and time when the message was received.  ``fmt''
+        is expanded by the library function ``strftime''; a leading bang
+        disables locales
+
+     %\b%<\b<f\bfm\bmt\bt>\b>
+        the current local time. ``fmt'' is expanded by the library
+        function ``strftime''; a leading bang disables locales.
+
+     %\b%>\b>X\bX
+        right justify the rest of the string and pad with character "X"
+
+     %\b%|\b|X\bX
+        pad to the end of the line with character "X"
+
+  See also: ````$to_chars''''.
+
+  6\b6.\b.3\b3.\b.9\b93\b3.\b.  i\bin\bne\bew\bws\bs
+
+  Type: path
+  Default: ""
+
+  If set, specifies the program and arguments used to deliver news
+  posted by Mutt.  Otherwise, mutt posts article using current
+  connection to news server.  The following printf-style sequence is
+  understood:
+
+       %s      newsserver name
+
+  Example: set inews="/usr/local/bin/inews -hS"
+
+  6\b6.\b.3\b3.\b.9\b94\b4.\b.  i\bis\bsp\bpe\bel\bll\bl
+
+  Type: path
+  Default: "/usr/bin/ispell"
+
+  How to invoke ispell (GNU's spell-checking software).
+
+  6\b6.\b.3\b3.\b.9\b95\b5.\b.  k\bke\bee\bep\bp_\b_f\bfl\bla\bag\bgg\bge\bed\bd
+
+  Type: boolean
+  Default: no
+
+  If set, read messages marked as flagged will not be moved from your
+  spool mailbox to your ````$mbox'''' mailbox, or as a result of a
+  ````mbox-hook'''' command.
+
+  6\b6.\b.3\b3.\b.9\b96\b6.\b.  l\blo\boc\bca\bal\ble\be
+
+  Type: string
+  Default: "C"
+
+  The locale used by _\bs_\bt_\br_\bf_\bt_\bi_\bm_\be_\b(_\b3_\b) to format dates. Legal values are the
+  strings your system accepts for the locale variable _\bL_\bC_\b__\bT_\bI_\bM_\bE.
+
+  6\b6.\b.3\b3.\b.9\b97\b7.\b.  m\bma\bai\bil\bl_\b_c\bch\bhe\bec\bck\bk
+
+  Type: number
+  Default: 5
+
+  This variable configures how often (in seconds) mutt should look for
+  new mail.
+
+  6\b6.\b.3\b3.\b.9\b98\b8.\b.  m\bma\bai\bil\blc\bca\bap\bp_\b_p\bpa\bat\bth\bh
+
+  Type: string
+  Default: ""
+
+  This variable specifies which files to consult when attempting to
+  display MIME bodies not directly supported by Mutt.
+
+  6\b6.\b.3\b3.\b.9\b99\b9.\b.  m\bma\bai\bil\blc\bca\bap\bp_\b_s\bsa\ban\bni\bit\bti\biz\bze\be
+
+  Type: boolean
+  Default: yes
+
+  If set, mutt will restrict possible characters in mailcap % expandos
+  to a well-defined set of safe characters.  This is the safe setting,
+  but we are not sure it doesn't break some more advanced MIME stuff.
+
+  D\bDO\bON\bN'\b'T\bT C\bCH\bHA\bAN\bNG\bGE\bE T\bTH\bHI\bIS\bS S\bSE\bET\bTT\bTI\bIN\bNG\bG U\bUN\bNL\bLE\bES\bSS\bS Y\bYO\bOU\bU A\bAR\bRE\bE R\bRE\bEA\bAL\bLL\bLY\bY S\bSU\bUR\bRE\bE W\bWH\bHA\bAT\bT Y\bYO\bOU\bU A\bAR\bRE\bE
+  D\bDO\bOI\bIN\bNG\bG!\b!
+
+  6\b6.\b.3\b3.\b.1\b10\b00\b0.\b.  m\bma\bai\bil\bld\bdi\bir\br_\b_t\btr\bra\bas\bsh\bh
+
+  Type: boolean
+  Default: no
+
+  If set, messages marked as deleted will be saved with the maildir
+  (T)rashed flag instead of unlinked.  N\bNO\bOT\bTE\bE:\b: this only applies to
+  maildir-style mailboxes.  Setting it will have no effect on other
+  mailbox types.
+
+  6\b6.\b.3\b3.\b.1\b10\b01\b1.\b.  m\bma\bar\brk\bk_\b_o\bol\bld\bd
+
+  Type: boolean
+  Default: yes
+
+  Controls whether or not mutt marks _\bn_\be_\bw u\bun\bnr\bre\bea\bad\bd messages as _\bo_\bl_\bd if you
+  exit a mailbox without reading them.  With this option set, the next
+  time you start mutt, the messages will show up with an "O" next to
+  them in the index menu, indicating that they are old.
+
+  6\b6.\b.3\b3.\b.1\b10\b02\b2.\b.  m\bma\bar\brk\bke\ber\brs\bs
+
+  Type: boolean
+  Default: yes
+
+  Controls the display of wrapped lines in the internal pager. If set, a
+  ``+'' marker is displayed at the beginning of wrapped lines. Also see
+  the ````$smart_wrap'''' variable.
+
+  6\b6.\b.3\b3.\b.1\b10\b03\b3.\b.  m\bma\bas\bsk\bk
+
+  Type: regular expression
+  Default: "!^\.[^.]"
+
+  A regular expression used in the file browser, optionally preceded by
+  the _\bn_\bo_\bt operator ``!''.  Only files whose names match this mask will
+  be shown. The match is always case-sensitive.
+
+  6\b6.\b.3\b3.\b.1\b10\b04\b4.\b.  m\bmb\bbo\box\bx
+
+  Type: path
+  Default: "~/mbox"
+
+  This specifies the folder into which read mail in your
+  ````$spoolfile'''' folder will be appended.
+
+  6\b6.\b.3\b3.\b.1\b10\b05\b5.\b.  m\bmb\bbo\box\bx_\b_t\bty\byp\bpe\be
+
+  Type: folder magic
+  Default: mbox
+
+  The default mailbox type used when creating new folders. May be any of
+  mbox, MMDF, MH and Maildir.
+
+  6\b6.\b.3\b3.\b.1\b10\b06\b6.\b.  m\bme\bet\bto\boo\bo
+
+  Type: boolean
+  Default: no
+
+  If unset, Mutt will remove your address (see the ``alternates''
+  command) from the list of recipients when replying to a message.
+
+  6\b6.\b.3\b3.\b.1\b10\b07\b7.\b.  m\bme\ben\bnu\bu_\b_s\bsc\bcr\bro\bol\bll\bl
+
+  Type: boolean
+  Default: no
+
+  When _\bs_\be_\bt, menus will be scrolled up or down one line when you attempt
+  to move across a screen boundary.  If _\bu_\bn_\bs_\be_\bt, the screen is cleared and
+  the next or previous page of the menu is displayed (useful for slow
+  links to avoid many redraws).
+
+  6\b6.\b.3\b3.\b.1\b10\b08\b8.\b.  m\bme\bet\bta\ba_\b_k\bke\bey\by
+
+  Type: boolean
+  Default: no
+
+  If set, forces Mutt to interpret keystrokes with the high bit (bit 8)
+  set as if the user had pressed the ESC key and whatever key remains
+  after having the high bit removed.  For example, if the key pressed
+  has an ASCII value of 0xf4, then this is treated as if the user had
+  pressed ESC then ``x''.  This is because the result of removing the
+  high bit from ``0xf4'' is ``0x74'', which is the ASCII character
+  ``x''.
+
+  6\b6.\b.3\b3.\b.1\b10\b09\b9.\b.  m\bmh\bh_\b_p\bpu\bur\brg\bge\be
+
+  Type: boolean
+  Default: no
+
+  When unset, mutt will mimic mh's behaviour and rename deleted messages
+  to _\b,_\b<_\bo_\bl_\bd _\bf_\bi_\bl_\be _\bn_\ba_\bm_\be_\b> in mh folders instead of really deleting them.  If
+  the variable is set, the message files will simply be deleted.
+
+  6\b6.\b.3\b3.\b.1\b11\b10\b0.\b.  m\bmh\bh_\b_s\bse\beq\bq_\b_f\bfl\bla\bag\bgg\bge\bed\bd
+
+  Type: string
+  Default: "flagged"
+
+  The name of the MH sequence used for flagged messages.
+
+  6\b6.\b.3\b3.\b.1\b11\b11\b1.\b.  m\bmh\bh_\b_s\bse\beq\bq_\b_r\bre\bep\bpl\bli\bie\bed\bd
+
+  Type: string
+  Default: "replied"
+
+  The name of the MH sequence used to tag replied messages.
+
+  6\b6.\b.3\b3.\b.1\b11\b12\b2.\b.  m\bmh\bh_\b_s\bse\beq\bq_\b_u\bun\bns\bse\bee\ben\bn
+
+  Type: string
+  Default: "unseen"
+
+  The name of the MH sequence used for unseen messages.
+
+  6\b6.\b.3\b3.\b.1\b11\b13\b3.\b.  m\bmi\bim\bme\be_\b_f\bfo\bor\brw\bwa\bar\brd\bd
+
+  Type: quadoption
+  Default: no
+
+  When set, the message you are forwarding will be attached as a
+  separate MIME part instead of included in the main body of the
+  message.  This is useful for forwarding MIME messages so the receiver
+  can properly view the message as it was delivered to you. If you like
+  to switch between MIME and not MIME from mail to mail, set this
+  variable to ask-no or ask-yes.
+
+  Also see ````$forward_decode'''' and ````$mime_forward_decode''''.
+
+  6\b6.\b.3\b3.\b.1\b11\b14\b4.\b.  m\bmi\bim\bme\be_\b_f\bfo\bor\brw\bwa\bar\brd\bd_\b_d\bde\bec\bco\bod\bde\be
+
+  Type: boolean
+  Default: no
+
+  Controls the decoding of complex MIME messages into text/plain when
+  forwarding a message while ````$mime_forward'''' is _\bs_\be_\bt. Otherwise
+  ````$forward_decode'''' is used instead.
+
+  6\b6.\b.3\b3.\b.1\b11\b15\b5.\b.  m\bmi\bim\bme\be_\b_f\bfo\bor\brw\bwa\bar\brd\bd_\b_r\bre\bes\bst\bt
+
+  Type: quadoption
+  Default: yes
+
+  When forwarding multiple attachments of a MIME message from the
+  recvattach menu, attachments which cannot be decoded in a reasonable
+  manner will be attached to the newly composed message if this option
+  is set.
+
+  6\b6.\b.3\b3.\b.1\b11\b16\b6.\b.  m\bmi\bim\bme\be_\b_s\bsu\bub\bbj\bje\bec\bct\bt
+
+  Type: boolean
+  Default: yes
+
+  If _\bu_\bn_\bs_\be_\bt, 8-bit ``subject:'' line in article header will not be
+  encoded according to RFC2047 to base64.  This is useful when message
+  is Usenet article, because MIME for news is nonstandard feature.
+
+  6\b6.\b.3\b3.\b.1\b11\b17\b7.\b.  m\bmi\bix\bx_\b_e\ben\bnt\btr\bry\by_\b_f\bfo\bor\brm\bma\bat\bt
+
+  Type: string
+  Default: "%4n %c %-16s %a"
+
+  This variable describes the format of a remailer line on the mixmaster
+  chain selection screen.  The following printf-like sequences are
+  supported:
+
+     %\b%n\bn The running number on the menu.
+
+     %\b%c\bc Remailer capabilities.
+
+     %\b%s\bs The remailer's short name.
+
+     %\b%a\ba The remailer's e-mail address.
+
+  6\b6.\b.3\b3.\b.1\b11\b18\b8.\b.  m\bmi\bix\bxm\bma\bas\bst\bte\ber\br
+
+  Type: path
+  Default: "mixmaster"
+
+  This variable contains the path to the Mixmaster binary on your
+  system.  It is used with various sets of parameters to gather the list
+  of known remailers, and to finally send a message through the
+  mixmaster chain.
+
+  6\b6.\b.3\b3.\b.1\b11\b19\b9.\b.  m\bmo\bov\bve\be
+
+  Type: quadoption
+  Default: ask-no
+
+  Controls whether you will be asked to confirm moving read messages
+  from your spool mailbox to your ````$mbox'''' mailbox, or as a result
+  of a ````mbox-hook'''' command.
+
+  6\b6.\b.3\b3.\b.1\b12\b20\b0.\b.  m\bme\bes\bss\bsa\bag\bge\be_\b_f\bfo\bor\brm\bma\bat\bt
+
+  Type: string
+  Default: "%s"
+
+  This is the string displayed in the ``attachment'' menu for
+  attachments of type message/rfc822.  For a full listing of defined
+  printf()-like sequences see the section on ````$index_format''''.
+
+  6\b6.\b.3\b3.\b.1\b12\b21\b1.\b.  n\bna\bar\brr\bro\bow\bw_\b_t\btr\bre\bee\be
+
+  Type: boolean
+  Default: no
+
+  This variable, when set, makes the thread tree narrower, allowing
+  deeper threads to fit on the screen.
+
+  6\b6.\b.3\b3.\b.1\b12\b22\b2.\b.  n\bne\bew\bws\bs_\b_c\bca\bac\bch\bhe\be_\b_d\bdi\bir\br
+
+  Type: path
+  Default: "~/.mutt"
+
+  This variable pointing to directory where Mutt will save cached news
+  articles headers in. If _\bu_\bn_\bs_\be_\bt, headers will not be saved at all and
+  will be reloaded each time when you enter to newsgroup.
+
+  6\b6.\b.3\b3.\b.1\b12\b23\b3.\b.  n\bne\bew\bws\bs_\b_s\bse\ber\brv\bve\ber\br
+
+  Type: string
+  Default: ""
+
+  This variable specifies domain name or address of NNTP server. It
+  defaults to the newsserver specified in the environment variable
+  $NNTPSERVER or contained in the file /etc/nntpserver.  You can also
+  specify username and an alternative port for each newsserver, ie:
+
+  [nntp[s]://][username[:password]@]newsserver[:port]
+
+  6\b6.\b.3\b3.\b.1\b12\b24\b4.\b.  n\bne\bew\bws\bsr\brc\bc
+
+  Type: path
+  Default: "~/.newsrc"
+
+  The file, containing info about subscribed newsgroups - names and
+  indexes of read articles.  The following printf-style sequence is
+  understood:
+
+       %s      newsserver name
+
+  6\b6.\b.3\b3.\b.1\b12\b25\b5.\b.  n\bnn\bnt\btp\bp_\b_c\bco\bon\bnt\bte\bex\bxt\bt
+
+  Type: number
+  Default: 1000
+
+  This variable defines number of articles which will be in index when
+  newsgroup entered.  If active newsgroup have more articles than this
+  number, oldest articles will be ignored.  Also controls how many
+  articles headers will be saved in cache when you quit newsgroup.
+
+  6\b6.\b.3\b3.\b.1\b12\b26\b6.\b.  n\bnn\bnt\btp\bp_\b_l\blo\boa\bad\bd_\b_d\bde\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn
+
+  Type: boolean
+  Default: yes
+
+  This variable controls whether or not descriptions for each newsgroup
+  must be loaded when newsgroup is added to list (first time list
+  loading or new newsgroup adding).
+
+  6\b6.\b.3\b3.\b.1\b12\b27\b7.\b.  n\bnn\bnt\btp\bp_\b_u\bus\bse\ber\br
+
+  Type: string
+  Default: ""
+
+  Your login name on the NNTP server.  If _\bu_\bn_\bs_\be_\bt and NNTP server requires
+  authentification, Mutt will prompt you for your account name when you
+  connect to newsserver.
+
+  6\b6.\b.3\b3.\b.1\b12\b28\b8.\b.  n\bnn\bnt\btp\bp_\b_p\bpa\bas\bss\bs
+
+  Type: string
+  Default: ""
+
+  Your password for NNTP account.
+
+  6\b6.\b.3\b3.\b.1\b12\b29\b9.\b.  n\bnn\bnt\btp\bp_\b_p\bpo\bol\bll\bl
+
+  Type: number
+  Default: 60
+
+  The time in seconds until any operations on newsgroup except post new
+  article will cause recheck for new news.  If set to 0, Mutt will
+  recheck newsgroup on each operation in index (stepping, read article,
+  etc.).
+
+  6\b6.\b.3\b3.\b.1\b13\b30\b0.\b.  n\bnn\bnt\btp\bp_\b_r\bre\bec\bco\bon\bnn\bne\bec\bct\bt
+
+  Type: quadoption
+  Default: ask-yes
+
+  Controls whether or not Mutt will try to reconnect to newsserver when
+  connection lost.
+
+  6\b6.\b.3\b3.\b.1\b13\b31\b1.\b.  p\bpa\bag\bge\ber\br
+
+  Type: path
+  Default: "builtin"
+
+  This variable specifies which pager you would like to use to view
+  messages.  builtin means to use the builtin pager, otherwise this
+  variable should specify the pathname of the external pager you would
+  like to use.
+
+  Using an external pager may have some disadvantages: Additional
+  keystrokes are necessary because you can't call mutt functions
+  directly from the pager, and screen resizes cause lines longer than
+  the screen width to be badly formatted in the help menu.
+
+  6\b6.\b.3\b3.\b.1\b13\b32\b2.\b.  p\bpa\bag\bge\ber\br_\b_c\bco\bon\bnt\bte\bex\bxt\bt
+
+  Type: number
+  Default: 0
+
+  This variable controls the number of lines of context that are given
+  when displaying the next or previous page in the internal pager.  By
+  default, Mutt will display the line after the last one on the screen
+  at the top of the next page (0 lines of context).
+
+  6\b6.\b.3\b3.\b.1\b13\b33\b3.\b.  p\bpa\bag\bge\ber\br_\b_f\bfo\bor\brm\bma\bat\bt
+
+  Type: string
+  Default: "-%Z- %C/%m: %-20.20n   %s"
+
+  This variable controls the format of the one-line message ``status''
+  displayed before each message in either the internal or an external
+  pager.  The valid sequences are listed in the ````$index_format''''
+  section.
+
+  6\b6.\b.3\b3.\b.1\b13\b34\b4.\b.  p\bpa\bag\bge\ber\br_\b_i\bin\bnd\bde\bex\bx_\b_l\bli\bin\bne\bes\bs
+
+  Type: number
+  Default: 0
+
+  Determines the number of lines of a mini-index which is shown when in
+  the pager.  The current message, unless near the top or bottom of the
+  folder, will be roughly one third of the way down this mini-index,
+  giving the reader the context of a few messages before and after the
+  message.  This is useful, for example, to determine how many messages
+  remain to be read in the current thread.  One of the lines is reserved
+  for the status bar from the index, so a _\bp_\ba_\bg_\be_\br_\b__\bi_\bn_\bd_\be_\bx_\b__\bl_\bi_\bn_\be_\bs of 6 will
+  only show 5 lines of the actual index.  A value of 0 results in no
+  index being shown.  If the number of messages in the current folder is
+  less than _\bp_\ba_\bg_\be_\br_\b__\bi_\bn_\bd_\be_\bx_\b__\bl_\bi_\bn_\be_\bs, then the index will only use as many
+  lines as it needs.
+
+  6\b6.\b.3\b3.\b.1\b13\b35\b5.\b.  p\bpa\bag\bge\ber\br_\b_s\bst\bto\bop\bp
+
+  Type: boolean
+  Default: no
+
+  When set, the internal-pager will n\bno\bot\bt move to the next message when
+  you are at the end of a message and invoke the _\bn_\be_\bx_\bt_\b-_\bp_\ba_\bg_\be function.
+
+  6\b6.\b.3\b3.\b.1\b13\b36\b6.\b.  c\bcr\bry\byp\bpt\bt_\b_a\bau\but\bto\bos\bsi\big\bgn\bn
+
+  Type: boolean
+  Default: no
+
+  Setting this variable will cause Mutt to always attempt to
+  cryptographically sign outgoing messages.  This can be overridden by
+  use of the _\bp_\bg_\bp_\b-_\bm_\be_\bn_\bu, when signing is not required or encryption is
+  requested as well. If ````$smime_is_default'''' is set, then OpenSSL
+  is used instead to create S/MIME messages and settings can be
+  overridden by use of the _\bs_\bm_\bi_\bm_\be_\b-_\bm_\be_\bn_\bu.  (Crypto only)
+
+  6\b6.\b.3\b3.\b.1\b13\b37\b7.\b.  c\bcr\bry\byp\bpt\bt_\b_a\bau\but\bto\boe\ben\bnc\bcr\bry\byp\bpt\bt
+
+  Type: boolean
+  Default: no
+
+  Setting this variable will cause Mutt to always attempt to PGP encrypt
+  outgoing messages.  This is probably only useful in connection to the
+  _\bs_\be_\bn_\bd_\b-_\bh_\bo_\bo_\bk command.  It can be overridden by use of the _\bp_\bg_\bp_\b-_\bm_\be_\bn_\bu, when
+  encryption is not required or signing is requested as well.  IF
+  ````$smime_is_default'''' is set, then OpenSSL is used instead to
+  create S/MIME messages and settings can be overridden by use of the
+  _\bs_\bm_\bi_\bm_\be_\b-_\bm_\be_\bn_\bu.  (Crypto only)
+  6\b6.\b.3\b3.\b.1\b13\b38\b8.\b.  p\bpg\bgp\bp_\b_i\big\bgn\bno\bor\bre\be_\b_s\bsu\bub\bbk\bke\bey\bys\bs
+
+  Type: boolean
+  Default: yes
+
+  Setting this variable will cause Mutt to ignore OpenPGP subkeys.
+  Instead, the principal key will inherit the subkeys' capabilities.
+  Unset this if you want to play interesting key selection games.  (PGP
+  only)
+
+  6\b6.\b.3\b3.\b.1\b13\b39\b9.\b.  c\bcr\bry\byp\bpt\bt_\b_r\bre\bep\bpl\bly\bye\ben\bnc\bcr\bry\byp\bpt\bt
+
+  Type: boolean
+  Default: yes
+
+  If set, automatically PGP or OpenSSL encrypt replies to messages which
+  are encrypted.  (Crypto only)
+
+  6\b6.\b.3\b3.\b.1\b14\b40\b0.\b.  c\bcr\bry\byp\bpt\bt_\b_r\bre\bep\bpl\bly\bys\bsi\big\bgn\bn
+
+  Type: boolean
+  Default: no
+
+  If set, automatically PGP or OpenSSL sign replies to messages which
+  are signed.
+
+  N\bNo\bot\bte\be:\b: this does not work on messages that are encrypted a\ban\bnd\bd signed!
+  (Crypto only)
+
+  6\b6.\b.3\b3.\b.1\b14\b41\b1.\b.  c\bcr\bry\byp\bpt\bt_\b_r\bre\bep\bpl\bly\bys\bsi\big\bgn\bne\ben\bnc\bcr\bry\byp\bpt\bte\bed\bd
+
+  Type: boolean
+  Default: no
+
+  If set, automatically PGP or OpenSSL sign replies to messages which
+  are encrypted. This makes sense in combination with
+  ````$crypt_replyencrypt'''', because it allows you to sign all
+  messages which are automatically encrypted.  This works around the
+  problem noted in ````$crypt_replysign'''', that mutt is not able to
+  find out whether an encrypted message is also signed.  (Crypto only)
+
+  6\b6.\b.3\b3.\b.1\b14\b42\b2.\b.  c\bcr\bry\byp\bpt\bt_\b_t\bti\bim\bme\bes\bst\bta\bam\bmp\bp
+
+  Type: boolean
+  Default: yes
+
+  If set, mutt will include a time stamp in the lines surrounding PGP or
+  S/MIME output, so spoofing such lines is more difficult.  If you are
+  using colors to mark these lines, and rely on these, you may unset
+  this setting.  (Crypto only)
+
+  6\b6.\b.3\b3.\b.1\b14\b43\b3.\b.  p\bpg\bgp\bp_\b_u\bus\bse\be_\b_g\bgp\bpg\bg_\b_a\bag\bge\ben\bnt\bt
+
+  Type: boolean
+  Default: no
+
+  If set, mutt will use a possibly-running gpg-agent process.  (PGP
+  only)
+
+  6\b6.\b.3\b3.\b.1\b14\b44\b4.\b.  c\bcr\bry\byp\bpt\bt_\b_v\bve\ber\bri\bif\bfy\by_\b_s\bsi\big\bg
+
+  Type: quadoption
+  Default: yes
+
+  If ``yes'', always attempt to verify PGP or S/MIME signatures.  If
+  ``ask'', ask whether or not to verify the signature.  If ``no'', never
+  attempt to verify cryptographic signatures.  (Crypto only)
+
+  6\b6.\b.3\b3.\b.1\b14\b45\b5.\b.  s\bsm\bmi\bim\bme\be_\b_i\bis\bs_\b_d\bde\bef\bfa\bau\bul\blt\bt
+
+  Type: boolean
+  Default: no
+
+  The default behaviour of mutt is to use PGP on all auto-
+  sign/encryption operations. To override and to use OpenSSL instead
+  this must be set.  However, this has no effect while replying, since
+  mutt will automatically select the same application that was used to
+  sign/encrypt the original message.  (Note that this variable can be
+  overridden by unsetting ``$crypt_autosmime''.)  (S/MIME only)
+
+  6\b6.\b.3\b3.\b.1\b14\b46\b6.\b.  s\bsm\bmi\bim\bme\be_\b_a\bas\bsk\bk_\b_c\bce\ber\brt\bt_\b_l\bla\bab\bbe\bel\bl
+
+  Type: boolean
+  Default: yes
+
+  This flag controls whether you want to be asked to enter a label for a
+  certificate about to be added to the database or not. It is set by
+  default.  (S/MIME only)
+
+  6\b6.\b.3\b3.\b.1\b14\b47\b7.\b.  s\bsm\bmi\bim\bme\be_\b_d\bde\bec\bcr\bry\byp\bpt\bt_\b_u\bus\bse\be_\b_d\bde\bef\bfa\bau\bul\blt\bt_\b_k\bke\bey\by
+
+  Type: boolean
+  Default: yes
+
+  If set (default) this tells mutt to use the default key for
+  decryption. Otherwise, if manage multiple certificate-key-pairs, mutt
+  will try to use the mailbox-address to determine the key to use. It
+  will ask you to supply a key, if it can't find one.  (S/MIME only)
+
+  6\b6.\b.3\b3.\b.1\b14\b48\b8.\b.  p\bpg\bgp\bp_\b_e\ben\bnt\btr\bry\by_\b_f\bfo\bor\brm\bma\bat\bt
+
+  Type: string
+  Default: "%4n %t%f %4l/0x%k %-4a %2c %u"
+
+  This variable allows you to customize the PGP key selection menu to
+  your personal taste. This string is similar to ````$index_format'''',
+  but has its own set of printf()-like sequences:
+
+     %\b%n\bn number
+
+     %\b%k\bk key id
+
+     %\b%u\bu user id
+
+     %\b%a\ba algorithm
+
+     %\b%l\bl key length
+
+     %\b%f\bf flags
+
+     %\b%c\bc capabilities
+
+     %\b%t\bt trust/validity of the key-uid association
+
+     %\b%[\b[<\b<s\bs>\b>]\b]
+        date of the key where <s> is an strftime(3) expression
+
+  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b14\b49\b9.\b.  p\bpg\bgp\bp_\b_g\bgo\boo\bod\bd_\b_s\bsi\big\bgn\bn
+
+  Type: regular expression
+  Default: ""
+
+  If you assign a text to this variable, then a PGP signature is only
+  considered verified if the output from ``$pgp_verify_command''
+  contains the text. Use this variable if the exit code from the command
+  is 0 even for bad signatures.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b15\b50\b0.\b.  p\bpg\bgp\bp_\b_c\bch\bhe\bec\bck\bk_\b_e\bex\bxi\bit\bt
+
+  Type: boolean
+  Default: yes
+
+  If set, mutt will check the exit code of the PGP subprocess when
+  signing or encrypting.  A non-zero exit code means that the subprocess
+  failed.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b15\b51\b1.\b.  p\bpg\bgp\bp_\b_l\blo\bon\bng\bg_\b_i\bid\bds\bs
+
+  Type: boolean
+  Default: no
+
+  If set, use 64 bit PGP key IDs. Unset uses the normal 32 bit Key IDs.
+  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b15\b52\b2.\b.  p\bpg\bgp\bp_\b_r\bre\bet\bta\bai\bin\bna\bab\bbl\ble\be_\b_s\bsi\big\bgs\bs
+
+  Type: boolean
+  Default: no
+
+  If set, signed and encrypted messages will consist of nested
+  multipart/signed and multipart/encrypted body parts.
+
+  This is useful for applications like encrypted and signed mailing
+  lists, where the outer layer (multipart/encrypted) can be easily
+  removed, while the inner multipart/signed part is retained.  (PGP
+  only)
+
+  6\b6.\b.3\b3.\b.1\b15\b53\b3.\b.  p\bpg\bgp\bp_\b_s\bsh\bho\bow\bw_\b_u\bun\bnu\bus\bsa\bab\bbl\ble\be
+
+  Type: boolean
+  Default: yes
+
+  If set, mutt will display non-usable keys on the PGP key selection
+  menu.  This includes keys which have been revoked, have expired, or
+  have been marked as ``disabled'' by the user.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b15\b54\b4.\b.  p\bpg\bgp\bp_\b_s\bsi\big\bgn\bn_\b_a\bas\bs
+
+  Type: string
+  Default: ""
+
+  If you have more than one key pair, this option allows you to specify
+  which of your private keys to use.  It is recommended that you use the
+  keyid form to specify your key (e.g., ``0x00112233'').  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b15\b55\b5.\b.  p\bpg\bgp\bp_\b_s\bst\btr\bri\bic\bct\bt_\b_e\ben\bnc\bc
+
+  Type: boolean
+  Default: yes
+
+  If set, Mutt will automatically encode PGP/MIME signed messages as
+  _\bq_\bu_\bo_\bt_\be_\bd_\b-_\bp_\br_\bi_\bn_\bt_\ba_\bb_\bl_\be.  Please note that unsetting this variable may lead
+  to problems with non-verifyable PGP signatures, so only change this if
+  you know what you are doing.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b15\b56\b6.\b.  p\bpg\bgp\bp_\b_t\bti\bim\bme\beo\bou\but\bt
+
+  Type: number
+  Default: 300
+
+  The number of seconds after which a cached passphrase will expire if
+  not used.  (PGP only)
+  6\b6.\b.3\b3.\b.1\b15\b57\b7.\b.  p\bpg\bgp\bp_\b_s\bso\bor\brt\bt_\b_k\bke\bey\bys\bs
+
+  Type: sort order
+  Default: address
+
+  Specifies how the entries in the `pgp keys' menu are sorted. The
+  following are legal values:
+
+     a\bad\bdd\bdr\bre\bes\bss\bs
+        sort alphabetically by user id
+
+     k\bke\bey\byi\bid\bd
+        sort alphabetically by key id
+
+     d\bda\bat\bte\be
+        sort by key creation date
+
+     t\btr\bru\bus\bst\bt
+        sort by the trust of the key
+
+  If you prefer reverse order of the above values, prefix it with
+  `reverse-'.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b15\b58\b8.\b.  p\bpg\bgp\bp_\b_c\bcr\bre\bea\bat\bte\be_\b_t\btr\bra\bad\bdi\bit\bti\bio\bon\bna\bal\bl
+
+  Type: quadoption
+  Default: no
+
+  This option controls whether Mutt generates old-style inline PGP
+  encrypted or signed messages.
+
+  Note that PGP/MIME will be used automatically for messages which have
+  a character set different from us-ascii, or which consist of more than
+  a single MIME part.
+
+  Also note that using the old-style PGP message format is s\bst\btr\bro\bon\bng\bgl\bly\by
+  d\bde\bep\bpr\bre\bec\bca\bat\bte\bed\bd.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b15\b59\b9.\b.  p\bpg\bgp\bp_\b_a\bau\but\bto\bo_\b_t\btr\bra\bad\bdi\bit\bti\bio\bon\bna\bal\bl
+
+  Type: boolean
+  Default: no
+
+  This option causes Mutt to generate an old-style inline PGP encrypted
+  or signed message when replying to an old-style message, and a
+  PGP/MIME message when replying to a PGP/MIME message.  Note that this
+  option is only meaningful when using ````$crypt_replyencrypt'''',
+  ````$crypt_replysign'''', or ````$crypt_replysignencrypted''''.
+
+  Also note that PGP/MIME will be used automatically for messages which
+  have a character set different from us-ascii, or which consist of more
+  than a single MIME part.
+
+  This option overrides ````$pgp_create_traditional'''' (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b16\b60\b0.\b.  p\bpg\bgp\bp_\b_d\bde\bec\bco\bod\bde\be_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This format strings specifies a command which is used to decode
+  application/pgp attachments.
+
+  The PGP command formats have their own set of printf-like sequences:
+
+     %\b%p\bp Expands to PGPPASSFD=0 when a pass phrase is needed, to an empty
+        string otherwise. Note: This may be used with a %? construct.
+
+     %\b%f\bf Expands to the name of a file containing a message.
+
+     %\b%s\bs Expands to the name of a file containing the signature part of a
+        multipart/signed attachment when verifying it.
+
+     %\b%a\ba The value of ``$pgp_sign_as''.
+
+     %\b%r\br One or more key IDs.
+
+  For examples on how to configure these formats for the various
+  versions of PGP which are floating around, see the pgp*.rc and gpg.rc
+  files in the samples/ subdirectory which has been installed on your
+  system alongside the documentation.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b16\b61\b1.\b.  p\bpg\bgp\bp_\b_g\bge\bet\btk\bke\bey\bys\bs_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is invoked whenever mutt will need public key
+  information.  %r is the only printf-like sequence used with this
+  format.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b16\b62\b2.\b.  p\bpg\bgp\bp_\b_v\bve\ber\bri\bif\bfy\by_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to verify PGP signatures.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b16\b63\b3.\b.  p\bpg\bgp\bp_\b_d\bde\bec\bcr\bry\byp\bpt\bt_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to decrypt a PGP encrypted message.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b16\b64\b4.\b.  p\bpg\bgp\bp_\b_c\bcl\ble\bea\bar\brs\bsi\big\bgn\bn_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This format is used to create a old-style "clearsigned" PGP message.
+  Note that the use of this format is s\bst\btr\bro\bon\bng\bgl\bly\by d\bde\bep\bpr\bre\bec\bca\bat\bte\bed\bd.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b16\b65\b5.\b.  p\bpg\bgp\bp_\b_s\bsi\big\bgn\bn_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to create the detached PGP signature for a
+  multipart/signed PGP/MIME body part.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b16\b66\b6.\b.  p\bpg\bgp\bp_\b_e\ben\bnc\bcr\bry\byp\bpt\bt_\b_s\bsi\big\bgn\bn_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to both sign and encrypt a body part.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b16\b67\b7.\b.  p\bpg\bgp\bp_\b_e\ben\bnc\bcr\bry\byp\bpt\bt_\b_o\bon\bnl\bly\by_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to encrypt a body part without signing it.  (PGP
+  only)
+
+  6\b6.\b.3\b3.\b.1\b16\b68\b8.\b.  p\bpg\bgp\bp_\b_i\bim\bmp\bpo\bor\brt\bt_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to import a key from a message into the user's
+  public key ring.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b16\b69\b9.\b.  p\bpg\bgp\bp_\b_e\bex\bxp\bpo\bor\brt\bt_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to export a public key from the user's key ring.
+  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b17\b70\b0.\b.  p\bpg\bgp\bp_\b_v\bve\ber\bri\bif\bfy\by_\b_k\bke\bey\by_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to verify key information from the key selection
+  menu.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b17\b71\b1.\b.  p\bpg\bgp\bp_\b_l\bli\bis\bst\bt_\b_s\bse\bec\bcr\bri\bin\bng\bg_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to list the secret key ring's contents.  The
+  output format must be analogous to the one used by gpg --list-keys
+  --with-colons.
+
+  This format is also generated by the pgpring utility which comes with
+  mutt.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b17\b72\b2.\b.  p\bpg\bgp\bp_\b_l\bli\bis\bst\bt_\b_p\bpu\bub\bbr\bri\bin\bng\bg_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to list the public key ring's contents.  The
+  output format must be analogous to the one used by gpg --list-keys
+  --with-colons.
+
+  This format is also generated by the pgpring utility which comes with
+  mutt.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b17\b73\b3.\b.  f\bfo\bor\brw\bwa\bar\brd\bd_\b_d\bde\bec\bcr\bry\byp\bpt\bt
+
+  Type: boolean
+  Default: yes
+
+  Controls the handling of encrypted messages when forwarding a message.
+  When set, the outer layer of encryption is stripped off.  This
+  variable is only used if ````$mime_forward'''' is _\bs_\be_\bt and
+  ````$mime_forward_decode'''' is _\bu_\bn_\bs_\be_\bt.  (PGP only)
+
+  6\b6.\b.3\b3.\b.1\b17\b74\b4.\b.  s\bsm\bmi\bim\bme\be_\b_t\bti\bim\bme\beo\bou\but\bt
+
+  Type: number
+  Default: 300
+
+  The number of seconds after which a cached passphrase will expire if
+  not used.  (S/MIME only)
+
+  6\b6.\b.3\b3.\b.1\b17\b75\b5.\b.  s\bsm\bmi\bim\bme\be_\b_e\ben\bnc\bcr\bry\byp\bpt\bt_\b_w\bwi\bit\bth\bh
+
+  Type: string
+  Default: ""
+
+  This sets the algorithm that should be used for encryption.  Valid
+  choices are "des", "des3", "rc2-40", "rc2-64", "rc2-128".  If unset
+  "3des" (TripleDES) is used.  (S/MIME only)
+
+  6\b6.\b.3\b3.\b.1\b17\b76\b6.\b.  s\bsm\bmi\bim\bme\be_\b_k\bke\bey\bys\bs
+
+  Type: path
+  Default: ""
+
+  Since there is no pubring/secring as with PGP, mutt has to handle
+  storage ad retrieval of keys/certs by itself. This is very basic right
+  now, and stores keys and certificates in two different directories,
+  both named as the hash-value retrieved from OpenSSL. There is an index
+  file which contains mailbox-address keyid pair, and which can be
+  manually edited. This one points to the location of the private keys.
+  (S/MIME only)
+
+  6\b6.\b.3\b3.\b.1\b17\b77\b7.\b.  s\bsm\bmi\bim\bme\be_\b_c\bca\ba_\b_l\blo\boc\bca\bat\bti\bio\bon\bn
+
+  Type: path
+  Default: ""
+
+  This variable contains the name of either a directory, or a file which
+  contains trusted certificates for use with OpenSSL.  (S/MIME only)
+
+  6\b6.\b.3\b3.\b.1\b17\b78\b8.\b.  s\bsm\bmi\bim\bme\be_\b_c\bce\ber\brt\bti\bif\bfi\bic\bca\bat\bte\bes\bs
+
+  Type: path
+  Default: ""
+
+  Since there is no pubring/secring as with PGP, mutt has to handle
+  storage and retrieval of keys by itself. This is very basic right now,
+  and keys and certificates are stored in two different directories,
+  both named as the hash-value retrieved from OpenSSL. There is an index
+  file which contains mailbox-address keyid pairs, and which can be
+  manually edited. This one points to the location of the certificates.
+  (S/MIME only)
+
+  6\b6.\b.3\b3.\b.1\b17\b79\b9.\b.  s\bsm\bmi\bim\bme\be_\b_d\bde\bec\bcr\bry\byp\bpt\bt_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This format string specifies a command which is used to decrypt
+  application/x-pkcs7-mime attachments.
+
+  The OpenSSL command formats have their own set of printf-like
+  sequences similar to PGP's:
+     %\b%f\bf Expands to the name of a file containing a message.
+
+     %\b%s\bs Expands to the name of a file containing the signature part of a
+        multipart/signed attachment when verifying it.
+
+     %\b%k\bk The key-pair specified with ``$smime_default_key''
+
+     %\b%c\bc One or more certificate IDs.
+
+     %\b%a\ba The algorithm used for encryption.
+
+     %\b%C\bC CA location:  Depending on whether ``$smime_ca_location'' points
+        to a directory or file, this expands to "-CApath
+        ``$smime_ca_location''" or "-CAfile ``$smime_ca_location''".
+
+  For examples on how to configure these formats, see the smime.rc in
+  the samples/ subdirectory which has been installed on your system
+  alongside the documentation.  (S/MIME only)
+
+  6\b6.\b.3\b3.\b.1\b18\b80\b0.\b.  s\bsm\bmi\bim\bme\be_\b_v\bve\ber\bri\bif\bfy\by_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to verify S/MIME signatures of type
+  multipart/signed.  (S/MIME only)
+
+  6\b6.\b.3\b3.\b.1\b18\b81\b1.\b.  s\bsm\bmi\bim\bme\be_\b_v\bve\ber\bri\bif\bfy\by_\b_o\bop\bpa\baq\bqu\bue\be_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to verify S/MIME signatures of type
+  application/x-pkcs7-mime.  (S/MIME only)
+
+  6\b6.\b.3\b3.\b.1\b18\b82\b2.\b.  s\bsm\bmi\bim\bme\be_\b_s\bsi\big\bgn\bn_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to created S/MIME signatures of type
+  multipart/signed, which can be read by all mail clients.  (S/MIME
+  only)
+
+  6\b6.\b.3\b3.\b.1\b18\b83\b3.\b.  s\bsm\bmi\bim\bme\be_\b_s\bsi\big\bgn\bn_\b_o\bop\bpa\baq\bqu\bue\be_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to created S/MIME signatures of type
+  application/x-pkcs7-signature, which can only be handled by mail
+  clients supporting the S/MIME extension.  (S/MIME only)
+
+  6\b6.\b.3\b3.\b.1\b18\b84\b4.\b.  s\bsm\bmi\bim\bme\be_\b_e\ben\bnc\bcr\bry\byp\bpt\bt_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to create encrypted S/MIME messages.  (S/MIME
+  only)
+
+  6\b6.\b.3\b3.\b.1\b18\b85\b5.\b.  s\bsm\bmi\bim\bme\be_\b_p\bpk\bk7\b7o\bou\but\bt_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to extract PKCS7 structures of S/MIME signatures,
+  in order to extract the public X509 certificate(s).  (S/MIME only)
+
+  6\b6.\b.3\b3.\b.1\b18\b86\b6.\b.  s\bsm\bmi\bim\bme\be_\b_g\bge\bet\bt_\b_c\bce\ber\brt\bt_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to extract X509 certificates from a PKCS7
+  structure.  (S/MIME only)
+
+  6\b6.\b.3\b3.\b.1\b18\b87\b7.\b.  s\bsm\bmi\bim\bme\be_\b_g\bge\bet\bt_\b_s\bsi\big\bgn\bne\ber\br_\b_c\bce\ber\brt\bt_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to extract only the signers X509 certificate from
+  a S/MIME signature, so that the certificate's owner may get compared
+  to the email's (S/MIME only)
+
+  6\b6.\b.3\b3.\b.1\b18\b88\b8.\b.  s\bsm\bmi\bim\bme\be_\b_i\bim\bmp\bpo\bor\brt\bt_\b_c\bce\ber\brt\bt_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to import a certificate via smime_keys.  (S/MIME
+  only)
+
+  6\b6.\b.3\b3.\b.1\b18\b89\b9.\b.  s\bsm\bmi\bim\bme\be_\b_g\bge\bet\bt_\b_c\bce\ber\brt\bt_\b_e\bem\bma\bai\bil\bl_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: string
+  Default: ""
+
+  This command is used to extract the mail address(es) used for storing
+  X509 certificates, and for verification purposes (to check whether the
+  certificate was issued for the sender's mailbox).  (S/MIME only)
+
+  6\b6.\b.3\b3.\b.1\b19\b90\b0.\b.  s\bsm\bmi\bim\bme\be_\b_d\bde\bef\bfa\bau\bul\blt\bt_\b_k\bke\bey\by
+
+  Type: string
+  Default: ""
+
+  This is the default key-pair to use for signing. This must be set to
+  the keyid (the hash-value that OpenSSL generates) to work properly
+  (S/MIME only)
+
+  6\b6.\b.3\b3.\b.1\b19\b91\b1.\b.  s\bss\bsl\bl_\b_s\bst\bta\bar\brt\btt\btl\bls\bs
+
+  Type: quadoption
+  Default: yes
+
+  If set (the default), mutt will attempt to use STARTTLS on servers
+  advertising the capability. When unset, mutt will not attempt to use
+  STARTTLS regardless of the server's capabilities.
+
+  6\b6.\b.3\b3.\b.1\b19\b92\b2.\b.  c\bce\ber\brt\bti\bif\bfi\bic\bca\bat\bte\be_\b_f\bfi\bil\ble\be
+
+  Type: path
+  Default: ""
+
+  This variable specifies the file where the certificates you trust are
+  saved. When an unknown certificate is encountered, you are asked if
+  you accept it or not. If you accept it, the certificate can also be
+  saved in this file and further connections are automatically accepted.
+
+  You can also manually add CA certificates in this file. Any server
+  certificate that is signed with one of these CA certificates are also
+  automatically accepted.
+
+  Example: set certificate_file=~/.mutt/certificates
+
+  6\b6.\b.3\b3.\b.1\b19\b93\b3.\b.  s\bss\bsl\bl_\b_u\bus\bse\bes\bsy\bys\bst\bte\bem\bmc\bce\ber\brt\bts\bs
+
+  Type: boolean
+  Default: yes
+
+  If set to _\by_\be_\bs, mutt will use CA certificates in the system-wide
+  certificate store when checking if server certificate is signed by a
+  trusted CA.
+
+  6\b6.\b.3\b3.\b.1\b19\b94\b4.\b.  e\ben\bnt\btr\bro\bop\bpy\by_\b_f\bfi\bil\ble\be
+
+  Type: path
+  Default: ""
+
+  The file which includes random data that is used to initialize SSL
+  library functions.
+
+  6\b6.\b.3\b3.\b.1\b19\b95\b5.\b.  s\bss\bsl\bl_\b_u\bus\bse\be_\b_s\bss\bsl\blv\bv2\b2
+
+  Type: boolean
+  Default: yes
+
+  This variables specifies whether to attempt to use SSLv2 in the SSL
+  authentication process.
+
+  6\b6.\b.3\b3.\b.1\b19\b96\b6.\b.  s\bss\bsl\bl_\b_u\bus\bse\be_\b_s\bss\bsl\blv\bv3\b3
+
+  Type: boolean
+  Default: yes
+
+  This variables specifies whether to attempt to use SSLv3 in the SSL
+  authentication process.
+
+  6\b6.\b.3\b3.\b.1\b19\b97\b7.\b.  s\bss\bsl\bl_\b_u\bus\bse\be_\b_t\btl\bls\bsv\bv1\b1
+
+  Type: boolean
+  Default: yes
+
+  This variables specifies whether to attempt to use TLSv1 in the SSL
+  authentication process.
+
+  6\b6.\b.3\b3.\b.1\b19\b98\b8.\b.  p\bpi\bip\bpe\be_\b_s\bsp\bpl\bli\bit\bt
+
+  Type: boolean
+  Default: no
+
+  Used in connection with the _\bp_\bi_\bp_\be_\b-_\bm_\be_\bs_\bs_\ba_\bg_\be command and the ``tag-
+  prefix'' operator.  If this variable is unset, when piping a list of
+  tagged messages Mutt will concatenate the messages and will pipe them
+  as a single folder.  When set, Mutt will pipe the messages one by one.
+  In both cases the messages are piped in the current sorted order, and
+  the ````$pipe_sep'''' separator is added after each message.
+
+  6\b6.\b.3\b3.\b.1\b19\b99\b9.\b.  p\bpi\bip\bpe\be_\b_d\bde\bec\bco\bod\bde\be
+
+  Type: boolean
+  Default: no
+
+  Used in connection with the _\bp_\bi_\bp_\be_\b-_\bm_\be_\bs_\bs_\ba_\bg_\be command.  When unset, Mutt
+  will pipe the messages without any preprocessing. When set, Mutt will
+  weed headers and will attempt to PGP/MIME decode the messages first.
+
+  6\b6.\b.3\b3.\b.2\b20\b00\b0.\b.  p\bpi\bip\bpe\be_\b_s\bse\bep\bp
+
+  Type: string
+  Default: "\n"
+
+  The separator to add between messages when piping a list of tagged
+  messages to an external Unix command.
+
+  6\b6.\b.3\b3.\b.2\b20\b01\b1.\b.  p\bpo\bop\bp_\b_a\bau\but\bth\bhe\ben\bnt\bti\bic\bca\bat\bto\bor\brs\bs
+
+  Type: string
+  Default: ""
+
+  This is a colon-delimited list of authentication methods mutt may
+  attempt to use to log in to an POP server, in the order mutt should
+  try them.  Authentication methods are either 'user', 'apop' or any
+  SASL mechanism, eg 'digest-md5', 'gssapi' or 'cram-md5'.  This
+  parameter is case-insensitive. If this parameter is unset (the
+  default) mutt will try all available methods, in order from most-
+  secure to least-secure.
+
+  Example: set pop_authenticators="digest-md5:apop:user"
+
+  6\b6.\b.3\b3.\b.2\b20\b02\b2.\b.  p\bpo\bop\bp_\b_a\bau\but\bth\bh_\b_t\btr\bry\by_\b_a\bal\bll\bl
+
+  Type: boolean
+  Default: yes
+
+  If set, Mutt will try all available methods. When unset, Mutt will
+  only fall back to other authentication methods if the previous methods
+  are unavailable. If a method is available but authentication fails,
+  Mutt will not connect to the POP server.
+
+  6\b6.\b.3\b3.\b.2\b20\b03\b3.\b.  p\bpo\bop\bp_\b_c\bch\bhe\bec\bck\bki\bin\bnt\bte\ber\brv\bva\bal\bl
+
+  Type: number
+  Default: 60
+
+  This variable configures how often (in seconds) POP should look for
+  new mail.
+
+  6\b6.\b.3\b3.\b.2\b20\b04\b4.\b.  p\bpo\bop\bp_\b_d\bde\bel\ble\bet\bte\be
+
+  Type: quadoption
+  Default: ask-no
+
+  If set, Mutt will delete successfully downloaded messages from the POP
+  server when using the fetch-mail function.  When unset, Mutt will
+  download messages but also leave them on the POP server.
+
+  6\b6.\b.3\b3.\b.2\b20\b05\b5.\b.  p\bpo\bop\bp_\b_h\bho\bos\bst\bt
+
+  Type: string
+  Default: ""
+
+  The name of your POP server for the fetch-mail function.  You can also
+  specify an alternative port, username and password, ie:
+
+  [pop[s]://][username[:password]@]popserver[:port]
+
+  6\b6.\b.3\b3.\b.2\b20\b06\b6.\b.  p\bpo\bop\bp_\b_l\bla\bas\bst\bt
+
+  Type: boolean
+  Default: no
+
+  If this variable is set, mutt will try to use the "LAST" POP command
+  for retrieving only unread messages from the POP server when using the
+  fetch-mail function.
+
+  6\b6.\b.3\b3.\b.2\b20\b07\b7.\b.  p\bpo\bop\bp_\b_r\bre\bec\bco\bon\bnn\bne\bec\bct\bt
+
+  Type: quadoption
+  Default: ask-yes
+
+  Controls whether or not Mutt will try to reconnect to POP server when
+  connection lost.
+
+  6\b6.\b.3\b3.\b.2\b20\b08\b8.\b.  p\bpo\bop\bp_\b_u\bus\bse\ber\br
+
+  Type: string
+  Default: ""
+
+  Your login name on the POP server.
+
+  This variable defaults to your user name on the local machine.
+
+  6\b6.\b.3\b3.\b.2\b20\b09\b9.\b.  p\bpo\bop\bp_\b_p\bpa\bas\bss\bs
+
+  Type: string
+  Default: ""
+
+  Specifies the password for your POP account.  If unset, Mutt will
+  prompt you for your password when you open POP mailbox.  W\bWa\bar\brn\bni\bin\bng\bg: you
+  should only use this option when you are on a fairly secure machine,
+  because the superuser can read your muttrc even if you are the only
+  one who can read the file.
+
+  6\b6.\b.3\b3.\b.2\b21\b10\b0.\b.  p\bpo\bos\bst\bt_\b_i\bin\bnd\bde\ben\bnt\bt_\b_s\bst\btr\bri\bin\bng\bg
+
+  Type: string
+  Default: ""
+
+  Similar to the ````$attribution'''' variable, Mutt will append this
+  string after the inclusion of a message which is being replied to.
+
+  6\b6.\b.3\b3.\b.2\b21\b11\b1.\b.  p\bpo\bos\bst\bt_\b_m\bmo\bod\bde\ber\bra\bat\bte\bed\bd
+
+  Type: quadoption
+  Default: ask-yes
+
+  If set to _\by_\be_\bs, Mutt will post article to newsgroup that have not
+  permissions to posting (e.g. moderated).  N\bNo\bot\bte\be:\b: if newsserver does not
+  support posting to that newsgroup or totally read-only, that posting
+  will not have an effect.
+
+  6\b6.\b.3\b3.\b.2\b21\b12\b2.\b.  p\bpo\bos\bst\btp\bpo\bon\bne\be
+
+  Type: quadoption
+  Default: ask-yes
+
+  Controls whether or not messages are saved in the ````$postponed''''
+  mailbox when you elect not to send immediately.
+
+  6\b6.\b.3\b3.\b.2\b21\b13\b3.\b.  p\bpo\bos\bst\btp\bpo\bon\bne\bed\bd
+
+  Type: path
+  Default: "~/postponed"
+
+  Mutt allows you to indefinitely ````postpone'' sending a message''
+  which you are editing.  When you choose to postpone a message, Mutt
+  saves it in the mailbox specified by this variable.  Also see the
+  ````$postpone'''' variable.
+
+  6\b6.\b.3\b3.\b.2\b21\b14\b4.\b.  p\bpr\bre\bec\bco\bon\bnn\bne\bec\bct\bt
+
+  Type: string
+  Default: ""
+
+  If set, a shell command to be executed if mutt fails to establish a
+  connection to the server. This is useful for setting up secure
+  connections, e.g. with ssh(1). If the command returns a  nonzero
+  status, mutt gives up opening the server. Example:
+
+  preconnect="ssh -f -q -L 1234:mailhost.net:143 mailhost.net sleep 20 <
+  /dev/null > /dev/null"
+
+  Mailbox 'foo' on mailhost.net can now be reached as
+  '{localhost:1234}foo'.
+
+  NOTE: For this example to work, you must be able to log in to the
+  remote machine without having to enter a password.
+
+  6\b6.\b.3\b3.\b.2\b21\b15\b5.\b.  p\bpr\bri\bin\bnt\bt
+
+  Type: quadoption
+  Default: ask-no
+
+  Controls whether or not Mutt asks for confirmation before printing.
+  This is useful for people (like me) who accidentally hit ``p'' often.
+
+  6\b6.\b.3\b3.\b.2\b21\b16\b6.\b.  p\bpr\bri\bin\bnt\bt_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: path
+  Default: "lpr"
+
+  This specifies the command pipe that should be used to print messages.
+
+  6\b6.\b.3\b3.\b.2\b21\b17\b7.\b.  p\bpr\bri\bin\bnt\bt_\b_d\bde\bec\bco\bod\bde\be
+
+  Type: boolean
+  Default: yes
+
+  Used in connection with the print-message command.  If this option is
+  set, the message is decoded before it is passed to the external
+  command specified by ``$print_command''.  If this option is unset, no
+  processing will be applied to the message when printing it.  The
+  latter setting may be useful if you are using some advanced printer
+  filter which is able to properly format e-mail messages for printing.
+
+  6\b6.\b.3\b3.\b.2\b21\b18\b8.\b.  p\bpr\bri\bin\bnt\bt_\b_s\bsp\bpl\bli\bit\bt
+
+  Type: boolean
+  Default: no
+
+  Used in connection with the print-message command.  If this option is
+  set, the command specified by ``$print_command'' is executed once for
+  each message which is to be printed.  If this option is unset, the
+  command specified by ``$print_command'' is executed only once, and all
+  the messages are concatenated, with a form feed as the message
+  separator.
+
+  Those who use the e\ben\bns\bsc\bcr\bri\bip\bpt\bt(1) program's mail-printing mode will most
+  likely want to set this option.
+
+  6\b6.\b.3\b3.\b.2\b21\b19\b9.\b.  p\bpr\bro\bom\bmp\bpt\bt_\b_a\baf\bft\bte\ber\br
+
+  Type: boolean
+  Default: yes
+
+  If you use an _\be_\bx_\bt_\be_\br_\bn_\ba_\bl ````$pager'''', setting this variable will
+  cause Mutt to prompt you for a command when the pager exits rather
+  than returning to the index menu.  If unset, Mutt will return to the
+  index menu when the external pager exits.
+
+  6\b6.\b.3\b3.\b.2\b22\b20\b0.\b.  q\bqu\bue\ber\bry\by_\b_c\bco\bom\bmm\bma\ban\bnd\bd
+
+  Type: path
+  Default: ""
+
+  This specifies the command that mutt will use to make external address
+  queries.  The string should contain a %s, which will be substituted
+  with the query string the user types.  See ````query'''' for more
+  information.
+
+  6\b6.\b.3\b3.\b.2\b22\b21\b1.\b.  q\bqu\bui\bit\bt
+
+  Type: quadoption
+  Default: yes
+
+  This variable controls whether ``quit'' and ``exit'' actually quit
+  from mutt.  If it set to yes, they do quit, if it is set to no, they
+  have no effect, and if it is set to ask-yes or ask-no, you are
+  prompted for confirmation when you try to quit.
+
+  6\b6.\b.3\b3.\b.2\b22\b22\b2.\b.  q\bqu\buo\bot\bte\be_\b_r\bre\beg\bge\bex\bxp\bp
+
+  Type: regular expression
+  Default: "^([ \t]*[|>:}#])+"
+
+  A regular expression used in the internal-pager to determine quoted
+  sections of text in the body of a message.
+
+  N\bNo\bot\bte\be:\b: In order to use the _\bq_\bu_\bo_\bt_\be_\bdx\bx patterns in the internal pager, you
+  need to set this to a regular expression that matches _\be_\bx_\ba_\bc_\bt_\bl_\by the
+  quote characters at the beginning of quoted lines.
+
+  6\b6.\b.3\b3.\b.2\b22\b23\b3.\b.  r\bre\bea\bad\bd_\b_i\bin\bnc\bc
+
+  Type: number
+  Default: 10
+
+  If set to a value greater than 0, Mutt will display which message it
+  is currently on when reading a mailbox.  The message is printed after
+  _\br_\be_\ba_\bd_\b__\bi_\bn_\bc messages have been read (e.g., if set to 25, Mutt will print
+  a message when it reads message 25, and then again when it gets to
+  message 50).  This variable is meant to indicate progress when reading
+  large mailboxes which may take some time.  When set to 0, only a
+  single message will appear before the reading the mailbox.
+
+  Also see the ````$write_inc'''' variable.
+
+  6\b6.\b.3\b3.\b.2\b22\b24\b4.\b.  r\bre\bea\bad\bd_\b_o\bon\bnl\bly\by
+
+  Type: boolean
+  Default: no
+
+  If set, all folders are opened in read-only mode.
+
+  6\b6.\b.3\b3.\b.2\b22\b25\b5.\b.  r\bre\bea\bal\bln\bna\bam\bme\be
+
+  Type: string
+  Default: ""
+
+  This variable specifies what "real" or "personal" name should be used
+  when sending messages.
+
+  By default, this is the GECOS field from /etc/passwd.  Note that this
+  variable will _\bn_\bo_\bt be used when the user has set a real name in the
+  ``$from'' variable.
+
+  6\b6.\b.3\b3.\b.2\b22\b26\b6.\b.  r\bre\bec\bca\bal\bll\bl
+
+  Type: quadoption
+  Default: ask-yes
+
+  Controls whether or not you are prompted to recall postponed messages
+  when composing a new message.  Also see ````$postponed''''.
+
+  Setting this variable to ``yes'' is not generally useful, and thus not
+  recommended.
+
+  6\b6.\b.3\b3.\b.2\b22\b27\b7.\b.  r\bre\bec\bco\bor\brd\bd
+
+  Type: path
+  Default: ""
+
+  This specifies the file into which your outgoing messages should be
+  appended.  (This is meant as the primary method for saving a copy of
+  your messages, but another way to do this is using the ````my_hdr''''
+  command to create a _\bB_\bc_\bc_\b: field with your email address in it.)
+
+  The value of _\b`_\b`_\b$_\br_\be_\bc_\bo_\br_\bd_\b'_\b' is overridden by the ````$force_name'''' and
+  ````$save_name'''' variables, and the ````fcc-hook'''' command.
+
+  6\b6.\b.3\b3.\b.2\b22\b28\b8.\b.  r\bre\bep\bpl\bly\by_\b_r\bre\beg\bge\bex\bxp\bp
+
+  Type: regular expression
+  Default: "^(re([\[0-9\]+])*|aw):[ \t]*"
+
+  A regular expression used to recognize reply messages when threading
+  and replying. The default value corresponds to the English "Re:" and
+  the German "Aw:".
+
+  6\b6.\b.3\b3.\b.2\b22\b29\b9.\b.  r\bre\bep\bpl\bly\by_\b_s\bse\bel\blf\bf
+
+  Type: boolean
+  Default: no
+
+  If unset and you are replying to a message sent by you, Mutt will
+  assume that you want to reply to the recipients of that message rather
+  than to yourself.
+  6\b6.\b.3\b3.\b.2\b23\b30\b0.\b.  r\bre\bep\bpl\bly\by_\b_t\bto\bo
+
+  Type: quadoption
+  Default: ask-yes
+
+  If set, Mutt will ask you if you want to use the address listed in the
+  Reply-To: header field when replying to a message.  If you answer no,
+  it will use the address in the From: header field instead.  This
+  option is useful for reading a mailing list that sets the Reply-To:
+  header field to the list address and you want to send a private
+  message to the author of a message.
+
+  6\b6.\b.3\b3.\b.2\b23\b31\b1.\b.  r\bre\bes\bso\bol\blv\bve\be
+
+  Type: boolean
+  Default: yes
+
+  When set, the cursor will be automatically advanced to the next
+  (possibly undeleted) message whenever a command that modifies the
+  current message is executed.
+
+  6\b6.\b.3\b3.\b.2\b23\b32\b2.\b.  r\bre\bev\bve\ber\brs\bse\be_\b_a\bal\bli\bia\bas\bs
+
+  Type: boolean
+  Default: no
+
+  This variable controls whether or not Mutt will display the "personal"
+  name from your aliases in the index menu if it finds an alias that
+  matches the message's sender.  For example, if you have the following
+  alias:
+
+       alias juser abd30425@somewhere.net (Joe User)
+
+  and then you receive mail which contains the following header:
+
+       From: abd30425@somewhere.net
+
+  It would be displayed in the index menu as ``Joe User'' instead of
+  ``abd30425@somewhere.net.''  This is useful when the person's e-mail
+  address is not human friendly (like CompuServe addresses).
+
+  6\b6.\b.3\b3.\b.2\b23\b33\b3.\b.  r\bre\bev\bve\ber\brs\bse\be_\b_n\bna\bam\bme\be
+
+  Type: boolean
+  Default: no
+  It may sometimes arrive that you receive mail to a certain machine,
+  move the messages to another machine, and reply to some the messages
+  from there.  If this variable is set, the default _\bF_\br_\bo_\bm_\b: line of the
+  reply messages is built using the address where you received the
+  messages you are replying to.  If the variable is unset, the _\bF_\br_\bo_\bm_\b:
+  line will use your address on the current machine.
+
+  6\b6.\b.3\b3.\b.2\b23\b34\b4.\b.  r\bre\bev\bve\ber\brs\bse\be_\b_r\bre\bea\bal\bln\bna\bam\bme\be
+
+  Type: boolean
+  Default: yes
+
+  This variable fine-tunes the behaviour of the ``reverse_name''
+  feature.  When it is set, mutt will use the address from incoming
+  messages as-is, possibly including eventual real names.  When it is
+  unset, mutt will override any such real names with the setting of the
+  ``realname'' variable.
+
+  6\b6.\b.3\b3.\b.2\b23\b35\b5.\b.  r\brf\bfc\bc2\b20\b04\b47\b7_\b_p\bpa\bar\bra\bam\bme\bet\bte\ber\brs\bs
+
+  Type: boolean
+  Default: no
+
+  When this variable is set, Mutt will decode RFC-2047-encoded MIME
+  parameters. You want to set this variable when mutt suggests you to
+  save attachments to files named like this:
+  =?iso-8859-1?Q?file=5F=E4=5F991116=2Ezip?=
+
+  When this variable is set interactively, the change doesn't have the
+  desired effect before you have changed folders.
+
+  Note that this use of RFC 2047's encoding is explicitly, prohibited by
+  the standard, but nevertheless encountered in the wild.  Also note
+  that setting this parameter will _\bn_\bo_\bt have the effect that mutt
+  _\bg_\be_\bn_\be_\br_\ba_\bt_\be_\bs this kind of encoding.  Instead, mutt will unconditionally
+  use the encoding specified in RFC 2231.
+
+  6\b6.\b.3\b3.\b.2\b23\b36\b6.\b.  s\bsa\bav\bve\be_\b_a\bad\bdd\bdr\bre\bes\bss\bs
+
+  Type: boolean
+  Default: no
+
+  If set, mutt will take the sender's full address when choosing a
+  default folder for saving a mail. If ````$save_name'''' or
+  ````$force_name'''' is set too, the selection of the fcc folder will
+  be changed as well.
+
+  6\b6.\b.3\b3.\b.2\b23\b37\b7.\b.  s\bsa\bav\bve\be_\b_e\bem\bmp\bpt\bty\by
+
+  Type: boolean
+  Default: yes
+
+  When unset, mailboxes which contain no saved messages will be removed
+  when closed (the exception is ````$spoolfile'''' which is never
+  removed).  If set, mailboxes are never removed.
+
+  N\bNo\bot\bte\be:\b: This only applies to mbox and MMDF folders, Mutt does not delete
+  MH and Maildir directories.
+
+  6\b6.\b.3\b3.\b.2\b23\b38\b8.\b.  s\bsa\bav\bve\be_\b_n\bna\bam\bme\be
+
+  Type: boolean
+  Default: no
+
+  This variable controls how copies of outgoing messages are saved.
+  When set, a check is made to see if a mailbox specified by the
+  recipient address exists (this is done by searching for a mailbox in
+  the ````$folder'''' directory with the _\bu_\bs_\be_\br_\bn_\ba_\bm_\be part of the recipient
+  address).  If the mailbox exists, the outgoing message will be saved
+  to that mailbox, otherwise the message is saved to the ````$record''''
+  mailbox.
+
+  Also see the ````$force_name'''' variable.
+
+  6\b6.\b.3\b3.\b.2\b23\b39\b9.\b.  s\bsc\bco\bor\bre\be
+
+  Type: boolean
+  Default: yes
+
+  When this variable is _\bu_\bn_\bs_\be_\bt, scoring is turned off.  This can be
+  useful to selectively disable scoring for certain folders when the
+  ````$score_threshold_delete'''' variable and friends are used.
+
+  6\b6.\b.3\b3.\b.2\b24\b40\b0.\b.  s\bsc\bco\bor\bre\be_\b_t\bth\bhr\bre\bes\bsh\bho\bol\bld\bd_\b_d\bde\bel\ble\bet\bte\be
+
+  Type: number
+  Default: -1
+
+  Messages which have been assigned a score equal to or lower than the
+  value of this variable are automatically marked for deletion by mutt.
+  Since mutt scores are always greater than or equal to zero, the
+  default setting of this variable will never mark a message for
+  deletion.
+
+  6\b6.\b.3\b3.\b.2\b24\b41\b1.\b.  s\bsc\bco\bor\bre\be_\b_t\bth\bhr\bre\bes\bsh\bho\bol\bld\bd_\b_f\bfl\bla\bag\bg
+
+  Type: number
+  Default: 9999
+
+  Messages which have been assigned a score greater than or equal to
+  this variable's value are automatically marked "flagged".
+
+  6\b6.\b.3\b3.\b.2\b24\b42\b2.\b.  s\bsc\bco\bor\bre\be_\b_t\bth\bhr\bre\bes\bsh\bho\bol\bld\bd_\b_r\bre\bea\bad\bd
+
+  Type: number
+  Default: -1
+  Messages which have been assigned a score equal to or lower than the
+  value of this variable are automatically marked as read by mutt.
+  Since mutt scores are always greater than or equal to zero, the
+  default setting of this variable will never mark a message read.
+
+  6\b6.\b.3\b3.\b.2\b24\b43\b3.\b.  s\bse\ben\bnd\bd_\b_c\bch\bha\bar\brs\bse\bet\bt
+
+  Type: string
+  Default: "us-ascii:iso-8859-1:utf-8"
+
+  A list of character sets for outgoing messages. Mutt will use the
+  first character set into which the text can be converted exactly.  If
+  your ````$charset'''' is not iso-8859-1 and recipients may not
+  understand UTF-8, it is advisable to include in the list an
+  appropriate widely used standard character set (such as iso-8859-2,
+  koi8-r or iso-2022-jp) either instead of or after "iso-8859-1".
+
+  6\b6.\b.3\b3.\b.2\b24\b44\b4.\b.  s\bse\ben\bnd\bdm\bma\bai\bil\bl
+
+  Type: path
+  Default: "/usr/sbin/sendmail -oem -oi"
+
+  Specifies the program and arguments used to deliver mail sent by Mutt.
+  Mutt expects that the specified program interprets additional
+  arguments as recipient addresses.
+
+  6\b6.\b.3\b3.\b.2\b24\b45\b5.\b.  s\bse\ben\bnd\bdm\bma\bai\bil\bl_\b_w\bwa\bai\bit\bt
+
+  Type: number
+  Default: 0
+
+  Specifies the number of seconds to wait for the ````$sendmail''''
+  process to finish before giving up and putting delivery in the
+  background.
+
+  Mutt interprets the value of this variable as follows:
+
+     >\b>0\b0 number of seconds to wait for sendmail to finish before
+        continuing
+
+     0\b0  wait forever for sendmail to finish
+
+     <\b<0\b0 always put sendmail in the background without waiting
+
+  Note that if you specify a value other than 0, the output of the child
+  process will be put in a temporary file.  If there is some error, you
+  will be informed as to where to find the output.
+
+  6\b6.\b.3\b3.\b.2\b24\b46\b6.\b.  s\bsh\bhe\bel\bll\bl
+
+  Type: path
+  Default: ""
+
+  Command to use when spawning a subshell.  By default, the user's login
+  shell from /etc/passwd is used.
+
+  6\b6.\b.3\b3.\b.2\b24\b47\b7.\b.  s\bsa\bav\bve\be_\b_u\bun\bns\bsu\bub\bbs\bsc\bcr\bri\bib\bbe\bed\bd
+
+  Type: boolean
+  Default: no
+
+  When _\bs_\be_\bt, info about unsubscribed newsgroups will be saved into
+  ``newsrc'' file and into cache.
+
+  6\b6.\b.3\b3.\b.2\b24\b48\b8.\b.  s\bsh\bho\bow\bw_\b_n\bne\bew\bw_\b_n\bne\bew\bws\bs
+
+  Type: boolean
+  Default: yes
+
+  If _\bs_\be_\bt, newsserver will be asked for new newsgroups on entering the
+  browser.  Otherwise, it will be done only once for a newsserver.  Also
+  controls whether or not number of new articles of subscribed
+  newsgroups will be then checked.
+
+  6\b6.\b.3\b3.\b.2\b24\b49\b9.\b.  s\bsh\bho\bow\bw_\b_o\bon\bnl\bly\by_\b_u\bun\bnr\bre\bea\bad\bd
+
+  Type: boolean
+  Default: no
+
+  If _\bs_\be_\bt, only subscribed newsgroups that contain unread articles will
+  be displayed in browser.
+
+  6\b6.\b.3\b3.\b.2\b25\b50\b0.\b.  s\bsi\big\bg_\b_d\bda\bas\bsh\bhe\bes\bs
+
+  Type: boolean
+  Default: yes
+
+  If set, a line containing ``-- '' will be inserted before your
+  ````$signature''''.  It is s\bst\btr\bro\bon\bng\bgl\bly\by recommended that you not unset
+  this variable unless your ``signature'' contains just your name.  The
+  reason for this is because many software packages use ``-- \n'' to
+  detect your signature.  For example, Mutt has the ability to highlight
+  the signature in a different color in the builtin pager.
+
+  6\b6.\b.3\b3.\b.2\b25\b51\b1.\b.  s\bsi\big\bg_\b_o\bon\bn_\b_t\bto\bop\bp
+
+  Type: boolean
+  Default: no
+
+  If set, the signature will be included before any quoted or forwarded
+  text.  It is s\bst\btr\bro\bon\bng\bgl\bly\by recommended that you do not set this variable
+  unless you really know what you are doing, and are prepared to take
+  some heat from netiquette guardians.
+
+  6\b6.\b.3\b3.\b.2\b25\b52\b2.\b.  s\bsi\big\bgn\bna\bat\btu\bur\bre\be
+
+  Type: path
+  Default: "~/.signature"
+
+  Specifies the filename of your signature, which is appended to all
+  outgoing messages.   If the filename ends with a pipe (``|''), it is
+  assumed that filename is a shell command and input should be read from
+  its stdout.
+
+  6\b6.\b.3\b3.\b.2\b25\b53\b3.\b.  s\bsi\bim\bmp\bpl\ble\be_\b_s\bse\bea\bar\brc\bch\bh
+
+  Type: string
+  Default: "~f %s | ~s %s"
+
+  Specifies how Mutt should expand a simple search into a real search
+  pattern.  A simple search is one that does not contain any of the ~
+  operators.  See ````patterns'''' for more information on search
+  patterns.
+
+  For example, if you simply type joe at a search or limit prompt, Mutt
+  will automatically expand it to the value specified by this variable.
+  For the default value it would be:
+
+  ~f joe | ~s joe
+
+  6\b6.\b.3\b3.\b.2\b25\b54\b4.\b.  s\bsm\bma\bar\brt\bt_\b_w\bwr\bra\bap\bp
+
+  Type: boolean
+  Default: yes
+
+  Controls the display of lines longer than the screen width in the
+  internal pager. If set, long lines are wrapped at a word boundary.  If
+  unset, lines are simply wrapped at the screen edge. Also see the
+  ````$markers'''' variable.
+
+  6\b6.\b.3\b3.\b.2\b25\b55\b5.\b.  s\bsm\bmi\bil\ble\bey\bys\bs
+
+  Type: regular expression
+  Default: "(>From )|(:[-^]?[][)(><}{|/DP])"
+
+  The _\bp_\ba_\bg_\be_\br uses this variable to catch some common false positives of
+  ````$quote_regexp'''', most notably smileys in the beginning of a line
+
+  6\b6.\b.3\b3.\b.2\b25\b56\b6.\b.  s\bsl\ble\bee\bep\bp_\b_t\bti\bim\bme\be
+
+  Type: number
+  Default: 1
+
+  Specifies time, in seconds, to pause while displaying certain
+  informational messages, while moving from folder to folder and after
+  expunging messages from the current folder.  The default is to pause
+  one second, so a value of zero for this option suppresses the pause.
+  6\b6.\b.3\b3.\b.2\b25\b57\b7.\b.  s\bso\bor\brt\bt
+
+  Type: sort order
+  Default: date
+
+  Specifies how to sort messages in the _\bi_\bn_\bd_\be_\bx menu.  Valid values are:
+
+          date or date-sent
+          date-received
+          from
+          mailbox-order (unsorted)
+          score
+          size
+          subject
+          threads
+          to
+
+  You may optionally use the reverse- prefix to specify reverse sorting
+  order (example: set sort=reverse-date-sent).
+
+  6\b6.\b.3\b3.\b.2\b25\b58\b8.\b.  s\bso\bor\brt\bt_\b_a\bal\bli\bia\bas\bs
+
+  Type: sort order
+  Default: alias
+
+  Specifies how the entries in the `alias' menu are sorted.  The
+  following are legal values:
+
+          address (sort alphabetically by email address)
+          alias (sort alphabetically by alias name)
+          unsorted (leave in order specified in .muttrc)
+
+  6\b6.\b.3\b3.\b.2\b25\b59\b9.\b.  s\bso\bor\brt\bt_\b_a\bau\bux\bx
+
+  Type: sort order
+  Default: date
+
+  When sorting by threads, this variable controls how threads are sorted
+  in relation to other threads, and how the branches of the thread trees
+  are sorted.  This can be set to any value that ````$sort'''' can,
+  except threads (in that case, mutt will just use date-sent).  You can
+  also specify the last- prefix in addition to the reverse- prefix, but
+  last- must come after reverse-.  The last- prefix causes messages to
+  be sorted against its siblings by which has the last descendant, using
+  the rest of sort_aux as an ordering.  For instance, set sort_aux=last-
+  date-received would mean that if a new message is received in a
+  thread, that thread becomes the last one displayed (or the first, if
+  you have set sort=reverse-threads.) Note: For reversed ````$sort''''
+  order ``$sort_aux'' is reversed again (which is not the right thing to
+  do, but kept to not break any existing configuration setting).
+
+  6\b6.\b.3\b3.\b.2\b26\b60\b0.\b.  s\bso\bor\brt\bt_\b_b\bbr\bro\bow\bws\bse\ber\br
+
+  Type: sort order
+  Default: subject
+
+  Specifies how to sort entries in the file browser.  By default, the
+  entries are sorted alphabetically.  Valid values:
+
+          alpha (alphabetically)
+          date
+          size
+          unsorted
+
+  You may optionally use the reverse- prefix to specify reverse sorting
+  order (example: set sort_browser=reverse-date).
+
+  6\b6.\b.3\b3.\b.2\b26\b61\b1.\b.  s\bso\bor\brt\bt_\b_r\bre\be
+
+  Type: boolean
+  Default: yes
+
+  This variable is only useful when sorting by threads with
+  ````$strict_threads'''' unset.  In that case, it changes the heuristic
+  mutt uses to thread messages by subject.  With sort_re set, mutt will
+  only attach a message as the child of another message by subject if
+  the subject of the child message starts with a substring matching the
+  setting of ````$reply_regexp''''.  With sort_re unset, mutt will
+  attach the message whether or not this is the case, as long as the
+  non-````$reply_regexp'''' parts of both messages are identical.
+
+  6\b6.\b.3\b3.\b.2\b26\b62\b2.\b.  s\bsp\bpo\boo\bol\blf\bfi\bil\ble\be
+
+  Type: path
+  Default: ""
+
+  If your spool mailbox is in a non-default place where Mutt cannot find
+  it, you can specify its location with this variable.  Mutt will
+  automatically set this variable to the value of the environment
+  variable $MAIL if it is not set.
+
+  6\b6.\b.3\b3.\b.2\b26\b63\b3.\b.  s\bst\bta\bat\btu\bus\bs_\b_c\bch\bha\bar\brs\bs
+
+  Type: string
+  Default: "-*%A"
+
+  Controls the characters used by the "%r" indicator in
+  ````$status_format''''. The first character is used when the mailbox
+  is unchanged. The second is used when the mailbox has been changed,
+  and it needs to be resynchronized. The third is used if the mailbox is
+  in read-only mode, or if the mailbox will not be written when exiting
+  that mailbox (You can toggle whether to write changes to a mailbox
+  with the toggle-write operation, bound by default to "%"). The fourth
+  is used to indicate that the current folder has been opened in attach-
+  message mode (Certain operations like composing a new mail, replying,
+  forwarding, etc. are not permitted in this mode).
+
+  6\b6.\b.3\b3.\b.2\b26\b64\b4.\b.  s\bst\bta\bat\btu\bus\bs_\b_f\bfo\bor\brm\bma\bat\bt
+
+  Type: string
+  Default: "-%r-Mutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d?
+  Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l?
+  %l?]---(%s/%S)-%>-(%P)---"
+
+  Controls the format of the status line displayed in the _\bi_\bn_\bd_\be_\bx menu.
+  This string is similar to ````$index_format'''', but has its own set
+  of printf()-like sequences:
+
+     %\b%b\bb number of mailboxes with new mail *
+
+     %\b%d\bd number of deleted messages *
+
+     %\b%f\bf the full pathname of the current mailbox
+
+     %\b%F\bF number of flagged messages *
+
+     %\b%h\bh local hostname
+
+     %\b%l\bl size (in bytes) of the current mailbox *
+
+     %\b%L\bL size (in bytes) of the messages shown (i.e., which match the
+        current limit) *
+
+     %\b%m\bm the number of messages in the mailbox *
+
+     %\b%M\bM the number of messages shown (i.e., which match the current
+        limit) *
+
+     %\b%n\bn number of new messages in the mailbox *
+
+     %\b%o\bo number of old unread messages
+
+     %\b%p\bp number of postponed messages *
+
+     %\b%P\bP percentage of the way through the index
+
+     %\b%r\br modified/read-only/won't-write/attach-message indicator,
+        according to ``$status_chars''
+
+     %\b%s\bs current sorting mode (``$sort'')
+
+     %\b%S\bS current aux sorting method (``$sort_aux'')
+
+     %\b%t\bt number of tagged messages *
+
+     %\b%u\bu number of unread messages *
+
+     %\b%v\bv Mutt version string
+
+     %\b%V\bV currently active limit pattern, if any *
+
+     %\b%>\b>X\bX
+        right justify the rest of the string and pad with "X"
+
+     %\b%|\b|X\bX
+        pad to the end of the line with "X"
+
+  * = can be optionally printed if nonzero
+
+  Some of the above sequences can be used to optionally print a string
+  if their value is nonzero.  For example, you may only want to see the
+  number of flagged messages if such messages exist, since zero is not
+  particularly meaningful.  To optionally print a string based upon one
+  of the above sequences, the following construct is used
+
+  %?<sequence_char>?<optional_string>?
+
+  where _\bs_\be_\bq_\bu_\be_\bn_\bc_\be_\b__\bc_\bh_\ba_\br is a character from the table above, and
+  _\bo_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\b__\bs_\bt_\br_\bi_\bn_\bg is the string you would like printed if _\bs_\bt_\ba_\bt_\bu_\bs_\b__\bc_\bh_\ba_\br is
+  nonzero.  _\bo_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\b__\bs_\bt_\br_\bi_\bn_\bg m\bma\bay\by contain other sequence as well as normal
+  text, but you may n\bno\bot\bt nest optional strings.
+
+  Here is an example illustrating how to optionally print the number of
+  new messages in a mailbox: %?n?%n new messages.?
+
+  Additionally you can switch between two strings, the first one, if a
+  value is zero, the second one, if the value is nonzero, by using the
+  following construct: %?<sequence_char>?<if_string>&<else_string>?
+
+  You can additionally force the result of any printf-like sequence to
+  be lowercase by prefixing the sequence character with an underscore
+  (_) sign.  For example, if you want to display the local hostname in
+  lowercase, you would use: %_h
+
+  If you prefix the sequence character with a colon (:) character, mutt
+  will replace any dots in the expansion by underscores. This might be
+  helpful with IMAP folders that don't like dots in folder names.
+
+  6\b6.\b.3\b3.\b.2\b26\b65\b5.\b.  s\bst\bta\bat\btu\bus\bs_\b_o\bon\bn_\b_t\bto\bop\bp
+
+  Type: boolean
+  Default: no
+
+  Setting this variable causes the ``status bar'' to be displayed on the
+  first line of the screen rather than near the bottom.
+
+  6\b6.\b.3\b3.\b.2\b26\b66\b6.\b.  s\bst\btr\bri\bic\bct\bt_\b_t\bth\bhr\bre\bea\bad\bds\bs
+
+  Type: boolean
+  Default: no
+
+  If set, threading will only make use of the ``In-Reply-To'' and
+  ``References'' fields when you ````$sort'''' by message threads.  By
+  default, messages with the same subject are grouped together in
+  ``pseudo threads.''  This may not always be desirable, such as in a
+  personal mailbox where you might have several unrelated messages with
+  the subject ``hi'' which will get grouped together.
+
+  6\b6.\b.3\b3.\b.2\b26\b67\b7.\b.  s\bsu\bus\bsp\bpe\ben\bnd\bd
+
+  Type: boolean
+  Default: yes
+
+  When _\bu_\bn_\bs_\be_\bt, mutt won't stop when the user presses the terminal's _\bs_\bu_\bs_\bp
+  key, usually ``control-Z''. This is useful if you run mutt inside an
+  xterm using a command like xterm -e mutt.
+
+  6\b6.\b.3\b3.\b.2\b26\b68\b8.\b.  t\bte\bex\bxt\bt_\b_f\bfl\blo\bow\bwe\bed\bd
+
+  Type: boolean
+  Default: no
+
+  When set, mutt will generate text/plain; format=flowed attachments.
+  This format is easier to handle for some mailing software, and
+  generally just looks like ordinary text.  To actually make use of this
+  format's features, you'll need support in your editor.
+
+  Note that ``$indent_string'' is ignored when this option is set.
+
+  6\b6.\b.3\b3.\b.2\b26\b69\b9.\b.  t\bth\bhr\bre\bea\bad\bd_\b_r\bre\bec\bce\bei\biv\bve\bed\bd
+
+  Type: boolean
+  Default: no
+
+  When set, mutt uses the date received rather than the date sent to
+  thread messages by subject.
+
+  6\b6.\b.3\b3.\b.2\b27\b70\b0.\b.  t\bth\bho\bor\bro\bou\bug\bgh\bh_\b_s\bse\bea\bar\brc\bch\bh
+
+  Type: boolean
+  Default: no
+
+  Affects the _\b~_\bb and _\b~_\bh search operations described in section
+  ````patterns'''' above.  If set, the headers and attachments of
+  messages to be searched are decoded before searching.  If unset,
+  messages are searched as they appear in the folder.
+
+  6\b6.\b.3\b3.\b.2\b27\b71\b1.\b.  t\bti\bil\bld\bde\be
+
+  Type: boolean
+  Default: no
+
+  When set, the internal-pager will pad blank lines to the bottom of the
+  screen with a tilde (~).
+
+  6\b6.\b.3\b3.\b.2\b27\b72\b2.\b.  t\bti\bim\bme\beo\bou\but\bt
+
+  Type: number
+  Default: 600
+
+  This variable controls the _\bn_\bu_\bm_\bb_\be_\br _\bo_\bf _\bs_\be_\bc_\bo_\bn_\bd_\bs Mutt will wait for a key
+  to be pressed in the main menu before timing out and checking for new
+  mail.  A value of zero or less will cause Mutt to never time out.
+
+  6\b6.\b.3\b3.\b.2\b27\b73\b3.\b.  t\btm\bmp\bpd\bdi\bir\br
+
+  Type: path
+  Default: ""
+
+  This variable allows you to specify where Mutt will place its
+  temporary files needed for displaying and composing messages.  If this
+  variable is not set, the environment variable TMPDIR is used.  If
+  TMPDIR is not set then "/tmp" is used.
+
+  6\b6.\b.3\b3.\b.2\b27\b74\b4.\b.  t\bto\bo_\b_c\bch\bha\bar\brs\bs
+
+  Type: string
+  Default: " +TCFL"
+
+  Controls the character used to indicate mail addressed to you.  The
+  first character is the one used when the mail is NOT addressed to your
+  address (default: space).  The second is used when you are the only
+  recipient of the message (default: +).  The third is when your address
+  appears in the TO header field, but you are not the only recipient of
+  the message (default: T).  The fourth character is used when your
+  address is specified in the CC header field, but you are not the only
+  recipient.  The fifth character is used to indicate mail that was sent
+  by _\by_\bo_\bu.  The sixth character is used to indicate when a mail was sent
+  to a mailing-list you subscribe to (default: L).
+
+  6\b6.\b.3\b3.\b.2\b27\b75\b5.\b.  t\btu\bun\bnn\bne\bel\bl
+
+  Type: string
+  Default: ""
+
+  Setting this variable will cause mutt to open a pipe to a command
+  instead of a raw socket. You may be able to use this to set up
+  preauthenticated connections to your IMAP/POP3 server. Example:
+
+  tunnel="ssh -q mailhost.net /usr/local/libexec/imapd"
+
+  NOTE: For this example to work you must be able to log in to the
+  remote machine without having to enter a password.
+
+  6\b6.\b.3\b3.\b.2\b27\b76\b6.\b.  u\bus\bse\be_\b_8\b8b\bbi\bit\btm\bmi\bim\bme\be
+
+  Type: boolean
+  Default: no
+
+  W\bWa\bar\brn\bni\bin\bng\bg:\b: do not set this variable unless you are using a version of
+  sendmail which supports the -B8BITMIME flag (such as sendmail 8.8.x)
+  or you may not be able to send mail.
+
+  When _\bs_\be_\bt, Mutt will invoke ````$sendmail'''' with the -B8BITMIME flag
+  when sending 8-bit messages to enable ESMTP negotiation.
+
+  6\b6.\b.3\b3.\b.2\b27\b77\b7.\b.  u\bus\bse\be_\b_d\bdo\bom\bma\bai\bin\bn
+
+  Type: boolean
+  Default: yes
+
+  When set, Mutt will qualify all local addresses (ones without the
+  @host portion) with the value of ````$hostname''''.  If _\bu_\bn_\bs_\be_\bt, no
+  addresses will be qualified.
+
+  6\b6.\b.3\b3.\b.2\b27\b78\b8.\b.  u\bus\bse\be_\b_f\bfr\bro\bom\bm
+
+  Type: boolean
+  Default: yes
+
+  When _\bs_\be_\bt, Mutt will generate the `From:' header field when sending
+  messages.  If _\bu_\bn_\bs_\be_\bt, no `From:' header field will be generated unless
+  the user explicitly sets one using the ````my_hdr'''' command.
+
+  6\b6.\b.3\b3.\b.2\b27\b79\b9.\b.  u\bus\bse\be_\b_i\bip\bpv\bv6\b6
+
+  Type: boolean
+  Default: yes
+
+  When _\bs_\be_\bt, Mutt will look for IPv6 addresses of hosts it tries to
+  contact.  If this option is unset, Mutt will restrict itself to IPv4
+  addresses.  Normally, the default should work.
+
+  6\b6.\b.3\b3.\b.2\b28\b80\b0.\b.  u\bus\bse\ber\br_\b_a\bag\bge\ben\bnt\bt
+
+  Type: boolean
+  Default: yes
+
+  When _\bs_\be_\bt, mutt will add a "User-Agent" header to outgoing messages,
+  indicating which version of mutt was used for composing them.
+
+  6\b6.\b.3\b3.\b.2\b28\b81\b1.\b.  v\bvi\bis\bsu\bua\bal\bl
+
+  Type: path
+  Default: ""
+
+  Specifies the visual editor to invoke when the _\b~_\bv command is given in
+  the builtin editor.
+
+  6\b6.\b.3\b3.\b.2\b28\b82\b2.\b.  w\bwa\bai\bit\bt_\b_k\bke\bey\by
+
+  Type: boolean
+  Default: yes
+
+  Controls whether Mutt will ask you to press a key after _\bs_\bh_\be_\bl_\bl_\b- _\be_\bs_\bc_\ba_\bp_\be,
+  _\bp_\bi_\bp_\be_\b-_\bm_\be_\bs_\bs_\ba_\bg_\be, _\bp_\bi_\bp_\be_\b-_\be_\bn_\bt_\br_\by, _\bp_\br_\bi_\bn_\bt_\b-_\bm_\be_\bs_\bs_\ba_\bg_\be, and _\bp_\br_\bi_\bn_\bt_\b-_\be_\bn_\bt_\br_\by commands.
+
+  It is also used when viewing attachments with ````auto_view'''',
+  provided that the corresponding mailcap entry has a _\bn_\be_\be_\bd_\bs_\bt_\be_\br_\bm_\bi_\bn_\ba_\bl
+  flag, and the external program is interactive.
+
+  When set, Mutt will always ask for a key. When unset, Mutt will wait
+  for a key only if the external command returned a non-zero status.
+
+  6\b6.\b.3\b3.\b.2\b28\b83\b3.\b.  w\bwe\bee\bed\bd
+
+  Type: boolean
+  Default: yes
+
+  When set, mutt will weed headers when when displaying, forwarding,
+  printing, or replying to messages.
+
+  6\b6.\b.3\b3.\b.2\b28\b84\b4.\b.  w\bwr\bra\bap\bp_\b_s\bse\bea\bar\brc\bch\bh
+
+  Type: boolean
+  Default: yes
+
+  Controls whether searches wrap around the end of the mailbox.
+
+  When set, searches will wrap around the first (or last) message. When
+  unset, searches will not wrap.
+
+  6\b6.\b.3\b3.\b.2\b28\b85\b5.\b.  w\bwr\bra\bap\bpm\bma\bar\brg\bgi\bin\bn
+
+  Type: number
+  Default: 0
+
+  Controls the size of the margin remaining at the right side of the
+  terminal when mutt's pager does smart wrapping.
+
+  6\b6.\b.3\b3.\b.2\b28\b86\b6.\b.  w\bwr\bri\bit\bte\be_\b_i\bin\bnc\bc
+
+  Type: number
+  Default: 10
+
+  When writing a mailbox, a message will be printed every _\bw_\br_\bi_\bt_\be_\b__\bi_\bn_\bc
+  messages to indicate progress.  If set to 0, only a single message
+  will be displayed before writing a mailbox.
+
+  Also see the ````$read_inc'''' variable.
+
+  6\b6.\b.3\b3.\b.2\b28\b87\b7.\b.  w\bwr\bri\bit\bte\be_\b_b\bbc\bcc\bc
+
+  Type: boolean
+  Default: yes
+
+  Controls whether mutt writes out the Bcc header when preparing
+  messages to be sent.  Exim users may wish to use this.
+
+  6\b6.\b.3\b3.\b.2\b28\b88\b8.\b.  x\bx_\b_c\bco\bom\bmm\bme\ben\bnt\bt_\b_t\bto\bo
+
+  Type: boolean
+  Default: no
+
+  If _\bs_\be_\bt, Mutt will add ``X-Comment-To:'' field (that contains full name
+  of original article author) to article that followuped to newsgroup.
+
+  6\b6.\b.4\b4.\b.  F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs
+
+  The following is the list of available functions listed by the mapping
+  in which they are available.  The default key setting is given, and an
+  explanation of what the function does.  The key bindings of these
+  functions can be changed with the ``bind'' command.
+
+  6\b6.\b.4\b4.\b.1\b1.\b.  g\bge\ben\bne\ber\bri\bic\bc
+
+  The _\bg_\be_\bn_\be_\br_\bi_\bc menu is not a real menu, but specifies common functions
+  (such as movement) available in all menus except for _\bp_\ba_\bg_\be_\br and _\be_\bd_\bi_\bt_\bo_\br.
+  Changing settings for this menu will affect the default bindings for
+  all menus (except as noted).
+
+  bottom-page                L   move to the bottom of the page
+  current-bottom     not bound   move current entry to bottom of page
+  current-middle     not bound   move current entry to middle of page
+  current-top        not bound   move current entry to top of page
+  enter-command              :   enter a muttrc command
+  exit                       q   exit this menu
+  first-entry                =   move to the first entry
+  half-down                  ]   scroll down 1/2 page
+  half-up                    [   scroll up 1/2 page
+  help                       ?   this screen
+  jump                  number   jump to an index number
+  last-entry                 *   move to the last entry
+  middle-page                M   move to the middle of the page
+  next-entry                 j   move to the next entry
+  next-line                  >   scroll down one line
+  next-page                  z   move to the next page
+  previous-entry             k   move to the previous entry
+  previous-line              <   scroll up one line
+  previous-page              Z   move to the previous page
+  refresh                   ^L   clear and redraw the screen
+  search                     /   search for a regular expression
+  search-next                n   search for next match
+  search-opposite    not bound   search for next match in opposite direction
+  search-reverse         ESC /   search backwards for a regular expression
+  select-entry             RET   select the current entry
+  shell-escape               !   run a program in a subshell
+  tag-entry                  t   toggle the tag on the current entry
+  tag-prefix                 ;   apply next command to tagged entries
+  top-page                   H   move to the top of the page
+
+  6\b6.\b.4\b4.\b.2\b2.\b.  i\bin\bnd\bde\bex\bx
+
+  bounce-message             b   remail a message to another user
+  change-folder              c   open a different folder
+  change-folder-readonly ESC c   open a different folder in read only mode
+  check-traditional-pgp  ESC P   check for classic pgp
+  clear-flag                 W   clear a status flag from a message
+  copy-message               C   copy a message to a file/mailbox
+  create-alias               a   create an alias from a message sender
+  decode-copy            ESC C   decode a message and copy it to a file/mailbox
+  decode-save            ESC s   decode a message and save it to a file/mailbox
+  delete-message             d   delete the current entry
+  delete-pattern             D   delete messages matching a pattern
+  delete-subthread       ESC d   delete all messages in subthread
+  delete-thread             ^D   delete all messages in thread
+  display-address            @   display full address of sender
+  display-toggle-weed        h   display message and toggle header weeding
+  display-message          RET   display a message
+  edit                       e   edit the current message
+  edit-type                 ^E   edit the current message's Content-Type
+  exit                       x   exit without saving changes
+  extract-keys              ^K   extract PGP public keys
+  fetch-mail                 G   retrieve mail from POP server
+  flag-message               F   toggle a message's 'important' flag
+  forget-passphrase         ^F   wipe PGP passphrase from memory
+  forward-message            f   forward a message with comments
+  group-reply                g   reply to all recipients
+  limit                      l   show only messages matching a pattern
+  list-reply                 L   reply to specified mailing list
+  mail                       m   compose a new mail message
+  mail-key               ESC k   mail a PGP public key
+  next-new                 TAB   jump to the next new message
+  next-subthread         ESC n   jump to the next subthread
+  next-thread               ^N   jump to the next thread
+  next-undeleted             j   move to the next undeleted message
+  next-unread        not bound   jump to the next unread message
+  parent-message             P   jump to parent message in thread
+  pipe-message               |   pipe message/attachment to a shell command
+  previous-new         ESC TAB   jump to the previous new message
+  previous-page              Z   move to the previous page
+  previous-subthread     ESC p   jump to previous subthread
+  previous-thread           ^P   jump to previous thread
+  previous-undeleted         k   move to the last undelete message
+  previous-unread    not bound   jump to the previous unread message
+  print-message              p   print the current entry
+  query                      Q   query external program for addresses
+  quit                       q   save changes to mailbox and quit
+  read-subthread         ESC r   mark the current subthread as read
+  read-thread               ^R   mark the current thread as read
+  recall-message             R   recall a postponed message
+  reply                      r   reply to a message
+  resend-message         ESC e   resend message and preserve MIME structure
+  save-message               s   save message/attachment to a file
+  set-flag                   w   set a status flag on a message
+  show-version               V   show the Mutt version number and date
+  show-limit             ESC l   show currently active limit pattern, if any
+  sort-mailbox               o   sort messages
+  sort-reverse               O   sort messages in reverse order
+  sync-mailbox               $   save changes to mailbox
+  tag-pattern                T   tag messages matching a pattern
+  tag-thread             ESC t   tag/untag all messages in the current thread
+  toggle-new                 N   toggle a message's 'new' flag
+  toggle-write               %   toggle whether the mailbox will be rewritten
+  undelete-message           u   undelete the current entry
+  undelete-pattern           U   undelete messages matching a pattern
+  undelete-subthread     ESC u   undelete all messages in subthread
+  undelete-thread           ^U   undelete all messages in thread
+  untag-pattern             ^T   untag messages matching a pattern
+  view-attachments           v   show MIME attachments
+
+  6\b6.\b.4\b4.\b.3\b3.\b.  p\bpa\bag\bge\ber\br
+
+  bottom             not bound   jump to the bottom of the message
+  bounce-message             b   remail a message to another user
+  change-folder              c   open a different folder
+  change-folder-readonly ESC c   open a different folder in read only mode
+  check-traditional-pgp  ESC P   check for classic pgp
+  copy-message               C   copy a message to a file/mailbox
+  create-alias               a   create an alias from a message sender
+  decode-copy            ESC C   decode a message and copy it to a file/mailbox
+  decode-save            ESC s   decode a message and save it to a file/mailbox
+  delete-message             d   delete the current entry
+  delete-subthread       ESC d   delete all messages in subthread
+  delete-thread             ^D   delete all messages in thread
+  display-address            @   display full address of sender
+  display-toggle-weed        h   display message and toggle header weeding
+  edit                       e   edit the current message
+  edit-type                 ^E   edit the current message's Content-Type
+  enter-command              :   enter a muttrc command
+  exit                       i   return to the main-menu
+  extract-keys              ^K   extract PGP public keys
+  flag-message               F   toggle a message's 'important' flag
+  forget-passphrase         ^F   wipe PGP passphrase from memory
+  forward-message            f   forward a message with comments
+  group-reply                g   reply to all recipients
+  half-up            not bound   move up one-half page
+  half-down          not bound   move down one-half page
+  help                       ?   this screen
+  list-reply                 L   reply to specified mailing list
+  mail                       m   compose a new mail message
+  mail-key               ESC k   mail a PGP public key
+  mark-as-new                N   toggle a message's 'new' flag
+  next-line                RET   scroll down one line
+  next-entry                 J   move to the next entry
+  next-new                 TAB   jump to the next new message
+  next-page                      move to the next page
+  next-subthread         ESC n   jump to the next subthread
+  next-thread               ^N   jump to the next thread
+  next-undeleted             j   move to the next undeleted message
+  next-unread        not bound   jump to the next unread message
+  parent-message             P   jump to parent message in thread
+  pipe-message               |   pipe message/attachment to a shell command
+  previous-line      BackSpace   scroll up one line
+  previous-entry             K   move to the previous entry
+  previous-new       not bound   jump to the previous new message
+  previous-page              -   move to the previous page
+  previous-subthread     ESC p   jump to previous subthread
+  previous-thread           ^P   jump to previous thread
+  previous-undeleted         k   move to the last undelete message
+  previous-unread    not bound   jump to the previous unread message
+  print-message              p   print the current entry
+  quit                       Q   save changes to mailbox and quit
+  read-subthread         ESC r   mark the current subthread as read
+  read-thread               ^R   mark the current thread as read
+  recall-message             R   recall a postponed message
+  redraw-screen             ^L   clear and redraw the screen
+  reply                      r   reply to a message
+  save-message               s   save message/attachment to a file
+  search                     /   search for a regular expression
+  search-next                n   search for next match
+  search-opposite    not bound   search for next match in opposite direction
+  search-reverse         ESC /   search backwards for a regular expression
+  search-toggle              \   toggle search pattern coloring
+  shell-escape               !   invoke a command in a subshell
+  show-version               V   show the Mutt version number and date
+  skip-quoted                S   skip beyond quoted text
+  sync-mailbox               $   save changes to mailbox
+  tag-message                t   tag a message
+  toggle-quoted              T   toggle display of quoted text
+  top                        ^   jump to the top of the message
+  undelete-message           u   undelete the current entry
+  undelete-subthread     ESC u   undelete all messages in subthread
+  undelete-thread           ^U   undelete all messages in thread
+  view-attachments           v   show MIME attachments
+
+  6\b6.\b.4\b4.\b.4\b4.\b.  a\bal\bli\bia\bas\bs
+
+  search                     /   search for a regular expression
+  search-next                n   search for next match
+  search-reverse         ESC /   search backwards for a regular expression
+
+  6\b6.\b.4\b4.\b.5\b5.\b.  q\bqu\bue\ber\bry\by
+
+  create-alias               a   create an alias from a message sender
+  mail                       m   compose a new mail message
+  query                      Q   query external program for addresses
+  query-append               A   append new query results to current results
+  search                     /   search for a regular expression
+  search-next                n   search for next match
+  search-opposite    not bound   search for next match in opposite direction
+  search-reverse         ESC /   search backwards for a regular expression
+
+  6\b6.\b.4\b4.\b.6\b6.\b.  a\bat\btt\bta\bac\bch\bh
+
+  bounce-message             b   remail a message to another user
+  collapse-parts             v   toggle display of subparts
+  delete-entry               d   delete the current entry
+  display-toggle-weed        h   display message and toggle header weeding
+  edit-type                 ^E   edit the current entry's Content-Type
+  extract-keys              ^K   extract PGP public keys
+  forward-message            f   forward a message with comments
+  group-reply                g   reply to all recipients
+  list-reply                 L   reply to specified mailing list
+  pipe-entry                 |   pipe message/attachment to a shell command
+  print-entry                p   print the current entry
+  reply                      r   reply to a message
+  resend-message         ESC e   resend message and preserve MIME structure
+  save-entry                 s   save message/attachment to a file
+  undelete-entry             u   undelete the current entry
+  view-attach              RET   view attachment using mailcap entry if necessary
+  view-mailcap               m   force viewing of attachment using mailcap
+  view-text                  T   view attachment as text
+
+  6\b6.\b.4\b4.\b.7\b7.\b.  c\bco\bom\bmp\bpo\bos\bse\be
+
+  attach-file                a   attach a file(s) to this message
+  attach-message             A   attach message(s) to this message
+  attach-key             ESC k   attach a PGP public key
+  copy-file                  C   save message/attachment to a file
+  detach-file                D   delete the current entry
+  display-toggle-weed        h   display message and toggle header weeding
+  edit-bcc                   b   edit the BCC list
+  edit-cc                    c   edit the CC list
+  edit-description           d   edit attachment description
+  edit-encoding             ^E   edit attachment transfer-encoding
+  edit-fcc                   f   enter a file to save a copy of this message in
+  edit-from              ESC f   edit the from: field
+  edit-file               ^X e   edit the file to be attached
+  edit-headers               E   edit the message with headers
+  edit                       e   edit the message
+  edit-mime                  m   edit attachment using mailcap entry
+  edit-reply-to              r   edit the Reply-To field
+  edit-subject               s   edit the subject of this message
+  edit-to                    t   edit the TO list
+  edit-type                 ^T   edit attachment type
+  filter-entry               F   filter attachment through a shell command
+  forget-passphrase         ^F   wipe PGP passphrase from memory
+  ispell                     i   run ispell on the message
+  new-mime                   n   compose new attachment using mailcap entry
+  pgp-menu                   p   show PGP options
+  pipe-entry                 |   pipe message/attachment to a shell command
+  postpone-message           P   save this message to send later
+  print-entry                l   print the current entry
+  rename-file                R   rename/move an attached file
+  send-message               y   send the message
+  toggle-unlink              u   toggle whether to delete file after sending it
+  view-attach              RET   view attachment using mailcap entry if necessary
+  write-fcc                  w   write the message to a folder
+
+  6\b6.\b.4\b4.\b.8\b8.\b.  p\bpo\bos\bst\btp\bpo\bon\bne\be
+
+  delete-entry               d   delete the current entry
+  undelete-entry             u   undelete the current entry
+
+  6\b6.\b.4\b4.\b.9\b9.\b.  b\bbr\bro\bow\bws\bse\ber\br
+
+  change-dir                 c   change directories
+  check-new                TAB   check mailboxes for new mail
+  enter-mask                 m   enter a file mask
+  search                     /   search for a regular expression
+  search-next                n   search for next match
+  search-reverse         ESC /   search backwards for a regular expression
+  select-new                 N   select a new file in this directory
+  sort                       o   sort messages
+  sort-reverse               O   sort messages in reverse order
+  toggle-mailboxes         TAB   toggle whether to browse mailboxes or all files
+  view-file              SPACE   view file
+  subscribe                  s   subscribe to current mailbox (IMAP Only)
+  unsubscribe                u   unsubscribe to current mailbox (IMAP Only)
+  toggle-subscribed          T   toggle view all/subscribed mailboxes (IMAP Only)
+
+  6\b6.\b.4\b4.\b.1\b10\b0.\b.  p\bpg\bgp\bp
+
+  view-name                  %   view the key's user id
+  verify-key                 c   verify a PGP public key
+
+  6\b6.\b.4\b4.\b.1\b11\b1.\b.  e\bed\bdi\bit\bto\bor\br
+
+  backspace          BackSpace   delete the char in front of the cursor
+  backward-char             ^B   move the cursor one character to the left
+  backward-word          ESC b   move the cursor to the previous word
+  bol                       ^A   jump to the beginning of the line
+  buffy-cycle            Space   cycle among incoming mailboxes
+  capitalize-word        ESC c   uppercase the first character in the word
+  complete                 TAB   complete filename or alias
+  complete-query            ^T   complete address with query
+  delete-char               ^D   delete the char under the cursor
+  downcase-word          ESC l   lowercase all characters in current word
+  eol                       ^E   jump to the end of the line
+  forward-char              ^F   move the cursor one character to the right
+  forward-word           ESC f   move the cursor to the next word
+  history-down       not bound   scroll down through the history list
+  history-up         not bound   scroll up through the history list
+  kill-eol                  ^K   delete chars from cursor to end of line
+  kill-eow               ESC d   delete chars from cursor to end of word
+  kill-line                 ^U   delete all chars on the line
+  kill-word                 ^W   delete the word in front of the cursor
+  quote-char                ^V   quote the next typed key
+  transpose-chars    not bound   transpose character under cursor with previous
+  upcase-word            ESC u   uppercase all characters in current word
+
+  7\b7.\b.  M\bMi\bis\bsc\bce\bel\bll\bla\ban\bny\by
+
+  7\b7.\b.1\b1.\b.  A\bAc\bck\bkn\bno\bow\bwl\ble\bed\bdg\bge\bem\bme\ben\bnt\bts\bs
+
+  Kari Hurtta <kari.hurtta@fmi.fi> co-developed the original MIME
+  parsing code back in the ELM-ME days.
+
+  The following people have been very helpful to the development of
+  Mutt:
+
+  Vikas Agnihotri <vikasa@writeme.com>,
+  Francois Berjon <Francois.Berjon@aar.alcatel-alsthom.fr>,
+  Aric Blumer <aric@fore.com>,
+  John Capo <jc@irbs.com>,
+  David Champion <dgc@uchicago.edu,
+  Brendan Cully <brendan@kublai.com>,
+  Liviu Daia <daia@stoilow.imar.ro>,
+  Thomas E. Dickey <dickey@herndon4.his.com>,
+  David DeSimone <fox@convex.hp.com>,
+  Nickolay N. Dudorov <nnd@wint.itfs.nsk.su>,
+  Ruslan Ermilov <ru@freebsd.org>,
+  Edmund Grimley Evans <edmundo@rano.org,
+  Michael Finken <finken@conware.de>,
+  Sven Guckes <guckes@math.fu-berlin.de>,
+  Lars Hecking <lhecking@nmrc.ie>,
+  Mark Holloman <holloman@nando.net>,
+  Andreas Holzmann <holzmann@fmi.uni-passau.de>,
+  Marco d'Itri <md@linux.it>,
+  Björn Jacke <bjacke@suse.com>,
+  Byrial Jensen <byrial@image.dk>,
+  David Jeske <jeske@igcom.net>,
+  Christophe Kalt <kalt@hugo.int-evry.fr>,
+  Tommi Komulainen <Tommi.Komulainen@iki.fi>,
+  Felix von Leitner (a.k.a ``Fefe'') <leitner@math.fu-berlin.de>,
+  Brandon Long <blong@fiction.net>,
+  Jimmy Mäkelä <jmy@flashback.net>,
+  Lars Marowsky-Bree <lmb@pointer.in-minden.de>,
+  Thomas ``Mike'' Michlmayr <mike@cosy.sbg.ac.at>,
+  Andrew W. Nosenko <awn@bcs.zp.ua>,
+  David O'Brien <obrien@Nuxi.cs.ucdavis.edu>,
+  Clint Olsen <olsenc@ichips.intel.com>,
+  Park Myeong Seok <pms@romance.kaist.ac.kr>,
+  Thomas Parmelan <tom@ankh.fr.eu.org>,
+  Ollivier Robert <roberto@keltia.freenix.fr>,
+  Thomas Roessler <roessler@does-not-exist.org>,
+  Roland Rosenfeld <roland@spinnaker.de>,
+  TAKIZAWA Takashi <taki@luna.email.ne.jp>,
+  Allain Thivillon <Allain.Thivillon@alma.fr>,
+  Gero Treuner <gero@faveve.uni-stuttgart.de>,
+  Vsevolod Volkov <vvv@lucky.net>,
+  Ken Weinert <kenw@ihs.com>
+
+  7\b7.\b.2\b2.\b.  A\bAb\bbo\bou\but\bt t\bth\bhi\bis\bs d\bdo\boc\bcu\bum\bme\ben\bnt\bt
+
+  This document was written in SGML, and then rendered using the sgml-
+  tools package.
+
diff --git a/doc/mbox.man b/doc/mbox.man
new file mode 100644 (file)
index 0000000..48d7110
--- /dev/null
@@ -0,0 +1,189 @@
+'\" t
+.\" -*-nroff-*-
+.\"
+.\"
+.\"     Copyright (C) 2000 Thomas Roessler <roessler@does-not-exist.org>
+.\" 
+.\"    This document is in the public domain and may be distributed and
+.\"    changed arbitrarily.
+.\"
+.TH mbox 5 "August 2000" Unix "User Manuals"
+.SH NAME
+.PP
+mbox \- Format for mail message storage.
+.SH DESCRIPTION
+.PP
+This document describes the format traditionally used by Unix hosts
+to store mail messages locally.  
+.B mbox
+files typically reside in the system's mail spool, under various
+names in users'
+.B Mail
+directories, and under the name
+.B mbox
+in users' home directories.
+.PP
+An 
+.B mbox
+is a text file containing an arbitrary number of e-mail messages.
+Each message consists of a postmark, followed by an e-mail message
+formatted according to RFC 822.  The file format is line-oriented.
+Lines are separated by line feed characters (ASCII 10).
+.PP
+A postmark line consists of the four characters "From", followed by
+a space character, followed by the message's envelope sender
+address, followed by whitespace, and followed by a time stamp. The
+sender address is expected to be an
+.B addrspec
+as defined in appendix D of RFC 822.
+.PP
+The date is expected to be formatted according to the following
+syntax (represented in the augmented Backus-Naur formalism used by
+RFC 822):
+.PP
+.TS
+lll.
+mbox-date       =      weekday month day time [ timezone ] year
+weekday         =      "Mon" / "Tue" / "Wed" / "Thu" / "Fri" 
+               / "Sat" / "Sun"
+month   =      "Jan" / "Feb" / "Mar" / "Apr" / "May"
+               / "Jun" / "Jul" / "Aug" / "Sep" 
+               / "Oct" / "Nov" / "Dec"
+day     =      1*2DIGIT
+time    =      1*2DIGIT ":" 1*2DIGIT [ ":" 1*2DIGIT ]
+timezone        =      ( "+" / "-" ) 4DIGIT
+year    =      ( 4DIGIT / 2DIGIT )
+.TE
+.PP
+For compatibility reasons with legacy software, two-digit years
+greater than or equal to 70 should be interpreted as the years
+1970+, while two-digit years less than 70 should be interpreted as
+the years 2000-2069.
+.PP
+Software reading files in this format should also be prepared to
+accept non-numeric timezone information such as "CET DST" for
+Central European Time, dailight saving time.
+.PP
+Example:
+.IP "" 1
+From roessler@does-not-exist.org Fri Jun 23 02:56:55 2000
+.PP
+In order to avoid mis-interpretation of lines in message bodies
+which begin with the four characters "From", followed by a space
+character, the character ">" is commonly prepended in front of such
+lines.
+.SH
+LOCKING
+.PP
+Since 
+.B mbox
+files are frequently accessed by multiple programs in parallel, 
+.B mbox
+files should generally not be accessed without locking.
+.PP
+Three different locking mechanisms (and combinations thereof) are in
+general use:
+.IP "\(bu"
+.BR fcntl (2) 
+locking is mostly used on recent, POSIX-compliant systems.  Use of
+this locking method is, in particular, advisable if 
+.B mbox
+files are accessed through the Network File System (NFS), since it
+seems the only way to reliably invalidate NFS clients' caches.
+.IP "\(bu"
+.BR flock (2)
+locking is mostly used on BSD-based systems.
+.IP "\(bu"
+Dotlocking is used on all kinds of systems.  In order to lock an
+.B mbox
+file named
+.IR folder ,
+an application first creates a temporary file with a unique
+name in the directory in which the 
+.I folder
+resides.  The application then tries to use the
+.BR link (2)
+system call to create a hard link named
+.IB folder .lock
+to the temporary file.  The success of the
+.BR link (2)
+system call should be additionally verified using
+.BR stat (2)
+calls.  If the link has succeeded, the mail folder is considered
+dotlocked.  The temporary file can then safely be unlinked.
+.IP ""
+In order to release the lock, an application just unlinks the
+.IB folder .lock
+file.
+.PP
+If multiple methods are combined, implementors should make sure to
+use the non-blocking variants of the
+.BR fcntl (2)
+and 
+.BR flock (2)
+sytem calls in order to avoid deadlocks.
+.PP
+If multiple methods are combined, an
+.B mbox
+file must not be considered to have been successfully locked before
+all individual locks were obtained.  When one of the individual
+locking methods fails, an application should release all locks it
+acquired successfully, and restart the entire locking procedure from
+the beginning, after a suitable delay.
+.PP
+The locking mechanism used on a particular system is a matter of
+local policy, and should be consistently used by all applications
+installed on the system which access 
+.B mbox
+files. Failure to do so may result in loss of e-mail data, and in
+corrupted
+.B mbox
+files.
+.SH
+FILES
+.IP "/var/spool/mail/\fIuser\fP"
+.IR user 's
+incoming mail folder.
+.IP "~\fIuser\fP/mbox"
+.IR user 's
+archived mail messages, in his home directory.
+.IP "~\fIuser\fP/Mail/"
+A directory in
+.IR user 's
+home directory which is commonly used to hold 
+.B mbox
+format folders.
+.SH
+SEE ALSO
+.PP
+.BR elm (1),
+.BR fcntl (2), 
+.BR flock (2), 
+.BR link (2),
+.BR local (8), 
+.BR mail (1), 
+.BR maildir (5), 
+.BR mail.local (8), 
+.BR mutt (1),
+.BR mutt_dotlock (1), 
+.BR pine (1),
+.BR procmail (1),
+.BR sendmail (8)
+.PP
+D. Crocker, Standard for the format of ARPA Internet text messages,
+RFC 822
+.PP
+M. R. Horton, UUCP mail interchange format standard, RFC 976
+.SH
+AUTHOR
+.PP
+The present document was written by Thomas Roessler
+<roessler@does-not-exist.org>. 
+.SH
+HISTORY
+.PP
+The
+.B mbox
+format occured in Version 6 AT&T Unix.
+.PP
+A variant of this format was documented in RFC 976.
diff --git a/doc/mutt.man b/doc/mutt.man
new file mode 100644 (file)
index 0000000..e7c9524
--- /dev/null
@@ -0,0 +1,206 @@
+.\" -*-nroff-*-
+.\"
+.\"
+.\"     Copyright (C) 1996-2000 Michael R. Elkins <me@cs.hmc.edu>
+.\" 
+.\"     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.
+.\"
+.TH mutt 1 "January 2002" Unix "User Manuals"
+.SH NAME
+mutt \- The Mutt Mail User Agent
+.SH SYNOPSIS
+.PP
+.B mutt
+[-GnRyzZ] 
+[-e \fIcmd\fP] [-F \fIfile\fP] [-g \fIserver\fP] [-m \fItype\fP] [-f \fIfile\fP]
+.PP
+.B mutt 
+[-nx] 
+[-e \fIcmd\fP] 
+[-a \fIfile\fP]
+[-F \fIfile\fP]
+[-H \fIfile\fP]
+[-i \fIfile\fP]
+[-s \fIsubj\fP]
+[-b \fIaddr\fP]
+[-c \fIaddr\fP] \fIaddr\fP [...]
+.PP
+.B mutt
+[-n] [-e \fIcmd\fP] [-F \fIfile\fP] -p
+.PP
+.B mutt
+[-n] [-e \fIcmd\fP] [-F \fIfile\fP] -Q \fIquery\fP
+.PP
+.B mutt
+[-n] [-e \fIcmd\fP] [-F \fIfile\fP] -A \fIalias\fP
+.PP
+.B mutt 
+-v[v]
+.SH DESCRIPTION
+.PP
+Mutt is a small but very powerful text based program for reading electronic
+mail under unix operating systems, including support color terminals, MIME,
+and a threaded sorting mode.
+.SH OPTIONS
+.PP
+.IP "-A \fIalias\fP"
+An expanded version of the given alias is passed to stdout.
+.IP "-a \fIfile\fP"
+Attach a file to your message using MIME.
+.IP "-b \fIaddress\fP"
+Specify a blind-carbon-copy (BCC) recipient
+.IP "-c \fIaddress\fP"
+Specify a carbon-copy (CC) recipient
+.IP "-e \fIcommand\fP"
+Specify a configuration command to be run after processing of initialization
+files.
+.IP "-f \fImailbox\fP"
+Specify which mailbox to load.
+.IP "-F \fImuttrc\fP"
+Specify an initialization file to read instead of ~/.muttrc
+.IP "-g \fIserver\fP"
+Start Mutt with a listing of subscribed newsgroups at specified newsserver.
+.IP "-G"
+Start Mutt with a listing of subscribed newsgroups.
+.IP "-h"
+Display help.
+.IP "-H \fIdraft\fP"
+Specify a draft file which contains header and body to use to send a
+message.
+.IP "-i \fIinclude\fP"
+Specify a file to include into the body of a message.
+.IP "-m \fItype\fP       "
+specify a default mailbox type
+.IP "-n"
+Causes Mutt to bypass the system configuration file.
+.IP "-p"
+Resume a postponed message.
+.IP "-Q \fIquery\fP"
+Qeury a configuration variables value.  The query is executed after
+all configuration files have been parsed, and any commands given on
+the command line have been executed.
+.IP "-R"
+Open a mailbox in \fIread-only\fP mode.
+.IP "-s \fIsubject\fP"
+Specify the subject of the message.
+.IP "-v"
+Display the Mutt version number and compile-time definitions.
+.IP "-x"
+Emulate the mailx compose mode.
+.IP "-y"
+Start Mutt with a listing of all mailboxes specified by the \fImailboxes\fP
+command.
+.IP "-z"
+When used with -f, causes Mutt not to start if there are no messages in the
+mailbox.
+.IP "-Z"
+Causes Mutt to open the first mailbox specified by the \fImailboxes\fP
+command which contains new mail.
+.SH ENVIRONMENT
+.PP
+.IP "EDITOR"
+Specifies the editor to use if VISUAL is unset.
+.IP "EMAIL"
+The user's e-mail address.
+.IP "HOME"
+Full path of the user's home directory.
+.IP "MAIL"
+Full path of the user's spool mailbox.
+.IP "MAILDIR"
+Full path of the user's spool mailbox.  Commonly used when the spool
+mailbox is a 
+.B maildir (5)
+folder.
+.IP "MAILCAPS"
+Path to search for mailcap files.
+.IP "MM_NOASK"
+If this variable is set, mailcap are always used without prompting first.
+.IP "PGPPATH"
+Directory in which the user's PGP public keyring can be found.
+.IP "TMPDIR"
+Directory in which temporary files are created.
+.IP "REPLYTO"
+Default Reply-To address.
+.IP "VISUAL"
+Specifies the editor to use when composing messages.
+.SH FILES
+.PP
+.IP "~/.muttrc or ~/.mutt/muttrc"
+User configuration file.
+.IP "/etc/Muttrc"
+System-wide configuration file.
+.IP "/tmp/muttXXXXXX"
+Temporary files created by Mutt.
+.IP "~/.mailcap"
+User definition for handling non-text MIME types.
+.IP "/etc/mailcap"
+System definition for handling non-text MIME types.
+.IP "~/.mime.types"
+User's personal mapping between MIME types and file extensions.
+.IP "/etc/mime.types"
+System mapping between MIME types and file extensions.
+.IP "/usr/local/bin/mutt_dotlock"
+The privileged dotlocking program.
+.IP "/usr/local/doc/mutt/manual.txt"
+The Mutt manual.
+.SH BUGS
+.PP
+None.  Mutts have fleas, not bugs.
+.SH FLEAS
+.PP
+Suspend/resume while editing a file with an external editor does not work
+under SunOS 4.x if you use the curses lib in /usr/5lib.  It \fIdoes\fP work
+with the S-Lang library, however.
+.PP
+Resizing the screen while using an external pager causes Mutt to go haywire
+on some systems.
+.PP
+suspend/resume does not work under Ultrix.
+.PP
+The help line for the index menu is not updated if you change the bindings
+for one of the functions listed while Mutt is running.
+.PP
+For a more up-to-date list of bugs, errm, fleas, please visit the
+mutt project's bug tracking system under http://bugs.guug.de/.  To
+report a bug, please use the
+.BR flea (1)
+program.
+.SH NO WARRANTIES
+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.
+.SH SEE ALSO
+.PP
+.BR curses (3),
+.BR flea (1),
+.BR mailcap (5),
+.BR maildir (5),
+.BR mbox (5),
+.BR mutt_dotlock (1),
+.BR muttrc (5),
+.BR ncurses (3),
+.BR sendmail (1),
+.BR smail (1)
+.PP
+Mutt Home Page: http://www.mutt.org/
+.PP
+The Mutt manual
+.PP
+The GNU General Public License.
+.SH AUTHOR
+.PP
+Michael Elkins, and others.  Use <mutt-dev@mutt.org> to contact
+the developers.
diff --git a/doc/muttbug.man b/doc/muttbug.man
new file mode 100644 (file)
index 0000000..5b9aad8
--- /dev/null
@@ -0,0 +1,200 @@
+.\" -*-nroff-*-
+.\"
+.\"
+.\"     Copyright (C) 1996-2000 Thomas Roessler <roessler@does-not-exist.org>
+.\" 
+.\"     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.
+.\"
+.TH flea 1 "July 2000" Unix "User Manuals"
+.SH NAME
+.PP
+flea \- Report a bug (or rather a flea) in mutt.
+.SH SYNOPSIS
+.PP
+.B flea
+.SH DESCRIPTION
+.PP
+.B flea
+is a shell script which helps you to submit a bug report against the 
+.BR mutt (1)
+mail user agent.
+.PP
+If you invoke 
+.BR flea , 
+you'll first be prompted for a short
+description of the problem you experience.  This will be used as the
+bug report's subject line, so it should be concise, but informative.
+.PP
+You are then asked to assign an initial severity level to the
+problem you observe; 
+.B flea
+will give you a description which severity level is appropriate or
+not.
+.PP
+Then, you are asked for the location of a core dump (normally named
+.BR core )
+which may have been left over by a crash of your 
+.BR mutt (1).
+You can just type \(lqno\(rq here, or you can enter the path leading 
+to a core dump.
+.B flea
+will try to use either
+.BR sdb (1),
+.BR dbx (1),
+or
+.BR gdb (1)
+to extract some information from this core dump which may be helpful
+to developers in order to determine the reason for the crash.
+.PP
+Finally, you are asked whether or not you want to include personal
+and system 
+.BR mutt (1)
+configuration files with the bug report.  If at all possible, we
+urge you to answer these questions with \(lqyes\(rq, since a
+reference configuration makes it incredibly easier to track down a
+problem.
+.PP
+If you are using Debian GNU/Linux,
+.B flea
+will now check whether or not 
+.B mutt
+has been installed as a Debian
+package on your system, and suggest to file the bug against the
+.BR mutt (1)
+and Debian bug tracking systems.  This option was added since the 
+.BR mutt (1)
+project uses another instantiation of the Debian bug tracking
+system, so submitting bugs against both systems in one pass is
+simple.
+.PP
+You are then dropped into your favorite editor as determined by the 
+.B EDITOR
+and
+.B VISUAL
+environment variables.  
+.PP
+Please give us details about the problem in the empty space below
+the line reading \(lqPlease type your report below this line\(rq.
+We are most interested in precise information on what symptoms you
+observe and what steps may be used to reproduce the bug.  Chances
+are that problems which can easily be reproduced will be fixed
+quickly.  So please take some time when filling out this part of the
+template.
+.PP
+The remainder of the template contains various kinds of information
+gathered from your system, including output of the
+.BR uname (1)
+command, output from
+.BR mutt (1)
+itself, and your system's 
+.BR mutt (1)
+configuration files.  You may wish to browse through this part of
+the bug report form in order to avoid leaking confidential
+information to the public.
+.PP
+If you leave the editor, 
+.B flea
+will give you the option to review, re-edit, submit, or abandon your
+bug report.  If you decide to submit it, a mail message containing
+your report will be sent to <submit@bugs.guug.de>.  You'll receive a
+copy of this message.
+.PP
+While your bug report is being processed by the bug tracking system,
+you will receive various e-mail messages from the bug tracking
+system informing you about what's going on: Once your bug report has
+been entered into the bug tracking system, it will be assigned a
+unique serial number about which you are informed via e-mail.  If
+you wish to submit additional information about the bug, you can
+just send it to the address
+.BR \fIserial\fP@bugs.guug.de .
+.PP
+Later, you will most likely receive questions from the developers
+about the problem you observed, and you will eventually be informed
+that your bug report has been closed.  This means that the bug has
+been fixed at least in the
+.BR cvs (1)
+repository.  If the answers you receive don't satisfy you, don't
+hesitate to contact the developers directly under
+.BR mutt-dev@mutt.org.
+.PP
+You can also browse your bug report and all additional information
+and replies connected to it using the bug tracking system's Web
+interface under the following URL:
+http://bugs.guug.de/
+.SH
+ENVIRONMENT
+.PP
+.B flea
+will use the following environment variables:
+.IP "EMAIL"
+Your electronic mail address.  Will be used to set the bug report's
+From header, and to send you a copy of the report.
+.IP "LOGNAME"
+Your login name.  If the
+.B EMAIL
+environment variable isn't set, this will be used instead to send
+you a copy of the report.  Setting the sender will be left to 
+.BR sendmail (1)
+on your system.
+.IP "REPLYTO"
+If set, the bug report will contain a Reply-To header with the
+e-mail address contained in this environment variable.
+.IP "ORGANIZATION"
+If set, the bug report will contain an Organization header with the
+contents of this environment variable.
+.IP "PAGER"
+If set, this environment variable will be expected to contain the
+path to your favorite pager for viewing the bug report.  If unset, 
+.BR more (1)
+will be used.
+.IP "VISUAL"
+If set, this environment variable will be expected to contain the
+path to your favorite visual editor.
+.IP "EDITOR"
+If set, this environment variable will be expected to contain the
+path to your favorite editor.  This variable is examined if and only
+if the 
+.B VISUAL
+environment variable is unset.  If
+.B EDITOR
+is unset, 
+.BR vi (1)
+will be used to edit the bug report.
+.SH
+FILES
+.PP
+.IP "core"
+If present, this file may contain a post-mortem memory dump of mutt.
+It will be inspected using the debugger installed on your system.
+.SH 
+SEE ALSO
+.PP
+.BR dbx (1),
+.BR gdb (1),
+.BR lynx (1),
+.BR mutt (1),
+.BR muttrc (5),
+.BR sdb (1),
+.BR sendmail (1),
+.BR uname (1),
+.BR vi (1)
+.PP
+The mutt bug tracking system: http://bugs.guug.de/
+.SH
+AUTHOR
+.PP
+.B flea
+and this manual page were written by Thomas Roessler
+<roessler@does-not-exist.org>.
diff --git a/doc/muttrc.man b/doc/muttrc.man
new file mode 100644 (file)
index 0000000..2061c7b
--- /dev/null
@@ -0,0 +1,5042 @@
+'\" t
+.\" -*-nroff-*-
+.\"
+.\"     Copyright (C) 1996-2000 Michael R. Elkins <me@cs.hmc.edu>
+.\"    Copyright (C) 1999-2000 Thomas Roessler <roessler@guug.de>
+.\" 
+.\"     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.
+.\"
+.TH muttrc 5 "September 2002" Unix "User Manuals"
+.SH NAME
+muttrc \- Configuration file for the Mutt Mail User Agent
+.SH DESCRIPTION
+.PP
+A mutt configuration file consists of a series of \(lqcommands\(rq.
+Each line of the file may contain one or more commands.  When
+multiple commands are used, they must be separated by a semicolon
+(\(lq\fB;\fP\(rq).
+.PP
+The hash mark, or pound sign (\(lq\fB#\fP\(rq), is used as a
+\(lqcomment\(rq character. You can use it to annotate your
+initialization file. All text after the comment character to the end
+of the line is ignored.
+.PP
+Single quotes (\(lq\fB'\fP\(rq) and double quotes (\(lq\fB"\fP\(rq)
+can be used to quote strings which contain spaces or other special
+characters.  The difference between the two types of quotes is
+similar to that of many popular shell programs, namely that a single
+quote is used to specify a literal string (one that is not
+interpreted for shell variables or quoting with a backslash [see
+next paragraph]), while double quotes indicate a string for which
+should be evaluated.  For example, backtics are evaluated inside of
+double quotes, but not for single quotes.
+.PP
+\fB\(rs\fP quotes the next character, just as in shells such as bash and zsh.
+For example, if want to put quotes (\(lq\fB"\fP\(rq) inside of a
+string, you can use \(lq\fB\(rs\fP\(rq to force the next character
+to be a literal instead of interpreted character.
+.PP
+\(lq\fB\(rs\(rs\fP\(rq means to insert a literal \(lq\fB\(rs\fP\(rq into the
+line.  \(lq\fB\(rsn\fP\(rq and \(lq\fB\(rsr\fP\(rq have their usual
+C meanings of linefeed and carriage-return, respectively.
+.PP
+A \(lq\fB\(rs\fP\(rq at the end of a line can be used to split commands over
+multiple lines, provided that the split points don't appear in the
+middle of command names.
+.PP
+It is also possible to substitute the output of a Unix command in an
+initialization file.  This is accomplished by enclosing the command
+in backquotes (\fB`\fP\fIcommand\fP\fB`\fP).
+.PP
+UNIX environments can be accessed like the way it is done in shells
+like sh and bash: Prepend the name of the environment by a dollar
+(\(lq\fB\(Do\fP\(rq) sign.
+.PP
+.SH COMMANDS
+.PP
+.nf
+\fBalias\fP \fIkey\fP \fIaddress\fP [\fB,\fP \fIaddress\fP [ ... ]]
+\fBunalias\fP [\fB * \fP | \fIkey\fP ]
+.fi
+.IP
+\fBalias\fP defines an alias \fIkey\fP for the given addresses.
+\fBunalias\fP removes the alias corresponding to the given \fIkey\fP or
+all aliases when \(lq\fB*\fP\(rq is used as an argument.
+.PP
+.nf
+\fBalternates\fP \fIregexp\fP [ \fB,\fP \fIregexp\fP [ ... ]]
+\fBunalternates\fP [\fB * \fP | \fIregexp\fP [ \fB,\fP \fIregexp\fP [ ... ]] ]
+.fi
+.IP
+\fBalternates\fP is used to inform mutt about alternate addresses
+where you receive mail; you can use regular expressions to specify
+alternate addresses.  This affects mutt's idea about messages
+from you, and messages addressed to you.  \fBunalternates\fP removes
+a regular expression from the list of known alternates.
+.PP
+.nf
+\fBalternative_order\fP \fItype\fP[\fB/\fP\fIsubtype\fP] [ ... ]
+\fBunalternative_order\fP [\fB * \fP | \fItype\fP/\fIsubtype\fP] [...]
+.fi
+.IP
+\fBalternative_order\fP command permits you to define an order of preference which is
+used by mutt to determine which part of a
+\fBmultipart/alternative\fP body to display.
+A subtype of \(lq\fB*\fP\(rq matches any subtype, as does an empty
+subtype.   \fBunalternative_order\fP removes entries from the
+ordered list or deletes the entire list when \(lq\fB*\fP\(rq is used
+as an argument.
+.PP
+.nf
+\fBauto_view\fP \fItype\fP[\fB/\fP\fIsubtype\fP] [ ... ]
+\fBunauto_view\fP \fItype\fP[fB/\fP\fIsubtype\fP] [ ... ]
+.fi
+.IP
+This commands permits you to specify that mutt should automatically
+convert the given MIME types to text/plain when displaying messages.
+For this to work, there must be a 
+.BR mailcap (5)
+entry for the given MIME type with the 
+.B copiousoutput
+flag set.  A subtype of \(lq\fB*\fP\(rq 
+matches any subtype, as does an empty subtype.
+.PP
+.nf
+\fBmime_lookup\fP \fItype\fP[\fB/\fP\fIsubtype\fP] [ ... ]
+\fBunmime_lookup\fP \fItype\fP[\fB/\fP\fIsubtype\fP] [ ... ]
+.fi
+.IP
+This command permits you to define a list of "data" MIME content
+types for which mutt will try to determine the actual file type from
+the file name, and not use a 
+.BR mailcap (5)
+entry given for the original MIME type.  For instance, you may add
+the \fBapplication/octet-stream\fP MIME type to this list.
+.TP
+\fBbind\fP \fImap\fP \fIkey\fP \fIfunction\fP
+This command binds the given \fIkey\fP for the given \fImap\fP to
+the given \fIfunction\fP.
+.IP
+Valid maps are:
+.BR generic ", " alias ", " attach ", " 
+.BR browser ", " editor ", "
+.BR index ", " compose ", " 
+.BR pager ", " pgp ", " postpone ", "
+.BR mix .
+.IP
+For more information on keys and functions, please consult the Mutt
+Manual.
+.TP
+\fBaccount-hook\fP [\fB!\fP]\fIregexp\fP \fIcommand\fP
+This hook is executed whenever you access a remote mailbox. Useful
+to adjust configuration settings to different IMAP or POP servers.
+.TP
+\fBcharset-hook\fP \fIalias\fP \fIcharset\fP
+This command defines an alias for a character set.  This is useful
+to properly display messages which are tagged with a character set
+name not known to mutt.
+.TP
+\fBiconv-hook\fP \fIcharset\fP \fIlocal-charset\fP
+This command defines a system-specific name for a character set.
+This is useful when your system's 
+.BR iconv (3)
+implementation does not understand MIME character set names (such as 
+.BR iso-8859-1 ),
+but instead insists on being fed with implementation-specific
+character set names (such as
+.BR 8859-1 ).
+In this specific case, you'd put this into your configuration file:
+.IP
+.B "iconv-hook iso-8859-1 8859-1"
+.TP
+\fBmessage-hook\fP [\fB!\fP]\fIpattern\fP \fIcommand\fP
+Before mutt displays (or formats for replying or forwarding) a
+message which matches the given \fIpattern\fP (or, when it is
+preceded by an exclamation mark, does not match the \fIpattern\fP),
+the given \fIcommand\fP is executed.  When multiple
+\fBmessage-hook\fPs match, they are  executed  in  the order in
+which they occur in the configuration file.
+.TP
+\fBfolder-hook\fP [\fB!\fP]\fIregexp\fP \fIcommand\fP
+When mutt enters a folder which matches \fIregexp\fP (or, when
+\fIregexp\fP is preceded by an exclamation mark, does not match
+\fIregexp\fP), the given \fIcommand\fP is executed.
+.IP
+When several \fBfolder-hook\fPs match a given mail folder, they are
+executed in the order given in the configuration file.
+.TP
+\fBmacro\fP \fImap\fP \fIkey\fP \fIsequence\fP [ \fIdescription\fP ]
+This command binds the given \fIsequence\fP of keys to the given
+\fIkey\fP in the given \fImap\fP.  For valid maps, see \fBbind\fP.
+.PP
+.nf
+\fBcolor\fP \fIobject\fP \fIforeground\fP \fIbackground\fP [ \fI regexp\fP ]
+\fBcolor\fP index \fIforeground\fP \fIbackground\fP [ \fI pattern\fP ]
+\fBuncolor\fP index \fIpattern\fP [ \fIpattern\fP ... ]
+.fi
+.IP
+If your terminal supports color, these commands can be used to
+assign \fIforeground\fP/\fIbackgound\fP combinations to certain
+objects.  Valid objects are:
+.BR attachment ", " body ", " bold ", " header ", "
+.BR hdrdefault ", " index ", " indicator ", " markers ", "
+.BR message ", " normal ", " quoted ", " quoted\fIN\fP ", "
+.BR search ", " signature ", " status ", " tilde ", " tree ", "
+.BR underline .
+The
+.BR body " and " header
+objects allow you to restrict the colorization to a regular
+expression.  The \fBindex\fP object permits you to select colored
+messages by pattern.
+.IP
+Valid colors include:
+.BR white ", " black ", " green ", " magenta ", " blue ", "
+.BR cyan ", " yellow ", " red ", " default ", " color\fIN\fP .
+.PP
+.nf
+\fBmono\fP \fIobject\fP \fIattribute\fP [ \fIregexp\fP ]
+\fBmono\fP index \fIattribute\fP [ \fIpattern\fP ]
+.fi
+.IP
+For terminals which don't support color, you can still assign
+attributes to objects.  Valid attributes include:
+.BR none ", " bold ", " underline ", " 
+.BR reverse ", and " standout .
+.TP
+[\fBun\fP]\fBignore\fP \fIpattern\fP [ \fIpattern\fP ... ]
+The \fBignore\fP command permits you to specify header fields which
+you usually don't wish to see.  Any header field whose tag
+\fIbegins\fP with an \(lqignored\(rq pattern will be ignored.
+.IP
+The \fBunignore\fP command permits you to define exceptions from
+the above mentioned list of ignored headers.
+.PP
+.nf
+\fBlists\fP \fIregexp\fP [ \fIregexp\fP ... ]
+\fBunlists\fP \fIregexp\fP [ \fIregexp\fP ... ]
+\fBsubscribe\fP \fIregexp\fP [ \fIregexp\fP ... ]
+\fBunsubscribe\fP \fIregexp\fP [ \fIregexp\fP ... ]
+.fi
+.IP
+Mutt maintains two lists of mailing list address patterns, a list of
+subscribed mailing lists, and a list of known mailing lists.  All
+subscribed mailing lists are known.  Patterns use regular expressions.
+.IP
+The \fBlists\fP command adds a mailing list address to the list of
+known mailing lists.  The \fBunlists\fP command removes a mailing
+list from the lists of known and subscribed mailing lists.  The
+\fBsubscribe\fP command adds a mailing list to the lists of known
+and subscribed mailing lists.  The \fBunsubscribe\fP command removes
+it from the list of subscribed mailing lists.
+.TP
+\fBmbox-hook\fP [\fB!\fP]\fIpattern\fP \fImailbox\fP
+When mutt changes to a mail folder which matches \fIpattern\fP,
+\fImailbox\fP will be used as the \(lqmbox\(rq folder, i.e., read
+messages will be moved to that folder when the mail folder is left.
+.IP
+The first matching \fBmbox-hook\fP applies.
+.PP
+.nf
+\fBmailboxes\fP \fIfilename\fP [ \fIfilename\fP ... ]
+\fBunmailboxes\fP [ \fB*\fP | \fIfilename\fP ... ]
+.fi
+.IP
+The \fBmailboxes\fP specifies folders which can receive mail and which will
+be checked for new messages.  When changing folders, pressing space
+will cycle through folders with new mail.  The \fBunmailboxes\fP
+command is used to remove a file name from the list of folders which
+can receive mail.  If "\fB*\fP" is specified as the file name, the
+list is emptied.
+.PP
+.nf
+\fBmy_hdr\fP \fIstring\fP
+\fBunmy_hdr\fP \fIfield\fP
+.fi
+.IP
+Using \fBmy_hdr\fP, you can define headers which will be added to
+the messages you compose.  \fBunmy_hdr\fP will remove the given
+user-defined headers.
+.TP
+\fBhdr_order\fP \fIheader1\fP \fIheader2\fP [ ... ]
+With this command, you can specify an order in which mutt will
+attempt to present headers to you when viewing messages.
+.TP
+\fBsave-hook\fP [\fB!\fP]\fIpattern\fP \fIfilename\fP
+When a message matches \fIpattern\fP, the default file name when
+saving it will be the given \fIfilename\fP.
+.TP
+\fBfcc-hook\fP [\fB!\fP]\fIpattern\fP \fIfilename\fP
+When an outgoing message matches \fIpattern\fP, the default file
+name for storing a copy (fcc) will be the given \fIfilename\fP.
+.TP
+\fBfcc-save-hook\fP [\fB!\fP]\fIpattern\fP \fIfilename\fP
+This command is an abbreviation for identical \fBfcc-hook\fP and
+\fBsave-hook\fP commands.
+.TP
+\fBsend-hook\fP [\fB!\fP]\fIpattern\fP \fIcommand\fP
+When composing a message matching \fIpattern\fP, \fIcommand\fP is
+executed.  When multiple \fBsend-hook\fPs match, they are executed
+in the order in which they occur in the configuration file.
+.TP
+\fBcrypt-hook\fP \fIpattern\fP \fIkey-id\fP
+The crypt-hook command provides a method by which you can
+specify the ID of the public key to be used when encrypting messages
+to a certain recipient.  The meaning of "key ID" is to be taken
+broadly: This can be a different e-mail address, a numerical key ID,
+or even just an arbitrary search string.
+.TP
+\fBpush\fP \fIstring\fP
+This command adds the named \fIstring\fP to the keyboard buffer.
+.PP
+.nf
+\fBset\fP [\fBno\fP|\fBinv\fP]\fIvariable\fP[=\fIvalue\fP] [ ... ]
+\fBtoggle\fP \fIvariable\fP [ ... ]
+\fBunset\fP \fIvariable\fP [ ... ]
+\fBreset\fP \fIvariable\fP [ ... ]
+.fi
+.IP
+These commands are used to set and manipulate configuration
+varibles.
+.IP
+Mutt knows four basic types of variables: boolean, number, string
+and quadoption.  Boolean variables can be \fBset\fP (true),
+\fBunset\fP (false), or \fBtoggle\fPd. Number variables can be assigned
+a positive integer value.
+.IP
+String variables consist of any number of printable characters.
+Strings must be enclosed in quotes if they contain spaces or tabs.
+You may also use the \(lqC\(rq escape sequences \fB\\n\fP and
+\fB\\t\fP for newline and tab, respectively.
+.IP
+Quadoption variables are used to control whether or not to be
+prompted for certain actions, or to specify a default action.  A
+value of \fByes\fP will cause the action to be carried out automatically
+as if you had answered yes to the question.  Similarly, a value of
+\fBno\fP will cause the the action to be carried out as if you had
+answered \(lqno.\(rq A value of \fBask-yes\fP will cause a prompt
+with a default answer of \(lqyes\(rq and \fBask-no\fP will provide a
+default answer of \(lqno.\(rq
+.IP
+The \fBreset\fP command resets all given variables to the compile
+time defaults.  If you reset the special variabe \fBall\fP, all
+variables will reset to their system defaults.
+.TP
+\fBsource\fP \fIfilename\fP
+The given file will be evaluated as a configuration file.
+.TP
+\fBunhook\fP [\fB * \fP | \fIhook-type\fP ]
+This command will remove all hooks of a given type, or all hooks
+when \(lq\fB*\fP\(rq is used as an argument.  \fIhook-type\fP
+can be any of the \fB-hook\fP commands documented above.
+.SH PATTERNS
+.PP
+In various places with mutt, including some of the abovementioned
+\fBhook\fP commands, you can specify patterns to match messages.
+.SS Constructing Patterns
+.PP
+A simple pattern consists of an operator of the form
+\(lq\fB~\fP\fIcharacter\fP\(rq, possibly followed by a parameter
+against which mutt is supposed to match the object specified by
+this operator.  (For a list of operators, see below.)
+.PP
+With some of these operators, the object to be matched consists of
+several e-mail addresses.  In these cases, the object is matched if
+at least one of these e-mail addresses matches. You can prepend a
+hat (\(lq\fB^\fP\(rq) character to such a pattern to indicate that
+\fIall\fP addresses must match in order to match the object.
+.PP
+You can construct complex patterns by combining simple patterns with
+logical operators.  Logical AND is specified by simply concatenating
+two simple patterns, for instance \(lq~C mutt-dev ~s bug\(rq.
+Logical OR is specified by inserting a vertical bar (\(lq\fB|\fP\(rq)
+between two patterns, for instance \(lq~C mutt-dev | ~s bug\(rq.
+Additionally, you can negate a pattern by prepending a bang
+(\(lq\fB!\fP\(rq) character.  For logical grouping, use braces
+(\(lq()\(rq). Example: \(lq!(~t mutt|~c mutt) ~f elkins\(rq.
+.SS Simple Patterns
+.PP
+Mutt understands the following simple patterns:
+.PP
+.TS
+l l.
+~A     all messages
+~b \fIEXPR\fP  messages which contain \fIEXPR\fP in the message body
+~B \fIEXPR\fP  messages which contain \fIEXPR\fP in the whole message
+~c \fIEXPR\fP  messages carbon-copied to \fIEXPR\fP
+~C \fIEXPR\fP  message is either to: or cc: \fIEXPR\fP
+~D     deleted messages
+~d \fIMIN\fP-\fIMAX\fP messages with \(lqdate-sent\(rq in a Date range
+~E     expired messages
+~e \fIEXPR\fP  message which contains \fIEXPR\fP in the \(lqSender\(rq field
+~F     flagged messages
+~f \fIEXPR\fP  messages originating from \fIEXPR\fP
+~g     PGP signed messages
+~G     PGP encrypted messages
+~h \fIEXPR\fP  messages which contain \fIEXPR\fP in the message header
+~k     message contains PGP key material
+~i \fIEXPR\fP  message which match \fIEXPR\fP in the \(lqMessage-ID\(rq field
+~L \fIEXPR\fP  message is either originated or received by \fIEXPR\fP
+~l     message is addressed to a known mailing list
+~m \fIMIN\fP-\fIMAX\fP message in the range \fIMIN\fP to \fIMAX\fP
+~n \fIMIN\fP-\fIMAX\fP messages with a score in the range \fIMIN\fP to \fIMAX\fP
+~N     new messages
+~O     old messages
+~p     message is addressed to you (consults $alternates)
+~P     message is from you (consults $alternates)
+~Q     messages which have been replied to
+~R     read messages
+~r \fIMIN\fP-\fIMAX\fP messages with \(lqdate-received\(rq in a Date range
+~S     superseded messages
+~s \fIEXPR\fP  messages having \fIEXPR\fP in the \(lqSubject\(rq field.
+~T     tagged messages
+~t \fIEXPR\fP  messages addressed to \fIEXPR\fP
+~U     unread messages
+~v     message is part of a collapsed thread.
+~x \fIEXPR\fP  messages which contain \fIEXPR\fP in the \(lqReferences\(rq field
+~z \fIMIN\fP-\fIMAX\fP messages with a size in the range \fIMIN\fP to \fIMAX\fP
+~=     duplicated messages (see $duplicate_threads)
+.TE
+.PP
+In the above, \fIEXPR\fP is a regular expression.
+.PP
+With the \fB~m\fP, \fB~n\fP, and \fB~z\fP operators, you can also
+specify ranges in the forms \fB<\fP\fIMAX\fP, \fB>\fP\fIMIN\fP,
+\fIMIN\fP\fB-\fP, and \fB-\fP\fIMAX\fP.
+.SS Matching dates
+.PP
+The \fB~d\fP and \fB~r\fP operators are used to match date ranges,
+which are interpreted to be given in your local time zone.
+.PP
+A date is of the form
+\fIDD\fP[\fB/\fP\fIMM\fP[\fB/\fP[\fIcc\fP]\fIYY\fP]], that is, a
+two-digit date, optionally followed by a two-digit month, optionally
+followed by a year specifications.  Omitted fields default to the
+current month and year.
+.PP
+Mutt understands either two or four digit year specifications.  When
+given a two-digit year, mutt will interpret values less than 70 as
+lying in the 21st century (i.e., \(lq38\(rq means 2038 and not 1938,
+and \(lq00\(rq is interpreted as 2000), and values
+greater than or equal to 70 as lying in the 20th century.
+.PP
+Note that this behaviour \fIis\fP Y2K compliant, but that mutt
+\fIdoes\fP have a Y2.07K problem.
+.PP
+If a date range consists of a single date, the operator in question
+will match that precise date.  If the date range consists of a dash
+(\(lq\fB-\fP\(rq), followed by a date, this range will match any
+date before and up to the date given.  Similarly, a date followed by
+a dash matches the date given and any later point of time.  Two
+dates, separated by a dash, match any date which lies in the given
+range of time.
+.PP
+You can also modify any absolute date by giving an error range.  An
+error range consists of one of the characters
+.BR + ,
+.BR - ,
+.BR * ,
+followed by a positive number, followed by one of the unit
+characters
+.BR y ,
+.BR m ,
+.BR w ", or"
+.BR d ,
+specifying a unit of years, months, weeks, or days.  
+.B +
+increases the maximum date matched by the given interval of time,
+.B - 
+decreases the minimum date matched by the given interval of time, and
+.B *
+increases the maximum date and decreases the minimum date matched by
+the given interval of time.  It is possible to give multiple error
+margins, which cumulate.  Example:
+.B "1/1/2001-1w+2w*3d"
+.PP
+You can also specify offsets relative to the current date.  An
+offset is specified as one of the characters
+.BR < ,
+.BR > ,
+.BR = ,
+followed by a positive number, followed by one of the unit
+characters
+.BR y ,
+.BR m ,
+.BR w ", or"
+.BR d .
+.B >
+matches dates which are older than the specified amount of time, an
+offset which begins with the character
+.B < 
+matches dates which are more recent than the specified amount of time,
+and an offset which begins with the character
+.B =
+matches points of time which are precisely the given amount of time
+ago.
+.SH CONFIGURATION VARIABLES
+
+.TP
+.B abort_nosubject
+.nf
+Type: quadoption
+Default: ask-yes
+.fi
+.IP
+If set to \fIyes\fP, when composing messages and no subject is given
+at the subject prompt, composition will be aborted.  If set to
+\fIno\fP, composing messages with no subject given at the subject
+prompt will never be aborted.
+
+
+.TP
+.B abort_unmodified
+.nf
+Type: quadoption
+Default: yes
+.fi
+.IP
+If set to \fIyes\fP, composition will automatically abort after
+editing the message body if no changes are made to the file (this
+check only happens after the \fIfirst\fP edit of the file).  When set
+to \fIno\fP, composition will never be aborted.
+
+
+.TP
+.B alias_file
+.nf
+Type: path
+Default: \(lq~/.muttrc\(rq
+.fi
+.IP
+The default file in which to save aliases created by the 
+\(lqcreate-alias\(rq function.
+.IP
+\fBNote:\fP Mutt will not automatically source this file; you must
+explicitly use the \(lqsource\(rq command for it to be executed.
+
+
+.TP
+.B alias_format
+.nf
+Type: string
+Default: \(lq%4n %2f %t %-10a   %r\(rq
+.fi
+.IP
+Specifies the format of the data displayed for the `alias' menu.  The
+following printf(3)-style sequences are available:
+.IP
+
+.RS
+.IP %a 
+alias name
+
+.IP %f 
+flags - currently, a \(rqd\(rq for an alias marked for deletion
+
+.IP %n 
+index number
+
+.IP %r 
+address which alias expands to
+
+.IP %t 
+character which indicates if the alias is tagged for inclusion
+
+.RE
+
+.TP
+.B allow_8bit
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+Controls whether 8-bit data is converted to 7-bit using either Quoted-
+Printable or Base64 encoding when sending mail.
+
+
+.TP
+.B allow_ansi
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+Controls whether ANSI color codes in messages (and color tags in 
+rich text messages) are to be interpreted.
+Messages containing these codes are rare, but if this option is set,
+their text will be colored accordingly. Note that this may override
+your color choices, and even present a security problem, since a
+message could include a line like \(rq[-- PGP output follows ...\(rq and
+give it the same color as your attachment color.
+
+
+.TP
+.B arrow_cursor
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When set, an arrow (\(lq->\(rq) will be used to indicate the current entry
+in menus instead of highlighting the whole line.  On slow network or modem
+links this will make response faster because there is less that has to
+be redrawn on the screen when moving to the next or previous entries
+in the menu.
+
+
+.TP
+.B ascii_chars
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set, Mutt will use plain ASCII characters when displaying thread
+and attachment trees, instead of the default \fIACS\fP characters.
+
+
+.TP
+.B askbcc
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set, Mutt will prompt you for blind-carbon-copy (Bcc) recipients
+before editing an outgoing message.
+
+
+.TP
+.B askcc
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set, Mutt will prompt you for carbon-copy (Cc) recipients before
+editing the body of an outgoing message.
+
+
+.TP
+.B ask_follow_up
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set, Mutt will prompt you for follow-up groups before editing
+the body of an outgoing message.
+
+
+.TP
+.B ask_x_comment_to
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set, Mutt will prompt you for x-comment-to field before editing
+the body of an outgoing message.
+
+
+.TP
+.B attach_format
+.nf
+Type: string
+Default: \(lq%u%D%I %t%4n %T%.40d%> [%.7m/%.10M, %.6e%?C?, %C?, %s] \(rq
+.fi
+.IP
+This variable describes the format of the `attachment' menu.  The
+following printf-style sequences are understood:
+.IP
+
+.RS
+.IP %C  
+charset
+
+.IP %c  
+reqiures charset conversion (n or c)
+
+.IP %D  
+deleted flag
+
+.IP %d  
+description
+
+.IP %e  
+MIME content-transfer-encoding
+
+.IP %f  
+filename
+
+.IP %I  
+disposition (I=inline, A=attachment)
+
+.IP %m  
+major MIME type
+
+.IP %M  
+MIME subtype
+
+.IP %n  
+attachment number
+
+.IP %s  
+size
+
+.IP %t  
+tagged flag
+
+.IP %T  
+graphic tree characters
+
+.IP %u  
+unlink (=to delete) flag
+
+.IP %>X 
+right justify the rest of the string and pad with character \(rqX\(rq
+
+.IP %|X 
+pad to the end of the line with character \(rqX\(rq
+
+.RE
+
+.TP
+.B attach_sep
+.nf
+Type: string
+Default: \(lq\\n\(rq
+.fi
+.IP
+The separator to add between attachments when operating (saving,
+printing, piping, etc) on a list of tagged attachments.
+
+
+.TP
+.B attach_split
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+If this variable is unset, when operating (saving, printing, piping,
+etc) on a list of tagged attachments, Mutt will concatenate the
+attachments and will operate on them as a single attachment. The
+\(lq$attach_sep\(rq separator is added after each attachment. When set,
+Mutt will operate on the attachments one by one.
+
+
+.TP
+.B attribution
+.nf
+Type: string
+Default: \(lqOn %d, %n wrote:\(rq
+.fi
+.IP
+This is the string that will precede a message which has been included
+in a reply.  For a full listing of defined printf()-like sequences see
+the section on \(lq$index_format\(rq.
+
+
+.TP
+.B autoedit
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When set along with \(lq$edit_headers\(rq, Mutt will skip the initial
+send-menu and allow you to immediately begin editing the body of your
+message.  The send-menu may still be accessed once you have finished
+editing the body of your message.
+.IP
+Also see \(lq$fast_reply\(rq.
+
+
+.TP
+.B auto_tag
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When set, functions in the \fIindex\fP menu which affect a message
+will be applied to all tagged messages (if there are any).  When
+unset, you must first use the tag-prefix function (default: \(rq;\(rq) to
+make the next function apply to all tagged messages.
+
+
+.TP
+.B beep
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When this variable is set, mutt will beep when an error occurs.
+
+
+.TP
+.B beep_new
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When this variable is set, mutt will beep whenever it prints a message
+notifying you of new mail.  This is independent of the setting of the
+\(lq$beep\(rq variable.
+
+
+.TP
+.B bounce
+.nf
+Type: quadoption
+Default: ask-yes
+.fi
+.IP
+Controls whether you will be asked to confirm bouncing messages.
+If set to \fIyes\fP you don't get asked if you want to bounce a
+message. Setting this variable to \fIno\fP is not generally useful,
+and thus not recommended, because you are unable to bounce messages.
+
+
+.TP
+.B bounce_delivered
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When this variable is set, mutt will include Delivered-To headers when
+bouncing messages.  Postfix users may wish to unset this variable.
+
+
+.TP
+.B catchup_newsgroup
+.nf
+Type: quadoption
+Default: ask-yes
+.fi
+.IP
+If this variable is \fIset\fP, Mutt will mark all articles in newsgroup
+as read when you quit the newsgroup (catchup newsgroup).
+
+
+.TP
+.B charset
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+Character set your terminal uses to display and enter textual data.
+
+
+.TP
+.B check_new
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+\fBNote:\fP this option only affects \fImaildir\fP and \fIMH\fP style
+mailboxes.
+.IP
+When \fIset\fP, Mutt will check for new mail delivered while the
+mailbox is open.  Especially with MH mailboxes, this operation can
+take quite some time since it involves scanning the directory and
+checking each file to see if it has already been looked at.  If
+\fIcheck_new\fP is \fIunset\fP, no check for new mail is performed
+while the mailbox is open.
+
+
+.TP
+.B collapse_unread
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When \fIunset\fP, Mutt will not collapse a thread if it contains any
+unread messages.
+
+
+.TP
+.B uncollapse_jump
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When \fIset\fP, Mutt will jump to the next unread message, if any,
+when the current thread is \fIun\fPcollapsed.
+
+
+.TP
+.B compose_format
+.nf
+Type: string
+Default: \(lq-- Mutt: Compose  [Approx. msg size: %l   Atts: %a]%>-\(rq
+.fi
+.IP
+Controls the format of the status line displayed in the \\fCompose\fP
+menu.  This string is similar to \(lq$status_format\(rq, but has its own
+set of printf()-like sequences:
+.IP
+
+.RS
+.IP %a 
+total number of attachments 
+
+.IP %h 
+local hostname
+
+.IP %l 
+approximate size (in bytes) of the current message
+
+.IP %v 
+Mutt version string
+
+.RE
+.IP
+See the text describing the \(lq$status_format\(rq option for more 
+information on how to set \(lq$compose_format\(rq.
+
+
+.TP
+.B confirmappend
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When set, Mutt will prompt for confirmation when appending messages to
+an existing mailbox.
+
+
+.TP
+.B confirmcreate
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When set, Mutt will prompt for confirmation when saving messages to a
+mailbox which does not yet exist before creating it.
+
+
+.TP
+.B connect_timeout
+.nf
+Type: number
+Default: 30
+.fi
+.IP
+Causes Mutt to timeout a network connection (for IMAP or POP) after this
+many seconds if the connection is not able to be established.  A negative
+value causes Mutt to wait indefinitely for the connection to succeed.
+
+
+.TP
+.B content_type
+.nf
+Type: string
+Default: \(lqtext/plain\(rq
+.fi
+.IP
+Sets the default Content-Type for the body of newly composed messages.
+
+
+.TP
+.B copy
+.nf
+Type: quadoption
+Default: yes
+.fi
+.IP
+This variable controls whether or not copies of your outgoing messages
+will be saved for later references.  Also see \(lq$record\(rq,
+\(lq$save_name\(rq, \(lq$force_name\(rq and \(lqfcc-hook\(rq.
+
+
+.TP
+.B crypt_autopgp
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+This variable controls whether or not mutt may automatically enable
+PGP encryption/signing for messages.  See also \(lq$crypt_autoencrypt\(rq,
+\(lq$crypt_replyencrypt\(rq,
+\(lq$crypt_autosign\(rq, \(lq$crypt_replysign\(rq and \(lq$smime_is_default\(rq.
+
+
+.TP
+.B crypt_autosmime
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+This variable controls whether or not mutt may automatically enable
+S/MIME encryption/signing for messages. See also \(lq$crypt_autoencrypt\(rq,
+\(lq$crypt_replyencrypt\(rq,
+\(lq$crypt_autosign\(rq, \(lq$crypt_replysign\(rq and \(lq$smime_is_default\(rq.
+
+
+.TP
+.B date_format
+.nf
+Type: string
+Default: \(lq!%a, %b %d, %Y at %I:%M:%S%p %Z\(rq
+.fi
+.IP
+This variable controls the format of the date printed by the \(lq%d\(rq
+sequence in \(lq$index_format\(rq.  This is passed to the \fIstrftime\fP
+call to process the date. See the man page for \fIstrftime(3)\fP for
+the proper syntax.
+.IP
+Unless the first character in the string is a bang (\(lq!\(rq), the month
+and week day names are expanded according to the locale specified in
+the variable \(lq$locale\(rq. If the first character in the string is a
+bang, the bang is discarded, and the month and week day names in the
+rest of the string are expanded in the \fIC\fP locale (that is in US
+English).
+
+
+.TP
+.B default_hook
+.nf
+Type: string
+Default: \(lq~f %s !~P | (~P ~C %s)\(rq
+.fi
+.IP
+This variable controls how send-hooks, message-hooks, save-hooks,
+and fcc-hooks will
+be interpreted if they are specified with only a simple regexp,
+instead of a matching pattern.  The hooks are expanded when they are
+declared, so a hook will be interpreted according to the value of this
+variable at the time the hook is declared.  The default value matches
+if the message is either from a user matching the regular expression
+given, or if it is from you (if the from address matches
+\(lqalternates\(rq) and is to or cc'ed to a user matching the given
+regular expression.
+
+
+.TP
+.B delete
+.nf
+Type: quadoption
+Default: ask-yes
+.fi
+.IP
+Controls whether or not messages are really deleted when closing or
+synchronizing a mailbox.  If set to \fIyes\fP, messages marked for
+deleting will automatically be purged without prompting.  If set to
+\fIno\fP, messages marked for deletion will be kept in the mailbox.
+
+
+.TP
+.B delete_untag
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+If this option is \fIset\fP, mutt will untag messages when marking them
+for deletion.  This applies when you either explicitly delete a message,
+or when you save it to another folder.
+
+
+.TP
+.B digest_collapse
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+If this option is \fIset\fP, mutt's revattach menu will not show the subparts of
+individual messages in a digest.  To see these subparts, press 'v' on that menu.
+
+
+.TP
+.B display_filter
+.nf
+Type: path
+Default: \(lq\(rq
+.fi
+.IP
+When set, specifies a command used to filter messages.  When a message
+is viewed it is passed as standard input to $display_filter, and the
+filtered message is read from the standard output.
+
+
+.TP
+.B dotlock_program
+.nf
+Type: path
+Default: \(lq/usr/local/bin/mutt_dotlock\(rq
+.fi
+.IP
+Contains the path of the mutt_dotlock (8) binary to be used by
+mutt.
+
+
+.TP
+.B dsn_notify
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+\fBNote:\fP you should not enable this unless you are using Sendmail
+8.8.x or greater.
+.IP
+This variable sets the request for when notification is returned.  The
+string consists of a comma separated list (no spaces!) of one or more
+of the following: \fInever\fP, to never request notification,
+\fIfailure\fP, to request notification on transmission failure,
+\fIdelay\fP, to be notified of message delays, \fIsuccess\fP, to be
+notified of successful transmission.
+.IP
+Example: set dsn_notify=\(rqfailure,delay\(rq
+
+
+.TP
+.B dsn_return
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+\fBNote:\fP you should not enable this unless you are using Sendmail
+8.8.x or greater.
+.IP
+This variable controls how much of your message is returned in DSN
+messages.  It may be set to either \fIhdrs\fP to return just the
+message header, or \fIfull\fP to return the full message.
+.IP
+Example: set dsn_return=hdrs
+
+
+.TP
+.B duplicate_threads
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+This variable controls whether mutt, when sorting by threads, threads
+messages with the same message-id together.  If it is set, it will indicate
+that it thinks they are duplicates of each other with an equals sign
+in the thread diagram.
+
+
+.TP
+.B edit_headers
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+This option allows you to edit the header of your outgoing messages
+along with the body of your message.
+
+
+.TP
+.B editor
+.nf
+Type: path
+Default: \(lq\(rq
+.fi
+.IP
+This variable specifies which editor is used by mutt.
+It defaults to the value of the VISUAL, or EDITOR, environment
+variable, or to the string \(rqvi\(rq if neither of those are set.
+
+
+.TP
+.B encode_from
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When \fIset\fP, mutt will quoted-printable encode messages when
+they contain the string \(rqFrom \(rq in the beginning of a line.
+Useful to avoid the tampering certain mail delivery and transport
+agents tend to do with messages.
+
+
+.TP
+.B envelope_from
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When \fIset\fP, mutt will try to derive the message's \fIenvelope\fP
+sender from the \(rqFrom:\(rq header.  Note that this information is passed 
+to sendmail command using the \(rq-f\(rq command line switch, so don't set this
+option if you are using that switch in $sendmail yourself,
+or if the sendmail on your machine doesn't support that command
+line switch.
+
+
+.TP
+.B escape
+.nf
+Type: string
+Default: \(lq~\(rq
+.fi
+.IP
+Escape character to use for functions in the builtin editor.
+
+
+.TP
+.B fast_reply
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When set, the initial prompt for recipients and subject are skipped
+when replying to messages, and the initial prompt for subject is
+skipped when forwarding messages.
+.IP
+\fBNote:\fP this variable has no effect when the \(lq$autoedit\(rq
+variable is set.
+
+
+.TP
+.B fcc_attach
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+This variable controls whether or not attachments on outgoing messages
+are saved along with the main body of your message.
+
+
+.TP
+.B fcc_clear
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When this variable is set, FCCs will be stored unencrypted and
+unsigned, even when the actual message is encrypted and/or
+signed.
+(PGP only)
+
+
+.TP
+.B folder
+.nf
+Type: path
+Default: \(lq~/Mail\(rq
+.fi
+.IP
+Specifies the default location of your mailboxes.  A `+' or `=' at the
+beginning of a pathname will be expanded to the value of this
+variable.  Note that if you change this variable from the default
+value you need to make sure that the assignment occurs \fIbefore\fP
+you use `+' or `=' for any other variables since expansion takes place
+during the `set' command.
+
+
+.TP
+.B folder_format
+.nf
+Type: string
+Default: \(lq%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f\(rq
+.fi
+.IP
+This variable allows you to customize the file browser display to your
+personal taste.  This string is similar to \(lq$index_format\(rq, but has
+its own set of printf()-like sequences:
+.IP
+
+.RS
+.IP %C  
+current file number
+
+.IP %d  
+date/time folder was last modified
+
+.IP %f  
+filename
+
+.IP %F  
+file permissions
+
+.IP %g  
+group name (or numeric gid, if missing)
+
+.IP %l  
+number of hard links
+
+.IP %N  
+N if folder has new mail, blank otherwise
+
+.IP %s  
+size in bytes
+
+.IP %t  
+* if the file is tagged, blank otherwise
+
+.IP %u  
+owner name (or numeric uid, if missing)
+
+.IP %>X 
+right justify the rest of the string and pad with character \(rqX\(rq
+
+.IP %|X 
+pad to the end of the line with character \(rqX\(rq
+
+.RE
+
+.TP
+.B followup_to
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+Controls whether or not the \fIMail-Followup-To\fP header field is
+generated when sending mail.  When \fIset\fP, Mutt will generate this
+field when you are replying to a known mailing list, specified with
+the \(lqsubscribe\(rq or \(lqlists\(rq commands.
+.IP
+This field has two purposes.  First, preventing you from
+receiving duplicate copies of replies to messages which you send
+to mailing lists, and second, ensuring that you do get a reply
+separately for any messages sent to known lists to which you are
+not subscribed.  The header will contain only the list's address
+for subscribed lists, and both the list address and your own
+email address for unsubscribed lists.  Without this header, a
+group reply to your message sent to a subscribed list will be
+sent to both the list and your address, resulting in two copies
+of the same email for you.
+
+
+.TP
+.B followup_to_poster
+.nf
+Type: quadoption
+Default: ask-yes
+.fi
+.IP
+If this variable is \fIset\fP and the keyword \(rqposter\(rq is present in
+\fIFollowup-To\fP header, follow-up to newsgroup function is not
+permitted.  The message will be mailed to the submitter of the
+message via mail.
+
+
+.TP
+.B force_name
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+This variable is similar to \(lq$save_name\(rq, except that Mutt will
+store a copy of your outgoing message by the username of the address
+you are sending to even if that mailbox does not exist.
+.IP
+Also see the \(lq$record\(rq variable.
+
+
+.TP
+.B forward_decode
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+Controls the decoding of complex MIME messages into text/plain when
+forwarding a message.  The message header is also RFC2047 decoded.
+This variable is only used, if \(lq$mime_forward\(rq is \fIunset\fP,
+otherwise \(lq$mime_forward_decode\(rq is used instead.
+
+
+.TP
+.B forward_edit
+.nf
+Type: quadoption
+Default: yes
+.fi
+.IP
+This quadoption controls whether or not the user is automatically
+placed in the editor when forwarding messages.  For those who always want
+to forward with no modification, use a setting of \(lqno\(rq.
+
+
+.TP
+.B forward_format
+.nf
+Type: string
+Default: \(lq[%a: %s]\(rq
+.fi
+.IP
+This variable controls the default subject when forwarding a message.
+It uses the same format sequences as the \(lq$index_format\(rq variable.
+
+
+.TP
+.B forward_quote
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When \fIset\fP forwarded messages included in the main body of the
+message (when \(lq$mime_forward\(rq is \fIunset\fP) will be quoted using
+\(lq$indent_string\(rq.
+
+
+.TP
+.B from
+.nf
+Type: e-mail address
+Default: \(lq\(rq
+.fi
+.IP
+When set, this variable contains a default from address.  It
+can be overridden using my_hdr (including from send-hooks) and
+\(lq$reverse_name\(rq.  This variable is ignored if \(lq$use_from\(rq
+is unset.
+.IP
+Defaults to the contents of the environment variable EMAIL.
+
+
+.TP
+.B gecos_mask
+.nf
+Type: regular expression
+Default: \(lq^[^,]*\(rq
+.fi
+.IP
+A regular expression used by mutt to parse the GECOS field of a password
+entry when expanding the alias.  By default the regular expression is set
+to \(rq^[^,]*\(rq which will return the string up to the first \(rq,\(rq encountered.
+If the GECOS field contains a string like \(rqlastname, firstname\(rq then you
+should set the gecos_mask=\(rq.*\(rq.
+.IP
+This can be useful if you see the following behavior: you address a e-mail
+to user ID stevef whose full name is Steve Franklin.  If mutt expands 
+stevef to \(rqFranklin\(rq stevef@foo.bar then you should set the gecos_mask to
+a regular expression that will match the whole name so mutt will expand
+\(rqFranklin\(rq to \(rqFranklin, Steve\(rq.
+
+
+.TP
+.B group_index_format
+.nf
+Type: string
+Default: \(lq%4C %M%N %5s  %-45.45f %d\(rq
+.fi
+.IP
+This variable allows you to customize the newsgroup browser display to
+your personal taste.  This string is similar to \(lqindex_format\(rq, but
+has its own set of printf()-like sequences:
+.IP
+
+.IP
+.DS
+.sp
+.ft CR
+.nf
+%C      current newsgroup number
+%d      description of newsgroup (becomes from server)
+%f      newsgroup name
+%M      - if newsgroup not allowed for direct post (moderated for example)
+%N      N if newsgroup is new, u if unsubscribed, blank otherwise
+%n      number of new articles in newsgroup
+%s      number of unread articles in newsgroup
+%>X     right justify the rest of the string and pad with character \(rqX\(rq
+%|X     pad to the end of the line with character \(rqX\(rq
+
+.fi
+.ec
+.ft P
+.sp
+
+
+.TP
+.B hdrs
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When unset, the header fields normally added by the \(lqmy_hdr\(rq
+command are not created.  This variable \fImust\fP be unset before
+composing a new message or replying in order to take effect.  If set,
+the user defined header fields are added to every new message.
+
+
+.TP
+.B header
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When set, this variable causes Mutt to include the header
+of the message you are replying to into the edit buffer.
+The \(lq$weed\(rq setting applies.
+
+
+.TP
+.B help
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When set, help lines describing the bindings for the major functions
+provided by each menu are displayed on the first line of the screen.
+.IP
+\fBNote:\fP The binding will not be displayed correctly if the
+function is bound to a sequence rather than a single keystroke.  Also,
+the help line may not be updated if a binding is changed while Mutt is
+running.  Since this variable is primarily aimed at new users, neither
+of these should present a major problem.
+
+
+.TP
+.B hidden_host
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When set, mutt will skip the host name part of \(lq$hostname\(rq variable
+when adding the domain part to addresses.  This variable does not
+affect the generation of Message-IDs, and it will not lead to the 
+cut-off of first-level domains.
+
+
+.TP
+.B hide_limited
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When set, mutt will not show the presence of messages that are hidden
+by limiting, in the thread tree.
+
+
+.TP
+.B hide_missing
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When set, mutt will not show the presence of missing messages in the
+thread tree.
+
+
+.TP
+.B hide_top_limited
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When set, mutt will not show the presence of messages that are hidden
+by limiting, at the top of threads in the thread tree.  Note that when
+$hide_missing is set, this option will have no effect.
+
+
+.TP
+.B hide_top_missing
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When set, mutt will not show the presence of missing messages at the
+top of threads in the thread tree.  Note that when $hide_limited is
+set, this option will have no effect.
+
+
+.TP
+.B history
+.nf
+Type: number
+Default: 10
+.fi
+.IP
+This variable controls the size (in number of strings remembered) of
+the string history buffer. The buffer is cleared each time the
+variable is set.
+
+
+.TP
+.B honor_followup_to
+.nf
+Type: quadoption
+Default: yes
+.fi
+.IP
+This variable controls whether or not a Mail-Followup-To header is
+honored when group-replying to a message.
+
+
+.TP
+.B hostname
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+Specifies the hostname to use after the \(lq@\(rq in local e-mail
+addresses.  This overrides the compile time definition obtained from
+/etc/resolv.conf.
+
+
+.TP
+.B ignore_list_reply_to
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+Affects the behaviour of the \fIreply\fP function when replying to
+messages from mailing lists.  When set, if the \(lqReply-To:\(rq field is
+set to the same value as the \(lqTo:\(rq field, Mutt assumes that the
+\(lqReply-To:\(rq field was set by the mailing list to automate responses
+to the list, and will ignore this field.  To direct a response to the
+mailing list when this option is set, use the \fIlist-reply\fP
+function; \fIgroup-reply\fP will reply to both the sender and the
+list.
+
+
+.TP
+.B imap_authenticators
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This is a colon-delimited list of authentication methods mutt may
+attempt to use to log in to an IMAP server, in the order mutt should
+try them.  Authentication methods are either 'login' or the right
+side of an IMAP 'AUTH=xxx' capability string, eg 'digest-md5',
+'gssapi' or 'cram-md5'. This parameter is case-insensitive. If this
+parameter is unset (the default) mutt will try all available methods,
+in order from most-secure to least-secure.
+.IP
+Example: set imap_authenticators=\(rqgssapi:cram-md5:login\(rq
+.IP
+\fBNote:\fP Mutt will only fall back to other authentication methods if
+the previous methods are unavailable. If a method is available but
+authentication fails, mutt will not connect to the IMAP server.
+
+
+.TP
+.B imap_delim_chars
+.nf
+Type: string
+Default: \(lq/.\(rq
+.fi
+.IP
+This contains the list of characters which you would like to treat
+as folder separators for displaying IMAP paths. In particular it
+helps in using the '=' shortcut for your \fIfolder\fP variable.
+
+
+.TP
+.B imap_force_ssl
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If this variable is set, Mutt will always use SSL when
+connecting to IMAP servers.
+
+
+.TP
+.B imap_home_namespace
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+You normally want to see your personal folders alongside
+your INBOX in the IMAP browser. If you see something else, you may set
+this variable to the IMAP path to your folders.
+
+
+.TP
+.B imap_keepalive
+.nf
+Type: number
+Default: 900
+.fi
+.IP
+This variable specifies the maximum amount of time in seconds that mutt
+will wait before polling open IMAP connections, to prevent the server
+from closing them before mutt has finished with them. The default is
+well within the RFC-specified minimum amount of time (30 minutes) before
+a server is allowed to do this, but in practice the RFC does get
+violated every now and then. Reduce this number if you find yourself
+getting disconnected from your IMAP server due to inactivity.
+
+
+.TP
+.B imap_list_subscribed
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+This variable configures whether IMAP folder browsing will look for
+only subscribed folders or all folders.  This can be toggled in the
+IMAP browser with the \fItoggle-subscribed\fP function.
+
+
+.TP
+.B imap_pass
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+Specifies the password for your IMAP account.  If unset, Mutt will
+prompt you for your password when you invoke the fetch-mail function.
+\fBWarning\fP: you should only use this option when you are on a
+fairly secure machine, because the superuser can read your muttrc even
+if you are the only one who can read the file.
+
+
+.TP
+.B imap_passive
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When set, mutt will not open new IMAP connections to check for new
+mail.  Mutt will only check for new mail over existing IMAP
+connections.  This is useful if you don't want to be prompted to
+user/password pairs on mutt invocation, or if opening the connection
+is slow.
+
+
+.TP
+.B imap_peek
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+If set, mutt will avoid implicitly marking your mail as read whenever
+you fetch a message from the server. This is generally a good thing,
+but can make closing an IMAP folder somewhat slower. This option
+exists to appease speed freaks.
+
+
+.TP
+.B imap_servernoise
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When set, mutt will display warning messages from the IMAP
+server as error messages. Since these messages are often
+harmless, or generated due to configuration problems on the
+server which are out of the users' hands, you may wish to suppress
+them at some point.
+
+
+.TP
+.B imap_user
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+Your login name on the IMAP server.
+.IP
+This variable defaults to your user name on the local machine.
+
+
+.TP
+.B implicit_autoview
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set to \(lqyes\(rq, mutt will look for a mailcap entry with the
+copiousoutput flag set for \fIevery\fP MIME attachment it doesn't have
+an internal viewer defined for.  If such an entry is found, mutt will
+use the viewer defined in that entry to convert the body part to text
+form.
+
+
+.TP
+.B include
+.nf
+Type: quadoption
+Default: ask-yes
+.fi
+.IP
+Controls whether or not a copy of the message(s) you are replying to
+is included in your reply.
+
+
+.TP
+.B indent_string
+.nf
+Type: string
+Default: \(lq> \(rq
+.fi
+.IP
+Specifies the string to prepend to each line of text quoted in a
+message to which you are replying.  You are strongly encouraged not to
+change this value, as it tends to agitate the more fanatical netizens.
+
+
+.TP
+.B index_format
+.nf
+Type: string
+Default: \(lq%4C %Z %{%b %d} %-15.15L (%?l?%4l&%4c?) %s\(rq
+.fi
+.IP
+This variable allows you to customize the message index display to
+your personal taste.
+.IP
+\(lqFormat strings\(rq are similar to the strings used in the \(lqC\(rq
+function printf to format output (see the man page for more detail).
+The following sequences are defined in Mutt:
+.IP
+
+.RS
+.IP %a 
+address of the author
+
+.IP %A 
+reply-to address (if present; otherwise: address of author)
+
+.IP %b 
+filename of the original message folder (think mailBox)
+
+.IP %B 
+the list to which the letter was sent, or else the folder name (%b).
+
+.IP %c 
+number of characters (bytes) in the message
+
+.IP %C 
+current message number
+
+.IP %d 
+date and time of the message in the format specified by
+\(lqdate_format\(rq converted to sender's time zone
+
+.IP %D 
+date and time of the message in the format specified by
+\(lqdate_format\(rq converted to the local time zone
+
+.IP %e 
+current message number in thread
+
+.IP %E 
+number of messages in current thread
+
+.IP %f 
+entire From: line (address + real name)
+
+.IP %F 
+author name, or recipient name if the message is from you
+
+.IP %g 
+newsgroup name (if compiled with nntp support)
+
+.IP %i 
+message-id of the current message
+
+.IP %l 
+number of lines in the message (does not work with maildir,
+mh, and possibly IMAP folders)
+
+.IP %L 
+If an address in the To or CC header field matches an address
+defined by the users \(lqsubscribe\(rq command, this displays
+\(rqTo <list-name>\(rq, otherwise the same as %F.
+
+.IP %m 
+total number of message in the mailbox
+
+.IP %M 
+number of hidden messages if the thread is collapsed.
+
+.IP %N 
+message score
+
+.IP %n 
+author's real name (or address if missing)
+
+.IP %O 
+(_O_riginal save folder)  Where mutt would formerly have
+stashed the message: list name or recipient name if no list
+
+.IP %s 
+subject of the message
+
+.IP %S 
+status of the message (N/D/d/!/r/*)
+
+.IP %t 
+`to:' field (recipients)
+
+.IP %T 
+the appropriate character from the $to_chars string
+
+.IP %u 
+user (login) name of the author
+
+.IP %v 
+first name of the author, or the recipient if the message is from you
+
+.IP %W 
+name of organization of author (`organization:' field)
+
+.IP %y 
+`x-label:' field, if present
+
+.IP %Y 
+`x-label' field, if present, and (1) not at part of a thread tree,
+(2) at the top of a thread, or (3) `x-label' is different from
+preceding message's `x-label'.
+
+.IP %Z 
+message status flags
+
+.IP %{fmt} 
+the date and time of the message is converted to sender's
+time zone, and \(lqfmt\(rq is expanded by the library function
+\(lqstrftime\(rq; a leading bang disables locales
+
+.IP %[fmt] 
+the date and time of the message is converted to the local
+time zone, and \(lqfmt\(rq is expanded by the library function
+\(lqstrftime\(rq; a leading bang disables locales
+
+.IP %(fmt) 
+the local date and time when the message was received.
+\(lqfmt\(rq is expanded by the library function \(lqstrftime\(rq;
+a leading bang disables locales
+
+.IP %<fmt> 
+the current local time. \(lqfmt\(rq is expanded by the library
+function \(lqstrftime\(rq; a leading bang disables locales.
+
+.IP %>X    
+right justify the rest of the string and pad with character \(rqX\(rq
+
+.IP %|X    
+pad to the end of the line with character \(rqX\(rq
+
+.RE
+.IP
+See also: \(lq$to_chars\(rq.
+
+
+.TP
+.B inews
+.nf
+Type: path
+Default: \(lq\(rq
+.fi
+.IP
+If set, specifies the program and arguments used to deliver news posted
+by Mutt.  Otherwise, mutt posts article using current connection to
+news server.  The following printf-style sequence is understood:
+.IP
+
+.IP
+.DS
+.sp
+.ft CR
+.nf
+%s      newsserver name
+
+.fi
+.ec
+.ft P
+.sp
+.IP
+Example: set inews=\(rq/usr/local/bin/inews -hS\(rq
+
+
+.TP
+.B ispell
+.nf
+Type: path
+Default: \(lq/sw/bin/ispell\(rq
+.fi
+.IP
+How to invoke ispell (GNU's spell-checking software).
+
+
+.TP
+.B keep_flagged
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set, read messages marked as flagged will not be moved
+from your spool mailbox to your \(lq$mbox\(rq mailbox, or as a result of
+a \(lqmbox-hook\(rq command.
+
+
+.TP
+.B locale
+.nf
+Type: string
+Default: \(lqC\(rq
+.fi
+.IP
+The locale used by \fIstrftime(3)\fP to format dates. Legal values are
+the strings your system accepts for the locale variable \fILC_TIME\fP.
+
+
+.TP
+.B list_reply
+.nf
+Type: quadoption
+Default: no
+.fi
+.IP
+When set, address replies to the mailing list the original message came
+from (instead to the author only). Setting this option to \(lqask-yes\(rq or
+\(lqask-no\(rq will ask if you really intended to reply to the author only.
+
+
+.TP
+.B mail_check
+.nf
+Type: number
+Default: 5
+.fi
+.IP
+This variable configures how often (in seconds) mutt should look for
+new mail.
+
+
+.TP
+.B mailcap_path
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This variable specifies which files to consult when attempting to
+display MIME bodies not directly supported by Mutt.
+
+
+.TP
+.B mailcap_sanitize
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+If set, mutt will restrict possible characters in mailcap % expandos
+to a well-defined set of safe characters.  This is the safe setting,
+but we are not sure it doesn't break some more advanced MIME stuff.
+.IP
+\fBDON'T CHANGE THIS SETTING UNLESS YOU ARE REALLY SURE WHAT YOU ARE
+DOING!\fP
+
+
+.TP
+.B maildir_trash
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set, messages marked as deleted will be saved with the maildir
+(T)rashed flag instead of unlinked.  \fBNOTE:\fP this only applies
+to maildir-style mailboxes.  Setting it will have no effect on other
+mailbox types.
+
+
+.TP
+.B mark_old
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+Controls whether or not mutt marks \fInew\fP \fBunread\fP
+messages as \fIold\fP if you exit a mailbox without reading them.
+With this option set, the next time you start mutt, the messages
+will show up with an \(rqO\(rq next to them in the index menu,
+indicating that they are old.
+
+
+.TP
+.B markers
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+Controls the display of wrapped lines in the internal pager. If set, a
+\(lq+\(rq marker is displayed at the beginning of wrapped lines. Also see
+the \(lq$smart_wrap\(rq variable.
+
+
+.TP
+.B mask
+.nf
+Type: regular expression
+Default: \(lq!^\\.[^.]\(rq
+.fi
+.IP
+A regular expression used in the file browser, optionally preceded by
+the \fInot\fP operator \(lq!\(rq.  Only files whose names match this mask
+will be shown. The match is always case-sensitive.
+
+
+.TP
+.B mbox
+.nf
+Type: path
+Default: \(lq~/mbox\(rq
+.fi
+.IP
+This specifies the folder into which read mail in your \(lq$spoolfile\(rq
+folder will be appended.
+
+
+.TP
+.B mbox_type
+.nf
+Type: folder magic
+Default: mbox
+.fi
+.IP
+The default mailbox type used when creating new folders. May be any of
+mbox, MMDF, MH and Maildir.
+
+
+.TP
+.B metoo
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If unset, Mutt will remove your address (see the \(lqalternates\(rq
+command) from the list of recipients when replying to a message.
+
+
+.TP
+.B menu_scroll
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When \fIset\fP, menus will be scrolled up or down one line when you
+attempt to move across a screen boundary.  If \fIunset\fP, the screen
+is cleared and the next or previous page of the menu is displayed
+(useful for slow links to avoid many redraws).
+
+
+.TP
+.B meta_key
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set, forces Mutt to interpret keystrokes with the high bit (bit 8)
+set as if the user had pressed the ESC key and whatever key remains
+after having the high bit removed.  For example, if the key pressed
+has an ASCII value of 0xf4, then this is treated as if the user had
+pressed ESC then \(lqx\(rq.  This is because the result of removing the
+high bit from \(lq0xf4\(rq is \(lq0x74\(rq, which is the ASCII character
+\(lqx\(rq.
+
+
+.TP
+.B mh_purge
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When unset, mutt will mimic mh's behaviour and rename deleted messages
+to \fI,<old file name>\fP in mh folders instead of really deleting
+them.  If the variable is set, the message files will simply be
+deleted.
+
+
+.TP
+.B mh_seq_flagged
+.nf
+Type: string
+Default: \(lqflagged\(rq
+.fi
+.IP
+The name of the MH sequence used for flagged messages.
+
+
+.TP
+.B mh_seq_replied
+.nf
+Type: string
+Default: \(lqreplied\(rq
+.fi
+.IP
+The name of the MH sequence used to tag replied messages.
+
+
+.TP
+.B mh_seq_unseen
+.nf
+Type: string
+Default: \(lqunseen\(rq
+.fi
+.IP
+The name of the MH sequence used for unseen messages.
+
+
+.TP
+.B mime_forward
+.nf
+Type: quadoption
+Default: no
+.fi
+.IP
+When set, the message you are forwarding will be attached as a
+separate MIME part instead of included in the main body of the
+message.  This is useful for forwarding MIME messages so the receiver
+can properly view the message as it was delivered to you. If you like
+to switch between MIME and not MIME from mail to mail, set this
+variable to ask-no or ask-yes.
+.IP
+Also see \(lq$forward_decode\(rq and \(lq$mime_forward_decode\(rq.
+
+
+.TP
+.B mime_forward_decode
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+Controls the decoding of complex MIME messages into text/plain when
+forwarding a message while \(lq$mime_forward\(rq is \fIset\fP. Otherwise
+\(lq$forward_decode\(rq is used instead.
+
+
+.TP
+.B mime_forward_rest
+.nf
+Type: quadoption
+Default: yes
+.fi
+.IP
+When forwarding multiple attachments of a MIME message from the recvattach
+menu, attachments which cannot be decoded in a reasonable manner will
+be attached to the newly composed message if this option is set.
+
+
+.TP
+.B mime_subject
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+If \fIunset\fP, 8-bit \(lqsubject:\(rq line in article header will not be
+encoded according to RFC2047 to base64.  This is useful when message
+is Usenet article, because MIME for news is nonstandard feature.
+
+
+.TP
+.B mix_entry_format
+.nf
+Type: string
+Default: \(lq%4n %c %-16s %a\(rq
+.fi
+.IP
+This variable describes the format of a remailer line on the mixmaster
+chain selection screen.  The following printf-like sequences are 
+supported:
+.IP
+
+.RS
+.IP %n 
+The running number on the menu.
+
+.IP %c 
+Remailer capabilities.
+
+.IP %s 
+The remailer's short name.
+
+.IP %a 
+The remailer's e-mail address.
+
+.RE
+
+.TP
+.B mixmaster
+.nf
+Type: path
+Default: \(lqmixmaster\(rq
+.fi
+.IP
+This variable contains the path to the Mixmaster binary on your
+system.  It is used with various sets of parameters to gather the
+list of known remailers, and to finally send a message through the
+mixmaster chain.
+
+
+.TP
+.B move
+.nf
+Type: quadoption
+Default: ask-no
+.fi
+.IP
+Controls whether you will be asked to confirm moving read messages
+from your spool mailbox to your \(lq$mbox\(rq mailbox, or as a result of
+a \(lqmbox-hook\(rq command.
+
+
+.TP
+.B message_format
+.nf
+Type: string
+Default: \(lq%s\(rq
+.fi
+.IP
+This is the string displayed in the \(lqattachment\(rq menu for
+attachments of type message/rfc822.  For a full listing of defined
+printf()-like sequences see the section on \(lq$index_format\(rq.
+
+
+.TP
+.B narrow_tree
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+This variable, when set, makes the thread tree narrower, allowing
+deeper threads to fit on the screen.
+
+
+.TP
+.B news_cache_dir
+.nf
+Type: path
+Default: \(lq~/.mutt\(rq
+.fi
+.IP
+This variable pointing to directory where Mutt will save cached news
+articles headers in. If \fIunset\fP, headers will not be saved at all
+and will be reloaded each time when you enter to newsgroup.
+
+
+.TP
+.B news_server
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This variable specifies domain name or address of NNTP server. It
+defaults to the newsserver specified in the environment variable
+$NNTPSERVER or contained in the file /etc/nntpserver.  You can also
+specify username and an alternative port for each newsserver, ie:
+.IP
+[nntp[s]://][username[:password]@]newsserver[:port]
+
+
+.TP
+.B newsrc
+.nf
+Type: path
+Default: \(lq~/.newsrc\(rq
+.fi
+.IP
+The file, containing info about subscribed newsgroups - names and
+indexes of read articles.  The following printf-style sequence
+is understood:
+.IP
+
+.IP
+.DS
+.sp
+.ft CR
+.nf
+%s      newsserver name
+
+.fi
+.ec
+.ft P
+.sp
+
+
+.TP
+.B nntp_context
+.nf
+Type: number
+Default: 1000
+.fi
+.IP
+This variable defines number of articles which will be in index when
+newsgroup entered.  If active newsgroup have more articles than this
+number, oldest articles will be ignored.  Also controls how many
+articles headers will be saved in cache when you quit newsgroup.
+
+
+.TP
+.B nntp_load_description
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+This variable controls whether or not descriptions for each newsgroup
+must be loaded when newsgroup is added to list (first time list
+loading or new newsgroup adding).
+
+
+.TP
+.B nntp_user
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+Your login name on the NNTP server.  If \fIunset\fP and NNTP server requires
+authentification, Mutt will prompt you for your account name when you
+connect to newsserver.
+
+
+.TP
+.B nntp_pass
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+Your password for NNTP account.
+
+
+.TP
+.B nntp_poll
+.nf
+Type: number
+Default: 60
+.fi
+.IP
+The time in seconds until any operations on newsgroup except post new
+article will cause recheck for new news.  If set to 0, Mutt will
+recheck newsgroup on each operation in index (stepping, read article,
+etc.).
+
+
+.TP
+.B nntp_reconnect
+.nf
+Type: quadoption
+Default: ask-yes
+.fi
+.IP
+Controls whether or not Mutt will try to reconnect to newsserver when
+connection lost.
+
+
+.TP
+.B pager
+.nf
+Type: path
+Default: \(lqbuiltin\(rq
+.fi
+.IP
+This variable specifies which pager you would like to use to view
+messages.  builtin means to use the builtin pager, otherwise this
+variable should specify the pathname of the external pager you would
+like to use.
+.IP
+Using an external pager may have some disadvantages: Additional
+keystrokes are necessary because you can't call mutt functions
+directly from the pager, and screen resizes cause lines longer than
+the screen width to be badly formatted in the help menu.
+
+
+.TP
+.B pager_context
+.nf
+Type: number
+Default: 0
+.fi
+.IP
+This variable controls the number of lines of context that are given
+when displaying the next or previous page in the internal pager.  By
+default, Mutt will display the line after the last one on the screen
+at the top of the next page (0 lines of context).
+
+
+.TP
+.B pager_format
+.nf
+Type: string
+Default: \(lq-%Z- %C/%m: %-20.20n   %s\(rq
+.fi
+.IP
+This variable controls the format of the one-line message \(lqstatus\(rq
+displayed before each message in either the internal or an external
+pager.  The valid sequences are listed in the \(lq$index_format\(rq
+section.
+
+
+.TP
+.B pager_index_lines
+.nf
+Type: number
+Default: 0
+.fi
+.IP
+Determines the number of lines of a mini-index which is shown when in
+the pager.  The current message, unless near the top or bottom of the
+folder, will be roughly one third of the way down this mini-index,
+giving the reader the context of a few messages before and after the
+message.  This is useful, for example, to determine how many messages
+remain to be read in the current thread.  One of the lines is reserved
+for the status bar from the index, so a \fIpager_index_lines\fP of 6
+will only show 5 lines of the actual index.  A value of 0 results in
+no index being shown.  If the number of messages in the current folder
+is less than \fIpager_index_lines\fP, then the index will only use as
+many lines as it needs.
+
+
+.TP
+.B pager_stop
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When set, the internal-pager will \fBnot\fP move to the next message
+when you are at the end of a message and invoke the \fInext-page\fP
+function.
+
+
+.TP
+.B crypt_autosign
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+Setting this variable will cause Mutt to always attempt to
+cryptographically sign outgoing messages.  This can be overridden
+by use of the \fIpgp-menu\fP, when signing is not required or
+encryption is requested as well. If \(lq$smime_is_default\(rq is set,
+then OpenSSL is used instead to create S/MIME messages and settings can
+be overridden by use of the \fIsmime-menu\fP.
+(Crypto only)
+
+
+.TP
+.B crypt_autoencrypt
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+Setting this variable will cause Mutt to always attempt to PGP
+encrypt outgoing messages.  This is probably only useful in
+connection to the \fIsend-hook\fP command.  It can be overridden
+by use of the \fIpgp-menu\fP, when encryption is not required or
+signing is requested as well.  IF \(lq$smime_is_default\(rq is set,
+then OpenSSL is used instead to create S/MIME messages and
+settings can be overridden by use of the \fIsmime-menu\fP.
+(Crypto only)
+
+
+.TP
+.B pgp_ignore_subkeys
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+Setting this variable will cause Mutt to ignore OpenPGP subkeys. Instead,
+the principal key will inherit the subkeys' capabilities.  Unset this
+if you want to play interesting key selection games.
+(PGP only)
+
+
+.TP
+.B crypt_replyencrypt
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+If set, automatically PGP or OpenSSL encrypt replies to messages which are
+encrypted.
+(Crypto only)
+
+
+.TP
+.B crypt_replysign
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set, automatically PGP or OpenSSL sign replies to messages which are
+signed.
+.IP
+\fBNote:\fP this does not work on messages that are encrypted
+\fBand\fP signed!
+(Crypto only)
+
+
+.TP
+.B crypt_replysignencrypted
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set, automatically PGP or OpenSSL sign replies to messages
+which are encrypted. This makes sense in combination with
+\(lq$crypt_replyencrypt\(rq, because it allows you to sign all
+messages which are automatically encrypted.  This works around
+the problem noted in \(lq$crypt_replysign\(rq, that mutt is not able
+to find out whether an encrypted message is also signed.
+(Crypto only)
+
+
+.TP
+.B crypt_timestamp
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+If set, mutt will include a time stamp in the lines surrounding
+PGP or S/MIME output, so spoofing such lines is more difficult.
+If you are using colors to mark these lines, and rely on these,
+you may unset this setting.
+(Crypto only)
+
+
+.TP
+.B pgp_use_gpg_agent
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set, mutt will use a possibly-running gpg-agent process.
+(PGP only)
+
+
+.TP
+.B crypt_verify_sig
+.nf
+Type: quadoption
+Default: yes
+.fi
+.IP
+If \(lqyes\(rq, always attempt to verify PGP or S/MIME signatures.
+If \(lqask\(rq, ask whether or not to verify the signature. 
+If \(lqno\(rq, never attempt to verify cryptographic signatures.
+(Crypto only)
+
+
+.TP
+.B smime_is_default
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+The default behaviour of mutt is to use PGP on all auto-sign/encryption
+operations. To override and to use OpenSSL instead this must be set.
+However, this has no effect while replying, since mutt will automatically 
+select the same application that was used to sign/encrypt the original
+message.  (Note that this variable can be overridden by unsetting $crypt_autosmime.)
+(S/MIME only)
+
+
+.TP
+.B smime_ask_cert_label
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+This flag controls whether you want to be asked to enter a label
+for a certificate about to be added to the database or not. It is
+set by default.
+(S/MIME only)
+
+
+.TP
+.B smime_decrypt_use_default_key
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+If set (default) this tells mutt to use the default key for decryption. Otherwise,
+if manage multiple certificate-key-pairs, mutt will try to use the mailbox-address
+to determine the key to use. It will ask you to supply a key, if it can't find one.
+(S/MIME only)
+
+
+.TP
+.B pgp_entry_format
+.nf
+Type: string
+Default: \(lq%4n %t%f %4l/0x%k %-4a %2c %u\(rq
+.fi
+.IP
+This variable allows you to customize the PGP key selection menu to
+your personal taste. This string is similar to \(lq$index_format\(rq, but
+has its own set of printf()-like sequences:
+.IP
+
+.RS
+.IP %n     
+number
+
+.IP %k     
+key id
+
+.IP %u     
+user id
+
+.IP %a     
+algorithm
+
+.IP %l     
+key length
+
+.IP %f     
+flags
+
+.IP %c     
+capabilities
+
+.IP %t     
+trust/validity of the key-uid association
+
+.IP %[<s>] 
+date of the key where <s> is an strftime(3) expression
+
+.RE
+.IP
+(PGP only)
+
+
+.TP
+.B pgp_good_sign
+.nf
+Type: regular expression
+Default: \(lq\(rq
+.fi
+.IP
+If you assign a text to this variable, then a PGP signature is only
+considered verified if the output from $pgp_verify_command contains
+the text. Use this variable if the exit code from the command is 0
+even for bad signatures.
+(PGP only)
+
+
+.TP
+.B pgp_check_exit
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+If set, mutt will check the exit code of the PGP subprocess when
+signing or encrypting.  A non-zero exit code means that the
+subprocess failed.
+(PGP only)
+
+
+.TP
+.B pgp_long_ids
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set, use 64 bit PGP key IDs. Unset uses the normal 32 bit Key IDs.
+(PGP only)
+
+
+.TP
+.B pgp_retainable_sigs
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set, signed and encrypted messages will consist of nested
+multipart/signed and multipart/encrypted body parts.
+.IP
+This is useful for applications like encrypted and signed mailing
+lists, where the outer layer (multipart/encrypted) can be easily
+removed, while the inner multipart/signed part is retained.
+(PGP only)
+
+
+.TP
+.B pgp_show_unusable
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+If set, mutt will display non-usable keys on the PGP key selection
+menu.  This includes keys which have been revoked, have expired, or
+have been marked as \(lqdisabled\(rq by the user.
+(PGP only)
+
+
+.TP
+.B pgp_sign_as
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+If you have more than one key pair, this option allows you to specify
+which of your private keys to use.  It is recommended that you use the
+keyid form to specify your key (e.g., \(lq0x00112233\(rq).
+(PGP only)
+
+
+.TP
+.B pgp_strict_enc
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+If set, Mutt will automatically encode PGP/MIME signed messages as
+\fIquoted-printable\fP.  Please note that unsetting this variable may
+lead to problems with non-verifyable PGP signatures, so only change
+this if you know what you are doing.
+(PGP only)
+
+
+.TP
+.B pgp_timeout
+.nf
+Type: number
+Default: 300
+.fi
+.IP
+The number of seconds after which a cached passphrase will expire if
+not used.
+(PGP only)
+
+
+.TP
+.B pgp_sort_keys
+.nf
+Type: sort order
+Default: address
+.fi
+.IP
+Specifies how the entries in the `pgp keys' menu are sorted. The
+following are legal values:
+.IP
+
+.RS
+.IP address 
+sort alphabetically by user id
+
+.IP keyid   
+sort alphabetically by key id
+
+.IP date    
+sort by key creation date
+
+.IP trust   
+sort by the trust of the key
+
+.RE
+.IP
+If you prefer reverse order of the above values, prefix it with
+`reverse-'.
+(PGP only)
+
+
+.TP
+.B pgp_create_traditional
+.nf
+Type: quadoption
+Default: no
+.fi
+.IP
+This option controls whether Mutt generates old-style inline PGP
+encrypted or signed messages.
+.IP
+Note that PGP/MIME will be used automatically for messages which have
+a character set different from us-ascii, or which consist of more than
+a single MIME part.
+.IP
+Also note that using the old-style PGP message format is \fBstrongly\fP
+\fBdeprecated\fP.
+(PGP only)
+
+
+.TP
+.B pgp_auto_traditional
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+This option causes Mutt to generate an old-style inline PGP
+encrypted or signed message when replying to an old-style
+message, and a PGP/MIME message when replying to a PGP/MIME
+message.  Note that this option is only meaningful when using
+\(lq$crypt_replyencrypt\(rq, \(lq$crypt_replysign\(rq, or
+\(lq$crypt_replysignencrypted\(rq.
+.IP
+Also note that PGP/MIME will be used automatically for messages
+which have a character set different from us-ascii, or which
+consist of more than a single MIME part.
+.IP
+This option overrides \(lq$pgp_create_traditional\(rq
+(PGP only)
+
+
+.TP
+.B pgp_decode_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This format strings specifies a command which is used to decode 
+application/pgp attachments.
+.IP
+The PGP command formats have their own set of printf-like sequences:
+.IP
+
+.RS
+.IP %p 
+Expands to PGPPASSFD=0 when a pass phrase is needed, to an empty
+string otherwise. Note: This may be used with a %? construct.
+
+.IP %f 
+Expands to the name of a file containing a message.
+
+.IP %s 
+Expands to the name of a file containing the signature part
+           of a multipart/signed attachment when verifying it.
+
+.IP %a 
+The value of $pgp_sign_as.
+
+.IP %r 
+One or more key IDs.
+
+.RE
+.IP
+For examples on how to configure these formats for the various versions
+of PGP which are floating around, see the pgp*.rc and gpg.rc files in
+the samples/ subdirectory which has been installed on your system
+alongside the documentation.
+(PGP only)
+
+
+.TP
+.B pgp_getkeys_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is invoked whenever mutt will need public key information.
+%r is the only printf-like sequence used with this format.
+(PGP only)
+
+
+.TP
+.B pgp_verify_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to verify PGP signatures.
+(PGP only)
+
+
+.TP
+.B pgp_decrypt_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to decrypt a PGP encrypted message.
+(PGP only)
+
+
+.TP
+.B pgp_clearsign_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This format is used to create a old-style \(rqclearsigned\(rq PGP
+message.  Note that the use of this format is \fBstrongly\fP
+\fBdeprecated\fP.
+(PGP only)
+
+
+.TP
+.B pgp_sign_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to create the detached PGP signature for a 
+multipart/signed PGP/MIME body part.
+(PGP only)
+
+
+.TP
+.B pgp_encrypt_sign_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to both sign and encrypt a body part.
+(PGP only)
+
+
+.TP
+.B pgp_encrypt_only_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to encrypt a body part without signing it.
+(PGP only)
+
+
+.TP
+.B pgp_import_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to import a key from a message into 
+the user's public key ring.
+(PGP only)
+
+
+.TP
+.B pgp_export_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to export a public key from the user's
+key ring.
+(PGP only)
+
+
+.TP
+.B pgp_verify_key_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to verify key information from the key selection
+menu.
+(PGP only)
+
+
+.TP
+.B pgp_list_secring_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to list the secret key ring's contents.  The
+output format must be analogous to the one used by 
+gpg --list-keys --with-colons.
+.IP
+This format is also generated by the pgpring utility which comes 
+with mutt.
+(PGP only)
+
+
+.TP
+.B pgp_list_pubring_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to list the public key ring's contents.  The
+output format must be analogous to the one used by 
+gpg --list-keys --with-colons.
+.IP
+This format is also generated by the pgpring utility which comes 
+with mutt.
+(PGP only)
+
+
+.TP
+.B forward_decrypt
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+Controls the handling of encrypted messages when forwarding a message.
+When set, the outer layer of encryption is stripped off.  This
+variable is only used if \(lq$mime_forward\(rq is \fIset\fP and
+\(lq$mime_forward_decode\(rq is \fIunset\fP.
+(PGP only)
+
+
+.TP
+.B smime_timeout
+.nf
+Type: number
+Default: 300
+.fi
+.IP
+The number of seconds after which a cached passphrase will expire if
+not used.
+(S/MIME only)
+
+
+.TP
+.B smime_encrypt_with
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This sets the algorithm that should be used for encryption.
+Valid choices are \(rqdes\(rq, \(rqdes3\(rq, \(rqrc2-40\(rq, \(rqrc2-64\(rq, \(rqrc2-128\(rq.
+If unset \(rq3des\(rq (TripleDES) is used.
+(S/MIME only)
+
+
+.TP
+.B smime_keys
+.nf
+Type: path
+Default: \(lq\(rq
+.fi
+.IP
+Since there is no pubring/secring as with PGP, mutt has to handle
+storage ad retrieval of keys/certs by itself. This is very basic right now,
+and stores keys and certificates in two different directories, both
+named as the hash-value retrieved from OpenSSL. There is an index file
+which contains mailbox-address keyid pair, and which can be manually
+edited. This one points to the location of the private keys.
+(S/MIME only)
+
+
+.TP
+.B smime_ca_location
+.nf
+Type: path
+Default: \(lq\(rq
+.fi
+.IP
+This variable contains the name of either a directory, or a file which
+contains trusted certificates for use with OpenSSL.
+(S/MIME only)
+
+
+.TP
+.B smime_certificates
+.nf
+Type: path
+Default: \(lq\(rq
+.fi
+.IP
+Since there is no pubring/secring as with PGP, mutt has to handle
+storage and retrieval of keys by itself. This is very basic right
+now, and keys and certificates are stored in two different
+directories, both named as the hash-value retrieved from
+OpenSSL. There is an index file which contains mailbox-address
+keyid pairs, and which can be manually edited. This one points to
+the location of the certificates.
+(S/MIME only)
+
+
+.TP
+.B smime_decrypt_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This format string specifies a command which is used to decrypt
+application/x-pkcs7-mime attachments.
+.IP
+The OpenSSL command formats have their own set of printf-like sequences
+similar to PGP's:
+.IP
+
+.RS
+.IP %f 
+Expands to the name of a file containing a message.
+
+.IP %s 
+Expands to the name of a file containing the signature part
+           of a multipart/signed attachment when verifying it.
+
+.IP %k 
+The key-pair specified with $smime_default_key
+
+.IP %c 
+One or more certificate IDs.
+
+.IP %a 
+The algorithm used for encryption.
+
+.IP %C 
+CA location:  Depending on whether $smime_ca_location
+           points to a directory or file, this expands to 
+           \(rq-CApath $smime_ca_location\(rq or \(rq-CAfile $smime_ca_location\(rq.
+
+.RE
+.IP
+For examples on how to configure these formats, see the smime.rc in
+the samples/ subdirectory which has been installed on your system
+alongside the documentation.
+(S/MIME only)
+
+
+.TP
+.B smime_verify_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to verify S/MIME signatures of type multipart/signed.
+(S/MIME only)
+
+
+.TP
+.B smime_verify_opaque_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to verify S/MIME signatures of type
+application/x-pkcs7-mime.
+(S/MIME only)
+
+
+.TP
+.B smime_sign_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to created S/MIME signatures of type
+multipart/signed, which can be read by all mail clients.
+(S/MIME only)
+
+
+.TP
+.B smime_sign_opaque_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to created S/MIME signatures of type
+application/x-pkcs7-signature, which can only be handled by mail
+clients supporting the S/MIME extension.
+(S/MIME only)
+
+
+.TP
+.B smime_encrypt_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to create encrypted S/MIME messages.
+(S/MIME only)
+
+
+.TP
+.B smime_pk7out_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to extract PKCS7 structures of S/MIME signatures,
+in order to extract the public X509 certificate(s).
+(S/MIME only)
+
+
+.TP
+.B smime_get_cert_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to extract X509 certificates from a PKCS7 structure.
+(S/MIME only)
+
+
+.TP
+.B smime_get_signer_cert_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to extract only the signers X509 certificate from a S/MIME
+signature, so that the certificate's owner may get compared to the email's 
+'From'-field.
+(S/MIME only)
+
+
+.TP
+.B smime_import_cert_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to import a certificate via smime_keys.
+(S/MIME only)
+
+
+.TP
+.B smime_get_cert_email_command
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This command is used to extract the mail address(es) used for storing
+X509 certificates, and for verification purposes (to check whether the
+certificate was issued for the sender's mailbox).
+(S/MIME only)
+
+
+.TP
+.B smime_default_key
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This is the default key-pair to use for signing. This must be set to the
+keyid (the hash-value that OpenSSL generates) to work properly
+(S/MIME only)
+
+
+.TP
+.B smtp_auth_username
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+Defines the username to use with SMTP AUTH.  Setting this variable will
+cause mutt to attempt to use SMTP AUTH when sending.
+
+
+.TP
+.B smtp_auth_password
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+Defines the password to use with SMTP AUTH.  If \(lq$smtp_auth_username\(rq
+is set, but this variable is not, you will be prompted for a password
+when sending.
+
+
+.TP
+.B smtp_host
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+Defines the SMTP host which will be used to deliver mail, as opposed
+to invoking the sendmail binary.  Setting this variable overrides the
+value of \(lq$sendmail\(rq, and any associated variables.
+
+
+.TP
+.B smtp_port
+.nf
+Type: number
+Default: 25
+.fi
+.IP
+Defines the port that the SMTP host is listening on for mail delivery.
+Must be specified as a number.
+.IP
+Defaults to 25, the standard SMTP port, but RFC 2476-compliant SMTP
+servers will probably desire 587, the mail submission port.
+
+
+.TP
+.B ssl_starttls
+.nf
+Type: quadoption
+Default: yes
+.fi
+.IP
+If set (the default), mutt will attempt to use STARTTLS on servers
+advertising the capability. When unset, mutt will not attempt to
+use STARTTLS regardless of the server's capabilities.
+
+
+.TP
+.B certificate_file
+.nf
+Type: path
+Default: \(lq\(rq
+.fi
+.IP
+This variable specifies the file where the certificates you trust
+are saved. When an unknown certificate is encountered, you are asked
+if you accept it or not. If you accept it, the certificate can also 
+be saved in this file and further connections are automatically 
+accepted.
+.IP
+You can also manually add CA certificates in this file. Any server
+certificate that is signed with one of these CA certificates are 
+also automatically accepted.
+.IP
+Example: set certificate_file=~/.mutt/certificates
+
+
+.TP
+.B ssl_usesystemcerts
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+If set to \fIyes\fP, mutt will use CA certificates in the
+system-wide certificate store when checking if server certificate 
+is signed by a trusted CA.
+
+
+.TP
+.B entropy_file
+.nf
+Type: path
+Default: \(lq\(rq
+.fi
+.IP
+The file which includes random data that is used to initialize SSL
+library functions.
+
+
+.TP
+.B ssl_use_sslv2
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+This variables specifies whether to attempt to use SSLv2 in the
+SSL authentication process.
+
+
+.TP
+.B ssl_use_sslv3
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+This variables specifies whether to attempt to use SSLv3 in the
+SSL authentication process.
+
+
+.TP
+.B ssl_use_tlsv1
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+This variables specifies whether to attempt to use TLSv1 in the
+SSL authentication process.
+
+
+.TP
+.B pipe_split
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+Used in connection with the \fIpipe-message\fP command and the \(lqtag-
+prefix\(rq operator.  If this variable is unset, when piping a list of
+tagged messages Mutt will concatenate the messages and will pipe them
+as a single folder.  When set, Mutt will pipe the messages one by one.
+In both cases the messages are piped in the current sorted order,
+and the \(lq$pipe_sep\(rq separator is added after each message.
+
+
+.TP
+.B pipe_decode
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+Used in connection with the \fIpipe-message\fP command.  When unset,
+Mutt will pipe the messages without any preprocessing. When set, Mutt
+will weed headers and will attempt to PGP/MIME decode the messages
+first.
+
+
+.TP
+.B pipe_sep
+.nf
+Type: string
+Default: \(lq\\n\(rq
+.fi
+.IP
+The separator to add between messages when piping a list of tagged
+messages to an external Unix command.
+
+
+.TP
+.B pop_authenticators
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This is a colon-delimited list of authentication methods mutt may
+attempt to use to log in to an POP server, in the order mutt should
+try them.  Authentication methods are either 'user', 'apop' or any
+SASL mechanism, eg 'digest-md5', 'gssapi' or 'cram-md5'.
+This parameter is case-insensitive. If this parameter is unset
+(the default) mutt will try all available methods, in order from
+most-secure to least-secure.
+.IP
+Example: set pop_authenticators=\(rqdigest-md5:apop:user\(rq
+
+
+.TP
+.B pop_auth_try_all
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+If set, Mutt will try all available methods. When unset, Mutt will
+only fall back to other authentication methods if the previous
+methods are unavailable. If a method is available but authentication
+fails, Mutt will not connect to the POP server.
+
+
+.TP
+.B pop_checkinterval
+.nf
+Type: number
+Default: 60
+.fi
+.IP
+This variable configures how often (in seconds) POP should look for
+new mail.
+
+
+.TP
+.B pop_delete
+.nf
+Type: quadoption
+Default: ask-no
+.fi
+.IP
+If set, Mutt will delete successfully downloaded messages from the POP
+server when using the fetch-mail function.  When unset, Mutt will
+download messages but also leave them on the POP server.
+
+
+.TP
+.B pop_host
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+The name of your POP server for the fetch-mail function.  You
+can also specify an alternative port, username and password, ie:
+.IP
+[pop[s]://][username[:password]@]popserver[:port]
+
+
+.TP
+.B pop_last
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If this variable is set, mutt will try to use the \(rqLAST\(rq POP command
+for retrieving only unread messages from the POP server when using
+the fetch-mail function.
+
+
+.TP
+.B pop_reconnect
+.nf
+Type: quadoption
+Default: ask-yes
+.fi
+.IP
+Controls whether or not Mutt will try to reconnect to POP server when
+connection lost.
+
+
+.TP
+.B pop_user
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+Your login name on the POP server.
+.IP
+This variable defaults to your user name on the local machine.
+
+
+.TP
+.B pop_pass
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+Specifies the password for your POP account.  If unset, Mutt will
+prompt you for your password when you open POP mailbox.
+\fBWarning\fP: you should only use this option when you are on a
+fairly secure machine, because the superuser can read your muttrc
+even if you are the only one who can read the file.
+
+
+.TP
+.B post_indent_string
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+Similar to the \(lq$attribution\(rq variable, Mutt will append this
+string after the inclusion of a message which is being replied to.
+
+
+.TP
+.B post_moderated
+.nf
+Type: quadoption
+Default: ask-yes
+.fi
+.IP
+If set to \fIyes\fP, Mutt will post article to newsgroup that have
+not permissions to posting (e.g. moderated).  \fBNote:\fP if newsserver
+does not support posting to that newsgroup or totally read-only, that
+posting will not have an effect.
+
+
+.TP
+.B postpone
+.nf
+Type: quadoption
+Default: ask-yes
+.fi
+.IP
+Controls whether or not messages are saved in the \(lq$postponed\(rq
+mailbox when you elect not to send immediately.
+
+
+.TP
+.B postponed
+.nf
+Type: path
+Default: \(lq~/postponed\(rq
+.fi
+.IP
+Mutt allows you to indefinitely \(lqpostpone sending a message\(rq which
+you are editing.  When you choose to postpone a message, Mutt saves it
+in the mailbox specified by this variable.  Also see the \(lq$postpone\(rq
+variable.
+
+
+.TP
+.B preconnect
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+If set, a shell command to be executed if mutt fails to establish
+a connection to the server. This is useful for setting up secure
+connections, e.g. with ssh(1). If the command returns a  nonzero
+status, mutt gives up opening the server. Example:
+.IP
+preconnect=\(rqssh -f -q -L 1234:mailhost.net:143 mailhost.net
+sleep 20 < /dev/null > /dev/null\(rq
+.IP
+Mailbox 'foo' on mailhost.net can now be reached
+as '{localhost:1234}foo'.
+.IP
+NOTE: For this example to work, you must be able to log in to the
+remote machine without having to enter a password.
+
+
+.TP
+.B print
+.nf
+Type: quadoption
+Default: ask-no
+.fi
+.IP
+Controls whether or not Mutt asks for confirmation before printing.
+This is useful for people (like me) who accidentally hit \(lqp\(rq often.
+
+
+.TP
+.B print_command
+.nf
+Type: path
+Default: \(lqlpr\(rq
+.fi
+.IP
+This specifies the command pipe that should be used to print messages.
+
+
+.TP
+.B print_decode
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+Used in connection with the print-message command.  If this
+option is set, the message is decoded before it is passed to the
+external command specified by $print_command.  If this option
+is unset, no processing will be applied to the message when
+printing it.  The latter setting may be useful if you are using
+some advanced printer filter which is able to properly format
+e-mail messages for printing.
+
+
+.TP
+.B print_split
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+Used in connection with the print-message command.  If this option
+is set, the command specified by $print_command is executed once for
+each message which is to be printed.  If this option is unset, 
+the command specified by $print_command is executed only once, and
+all the messages are concatenated, with a form feed as the message
+separator.
+.IP
+Those who use the \fBenscript\fP(1) program's mail-printing mode will
+most likely want to set this option.
+
+
+.TP
+.B prompt_after
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+If you use an \fIexternal\fP \(lq$pager\(rq, setting this variable will
+cause Mutt to prompt you for a command when the pager exits rather
+than returning to the index menu.  If unset, Mutt will return to the
+index menu when the external pager exits.
+
+
+.TP
+.B query_command
+.nf
+Type: path
+Default: \(lq\(rq
+.fi
+.IP
+This specifies the command that mutt will use to make external address
+queries.  The string should contain a %s, which will be substituted
+with the query string the user types.  See \(lqquery\(rq for more
+information.
+
+
+.TP
+.B quit
+.nf
+Type: quadoption
+Default: yes
+.fi
+.IP
+This variable controls whether \(lqquit\(rq and \(lqexit\(rq actually quit
+from mutt.  If it set to yes, they do quit, if it is set to no, they
+have no effect, and if it is set to ask-yes or ask-no, you are
+prompted for confirmation when you try to quit.
+
+
+.TP
+.B quote_empty
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+Controls whether or not empty lines will be quoted using
+\(lqindent_string\(rq.
+
+
+.TP
+.B quote_quoted
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+Controls how quoted lines will be quoted. If set, one quote
+character will be added to the end of existing prefix.  Otherwise,
+quoted lines will be prepended by \(lqindent_string\(rq.
+
+
+.TP
+.B quote_regexp
+.nf
+Type: regular expression
+Default: \(lq^([ \\t]*[|>:}#])+\(rq
+.fi
+.IP
+A regular expression used in the internal-pager to determine quoted
+sections of text in the body of a message.
+.IP
+\fBNote:\fP In order to use the \fIquoted\fP\fBx\fP patterns in the
+internal pager, you need to set this to a regular expression that
+matches \fIexactly\fP the quote characters at the beginning of quoted
+lines.
+
+
+.TP
+.B read_inc
+.nf
+Type: number
+Default: 10
+.fi
+.IP
+If set to a value greater than 0, Mutt will display which message it
+is currently on when reading a mailbox.  The message is printed after
+\fIread_inc\fP messages have been read (e.g., if set to 25, Mutt will
+print a message when it reads message 25, and then again when it gets
+to message 50).  This variable is meant to indicate progress when
+reading large mailboxes which may take some time.
+When set to 0, only a single message will appear before the reading
+the mailbox.
+.IP
+Also see the \(lq$write_inc\(rq variable.
+
+
+.TP
+.B read_only
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set, all folders are opened in read-only mode.
+
+
+.TP
+.B realname
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+This variable specifies what \(rqreal\(rq or \(rqpersonal\(rq name should be used
+when sending messages.
+.IP
+By default, this is the GECOS field from /etc/passwd.  Note that this
+variable will \fInot\fP be used when the user has set a real name
+in the $from variable.
+
+
+.TP
+.B recall
+.nf
+Type: quadoption
+Default: ask-yes
+.fi
+.IP
+Controls whether or not you are prompted to recall postponed messages
+when composing a new message.  Also see \(lq$postponed\(rq.
+.IP
+Setting this variable to \(lqyes\(rq is not generally useful, and thus not
+recommended.
+
+
+.TP
+.B record
+.nf
+Type: path
+Default: \(lq\(rq
+.fi
+.IP
+This specifies the file into which your outgoing messages should be
+appended.  (This is meant as the primary method for saving a copy of
+your messages, but another way to do this is using the \(lqmy_hdr\(rq
+command to create a \fIBcc:\fP field with your email address in it.)
+.IP
+The value of \fI$record\fP is overridden by the \(lq$force_name\(rq and
+\(lq$save_name\(rq variables, and the \(lqfcc-hook\(rq command.
+
+
+.TP
+.B reply_regexp
+.nf
+Type: regular expression
+Default: \(lq^(re([\\[0-9\\]+])*|aw):[ \\t]*\(rq
+.fi
+.IP
+A regular expression used to recognize reply messages when threading
+and replying. The default value corresponds to the English \(rqRe:\(rq and
+the German \(rqAw:\(rq.
+
+
+.TP
+.B reply_self
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If unset and you are replying to a message sent by you, Mutt will
+assume that you want to reply to the recipients of that message rather
+than to yourself.
+
+
+.TP
+.B reply_to
+.nf
+Type: quadoption
+Default: ask-yes
+.fi
+.IP
+If set, Mutt will ask you if you want to use the address listed in the
+Reply-To: header field when replying to a message.  If you answer no,
+it will use the address in the From: header field instead.  This
+option is useful for reading a mailing list that sets the Reply-To:
+header field to the list address and you want to send a private
+message to the author of a message.
+
+
+.TP
+.B resolve
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When set, the cursor will be automatically advanced to the next
+(possibly undeleted) message whenever a command that modifies the
+current message is executed.
+
+
+.TP
+.B reverse_alias
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+This variable controls whether or not Mutt will display the \(rqpersonal\(rq
+name from your aliases in the index menu if it finds an alias that
+matches the message's sender.  For example, if you have the following
+alias:
+.IP
+
+.IP
+.DS
+.sp
+.ft CR
+.nf
+alias juser abd30425@somewhere.net (Joe User)
+
+.fi
+.ec
+.ft P
+.sp
+.IP
+and then you receive mail which contains the following header:
+.IP
+
+.IP
+.DS
+.sp
+.ft CR
+.nf
+From: abd30425@somewhere.net
+
+.fi
+.ec
+.ft P
+.sp
+.IP
+It would be displayed in the index menu as \(lqJoe User\(rq instead of
+\(lqabd30425@somewhere.net.\(rq  This is useful when the person's e-mail
+address is not human friendly (like CompuServe addresses).
+
+
+.TP
+.B reverse_name
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+It may sometimes arrive that you receive mail to a certain machine,
+move the messages to another machine, and reply to some the messages
+from there.  If this variable is set, the default \fIFrom:\fP line of
+the reply messages is built using the address where you received the
+messages you are replying to.  If the variable is unset, the
+\fIFrom:\fP line will use your address on the current machine.
+
+
+.TP
+.B reverse_realname
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+This variable fine-tunes the behaviour of the reverse_name feature.
+When it is set, mutt will use the address from incoming messages as-is,
+possibly including eventual real names.  When it is unset, mutt will
+override any such real names with the setting of the realname variable.
+
+
+.TP
+.B rfc2047_parameters
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When this variable is set, Mutt will decode RFC-2047-encoded MIME 
+parameters. You want to set this variable when mutt suggests you
+to save attachments to files named like this: 
+=?iso-8859-1?Q?file=5F=E4=5F991116=2Ezip?=
+.IP
+When this variable is set interactively, the change doesn't have
+the desired effect before you have changed folders.
+.IP
+Note that this use of RFC 2047's encoding is explicitly,
+prohibited by the standard, but nevertheless encountered in the
+wild.
+Also note that setting this parameter will \fInot\fP have the effect 
+that mutt \fIgenerates\fP this kind of encoding.  Instead, mutt will
+unconditionally use the encoding specified in RFC 2231.
+
+
+.TP
+.B save_address
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set, mutt will take the sender's full address when choosing a
+default folder for saving a mail. If \(lq$save_name\(rq or \(lq$force_name\(rq
+is set too, the selection of the fcc folder will be changed as well.
+
+
+.TP
+.B save_empty
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When unset, mailboxes which contain no saved messages will be removed
+when closed (the exception is \(lq$spoolfile\(rq which is never removed).
+If set, mailboxes are never removed.
+.IP
+\fBNote:\fP This only applies to mbox and MMDF folders, Mutt does not
+delete MH and Maildir directories.
+
+
+.TP
+.B save_name
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+This variable controls how copies of outgoing messages are saved.
+When set, a check is made to see if a mailbox specified by the
+recipient address exists (this is done by searching for a mailbox in
+the \(lq$folder\(rq directory with the \fIusername\fP part of the
+recipient address).  If the mailbox exists, the outgoing message will
+be saved to that mailbox, otherwise the message is saved to the
+\(lq$record\(rq mailbox.
+.IP
+Also see the \(lq$force_name\(rq variable.
+
+
+.TP
+.B score
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When this variable is \fIunset\fP, scoring is turned off.  This can
+be useful to selectively disable scoring for certain folders when the
+\(lq$score_threshold_delete\(rq variable and friends are used.
+
+
+.TP
+.B score_threshold_delete
+.nf
+Type: number
+Default: -1
+.fi
+.IP
+Messages which have been assigned a score equal to or lower than the value
+of this variable are automatically marked for deletion by mutt.  Since
+mutt scores are always greater than or equal to zero, the default setting
+of this variable will never mark a message for deletion.
+
+
+.TP
+.B score_threshold_flag
+.nf
+Type: number
+Default: 9999
+.fi
+.IP
+Messages which have been assigned a score greater than or equal to this 
+variable's value are automatically marked \(rqflagged\(rq.
+
+
+.TP
+.B score_threshold_read
+.nf
+Type: number
+Default: -1
+.fi
+.IP
+Messages which have been assigned a score equal to or lower than the value
+of this variable are automatically marked as read by mutt.  Since
+mutt scores are always greater than or equal to zero, the default setting
+of this variable will never mark a message read.
+
+
+.TP
+.B send_charset
+.nf
+Type: string
+Default: \(lqus-ascii:iso-8859-1:utf-8\(rq
+.fi
+.IP
+A list of character sets for outgoing messages. Mutt will use the
+first character set into which the text can be converted exactly.
+If your \(lq$charset\(rq is not iso-8859-1 and recipients may not
+understand UTF-8, it is advisable to include in the list an
+appropriate widely used standard character set (such as
+iso-8859-2, koi8-r or iso-2022-jp) either instead of or after
+\(rqiso-8859-1\(rq.
+
+
+.TP
+.B sendmail
+.nf
+Type: path
+Default: \(lq/sw/sbin/sendmail -oem -oi\(rq
+.fi
+.IP
+Specifies the program and arguments used to deliver mail sent by Mutt.
+Mutt expects that the specified program interprets additional
+arguments as recipient addresses.
+
+
+.TP
+.B sendmail_wait
+.nf
+Type: number
+Default: 0
+.fi
+.IP
+Specifies the number of seconds to wait for the \(lq$sendmail\(rq process
+to finish before giving up and putting delivery in the background.
+.IP
+Mutt interprets the value of this variable as follows:
+
+.RS
+.IP >0 
+number of seconds to wait for sendmail to finish before continuing
+
+.IP 0  
+wait forever for sendmail to finish
+
+.IP <0 
+always put sendmail in the background without waiting
+
+.RE
+.IP
+Note that if you specify a value other than 0, the output of the child
+process will be put in a temporary file.  If there is some error, you
+will be informed as to where to find the output.
+
+
+.TP
+.B shell
+.nf
+Type: path
+Default: \(lq\(rq
+.fi
+.IP
+Command to use when spawning a subshell.  By default, the user's login
+shell from /etc/passwd is used.
+
+
+.TP
+.B save_unsubscribed
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When \fIset\fP, info about unsubscribed newsgroups will be saved into
+\(lqnewsrc\(rq file and into cache.
+
+
+.TP
+.B show_new_news
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+If \fIset\fP, newsserver will be asked for new newsgroups on entering
+the browser.  Otherwise, it will be done only once for a newsserver.
+Also controls whether or not number of new articles of subscribed
+newsgroups will be then checked.
+
+
+.TP
+.B show_only_unread
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If \fIset\fP, only subscribed newsgroups that contain unread articles
+will be displayed in browser.
+
+
+.TP
+.B sig_dashes
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+If set, a line containing \(lq-- \(rq will be inserted before your
+\(lq$signature\(rq.  It is \fBstrongly\fP recommended that you not unset
+this variable unless your \(lqsignature\(rq contains just your name.  The
+reason for this is because many software packages use \(lq-- \\n\(rq to
+detect your signature.  For example, Mutt has the ability to highlight
+the signature in a different color in the builtin pager.
+
+
+.TP
+.B sig_on_top
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set, the signature will be included before any quoted or forwarded
+text.  It is \fBstrongly\fP recommended that you do not set this variable
+unless you really know what you are doing, and are prepared to take
+some heat from netiquette guardians.
+
+
+.TP
+.B signature
+.nf
+Type: path
+Default: \(lq~/.signature\(rq
+.fi
+.IP
+Specifies the filename of your signature, which is appended to all
+outgoing messages.   If the filename ends with a pipe (\(lq|\(rq), it is
+assumed that filename is a shell command and input should be read from
+its stdout.
+
+
+.TP
+.B simple_search
+.nf
+Type: string
+Default: \(lq~f %s | ~s %s\(rq
+.fi
+.IP
+Specifies how Mutt should expand a simple search into a real search
+pattern.  A simple search is one that does not contain any of the ~
+operators.  See \(lqpatterns\(rq for more information on search patterns.
+.IP
+For example, if you simply type joe at a search or limit prompt, Mutt
+will automatically expand it to the value specified by this variable.
+For the default value it would be:
+.IP
+~f joe | ~s joe
+
+
+.TP
+.B smart_wrap
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+Controls the display of lines longer than the screen width in the
+internal pager. If set, long lines are wrapped at a word boundary.  If
+unset, lines are simply wrapped at the screen edge. Also see the
+\(lq$markers\(rq variable.
+
+
+.TP
+.B smileys
+.nf
+Type: regular expression
+Default: \(lq(>From )|(:[-^]?[][)(><}{|/DP])\(rq
+.fi
+.IP
+The \fIpager\fP uses this variable to catch some common false
+positives of \(lq$quote_regexp\(rq, most notably smileys in the beginning
+of a line
+
+
+.TP
+.B sleep_time
+.nf
+Type: number
+Default: 1
+.fi
+.IP
+Specifies time, in seconds, to pause while displaying certain informational
+messages, while moving from folder to folder and after expunging
+messages from the current folder.  The default is to pause one second, so 
+a value of zero for this option suppresses the pause.
+
+
+.TP
+.B sort
+.nf
+Type: sort order
+Default: date
+.fi
+.IP
+Specifies how to sort messages in the \fIindex\fP menu.  Valid values
+are:
+.IP
+
+.IP
+.DS
+.sp
+.ft CR
+.nf
+   date or date-sent
+   date-received
+   from
+   mailbox-order (unsorted)
+   score
+   size
+   subject
+   threads
+   to
+
+.fi
+.ec
+.ft P
+.sp
+.IP
+You may optionally use the reverse- prefix to specify reverse sorting
+order (example: set sort=reverse-date-sent).
+
+
+.TP
+.B sort_alias
+.nf
+Type: sort order
+Default: alias
+.fi
+.IP
+Specifies how the entries in the `alias' menu are sorted.  The
+following are legal values:
+.IP
+
+.IP
+.DS
+.sp
+.ft CR
+.nf
+   address (sort alphabetically by email address)
+   alias (sort alphabetically by alias name)
+   unsorted (leave in order specified in .muttrc)
+
+.fi
+.ec
+.ft P
+.sp
+
+
+.TP
+.B sort_aux
+.nf
+Type: sort order
+Default: date
+.fi
+.IP
+When sorting by threads, this variable controls how threads are sorted
+in relation to other threads, and how the branches of the thread trees
+are sorted.  This can be set to any value that \(lq$sort\(rq can, except
+threads (in that case, mutt will just use date-sent).  You can also
+specify the last- prefix in addition to the reverse- prefix, but last-
+must come after reverse-.  The last- prefix causes messages to be
+sorted against its siblings by which has the last descendant, using
+the rest of sort_aux as an ordering.  For instance, set sort_aux=last-
+date-received would mean that if a new message is received in a
+thread, that thread becomes the last one displayed (or the first, if
+you have set sort=reverse-threads.) Note: For reversed \(lq$sort\(rq
+order $sort_aux is reversed again (which is not the right thing to do,
+but kept to not break any existing configuration setting).
+
+
+.TP
+.B sort_browser
+.nf
+Type: sort order
+Default: subject
+.fi
+.IP
+Specifies how to sort entries in the file browser.  By default, the
+entries are sorted alphabetically.  Valid values:
+.IP
+
+.IP
+.DS
+.sp
+.ft CR
+.nf
+   alpha (alphabetically)
+   date
+   size
+   unsorted
+
+.fi
+.ec
+.ft P
+.sp
+.IP
+You may optionally use the reverse- prefix to specify reverse sorting
+order (example: set sort_browser=reverse-date).
+
+
+.TP
+.B sort_re
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+This variable is only useful when sorting by threads with
+\(lq$strict_threads\(rq unset.  In that case, it changes the heuristic
+mutt uses to thread messages by subject.  With sort_re set, mutt will
+only attach a message as the child of another message by subject if
+the subject of the child message starts with a substring matching the
+setting of \(lq$reply_regexp\(rq.  With sort_re unset, mutt will attach
+the message whether or not this is the case, as long as the
+non-\(lq$reply_regexp\(rq parts of both messages are identical.
+
+
+.TP
+.B spoolfile
+.nf
+Type: path
+Default: \(lq\(rq
+.fi
+.IP
+If your spool mailbox is in a non-default place where Mutt cannot find
+it, you can specify its location with this variable.  Mutt will
+automatically set this variable to the value of the environment
+variable $MAIL if it is not set.
+
+
+.TP
+.B status_chars
+.nf
+Type: string
+Default: \(lq-*%A\(rq
+.fi
+.IP
+Controls the characters used by the \(rq%r\(rq indicator in
+\(lq$status_format\(rq. The first character is used when the mailbox is
+unchanged. The second is used when the mailbox has been changed, and
+it needs to be resynchronized. The third is used if the mailbox is in
+read-only mode, or if the mailbox will not be written when exiting
+that mailbox (You can toggle whether to write changes to a mailbox
+with the toggle-write operation, bound by default to \(rq%\(rq). The fourth
+is used to indicate that the current folder has been opened in attach-
+message mode (Certain operations like composing a new mail, replying,
+forwarding, etc. are not permitted in this mode).
+
+
+.TP
+.B status_format
+.nf
+Type: string
+Default: \(lq-%r-Mutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---\(rq
+.fi
+.IP
+Controls the format of the status line displayed in the \fIindex\fP
+menu.  This string is similar to \(lq$index_format\(rq, but has its own
+set of printf()-like sequences:
+.IP
+
+.RS
+.IP %b  
+number of mailboxes with new mail *
+
+.IP %d  
+number of deleted messages *
+
+.IP %f  
+the full pathname of the current mailbox
+
+.IP %F  
+number of flagged messages *
+
+.IP %h  
+local hostname
+
+.IP %l  
+size (in bytes) of the current mailbox *
+
+.IP %L  
+size (in bytes) of the messages shown 
+(i.e., which match the current limit) *
+
+.IP %m  
+the number of messages in the mailbox *
+
+.IP %M  
+the number of messages shown (i.e., which match the current limit) *
+
+.IP %n  
+number of new messages in the mailbox *
+
+.IP %o  
+number of old unread messages
+
+.IP %p  
+number of postponed messages *
+
+.IP %P  
+percentage of the way through the index
+
+.IP %r  
+modified/read-only/won't-write/attach-message indicator,
+according to $status_chars
+
+.IP %s  
+current sorting mode ($sort)
+
+.IP %S  
+current aux sorting method ($sort_aux)
+
+.IP %t  
+number of tagged messages *
+
+.IP %u  
+number of unread messages *
+
+.IP %v  
+Mutt version string
+
+.IP %V  
+currently active limit pattern, if any *
+
+.IP %>X 
+right justify the rest of the string and pad with \(rqX\(rq
+
+.IP %|X 
+pad to the end of the line with \(rqX\(rq
+
+.RE
+.IP
+* = can be optionally printed if nonzero
+.IP
+Some of the above sequences can be used to optionally print a string
+if their value is nonzero.  For example, you may only want to see the
+number of flagged messages if such messages exist, since zero is not
+particularly meaningful.  To optionally print a string based upon one
+of the above sequences, the following construct is used
+.IP
+%?<sequence_char>?<optional_string>?
+.IP
+where \fIsequence_char\fP is a character from the table above, and
+\fIoptional_string\fP is the string you would like printed if
+\fIstatus_char\fP is nonzero.  \fIoptional_string\fP \fBmay\fP contain
+other sequence as well as normal text, but you may \fBnot\fP nest
+optional strings.
+.IP
+Here is an example illustrating how to optionally print the number of
+new messages in a mailbox:
+%?n?%n new messages.?
+.IP
+Additionally you can switch between two strings, the first one, if a
+value is zero, the second one, if the value is nonzero, by using the
+following construct:
+%?<sequence_char>?<if_string>&<else_string>?
+.IP
+You can additionally force the result of any printf-like sequence to
+be lowercase by prefixing the sequence character with an underscore
+(_) sign.  For example, if you want to display the local hostname in
+lowercase, you would use:
+%_h
+.IP
+If you prefix the sequence character with a colon (:) character, mutt
+will replace any dots in the expansion by underscores. This might be helpful 
+with IMAP folders that don't like dots in folder names.
+
+
+.TP
+.B status_on_top
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+Setting this variable causes the \(lqstatus bar\(rq to be displayed on
+the first line of the screen rather than near the bottom.
+
+
+.TP
+.B strict_threads
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If set, threading will only make use of the \(lqIn-Reply-To\(rq and
+\(lqReferences\(rq fields when you \(lq$sort\(rq by message threads.  By
+default, messages with the same subject are grouped together in
+\(lqpseudo threads.\(rq  This may not always be desirable, such as in a
+personal mailbox where you might have several unrelated messages with
+the subject \(lqhi\(rq which will get grouped together.
+
+
+.TP
+.B suspend
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When \fIunset\fP, mutt won't stop when the user presses the terminal's
+\fIsusp\fP key, usually \(lqcontrol-Z\(rq. This is useful if you run mutt
+inside an xterm using a command like xterm -e mutt.
+
+
+.TP
+.B text_flowed
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When set, mutt will generate text/plain; format=flowed attachments.
+This format is easier to handle for some mailing software, and generally
+just looks like ordinary text.  To actually make use of this format's 
+features, you'll need support in your editor.
+.IP
+Note that $indent_string is ignored when this option is set.
+
+
+.TP
+.B thread_received
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When set, mutt uses the date received rather than the date sent
+to thread messages by subject.
+
+
+.TP
+.B thorough_search
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+Affects the \fI~b\fP and \fI~h\fP search operations described in
+section \(lqpatterns\(rq above.  If set, the headers and attachments of
+messages to be searched are decoded before searching.  If unset,
+messages are searched as they appear in the folder.
+
+
+.TP
+.B tilde
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+When set, the internal-pager will pad blank lines to the bottom of the
+screen with a tilde (~).
+
+
+.TP
+.B timeout
+.nf
+Type: number
+Default: 600
+.fi
+.IP
+This variable controls the \fInumber of seconds\fP Mutt will wait
+for a key to be pressed in the main menu before timing out and
+checking for new mail.  A value of zero or less will cause Mutt
+to never time out.
+
+
+.TP
+.B tmpdir
+.nf
+Type: path
+Default: \(lq\(rq
+.fi
+.IP
+This variable allows you to specify where Mutt will place its
+temporary files needed for displaying and composing messages.  If
+this variable is not set, the environment variable TMPDIR is
+used.  If TMPDIR is not set then \(rq/tmp\(rq is used.
+
+
+.TP
+.B to_chars
+.nf
+Type: string
+Default: \(lq +TCFL\(rq
+.fi
+.IP
+Controls the character used to indicate mail addressed to you.  The
+first character is the one used when the mail is NOT addressed to your
+address (default: space).  The second is used when you are the only
+recipient of the message (default: +).  The third is when your address
+appears in the TO header field, but you are not the only recipient of
+the message (default: T).  The fourth character is used when your
+address is specified in the CC header field, but you are not the only
+recipient.  The fifth character is used to indicate mail that was sent
+by \fIyou\fP.  The sixth character is used to indicate when a mail
+was sent to a mailing-list you subscribe to (default: L).
+
+
+.TP
+.B trash
+.nf
+Type: path
+Default: \(lq\(rq
+.fi
+.IP
+If set, this variable specifies the path of the trash folder where the
+mails marked for deletion will be moved, instead of being irremediably
+purged.
+.IP
+NOTE: When you delete a message in the trash folder, it is really
+deleted, so that you have a way to clean the trash.
+
+
+.TP
+.B tunnel
+.nf
+Type: string
+Default: \(lq\(rq
+.fi
+.IP
+Setting this variable will cause mutt to open a pipe to a command
+instead of a raw socket. You may be able to use this to set up
+preauthenticated connections to your IMAP/POP3 server. Example:
+.IP
+tunnel=\(rqssh -q mailhost.net /usr/local/libexec/imapd\(rq
+.IP
+NOTE: For this example to work you must be able to log in to the remote
+machine without having to enter a password.
+
+
+.TP
+.B use_8bitmime
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+\fBWarning:\fP do not set this variable unless you are using a version
+of sendmail which supports the -B8BITMIME flag (such as sendmail
+8.8.x) or you may not be able to send mail.
+.IP
+When \fIset\fP, Mutt will invoke \(lq$sendmail\(rq with the -B8BITMIME
+flag when sending 8-bit messages to enable ESMTP negotiation.
+
+
+.TP
+.B use_domain
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When set, Mutt will qualify all local addresses (ones without the
+@host portion) with the value of \(lq$hostname\(rq.  If \fIunset\fP, no
+addresses will be qualified.
+
+
+.TP
+.B use_from
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When \fIset\fP, Mutt will generate the `From:' header field when
+sending messages.  If \fIunset\fP, no `From:' header field will be
+generated unless the user explicitly sets one using the \(lqmy_hdr\(rq
+command.
+
+
+.TP
+.B use_ipv6
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When \fIset\fP, Mutt will look for IPv6 addresses of hosts it tries to
+contact.  If this option is unset, Mutt will restrict itself to IPv4 addresses.
+Normally, the default should work.
+
+
+.TP
+.B user_agent
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When \fIset\fP, mutt will add a \(rqUser-Agent\(rq header to outgoing
+messages, indicating which version of mutt was used for composing
+them.
+
+
+.TP
+.B visual
+.nf
+Type: path
+Default: \(lq\(rq
+.fi
+.IP
+Specifies the visual editor to invoke when the \fI~v\fP command is
+given in the builtin editor.
+
+
+.TP
+.B wait_key
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+Controls whether Mutt will ask you to press a key after \fIshell-
+escape\fP, \fIpipe-message\fP, \fIpipe-entry\fP, \fIprint-message\fP,
+and \fIprint-entry\fP commands.
+.IP
+It is also used when viewing attachments with \(lqauto_view\(rq, provided
+that the corresponding mailcap entry has a \fIneedsterminal\fP flag,
+and the external program is interactive.
+.IP
+When set, Mutt will always ask for a key. When unset, Mutt will wait
+for a key only if the external command returned a non-zero status.
+
+
+.TP
+.B weed
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+When set, mutt will weed headers when when displaying, forwarding,
+printing, or replying to messages.
+
+
+.TP
+.B wrap_search
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+Controls whether searches wrap around the end of the mailbox.
+.IP
+When set, searches will wrap around the first (or last) message. When
+unset, searches will not wrap.
+
+
+.TP
+.B wrapmargin
+.nf
+Type: number
+Default: 0
+.fi
+.IP
+Controls the size of the margin remaining at the right side of
+the terminal when mutt's pager does smart wrapping.
+
+
+.TP
+.B write_inc
+.nf
+Type: number
+Default: 10
+.fi
+.IP
+When writing a mailbox, a message will be printed every
+\fIwrite_inc\fP messages to indicate progress.  If set to 0, only a
+single message will be displayed before writing a mailbox.
+.IP
+Also see the \(lq$read_inc\(rq variable.
+
+
+.TP
+.B write_bcc
+.nf
+Type: boolean
+Default: yes
+.fi
+.IP
+Controls whether mutt writes out the Bcc header when preparing
+messages to be sent.  Exim users may wish to use this.
+
+
+.TP
+.B x_comment_to
+.nf
+Type: boolean
+Default: no
+.fi
+.IP
+If \fIset\fP, Mutt will add \(lqX-Comment-To:\(rq field (that contains full
+name of original article author) to article that followuped to newsgroup.
+
+
+.\" -*-nroff-*-
+.SH SEE ALSO
+.PP
+.BR iconv (1),
+.BR iconv (3),
+.BR mailcap (5),
+.BR maildir (5),
+.BR mbox (5),
+.BR mutt (1),
+.BR printf (3),
+.BR regex (7),
+.BR strftime (3)
+.PP
+The Mutt Manual
+.PP
+The Mutt home page: http://www.mutt.org/
+.SH AUTHOR
+.PP
+Michael Elkins, and others.  Use <mutt-dev@mutt.org> to contact
+the developers.
diff --git a/doc/muttrc.man.head b/doc/muttrc.man.head
new file mode 100644 (file)
index 0000000..5e9350a
--- /dev/null
@@ -0,0 +1,487 @@
+'\" t
+.\" -*-nroff-*-
+.\"
+.\"     Copyright (C) 1996-2000 Michael R. Elkins <me@cs.hmc.edu>
+.\"    Copyright (C) 1999-2000 Thomas Roessler <roessler@guug.de>
+.\" 
+.\"     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.
+.\"
+.TH muttrc 5 "September 2002" Unix "User Manuals"
+.SH NAME
+muttrc \- Configuration file for the Mutt Mail User Agent
+.SH DESCRIPTION
+.PP
+A mutt configuration file consists of a series of \(lqcommands\(rq.
+Each line of the file may contain one or more commands.  When
+multiple commands are used, they must be separated by a semicolon
+(\(lq\fB;\fP\(rq).
+.PP
+The hash mark, or pound sign (\(lq\fB#\fP\(rq), is used as a
+\(lqcomment\(rq character. You can use it to annotate your
+initialization file. All text after the comment character to the end
+of the line is ignored.
+.PP
+Single quotes (\(lq\fB'\fP\(rq) and double quotes (\(lq\fB"\fP\(rq)
+can be used to quote strings which contain spaces or other special
+characters.  The difference between the two types of quotes is
+similar to that of many popular shell programs, namely that a single
+quote is used to specify a literal string (one that is not
+interpreted for shell variables or quoting with a backslash [see
+next paragraph]), while double quotes indicate a string for which
+should be evaluated.  For example, backtics are evaluated inside of
+double quotes, but not for single quotes.
+.PP
+\fB\(rs\fP quotes the next character, just as in shells such as bash and zsh.
+For example, if want to put quotes (\(lq\fB"\fP\(rq) inside of a
+string, you can use \(lq\fB\(rs\fP\(rq to force the next character
+to be a literal instead of interpreted character.
+.PP
+\(lq\fB\(rs\(rs\fP\(rq means to insert a literal \(lq\fB\(rs\fP\(rq into the
+line.  \(lq\fB\(rsn\fP\(rq and \(lq\fB\(rsr\fP\(rq have their usual
+C meanings of linefeed and carriage-return, respectively.
+.PP
+A \(lq\fB\(rs\fP\(rq at the end of a line can be used to split commands over
+multiple lines, provided that the split points don't appear in the
+middle of command names.
+.PP
+It is also possible to substitute the output of a Unix command in an
+initialization file.  This is accomplished by enclosing the command
+in backquotes (\fB`\fP\fIcommand\fP\fB`\fP).
+.PP
+UNIX environments can be accessed like the way it is done in shells
+like sh and bash: Prepend the name of the environment by a dollar
+(\(lq\fB\(Do\fP\(rq) sign.
+.PP
+.SH COMMANDS
+.PP
+.nf
+\fBalias\fP \fIkey\fP \fIaddress\fP [\fB,\fP \fIaddress\fP [ ... ]]
+\fBunalias\fP [\fB * \fP | \fIkey\fP ]
+.fi
+.IP
+\fBalias\fP defines an alias \fIkey\fP for the given addresses.
+\fBunalias\fP removes the alias corresponding to the given \fIkey\fP or
+all aliases when \(lq\fB*\fP\(rq is used as an argument.
+.PP
+.nf
+\fBalternates\fP \fIregexp\fP [ \fB,\fP \fIregexp\fP [ ... ]]
+\fBunalternates\fP [\fB * \fP | \fIregexp\fP [ \fB,\fP \fIregexp\fP [ ... ]] ]
+.fi
+.IP
+\fBalternates\fP is used to inform mutt about alternate addresses
+where you receive mail; you can use regular expressions to specify
+alternate addresses.  This affects mutt's idea about messages
+from you, and messages addressed to you.  \fBunalternates\fP removes
+a regular expression from the list of known alternates.
+.PP
+.nf
+\fBalternative_order\fP \fItype\fP[\fB/\fP\fIsubtype\fP] [ ... ]
+\fBunalternative_order\fP [\fB * \fP | \fItype\fP/\fIsubtype\fP] [...]
+.fi
+.IP
+\fBalternative_order\fP command permits you to define an order of preference which is
+used by mutt to determine which part of a
+\fBmultipart/alternative\fP body to display.
+A subtype of \(lq\fB*\fP\(rq matches any subtype, as does an empty
+subtype.   \fBunalternative_order\fP removes entries from the
+ordered list or deletes the entire list when \(lq\fB*\fP\(rq is used
+as an argument.
+.PP
+.nf
+\fBauto_view\fP \fItype\fP[\fB/\fP\fIsubtype\fP] [ ... ]
+\fBunauto_view\fP \fItype\fP[fB/\fP\fIsubtype\fP] [ ... ]
+.fi
+.IP
+This commands permits you to specify that mutt should automatically
+convert the given MIME types to text/plain when displaying messages.
+For this to work, there must be a 
+.BR mailcap (5)
+entry for the given MIME type with the 
+.B copiousoutput
+flag set.  A subtype of \(lq\fB*\fP\(rq 
+matches any subtype, as does an empty subtype.
+.PP
+.nf
+\fBmime_lookup\fP \fItype\fP[\fB/\fP\fIsubtype\fP] [ ... ]
+\fBunmime_lookup\fP \fItype\fP[\fB/\fP\fIsubtype\fP] [ ... ]
+.fi
+.IP
+This command permits you to define a list of "data" MIME content
+types for which mutt will try to determine the actual file type from
+the file name, and not use a 
+.BR mailcap (5)
+entry given for the original MIME type.  For instance, you may add
+the \fBapplication/octet-stream\fP MIME type to this list.
+.TP
+\fBbind\fP \fImap\fP \fIkey\fP \fIfunction\fP
+This command binds the given \fIkey\fP for the given \fImap\fP to
+the given \fIfunction\fP.
+.IP
+Valid maps are:
+.BR generic ", " alias ", " attach ", " 
+.BR browser ", " editor ", "
+.BR index ", " compose ", " 
+.BR pager ", " pgp ", " postpone ", "
+.BR mix .
+.IP
+For more information on keys and functions, please consult the Mutt
+Manual.
+.TP
+\fBaccount-hook\fP [\fB!\fP]\fIregexp\fP \fIcommand\fP
+This hook is executed whenever you access a remote mailbox. Useful
+to adjust configuration settings to different IMAP or POP servers.
+.TP
+\fBcharset-hook\fP \fIalias\fP \fIcharset\fP
+This command defines an alias for a character set.  This is useful
+to properly display messages which are tagged with a character set
+name not known to mutt.
+.TP
+\fBiconv-hook\fP \fIcharset\fP \fIlocal-charset\fP
+This command defines a system-specific name for a character set.
+This is useful when your system's 
+.BR iconv (3)
+implementation does not understand MIME character set names (such as 
+.BR iso-8859-1 ),
+but instead insists on being fed with implementation-specific
+character set names (such as
+.BR 8859-1 ).
+In this specific case, you'd put this into your configuration file:
+.IP
+.B "iconv-hook iso-8859-1 8859-1"
+.TP
+\fBmessage-hook\fP [\fB!\fP]\fIpattern\fP \fIcommand\fP
+Before mutt displays (or formats for replying or forwarding) a
+message which matches the given \fIpattern\fP (or, when it is
+preceded by an exclamation mark, does not match the \fIpattern\fP),
+the given \fIcommand\fP is executed.  When multiple
+\fBmessage-hook\fPs match, they are  executed  in  the order in
+which they occur in the configuration file.
+.TP
+\fBfolder-hook\fP [\fB!\fP]\fIregexp\fP \fIcommand\fP
+When mutt enters a folder which matches \fIregexp\fP (or, when
+\fIregexp\fP is preceded by an exclamation mark, does not match
+\fIregexp\fP), the given \fIcommand\fP is executed.
+.IP
+When several \fBfolder-hook\fPs match a given mail folder, they are
+executed in the order given in the configuration file.
+.TP
+\fBmacro\fP \fImap\fP \fIkey\fP \fIsequence\fP [ \fIdescription\fP ]
+This command binds the given \fIsequence\fP of keys to the given
+\fIkey\fP in the given \fImap\fP.  For valid maps, see \fBbind\fP.
+.PP
+.nf
+\fBcolor\fP \fIobject\fP \fIforeground\fP \fIbackground\fP [ \fI regexp\fP ]
+\fBcolor\fP index \fIforeground\fP \fIbackground\fP [ \fI pattern\fP ]
+\fBuncolor\fP index \fIpattern\fP [ \fIpattern\fP ... ]
+.fi
+.IP
+If your terminal supports color, these commands can be used to
+assign \fIforeground\fP/\fIbackgound\fP combinations to certain
+objects.  Valid objects are:
+.BR attachment ", " body ", " bold ", " header ", "
+.BR hdrdefault ", " index ", " indicator ", " markers ", "
+.BR message ", " normal ", " quoted ", " quoted\fIN\fP ", "
+.BR search ", " signature ", " status ", " tilde ", " tree ", "
+.BR underline .
+The
+.BR body " and " header
+objects allow you to restrict the colorization to a regular
+expression.  The \fBindex\fP object permits you to select colored
+messages by pattern.
+.IP
+Valid colors include:
+.BR white ", " black ", " green ", " magenta ", " blue ", "
+.BR cyan ", " yellow ", " red ", " default ", " color\fIN\fP .
+.PP
+.nf
+\fBmono\fP \fIobject\fP \fIattribute\fP [ \fIregexp\fP ]
+\fBmono\fP index \fIattribute\fP [ \fIpattern\fP ]
+.fi
+.IP
+For terminals which don't support color, you can still assign
+attributes to objects.  Valid attributes include:
+.BR none ", " bold ", " underline ", " 
+.BR reverse ", and " standout .
+.TP
+[\fBun\fP]\fBignore\fP \fIpattern\fP [ \fIpattern\fP ... ]
+The \fBignore\fP command permits you to specify header fields which
+you usually don't wish to see.  Any header field whose tag
+\fIbegins\fP with an \(lqignored\(rq pattern will be ignored.
+.IP
+The \fBunignore\fP command permits you to define exceptions from
+the above mentioned list of ignored headers.
+.PP
+.nf
+\fBlists\fP \fIregexp\fP [ \fIregexp\fP ... ]
+\fBunlists\fP \fIregexp\fP [ \fIregexp\fP ... ]
+\fBsubscribe\fP \fIregexp\fP [ \fIregexp\fP ... ]
+\fBunsubscribe\fP \fIregexp\fP [ \fIregexp\fP ... ]
+.fi
+.IP
+Mutt maintains two lists of mailing list address patterns, a list of
+subscribed mailing lists, and a list of known mailing lists.  All
+subscribed mailing lists are known.  Patterns use regular expressions.
+.IP
+The \fBlists\fP command adds a mailing list address to the list of
+known mailing lists.  The \fBunlists\fP command removes a mailing
+list from the lists of known and subscribed mailing lists.  The
+\fBsubscribe\fP command adds a mailing list to the lists of known
+and subscribed mailing lists.  The \fBunsubscribe\fP command removes
+it from the list of subscribed mailing lists.
+.TP
+\fBmbox-hook\fP [\fB!\fP]\fIpattern\fP \fImailbox\fP
+When mutt changes to a mail folder which matches \fIpattern\fP,
+\fImailbox\fP will be used as the \(lqmbox\(rq folder, i.e., read
+messages will be moved to that folder when the mail folder is left.
+.IP
+The first matching \fBmbox-hook\fP applies.
+.PP
+.nf
+\fBmailboxes\fP \fIfilename\fP [ \fIfilename\fP ... ]
+\fBunmailboxes\fP [ \fB*\fP | \fIfilename\fP ... ]
+.fi
+.IP
+The \fBmailboxes\fP specifies folders which can receive mail and which will
+be checked for new messages.  When changing folders, pressing space
+will cycle through folders with new mail.  The \fBunmailboxes\fP
+command is used to remove a file name from the list of folders which
+can receive mail.  If "\fB*\fP" is specified as the file name, the
+list is emptied.
+.PP
+.nf
+\fBmy_hdr\fP \fIstring\fP
+\fBunmy_hdr\fP \fIfield\fP
+.fi
+.IP
+Using \fBmy_hdr\fP, you can define headers which will be added to
+the messages you compose.  \fBunmy_hdr\fP will remove the given
+user-defined headers.
+.TP
+\fBhdr_order\fP \fIheader1\fP \fIheader2\fP [ ... ]
+With this command, you can specify an order in which mutt will
+attempt to present headers to you when viewing messages.
+.TP
+\fBsave-hook\fP [\fB!\fP]\fIpattern\fP \fIfilename\fP
+When a message matches \fIpattern\fP, the default file name when
+saving it will be the given \fIfilename\fP.
+.TP
+\fBfcc-hook\fP [\fB!\fP]\fIpattern\fP \fIfilename\fP
+When an outgoing message matches \fIpattern\fP, the default file
+name for storing a copy (fcc) will be the given \fIfilename\fP.
+.TP
+\fBfcc-save-hook\fP [\fB!\fP]\fIpattern\fP \fIfilename\fP
+This command is an abbreviation for identical \fBfcc-hook\fP and
+\fBsave-hook\fP commands.
+.TP
+\fBsend-hook\fP [\fB!\fP]\fIpattern\fP \fIcommand\fP
+When composing a message matching \fIpattern\fP, \fIcommand\fP is
+executed.  When multiple \fBsend-hook\fPs match, they are executed
+in the order in which they occur in the configuration file.
+.TP
+\fBcrypt-hook\fP \fIpattern\fP \fIkey-id\fP
+The crypt-hook command provides a method by which you can
+specify the ID of the public key to be used when encrypting messages
+to a certain recipient.  The meaning of "key ID" is to be taken
+broadly: This can be a different e-mail address, a numerical key ID,
+or even just an arbitrary search string.
+.TP
+\fBpush\fP \fIstring\fP
+This command adds the named \fIstring\fP to the keyboard buffer.
+.PP
+.nf
+\fBset\fP [\fBno\fP|\fBinv\fP]\fIvariable\fP[=\fIvalue\fP] [ ... ]
+\fBtoggle\fP \fIvariable\fP [ ... ]
+\fBunset\fP \fIvariable\fP [ ... ]
+\fBreset\fP \fIvariable\fP [ ... ]
+.fi
+.IP
+These commands are used to set and manipulate configuration
+varibles.
+.IP
+Mutt knows four basic types of variables: boolean, number, string
+and quadoption.  Boolean variables can be \fBset\fP (true),
+\fBunset\fP (false), or \fBtoggle\fPd. Number variables can be assigned
+a positive integer value.
+.IP
+String variables consist of any number of printable characters.
+Strings must be enclosed in quotes if they contain spaces or tabs.
+You may also use the \(lqC\(rq escape sequences \fB\\n\fP and
+\fB\\t\fP for newline and tab, respectively.
+.IP
+Quadoption variables are used to control whether or not to be
+prompted for certain actions, or to specify a default action.  A
+value of \fByes\fP will cause the action to be carried out automatically
+as if you had answered yes to the question.  Similarly, a value of
+\fBno\fP will cause the the action to be carried out as if you had
+answered \(lqno.\(rq A value of \fBask-yes\fP will cause a prompt
+with a default answer of \(lqyes\(rq and \fBask-no\fP will provide a
+default answer of \(lqno.\(rq
+.IP
+The \fBreset\fP command resets all given variables to the compile
+time defaults.  If you reset the special variabe \fBall\fP, all
+variables will reset to their system defaults.
+.TP
+\fBsource\fP \fIfilename\fP
+The given file will be evaluated as a configuration file.
+.TP
+\fBunhook\fP [\fB * \fP | \fIhook-type\fP ]
+This command will remove all hooks of a given type, or all hooks
+when \(lq\fB*\fP\(rq is used as an argument.  \fIhook-type\fP
+can be any of the \fB-hook\fP commands documented above.
+.SH PATTERNS
+.PP
+In various places with mutt, including some of the abovementioned
+\fBhook\fP commands, you can specify patterns to match messages.
+.SS Constructing Patterns
+.PP
+A simple pattern consists of an operator of the form
+\(lq\fB~\fP\fIcharacter\fP\(rq, possibly followed by a parameter
+against which mutt is supposed to match the object specified by
+this operator.  (For a list of operators, see below.)
+.PP
+With some of these operators, the object to be matched consists of
+several e-mail addresses.  In these cases, the object is matched if
+at least one of these e-mail addresses matches. You can prepend a
+hat (\(lq\fB^\fP\(rq) character to such a pattern to indicate that
+\fIall\fP addresses must match in order to match the object.
+.PP
+You can construct complex patterns by combining simple patterns with
+logical operators.  Logical AND is specified by simply concatenating
+two simple patterns, for instance \(lq~C mutt-dev ~s bug\(rq.
+Logical OR is specified by inserting a vertical bar (\(lq\fB|\fP\(rq)
+between two patterns, for instance \(lq~C mutt-dev | ~s bug\(rq.
+Additionally, you can negate a pattern by prepending a bang
+(\(lq\fB!\fP\(rq) character.  For logical grouping, use braces
+(\(lq()\(rq). Example: \(lq!(~t mutt|~c mutt) ~f elkins\(rq.
+.SS Simple Patterns
+.PP
+Mutt understands the following simple patterns:
+.PP
+.TS
+l l.
+~A     all messages
+~b \fIEXPR\fP  messages which contain \fIEXPR\fP in the message body
+~B \fIEXPR\fP  messages which contain \fIEXPR\fP in the whole message
+~c \fIEXPR\fP  messages carbon-copied to \fIEXPR\fP
+~C \fIEXPR\fP  message is either to: or cc: \fIEXPR\fP
+~D     deleted messages
+~d \fIMIN\fP-\fIMAX\fP messages with \(lqdate-sent\(rq in a Date range
+~E     expired messages
+~e \fIEXPR\fP  message which contains \fIEXPR\fP in the \(lqSender\(rq field
+~F     flagged messages
+~f \fIEXPR\fP  messages originating from \fIEXPR\fP
+~g     PGP signed messages
+~G     PGP encrypted messages
+~h \fIEXPR\fP  messages which contain \fIEXPR\fP in the message header
+~k     message contains PGP key material
+~i \fIEXPR\fP  message which match \fIEXPR\fP in the \(lqMessage-ID\(rq field
+~L \fIEXPR\fP  message is either originated or received by \fIEXPR\fP
+~l     message is addressed to a known mailing list
+~m \fIMIN\fP-\fIMAX\fP message in the range \fIMIN\fP to \fIMAX\fP
+~n \fIMIN\fP-\fIMAX\fP messages with a score in the range \fIMIN\fP to \fIMAX\fP
+~N     new messages
+~O     old messages
+~p     message is addressed to you (consults $alternates)
+~P     message is from you (consults $alternates)
+~Q     messages which have been replied to
+~R     read messages
+~r \fIMIN\fP-\fIMAX\fP messages with \(lqdate-received\(rq in a Date range
+~S     superseded messages
+~s \fIEXPR\fP  messages having \fIEXPR\fP in the \(lqSubject\(rq field.
+~T     tagged messages
+~t \fIEXPR\fP  messages addressed to \fIEXPR\fP
+~U     unread messages
+~v     message is part of a collapsed thread.
+~x \fIEXPR\fP  messages which contain \fIEXPR\fP in the \(lqReferences\(rq field
+~z \fIMIN\fP-\fIMAX\fP messages with a size in the range \fIMIN\fP to \fIMAX\fP
+~=     duplicated messages (see $duplicate_threads)
+.TE
+.PP
+In the above, \fIEXPR\fP is a regular expression.
+.PP
+With the \fB~m\fP, \fB~n\fP, and \fB~z\fP operators, you can also
+specify ranges in the forms \fB<\fP\fIMAX\fP, \fB>\fP\fIMIN\fP,
+\fIMIN\fP\fB-\fP, and \fB-\fP\fIMAX\fP.
+.SS Matching dates
+.PP
+The \fB~d\fP and \fB~r\fP operators are used to match date ranges,
+which are interpreted to be given in your local time zone.
+.PP
+A date is of the form
+\fIDD\fP[\fB/\fP\fIMM\fP[\fB/\fP[\fIcc\fP]\fIYY\fP]], that is, a
+two-digit date, optionally followed by a two-digit month, optionally
+followed by a year specifications.  Omitted fields default to the
+current month and year.
+.PP
+Mutt understands either two or four digit year specifications.  When
+given a two-digit year, mutt will interpret values less than 70 as
+lying in the 21st century (i.e., \(lq38\(rq means 2038 and not 1938,
+and \(lq00\(rq is interpreted as 2000), and values
+greater than or equal to 70 as lying in the 20th century.
+.PP
+Note that this behaviour \fIis\fP Y2K compliant, but that mutt
+\fIdoes\fP have a Y2.07K problem.
+.PP
+If a date range consists of a single date, the operator in question
+will match that precise date.  If the date range consists of a dash
+(\(lq\fB-\fP\(rq), followed by a date, this range will match any
+date before and up to the date given.  Similarly, a date followed by
+a dash matches the date given and any later point of time.  Two
+dates, separated by a dash, match any date which lies in the given
+range of time.
+.PP
+You can also modify any absolute date by giving an error range.  An
+error range consists of one of the characters
+.BR + ,
+.BR - ,
+.BR * ,
+followed by a positive number, followed by one of the unit
+characters
+.BR y ,
+.BR m ,
+.BR w ", or"
+.BR d ,
+specifying a unit of years, months, weeks, or days.  
+.B +
+increases the maximum date matched by the given interval of time,
+.B - 
+decreases the minimum date matched by the given interval of time, and
+.B *
+increases the maximum date and decreases the minimum date matched by
+the given interval of time.  It is possible to give multiple error
+margins, which cumulate.  Example:
+.B "1/1/2001-1w+2w*3d"
+.PP
+You can also specify offsets relative to the current date.  An
+offset is specified as one of the characters
+.BR < ,
+.BR > ,
+.BR = ,
+followed by a positive number, followed by one of the unit
+characters
+.BR y ,
+.BR m ,
+.BR w ", or"
+.BR d .
+.B >
+matches dates which are older than the specified amount of time, an
+offset which begins with the character
+.B < 
+matches dates which are more recent than the specified amount of time,
+and an offset which begins with the character
+.B =
+matches points of time which are precisely the given amount of time
+ago.
+.SH CONFIGURATION VARIABLES
diff --git a/doc/muttrc.man.tail b/doc/muttrc.man.tail
new file mode 100644 (file)
index 0000000..1c780df
--- /dev/null
@@ -0,0 +1,20 @@
+.\" -*-nroff-*-
+.SH SEE ALSO
+.PP
+.BR iconv (1),
+.BR iconv (3),
+.BR mailcap (5),
+.BR maildir (5),
+.BR mbox (5),
+.BR mutt (1),
+.BR printf (3),
+.BR regex (7),
+.BR strftime (3)
+.PP
+The Mutt Manual
+.PP
+The Mutt home page: http://www.mutt.org/
+.SH AUTHOR
+.PP
+Michael Elkins, and others.  Use <mutt-dev@mutt.org> to contact
+the developers.
diff --git a/doc/patch-notes.txt b/doc/patch-notes.txt
new file mode 100644 (file)
index 0000000..d4ceb03
--- /dev/null
@@ -0,0 +1,46 @@
+From roessler@does-not-exist.org Wed Nov  7 11:49:56 2001
+Date: Wed, 7 Nov 2001 11:49:56 +0100
+From: Thomas Roessler <roessler@does-not-exist.org>
+To: mutt-dev@mutt.org
+Subject: To those shipping patches (v2)
+MIME-Version: 1.0
+Content-Type: text/plain; format=flowed
+Status: RO
+Content-Length: 1273
+Lines: 34
+
+You folks have convinced me that the old patchlist was almost the 
+right way to go for mutt identifying what patches have been applied.
+
+Thus, I've implemented this scheme (and will commit it to the CVS 
+in a moment): There's a new file called PATCHES in the source tree, 
+which will be empty in the official distribution.
+
+This file's format is one patch ID per line.  Patch IDs should be 
+the same as the file names used for distributing patches.  The 
+format for these file names should be this: 
+
+     patch-<version>.<initials>.<patch-description>.<patchlevel>
+
+That is, Vsevolod's NNTP patch for mutt-1.3.42 could be named like 
+this:
+
+     patch-1.3.42.vvv.nntp.1
+
+ From PATCHES, patchlist.c will be automatically generated.  In 
+order to properly construct PATCHES, please include the following 
+chunk with your patch, replacing <your-id-here> by your patch ID.
+
+------------------------------snip------------------------------
+--- PATCHES~    Tue Nov  6 19:59:33 2001
++++ PATCHES     Tue Nov  6 19:59:42 2001
+@@ -1,0 +1 @@
++<your-id-here>
+------------------------------snip------------------------------
+
+The patch IDs will be displayed when mutt is run with the 'v' 
+command line switch.
+
+-- 
+Thomas Roessler                        http://log.does-not-exist.org/
+
diff --git a/doc/smime-notes.txt b/doc/smime-notes.txt
new file mode 100644 (file)
index 0000000..1d651ea
--- /dev/null
@@ -0,0 +1,98 @@
+How to add use mutt's S/MIME capabilities
+
+- Add the contents of contrib/smime.rc to your .muttrc. Don't worry about
+  changing the smime_sign_as line at this point -- you'll change it later.
+
+- Run 'smime_keys init'.
+
+- Download and install OpenSSL.
+
+- Get yourself a certificate. (You can get one for free from www.thawte.com,
+  or pay for one from VeriSign or one of its competitors) The way the
+  process generally works, the certificate will be installed "into" your web
+  browser.  If you are asked what application you wish to use the
+  certificate with, select Netscape. Strangely enough, "mutt" is usually not
+  an option.
+
+- Assuming you are using Mozilla, follow the instructions at
+  www.verisignlabs.com/Projects/smime_docs/linux.html to export the
+  certificate into a file called cert.p12. If you don't use Mozilla, you're
+  on your own.
+
+- Run "smime_keys add_p12 cert.p12"
+
+    * When the script asks for the "Import password", enter the one you
+      provided when you exported the certificate.
+
+    * When it asks for a "PEM pass phrase", make up a new password. Every
+      time you sign or decrypt a message, mutt will ask for the PEM pass
+      phrase.
+
+    * Finally, when the script asks for a label, enter an easy-to-remember
+      name for the certificate, such as "me". The script output will include
+      a line like:
+
+      added private key: /home/raldi/.smime/keys/12345678.0 for raldi@verisignlabs.com
+
+      The number (including the ".0" at the end) is your keyid. You will
+      need this number in the next step.
+
+- Edit the smime_sign_as line in your muttrc, replacing the keyid with your
+  own.
+
+- You probably want to import the trusted roots in
+  contrib/ca-bundle.crt. This makes you trust anything that was ultimately
+  signed by one of them. You can use "smime_keys add_root" to do so, or
+  just copy ca-bundle.crt into the place you point mutt's smime_ca_location
+  variable to.
+
+
+
+Other notes
+
+Key management is done in a way similar to OpenSSL's CA directory. Private
+keys and certificates are stored in different directories, as OpenSSL
+expects either to be supplied in a (distinct) file. Each directory contains
+an unsorted file named '.index' wherin each line has several fields:
+mailbox, keyid, label, id of the intermediate certificate and keyflags.
+
+    * Keyid is a hashvalue derived from the subject field of a certificate
+      and supplied by OpenSSL.
+
+    * The mailbox address is derived from either From or Sender field of the
+      message, and matched with the email field of the certificate. Non
+      matching address pairs get rejected, as get certificates not
+      containing a mailbox address at all. (These are security issues, that
+      perhaps should be configurable.)
+
+    * Label is set by the perl script (it will ask you to supply one), when
+      you add your keypair to the database. So are the remaining two fields.
+
+    * keyflags are set with certificate verification option of the perl
+      script. It may take as value one of the following: i: invalid
+      (verification failed), r: revoked, e: expired, u: unverified, v:
+      successfully verified and finally t: trusted, in case it was
+      successfully verified and you chose to trust the certificate (the
+      script will ask you). Mutt will not use invalid, revoked or expired
+      certificates for signing or encryption. It will ask for confirmation
+      before using unverified certificates, and finally it will issue a
+      warning before using successfully verified but untrusted certificates.
+
+The purpose fields of a certificate do not get verified yet, also there is
+no real check if the given file is a certificate at all.
+
+Key retrieval is done obviously by searching the index file for a given
+mailbox. If none is found, the user is presented a list of available keys
+and asked to select one of those.
+
+The certificate and key directories specified in muttrc have to exist. Mutt
+will not create them. If you wish to sign messages yourself, note that this
+mutt does not address any PKCS10 or PKCS12 issues (yet?); that is, you have
+to get a valid certficate outside of mutt. (See above)
+
+
+
+A certificate can be viewed by adding the following to your ~/.mailcap:
+
+application/x-pkcs7-signature;openssl pkcs7 -in %s -inform der -noout \
+-print_certs -text | less; needsterminal
diff --git a/dotlock.c b/dotlock.c
new file mode 100644 (file)
index 0000000..eb799d5
--- /dev/null
+++ b/dotlock.c
@@ -0,0 +1,755 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1998-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+/*
+ * This module either be compiled into Mutt, or it can be
+ * built as a separate program. For building it
+ * separately, define the DL_STANDALONE preprocessor
+ * macro.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <unistd.h>
+#include <dirent.h>
+#include <sys/file.h>
+#include <sys/stat.h>
+#include <sys/utsname.h>
+#include <errno.h>
+#include <time.h>
+#include <fcntl.h>
+#include <limits.h>
+
+#ifndef _POSIX_PATH_MAX
+#include <posix1_lim.h>
+#endif
+
+#include "dotlock.h"
+#include "config.h"
+
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#endif
+
+#ifdef DL_STANDALONE
+# include "reldate.h"
+#endif
+
+#define MAXLINKS 1024 /* maximum link depth */
+
+#ifdef DL_STANDALONE
+
+# define LONG_STRING 1024
+# define MAXLOCKATTEMPT 5
+
+# define strfcpy(A,B,C) strncpy (A,B,C), *(A+(C)-1)=0
+
+# ifdef USE_SETGID
+
+#  ifdef HAVE_SETEGID
+#   define SETEGID setegid
+#  else
+#   define SETEGID setgid
+#  endif
+#  ifndef S_ISLNK
+#   define S_ISLNK(x) (((x) & S_IFMT) == S_IFLNK ? 1 : 0)
+#  endif
+
+# endif
+
+# ifndef HAVE_SNPRINTF
+extern int snprintf (char *, size_t, const char *, ...);
+# endif
+
+#else  /* DL_STANDALONE */
+
+# ifdef USE_SETGID
+#   error Do not try to compile dotlock as a mutt module when requiring egid switching!
+# endif
+
+# include "mutt.h"
+# include "mx.h"
+
+#endif /* DL_STANDALONE */
+
+static int DotlockFlags;
+static int Retry = MAXLOCKATTEMPT;
+
+#ifdef DL_STANDALONE
+static char *Hostname;
+#endif
+
+#ifdef USE_SETGID
+static gid_t UserGid;
+static gid_t MailGid;
+#endif
+
+static int dotlock_deference_symlink (char *, size_t, const char *);
+static int dotlock_prepare (char *, size_t, const char *, int fd);
+static int dotlock_check_stats (struct stat *, struct stat *);
+static int dotlock_dispatch (const char *, int fd);
+
+#ifdef DL_STANDALONE
+static int dotlock_init_privs (void);
+static void usage (const char *);
+#endif
+
+static void dotlock_expand_link (char *, const char *, const char *);
+static void BEGIN_PRIVILEGED (void);
+static void END_PRIVILEGED (void);
+
+/* These functions work on the current directory.
+ * Invoke dotlock_prepare () before and check their
+ * return value.
+ */
+
+static int dotlock_try (void);
+static int dotlock_unlock (const char *);
+static int dotlock_unlink (const char *);
+static int dotlock_lock (const char *);
+
+
+#ifdef DL_STANDALONE
+
+#define check_flags(a) if (a & DL_FL_ACTIONS) usage (argv[0])
+
+int main (int argc, char **argv)
+{
+  int i;
+  char *p;
+  struct utsname utsname;
+
+  /* first, drop privileges */
+  
+  if (dotlock_init_privs () == -1)
+    return DL_EX_ERROR;
+
+
+  /* determine the system's host name */
+  
+  uname (&utsname);
+  if (!(Hostname = strdup (utsname.nodename))) /* __MEM_CHECKED__ */
+    return DL_EX_ERROR;
+  if ((p = strchr (Hostname, '.')))
+    *p = '\0';
+
+
+  /* parse the command line options. */
+  DotlockFlags = 0;
+  
+  while ((i = getopt (argc, argv, "dtfupr:")) != EOF)
+  {
+    switch (i)
+    {
+      /* actions, mutually exclusive */
+      case 't': check_flags (DotlockFlags); DotlockFlags |= DL_FL_TRY; break;
+      case 'd': check_flags (DotlockFlags); DotlockFlags |= DL_FL_UNLINK; break;
+      case 'u': check_flags (DotlockFlags); DotlockFlags |= DL_FL_UNLOCK; break;
+
+      /* other flags */
+      case 'f': DotlockFlags |= DL_FL_FORCE; break;
+      case 'p': DotlockFlags |= DL_FL_USEPRIV; break;
+      case 'r': DotlockFlags |= DL_FL_RETRY; Retry = atoi (optarg); break;
+      
+      default: usage (argv[0]);
+    }
+  }
+
+  if (optind == argc || Retry < 0)
+    usage (argv[0]);
+
+  return dotlock_dispatch (argv[optind], -1);
+}
+
+
+/* 
+ * Determine our effective group ID, and drop 
+ * privileges.
+ * 
+ * Return value:
+ * 
+ *  0 - everything went fine
+ * -1 - we couldn't drop privileges.
+ * 
+ */
+
+
+static int
+dotlock_init_privs (void)
+{
+
+# ifdef USE_SETGID
+  
+  UserGid = getgid ();
+  MailGid = getegid ();
+
+  if (SETEGID (UserGid) != 0)
+    return -1;
+
+# endif
+
+  return 0;
+}
+  
+
+#else  /* DL_STANDALONE */
+
+/* 
+ * This function is intended to be invoked from within
+ * mutt instead of mx.c's invoke_dotlock ().
+ */
+
+int dotlock_invoke (const char *path, int fd, int flags, int retry)
+{
+  int currdir;
+  int r;
+
+  DotlockFlags = flags;
+  
+  if ((currdir = open (".", O_RDONLY)) == -1)
+    return DL_EX_ERROR;
+
+  if (!(DotlockFlags & DL_FL_RETRY) || retry)
+    Retry = MAXLOCKATTEMPT;
+  else
+    Retry = 0;
+  
+  r = dotlock_dispatch (path, fd);
+  
+  fchdir (currdir);
+  close (currdir);
+  
+  return r;
+}
+
+#endif  /* DL_STANDALONE */
+
+
+static int dotlock_dispatch (const char *f, int fd)
+{
+  char realpath[_POSIX_PATH_MAX];
+
+  /* If dotlock_prepare () succeeds [return value == 0],
+   * realpath contains the basename of f, and we have
+   * successfully changed our working directory to
+   * `dirname $f`.  Additionally, f has been opened for
+   * reading to verify that the user has at least read
+   * permissions on that file.
+   * 
+   * For a more detailed explanation of all this, see the
+   * lengthy comment below.
+   */
+
+  if (dotlock_prepare (realpath, sizeof (realpath), f, fd) != 0)
+    return DL_EX_ERROR;
+
+  /* Actually perform the locking operation. */
+
+  if (DotlockFlags & DL_FL_TRY)
+    return dotlock_try ();
+  else if (DotlockFlags & DL_FL_UNLOCK)
+    return dotlock_unlock (realpath);
+  else if (DotlockFlags & DL_FL_UNLINK)
+    return dotlock_unlink (realpath);
+  else /* lock */
+    return dotlock_lock (realpath);
+}
+
+  
+/*
+ * Get privileges 
+ * 
+ * This function re-acquires the privileges we may have
+ * if the user told us to do so by giving the "-p"
+ * command line option.
+ * 
+ * BEGIN_PRIVILEGES () won't return if an error occurs.
+ * 
+ */
+
+static void
+BEGIN_PRIVILEGED (void)
+{
+#ifdef USE_SETGID
+  if (DotlockFlags & DL_FL_USEPRIV)
+  {
+    if (SETEGID (MailGid) != 0)
+    {
+      /* perror ("setegid"); */
+      exit (DL_EX_ERROR);
+    }
+  }
+#endif
+}
+
+/*
+ * Drop privileges
+ * 
+ * This function drops the group privileges we may have.
+ * 
+ * END_PRIVILEGED () won't return if an error occurs.
+ *
+ */
+
+static void
+END_PRIVILEGED (void)
+{
+#ifdef USE_SETGID
+  if (DotlockFlags & DL_FL_USEPRIV)
+  {
+    if (SETEGID (UserGid) != 0)
+    {
+      /* perror ("setegid"); */
+      exit (DL_EX_ERROR);
+    }
+  }
+#endif
+}
+
+#ifdef DL_STANDALONE
+
+/*
+ * Usage information.
+ * 
+ * This function doesn't return.
+ * 
+ */
+
+static void 
+usage (const char *av0)
+{
+  fprintf (stderr, "dotlock [Mutt %s (%s)]\n", VERSION, ReleaseDate);
+  fprintf (stderr, "usage: %s [-t|-f|-u|-d] [-p] [-r <retries>] file\n",
+         av0);
+
+  fputs ("\noptions:"
+       "\n  -t\t\ttry"
+       "\n  -f\t\tforce"
+       "\n  -u\t\tunlock"
+       "\n  -d\t\tunlink"
+       "\n  -p\t\tprivileged"
+#ifndef USE_SETGID
+       " (ignored)"
+#endif
+       "\n  -r <retries>\tRetry locking"
+       "\n", stderr);
+  
+  exit (DL_EX_ERROR);
+}
+
+#endif
+
+/*
+ * Access checking: Let's avoid to lock other users' mail
+ * spool files if we aren't permitted to read them.
+ * 
+ * Some simple-minded access (2) checking isn't sufficient
+ * here: The problem is that the user may give us a
+ * deeply nested path to a file which has the same name
+ * as the file he wants to lock, but different
+ * permissions, say, e.g.
+ * /tmp/lots/of/subdirs/var/spool/mail/root.
+ * 
+ * He may then try to replace /tmp/lots/of/subdirs by a
+ * symbolic link to / after we have invoked access () to
+ * check the file's permissions.  The lockfile we'd
+ * create or remove would then actually be
+ * /var/spool/mail/root.
+ * 
+ * To avoid this attack, we proceed as follows:
+ * 
+ * - First, follow symbolic links a la
+ *   dotlock_deference_symlink ().
+ * 
+ * - get the result's dirname.
+ * 
+ * - chdir to this directory.  If you can't, bail out.
+ * 
+ * - try to open the file in question, only using its
+ *   basename.  If you can't, bail out.
+ * 
+ * - fstat that file and compare the result to a
+ *   subsequent lstat (only using the basename).  If
+ *   the comparison fails, bail out.
+ * 
+ * dotlock_prepare () is invoked from main () directly
+ * after the command line parsing has been done.
+ *
+ * Return values:
+ * 
+ * 0 - Evereything's fine.  The program's new current
+ *     directory is the contains the file to be locked.
+ *     The string pointed to by bn contains the name of
+ *     the file to be locked.
+ * 
+ * -1 - Something failed. Don't continue.
+ * 
+ * tlr, Jul 15 1998
+ */
+
+static int
+dotlock_check_stats (struct stat *fsb, struct stat *lsb)
+{
+  /* S_ISLNK (fsb->st_mode) should actually be impossible,
+   * but we may have mixed up the parameters somewhere.
+   * play safe.
+   */
+
+  if (S_ISLNK (lsb->st_mode) || S_ISLNK (fsb->st_mode))
+    return -1;
+  
+  if ((lsb->st_dev != fsb->st_dev) ||
+     (lsb->st_ino != fsb->st_ino) ||
+     (lsb->st_mode != fsb->st_mode) ||
+     (lsb->st_nlink != fsb->st_nlink) ||
+     (lsb->st_uid != fsb->st_uid) ||
+     (lsb->st_gid != fsb->st_gid) ||
+     (lsb->st_rdev != fsb->st_rdev) ||
+     (lsb->st_size != fsb->st_size))
+  {
+    /* something's fishy */
+    return -1;
+  }
+  
+  return 0;
+}
+
+static int
+dotlock_prepare (char *bn, size_t l, const char *f, int _fd)
+{
+  struct stat fsb, lsb;
+  char realpath[_POSIX_PATH_MAX];
+  char *basename, *dirname;
+  char *p;
+  int fd;
+  int r;
+  
+  if (dotlock_deference_symlink (realpath, sizeof (realpath), f) == -1)
+    return -1;
+  
+  if ((p = strrchr (realpath, '/')))
+  {
+    *p = '\0';
+    basename = p + 1;
+    dirname = realpath;
+  }
+  else
+  {
+    basename = realpath;
+    dirname = ".";
+  }
+
+  if (strlen (basename) + 1 > l)
+    return -1;
+  
+  strfcpy (bn, basename, l);
+  
+  if (chdir (dirname) == -1)
+    return -1;
+
+  if (_fd != -1)
+    fd = _fd;
+  else if ((fd = open (basename, O_RDONLY)) == -1)
+    return -1;
+  
+  r = fstat (fd, &fsb);
+  
+  if (_fd == -1)
+    close (fd);
+  
+  if (r == -1)
+    return -1;
+  
+  if (lstat (basename, &lsb) == -1)
+    return -1;
+
+  if (dotlock_check_stats (&fsb, &lsb) == -1)
+    return -1;
+
+  return 0;
+}
+
+/*
+ * Expand a symbolic link.
+ * 
+ * This function expects newpath to have space for
+ * at least _POSIX_PATH_MAX characters.
+ *
+ */
+
+static void 
+dotlock_expand_link (char *newpath, const char *path, const char *link)
+{
+  const char *lb = NULL;
+  size_t len;
+
+  /* link is full path */
+  if (*link == '/')
+  {
+    strfcpy (newpath, link, _POSIX_PATH_MAX);
+    return;
+  }
+
+  if ((lb = strrchr (path, '/')) == NULL)
+  {
+    /* no path in link */
+    strfcpy (newpath, link, _POSIX_PATH_MAX);
+    return;
+  }
+
+  len = lb - path + 1;
+  memcpy (newpath, path, len);
+  strfcpy (newpath + len, link, _POSIX_PATH_MAX - len);
+}
+
+
+/*
+ * Deference a chain of symbolic links
+ * 
+ * The final path is written to d.
+ *
+ */
+
+static int
+dotlock_deference_symlink (char *d, size_t l, const char *path)
+{
+  struct stat sb;
+  char realpath[_POSIX_PATH_MAX];
+  const char *pathptr = path;
+  int count = 0;
+  
+  while (count++ < MAXLINKS)
+  {
+    if (lstat (pathptr, &sb) == -1)
+    {
+      /* perror (pathptr); */
+      return -1;
+    }
+    
+    if (S_ISLNK (sb.st_mode))
+    {
+      char linkfile[_POSIX_PATH_MAX];
+      char linkpath[_POSIX_PATH_MAX];
+      int len;
+
+      if ((len = readlink (pathptr, linkfile, sizeof (linkfile))) == -1)
+      {
+       /* perror (pathptr); */
+       return -1;
+      }
+      
+      linkfile[len] = '\0';
+      dotlock_expand_link (linkpath, pathptr, linkfile);
+      strfcpy (realpath, linkpath, sizeof (realpath));
+      pathptr = realpath;
+    }
+    else
+      break;
+  }
+
+  strfcpy (d, pathptr, l);
+  return 0;
+}
+
+/*
+ * Dotlock a file.
+ * 
+ * realpath is assumed _not_ to be an absolute path to
+ * the file we are about to lock.  Invoke
+ * dotlock_prepare () before using this function!
+ * 
+ */
+
+#define HARDMAXATTEMPTS 10
+
+static int
+dotlock_lock (const char *realpath)
+{
+  char lockfile[_POSIX_PATH_MAX + LONG_STRING];
+  char nfslockfile[_POSIX_PATH_MAX + LONG_STRING];
+  size_t prev_size = 0;
+  int fd;
+  int count = 0;
+  int hard_count = 0;
+  struct stat sb;
+  time_t t;
+  
+  snprintf (nfslockfile, sizeof (nfslockfile), "%s.%s.%d",
+          realpath, Hostname, (int) getpid ());
+  snprintf (lockfile, sizeof (lockfile), "%s.lock", realpath);
+
+  
+  BEGIN_PRIVILEGED ();
+
+  unlink (nfslockfile);
+
+  while ((fd = open (nfslockfile, O_WRONLY | O_EXCL | O_CREAT, 0)) < 0)
+  {
+    END_PRIVILEGED ();
+
+  
+    if (errno != EAGAIN)
+    {
+      /* perror ("cannot open NFS lock file"); */
+      return DL_EX_ERROR;
+    }
+
+    
+    BEGIN_PRIVILEGED ();
+  }
+
+  END_PRIVILEGED ();
+
+  
+  close (fd);
+  
+  while (hard_count++ < HARDMAXATTEMPTS)
+  {
+
+    BEGIN_PRIVILEGED ();
+    link (nfslockfile, lockfile);
+    END_PRIVILEGED ();
+
+    if (stat (nfslockfile, &sb) != 0)
+    {
+      /* perror ("stat"); */
+      return DL_EX_ERROR;
+    }
+
+    if (sb.st_nlink == 2)
+      break;
+
+    if (count == 0)
+      prev_size = sb.st_size;
+
+    if (prev_size == sb.st_size && ++count > Retry)
+    {
+      if (DotlockFlags & DL_FL_FORCE)
+      {
+       BEGIN_PRIVILEGED ();
+       unlink (lockfile);
+       END_PRIVILEGED ();
+
+       count = 0;
+       continue;
+      }
+      else
+      {
+       BEGIN_PRIVILEGED ();
+       unlink (nfslockfile);
+       END_PRIVILEGED ();
+       return DL_EX_EXIST;
+      }
+    }
+    
+    prev_size = sb.st_size;
+    
+    /* don't trust sleep (3) as it may be interrupted
+     * by users sending signals. 
+     */
+    
+    t = time (NULL);
+    do {
+      sleep (1);
+    } while (time (NULL) == t);
+  }
+
+  BEGIN_PRIVILEGED ();
+  unlink (nfslockfile);
+  END_PRIVILEGED ();
+
+  return DL_EX_OK;
+}
+
+
+/*
+ * Unlock a file. 
+ * 
+ * The same comment as for dotlock_lock () applies here.
+ * 
+ */
+
+static int
+dotlock_unlock (const char *realpath)
+{
+  char lockfile[_POSIX_PATH_MAX + LONG_STRING];
+  int i;
+
+  snprintf (lockfile, sizeof (lockfile), "%s.lock",
+          realpath);
+  
+  BEGIN_PRIVILEGED ();
+  i = unlink (lockfile);
+  END_PRIVILEGED ();
+  
+  if (i == -1)
+    return DL_EX_ERROR;
+  
+  return DL_EX_OK;
+}
+
+/* remove an empty file */
+
+static int
+dotlock_unlink (const char *realpath)
+{
+  struct stat lsb;
+  int i = -1;
+
+  if (dotlock_lock (realpath) != DL_EX_OK)
+    return DL_EX_ERROR;
+
+  if ((i = lstat (realpath, &lsb)) == 0 && lsb.st_size == 0)
+    unlink (realpath);
+
+  dotlock_unlock (realpath);
+
+  return (i == 0) ?  DL_EX_OK : DL_EX_ERROR;
+}
+
+
+/*
+ * Check if a file can be locked at all.
+ * 
+ * The same comment as for dotlock_lock () applies here.
+ * 
+ */
+
+static int
+dotlock_try (void)
+{
+#ifdef USE_SETGID
+  struct stat sb;
+#endif
+
+  if (access (".", W_OK) == 0)
+    return DL_EX_OK;
+
+#ifdef USE_SETGID
+  if (stat (".", &sb) == 0)
+  {
+    if ((sb.st_mode & S_IWGRP) == S_IWGRP && sb.st_gid == MailGid)
+      return DL_EX_NEED_PRIVS;
+  }
+#endif
+
+  return DL_EX_IMPOSSIBLE;
+}
diff --git a/dotlock.h b/dotlock.h
new file mode 100644 (file)
index 0000000..dff6f61
--- /dev/null
+++ b/dotlock.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1998-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+#ifndef _DOTLOCK_H
+#define _DOTLOCK_H
+
+/* exit values */
+
+#define DL_EX_OK       0       
+#define DL_EX_ERROR    1       
+#define DL_EX_EXIST    3       
+#define DL_EX_NEED_PRIVS 4
+#define DL_EX_IMPOSSIBLE 5
+
+/* flags */
+
+#define DL_FL_TRY      (1 << 0)
+#define DL_FL_UNLOCK   (1 << 1)
+#define DL_FL_USEPRIV  (1 << 2)
+#define DL_FL_FORCE    (1 << 3)
+#define DL_FL_RETRY    (1 << 4)
+#define DL_FL_UNLINK   (1 << 5)
+
+#define DL_FL_ACTIONS (DL_FL_TRY|DL_FL_UNLOCK|DL_FL_UNLINK)
+
+#ifndef DL_STANDALONE
+int dotlock_invoke (const char *, int, int, int);
+#endif
+
+#endif
diff --git a/edit.c b/edit.c
new file mode 100644 (file)
index 0000000..e29cb66
--- /dev/null
+++ b/edit.c
@@ -0,0 +1,479 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+/* Close approximation of the mailx(1) builtin editor for sending mail. */
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "mutt_idna.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+
+/*
+ * SLcurses_waddnstr() can't take a "const char *", so this is only
+ * declared "static" (sigh)
+ */
+static char* EditorHelp = N_("\
+~~             insert a line begining with a single ~\n\
+~b users       add users to the Bcc: field\n\
+~c users       add users to the Cc: field\n\
+~f messages    include messages\n\
+~F messages    same as ~f, except also include headers\n\
+~h             edit the message header\n\
+~m messages    include and quote messages\n\
+~M messages    same as ~m, except include headers\n\
+~p             print the message\n\
+~q             write file and quit editor\n\
+~r file                read a file into the editor\n\
+~t users       add users to the To: field\n\
+~u             recall the previous line\n\
+~v             edit message with the $visual editor\n\
+~w file                write message to file\n\
+~x             abort changes and quit editor\n\
+~?             this message\n\
+.              on a line by itself ends input\n");
+
+static char **
+be_snarf_data (FILE *f, char **buf, int *bufmax, int *buflen, int offset,
+              int bytes, int prefix)
+{
+  char tmp[HUGE_STRING];
+  char *p = tmp;
+  int tmplen = sizeof (tmp);
+
+  tmp[sizeof (tmp) - 1] = 0;
+  if (prefix)
+  {
+    strfcpy (tmp, NONULL(Prefix), sizeof (tmp));
+    tmplen = mutt_strlen (tmp);
+    p = tmp + tmplen;
+    tmplen = sizeof (tmp) - tmplen;
+  }
+
+  fseek (f, offset, 0);
+  while (bytes > 0)
+  {
+    if (fgets (p, tmplen - 1, f) == NULL) break;
+    bytes -= mutt_strlen (p);
+    if (*bufmax == *buflen)
+      safe_realloc (&buf, sizeof (char *) * (*bufmax += 25));
+    buf[(*buflen)++] = safe_strdup (tmp);
+  }
+  if (buf && *bufmax == *buflen) { /* Do not smash memory past buf */
+    safe_realloc (&buf, sizeof (char *) * (++*bufmax));
+  }
+  if (buf) buf[*buflen] = NULL;
+  return (buf);
+}
+
+static char **
+be_snarf_file (const char *path, char **buf, int *max, int *len, int verbose)
+{
+  FILE *f;
+  char tmp[LONG_STRING];
+  struct stat sb;
+  
+  if ((f = fopen (path, "r")))
+  {
+    fstat (fileno (f), &sb);
+    buf = be_snarf_data (f, buf, max, len, 0, sb.st_size, 0);
+    if (verbose)
+    {
+      snprintf(tmp, sizeof(tmp), "\"%s\" %lu bytes\n", path, (unsigned long) sb.st_size);
+      addstr(tmp);
+    }
+    fclose (f);
+  }
+  else
+  {
+    snprintf(tmp, sizeof(tmp), "%s: %s\n", path, strerror(errno));
+    addstr(tmp);
+  }
+  return (buf);
+}
+
+static int be_barf_file (const char *path, char **buf, int buflen)
+{
+  FILE *f;
+  int i;
+  
+  if ((f = fopen (path, "w")) == NULL)         /* __FOPEN_CHECKED__ */
+  {
+    addstr (strerror (errno));
+    addch ('\n');
+    return (-1);
+  }
+  for (i = 0; i < buflen; i++) fputs (buf[i], f);
+  if (fclose (f) == 0) return 0;
+  printw ("fclose: %s\n", strerror (errno));
+  return (-1);
+}
+
+static void be_free_memory (char **buf, int buflen)
+{
+  while (buflen-- > 0)
+    FREE (&buf[buflen]);
+  if (buf)
+    FREE (&buf);
+}
+
+static char **
+be_include_messages (char *msg, char **buf, int *bufmax, int *buflen,
+                    int pfx, int inc_hdrs)
+{
+  int offset, bytes, n;
+  char tmp[LONG_STRING];
+
+  while ((msg = strtok (msg, " ,")) != NULL)
+  {
+    n = atoi (msg);
+    if (n > 0 && n <= Context->msgcount)
+    {
+      n--;
+
+      /* add the attribution */
+      if (Attribution)
+      {
+       mutt_make_string (tmp, sizeof (tmp) - 1, Attribution, Context, Context->hdrs[n]);
+       strcat (tmp, "\n");     /* __STRCAT_CHECKED__ */
+      }
+
+      if (*bufmax == *buflen)
+       safe_realloc ( &buf, sizeof (char *) * (*bufmax += 25));
+      buf[(*buflen)++] = safe_strdup (tmp);
+
+      bytes = Context->hdrs[n]->content->length;
+      if (inc_hdrs)
+      {
+       offset = Context->hdrs[n]->offset;
+       bytes += Context->hdrs[n]->content->offset - offset;
+      }
+      else
+       offset = Context->hdrs[n]->content->offset;
+      buf = be_snarf_data (Context->fp, buf, bufmax, buflen, offset, bytes,
+                          pfx);
+
+      if (*bufmax == *buflen)
+       safe_realloc (&buf, sizeof (char *) * (*bufmax += 25));
+      buf[(*buflen)++] = safe_strdup ("\n");
+    }
+    else
+      printw (_("%d: invalid message number.\n"), n);
+    msg = NULL;
+  }
+  return (buf);
+}
+
+static void be_print_header (ENVELOPE *env)
+{
+  char tmp[HUGE_STRING];
+
+  if (env->to)
+  {
+    addstr ("To: ");
+    tmp[0] = 0;
+    rfc822_write_address (tmp, sizeof (tmp), env->to, 1);
+    addstr (tmp);
+    addch ('\n');
+  }
+  if (env->cc)
+  {
+    addstr ("Cc: ");
+    tmp[0] = 0;
+    rfc822_write_address (tmp, sizeof (tmp), env->cc, 1);
+    addstr (tmp);
+    addch ('\n');
+  }
+  if (env->bcc)
+  {
+    addstr ("Bcc: ");
+    tmp[0] = 0;
+    rfc822_write_address (tmp, sizeof (tmp), env->bcc, 1);
+    addstr (tmp);
+    addch ('\n');
+  }
+  if (env->subject)
+  {
+    addstr ("Subject: ");
+    addstr (env->subject);
+    addch ('\n');
+  }
+  addch ('\n');
+}
+
+/* args:
+ *     force   override the $ask* vars (used for the ~h command)
+ */
+static void be_edit_header (ENVELOPE *e, int force)
+{
+  char tmp[HUGE_STRING];
+
+  move (LINES-1, 0);
+
+  addstr ("To: ");
+  tmp[0] = 0;
+  mutt_addrlist_to_local (e->to);
+  rfc822_write_address (tmp, sizeof (tmp), e->to, 0);
+  if (!e->to || force)
+  {
+    if (mutt_enter_string (tmp, sizeof (tmp), LINES-1, 4, 0) == 0)
+    {
+      rfc822_free_address (&e->to);
+      e->to = mutt_parse_adrlist (e->to, tmp);
+      e->to = mutt_expand_aliases (e->to);
+      mutt_addrlist_to_idna (e->to, NULL);     /* XXX - IDNA error reporting? */
+      tmp[0] = 0;
+      rfc822_write_address (tmp, sizeof (tmp), e->to, 1);
+      mvaddstr (LINES - 1, 4, tmp);
+    }
+  }
+  else
+  {
+    mutt_addrlist_to_idna (e->to, NULL);       /* XXX - IDNA error reporting? */
+    addstr (tmp);
+  }
+  addch ('\n');
+
+  if (!e->subject || force)
+  {
+    addstr ("Subject: ");
+    strfcpy (tmp, e->subject ? e->subject: "", sizeof (tmp));
+    if (mutt_enter_string (tmp, sizeof (tmp), LINES-1, 9, 0) == 0)
+      mutt_str_replace (&e->subject, tmp);
+    addch ('\n');
+  }
+
+  if ((!e->cc && option (OPTASKCC)) || force)
+  {
+    addstr ("Cc: ");
+    tmp[0] = 0;
+    mutt_addrlist_to_local (e->cc);
+    rfc822_write_address (tmp, sizeof (tmp), e->cc, 0);
+    if (mutt_enter_string (tmp, sizeof (tmp), LINES-1, 4, 0) == 0)
+    {
+      rfc822_free_address (&e->cc);
+      e->cc = mutt_parse_adrlist (e->cc, tmp);
+      e->cc = mutt_expand_aliases (e->cc);
+      tmp[0] = 0;
+      mutt_addrlist_to_idna (e->cc, NULL);
+      rfc822_write_address (tmp, sizeof (tmp), e->cc, 1);
+      mvaddstr (LINES - 1, 4, tmp);
+    }
+    else
+      mutt_addrlist_to_idna (e->cc, NULL);
+    addch ('\n');
+  }
+
+  if (option (OPTASKBCC) || force)
+  {
+    addstr ("Bcc: ");
+    tmp[0] = 0;
+    mutt_addrlist_to_local (e->bcc);
+    rfc822_write_address (tmp, sizeof (tmp), e->bcc, 0);
+    if (mutt_enter_string (tmp, sizeof (tmp), LINES-1, 5, 0) == 0)
+    {
+      rfc822_free_address (&e->bcc);
+      e->bcc = mutt_parse_adrlist (e->bcc, tmp);
+      e->bcc = mutt_expand_aliases (e->bcc);
+      mutt_addrlist_to_idna (e->bcc, NULL);
+      tmp[0] = 0;
+      rfc822_write_address (tmp, sizeof (tmp), e->bcc, 1);
+      mvaddstr (LINES - 1, 5, tmp);
+    }
+    else
+      mutt_addrlist_to_idna (e->bcc, NULL);
+    addch ('\n');
+  }
+}
+
+int mutt_builtin_editor (const char *path, HEADER *msg, HEADER *cur)
+{
+  char **buf = NULL;
+  int bufmax = 0, buflen = 0;
+  char tmp[LONG_STRING];
+  int abort = 0;
+  int done = 0;
+  int i;
+  char *p;
+  
+  scrollok (stdscr, TRUE);
+
+  be_edit_header (msg->env, 0);
+
+  addstr (_("(End message with a . on a line by itself)\n"));
+
+  buf = be_snarf_file (path, buf, &bufmax, &buflen, 0);
+
+  tmp[0] = 0;
+  while (!done)
+  {
+    if (mutt_enter_string (tmp, sizeof (tmp), LINES-1, 0, 0) == -1)
+    {
+      tmp[0] = 0;
+      continue;
+    }
+    addch ('\n');
+
+    if (EscChar && tmp[0] == EscChar[0] && tmp[1] != EscChar[0])
+    {
+      /* remove trailing whitespace from the line */
+      p = tmp + mutt_strlen (tmp) - 1;
+      while (p >= tmp && ISSPACE (*p))
+       *p-- = 0;
+
+      p = tmp + 2;
+      SKIPWS (p);
+
+      switch (tmp[1])
+      {
+       case '?':
+         addstr (_(EditorHelp));
+         break;
+       case 'b':
+         msg->env->bcc = mutt_parse_adrlist (msg->env->bcc, p);
+         msg->env->bcc = mutt_expand_aliases (msg->env->bcc);
+         break;
+       case 'c':
+         msg->env->cc = mutt_parse_adrlist (msg->env->cc, p);
+         msg->env->cc = mutt_expand_aliases (msg->env->cc);
+         break;
+       case 'h':
+         be_edit_header (msg->env, 1);
+         break;
+       case 'F':
+       case 'f':
+       case 'm':
+       case 'M':
+         if (Context)
+         {
+           if (!*p && cur)
+           {
+             /* include the current message */
+             p = tmp + mutt_strlen (tmp) + 1;
+             snprintf (tmp + mutt_strlen (tmp), sizeof (tmp) - mutt_strlen (tmp), " %d",
+                                                               cur->msgno + 1);
+           }
+           buf = be_include_messages (p, buf, &bufmax, &buflen,
+                                      (ascii_tolower (tmp[1]) == 'm'),
+                                      (ascii_isupper ((unsigned char) tmp[1])));
+         }
+         else
+           addstr (_("No mailbox.\n"));
+         break;
+       case 'p':
+         addstr ("-----\n");
+         addstr (_("Message contains:\n"));
+         be_print_header (msg->env);
+         for (i = 0; i < buflen; i++)
+           addstr (buf[i]);
+         addstr (_("(continue)\n"));
+         break;
+       case 'q':
+         done = 1;
+         break;
+       case 'r':
+         if (*p)
+          {
+           strncpy(tmp, p, sizeof(tmp));
+           mutt_expand_path(tmp, sizeof(tmp));
+           buf = be_snarf_file (tmp, buf, &bufmax, &buflen, 1);
+          }
+         else
+           addstr (_("missing filename.\n"));
+         break;
+       case 's':
+         mutt_str_replace (&msg->env->subject, p);
+         break;
+       case 't':
+         msg->env->to = rfc822_parse_adrlist (msg->env->to, p);
+         msg->env->to = mutt_expand_aliases (msg->env->to);
+         break;
+       case 'u':
+         if (buflen)
+         {
+           buflen--;
+           strfcpy (tmp, buf[buflen], sizeof (tmp));
+           tmp[mutt_strlen (tmp)-1] = 0;
+           FREE (&buf[buflen]);
+           buf[buflen] = NULL;
+           continue;
+         }
+         else
+           addstr (_("No lines in message.\n"));
+         break;
+
+       case 'e':
+       case 'v':
+         if (be_barf_file (path, buf, buflen) == 0)
+         {
+           char *tag, *err;
+           be_free_memory (buf, buflen);
+           buf = NULL;
+           bufmax = buflen = 0;
+
+           if (option (OPTEDITHDRS))
+           {
+             mutt_env_to_local (msg->env);
+             mutt_edit_headers (NONULL(Visual), path, msg, NULL, 0);
+             if (mutt_env_to_idna (msg->env, &tag, &err))
+               printw (_("Bad IDN in %s: '%s'\n"), tag, err);
+           }
+           else
+             mutt_edit_file (NONULL(Visual), path);
+
+           buf = be_snarf_file (path, buf, &bufmax, &buflen, 0);
+
+           addstr (_("(continue)\n"));
+         }
+         break;
+       case 'w':
+         be_barf_file (*p ? p : path, buf, buflen);
+         break;
+       case 'x':
+         abort = 1;
+         done = 1;
+         break;
+       default:
+         printw (_("%s: unknown editor command (~? for help)\n"), tmp);
+         break;
+      }
+    }
+    else if (mutt_strcmp (".", tmp) == 0)
+      done = 1;
+    else
+    {
+      strncat (tmp, "\n", sizeof(tmp)); tmp[sizeof(tmp) - 1] = '\0';
+      if (buflen == bufmax)
+       safe_realloc (&buf, sizeof (char *) * (bufmax += 25));
+      buf[buflen++] = safe_strdup (tmp[1] == '~' ? tmp + 1 : tmp);
+    }
+    
+    tmp[0] = 0;
+  }
+
+  if (!abort) be_barf_file (path, buf, buflen);
+  be_free_memory (buf, buflen);
+
+  return (abort ? -1 : 0);
+}
diff --git a/editmsg.c b/editmsg.c
new file mode 100644 (file)
index 0000000..c341542
--- /dev/null
+++ b/editmsg.c
@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+/* simple, editor-based message editing */
+
+#include "mutt.h"
+#include "copy.h"
+#include "mailbox.h"
+#include "mx.h"
+
+#include <sys/stat.h>
+#include <errno.h>
+
+#include <time.h>
+
+/*
+ * return value:
+ * 
+ * 1   message not modified
+ * 0   message edited successfully
+ * -1   error
+ */
+
+static int edit_one_message (CONTEXT *ctx, HEADER *cur)
+{
+  char tmp[_POSIX_PATH_MAX];
+  char buff[STRING];
+  int omagic;
+  int oerrno;
+  int rc;
+
+  unsigned short o_read;
+  unsigned short o_old;
+
+  int of, cf;
+  
+  CONTEXT tmpctx;
+  MESSAGE *msg;
+
+  FILE *fp = NULL;
+
+  struct stat sb;
+  time_t mtime = 0;
+  
+  mutt_mktemp (tmp);
+
+  omagic = DefaultMagic;
+  DefaultMagic = M_MBOX;
+
+  rc = (mx_open_mailbox (tmp, M_NEWFOLDER, &tmpctx) == NULL) ? -1 : 0;
+
+  DefaultMagic = omagic;
+
+  if (rc == -1)
+  {
+    mutt_error (_("could not create temporary folder: %s"), strerror (errno));
+    return -1;
+  }
+
+  rc = mutt_append_message (&tmpctx, ctx, cur, 0, CH_NOLEN | CH_NOSTATUS); oerrno = errno;
+
+  mx_close_mailbox (&tmpctx, NULL);
+
+  if (rc == -1)
+  {
+    mutt_error (_("could not write temporary mail folder: %s"), strerror (oerrno));
+    goto bail;
+  }
+
+  if (stat (tmp, &sb) == 0)
+    mtime = sb.st_mtime;
+
+  /*
+   * 2002-09-05 me@sigpipe.org
+   * The file the user is going to edit is not a real mbox, so we need to
+   * truncate the last newline in the temp file, which is logically part of
+   * the message separator, and not the body of the message.  If we fail to
+   * remove it, the message will grow by one line each time the user edits
+   * the message.
+   */
+  if (sb.st_size != 0 && truncate (tmp, sb.st_size - 1) == -1)
+  {
+    mutt_error (_("could not truncate temporary mail folder: %s"),
+               strerror (errno));
+    goto bail;
+  }
+
+  mutt_edit_file (NONULL(Editor), tmp);
+
+  if ((rc = stat (tmp, &sb)) == -1)
+  {
+    mutt_error (_("Can't stat %s: %s"), tmp, strerror (errno));
+    goto bail;
+  }
+  
+  if (sb.st_size == 0)
+  {
+    mutt_message (_("Message file is empty!"));
+    rc = 1;
+    goto bail;
+  }
+
+  if (sb.st_mtime == mtime)
+  {
+    mutt_message (_("Message not modified!"));
+    rc = 1;
+    goto bail;
+  }
+
+  if ((fp = fopen (tmp, "r")) == NULL)
+  {
+    rc = -1;
+    mutt_error (_("Can't open message file: %s"), strerror (errno));
+    goto bail;
+  }
+
+  if (mx_open_mailbox (ctx->path, M_APPEND, &tmpctx) == NULL)
+  {
+    rc = -1;
+    mutt_error (_("Can't append to folder: %s"), strerror (errno));
+    goto bail;
+  }
+
+  of = cf = 0;
+  
+  if (fgets (buff, sizeof (buff), fp) && is_from (buff, NULL, 0, NULL))
+  {
+    if (tmpctx.magic == M_MBOX || tmpctx.magic == M_MMDF)
+      cf = CH_FROM | CH_FORCE_FROM;
+  }
+  else
+    of = M_ADD_FROM;
+
+  /* 
+   * XXX - we have to play games with the message flags to avoid
+   * problematic behaviour with maildir folders.
+   *
+   */
+
+  o_read = cur->read; o_old = cur->old;
+  cur->read = cur->old = 0;
+  msg = mx_open_new_message (&tmpctx, cur, of);
+  cur->read = o_read; cur->old = o_old;
+
+  if (msg == NULL)
+  {
+    mutt_error (_("Can't append to folder: %s"), strerror (errno));
+    mx_close_mailbox (&tmpctx, NULL);
+    goto bail;
+  }
+
+  if ((rc = mutt_copy_hdr (fp, msg->fp, 0, sb.st_size, CH_NOSTATUS | CH_NOLEN | cf, NULL)) == 0)
+  {
+    fputc ('\n', msg->fp);
+    rc = mutt_copy_stream (fp, msg->fp);
+  }
+
+  rc = mx_commit_message (msg, &tmpctx);
+  mx_close_message (&msg);
+  
+  mx_close_mailbox (&tmpctx, NULL);
+  
+  bail:
+  if (fp) fclose (fp);
+
+  if (rc >= 0)
+    unlink (tmp);
+
+  if (rc == 0)
+  {
+    mutt_set_flag (Context, cur, M_DELETE, 1);
+    mutt_set_flag (Context, cur, M_READ, 1);
+
+    if (option (OPTDELETEUNTAG))
+      mutt_set_flag (Context, cur, M_TAG, 0);
+  }
+  else if (rc == -1)
+    mutt_message (_("Error. Preserving temporary file: %s"), tmp);
+
+    
+  return rc;
+}
+
+int mutt_edit_message (CONTEXT *ctx, HEADER *hdr)
+{
+  int i, j;
+
+  if (hdr)
+    return edit_one_message (ctx, hdr);
+
+  
+  for (i = 0; i < ctx->vcount; i++)
+  {
+    j = ctx->v2r[i];
+    if (ctx->hdrs[j]->tagged)
+    {
+      if (edit_one_message (ctx, ctx->hdrs[j]) == -1)
+       return -1;
+    }
+  }
+
+  return 0;
+}
diff --git a/enter.c b/enter.c
new file mode 100644 (file)
index 0000000..9547ebb
--- /dev/null
+++ b/enter.c
@@ -0,0 +1,707 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 2000 Edmund Grimley Evans <edmundo@rano.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_menu.h"
+#include "mutt_curses.h"
+#include "keymap.h"
+#include "history.h"
+
+#include <string.h>
+
+/* redraw flags for mutt_enter_string() */
+enum
+{
+  M_REDRAW_INIT = 1,   /* go to end of line and redraw */
+  M_REDRAW_LINE                /* redraw entire line */
+};
+
+static int my_wcwidth (wchar_t wc)
+{
+  int n = wcwidth (wc);
+  if (IsWPrint (wc) && n > 0)
+    return n;
+  if (!(wc & ~0x7f))
+    return 2;
+  if (!(wc & ~0xffff))
+    return 6;
+  return 10;
+}
+
+/* combining mark / non-spacing character */
+#define COMB_CHAR(wc) (IsWPrint (wc) && !wcwidth (wc))
+
+static int my_wcswidth (const wchar_t *s, size_t n)
+{
+  int w = 0;
+  while (n--)
+    w += my_wcwidth (*s++);
+  return w;
+}
+
+static int my_addwch (wchar_t wc)
+{
+  int n = wcwidth (wc);
+  if (IsWPrint (wc) && n > 0)
+    return mutt_addwch (wc);
+  if (!(wc & ~0x7f))
+    return printw ("^%c", ((int)wc + 0x40) & 0x7f);
+  if (!(wc & ~0xffff))
+    return printw ("\\u%04x", (int)wc);
+  return printw ("\\u%08x", (int)wc);
+}
+
+static size_t width_ceiling (const wchar_t *s, size_t n, int w1)
+{
+  const wchar_t *s0 = s;
+  int w = 0;
+  for (; n; s++, n--)
+    if ((w += my_wcwidth (*s)) > w1)
+      break;
+  return s - s0;  
+}
+
+static void my_wcstombs (char *dest, size_t dlen, const wchar_t *src, size_t slen)
+{
+  mbstate_t st;
+  size_t k;
+
+  /* First convert directly into the destination buffer */
+  memset (&st, 0, sizeof (st));
+  for (; slen && dlen >= MB_LEN_MAX; dest += k, dlen -= k, src++, slen--)
+    if ((k = wcrtomb (dest, *src, &st)) == (size_t)(-1))
+      break;
+
+  /* If this works, we can stop now */
+  if (dlen >= MB_LEN_MAX) {
+    wcrtomb (dest, 0, &st);
+    return;
+  }
+
+  /* Otherwise convert any remaining data into a local buffer */
+  {
+    char buf[3 * MB_LEN_MAX];
+    char *p = buf;
+
+    for (; slen && p - buf < dlen; p += k, src++, slen--)
+      if ((k = wcrtomb (p, *src, &st)) == (size_t)(-1))
+       break;
+    p += wcrtomb (p, 0, &st);
+
+    /* If it fits into the destination buffer, we can stop now */
+    if (p - buf <= dlen) {
+      memcpy (dest, buf, p - buf);
+      return;
+    }
+
+    /* Otherwise we truncate the string in an ugly fashion */
+    memcpy (dest, buf, dlen);
+    dest[dlen - 1] = '\0'; /* assume original dlen > 0 */
+  }
+}
+
+size_t my_mbstowcs (wchar_t **pwbuf, size_t *pwbuflen, size_t i, char *buf)
+{
+  wchar_t wc;
+  mbstate_t st;
+  size_t k;
+  wchar_t *wbuf;
+  size_t wbuflen;
+
+  wbuf = *pwbuf, wbuflen = *pwbuflen;
+  memset (&st, 0, sizeof (st));
+  for (; (k = mbrtowc (&wc, buf, MB_LEN_MAX, &st)) &&
+        k != (size_t)(-1) && k != (size_t)(-2); buf += k)
+  {
+    if (i >= wbuflen)
+    {
+      wbuflen = i + 20;
+      safe_realloc (&wbuf, wbuflen * sizeof (*wbuf));
+    }
+    wbuf[i++] = wc;
+  }
+  *pwbuf = wbuf, *pwbuflen = wbuflen;
+  return i;
+}
+
+/*
+ * Replace part of the wchar_t buffer, from FROM to CURPOS, by BUF.
+ */
+
+static void replace_part (ENTER_STATE *state, size_t from, char *buf)
+{
+  /* Save the suffix */
+  size_t savelen = state->lastchar - state->curpos;
+  wchar_t *savebuf = safe_calloc (savelen, sizeof (wchar_t));
+  memcpy (savebuf, state->wbuf + state->curpos, savelen * sizeof (wchar_t));
+
+  /* Convert to wide characters */
+  state->curpos = my_mbstowcs (&state->wbuf, &state->wbuflen, from, buf);
+
+  /* Make space for suffix */
+  if (state->curpos + savelen > state->wbuflen)
+  {
+    state->wbuflen = state->curpos + savelen;
+    safe_realloc (&state->wbuf, state->wbuflen * sizeof (wchar_t));
+  }
+
+  /* Restore suffix */
+  memcpy (state->wbuf + state->curpos, savebuf, savelen * sizeof (wchar_t));
+  state->lastchar = state->curpos + savelen;
+
+  FREE (&savebuf);
+}
+
+/*
+ * Returns:
+ *     1 need to redraw the screen and call me again
+ *     0 if input was given
+ *     -1 if abort.
+ */
+
+int  mutt_enter_string(char *buf, size_t buflen, int y, int x, int flags)
+{
+  int rv;
+  ENTER_STATE *es = mutt_new_enter_state ();
+  rv = _mutt_enter_string (buf, buflen, y, x, flags, 0, NULL, NULL, es);
+  mutt_free_enter_state (&es);
+  return rv;
+}
+
+int _mutt_enter_string (char *buf, size_t buflen, int y, int x,
+                       int flags, int multiple, char ***files, int *numfiles,
+                       ENTER_STATE *state)
+{
+  int width = COLS - x - 1;
+  int redraw;
+  int pass = (flags & M_PASS);
+  int first = 1;
+  int ch, w, r;
+  size_t i;
+  wchar_t *tempbuf = 0;
+  size_t templen = 0;
+  history_class_t hclass;
+  wchar_t wc;
+  mbstate_t mbstate;
+
+  int rv = 0;
+  memset (&mbstate, 0, sizeof (mbstate));
+  
+  if (state->wbuf)
+  {
+    /* Coming back after return 1 */
+    redraw = M_REDRAW_LINE;
+  }
+  else
+  {
+    /* Initialise wbuf from buf */
+    state->wbuflen = 0;
+    state->lastchar = my_mbstowcs (&state->wbuf, &state->wbuflen, 0, buf);
+    redraw = M_REDRAW_INIT;
+  }
+
+  if (flags & (M_FILE | M_EFILE))
+    hclass = HC_FILE;
+  else if (flags & M_CMD)
+    hclass = HC_CMD;
+  else if (flags & M_ALIAS)
+    hclass = HC_ALIAS;
+  else if (flags & M_COMMAND)
+    hclass = HC_COMMAND;
+  else if (flags & M_PATTERN)
+    hclass = HC_PATTERN;
+  else 
+    hclass = HC_OTHER;
+    
+  for (;;)
+  {
+    if (redraw && !pass)
+    {
+      if (redraw == M_REDRAW_INIT)
+      {
+       /* Go to end of line */
+       state->curpos = state->lastchar;
+       state->begin = width_ceiling (state->wbuf, state->lastchar, my_wcswidth (state->wbuf, state->lastchar) - width + 1);
+      } 
+      if (state->curpos < state->begin ||
+         my_wcswidth (state->wbuf + state->begin, state->curpos - state->begin) >= width)
+       state->begin = width_ceiling (state->wbuf, state->lastchar, my_wcswidth (state->wbuf, state->curpos) - width / 2);
+      move (y, x);
+      w = 0;
+      for (i = state->begin; i < state->lastchar; i++)
+      {
+       w += my_wcwidth (state->wbuf[i]);
+       if (w > width)
+         break;
+       my_addwch (state->wbuf[i]);
+      }
+      clrtoeol ();
+      move (y, x + my_wcswidth (state->wbuf + state->begin, state->curpos - state->begin));
+    }
+    mutt_refresh ();
+
+    if ((ch = km_dokey (MENU_EDITOR)) == -1)
+    {
+      rv = -1; 
+      goto bye;
+    }
+
+    if (ch != OP_NULL)
+    {
+      first = 0;
+      if (ch != OP_EDITOR_COMPLETE)
+       state->tabs = 0;
+      redraw = M_REDRAW_LINE;
+      switch (ch)
+      {
+       case OP_EDITOR_HISTORY_UP:
+         state->curpos = state->lastchar;
+         replace_part (state, 0, mutt_history_prev (hclass));
+         redraw = M_REDRAW_INIT;
+         break;
+
+       case OP_EDITOR_HISTORY_DOWN:
+         state->curpos = state->lastchar;
+         replace_part (state, 0, mutt_history_next (hclass));
+         redraw = M_REDRAW_INIT;
+         break;
+
+       case OP_EDITOR_BACKSPACE:
+         if (state->curpos == 0)
+           BEEP ();
+         else
+         {
+           i = state->curpos;
+           while (i && COMB_CHAR (state->wbuf[i - 1]))
+             --i;
+           if (i)
+             --i;
+           memmove (state->wbuf + i, state->wbuf + state->curpos, (state->lastchar - state->curpos) * sizeof (wchar_t));
+           state->lastchar -= state->curpos - i;
+           state->curpos = i;
+         }
+         break;
+
+       case OP_EDITOR_BOL:
+         state->curpos = 0;
+         break;
+
+       case OP_EDITOR_EOL:
+         redraw= M_REDRAW_INIT;
+         break;
+
+       case OP_EDITOR_KILL_LINE:
+         state->curpos = state->lastchar = 0;
+         break;
+
+       case OP_EDITOR_KILL_EOL:
+         state->lastchar = state->curpos;
+         break;
+
+       case OP_EDITOR_BACKWARD_CHAR:
+         if (state->curpos == 0)
+           BEEP ();
+         else
+         {
+           while (state->curpos && COMB_CHAR (state->wbuf[state->curpos - 1]))
+             state->curpos--;
+           if (state->curpos)
+             state->curpos--;
+         }
+         break;
+
+       case OP_EDITOR_FORWARD_CHAR:
+         if (state->curpos == state->lastchar)
+           BEEP ();
+         else
+         {
+           ++state->curpos;
+           while (state->curpos < state->lastchar && COMB_CHAR (state->wbuf[state->curpos]))
+             ++state->curpos;
+         }
+         break;
+
+       case OP_EDITOR_BACKWARD_WORD:
+         if (state->curpos == 0)
+           BEEP ();
+         else
+         {
+           while (state->curpos && iswspace (state->wbuf[state->curpos - 1]))
+             --state->curpos;
+           while (state->curpos && !iswspace (state->wbuf[state->curpos - 1]))
+             --state->curpos;
+         }
+         break;
+
+       case OP_EDITOR_FORWARD_WORD:
+         if (state->curpos == state->lastchar)
+           BEEP ();
+         else
+         {
+           while (state->curpos < state->lastchar && iswspace (state->wbuf[state->curpos]))
+             ++state->curpos;
+           while (state->curpos < state->lastchar && !iswspace (state->wbuf[state->curpos]))
+             ++state->curpos;
+         }
+         break;
+
+       case OP_EDITOR_CAPITALIZE_WORD:
+       case OP_EDITOR_UPCASE_WORD:
+       case OP_EDITOR_DOWNCASE_WORD:
+         if (state->curpos == state->lastchar)
+         {
+           BEEP ();
+           break;
+         }
+         while (state->curpos && !iswspace (state->wbuf[state->curpos]))
+           --state->curpos;
+         while (state->curpos < state->lastchar && iswspace (state->wbuf[state->curpos]))
+           ++state->curpos;
+         while (state->curpos < state->lastchar && !iswspace (state->wbuf[state->curpos]))
+         {
+           if (ch == OP_EDITOR_DOWNCASE_WORD)
+             state->wbuf[state->curpos] = towlower (state->wbuf[state->curpos]);
+           else
+           {
+             state->wbuf[state->curpos] = towupper (state->wbuf[state->curpos]);
+             if (ch == OP_EDITOR_CAPITALIZE_WORD)
+               ch = OP_EDITOR_DOWNCASE_WORD;
+           }
+           state->curpos++;
+         }
+         break;
+
+       case OP_EDITOR_DELETE_CHAR:
+         if (state->curpos == state->lastchar)
+           BEEP ();
+         else
+         {
+           i = state->curpos;
+           while (i < state->lastchar && COMB_CHAR (state->wbuf[i]))
+             ++i;
+           if (i < state->lastchar)
+             ++i;
+           while (i < state->lastchar && COMB_CHAR (state->wbuf[i]))
+             ++i;
+           memmove (state->wbuf + state->curpos, state->wbuf + i, (state->lastchar - i) * sizeof (wchar_t));
+           state->lastchar -= i - state->curpos;
+         }
+         break;
+
+       case OP_EDITOR_KILL_WORD:
+         /* delete to begining of word */
+         if (state->curpos != 0)
+         {
+           i = state->curpos;
+           while (i && iswspace (state->wbuf[i - 1]))
+             --i;
+           if (i)
+           {
+             if (iswalnum (state->wbuf[i - 1]))
+             {
+               for (--i; i && iswalnum (state->wbuf[i - 1]); i--)
+                 ;
+             }
+             else
+               --i;
+           }
+           memmove (state->wbuf + i, state->wbuf + state->curpos,
+                    (state->lastchar - state->curpos) * sizeof (wchar_t));
+           state->lastchar += i - state->curpos;
+           state->curpos = i;
+         }
+         break;
+
+       case OP_EDITOR_KILL_EOW:
+         /* delete to end of word */
+         for (i = state->curpos;
+              i < state->lastchar && iswspace (state->wbuf[i]); i++)
+           ;
+         for (; i < state->lastchar && !iswspace (state->wbuf[i]); i++)
+           ;
+         memmove (state->wbuf + state->curpos, state->wbuf + i,
+                  (state->lastchar - i) * sizeof (wchar_t));
+         state->lastchar += state->curpos - i;
+         break;
+
+       case OP_EDITOR_BUFFY_CYCLE:
+         if (flags & M_EFILE)
+         {
+           first = 1; /* clear input if user types a real key later */
+           my_wcstombs (buf, buflen, state->wbuf, state->curpos);
+           mutt_buffy (buf, buflen);
+           state->curpos = state->lastchar = my_mbstowcs (&state->wbuf, &state->wbuflen, 0, buf);
+           break;
+         }
+         else if (!(flags & M_FILE))
+           goto self_insert;
+         /* fall through to completion routine (M_FILE) */
+
+       case OP_EDITOR_COMPLETE:
+         state->tabs++;
+         if (flags & M_CMD)
+         {
+           for (i = state->curpos; i && state->wbuf[i-1] != ' '; i--)
+             ;
+           my_wcstombs (buf, buflen, state->wbuf + i, state->curpos - i);
+           if (tempbuf && templen == state->lastchar - i &&
+               !memcmp (tempbuf, state->wbuf + i, (state->lastchar - i) * sizeof (wchar_t)))
+           {
+             mutt_select_file (buf, buflen, (flags & M_EFILE) ? M_SEL_FOLDER : 0);
+             set_option (OPTNEEDREDRAW);
+             if (*buf)
+               replace_part (state, i, buf);
+             rv = 1; 
+             goto bye;
+           }
+           if (!mutt_complete (buf, buflen))
+           {
+             templen = state->lastchar - i;
+             safe_realloc (&tempbuf, templen * sizeof (wchar_t));
+           }
+           else
+             BEEP ();
+
+           replace_part (state, i, buf);
+         }
+         else if (flags & M_ALIAS)
+         {
+           /* invoke the alias-menu to get more addresses */
+           for (i = state->curpos; i && state->wbuf[i-1] != ',' && 
+                state->wbuf[i-1] != ':'; i--)
+             ;
+           for (; i < state->lastchar && state->wbuf[i] == ' '; i++)
+             ;
+           my_wcstombs (buf, buflen, state->wbuf + i, state->curpos - i);
+           r = mutt_alias_complete (buf, buflen);
+           replace_part (state, i, buf);
+           if (!r)
+           {
+             rv = 1;
+             goto bye;
+           }
+           break;
+         }
+         else if (flags & M_COMMAND)
+         {
+           my_wcstombs (buf, buflen, state->wbuf, state->curpos);
+           i = strlen (buf);
+           if (i && buf[i - 1] == '=' &&
+               mutt_var_value_complete (buf, buflen, i))
+             state->tabs = 0;
+           else if (!mutt_command_complete (buf, buflen, i, state->tabs))
+             BEEP ();
+           replace_part (state, 0, buf);
+         }
+         else if (flags & (M_FILE | M_EFILE))
+         {
+           my_wcstombs (buf, buflen, state->wbuf, state->curpos);
+
+           /* see if the path has changed from the last time */
+           if ((!tempbuf && !state->lastchar) || (tempbuf && templen == state->lastchar &&
+               !memcmp (tempbuf, state->wbuf, state->lastchar * sizeof (wchar_t))))
+           {
+             _mutt_select_file (buf, buflen, 
+                                ((flags & M_EFILE) ? M_SEL_FOLDER : 0) | (multiple ? M_SEL_MULTI : 0), 
+                                files, numfiles);
+             set_option (OPTNEEDREDRAW);
+             if (*buf)
+             {
+               mutt_pretty_mailbox (buf);
+               if (!pass)
+                 mutt_history_add (hclass, buf);
+               rv = 0;
+               goto bye;
+             }
+
+             /* file selection cancelled */
+             rv = 1;
+             goto bye;
+           }
+
+           if (!mutt_complete (buf, buflen))
+           {
+             templen = state->lastchar;
+             safe_realloc (&tempbuf, templen * sizeof (wchar_t));
+             memcpy (tempbuf, state->wbuf, templen * sizeof (wchar_t));
+           }
+           else
+             BEEP (); /* let the user know that nothing matched */
+           replace_part (state, 0, buf);
+         }
+         else
+           goto self_insert;
+         break;
+
+       case OP_EDITOR_COMPLETE_QUERY:
+         if (flags & M_ALIAS)
+         {
+           /* invoke the query-menu to get more addresses */
+           if ((i = state->curpos))
+           {
+             for (; i && state->wbuf[i - 1] != ','; i--)
+               ;
+             for (; i < state->curpos && state->wbuf[i] == ' '; i++)
+               ;
+           }
+
+           my_wcstombs (buf, buflen, state->wbuf + i, state->curpos - i);
+           mutt_query_complete (buf, buflen);
+           replace_part (state, i, buf);
+
+           rv = 1; 
+           goto bye;
+         }
+         else
+           goto self_insert;
+
+       case OP_EDITOR_QUOTE_CHAR:
+         {
+           event_t event;
+           /*ADDCH (LastKey);*/
+           event = mutt_getch ();
+           if (event.ch != -1)
+           {
+             LastKey = event.ch;
+             goto self_insert;
+           }
+         }
+
+       case OP_EDITOR_TRANSPOSE_CHARS:
+         if (state->lastchar < 2)
+           BEEP ();
+         else
+       {
+           wchar_t t;
+
+           if (state->curpos == 0)
+             state->curpos = 2;
+           else if (state->curpos < state->lastchar)
+             ++state->curpos;
+
+           t = state->wbuf[state->curpos - 2];
+           state->wbuf[state->curpos - 2] = state->wbuf[state->curpos - 1];
+           state->wbuf[state->curpos - 1] = t;
+         }
+         break;
+
+       default:
+         BEEP ();
+      }
+    }
+    else
+    {
+      
+self_insert:
+
+      state->tabs = 0;
+      /* use the raw keypress */
+      ch = LastKey;
+
+#ifdef KEY_ENTER
+      /* treat ENTER the same as RETURN */
+      if (ch == KEY_ENTER)
+       ch = '\r';
+#endif
+
+      /* quietly ignore all other function keys */
+      if (ch & ~0xff)
+       continue;
+
+      /* gather the octets into a wide character */
+      {
+       char c;
+       size_t k;
+
+       c = ch;
+       k = mbrtowc (&wc, &c, 1, &mbstate);
+       if (k == (size_t)(-2))
+         continue;
+       else if (k && k != 1)
+       {
+         memset (&mbstate, 0, sizeof (mbstate));
+         continue;
+       }
+      }
+
+      if (first && (flags & M_CLEAR))
+      {
+       first = 0;
+       if (IsWPrint (wc)) /* why? */
+         state->curpos = state->lastchar = 0;
+      }
+
+      if (wc == '\r' || wc == '\n')
+      {
+       /* Convert from wide characters */
+       my_wcstombs (buf, buflen, state->wbuf, state->lastchar);
+       if (!pass)
+         mutt_history_add (hclass, buf);
+
+       if (multiple)
+       {
+         char **tfiles;
+         *numfiles = 1;
+         tfiles = safe_calloc (*numfiles, sizeof (char *));
+         mutt_expand_path (buf, buflen);
+         tfiles[0] = safe_strdup (buf);
+         *files = tfiles;
+       }
+       rv = 0; 
+       goto bye;
+      }
+      else if (wc && (wc < ' ' || IsWPrint (wc))) /* why? */
+      {
+       if (state->lastchar >= state->wbuflen)
+       {
+         state->wbuflen = state->lastchar + 20;
+         safe_realloc (&state->wbuf, state->wbuflen * sizeof (wchar_t));
+       }
+       memmove (state->wbuf + state->curpos + 1, state->wbuf + state->curpos, (state->lastchar - state->curpos) * sizeof (wchar_t));
+       state->wbuf[state->curpos++] = wc;
+       state->lastchar++;
+      }
+      else
+      {
+       mutt_flushinp ();
+       BEEP ();
+      }
+    }
+  }
+  
+  bye:
+  
+  FREE (&tempbuf);
+  return rv;
+}
+
+void mutt_free_enter_state (ENTER_STATE **esp)
+{
+  if (!esp) return;
+  
+  FREE (&(*esp)->wbuf);
+  FREE (esp);
+}
+
+/*
+ * TODO:
+ * very narrow screen might crash it
+ * sort out the input side
+ * unprintable chars
+ */
diff --git a/extlib.c b/extlib.c
new file mode 100644 (file)
index 0000000..04692a9
--- /dev/null
+++ b/extlib.c
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+/* 
+ * Some simple dummies, so we can reuse the routines from
+ * lib.c in external programs.
+ */
+
+#define WHERE
+#define _EXTLIB_C
+
+#include <stdlib.h>
+#include "lib.h"
+
+void (*mutt_error) (const char *, ...) = mutt_nocurses_error;
+
+void mutt_exit (int code)
+{
+  exit (code);
+}
+
diff --git a/filter.c b/filter.c
new file mode 100644 (file)
index 0000000..056fbdd
--- /dev/null
+++ b/filter.c
@@ -0,0 +1,179 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins.
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/wait.h>
+
+/* Invokes a commmand on a pipe and optionally connects its stdin and stdout
+ * to the specified handles.
+ */
+pid_t
+mutt_create_filter_fd (const char *cmd, FILE **in, FILE **out, FILE **err,
+                      int fdin, int fdout, int fderr)
+{
+  int pin[2], pout[2], perr[2], thepid;
+
+  if (in)
+  {
+    *in = 0;
+    if (pipe (pin) == -1)
+      return (-1);
+  }
+
+  if (out)
+  {
+    *out = 0;
+    if (pipe (pout) == -1)
+    {
+      if (in)
+      {
+       close (pin[0]);
+       close (pin[1]);
+      }
+      return (-1);
+    }
+  }
+
+  if (err)
+  {
+    *err = 0;
+    if (pipe (perr) == -1)
+    {
+      if (in)
+      {
+       close (pin[0]);
+       close (pin[1]);
+      }
+      if (out)
+      {
+       close (pout[0]);
+       close (pout[1]);
+      }
+      return (-1);
+    }
+  }
+
+  mutt_block_signals_system ();
+
+  if ((thepid = fork ()) == 0)
+  {
+    mutt_unblock_signals_system (0);
+
+    if (in)
+    {
+      close (pin[1]);
+      dup2 (pin[0], 0);
+      close (pin[0]);
+    }
+    else if (fdin != -1)
+    {
+      dup2 (fdin, 0);
+      close (fdin);
+    }
+
+    if (out)
+    {
+      close (pout[0]);
+      dup2 (pout[1], 1);
+      close (pout[1]);
+    }
+    else if (fdout != -1)
+    {
+      dup2 (fdout, 1);
+      close (fdout);
+    }
+
+    if (err)
+    {
+      close (perr[0]);
+      dup2 (perr[1], 2);
+      close (perr[1]);
+    }
+    else if (fderr != -1)
+    {
+      dup2 (fderr, 2);
+      close (fderr);
+    }
+
+    execl (EXECSHELL, "sh", "-c", cmd, NULL);
+    _exit (127);
+  }
+  else if (thepid == -1)
+  {
+    mutt_unblock_signals_system (1);
+
+    if (in)
+    {
+      close (pin[0]);
+      close (pin[1]);
+    }
+    
+    if (out)
+    {
+      close (pout[0]);
+      close (pout[1]);
+    }
+
+    if (err)
+    {
+      close (perr[0]);
+      close (perr[1]);
+    }
+
+    return (-1);
+  }
+
+  if (out)
+  {
+    close (pout[1]);
+    *out = fdopen (pout[0], "r");
+  }
+
+  if (in)
+  {
+    close (pin[0]);
+    *in = fdopen (pin[1], "w");
+  }
+
+  if (err)
+  {
+    close (perr[1]);
+    *err = fdopen (perr[0], "r");
+  }
+
+  return (thepid);
+}
+
+pid_t mutt_create_filter (const char *s, FILE **in, FILE **out, FILE **err)
+{
+  return (mutt_create_filter_fd (s, in, out, err, -1, -1, -1));
+}
+
+int mutt_wait_filter (pid_t pid)
+{
+  int rc;
+  
+  waitpid (pid, &rc, 0);
+  mutt_unblock_signals_system (1);
+  rc = WIFEXITED (rc) ? WEXITSTATUS (rc) : -1;
+  
+  return rc;
+}
diff --git a/flags.c b/flags.c
new file mode 100644 (file)
index 0000000..e46ee8a
--- /dev/null
+++ b/flags.c
@@ -0,0 +1,417 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "sort.h"
+#include "mx.h"
+
+#ifdef USE_IMAP
+#include "imap_private.h"
+#endif
+
+void _mutt_set_flag (CONTEXT *ctx, HEADER *h, int flag, int bf, int upd_ctx)
+{
+  int changed = h->changed;
+  int deleted = ctx->deleted;
+  int tagged = ctx->tagged;
+
+  if (ctx->readonly && flag != M_TAG)
+    return; /* don't modify anything if we are read-only */
+
+  switch (flag)
+  {
+    case M_DELETE:
+
+#ifdef USE_IMAP
+       if (ctx && ctx->magic == M_IMAP)
+               if (mutt_bit_isset (((IMAP_DATA *)ctx->data)->capabilities, ACL) \
+               && !mutt_bit_isset(((IMAP_DATA *)ctx->data)->rights,IMAP_ACL_DELETE))
+                       return;
+#endif
+
+      if (bf)
+      {
+       if (!h->deleted && !ctx->readonly)
+       {
+         h->deleted = 1;
+         if (upd_ctx) ctx->deleted++;
+#ifdef USE_IMAP
+          /* deleted messages aren't treated as changed elsewhere so that the
+           * purge-on-sync option works correctly. This isn't applicable here */
+          if (ctx && ctx->magic == M_IMAP)
+          {
+            h->changed = 1;
+           if (upd_ctx) ctx->changed = 1;
+          }
+#endif
+       }
+      }
+      else if (h->deleted)
+      {
+       h->deleted = 0;
+       if (upd_ctx)
+       {
+         ctx->deleted--;
+         if (h->appended)
+           ctx->appended--;
+       }
+       h->appended = 0; /* when undeleting, also reset the appended flag */
+#ifdef USE_IMAP
+        /* see my comment above */
+       if (ctx->magic == M_IMAP) 
+       {
+         h->changed = 1;
+         if (upd_ctx) ctx->changed = 1;
+       }
+#endif
+       /* 
+        * If the user undeletes a message which is marked as
+        * "trash" in the maildir folder on disk, the folder has
+        * been changed, and is marked accordingly.  However, we do
+        * _not_ mark the message itself changed, because trashing
+        * is checked in specific code in the maildir folder
+        * driver. 
+        */
+       if (ctx->magic == M_MAILDIR && upd_ctx && h->trash)
+         ctx->changed = 1;
+      }
+      break;
+
+    case M_APPENDED:
+      if (bf)
+      {
+       if (!h->appended)
+       {
+         h->appended = 1;
+         if (upd_ctx) ctx->appended++;
+       }
+      }
+      break;
+
+    case M_PURGED:
+      if (bf)
+      {
+       if (!h->purged)
+         h->purged = 1;
+      }
+      else if (h->purged)
+       h->purged = 0;
+      break;
+
+    case M_NEW:
+
+#ifdef USE_IMAP
+       if (ctx && ctx->magic == M_IMAP)
+               if (mutt_bit_isset (((IMAP_DATA *)ctx->data)->capabilities, ACL) \
+               && !mutt_bit_isset(((IMAP_DATA *)ctx->data)->rights,IMAP_ACL_SEEN))
+                       return;
+#endif
+
+      if (bf)
+      {
+       if (h->read || h->old)
+       {
+         h->old = 0;
+         if (upd_ctx) ctx->new++;
+         if (h->read)
+         {
+           h->read = 0;
+           if (upd_ctx) ctx->unread++;
+         }
+         h->changed = 1;
+         if (upd_ctx) ctx->changed = 1;
+       }
+      }
+      else if (!h->read)
+      {
+       if (!h->old)
+         if (upd_ctx) ctx->new--;
+       h->read = 1;
+       if (upd_ctx) ctx->unread--;
+       h->changed = 1;
+       if (upd_ctx) ctx->changed = 1;
+      }
+      break;
+
+    case M_OLD:
+
+#ifdef USE_IMAP
+       if (ctx && ctx->magic == M_IMAP)
+               if (mutt_bit_isset (((IMAP_DATA *)ctx->data)->capabilities, ACL) \
+               && !mutt_bit_isset(((IMAP_DATA *)ctx->data)->rights,IMAP_ACL_SEEN))
+                       return;
+#endif
+
+      if (bf)
+      {
+       if (!h->old)
+       {
+         h->old = 1;
+         if (!h->read)
+           if (upd_ctx) ctx->new--;
+         h->changed = 1;
+         if (upd_ctx) ctx->changed = 1;
+       }
+      }
+      else if (h->old)
+      {
+       h->old = 0;
+       if (!h->read)
+         if (upd_ctx) ctx->new++;
+       h->changed = 1;
+       if (upd_ctx) ctx->changed = 1;
+      }
+      break;
+
+    case M_READ:
+
+#ifdef USE_IMAP
+       if (ctx && ctx->magic == M_IMAP)
+               if (mutt_bit_isset (((IMAP_DATA *)ctx->data)->capabilities, ACL) \
+               && !mutt_bit_isset(((IMAP_DATA *)ctx->data)->rights,IMAP_ACL_SEEN))
+                       return;
+#endif
+
+      if (bf)
+      {
+       if (!h->read)
+       {
+         h->read = 1;
+         if (upd_ctx) ctx->unread--;
+         if (!h->old)
+           if (upd_ctx) ctx->new--;
+         h->changed = 1;
+         if (upd_ctx) ctx->changed = 1;
+       }
+      }
+      else if (h->read)
+      {
+       h->read = 0;
+       if (upd_ctx) ctx->unread++;
+       if (!h->old)
+         if (upd_ctx) ctx->new++;
+       h->changed = 1;
+       if (upd_ctx) ctx->changed = 1;
+      }
+      break;
+
+    case M_REPLIED:
+
+#ifdef USE_IMAP
+       if (ctx && ctx->magic == M_IMAP)
+               if (mutt_bit_isset (((IMAP_DATA *)ctx->data)->capabilities, ACL) \
+               && !mutt_bit_isset(((IMAP_DATA *)ctx->data)->rights,IMAP_ACL_WRITE))
+                       return;
+#endif
+
+      if (bf)
+      {
+       if (!h->replied)
+       {
+         h->replied = 1;
+         if (!h->read)
+         {
+           h->read = 1;
+           if (upd_ctx) ctx->unread--;
+           if (!h->old)
+             if (upd_ctx) ctx->new--;
+         }
+         h->changed = 1;
+         if (upd_ctx) ctx->changed = 1;
+       }
+      }
+      else if (h->replied)
+      {
+       h->replied = 0;
+       h->changed = 1;
+       if (upd_ctx) ctx->changed = 1;
+      }
+      break;
+
+    case M_FLAG:
+
+#ifdef USE_IMAP
+       if (ctx && ctx->magic == M_IMAP)
+               if (mutt_bit_isset (((IMAP_DATA *)ctx->data)->capabilities, ACL) \
+               && !mutt_bit_isset(((IMAP_DATA *)ctx->data)->rights,IMAP_ACL_WRITE))
+                       return;
+#endif
+
+      if (bf)
+      {
+       if (!h->flagged)
+       {
+         h->flagged = bf;
+         if (upd_ctx) ctx->flagged++;
+         h->changed = 1;
+         if (upd_ctx) ctx->changed = 1;
+       }
+      }
+      else if (h->flagged)
+      {
+       h->flagged = 0;
+       if (upd_ctx) ctx->flagged--;
+       h->changed = 1;
+       if (upd_ctx) ctx->changed = 1;
+      }
+      break;
+
+    case M_TAG:
+      if (bf)
+      {
+       if (!h->tagged)
+       {
+         h->tagged = 1;
+         if (upd_ctx) ctx->tagged++;
+       }
+      }
+      else if (h->tagged)
+      {
+       h->tagged = 0;
+       if (upd_ctx) ctx->tagged--;
+      }
+      break;
+  }
+
+  mutt_set_header_color(ctx, h);
+
+  /* if the message status has changed, we need to invalidate the cached
+   * search results so that any future search will match the current status
+   * of this message and not what it was at the time it was last searched.
+   */
+  if (h->searched && (changed != h->changed || deleted != ctx->deleted || tagged != ctx->tagged))
+    h->searched = 0;
+}
+
+void mutt_tag_set_flag (int flag, int bf)
+{
+  int j;
+
+  for (j = 0; j < Context->vcount; j++)
+    if (Context->hdrs[Context->v2r[j]]->tagged)
+      mutt_set_flag (Context, Context->hdrs[Context->v2r[j]], flag, bf);
+}
+int mutt_thread_set_flag (HEADER *hdr, int flag, int bf, int subthread)
+{
+  THREAD *start, *cur = hdr->thread;
+  
+  if ((Sort & SORT_MASK) != SORT_THREADS)
+  {
+    mutt_error _("Threading is not enabled.");
+    return (-1);
+  }
+
+  if (!subthread)
+    while (cur->parent)
+      cur = cur->parent;
+  start = cur;
+  
+  if (cur->message)
+    mutt_set_flag (Context, cur->message, flag, bf);
+
+  if ((cur = cur->child) == NULL)
+    return (0);
+
+  FOREVER
+  {
+    if (cur->message)
+      mutt_set_flag (Context, cur->message, flag, bf);
+
+    if (cur->child)
+      cur = cur->child;
+    else if (cur->next)
+      cur = cur->next;
+    else 
+    {
+      while (!cur->next)
+      {
+       cur = cur->parent;
+       if (cur == start)
+         return (0);
+      }
+      cur = cur->next;
+    }
+  }
+  /* not reached */
+}
+
+int mutt_change_flag (HEADER *h, int bf)
+{
+  int i, flag;
+  event_t event;
+
+  mvprintw (LINES - 1, 0, "%s? (D/N/O/r/*/!): ", bf ? _("Set flag") : _("Clear flag"));
+  clrtoeol ();
+
+  event = mutt_getch();
+  i = event.ch;
+  if (i == -1)
+  {
+    CLEARLINE (LINES-1);
+    return (-1);
+  }
+
+  CLEARLINE (LINES-1);
+
+  switch (i)
+  {
+    case 'd':
+    case 'D':
+      flag = M_DELETE;
+      break;
+
+    case 'N':
+    case 'n':
+      flag = M_NEW;
+      break;
+
+    case 'o':
+    case 'O':
+      if (h)
+       mutt_set_flag (Context, h, M_READ, !bf);
+      else
+       mutt_tag_set_flag (M_READ, !bf);
+      flag = M_OLD;
+      break;
+
+    case 'r':
+    case 'R':
+      flag = M_REPLIED;
+      break;
+
+    case '*':
+      flag = M_TAG;
+      break;
+
+    case '!':
+      flag = M_FLAG;
+      break;
+
+    default:
+      BEEP ();
+      return (-1);
+  }
+
+  if (h)
+    mutt_set_flag (Context, h, flag, bf);
+  else
+    mutt_tag_set_flag (flag, bf);
+
+  return 0;
+}
diff --git a/flea b/flea
new file mode 100755 (executable)
index 0000000..c4c056f
--- /dev/null
+++ b/flea
@@ -0,0 +1,336 @@
+#!/bin/sh
+
+#
+#     File a bug against the Mutt mail user agent.
+#
+
+# 
+#     $Id: muttbug.sh.in,v 3.6 2003/09/20 06:24:10 roessler Exp $
+#
+
+#
+#     Copyright (c) 2000 Thomas Roessler <roessler@guug.de>
+#
+#
+#     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.
+#
+
+SUBMIT="submit@bugs.guug.de"
+DEBIAN_SUBMIT="submit@bugs.debian.org"
+
+prefix=/usr/local
+
+DEBUGGER=/usr/bin/gdb
+SENDMAIL=/sw/sbin/sendmail
+sysconfdir=${prefix}/etc
+pkgdatadir=@pkgdatadir@
+
+include_file ()
+{
+       echo
+       echo "--- Begin $1"
+       sed -e 's/^-/- -/' $1 | egrep -v '^[    ]*(#|$)'
+       echo "--- End $1"
+       echo
+}
+
+debug_gdb ()
+{
+       cat << EOF > $SCRATCH/gdb.rc
+bt
+list
+quit
+EOF
+       $DEBUGGER -n -x $SCRATCH/gdb.rc -c $CORE mutt
+}
+
+debug_dbx ()
+{
+       cat << EOF > $SCRATCH/dbx.rc
+where
+list
+quit
+EOF
+       $DEBUGGER -s $SCRATCH/dbx.rc mutt $CORE
+}
+
+debug_sdb ()
+{
+       cat << EOF > $SCRATCH/sdb.rc
+t
+w
+q
+EOF
+       $DEBUGGER mutt $CORE < $SCRATCH/sdb.rc
+}
+
+case `echo -n` in
+"") n=-n; c=   ;;
+ *) n=; c='\c' ;;
+esac
+
+exec > /dev/tty
+exec < /dev/tty
+
+SCRATCH=${TMPDIR-/tmp}/`basename $0`.`hostname`.$$
+
+mkdir ${SCRATCH} || \
+{ 
+       echo "`basename $0`: Can't create temporary directory." >& 2 ; 
+       exit 1 ; 
+}
+
+trap "rm -r -f ${SCRATCH} ; trap '' 0 ; exit" 0 1 2
+
+TEMPLATE=${SCRATCH}/template.txt
+
+if test -z "$EMAIL" ; then
+       EMAIL="`mutt -Q from 2> /dev/null | sed -e 's/^from=.\(.*\).$/\1/'`"
+fi
+
+echo "Please enter your e-mail address [$EMAIL]:"
+echo $n "> $c"
+read EMAILTMP
+
+if test -n "$EMAILTMP" ; then
+       EMAIL="$EMAILTMP"
+fi
+
+echo "Please enter a one-line description of the problem you experience:"
+echo $n "> $c"
+read SUBJECT
+
+cat <<EOF  
+What should the severity for this bug report be?
+
+       0) Feature request, or maybe a bug which is very difficult to
+       fix due to major design considerations.
+
+       1) The package fails to perform correctly in some conditions,
+       or on some systems, or fails to comply with current policy
+       documents. Most bugs are in this category.
+
+       2) This bug makes this version of the package unsuitable for
+       a stable release.
+
+       3) Dangerous bug. Makes the package in question unusable by
+       anyone or mostly so, or causes data loss, or introduces a
+       security hole allowing access to the accounts of users who
+       use the package.
+
+       4) Critical bug. Makes unrelated software on the system (or
+       the whole system) break, or causes serious data loss, or
+       introduces a security hole on systems where you install the
+       package.
+
+EOF
+echo $n "Severity? [01234] $c"
+read severity
+case "$severity" in
+0|[Ww]) severity=wishlist  ;;
+2|[Ii]) severity=important ;;
+3|[Gg]) severity=grave     ;;
+4|[Cc]) severity=critical  ;;
+     *) severity=normal    ;;
+esac
+
+if test -x $DEBUGGER ; then
+       test -f core && CORE=core
+       echo "If mutt has crashed, it may have saved some program state in"
+       echo "a file named core.  We can include this information with the bug"
+       echo "report if you wish so."
+       echo "Do you want to include information gathered from a core file?"
+       echo "If yes, please enter the path - otherwise just say no: [$CORE]"
+       echo $n "> $c"
+       read _CORE
+       test "$_CORE" && CORE="$_CORE"
+fi
+
+echo $n "Do you want to include your personal mutt configuration files? [Y|n] $c"
+read personal
+case "$personal" in
+[nN]*)  personal=no  ;;
+    *)  personal=yes ;;
+esac
+
+echo $n "Do you want to include your system's global mutt configuration file? [Y|n] $c"
+read global
+case "$global" in
+[nN]*)  global=no  ;;
+    *) global=yes ;;
+esac
+
+if test -f /etc/debian_version ; then
+       DEBIAN=yes
+       echo $n "Checking whether mutt has been installed as a package... $c"
+       DEBIANVERSION="`dpkg -l mutt | grep '^[ih]' | awk '{print $3}'`" 2> /dev/null
+       if test "$DEBIANVERSION" ; then
+               DPKG=yes
+       else
+               DPKG=no
+               unset DEBIANVERSION
+       fi
+       echo "$DPKG"
+       echo $n "File this bug with Debian? [Y|n] $c"
+       read DPKG
+       case "$DPKG" in
+       [nN])   DPKG=no ;;
+       *)      DPKG=yes ;;
+       esac
+else
+       DEBIAN=no
+       DPKG=no
+fi
+
+if rpm -q mutt > /dev/null 2> /dev/null ; then
+       echo "Mutt seems to come from an RPM package."
+       RPMVERSION="`rpm -q mutt`"
+       RPMPACKAGER="`rpm -q -i mutt | sed -n -e 's/^Packager *: *//p'`"
+fi
+
+MUTTVERSION="`mutt -v | awk '{print $2; exit; }'`"
+test "$DPKG" = "yes" && SUBMIT="$SUBMIT, $DEBIAN_SUBMIT"
+
+exec > ${TEMPLATE}
+
+test "$EMAIL"        && echo "From: $EMAIL"
+test "$REPLYTO"      && echo "Reply-To: $REPLYTO"
+test "$ORGANIZATION" && echo "Organization: $ORGANIZATION"
+
+echo "Subject: mutt-$MUTTVERSION: $SUBJECT"
+echo "To: $SUBMIT"
+test "$EMAIL"       && echo "Bcc: ${EMAIL}"
+echo
+echo "Package: mutt"
+echo "Version: ${DEBIANVERSION-${RPMVERSION-$MUTTVERSION}}"
+echo "Severity: $severity"
+echo 
+echo "-- Please type your report below this line"
+echo
+echo
+echo
+
+if test "$DEBIAN" = "yes" ; then
+       echo "Obtaining Debian-specific information..." > /dev/tty
+       bug -p -s dummy mutt < /dev/null 2> /dev/null |        \
+               sed -n -e "/^-- System Information/,/^---/p" | \
+               grep -v '^---'
+else
+       echo "-- System Information"
+       echo "System Version: `uname -a`"
+       test -z "$RPMPACKAGER" || echo "RPM Packager: $RPMPACKAGER";
+       test -f /etc/redhat-release && echo "RedHat Release: `cat /etc/redhat-release`"
+       test -f /etc/SuSE-release && echo "SuSE Release: `sed 1q /etc/SuSE-release`"
+       # Please provide more of these if you have any.
+fi
+
+echo 
+echo "-- Build environment information"
+echo
+echo "(Note: This is the build environment installed on the system"
+echo "muttbug is run on.  Information may or may not match the environment"
+echo "used to build mutt.)"
+echo
+echo "- gcc version information"
+echo "gcc"
+gcc -v 2>&1
+echo
+echo "- CFLAGS"
+echo -Wall -pedantic -g -O2
+
+
+echo
+echo "-- Mutt Version Information"
+echo
+mutt -v
+
+if test "$CORE" && test -f "$CORE" ; then
+       echo 
+       echo "-- Core Dump Analysis Output"
+       echo
+
+       case "$DEBUGGER" in
+               *sdb) debug_sdb $CORE ;;
+               *dbx) debug_dbx $CORE ;;
+               *gdb) debug_gdb $CORE ;;
+       esac
+       
+       echo
+fi
+
+if test "$personal" = "yes" ; then
+       CANDIDATES=".muttrc-${MUTTVERSION} .muttrc .mutt/muttrc-${MUTTVERSION} .mutt/muttrc"
+       MATCHED="none"
+       for f in $CANDIDATES; do
+               if test -f "${HOME}/$f" ; then
+                       MATCHED="${HOME}/$f"
+                       break
+               fi
+       done
+       
+       if test "$MATCHED" = "none" ; then
+               echo "Warning: Can't find your personal .muttrc." >&2
+       else
+               include_file $MATCHED
+       fi
+fi
+
+
+if test "$global" = "yes" ; then
+       CANDIDATES="Muttrc-${MUTTVERSION} Muttrc"
+       DIRECTORIES="$sysconfdir $pkgdatadir"
+       MATCHED="none"
+       for d in $DIRECTORIES ; do
+               for f in $CANDIDATES; do
+                       if test -f $d/$f ; then
+                               MATCHED="$d/$f"
+                               break
+                       fi
+               done
+               test "$MATCHED" = "none" || break
+       done
+       
+       if test "$MATCHED" = "none" ; then
+               echo "Warning: Can't find global Muttrc." >&2
+       else
+               include_file $MATCHED
+       fi
+fi
+
+exec > /dev/tty
+
+cp $TEMPLATE $SCRATCH/mutt-bug.txt
+
+input="e"
+while : ; do
+       if test "$input" = "e" ; then
+               ${VISUAL-${EDITOR-vi}} $SCRATCH/mutt-bug.txt
+               if cmp $SCRATCH/mutt-bug.txt ${TEMPLATE} > /dev/null ; then
+                       echo "Warning: Bug report was not modified!"
+               fi
+       fi
+       
+       echo $n "Submit, Edit, View, Quit? [S|e|v|q] $c"
+       read _input
+       input="`echo $_input | tr EVSQ evsq`"
+       case $input in
+       e*)     ;;
+       v*)     ${PAGER-more} $SCRATCH/mutt-bug.txt ;;
+       s*|"")  $SENDMAIL -t < $SCRATCH/mutt-bug.txt ; exit ;;
+       q*)     exit
+       esac
+done
+
diff --git a/from.c b/from.c
new file mode 100644 (file)
index 0000000..0fa32cb
--- /dev/null
+++ b/from.c
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+
+#include <ctype.h>
+#include <string.h>
+
+static const char *next_word (const char *s)
+{
+  while (*s && !ISSPACE (*s))
+    s++;
+  SKIPWS (s);
+  return s;
+}
+
+int mutt_check_month (const char *s)
+{
+  int i;
+
+  for (i = 0; i < 12; i++)
+    if (mutt_strncasecmp (s, Months[i], 3) == 0)
+      return (i);
+  return (-1); /* error */
+}
+
+static int is_day_name (const char *s)
+{
+  int i;
+
+  if ((strlen (s) < 3) || !*(s + 3) || !ISSPACE (*(s+3)))
+    return 0;
+  for (i=0; i<7; i++)
+    if (mutt_strncasecmp (s, Weekdays[i], 3) == 0)
+      return 1;
+  return 0;
+}
+
+/*
+ * A valid message separator looks like:
+ *
+ * From [ <return-path> ] <weekday> <month> <day> <time> [ <timezone> ] <year>
+ */
+
+int is_from (const char *s, char *path, size_t pathlen, time_t *tp)
+{
+  struct tm tm;
+  int yr;
+
+  if (path)
+    *path = 0;
+
+  if (mutt_strncmp ("From ", s, 5) != 0)
+    return 0;
+
+  s = next_word (s); /* skip over the From part. */
+  if (!*s)
+    return 0;
+
+  dprint (3, (debugfile, "\nis_from(): parsing: %s", s));
+
+  if (!is_day_name (s))
+  {
+    const char *p;
+    size_t len;
+    short q = 0;
+
+    for (p = s; *p && (q || !ISSPACE (*p)); p++)
+    {
+      if (*p == '\\')
+      {
+       if (*++p == '\0') 
+         return 0;
+      }
+      else if (*p == '"')
+      {
+       q = !q;
+      }
+    }
+    
+    if (q || !*p) return 0;
+    
+    if (path)
+    {
+      len = (size_t) (p - s);
+      if (len + 1 > pathlen)
+       len = pathlen - 1;
+      memcpy (path, s, len);
+      path[len] = 0;
+      dprint (3, (debugfile, "is_from(): got return path: %s\n", path));
+    }
+    
+    s = p + 1;
+    SKIPWS (s);
+    if (!*s)
+      return 0;
+
+    if (!is_day_name (s))
+    {
+      dprint(1, (debugfile, "is_from():  expected weekday, got: %s\n", s));
+      return 0;
+    }
+  }
+
+  s = next_word (s);
+  if (!*s) return 0;
+
+  /* do a quick check to make sure that this isn't really the day of the week.
+   * this could happen when receiving mail from a local user whose login name
+   * is the same as a three-letter abbreviation of the day of the week.
+   */
+  if (is_day_name (s))
+  {
+    s = next_word (s);
+    if (!*s) return 0;
+  }
+
+  /* now we should be on the month. */
+  if ((tm.tm_mon = mutt_check_month (s)) < 0) return 0;
+
+  /* day */
+  s = next_word (s);
+  if (!*s) return 0;
+  if (sscanf (s, "%d", &tm.tm_mday) != 1) return 0;
+
+  /* time */
+  s = next_word (s);
+  if (!*s) return 0;
+
+  /* Accept either HH:MM or HH:MM:SS */
+  if (sscanf (s, "%d:%d:%d", &tm.tm_hour, &tm.tm_min, &tm.tm_sec) == 3);
+  else if (sscanf (s, "%d:%d", &tm.tm_hour, &tm.tm_min) == 2)
+    tm.tm_sec = 0;
+  else
+    return 0;
+
+  s = next_word (s);
+  if (!*s) return 0;
+
+  /* timezone? */
+  if (isalpha ((unsigned char) *s) || *s == '+' || *s == '-')
+  {
+    s = next_word (s);
+    if (!*s) return 0;
+
+    /*
+     * some places have two timezone fields after the time, e.g.
+     *      From xxxx@yyyyyyy.fr Wed Aug  2 00:39:12 MET DST 1995
+     */
+    if (isalpha ((unsigned char) *s))
+    {
+      s = next_word (s);
+      if (!*s) return 0;
+    }
+  }
+
+  /* year */
+  if (sscanf (s, "%d", &yr) != 1) return 0;
+  tm.tm_year = yr > 1900 ? yr - 1900 : (yr < 70 ? yr + 100 : yr);
+  
+  dprint (3,(debugfile, "is_from(): month=%d, day=%d, hr=%d, min=%d, sec=%d, yr=%d.\n",
+            tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_year));
+
+  tm.tm_isdst = -1;
+
+  if (tp) *tp = mutt_mktime (&tm, 0);
+  return 1;
+}
diff --git a/functions.h b/functions.h
new file mode 100644 (file)
index 0000000..26d1937
--- /dev/null
@@ -0,0 +1,471 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+/*
+ * This file contains the structures needed to parse ``bind'' commands, as
+ * well as the default bindings for each menu.
+ *
+ * Notes:
+ *
+ * - If you want to bind \n or \r, use M_ENTER_S so that it will work
+ * correctly under both ncurses and S-Lang
+ *
+ * - If you need to bind a control char, use the octal value because the \cX
+ * construct does not work at this level.
+ *
+ */
+
+struct binding_t OpGeneric[] = {
+  { "top-page",                OP_TOP_PAGE,            "H" },
+  { "next-entry",      OP_NEXT_ENTRY,          "j" },
+  { "previous-entry",  OP_PREV_ENTRY,          "k" },
+  { "bottom-page",     OP_BOTTOM_PAGE,         "L" },
+  { "refresh",         OP_REDRAW,              "\014" },
+  { "middle-page",     OP_MIDDLE_PAGE,         "M" },
+  { "search-next",     OP_SEARCH_NEXT,         "n" },
+  { "exit",            OP_EXIT,                "q" },
+  { "tag-entry",       OP_TAG,                 "t" },
+  { "next-page",       OP_NEXT_PAGE,           "z" },
+  { "previous-page",   OP_PREV_PAGE,           "Z" },
+  { "last-entry",      OP_LAST_ENTRY,          "*" },
+  { "first-entry",     OP_FIRST_ENTRY,         "=" },
+  { "enter-command",   OP_ENTER_COMMAND,       ":" },
+  { "next-line",       OP_NEXT_LINE,           ">" },
+  { "previous-line",   OP_PREV_LINE,           "<" },
+  { "half-up",         OP_HALF_UP,             "[" },
+  { "half-down",       OP_HALF_DOWN,           "]" },
+  { "help",            OP_HELP,                "?" },
+  { "tag-prefix",      OP_TAG_PREFIX,          ";" },
+  { "tag-prefix-cond", OP_TAG_PREFIX_COND,     NULL },
+  { "end-cond",                OP_END_COND,            NULL },
+  { "shell-escape",    OP_SHELL_ESCAPE,        "!" },
+  { "select-entry",    OP_GENERIC_SELECT_ENTRY,M_ENTER_S },
+  { "search",          OP_SEARCH,              "/" },
+  { "search-reverse",  OP_SEARCH_REVERSE,      "\033/" },
+  { "search-opposite", OP_SEARCH_OPPOSITE,     NULL },
+  { "jump",            OP_JUMP,                NULL },
+  { "current-top",      OP_CURRENT_TOP,                NULL },
+  { "current-middle",   OP_CURRENT_MIDDLE,     NULL },
+  { "current-bottom",   OP_CURRENT_BOTTOM,     NULL },
+  { "what-key",                OP_WHAT_KEY,            NULL },
+  { NULL,              0,                      NULL }
+};
+
+struct binding_t OpMain[] = {
+  { "create-alias",            OP_CREATE_ALIAS,                "a" },
+  { "bounce-message",          OP_BOUNCE_MESSAGE,              "b" },
+  { "change-folder",           OP_MAIN_CHANGE_FOLDER,          "c" },
+  { "change-folder-readonly",  OP_MAIN_CHANGE_FOLDER_READONLY, "\033c" },
+#ifdef USE_NNTP
+  { "change-newsgroup",                OP_MAIN_CHANGE_GROUP,           "i" },
+  { "change-newsgroup-readonly",OP_MAIN_CHANGE_GROUP_READONLY, "\033i" },
+#endif
+  { "collapse-thread",         OP_MAIN_COLLAPSE_THREAD,        "\033v" },
+  { "collapse-all",            OP_MAIN_COLLAPSE_ALL,           "\033V" },
+  { "copy-message",            OP_COPY_MESSAGE,                "C" },
+  { "decode-copy",             OP_DECODE_COPY,                 "\033C" },
+  { "decode-save",             OP_DECODE_SAVE,                 "\033s" },
+  { "delete-message",          OP_DELETE,                      "d" },
+  { "delete-pattern",          OP_MAIN_DELETE_PATTERN,         "D" },
+  { "delete-thread",           OP_DELETE_THREAD,               "\004" },
+  { "delete-subthread",                OP_DELETE_SUBTHREAD,            "\033d" },
+  { "edit",                    OP_EDIT_MESSAGE,                "e" },
+  { "edit-type",               OP_EDIT_TYPE,                   "\005" },
+  { "forward-message",         OP_FORWARD_MESSAGE,             "f" },
+#ifdef USE_NNTP
+  { "forward-to-group",                OP_FORWARD_TO_GROUP,            "\033F" },
+  { "followup-message",                OP_FOLLOWUP,                    "F" },
+  { "get-children",            OP_GET_CHILDREN,                NULL },
+  { "get-message",             OP_GET_MESSAGE,                 "\007" },
+  { "get-parent",              OP_GET_PARENT,                  "\033G" },
+  { "reconstruct-thread",      OP_RECONSTRUCT_THREAD,          NULL },
+#endif
+  { "flag-message",            OP_FLAG_MESSAGE,                "\033f" },
+  { "group-reply",             OP_GROUP_REPLY,                 "g" },
+#ifdef USE_POP
+  { "fetch-mail",              OP_MAIN_FETCH_MAIL,             "G" },
+#endif
+#ifdef USE_IMAP
+  { "imap-fetch-mail",         OP_MAIN_IMAP_FETCH,             NULL },
+#endif
+  { "display-toggle-weed",             OP_DISPLAY_HEADERS,             "h" },
+  { "next-undeleted",          OP_MAIN_NEXT_UNDELETED,         "j" },
+  { "previous-undeleted",      OP_MAIN_PREV_UNDELETED,         "k" },
+  { "limit",                   OP_MAIN_LIMIT,                  "l" },
+  { "list-reply",              OP_LIST_REPLY,                  "L" },
+  { "mail",                    OP_MAIL,                        "m" },
+  { "toggle-new",              OP_TOGGLE_NEW,                  "N" },
+  { "toggle-write",            OP_TOGGLE_WRITE,                "%" },
+  { "next-thread",             OP_MAIN_NEXT_THREAD,            "\016" },
+  { "next-subthread",          OP_MAIN_NEXT_SUBTHREAD,         "\033n" },
+  { "purge-message",           OP_PURGE_MESSAGE,               NULL },
+  { "query",                   OP_QUERY,                       "Q" },
+  { "quit",                    OP_QUIT,                        "q" },
+  { "reply",                   OP_REPLY,                       "r" },
+  { "show-limit",              OP_MAIN_SHOW_LIMIT,             "\033l" },
+  { "sort-mailbox",            OP_SORT,                        "o" },
+  { "sort-reverse",            OP_SORT_REVERSE,                "O" },
+  { "print-message",           OP_PRINT,                       "p" },
+#ifdef USE_NNTP
+  { "post-message",            OP_POST,                        "P" },
+#endif
+  { "previous-thread",         OP_MAIN_PREV_THREAD,            "\020" },
+  { "previous-subthread",      OP_MAIN_PREV_SUBTHREAD,         "\033p" },
+  { "recall-message",          OP_RECALL_MESSAGE,              "R" },
+  { "read-thread",             OP_MAIN_READ_THREAD,            "\022" },
+  { "read-subthread",          OP_MAIN_READ_SUBTHREAD,         "\033r" },
+  { "resend-message",          OP_RESEND,                      "\033e" },
+  { "save-message",            OP_SAVE,                        "s" },
+  { "tag-pattern",             OP_MAIN_TAG_PATTERN,            "T" },
+  { "tag-subthread",           OP_TAG_SUBTHREAD,               NULL },
+  { "tag-thread",              OP_TAG_THREAD,                  "\033t" },
+  { "untag-pattern",           OP_MAIN_UNTAG_PATTERN,          "\024" },
+  { "undelete-message",                OP_UNDELETE,                    "u" },
+  { "undelete-pattern",                OP_MAIN_UNDELETE_PATTERN,       "U"},
+  { "undelete-subthread",      OP_UNDELETE_SUBTHREAD,          "\033u" },
+  { "undelete-thread",         OP_UNDELETE_THREAD,             "\025" },
+  { "view-attachments",                OP_VIEW_ATTACHMENTS,            "v" },
+  { "show-version",            OP_VERSION,                     "V" },
+  { "set-flag",                        OP_MAIN_SET_FLAG,               "w" },
+  { "clear-flag",              OP_MAIN_CLEAR_FLAG,             "W" },
+  { "toggle-read",             OP_TOGGLE_READ,                 "X" },
+#ifdef USE_NNTP
+  { "catchup",                 OP_CATCHUP,                     "y" },
+#endif
+  { "display-message",         OP_DISPLAY_MESSAGE,             M_ENTER_S },
+  { "buffy-list",              OP_BUFFY_LIST,                  "." },
+  { "sync-mailbox",            OP_MAIN_SYNC_FOLDER,            "$" },
+  { "display-address",         OP_DISPLAY_ADDRESS,             "@" },
+  { "pipe-message",            OP_PIPE,                        "|" },
+  { "next-new",                        OP_MAIN_NEXT_NEW,               NULL },
+  { "next-new-then-unread",    OP_MAIN_NEXT_NEW_THEN_UNREAD,   "\t" },
+  { "previous-new",            OP_MAIN_PREV_NEW,               NULL },
+  { "previous-new-then-unread",        OP_MAIN_PREV_NEW_THEN_UNREAD,   "\033\t" },
+  { "next-unread",             OP_MAIN_NEXT_UNREAD,            NULL },
+  { "previous-unread",         OP_MAIN_PREV_UNREAD,            NULL },
+  { "parent-message",          OP_MAIN_PARENT_MESSAGE,         NULL },
+
+
+  { "extract-keys",            OP_EXTRACT_KEYS,                "\013" },
+  { "forget-passphrase",       OP_FORGET_PASSPHRASE,           "\006" },
+  { "check-traditional-pgp",   OP_CHECK_TRADITIONAL,           "\033P" },
+  { "mail-key",                        OP_MAIL_KEY,                    "\033k" },
+  { "decrypt-copy",            OP_DECRYPT_COPY,                NULL },
+  { "decrypt-save",            OP_DECRYPT_SAVE,                NULL },
+
+
+  { NULL,                      0,                              NULL }
+};
+
+struct binding_t OpPager[] = {
+  { "create-alias",    OP_CREATE_ALIAS,                "a" },
+  { "bounce-message",  OP_BOUNCE_MESSAGE,              "b" },
+  { "change-folder",   OP_MAIN_CHANGE_FOLDER,          "c" },
+  { "change-folder-readonly",  OP_MAIN_CHANGE_FOLDER_READONLY, "\033c" },
+#ifdef USE_NNTP
+  { "change-newsgroup",                OP_MAIN_CHANGE_GROUP,           "i" },
+  { "change-newsgroup-readonly",OP_MAIN_CHANGE_GROUP_READONLY, "\033i" },
+#endif
+  { "copy-message",    OP_COPY_MESSAGE,                "C" },
+  { "decode-copy",     OP_DECODE_COPY,                 "\033C" },
+  { "delete-message",  OP_DELETE,                      "d" },
+  { "delete-thread",   OP_DELETE_THREAD,               "\004" },
+  { "delete-subthread",        OP_DELETE_SUBTHREAD,            "\033d" },
+  { "edit",            OP_EDIT_MESSAGE,                "e" },
+  { "edit-type",       OP_EDIT_TYPE,                   "\005" },
+#ifdef USE_NNTP
+  { "followup-message",        OP_FOLLOWUP,                    "F" },
+  { "forward-to-group",        OP_FORWARD_TO_GROUP,            "\033F" },
+#endif
+  { "forward-message", OP_FORWARD_MESSAGE,             "f" },
+  { "flag-message",    OP_FLAG_MESSAGE,                "\033f" },
+  { "group-reply",     OP_GROUP_REPLY,                 "g" },
+#ifdef USE_IMAP
+  { "imap-fetch-mail",  OP_MAIN_IMAP_FETCH,            NULL },
+#endif
+  { "display-toggle-weed",     OP_DISPLAY_HEADERS,             "h" },
+  { "next-undeleted",  OP_MAIN_NEXT_UNDELETED,         "j" },
+  { "next-entry",      OP_NEXT_ENTRY,                  "J" },
+  { "previous-undeleted",OP_MAIN_PREV_UNDELETED,       "k" },
+  { "previous-entry",  OP_PREV_ENTRY,                  "K" },
+  { "list-reply",      OP_LIST_REPLY,                  "L" },
+  { "redraw-screen",   OP_REDRAW,                      "\014" },
+  { "mail",            OP_MAIL,                        "m" },
+  { "mark-as-new",     OP_TOGGLE_NEW,                  "N" },
+  { "search-next",     OP_SEARCH_NEXT,                 "n" },
+  { "next-thread",     OP_MAIN_NEXT_THREAD,            "\016" },
+  { "next-subthread",  OP_MAIN_NEXT_SUBTHREAD,         "\033n" },
+  { "print-message",   OP_PRINT,                       "p" },
+#ifdef USE_NNTP
+  { "post-message",    OP_POST,                        "P" },
+#endif
+  { "previous-thread", OP_MAIN_PREV_THREAD,            "\020" },
+  { "previous-subthread",OP_MAIN_PREV_SUBTHREAD,       "\033p" },
+  { "purge-message",   OP_PURGE_MESSAGE,               NULL },
+  { "quit",            OP_QUIT,                        "Q" },
+  { "exit",            OP_EXIT,                        "q" },
+  { "reply",           OP_REPLY,                       "r" },
+  { "recall-message",  OP_RECALL_MESSAGE,              "R" },
+  { "read-thread",     OP_MAIN_READ_THREAD,            "\022" },
+  { "read-subthread",  OP_MAIN_READ_SUBTHREAD,         "\033r" },
+  { "resend-message",  OP_RESEND,                      "\033e" },
+  { "save-message",    OP_SAVE,                        "s" },
+  { "skip-quoted",     OP_PAGER_SKIP_QUOTED,           "S" },
+  { "decode-save",     OP_DECODE_SAVE,                 "\033s" },
+  { "tag-message",     OP_TAG,                         "t" },
+  { "toggle-quoted",   OP_PAGER_HIDE_QUOTED,           "T" },
+  { "undelete-message",        OP_UNDELETE,                    "u" },
+  { "undelete-subthread",OP_UNDELETE_SUBTHREAD,                "\033u" },
+  { "undelete-thread", OP_UNDELETE_THREAD,             "\025" },
+  { "view-attachments",        OP_VIEW_ATTACHMENTS,            "v" },
+  { "show-version",    OP_VERSION,                     "V" },
+  { "search-toggle",   OP_SEARCH_TOGGLE,               "\\" },
+  { "display-address", OP_DISPLAY_ADDRESS,             "@" },
+  { "next-new",                OP_MAIN_NEXT_NEW,               NULL },
+  { "next-new-then-unread", 
+                        OP_MAIN_NEXT_NEW_THEN_UNREAD,   "\t" },
+  { "pipe-message",    OP_PIPE,                        "|" },
+  { "help",            OP_HELP,                        "?" },
+  { "next-page",       OP_NEXT_PAGE,                   " " },
+  { "previous-page",   OP_PREV_PAGE,                   "-" },
+  { "top",             OP_PAGER_TOP,                   "^" },
+  { "sync-mailbox",    OP_MAIN_SYNC_FOLDER,            "$" },
+  { "shell-escape",    OP_SHELL_ESCAPE,                "!" },
+  { "enter-command",   OP_ENTER_COMMAND,               ":" },
+  { "buffy-list",      OP_BUFFY_LIST,                  "." },
+  { "search",          OP_SEARCH,                      "/" },
+  { "search-reverse",  OP_SEARCH_REVERSE,              "\033/" },
+  { "search-opposite", OP_SEARCH_OPPOSITE,             NULL },
+  { "next-line",       OP_NEXT_LINE,                   M_ENTER_S },
+  { "jump",            OP_JUMP,                        NULL },
+  { "next-unread",     OP_MAIN_NEXT_UNREAD,            NULL },
+  { "previous-new",    OP_MAIN_PREV_NEW,               NULL },
+  { "previous-new-then-unread",
+                       OP_MAIN_PREV_NEW_THEN_UNREAD,   NULL },
+  { "previous-unread", OP_MAIN_PREV_UNREAD,            NULL },
+  { "half-up",         OP_HALF_UP,                     NULL },
+  { "half-down",       OP_HALF_DOWN,                   NULL },
+  { "previous-line",   OP_PREV_LINE,                   NULL },
+  { "bottom",          OP_PAGER_BOTTOM,                NULL },
+  { "parent-message",  OP_MAIN_PARENT_MESSAGE,         NULL },
+
+
+
+
+  { "check-traditional-pgp",   OP_CHECK_TRADITIONAL,   "\033P"   },
+  { "mail-key",                OP_MAIL_KEY,                    "\033k" },
+  { "extract-keys",    OP_EXTRACT_KEYS,                "\013" },
+  { "forget-passphrase",OP_FORGET_PASSPHRASE,          "\006" },
+  { "decrypt-copy",    OP_DECRYPT_COPY,                NULL },
+  { "decrypt-save",            OP_DECRYPT_SAVE,                NULL },
+
+
+  { NULL,              0,                              NULL }
+};
+
+struct binding_t OpAttach[] = {
+  { "bounce-message",  OP_BOUNCE_MESSAGE,              "b" },
+  { "display-toggle-weed",     OP_DISPLAY_HEADERS,     "h" },
+  { "edit-type",       OP_EDIT_TYPE,                   "\005" },
+#ifdef USE_NNTP
+  { "followup-message",        OP_FOLLOWUP,                    "F" },
+  { "forward-to-group",        OP_FORWARD_TO_GROUP,            "\033F" },
+#endif
+  { "print-entry",     OP_PRINT,                       "p" },
+  { "save-entry",      OP_SAVE,                        "s" },
+  { "pipe-entry",      OP_PIPE,                        "|" },
+  { "view-mailcap",    OP_ATTACH_VIEW_MAILCAP,         "m" },
+  { "reply",           OP_REPLY,                       "r" },
+  { "resend-message",  OP_RESEND,                      "\033e" },
+  { "group-reply",     OP_GROUP_REPLY,                 "g" },
+  { "list-reply",      OP_LIST_REPLY,                  "L" },
+  { "forward-message", OP_FORWARD_MESSAGE,             "f" },
+  { "view-text",       OP_ATTACH_VIEW_TEXT,            "T" },
+  { "view-attach",     OP_VIEW_ATTACH,                 M_ENTER_S },
+  { "delete-entry",    OP_DELETE,                      "d" },
+  { "undelete-entry",  OP_UNDELETE,                    "u" },
+  { "collapse-parts",  OP_ATTACH_COLLAPSE,             "v" },
+
+  { "check-traditional-pgp",   OP_CHECK_TRADITIONAL,           "\033P"   },
+  { "extract-keys",            OP_EXTRACT_KEYS,                "\013" },
+  { "forget-passphrase",       OP_FORGET_PASSPHRASE,           "\006" },
+
+  { NULL,              0,                              NULL }
+};
+
+struct binding_t OpCompose[] = {
+  { "attach-file",     OP_COMPOSE_ATTACH_FILE,         "a" },
+  { "attach-message",  OP_COMPOSE_ATTACH_MESSAGE,      "A" },
+  { "attach-news-message",OP_COMPOSE_ATTACH_NEWS_MESSAGE,"\033a" },
+  { "edit-bcc",                OP_COMPOSE_EDIT_BCC,            "b" },
+  { "edit-cc",         OP_COMPOSE_EDIT_CC,             "c" },
+  { "copy-file",       OP_SAVE,                        "C" },
+  { "detach-file",     OP_DELETE,                      "D" },
+  { "toggle-disposition",OP_COMPOSE_TOGGLE_DISPOSITION,        "\004" },
+  { "edit-description",        OP_COMPOSE_EDIT_DESCRIPTION,    "d" },
+  { "edit-message",    OP_COMPOSE_EDIT_MESSAGE,        "e" },
+  { "edit-headers",    OP_COMPOSE_EDIT_HEADERS,        "E" },
+  { "edit-file",       OP_COMPOSE_EDIT_FILE,           "\030e" },
+  { "edit-encoding",   OP_COMPOSE_EDIT_ENCODING,       "\005" },
+  { "edit-from",       OP_COMPOSE_EDIT_FROM,           "\033f" },
+  { "edit-fcc",                OP_COMPOSE_EDIT_FCC,            "f" },
+  { "filter-entry",    OP_FILTER,                      "F" },
+  { "get-attachment",  OP_COMPOSE_GET_ATTACHMENT,      "G" },
+  { "display-toggle-weed",     OP_DISPLAY_HEADERS,             "h" },
+  { "ispell",          OP_COMPOSE_ISPELL,              "i" },
+  { "print-entry",     OP_PRINT,                       "l" },
+  { "edit-mime",       OP_COMPOSE_EDIT_MIME,           "m" },
+  { "new-mime",                OP_COMPOSE_NEW_MIME,            "n" },
+#ifdef USE_NNTP
+  { "edit-newsgroups", OP_COMPOSE_EDIT_NEWSGROUPS,     "N" },
+  { "edit-followup-to",        OP_COMPOSE_EDIT_FOLLOWUP_TO,    "o" },
+  { "edit-x-comment-to",OP_COMPOSE_EDIT_X_COMMENT_TO,  "x" },
+#endif
+  { "postpone-message",        OP_COMPOSE_POSTPONE_MESSAGE,    "P" },
+  { "edit-reply-to",   OP_COMPOSE_EDIT_REPLY_TO,       "r" },
+  { "rename-file",     OP_COMPOSE_RENAME_FILE,         "R" },
+  { "edit-subject",    OP_COMPOSE_EDIT_SUBJECT,        "s" },
+  { "edit-to",         OP_COMPOSE_EDIT_TO,             "t" },
+  { "edit-type",       OP_EDIT_TYPE,                   "\024" },
+  { "write-fcc",       OP_COMPOSE_WRITE_MESSAGE,       "w" },
+  { "toggle-unlink",   OP_COMPOSE_TOGGLE_UNLINK,       "u" },
+  { "toggle-recode",    OP_COMPOSE_TOGGLE_RECODE,      NULL },
+  { "update-encoding", OP_COMPOSE_UPDATE_ENCODING,     "U" },
+  { "view-attach",     OP_VIEW_ATTACH,                 M_ENTER_S },
+  { "send-message",    OP_COMPOSE_SEND_MESSAGE,        "y" },
+  { "pipe-entry",      OP_PIPE,                        "|" },
+
+  { "attach-key",      OP_COMPOSE_ATTACH_KEY,          "\033k" },
+  { "pgp-menu",                OP_COMPOSE_PGP_MENU,            "p"     },
+
+  { "forget-passphrase",OP_FORGET_PASSPHRASE,          "\006"  },
+
+  { "smime-menu",      OP_COMPOSE_SMIME_MENU,          "S"     },
+
+#ifdef MIXMASTER
+  { "mix",             OP_COMPOSE_MIX,                 "M" },
+#endif
+  
+  { NULL,              0,                              NULL }
+};
+
+struct binding_t OpPost[] = {
+  { "delete-entry",    OP_DELETE,      "d" },
+  { "undelete-entry",  OP_UNDELETE,    "u" },
+  { NULL,              0,              NULL }
+};
+
+struct binding_t OpAlias[] = {
+  { "delete-entry",    OP_DELETE,      "d" },
+  { "undelete-entry",  OP_UNDELETE,    "u" },
+  { NULL,              0,              NULL }
+};
+  
+
+/* The file browser */
+struct binding_t OpBrowser[] = {
+  { "change-dir",      OP_CHANGE_DIRECTORY,    "c" },
+  { "display-filename",        OP_BROWSER_TELL,        "@" },
+  { "enter-mask",      OP_ENTER_MASK,          "m" },
+  { "sort",            OP_SORT,                "o" },
+  { "sort-reverse",    OP_SORT_REVERSE,        "O" },
+  { "select-new",      OP_BROWSER_NEW_FILE,    "N" },
+  { "check-new",       OP_CHECK_NEW,           NULL },
+  { "toggle-mailboxes", OP_TOGGLE_MAILBOXES,   "\t" },
+#ifdef USE_NNTP
+  { "reload-active",   OP_LOAD_ACTIVE,         "g"},
+  { "subscribe-pattern", OP_SUBSCRIBE_PATTERN, "S" },
+  { "unsubscribe-pattern", OP_UNSUBSCRIBE_PATTERN, "U" },
+  { "catchup",         OP_CATCHUP,             "y" },
+  { "uncatchup",       OP_UNCATCHUP,           "Y" },
+#endif
+  { "view-file",       OP_BROWSER_VIEW_FILE,   " " },
+  { "buffy-list",      OP_BUFFY_LIST,          "." },
+#ifdef USE_IMAP
+  { "create-mailbox",   OP_CREATE_MAILBOX,      "C" },
+  { "delete-mailbox",   OP_DELETE_MAILBOX,      "d" },
+#endif
+#if defined USE_IMAP || defined USE_NNTP
+  { "subscribe",       OP_BROWSER_SUBSCRIBE,   "s" },
+  { "unsubscribe",     OP_BROWSER_UNSUBSCRIBE, "u" },
+#endif
+#ifdef USE_IMAP
+  { "toggle-subscribed", OP_BROWSER_TOGGLE_LSUB, "T" },
+#endif
+  { NULL,              0,                      NULL }
+};
+
+/* External Query Menu */
+struct binding_t OpQuery[] = {
+  { "create-alias",    OP_CREATE_ALIAS,        "a" },
+  { "mail",            OP_MAIL,                "m" },
+  { "query",           OP_QUERY,               "Q" },
+  { "query-append",    OP_QUERY_APPEND,        "A" },
+  { NULL,              0,                      NULL }
+};
+
+struct binding_t OpEditor[] = {
+  { "bol",             OP_EDITOR_BOL,                  "\001" },
+  { "backward-char",   OP_EDITOR_BACKWARD_CHAR,        "\002" },
+  { "backward-word",   OP_EDITOR_BACKWARD_WORD,        "\033b"},
+  { "capitalize-word", OP_EDITOR_CAPITALIZE_WORD,      "\033c"},
+  { "downcase-word",   OP_EDITOR_DOWNCASE_WORD,        "\033l"},
+  { "upcase-word",     OP_EDITOR_UPCASE_WORD,          "\033u"},
+  { "delete-char",     OP_EDITOR_DELETE_CHAR,          "\004" },
+  { "eol",             OP_EDITOR_EOL,                  "\005" },
+  { "forward-char",    OP_EDITOR_FORWARD_CHAR,         "\006" },
+  { "forward-word",    OP_EDITOR_FORWARD_WORD,         "\033f"},
+  { "backspace",       OP_EDITOR_BACKSPACE,            "\010" },
+  { "kill-eol",                OP_EDITOR_KILL_EOL,             "\013" },
+  { "kill-eow",                OP_EDITOR_KILL_EOW,             "\033d"},
+  { "kill-line",       OP_EDITOR_KILL_LINE,            "\025" },
+  { "quote-char",      OP_EDITOR_QUOTE_CHAR,           "\026" },
+  { "kill-word",       OP_EDITOR_KILL_WORD,            "\027" },
+  { "complete",                OP_EDITOR_COMPLETE,             "\t"   },
+  { "complete-query",  OP_EDITOR_COMPLETE_QUERY,       "\024" },
+  { "buffy-cycle",     OP_EDITOR_BUFFY_CYCLE,          " "    },
+  { "history-up",      OP_EDITOR_HISTORY_UP,           NULL   },
+  { "history-down",    OP_EDITOR_HISTORY_DOWN,         NULL   },
+  { "transpose-chars", OP_EDITOR_TRANSPOSE_CHARS,      NULL   },
+  { NULL,              0,                              NULL   }
+};
+
+
+
+struct binding_t OpPgp[] = {
+  { "verify-key",      OP_VERIFY_KEY,          "c" },
+  { "view-name",       OP_VIEW_ID,             "%" },
+  { NULL,              0,                              NULL }
+};
+
+/* Don't know an useful key binding yet. But. just in case, adding this already */
+struct binding_t OpSmime[] = {
+  { NULL,      0,      NULL }
+};
+
+#ifdef MIXMASTER
+struct binding_t OpMix[] = {
+  { "accept",          OP_MIX_USE,     M_ENTER_S },
+  { "append",          OP_MIX_APPEND,  "a"       },
+  { "insert",          OP_MIX_INSERT,  "i"       },
+  { "delete",          OP_MIX_DELETE,  "d"       },
+  { "chain-prev",      OP_MIX_CHAIN_PREV, "<left>" },
+  { "chain-next",      OP_MIX_CHAIN_NEXT, "<right>" },
+  { NULL,              0,              NULL }
+};
+#endif /* MIXMASTER */
diff --git a/gen_defs b/gen_defs
new file mode 100755 (executable)
index 0000000..0277a28
--- /dev/null
+++ b/gen_defs
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+# $Id: gen_defs,v 3.0 2002/01/24 12:10:49 roessler Exp $
+
+echo '/* Automatically generated by gen_defs.  Do not edit! */'
+echo ''
+
+for mode in help defs; do
+       case $mode in
+               help)
+                       echo "#ifdef HELP_C"
+                       echo "const char *HelpStrings[] = {"
+                       expr='s;^[^ ]* *\(.*\); N_(\1),;'
+                       ;;
+               *)
+                       echo "enum {"
+                       expr='s;^\([^ ]*\).*;   \1,;'
+                       ;;
+       esac
+       for i in $*; do
+               sed -e '/^\/\*/d' -e "$expr" < $i
+       done
+       if test $mode = help; then
+               echo '  NULL'
+       else
+               echo '  OP_MAX'
+       fi
+       echo "};"
+       if test $mode = help; then
+               echo "#endif /* MAIN_C */"
+               echo ''
+       fi
+done
+
+exit 0
diff --git a/getdomain.c b/getdomain.c
new file mode 100644 (file)
index 0000000..23b2f48
--- /dev/null
@@ -0,0 +1,64 @@
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+
+#include "mutt.h"
+
+#ifndef STDC_HEADERS
+int fclose ();
+#endif
+
+/* poor man's version of getdomainname() for systems where it does not return
+ * return the DNS domain, but the NIS domain.
+ */
+
+static void strip_trailing_dot (char *q)
+{
+  char *p = q;
+  
+  for (; *q; q++)
+    p = q;
+  
+  if (*p == '.')
+    *p = '\0';
+}
+
+int getdnsdomainname (char *s, size_t l)
+{
+  FILE *f;
+  char tmp[1024];
+  char *p = NULL;
+  char *q;
+
+  if ((f = fopen ("/etc/resolv.conf", "r")) == NULL) return (-1);
+
+  tmp[sizeof (tmp) - 1] = 0;
+
+  l--; /* save room for the terminal \0 */
+
+  while (fgets (tmp, sizeof (tmp) - 1, f) != NULL)
+  {
+    p = tmp;
+    while (ISSPACE (*p)) p++;
+    if (mutt_strncmp ("domain", p, 6) == 0 || mutt_strncmp ("search", p, 6) == 0)
+    {
+      p += 6;
+      
+      for (q = strtok (p, " \t\n"); q; q = strtok (NULL, " \t\n"))
+       if (strcmp (q, "."))
+         break;
+
+      if (q)
+      {
+       strip_trailing_dot (q);
+       strfcpy (s, q, l);
+       safe_fclose (&f);
+       return 0;
+      }
+      
+    }
+  }
+
+  safe_fclose (&f);
+  return (-1);
+}
diff --git a/globals.h b/globals.h
new file mode 100644 (file)
index 0000000..af1734d
--- /dev/null
+++ b/globals.h
@@ -0,0 +1,261 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+WHERE void (*mutt_error) (const char *, ...);
+WHERE void (*mutt_message) (const char *, ...);
+
+WHERE CONTEXT *Context;
+
+WHERE char Errorbuf[STRING];
+WHERE char AttachmentMarker[STRING];
+
+WHERE char Quotebuf[SHORT_STRING];
+
+#if defined(DL_STANDALONE) && defined(USE_DOTLOCK)
+WHERE char *MuttDotlock;
+#endif
+
+WHERE ADDRESS *From;
+
+WHERE char *AliasFile;
+WHERE char *AliasFmt;
+WHERE char *AttachSep;
+WHERE char *Attribution;
+WHERE char *AttachFormat;
+WHERE char *Charset;
+WHERE char *ComposeFormat;
+WHERE char *ContentType;
+WHERE char *DefaultHook;
+WHERE char *DateFmt;
+WHERE char *DisplayFilter;
+WHERE char *DsnNotify;
+WHERE char *DsnReturn;
+WHERE char *Editor;
+WHERE char *EscChar;
+WHERE char *FolderFormat;
+WHERE char *ForwFmt;
+WHERE char *Fqdn;
+WHERE char *HdrFmt;
+WHERE char *Homedir;
+WHERE char *Hostname;
+#ifdef USE_IMAP
+WHERE char *ImapAuthenticators INITVAL (NULL);
+WHERE char *ImapDelimChars INITVAL (NULL);
+WHERE char *ImapHomeNamespace INITVAL (NULL);
+WHERE char *ImapPass INITVAL (NULL);
+WHERE char *ImapUser INITVAL (NULL);
+#endif
+WHERE char *Inbox;
+WHERE char *Ispell;
+WHERE char *Locale;
+WHERE char *MailcapPath;
+WHERE char *Maildir;
+WHERE char *MhFlagged;
+WHERE char *MhReplied;
+WHERE char *MhUnseen;
+WHERE char *MsgFmt;
+
+#ifdef USE_SOCKET
+WHERE char *Preconnect INITVAL (NULL);
+WHERE char *Tunnel INITVAL (NULL);
+#endif /* USE_SOCKET */
+
+#ifdef MIXMASTER
+WHERE char *Mixmaster;
+WHERE char *MixEntryFormat;
+#endif
+
+WHERE char *Muttrc INITVAL (NULL);
+#ifdef USE_NNTP
+WHERE char *NewsCacheDir;
+WHERE char *GroupFormat;
+WHERE char *Inews;
+WHERE char *NewsServer;
+WHERE char *NntpUser;
+WHERE char *NntpPass;
+WHERE char *NewsRc;
+#endif
+WHERE char *Outbox;
+WHERE char *Pager;
+WHERE char *PagerFmt;
+WHERE char *PipeSep;
+#ifdef USE_POP
+WHERE char *PopAuthenticators INITVAL (NULL);
+WHERE short PopCheckTimeout;
+WHERE char *PopHost;
+WHERE char *PopPass INITVAL (NULL);
+WHERE char *PopUser INITVAL (NULL);
+#endif
+WHERE char *PostIndentString;
+WHERE char *Postponed;
+WHERE char *Prefix;
+WHERE char *PrintCmd;
+WHERE char *QueryCmd;
+WHERE char *Realname;
+WHERE char *SendCharset;
+WHERE char *Sendmail;
+WHERE char *Shell;
+WHERE char *Signature;
+WHERE char *SimpleSearch;
+#if defined(USE_LIBESMTP)
+WHERE char *SmtpAuthUser;
+WHERE char *SmtpAuthPass;
+WHERE char *SmtpHost;
+WHERE unsigned short SmtpPort;
+#endif
+WHERE char *Spoolfile;
+#if defined(USE_SSL) || defined(USE_NSS)
+WHERE char *SslCertFile INITVAL (NULL);
+WHERE char *SslEntropyFile INITVAL (NULL);
+#endif
+WHERE char *StChars;
+WHERE char *Status;
+WHERE char *Tempdir;
+WHERE char *Tochars;
+WHERE char *TrashPath;
+WHERE char *Username;
+WHERE char *Visual;
+
+WHERE char *LastFolder;
+
+WHERE LIST *AutoViewList INITVAL(0);
+WHERE LIST *AlternativeOrderList INITVAL(0);
+WHERE LIST *HeaderOrderList INITVAL(0);
+WHERE LIST *Ignore INITVAL(0);
+WHERE LIST *MimeLookupList INITVAL(0);
+WHERE LIST *UnIgnore INITVAL(0);
+
+WHERE RX_LIST *Alternates INITVAL(0);
+WHERE RX_LIST *MailLists INITVAL(0);
+WHERE RX_LIST *SubscribedLists INITVAL(0);
+
+/* bit vector for boolean variables */
+#ifdef MAIN_C
+unsigned char Options[(OPTMAX + 7)/8];
+#else
+extern unsigned char Options[];
+#endif
+
+/* bit vector for the yes/no/ask variable type */
+#ifdef MAIN_C
+unsigned char QuadOptions[(OPT_MAX*2 + 7) / 8];
+#else
+extern unsigned char QuadOptions[];
+#endif
+
+WHERE unsigned short Counter INITVAL (0);
+
+#ifdef USE_NNTP
+WHERE short NewsPollTimeout;
+WHERE short NntpContext;
+#endif
+
+WHERE short ConnectTimeout;
+WHERE short HistSize;
+WHERE short PagerContext;
+WHERE short PagerIndexLines;
+WHERE short ReadInc;
+WHERE short SendmailWait;
+WHERE short SleepTime INITVAL (1);
+WHERE short Timeout;
+WHERE short WrapMargin;
+WHERE short WriteInc;
+
+WHERE short ScoreThresholdDelete;
+WHERE short ScoreThresholdRead;
+WHERE short ScoreThresholdFlag;
+
+#ifdef USE_IMAP
+WHERE short ImapKeepalive;
+#endif
+
+/* flags for received signals */
+WHERE SIG_ATOMIC_VOLATILE_T SigAlrm INITVAL (0);
+WHERE SIG_ATOMIC_VOLATILE_T SigInt INITVAL (0);
+WHERE SIG_ATOMIC_VOLATILE_T SigWinch INITVAL (0);
+
+WHERE int CurrentMenu;
+
+WHERE ALIAS *Aliases INITVAL (0);
+WHERE LIST *UserHeader INITVAL (0);
+
+/*-- formerly in pgp.h --*/
+WHERE REGEXP PgpGoodSign;
+WHERE char *PgpSignAs;
+WHERE short PgpTimeout;
+WHERE char *PgpEntryFormat;
+WHERE char *PgpClearSignCommand;
+WHERE char *PgpDecodeCommand;
+WHERE char *PgpVerifyCommand;
+WHERE char *PgpDecryptCommand;
+WHERE char *PgpSignCommand;
+WHERE char *PgpEncryptSignCommand;
+WHERE char *PgpEncryptOnlyCommand;
+WHERE char *PgpImportCommand;
+WHERE char *PgpExportCommand;
+WHERE char *PgpVerifyKeyCommand;
+WHERE char *PgpListSecringCommand;
+WHERE char *PgpListPubringCommand;
+WHERE char *PgpGetkeysCommand;
+
+/*-- formerly in smime.h --*/
+WHERE char *SmimeDefaultKey;
+WHERE char *SmimeCryptAlg;
+WHERE short SmimeTimeout;
+WHERE char *SmimeCertificates;
+WHERE char *SmimeKeys;
+WHERE char *SmimeCryptAlg;
+WHERE char *SmimeCALocation;
+WHERE char *SmimeVerifyCommand;
+WHERE char *SmimeVerifyOpaqueCommand;
+WHERE char *SmimeDecryptCommand;
+WHERE char *SmimeSignCommand;
+WHERE char *SmimeSignOpaqueCommand;
+WHERE char *SmimeEncryptCommand;
+WHERE char *SmimeGetSignerCertCommand;
+WHERE char *SmimePk7outCommand;
+WHERE char *SmimeGetCertCommand;
+WHERE char *SmimeImportCertCommand;
+WHERE char *SmimeGetCertEmailCommand;
+
+
+
+#ifdef DEBUG
+WHERE FILE *debugfile INITVAL (0);
+WHERE int debuglevel INITVAL (0);
+#endif
+
+#ifdef MAIN_C
+const char *Weekdays[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
+const char *Months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "ERR" };
+
+const char *BodyTypes[] = { "x-unknown", "audio", "application", "image", "message", "model", "multipart", "text", "video" };
+const char *BodyEncodings[] = { "x-unknown", "7bit", "8bit", "quoted-printable", "base64", "binary", "x-uuencoded" };
+#else
+extern const char *Weekdays[];
+extern const char *Months[];
+#endif
+
+#ifdef MAIN_C
+/* so that global vars get included */ 
+#include "mx.h"
+#include "mutt_regex.h"
+#include "buffy.h"
+#include "sort.h"
+#include "mutt_crypt.h"
+#endif /* MAIN_C */
diff --git a/gnupgparse.c b/gnupgparse.c
new file mode 100644 (file)
index 0000000..5236e78
--- /dev/null
@@ -0,0 +1,379 @@
+/*
+ * Copyright (C) 1998-2000 Werner Koch <werner.koch@guug.de>
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ *
+ *     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.
+ */
+
+/*
+ * NOTE
+ * 
+ * This code used to be the parser for GnuPG's output.
+ * 
+ * Nowadays, we are using an external pubring lister with PGP which mimics 
+ * gpg's output format.
+ * 
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <time.h>
+#include <ctype.h>
+
+#include "mutt.h"
+#include "pgp.h"
+#include "charset.h"
+
+/* for hexval */
+#include "mime.h"
+
+/****************
+ * Read the GNUPG keys.  For now we read the complete keyring by
+ * calling gnupg in a special mode.
+ *
+ * The output format of gpgm is colon delimited with these fields:
+ *   - record type ("pub","uid","sig","rev" etc.)
+ *   - trust info
+ *   - key length
+ *   - pubkey algo
+ *   - 16 hex digits with the long keyid.
+ *   - timestamp (1998-02-28)
+ *   - Local id
+ *   - ownertrust
+ *   - name
+ *   - signature class
+ */
+
+/* decode the backslash-escaped user ids. */
+
+static char *_chs = 0;
+
+static void fix_uid (char *uid)
+{
+  char *s, *d;
+  iconv_t cd;
+
+  for (s = d = uid; *s;)
+  {
+    if (*s == '\\' && *(s+1) == 'x' && isxdigit ((unsigned char) *(s+2)) && isxdigit ((unsigned char) *(s+3)))
+    {
+      *d++ = hexval (*(s+2)) << 4 | hexval (*(s+3));
+      s += 4;
+    }
+    else
+      *d++ = *s++;
+  }
+  *d = '\0';
+
+  if (_chs && (cd = mutt_iconv_open (_chs, "utf-8", 0)) != (iconv_t)-1)
+  {
+    int n = s - uid + 1; /* chars available in original buffer */
+    char *buf;
+    ICONV_CONST char *ib;
+    char *ob;
+    size_t ibl, obl;
+
+    buf = safe_malloc (n+1);
+    ib = uid, ibl = d - uid + 1, ob = buf, obl = n;
+    iconv (cd, &ib, &ibl, &ob, &obl);
+    if (!ibl)
+    {
+      if (ob-buf < n)
+      {
+       memcpy (uid, buf, ob-buf);
+       uid[ob-buf] = '\0';
+      }
+      else if (ob-buf == n && (buf[n] = 0, strlen (buf) < n))
+       memcpy (uid, buf, n);
+    }
+    FREE (&buf);
+    iconv_close (cd);
+  }
+}
+
+static pgp_key_t parse_pub_line (char *buf, int *is_subkey, pgp_key_t k)
+{
+  pgp_uid_t *uid = NULL;
+  int field = 0, is_uid = 0;
+  char *pend, *p;
+  int trust = 0;
+  int flags = 0;
+
+  *is_subkey = 0;
+  if (!*buf)
+    return NULL;
+  
+  dprint (2, (debugfile, "parse_pub_line: buf = `%s'\n", buf));
+  
+  for (p = buf; p; p = pend)
+  {
+    if ((pend = strchr (p, ':')))
+      *pend++ = 0;
+    field++;
+    if (field > 1 && !*p)
+      continue;
+
+    switch (field)
+    {
+      case 1:                  /* record type */
+      {
+       dprint (2, (debugfile, "record type: %s\n", p));
+       
+       if (!mutt_strcmp (p, "pub"))
+         ;
+       else if (!mutt_strcmp (p, "sub"))
+         *is_subkey = 1;
+       else if (!mutt_strcmp (p, "sec"))
+         ;
+       else if (!mutt_strcmp (p, "ssb"))
+         *is_subkey = 1;
+       else if (!mutt_strcmp (p, "uid"))
+         is_uid = 1;
+       else
+         return NULL;
+       
+       if (!(is_uid || (*is_subkey && option (OPTPGPIGNORESUB))))
+         k = safe_calloc (sizeof *k, 1);
+
+       break;
+      }
+      case 2:                  /* trust info */
+      {
+       dprint (2, (debugfile, "trust info: %s\n", p));
+       
+       switch (*p)
+       {                               /* look only at the first letter */
+         case 'e':
+           flags |= KEYFLAG_EXPIRED;
+           break;
+         case 'r':
+           flags |= KEYFLAG_REVOKED;
+           break;
+         case 'd':
+           flags |= KEYFLAG_DISABLED;
+           break;
+         case 'n':
+           trust = 1;
+           break;
+         case 'm':
+           trust = 2;
+           break;
+         case 'f':
+           trust = 3;
+           break;
+         case 'u':
+           trust = 3;
+           break;
+       }
+
+        if (!is_uid && !(*is_subkey && option (OPTPGPIGNORESUB)))
+         k->flags |= flags;
+
+       break;
+      }
+      case 3:                  /* key length  */
+      {
+       
+       dprint (2, (debugfile, "key len: %s\n", p));
+       
+       if (!(*is_subkey && option (OPTPGPIGNORESUB)))
+         k->keylen = atoi (p); /* fixme: add validation checks */
+       break;
+      }
+      case 4:                  /* pubkey algo */
+      {
+       
+       dprint (2, (debugfile, "pubkey algorithm: %s\n", p));
+       
+       if (!(*is_subkey && option (OPTPGPIGNORESUB)))
+       {
+         k->numalg = atoi (p);
+         k->algorithm = pgp_pkalgbytype (atoi (p));
+       }
+       break;
+      }
+      case 5:                  /* 16 hex digits with the long keyid. */
+      {
+       dprint (2, (debugfile, "key id: %s\n", p));
+       
+       if (!(*is_subkey && option (OPTPGPIGNORESUB)))
+         mutt_str_replace (&k->keyid, p);
+       break;
+
+      }
+      case 6:                  /* timestamp (1998-02-28) */
+      {
+       char tstr[11];
+       struct tm time;
+       
+       dprint (2, (debugfile, "time stamp: %s\n", p));
+       
+       if (!p)
+         break;
+       time.tm_sec = 0;
+       time.tm_min = 0;
+       time.tm_hour = 12;
+       strncpy (tstr, p, 11);
+       tstr[4] = '\0';
+       time.tm_year = atoi (tstr)-1900;
+       tstr[7] = '\0';
+       time.tm_mon = (atoi (tstr+5))-1;
+       time.tm_mday = atoi (tstr+8);
+       k->gen_time = mutt_mktime (&time, 0);
+        break;
+      }
+      case 7:                  /* valid for n days */
+        break;
+      case 8:                  /* Local id         */
+        break;
+      case 9:                  /* ownertrust       */
+        break;
+      case 10:                 /* name             */
+      {
+       if (!pend || !*p)
+         break;                        /* empty field or no trailing colon */
+
+       /* ignore user IDs on subkeys */
+       if (!is_uid && (*is_subkey && option (OPTPGPIGNORESUB)))
+         break;
+       
+       dprint (2, (debugfile, "user ID: %s\n", p));
+       
+       uid = safe_calloc (sizeof (pgp_uid_t), 1);
+       fix_uid (p);
+       uid->addr = safe_strdup (p);
+       uid->trust = trust;
+       uid->flags |= flags;
+       uid->parent = k;
+       uid->next = k->address;
+       k->address = uid;
+       
+       if (strstr (p, "ENCR"))
+         k->flags |= KEYFLAG_PREFER_ENCRYPTION;
+       if (strstr (p, "SIGN"))
+         k->flags |= KEYFLAG_PREFER_SIGNING;
+
+       break;
+      }
+      case 11:                 /* signature class  */
+        break;
+      case 12:                 /* key capabilities */
+       dprint (2, (debugfile, "capabilities info: %s\n", p));
+       
+       while(*p)
+         {
+           switch(*p++)
+             {
+             case 'D':
+               flags |= KEYFLAG_DISABLED;
+               break;
+
+             case 'e':
+               flags |= KEYFLAG_CANENCRYPT;
+               break;
+
+             case 's':
+               flags |= KEYFLAG_CANSIGN;
+               break;
+             }
+         }
+
+        if (!is_uid && 
+           (!*is_subkey || !option (OPTPGPIGNORESUB)
+            || !((flags & KEYFLAG_DISABLED)
+                 || (flags & KEYFLAG_REVOKED)
+                 || (flags & KEYFLAG_EXPIRED))))
+         k->flags |= flags;
+
+       break;
+      
+      default:
+        break;
+    }
+  }
+  return k;
+}
+
+pgp_key_t pgp_get_candidates (pgp_ring_t keyring, LIST * hints)
+{
+  FILE *fp;
+  pid_t thepid;
+  char buf[LONG_STRING];
+  pgp_key_t db = NULL, *kend, k = NULL, kk, mainkey = NULL;
+  int is_sub;
+  int devnull;
+
+  if ((devnull = open ("/dev/null", O_RDWR)) == -1)
+    return NULL;
+
+  mutt_str_replace (&_chs, Charset);
+  
+  thepid = pgp_invoke_list_keys (NULL, &fp, NULL, -1, -1, devnull,
+                                keyring, hints);
+  if (thepid == -1)
+  {
+    close (devnull);
+    return NULL;
+  }
+
+  kend = &db;
+  k = NULL;
+  while (fgets (buf, sizeof (buf) - 1, fp))
+  {
+    if (!(kk = parse_pub_line (buf, &is_sub, k)))
+      continue;
+
+    /* Only append kk to the list if it's new. */
+    if (kk != k)
+    {
+      if (k)
+       kend = &k->next;
+      *kend = k = kk;
+
+      if (is_sub)
+      {
+       pgp_uid_t **l;
+       
+       k->flags  |= KEYFLAG_SUBKEY;
+       k->parent  = mainkey;
+       for (l = &k->address; *l; l = &(*l)->next)
+         ;
+       *l = pgp_copy_uids (mainkey->address, k);
+      }
+      else
+       mainkey = k;
+    }
+  }
+
+  if (ferror (fp))
+    mutt_perror ("fgets");
+
+  fclose (fp);
+  mutt_wait_filter (thepid);
+
+  close (devnull);
+  
+  return db;
+}
+
diff --git a/handler.c b/handler.c
new file mode 100644 (file)
index 0000000..666638b
--- /dev/null
+++ b/handler.c
@@ -0,0 +1,1943 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <sys/wait.h>
+#include <sys/stat.h>
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "rfc1524.h"
+#include "keymap.h"
+#include "mime.h"
+#include "copy.h"
+#include "charset.h"
+#include "mutt_crypt.h"
+
+
+#define BUFI_SIZE 1000
+#define BUFO_SIZE 2000
+
+
+typedef void handler_f (BODY *, STATE *);
+typedef handler_f *handler_t;
+
+int Index_hex[128] = {
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+     0, 1, 2, 3,  4, 5, 6, 7,  8, 9,-1,-1, -1,-1,-1,-1,
+    -1,10,11,12, 13,14,15,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,10,11,12, 13,14,15,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1
+};
+
+int Index_64[128] = {
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,
+    52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1,
+    -1, 0, 1, 2,  3, 4, 5, 6,  7, 8, 9,10, 11,12,13,14,
+    15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1,
+    -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
+    41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1
+};
+
+static void state_prefix_put (const char *d, size_t dlen, STATE *s)
+{
+  if (s->prefix)
+    while (dlen--)
+      state_prefix_putc (*d++, s);
+  else
+    fwrite (d, dlen, 1, s->fpout);
+}
+
+void mutt_convert_to_state(iconv_t cd, char *bufi, size_t *l, STATE *s)
+{
+  char bufo[BUFO_SIZE];
+  ICONV_CONST char *ib;
+  char *ob;
+  size_t ibl, obl;
+
+  if (!bufi)
+  {
+    if (cd != (iconv_t)(-1))
+    {
+      ob = bufo, obl = sizeof (bufo);
+      iconv (cd, 0, 0, &ob, &obl);
+      if (ob != bufo)
+       state_prefix_put (bufo, ob - bufo, s);
+    }
+    if (Quotebuf[0] != '\0')
+      state_prefix_putc ('\n', s);
+    return;
+  }
+
+  if (cd == (iconv_t)(-1))
+  {
+    state_prefix_put (bufi, *l, s);
+    *l = 0;
+    return;
+  }
+
+  ib = bufi, ibl = *l;
+  for (;;)
+  {
+    ob = bufo, obl = sizeof (bufo);
+    mutt_iconv (cd, &ib, &ibl, &ob, &obl, 0, "?");
+    if (ob == bufo)
+      break;
+    state_prefix_put (bufo, ob - bufo, s);
+  }
+  memmove (bufi, ib, ibl);
+  *l = ibl;
+}
+
+void mutt_decode_xbit (STATE *s, long len, int istext, iconv_t cd)
+{
+  int c, ch;
+  char bufi[BUFI_SIZE];
+  size_t l = 0;
+
+  if (istext)
+  {
+    state_set_prefix(s);
+
+    while ((c = fgetc(s->fpin)) != EOF && len--)
+    {
+      if(c == '\r' && len)
+      {
+       if((ch = fgetc(s->fpin)) == '\n')
+       {
+         c = ch;
+         len--;
+       }
+       else 
+         ungetc(ch, s->fpin);
+      }
+
+      bufi[l++] = c;
+      if (l == sizeof (bufi))
+       mutt_convert_to_state (cd, bufi, &l, s);
+    }
+
+    mutt_convert_to_state (cd, bufi, &l, s);
+    mutt_convert_to_state (cd, 0, 0, s);
+
+    state_reset_prefix (s);
+  }
+  else
+    mutt_copy_bytes (s->fpin, s->fpout, len);
+}
+
+static int qp_decode_triple (char *s, char *d)
+{
+  /* soft line break */
+  if (*s == '=' && !(*(s+1)))
+    return 1;
+  
+  /* quoted-printable triple */
+  if (*s == '=' &&
+      isxdigit ((unsigned char) *(s+1)) &&
+      isxdigit ((unsigned char) *(s+2)))
+  {
+    *d = (hexval (*(s+1)) << 4) | hexval (*(s+2));
+    return 0;
+  }
+  
+  /* something else */
+  return -1;
+}
+
+static void qp_decode_line (char *dest, char *src, size_t *l,
+                           int last)
+{
+  char *d, *s;
+  char c;
+
+  int kind;
+  int soft = 0;
+
+  /* decode the line */
+  
+  for (d = dest, s = src; *s;)
+  {
+    switch ((kind = qp_decode_triple (s, &c)))
+    {
+      case  0: *d++ = c; s += 3; break;        /* qp triple */
+      case -1: *d++ = *s++;      break; /* single character */
+      case  1: soft = 1; s++;   break; /* soft line break */
+    }
+  }
+
+  if (!soft && last == '\n')
+    *d++ = '\n';
+  
+  *d = '\0';
+  *l = d - dest;
+}
+
+/* 
+ * Decode an attachment encoded with quoted-printable.
+ * 
+ * Why doesn't this overflow any buffers?  First, it's guaranteed
+ * that the length of a line grows when you _en_-code it to
+ * quoted-printable.  That means that we always can store the
+ * result in a buffer of at most the _same_ size.
+ * 
+ * Now, we don't special-case if the line we read with fgets()
+ * isn't terminated.  We don't care about this, since STRING > 78,
+ * so corrupted input will just be corrupted a bit more.  That
+ * implies that STRING+1 bytes are always sufficient to store the
+ * result of qp_decode_line.
+ * 
+ * Finally, at soft line breaks, some part of a multibyte character
+ * may have been left over by mutt_convert_to_state().  This shouldn't
+ * be more than 6 characters, so STRING + 7 should be sufficient
+ * memory to store the decoded data.
+ * 
+ * Just to make sure that I didn't make some off-by-one error
+ * above, we just use STRING*2 for the target buffer's size.
+ * 
+ */
+
+void mutt_decode_quoted (STATE *s, long len, int istext, iconv_t cd)
+{
+  char line[STRING];
+  char decline[2*STRING];
+  size_t l = 0;
+  size_t linelen;      /* number of input bytes in `line' */
+  size_t l3;
+  
+  int last;    /* store the last character in the input line */
+  
+  if (istext)
+    state_set_prefix(s);
+
+  while (len > 0)
+  {
+    last = 0;
+    
+    /*
+     * It's ok to use a fixed size buffer for input, even if the line turns
+     * out to be longer than this.  Just process the line in chunks.  This
+     * really shouldn't happen according the MIME spec, since Q-P encoded
+     * lines are at most 76 characters, but we should be liberal about what
+     * we accept.
+     */
+    if (fgets (line, MIN ((ssize_t)sizeof (line), len + 1), s->fpin) == NULL)
+      break;
+
+    linelen = strlen(line);
+    len -= linelen;
+
+    /*
+     * inspect the last character we read so we can tell if we got the
+     * entire line.
+     */
+    last = linelen ? line[linelen - 1] : 0;
+
+    /* chop trailing whitespace if we got the full line */
+    if (last == '\n')
+    {
+      while (linelen > 0 && ISSPACE (line[linelen-1]))
+       linelen--;
+      line[linelen]=0;
+    }
+
+    /* decode and do character set conversion */
+    qp_decode_line (decline + l, line, &l3, last);
+    l += l3;
+    mutt_convert_to_state (cd, decline, &l, s);
+  }
+
+  mutt_convert_to_state (cd, 0, 0, s);
+  state_reset_prefix(s);
+}
+
+void mutt_decode_base64 (STATE *s, long len, int istext, iconv_t cd)
+{
+  char buf[5];
+  int c1, c2, c3, c4, ch, cr = 0, i;
+  char bufi[BUFI_SIZE];
+  size_t l = 0;
+
+  buf[4] = 0;
+
+  if (istext) 
+    state_set_prefix(s);
+
+  while (len > 0)
+  {
+    for (i = 0 ; i < 4 && len > 0 ; len--)
+    {
+      if ((ch = fgetc (s->fpin)) == EOF)
+       break;
+      if (ch >= 0 && ch < 128 && (base64val(ch) != -1 || ch == '='))
+       buf[i++] = ch;
+    }
+    if (i != 4)
+    {
+      dprint (2, (debugfile, "%s:%d [mutt_decode_base64()]: "
+                 "didn't get a multiple of 4 chars.\n", __FILE__, __LINE__));
+      break;
+    }
+
+    c1 = base64val (buf[0]);
+    c2 = base64val (buf[1]);
+    ch = (c1 << 2) | (c2 >> 4);
+
+    if (cr && ch != '\n') 
+      bufi[l++] = '\r';
+
+    cr = 0;
+      
+    if (istext && ch == '\r')
+      cr = 1;
+    else
+      bufi[l++] = ch;
+
+    if (buf[2] == '=')
+      break;
+    c3 = base64val (buf[2]);
+    ch = ((c2 & 0xf) << 4) | (c3 >> 2);
+
+    if (cr && ch != '\n')
+      bufi[l++] = '\r';
+
+    cr = 0;
+
+    if (istext && ch == '\r')
+      cr = 1;
+    else
+      bufi[l++] = ch;
+
+    if (buf[3] == '=') break;
+    c4 = base64val (buf[3]);
+    ch = ((c3 & 0x3) << 6) | c4;
+
+    if (cr && ch != '\n')
+      bufi[l++] = '\r';
+    cr = 0;
+
+    if (istext && ch == '\r')
+      cr = 1;
+    else
+      bufi[l++] = ch;
+    
+    if (l + 8 >= sizeof (bufi))
+      mutt_convert_to_state (cd, bufi, &l, s);
+  }
+
+  if (cr) bufi[l++] = '\r';
+
+  mutt_convert_to_state (cd, bufi, &l, s);
+  mutt_convert_to_state (cd, 0, 0, s);
+
+  state_reset_prefix(s);
+}
+
+unsigned char decode_byte (char ch)
+{
+  if (ch == 96)
+    return 0;
+  return ch - 32;
+}
+
+void mutt_decode_uuencoded (STATE *s, long len, int istext, iconv_t cd)
+{
+  char tmps[SHORT_STRING];
+  char linelen, c, l, out;
+  char *pt;
+  char bufi[BUFI_SIZE];
+  size_t k = 0;
+
+  if(istext)
+    state_set_prefix(s);
+  
+  while(len > 0)
+  {
+    if ((fgets(tmps, sizeof(tmps), s->fpin)) == NULL)
+      return;
+    len -= mutt_strlen(tmps);
+    if ((!mutt_strncmp (tmps, "begin", 5)) && ISSPACE (tmps[5]))
+      break;
+  }
+  while(len > 0)
+  {
+    if ((fgets(tmps, sizeof(tmps), s->fpin)) == NULL)
+      return;
+    len -= mutt_strlen(tmps);
+    if (!mutt_strncmp (tmps, "end", 3))
+      break;
+    pt = tmps;
+    linelen = decode_byte (*pt);
+    pt++;
+    for (c = 0; c < linelen;)
+    {
+      for (l = 2; l <= 6; l += 2)
+      {
+       out = decode_byte (*pt) << l;
+       pt++;
+       out |= (decode_byte (*pt) >> (6 - l));
+       bufi[k++] = out;
+       c++;
+       if (c == linelen)
+         break;
+      }
+      mutt_convert_to_state (cd, bufi, &k, s);
+      pt++;
+    }
+  }
+
+  mutt_convert_to_state (cd, bufi, &k, s);
+  mutt_convert_to_state (cd, 0, 0, s);
+  
+  state_reset_prefix(s);
+}
+
+/* ----------------------------------------------------------------------------
+ * A (not so) minimal implementation of RFC1563.
+ */
+
+#define IndentSize (4)
+    
+enum { RICH_PARAM=0, RICH_BOLD, RICH_UNDERLINE, RICH_ITALIC, RICH_NOFILL, 
+  RICH_INDENT, RICH_INDENT_RIGHT, RICH_EXCERPT, RICH_CENTER, RICH_FLUSHLEFT,
+  RICH_FLUSHRIGHT, RICH_COLOR, RICH_LAST_TAG };
+
+static struct {
+  const char *tag_name;
+  int index;
+} EnrichedTags[] = {
+  { "param",           RICH_PARAM },
+  { "bold",            RICH_BOLD },
+  { "italic",          RICH_ITALIC },
+  { "underline",       RICH_UNDERLINE },
+  { "nofill",          RICH_NOFILL },
+  { "excerpt",         RICH_EXCERPT },
+  { "indent",          RICH_INDENT },
+  { "indentright",     RICH_INDENT_RIGHT },
+  { "center",          RICH_CENTER },
+  { "flushleft",       RICH_FLUSHLEFT },
+  { "flushright",      RICH_FLUSHRIGHT },
+  { "flushboth",       RICH_FLUSHLEFT },
+  { "color",           RICH_COLOR },
+  { "x-color",         RICH_COLOR },
+  { NULL,              -1 }
+};
+
+struct enriched_state
+{
+  char *buffer;
+  char *line;
+  char *param;
+  size_t buff_len;
+  size_t line_len;
+  size_t line_used;
+  size_t line_max;
+  size_t indent_len;
+  size_t word_len;
+  size_t buff_used;
+  size_t param_used;
+  size_t param_len;
+  int tag_level[RICH_LAST_TAG];
+  int WrapMargin;
+  STATE *s;
+};
+
+static void enriched_wrap (struct enriched_state *stte)
+{
+  int x;
+  int extra;
+
+  if (stte->line_len)
+  {
+    if (stte->tag_level[RICH_CENTER] || stte->tag_level[RICH_FLUSHRIGHT])
+    {
+      /* Strip trailing white space */
+      size_t y = stte->line_used - 1;
+
+      while (y && ISSPACE (stte->line[y]))
+      {
+       stte->line[y] = '\0';
+       y--;
+       stte->line_used--;
+       stte->line_len--;
+      }
+      if (stte->tag_level[RICH_CENTER])
+      {
+       /* Strip leading whitespace */
+       y = 0;
+
+       while (stte->line[y] && ISSPACE (stte->line[y]))
+         y++;
+       if (y)
+       {
+         size_t z;
+
+         for (z = y ; z <= stte->line_used; z++)
+         {
+           stte->line[z - y] = stte->line[z];
+         }
+
+         stte->line_len -= y;
+         stte->line_used -= y;
+       }
+      }
+    }
+
+    extra = stte->WrapMargin - stte->line_len - stte->indent_len -
+      (stte->tag_level[RICH_INDENT_RIGHT] * IndentSize);
+    if (extra > 0) 
+    {
+      if (stte->tag_level[RICH_CENTER]) 
+      {
+       x = extra / 2;
+       while (x)
+       {
+         state_putc (' ', stte->s);
+         x--;
+       }
+      } 
+      else if (stte->tag_level[RICH_FLUSHRIGHT])
+      {
+       x = extra-1;
+       while (x)
+       {
+         state_putc (' ', stte->s);
+         x--;
+       }
+      }
+    }
+    state_puts (stte->line, stte->s);
+  }
+
+  state_putc ('\n', stte->s);
+  stte->line[0] = '\0';
+  stte->line_len = 0;
+  stte->line_used = 0;
+  stte->indent_len = 0;
+  if (stte->s->prefix)
+  {
+    state_puts (stte->s->prefix, stte->s);
+    stte->indent_len += mutt_strlen (stte->s->prefix);
+  }
+
+  if (stte->tag_level[RICH_EXCERPT])
+  {
+    x = stte->tag_level[RICH_EXCERPT];
+    while (x) 
+    {
+      if (stte->s->prefix)
+      {
+       state_puts (stte->s->prefix, stte->s);
+           stte->indent_len += mutt_strlen (stte->s->prefix);
+      }
+      else
+      {
+       state_puts ("> ", stte->s);
+       stte->indent_len += mutt_strlen ("> ");
+      }
+      x--;
+    }
+  }
+  else
+    stte->indent_len = 0;
+  if (stte->tag_level[RICH_INDENT])
+  {
+    x = stte->tag_level[RICH_INDENT] * IndentSize;
+    stte->indent_len += x;
+    while (x) 
+    {
+      state_putc (' ', stte->s);
+      x--;
+    }
+  }
+}
+
+static void enriched_flush (struct enriched_state *stte, int wrap)
+{
+  if (!stte->tag_level[RICH_NOFILL] && (stte->line_len + stte->word_len > 
+      (stte->WrapMargin - (stte->tag_level[RICH_INDENT_RIGHT] * IndentSize) - 
+       stte->indent_len)))
+    enriched_wrap (stte);
+
+  if (stte->buff_used)
+  {
+    stte->buffer[stte->buff_used] = '\0';
+    stte->line_used += stte->buff_used;
+    if (stte->line_used > stte->line_max)
+    {
+      stte->line_max = stte->line_used;
+      safe_realloc (&stte->line, stte->line_max + 1);
+    }
+    strcat (stte->line, stte->buffer); /* __STRCAT_CHECKED__ */
+    stte->line_len += stte->word_len;
+    stte->word_len = 0;
+    stte->buff_used = 0;
+  }
+  if (wrap) 
+    enriched_wrap(stte);
+}
+
+
+static void enriched_putc (int c, struct enriched_state *stte)
+{
+  if (stte->tag_level[RICH_PARAM]) 
+  {
+    if (stte->tag_level[RICH_COLOR]) 
+    {
+      if (stte->param_used + 1 >= stte->param_len)
+       safe_realloc (&stte->param, (stte->param_len += STRING));
+
+      stte->param[stte->param_used++] = c;
+    }
+    return; /* nothing to do */
+  }
+
+  /* see if more space is needed (plus extra for possible rich characters) */
+  if (stte->buff_len < stte->buff_used + 3)
+  {
+    stte->buff_len += LONG_STRING;
+    safe_realloc (&stte->buffer, stte->buff_len + 1);
+  }
+
+  if ((!stte->tag_level[RICH_NOFILL] && ISSPACE (c)) || c == '\0' )
+  {
+    if (c == '\t')
+      stte->word_len += 8 - (stte->line_len + stte->word_len) % 8;
+    else
+      stte->word_len++;
+    
+    stte->buffer[stte->buff_used++] = c;
+    enriched_flush (stte, 0);
+  }
+  else
+  {
+    if (stte->s->flags & M_DISPLAY)
+    {
+      if (stte->tag_level[RICH_BOLD])
+      {
+       stte->buffer[stte->buff_used++] = c;
+       stte->buffer[stte->buff_used++] = '\010';
+       stte->buffer[stte->buff_used++] = c;
+      }
+      else if (stte->tag_level[RICH_UNDERLINE])
+      {
+
+       stte->buffer[stte->buff_used++] = '_';
+       stte->buffer[stte->buff_used++] = '\010';
+       stte->buffer[stte->buff_used++] = c;
+      }
+      else if (stte->tag_level[RICH_ITALIC])
+      {
+       stte->buffer[stte->buff_used++] = c;
+       stte->buffer[stte->buff_used++] = '\010';
+       stte->buffer[stte->buff_used++] = '_';
+      }
+      else
+      {
+       stte->buffer[stte->buff_used++] = c;
+      }
+    }
+    else
+    {
+      stte->buffer[stte->buff_used++] = c;
+    }
+    stte->word_len++;
+  }
+}
+
+static void enriched_puts (char *s, struct enriched_state *stte)
+{
+  char *c;
+
+  if (stte->buff_len < stte->buff_used + mutt_strlen(s))
+  {
+    stte->buff_len += LONG_STRING;
+    safe_realloc (&stte->buffer, stte->buff_len + 1);
+  }
+  c = s;
+  while (*c)
+  {
+    stte->buffer[stte->buff_used++] = *c;
+    c++;
+  }
+}
+
+static void enriched_set_flags (const char *tag, struct enriched_state *stte)
+{
+  const char *tagptr = tag;
+  int i, j;
+
+  if (*tagptr == '/')
+    tagptr++;
+  
+  for (i = 0, j = -1; EnrichedTags[i].tag_name; i++)
+    if (ascii_strcasecmp (EnrichedTags[i].tag_name,tagptr) == 0)
+    {
+      j = EnrichedTags[i].index;
+      break;
+    }
+
+  if (j != -1)
+  {
+    if (j == RICH_CENTER || j == RICH_FLUSHLEFT || j == RICH_FLUSHRIGHT)
+      enriched_flush (stte, 1);
+
+    if (*tag == '/')
+    {
+      if (stte->tag_level[j]) /* make sure not to go negative */
+       stte->tag_level[j]--;
+      if ((stte->s->flags & M_DISPLAY) && j == RICH_PARAM && stte->tag_level[RICH_COLOR])
+      {
+       stte->param[stte->param_used] = '\0';
+       if (!ascii_strcasecmp(stte->param, "black"))
+       {
+         enriched_puts("\033[30m", stte);
+       }
+       else if (!ascii_strcasecmp(stte->param, "red"))
+       {
+         enriched_puts("\033[31m", stte);
+       }
+       else if (!ascii_strcasecmp(stte->param, "green"))
+       {
+         enriched_puts("\033[32m", stte);
+       }
+       else if (!ascii_strcasecmp(stte->param, "yellow"))
+       {
+         enriched_puts("\033[33m", stte);
+       }
+       else if (!ascii_strcasecmp(stte->param, "blue"))
+       {
+         enriched_puts("\033[34m", stte);
+       }
+       else if (!ascii_strcasecmp(stte->param, "magenta"))
+       {
+         enriched_puts("\033[35m", stte);
+       }
+       else if (!ascii_strcasecmp(stte->param, "cyan"))
+       {
+         enriched_puts("\033[36m", stte);
+       }
+       else if (!ascii_strcasecmp(stte->param, "white"))
+       {
+         enriched_puts("\033[37m", stte);
+       }
+      }
+      if ((stte->s->flags & M_DISPLAY) && j == RICH_COLOR)
+      {
+       enriched_puts("\033[0m", stte);
+      }
+
+      /* flush parameter buffer when closing the tag */
+      if (j == RICH_PARAM)
+      {
+       stte->param_used = 0;
+       stte->param[0] = '\0';
+      }
+    }
+    else
+      stte->tag_level[j]++;
+
+    if (j == RICH_EXCERPT)
+      enriched_flush(stte, 1);
+  }
+}
+
+void text_enriched_handler (BODY *a, STATE *s)
+{
+  enum {
+    TEXT, LANGLE, TAG, BOGUS_TAG, NEWLINE, ST_EOF, DONE
+  } state = TEXT;
+
+  long bytes = a->length;
+  struct enriched_state stte;
+  int c = 0;
+  int tag_len = 0;
+  char tag[LONG_STRING + 1];
+
+  memset (&stte, 0, sizeof (stte));
+  stte.s = s;
+  stte.WrapMargin = ((s->flags & M_DISPLAY) ? (COLS-4) : ((COLS-4)<72)?(COLS-4):72);
+  stte.line_max = stte.WrapMargin * 4;
+  stte.line = (char *) safe_calloc (1, stte.line_max + 1);
+  stte.param = (char *) safe_calloc (1, STRING);
+
+  stte.param_len = STRING;
+  stte.param_used = 0;
+
+  if (s->prefix)
+  {
+    state_puts (s->prefix, s);
+    stte.indent_len += mutt_strlen (s->prefix);
+  }
+
+  while (state != DONE)
+  {
+    if (state != ST_EOF)
+    {
+      if (!bytes || (c = fgetc (s->fpin)) == EOF)
+       state = ST_EOF;
+      else
+       bytes--;
+    }
+
+    switch (state)
+    {
+      case TEXT :
+       switch (c)
+       {
+         case '<' :
+           state = LANGLE;
+           break;
+
+         case '\n' :
+           if (stte.tag_level[RICH_NOFILL])
+           {
+             enriched_flush (&stte, 1);
+           }
+           else 
+           {
+             enriched_putc (' ', &stte);
+             state = NEWLINE;
+           }
+           break;
+
+         default:
+           enriched_putc (c, &stte);
+       }
+       break;
+
+      case LANGLE :
+       if (c == '<')
+       {
+         enriched_putc (c, &stte);
+         state = TEXT;
+         break;
+       }
+       else
+       {
+         tag_len = 0;
+         state = TAG;
+       }
+       /* Yes, fall through (it wasn't a <<, so this char is first in TAG) */
+      case TAG :
+       if (c == '>')
+       {
+         tag[tag_len] = '\0';
+         enriched_set_flags (tag, &stte);
+         state = TEXT;
+       }
+       else if (tag_len < LONG_STRING)  /* ignore overly long tags */
+         tag[tag_len++] = c;
+       else
+         state = BOGUS_TAG;
+       break;
+
+      case BOGUS_TAG :
+       if (c == '>')
+         state = TEXT;
+       break;
+
+      case NEWLINE :
+       if (c == '\n')
+         enriched_flush (&stte, 1);
+       else
+       {
+         ungetc (c, s->fpin);
+         bytes++;
+         state = TEXT;
+       }
+       break;
+
+      case ST_EOF :
+       enriched_putc ('\0', &stte);
+        enriched_flush (&stte, 1);
+       state = DONE;
+       break;
+
+      case DONE: /* not reached, but gcc complains if this is absent */
+       break;
+    }
+  }
+
+  state_putc ('\n', s); /* add a final newline */
+
+  FREE (&(stte.buffer));
+  FREE (&(stte.line));
+  FREE (&(stte.param));
+}                                                                              
+
+/*
+ * An implementation of RFC 2646.
+ *
+ * NOTE: This still has to be made UTF-8 aware.
+ *
+ */
+
+#define FLOWED_MAX 77
+
+static void flowed_quote (STATE *s, int level)
+{
+  int i;
+  
+  if (s->prefix)
+  {
+    if (option (OPTTEXTFLOWED))
+      level++;
+    else
+      state_puts (s->prefix, s);
+  }
+  
+  for (i = 0; i < level; i++)
+    state_putc ('>', s);
+}
+
+static int flowed_maybe_quoted (char *cont)
+{
+  return regexec ((regex_t *) QuoteRegexp.rx, cont, 0, NULL, 0) == 0;
+}
+
+static void flowed_stuff (STATE *s, char *cont, int level)
+{
+  if (!option (OPTTEXTFLOWED) && !(s->flags & M_DISPLAY))
+    return;
+
+  if (s->flags & M_DISPLAY)
+  {
+    /* 
+     * Hack: If we are in the beginning of the line and there is 
+     * some text on the line which looks like it's quoted, turn off 
+     * ANSI colors, so quote coloring doesn't affect this line. 
+     */
+    if (*cont && !level && !mutt_strcmp (Pager, "builtin") && flowed_maybe_quoted (cont))
+      state_puts ("\033[0m",s);
+  }
+  else if ((!(s->flags & M_PRINTING)) && 
+          ((*cont == ' ') || (*cont == '>') || (!level && !mutt_strncmp (cont, "From ", 5))))
+    state_putc (' ', s);
+}
+
+static char *flowed_skip_indent (char *prefix, char *cont)
+{
+  for (; *cont == ' ' || *cont == '\t'; cont++)
+    *prefix++ = *cont;
+  *prefix = '\0';
+  return cont;
+}
+
+static int flowed_visual_strlen (char *l, int i)
+{
+  int j;
+  for (j = 0; *l; l++)
+  {
+    if (*l == '\t')
+      j += 8 - ((i + j) % 8);
+    else
+      j++;
+  }
+  
+  return j;
+}
+
+static void text_plain_flowed_handler (BODY *a, STATE *s)
+{
+  char line[LONG_STRING];
+  char indent[LONG_STRING];
+
+  int  quoted = -1;
+  int  last_quoted;
+  int  full = 1;
+  int  last_full;
+  int  col = 0, tmpcol;
+
+  int  i_add = 0;
+  int  add = 0;
+  int  soft = 0;
+  int  l, rl;
+  
+  int  flowed_max;
+  int  bytes = a->length;
+  int  actually_wrap = 0;
+  
+  char *cont = NULL;
+  char *tail = NULL;
+  char *lc = NULL;
+  char *t;
+  
+  *indent = '\0';
+  
+  if (s->prefix)
+    add = 1;
+  
+  if ((flowed_max = FLOWED_MAX) > COLS - 3)
+    flowed_max = COLS - 3;
+  if (flowed_max > COLS - WrapMargin)
+    flowed_max = COLS - WrapMargin;
+  if (flowed_max <= 0)
+    flowed_max = COLS;
+    
+
+  while (bytes > 0 && fgets (line, sizeof (line), s->fpin))
+  {
+    bytes        -= strlen (line);
+    tail          = NULL;
+
+    last_full     = full;
+    
+    /* 
+     * If the last line wasn't fully read, this is the
+     * tail of some line. 
+     */
+    actually_wrap = !last_full; 
+    
+    if ((t = strrchr (line, '\r')) || (t = strrchr (line, '\n')))
+    {
+      *t   = '\0';
+      full = 1;
+    }
+    else if ((t = strrchr (line, ' ')) || (t = strrchr (line, '\t')))
+    {
+      /* 
+       * Bad: We have a line of more than LONG_STRING characters.
+       * (Which SHOULD NOT happen, since lines SHOULD be <= 79
+       * characters long.)
+       * 
+       * Try to simulate a soft line break at a word boundary.
+       * Handle the rest of the line next time.
+       * 
+       * Give up when we have a single word which is longer than
+       * LONG_STRING characters.  It will just be split into parts,
+       * with a hard line break in between. 
+       */
+
+      full = 0;
+      l    = strlen (t + 1);
+      t[0] = ' ';
+      t[1] = '\0';
+
+      if (l)
+      {
+       fseek (s->fpin, -l, SEEK_CUR);
+       bytes += l;
+      }
+    }
+    else
+      full = 0;
+
+    last_quoted = quoted;
+
+    if (last_full)
+    {
+      /* 
+       * We are in the beginning of a new line. Determine quote level
+       * and indentation prefix 
+       */
+      for (quoted = 0; line[quoted] == '>'; quoted++)
+       ;
+      
+      cont = line + quoted;
+      
+      /* undo space stuffing */
+      if (*cont == ' ')
+       cont++;
+
+      /* If there is an indentation, record it. */
+      cont  = flowed_skip_indent (indent, cont);
+      i_add = flowed_visual_strlen (indent, quoted + add);
+    }
+    else
+    {
+      /* 
+       * This is just the tail of some over-long line. Keep
+       * indentation and quote levels.  Don't unstuff.
+       */
+      cont = line;
+    }
+
+    /* If we have a change in quoting depth, wrap. */
+
+    if (col && last_quoted != quoted && last_quoted >= 0)
+    {
+      state_putc ('\n', s);
+      col = 0;
+    }
+    
+    do 
+    {
+      if (tail)
+       cont = tail;
+
+      SKIPWS (cont);
+      
+      tail = NULL;
+      soft = 0;
+      
+      /* try to find a point for word wrapping */
+
+    retry_wrap:
+      l  = flowed_visual_strlen (cont, quoted + i_add + add + col);
+      rl = mutt_strlen (cont);
+      if (quoted + i_add + add + col + l > flowed_max)
+      {
+       actually_wrap = 1;
+
+       for (tmpcol = quoted + i_add + add + col, t = cont;
+            *t && tmpcol < flowed_max; t++)
+       {
+         if (*t == ' ' || *t == '\t')
+           tail = t;
+         if (*t == '\t')
+           tmpcol = (tmpcol & ~7) + 8;
+         else
+           tmpcol++;
+       }
+       
+       if (tail)
+       {
+         *tail++ = '\0';
+         soft = 2;
+       }
+      }
+
+      /* We seem to be desperate.  Get me a new line, and retry. */
+      if (!tail && (quoted + add + col + i_add + l > flowed_max) && col)
+      {
+       state_putc ('\n', s);
+       col = 0;
+       goto retry_wrap;
+      }
+
+      /* Detect soft line breaks. */
+      if (!soft && ascii_strcmp (cont, "-- "))
+      {
+       lc = strrchr (cont, ' ');
+       if (lc && lc[1] == '\0')
+         soft = 1;
+      }
+
+      /* 
+       * If we are in the beginning of an output line, do quoting
+       * and stuffing. 
+       * 
+       * We have to temporarily assemble the line since display
+       * stuffing (i.e., turning off quote coloring) may depend on
+       * the line's actual content.  You never know what people put
+       * into their regular expressions. 
+       */
+      if (!col)
+      {
+       char tmp[LONG_STRING];
+       snprintf (tmp, sizeof (tmp), "%s%s", indent, cont);
+
+       flowed_quote (s, quoted);
+       flowed_stuff (s, tmp, quoted + add);
+
+       state_puts (indent, s);
+      }
+
+      /* output the text */
+      state_puts (cont, s);
+      col += flowed_visual_strlen (cont, quoted + i_add + add + col);
+      
+      /* possibly indicate a soft line break */
+      if (soft == 2)
+      {
+       state_putc (' ', s);
+       col++;
+      }
+      
+      /* 
+       * Wrap if this display line corresponds to a 
+       * text line. Don't wrap if we changed the line.
+       */
+      if (!soft || (!actually_wrap && full))
+      {
+       state_putc ('\n', s);
+       col = 0;
+      }
+    }
+    while (tail);
+  }
+
+  if (col)
+    state_putc ('\n', s);
+  
+}
+
+
+
+
+
+
+#define TXTHTML     1
+#define TXTPLAIN    2
+#define TXTENRICHED 3
+
+static void alternative_handler (BODY *a, STATE *s)
+{
+  BODY *choice = NULL;
+  BODY *b;
+  LIST *t;
+  char buf[STRING];
+  int type = 0;
+  int mustfree = 0;
+
+  if (a->encoding == ENCBASE64 || a->encoding == ENCQUOTEDPRINTABLE ||
+      a->encoding == ENCUUENCODED)
+  {
+    struct stat st;
+    mustfree = 1;
+    fstat (fileno (s->fpin), &st);
+    b = mutt_new_body ();
+    b->length = (long) st.st_size;
+    b->parts = mutt_parse_multipart (s->fpin,
+                 mutt_get_parameter ("boundary", a->parameter),
+                 (long) st.st_size, ascii_strcasecmp ("digest", a->subtype) == 0);
+  }
+  else
+    b = a;
+
+  a = b;
+
+  /* First, search list of prefered types */
+  t = AlternativeOrderList;
+  while (t && !choice)
+  {
+    char *c;
+    int btlen;  /* length of basetype */
+    int wild;  /* do we have a wildcard to match all subtypes? */
+
+    c = strchr (t->data, '/');
+    if (c)
+    {
+      wild = (c[1] == '*' && c[2] == 0);
+      btlen = c - t->data;
+    }
+    else
+    {
+      wild = 1;
+      btlen = mutt_strlen (t->data);
+    }
+
+    if (a && a->parts) 
+      b = a->parts;
+    else
+      b = a;
+    while (b)
+    {
+      const char *bt = TYPE(b);
+      if (!ascii_strncasecmp (bt, t->data, btlen) && bt[btlen] == 0)
+      {
+       /* the basetype matches */
+       if (wild || !ascii_strcasecmp (t->data + btlen + 1, b->subtype))
+       {
+         choice = b;
+       }
+      }
+      b = b->next;
+    }
+    t = t->next;
+  }
+
+  /* Next, look for an autoviewable type */
+  if (!choice)
+  {
+    if (a && a->parts) 
+      b = a->parts;
+    else
+      b = a;
+    while (b)
+    {
+      snprintf (buf, sizeof (buf), "%s/%s", TYPE (b), b->subtype);
+      if (mutt_is_autoview (b, buf))
+      {
+       rfc1524_entry *entry = rfc1524_new_entry ();
+
+       if (rfc1524_mailcap_lookup (b, buf, entry, M_AUTOVIEW))
+       {
+         choice = b;
+       }
+       rfc1524_free_entry (&entry);
+      }
+      b = b->next;
+    }
+  }
+
+  /* Then, look for a text entry */
+  if (!choice)
+  {
+    if (a && a->parts) 
+      b = a->parts;
+    else
+      b = a;
+    while (b)
+    {
+      if (b->type == TYPETEXT)
+      {
+       if (! ascii_strcasecmp ("plain", b->subtype) && type <= TXTPLAIN)
+       {
+         choice = b;
+         type = TXTPLAIN;
+       }
+       else if (! ascii_strcasecmp ("enriched", b->subtype) && type <= TXTENRICHED)
+       {
+         choice = b;
+         type = TXTENRICHED;
+       }
+       else if (! ascii_strcasecmp ("html", b->subtype) && type <= TXTHTML)
+       {
+         choice = b;
+         type = TXTHTML;
+       }
+      }
+      b = b->next;
+    }
+  }
+
+  /* Finally, look for other possibilities */
+  if (!choice)
+  {
+    if (a && a->parts) 
+      b = a->parts;
+    else
+      b = a;
+    while (b)
+    {
+      if (mutt_can_decode (b))
+       choice = b;
+      b = b->next;
+    }
+  }
+
+  if (choice)
+  {
+    if (s->flags & M_DISPLAY && !option (OPTWEED))
+    {
+      fseek (s->fpin, choice->hdr_offset, 0);
+      mutt_copy_bytes(s->fpin, s->fpout, choice->offset-choice->hdr_offset);
+    }
+    mutt_body_handler (choice, s);
+  }
+  else if (s->flags & M_DISPLAY)
+  {
+    /* didn't find anything that we could display! */
+    state_mark_attach (s);
+    state_puts(_("[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"), s);
+  }
+
+  if (mustfree)
+    mutt_free_body(&a);
+}
+
+/* handles message/rfc822 body parts */
+void message_handler (BODY *a, STATE *s)
+{
+  struct stat st;
+  BODY *b;
+  long off_start;
+
+  off_start = ftell (s->fpin);
+  if (a->encoding == ENCBASE64 || a->encoding == ENCQUOTEDPRINTABLE || 
+      a->encoding == ENCUUENCODED)
+  {
+    fstat (fileno (s->fpin), &st);
+    b = mutt_new_body ();
+    b->length = (long) st.st_size;
+    b->parts = mutt_parse_messageRFC822 (s->fpin, b);
+  }
+  else
+    b = a;
+
+  if (b->parts)
+  {
+    mutt_copy_hdr (s->fpin, s->fpout, off_start, b->parts->offset,
+       (((s->flags & M_WEED) || ((s->flags & (M_DISPLAY|M_PRINTING)) && option (OPTWEED))) ? (CH_WEED | CH_REORDER) : 0) |
+       (s->prefix ? CH_PREFIX : 0) | CH_DECODE | CH_FROM, s->prefix);
+
+    if (s->prefix)
+      state_puts (s->prefix, s);
+    state_putc ('\n', s);
+
+    mutt_body_handler (b->parts, s);
+  }
+
+  if (a->encoding == ENCBASE64 || a->encoding == ENCQUOTEDPRINTABLE ||
+      a->encoding == ENCUUENCODED)
+    mutt_free_body (&b);
+}
+
+/* returns 1 if decoding the attachment will produce output */
+int mutt_can_decode (BODY *a)
+{
+  char type[STRING];
+
+  snprintf (type, sizeof (type), "%s/%s", TYPE (a), a->subtype);
+  if (mutt_is_autoview (a, type))
+    return (rfc1524_mailcap_lookup (a, type, NULL, M_AUTOVIEW));
+  else if (a->type == TYPETEXT)
+    return (1);
+  else if (a->type == TYPEMESSAGE)
+    return (1);
+  else if (a->type == TYPEMULTIPART)
+  {
+    BODY *p;
+
+    if (WithCrypto)
+    {
+      if (ascii_strcasecmp (a->subtype, "signed") == 0 ||
+         ascii_strcasecmp (a->subtype, "encrypted") == 0)
+        return (1);
+    }
+
+    for (p = a->parts; p; p = p->next)
+    {
+      if (mutt_can_decode (p))
+        return (1);
+    }
+    
+  }
+  else if (WithCrypto && a->type == TYPEAPPLICATION)
+  {
+    if ((WithCrypto & APPLICATION_PGP) && mutt_is_application_pgp(a))
+      return (1);
+    if ((WithCrypto & APPLICATION_SMIME) && mutt_is_application_smime(a))
+      return (1);
+  }
+
+  return (0);
+}
+
+void multipart_handler (BODY *a, STATE *s)
+{
+  BODY *b, *p;
+  char length[5];
+  struct stat st;
+  int count;
+
+  if (a->encoding == ENCBASE64 || a->encoding == ENCQUOTEDPRINTABLE ||
+      a->encoding == ENCUUENCODED)
+  {
+    fstat (fileno (s->fpin), &st);
+    b = mutt_new_body ();
+    b->length = (long) st.st_size;
+    b->parts = mutt_parse_multipart (s->fpin,
+                 mutt_get_parameter ("boundary", a->parameter),
+                 (long) st.st_size, ascii_strcasecmp ("digest", a->subtype) == 0);
+  }
+  else
+    b = a;
+
+  for (p = b->parts, count = 1; p; p = p->next, count++)
+  {
+    if (s->flags & M_DISPLAY)
+    {
+      state_mark_attach (s);
+      state_printf (s, _("[-- Attachment #%d"), count);
+      if (p->description || p->filename || p->form_name)
+      {
+       state_puts (": ", s);
+       state_puts (p->description ? p->description :
+                   p->filename ? p->filename : p->form_name, s);
+      }
+      state_puts (" --]\n", s);
+
+      mutt_pretty_size (length, sizeof (length), p->length);
+      
+      state_mark_attach (s);
+      state_printf (s, _("[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"),
+                   TYPE (p), p->subtype, ENCODING (p->encoding), length);
+      if (!option (OPTWEED))
+      {
+       fseek (s->fpin, p->hdr_offset, 0);
+       mutt_copy_bytes(s->fpin, s->fpout, p->offset-p->hdr_offset);
+      }
+      else
+       state_putc ('\n', s);
+    }
+    else
+    {
+      if (p->description && mutt_can_decode (p))
+       state_printf (s, "Content-Description: %s\n", p->description);
+
+      if (p->form_name)
+       state_printf(s, "%s: \n", p->form_name);
+
+    }
+    mutt_body_handler (p, s);
+    state_putc ('\n', s);
+  }
+
+  if (a->encoding == ENCBASE64 || a->encoding == ENCQUOTEDPRINTABLE ||
+      a->encoding == ENCUUENCODED)
+    mutt_free_body (&b);
+}
+
+void autoview_handler (BODY *a, STATE *s)
+{
+  rfc1524_entry *entry = rfc1524_new_entry ();
+  char buffer[LONG_STRING];
+  char type[STRING];
+  char command[LONG_STRING];
+  char tempfile[_POSIX_PATH_MAX] = "";
+  char *fname;
+  FILE *fpin = NULL;
+  FILE *fpout = NULL;
+  FILE *fperr = NULL;
+  int piped = FALSE;
+  pid_t thepid;
+
+  snprintf (type, sizeof (type), "%s/%s", TYPE (a), a->subtype);
+  rfc1524_mailcap_lookup (a, type, entry, M_AUTOVIEW);
+
+  fname = safe_strdup (a->filename);
+  mutt_sanitize_filename (fname, 1);
+  rfc1524_expand_filename (entry->nametemplate, fname, tempfile, sizeof (tempfile));
+  FREE (&fname);
+
+  if (entry->command)
+  {
+    strfcpy (command, entry->command, sizeof (command));
+
+    /* rfc1524_expand_command returns 0 if the file is required */
+    piped = rfc1524_expand_command (a, tempfile, type, command, sizeof (command));
+
+    if (s->flags & M_DISPLAY)
+    {
+      state_mark_attach (s);
+      state_printf (s, _("[-- Autoview using %s --]\n"), command);
+      mutt_message(_("Invoking autoview command: %s"),command);
+    }
+
+    if ((fpin = safe_fopen (tempfile, "w+")) == NULL)
+    {
+      mutt_perror ("fopen");
+      rfc1524_free_entry (&entry);
+      return;
+    }
+    
+    mutt_copy_bytes (s->fpin, fpin, a->length);
+
+    if(!piped)
+    {
+      safe_fclose (&fpin);
+      thepid = mutt_create_filter (command, NULL, &fpout, &fperr);
+    }
+    else
+    {
+      unlink (tempfile);
+      fflush (fpin);
+      rewind (fpin);
+      thepid = mutt_create_filter_fd (command, NULL, &fpout, &fperr,
+                                     fileno(fpin), -1, -1);
+    }
+
+    if (thepid < 0)
+    {
+      mutt_perror _("Can't create filter");
+      if (s->flags & M_DISPLAY)
+      {
+       state_mark_attach (s);
+       state_printf (s, _("[-- Can't run %s. --]\n"), command);
+      }
+      goto bail;
+    }
+    
+    if (s->prefix)
+    {
+      while (fgets (buffer, sizeof(buffer), fpout) != NULL)
+      {
+        state_puts (s->prefix, s);
+        state_puts (buffer, s);
+      }
+      /* check for data on stderr */
+      if (fgets (buffer, sizeof(buffer), fperr)) 
+      {
+       if (s->flags & M_DISPLAY)
+       {
+         state_mark_attach (s);
+         state_printf (s, _("[-- Autoview stderr of %s --]\n"), command);
+       }
+
+       state_puts (s->prefix, s);
+       state_puts (buffer, s);
+       while (fgets (buffer, sizeof(buffer), fperr) != NULL)
+       {
+         state_puts (s->prefix, s);
+         state_puts (buffer, s);
+       }
+      }
+    }
+    else
+    {
+      mutt_copy_stream (fpout, s->fpout);
+      /* Check for stderr messages */
+      if (fgets (buffer, sizeof(buffer), fperr))
+      {
+       if (s->flags & M_DISPLAY)
+       {
+         state_mark_attach (s);
+         state_printf (s, _("[-- Autoview stderr of %s --]\n"), 
+                       command);
+       }
+       
+       state_puts (buffer, s);
+       mutt_copy_stream (fperr, s->fpout);
+      }
+    }
+
+  bail:
+    safe_fclose (&fpout);
+    safe_fclose (&fperr);
+
+    mutt_wait_filter (thepid);
+    if (piped)
+      safe_fclose (&fpin);
+    else
+      mutt_unlink (tempfile);
+
+    if (s->flags & M_DISPLAY) 
+      mutt_clear_error ();
+  }
+  rfc1524_free_entry (&entry);
+}
+
+static void external_body_handler (BODY *b, STATE *s)
+{
+  const char *access_type;
+  const char *expiration;
+  time_t expire;
+
+  access_type = mutt_get_parameter ("access-type", b->parameter);
+  if (!access_type)
+  {
+    if (s->flags & M_DISPLAY)
+    {
+      state_mark_attach (s);
+      state_puts (_("[-- Error: message/external-body has no access-type parameter --]\n"), s);
+    }
+    return;
+  }
+
+  expiration = mutt_get_parameter ("expiration", b->parameter);
+  if (expiration)
+    expire = mutt_parse_date (expiration, NULL);
+  else
+    expire = -1;
+
+  if (!ascii_strcasecmp (access_type, "x-mutt-deleted"))
+  {
+    if (s->flags & (M_DISPLAY|M_PRINTING))
+    {
+      char *length;
+      char pretty_size[10];
+      
+      state_mark_attach (s);
+      state_printf (s, _("[-- This %s/%s attachment "),
+              TYPE(b->parts), b->parts->subtype);
+      length = mutt_get_parameter ("length", b->parameter);
+      if (length)
+      {
+       mutt_pretty_size (pretty_size, sizeof (pretty_size),
+                         strtol (length, NULL, 10));
+       state_printf (s, _("(size %s bytes) "), pretty_size);
+      }
+      state_puts (_("has been deleted --]\n"), s);
+
+      if (expire != -1)
+      {
+       state_mark_attach (s);
+       state_printf (s, _("[-- on %s --]\n"), expiration);
+      }
+      if (b->parts->filename)
+      {
+       state_mark_attach (s);
+       state_printf (s, _("[-- name: %s --]\n"), b->parts->filename);
+      }
+
+      mutt_copy_hdr (s->fpin, s->fpout, ftell (s->fpin), b->parts->offset,
+                    (option (OPTWEED) ? (CH_WEED | CH_REORDER) : 0) |
+                    CH_DECODE , NULL);
+    }
+  }
+  else if(expiration && expire < time(NULL))
+  {
+    if (s->flags & M_DISPLAY)
+    {
+      state_mark_attach (s);
+      state_printf (s, _("[-- This %s/%s attachment is not included, --]\n"),
+                   TYPE(b->parts), b->parts->subtype);
+      state_attach_puts (_("[-- and the indicated external source has --]\n"
+                          "[-- expired. --]\n"), s);
+
+      mutt_copy_hdr(s->fpin, s->fpout, ftell (s->fpin), b->parts->offset,
+                   (option (OPTWEED) ? (CH_WEED | CH_REORDER) : 0) |
+                   CH_DECODE, NULL);
+    }
+  }
+  else
+  {
+    if (s->flags & M_DISPLAY)
+    {
+      state_mark_attach (s);
+      state_printf (s,
+                   _("[-- This %s/%s attachment is not included, --]\n"),
+                   TYPE (b->parts), b->parts->subtype);
+      state_mark_attach (s);
+      state_printf (s, 
+                   _("[-- and the indicated access-type %s is unsupported --]\n"),
+                   access_type);
+      mutt_copy_hdr (s->fpin, s->fpout, ftell (s->fpin), b->parts->offset,
+                    (option (OPTWEED) ? (CH_WEED | CH_REORDER) : 0) |
+                    CH_DECODE , NULL);
+    }
+  }
+}
+
+void mutt_decode_attachment (BODY *b, STATE *s)
+{
+  int istext = mutt_is_text_part (b);
+  iconv_t cd = (iconv_t)(-1);
+
+  Quotebuf[0] = '\0';
+
+  if (istext && s->flags & M_CHARCONV)
+  {
+    char *charset = mutt_get_parameter ("charset", b->parameter);
+    if (charset && Charset)
+      cd = mutt_iconv_open (Charset, charset, M_ICONV_HOOK_FROM);
+  }
+
+  fseek (s->fpin, b->offset, 0);
+  switch (b->encoding)
+  {
+    case ENCQUOTEDPRINTABLE:
+      mutt_decode_quoted (s, b->length, istext, cd);
+      break;
+    case ENCBASE64:
+      mutt_decode_base64 (s, b->length, istext, cd);
+      break;
+    case ENCUUENCODED:
+      mutt_decode_uuencoded (s, b->length, istext, cd);
+      break;
+    default:
+      mutt_decode_xbit (s, b->length, istext, cd);
+      break;
+  }
+
+  if (cd != (iconv_t)(-1))
+    iconv_close (cd);
+}
+
+void mutt_body_handler (BODY *b, STATE *s)
+{
+  int decode = 0;
+  int plaintext = 0;
+  FILE *fp = NULL;
+  char tempfile[_POSIX_PATH_MAX];
+  handler_t handler = NULL;
+  long tmpoffset = 0;
+  size_t tmplength = 0;
+  char type[STRING];
+
+  int oflags = s->flags;
+  
+  /* first determine which handler to use to process this part */
+
+  snprintf (type, sizeof (type), "%s/%s", TYPE (b), b->subtype);
+  if (mutt_is_autoview (b, type))
+  {
+    rfc1524_entry *entry = rfc1524_new_entry ();
+
+    if (rfc1524_mailcap_lookup (b, type, entry, M_AUTOVIEW))
+    {
+      handler   = autoview_handler;
+      s->flags &= ~M_CHARCONV;
+    }
+    rfc1524_free_entry (&entry);
+  }
+  else if (b->type == TYPETEXT)
+  {
+    if (ascii_strcasecmp ("plain", b->subtype) == 0)
+    {
+      /* avoid copying this part twice since removing the transfer-encoding is
+       * the only operation needed.
+       */
+      if ((WithCrypto & APPLICATION_PGP) && mutt_is_application_pgp (b))
+       handler = crypt_pgp_application_pgp_handler;
+      else if (ascii_strcasecmp ("flowed", mutt_get_parameter ("format", b->parameter)) == 0)
+       handler = text_plain_flowed_handler;
+      else
+       plaintext = 1;
+    }
+    else if (ascii_strcasecmp ("enriched", b->subtype) == 0)
+      handler = text_enriched_handler;
+    else /* text body type without a handler */
+      plaintext = 1;
+  }
+  else if (b->type == TYPEMESSAGE)
+  {
+    if(mutt_is_message_type(b->type, b->subtype))
+      handler = message_handler;
+    else if (!ascii_strcasecmp ("delivery-status", b->subtype))
+      plaintext = 1;
+    else if (!ascii_strcasecmp ("external-body", b->subtype))
+      handler = external_body_handler;
+  }
+  else if (b->type == TYPEMULTIPART)
+  {
+    char *p;
+
+    if (ascii_strcasecmp ("alternative", b->subtype) == 0)
+      handler = alternative_handler;
+    else if (WithCrypto && ascii_strcasecmp ("signed", b->subtype) == 0)
+    {
+      p = mutt_get_parameter ("protocol", b->parameter);
+
+      if (!p)
+        mutt_error _("Error: multipart/signed has no protocol.");
+      else if (s->flags & M_VERIFY)
+       handler = mutt_signed_handler;
+    }
+    else if ((WithCrypto & APPLICATION_PGP)
+             && mutt_strcasecmp ("encrypted", b->subtype) == 0)
+    {
+      p = mutt_get_parameter ("protocol", b->parameter);
+
+      if (!p)
+        mutt_error _("Error: multipart/encrypted has no protocol parameter!");
+      else if (ascii_strcasecmp ("application/pgp-encrypted", p) == 0)
+        handler = crypt_pgp_encrypted_handler;
+    }
+
+    if (!handler)
+      handler = multipart_handler;
+  }
+  else if (WithCrypto && b->type == TYPEAPPLICATION)
+  {
+    if ((WithCrypto & APPLICATION_PGP) && mutt_is_application_pgp (b))
+      handler = crypt_pgp_application_pgp_handler;
+    if ((WithCrypto & APPLICATION_SMIME) && mutt_is_application_smime(b))
+      handler = crypt_smime_application_smime_handler;
+  }
+
+
+  if (plaintext || handler)
+  {
+    fseek (s->fpin, b->offset, 0);
+
+    /* see if we need to decode this part before processing it */
+    if (b->encoding == ENCBASE64 || b->encoding == ENCQUOTEDPRINTABLE ||
+       b->encoding == ENCUUENCODED || plaintext || 
+       mutt_is_text_part (b))                          /* text subtypes may
+                                                        * require character
+                                                        * set conversion even
+                                                        * with 8bit encoding.
+                                                        */
+    {
+      int origType = b->type;
+      char *savePrefix = NULL;
+
+      if (!plaintext)
+      {
+       /* decode to a tempfile, saving the original destination */
+       fp = s->fpout;
+       mutt_mktemp (tempfile);
+       if ((s->fpout = safe_fopen (tempfile, "w")) == NULL)
+       {
+         mutt_error _("Unable to open temporary file!");
+         goto bail;
+       }
+       /* decoding the attachment changes the size and offset, so save a copy
+        * of the "real" values now, and restore them after processing
+        */
+       tmplength = b->length;
+       tmpoffset = b->offset;
+
+       /* if we are decoding binary bodies, we don't want to prefix each
+        * line with the prefix or else the data will get corrupted.
+        */
+       savePrefix = s->prefix;
+       s->prefix = NULL;
+
+       decode = 1;
+      }
+      else
+       b->type = TYPETEXT;
+
+      mutt_decode_attachment (b, s);
+
+      if (decode)
+      {
+       b->length = ftell (s->fpout);
+       b->offset = 0;
+       fclose (s->fpout);
+
+       /* restore final destination and substitute the tempfile for input */
+       s->fpout = fp;
+       fp = s->fpin;
+       s->fpin = fopen (tempfile, "r");
+       unlink (tempfile);
+
+       /* restore the prefix */
+       s->prefix = savePrefix;
+      }
+
+      b->type = origType;
+    }
+
+    /* process the (decoded) body part */
+    if (handler)
+    {
+      handler (b, s);
+
+      if (decode)
+      {
+       b->length = tmplength;
+       b->offset = tmpoffset;
+
+       /* restore the original source stream */
+       fclose (s->fpin);
+       s->fpin = fp;
+      }
+    }
+  }
+  else if (s->flags & M_DISPLAY)
+  {
+    state_mark_attach (s);
+    state_printf (s, _("[-- %s/%s is unsupported "), TYPE (b), b->subtype);
+    if (!option (OPTVIEWATTACH))
+    {
+      if (km_expand_key (type, sizeof(type),
+                       km_find_func (MENU_PAGER, OP_VIEW_ATTACHMENTS)))
+       fprintf (s->fpout, _("(use '%s' to view this part)"), type);
+      else
+       fputs (_("(need 'view-attachments' bound to key!)"), s->fpout);
+    }
+    fputs (" --]\n", s->fpout);
+  }
+  
+  bail:
+  s->flags = oflags;
+}
diff --git a/hash.c b/hash.c
new file mode 100644 (file)
index 0000000..c0edb30
--- /dev/null
+++ b/hash.c
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ *
+ *     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.
+ */ 
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "mutt.h"
+
+#define SOMEPRIME 149711
+
+int hash_string (const unsigned char *s, int n)
+{
+  int h = 0;
+
+#if 0
+  while (*s)
+    h += *s++;
+#else
+  while (*s)
+    h += (h << 7) + *s++;
+  h = (h * SOMEPRIME) % n;
+  h = (h >= 0) ? h : h + n;
+#endif
+
+  return (h % n);
+}
+
+HASH *hash_create (int nelem)
+{
+  HASH *table = safe_malloc (sizeof (HASH));
+  if (nelem == 0)
+    nelem = 2;
+  table->nelem = nelem;
+  table->curnelem = 0;
+  table->table = safe_calloc (nelem, sizeof (struct hash_elem *));
+  return table;
+}
+
+HASH *hash_resize (HASH *ptr, int nelem)
+{
+  HASH *table;
+  struct hash_elem *elem, *tmp;
+  int i;
+
+  table = hash_create (nelem);
+
+  for (i = 0; i < ptr->nelem; i++)
+  {
+    for (elem = ptr->table[i]; elem; )
+    {
+      tmp = elem;
+      elem = elem->next;
+      hash_insert (table, tmp->key, tmp->data, 1);
+      FREE (&tmp);
+    }
+  }
+  FREE (&ptr->table);
+  FREE (&ptr);
+
+  return table;
+}
+
+/* table        hash table to update
+ * key          key to hash on
+ * data         data to associate with `key'
+ * allow_dup    if nonzero, duplicate keys are allowed in the table 
+ */
+int hash_insert (HASH * table, const char *key, void *data, int allow_dup)
+{
+  struct hash_elem *ptr;
+  int h;
+
+  ptr = (struct hash_elem *) safe_malloc (sizeof (struct hash_elem));
+  h = hash_string ((unsigned char *) key, table->nelem);
+  ptr->key = key;
+  ptr->data = data;
+
+  if (allow_dup)
+  {
+    ptr->next = table->table[h];
+    table->table[h] = ptr;
+    table->curnelem++;
+  }
+  else
+  {
+    struct hash_elem *tmp, *last;
+    int r;
+
+    for (tmp = table->table[h], last = NULL; tmp; last = tmp, tmp = tmp->next)
+    {
+      r = mutt_strcmp (tmp->key, key);
+      if (r == 0)
+      {
+       FREE (&ptr);
+       return (-1);
+      }
+      if (r > 0)
+       break;
+    }
+    if (last)
+      last->next = ptr;
+    else
+      table->table[h] = ptr;
+    ptr->next = tmp;
+    table->curnelem++;
+  }
+  return h;
+}
+
+void *hash_find_hash (const HASH * table, int hash, const char *key)
+{
+  struct hash_elem *ptr = table->table[hash];
+  for (; ptr; ptr = ptr->next)
+  {
+    if (mutt_strcmp (key, ptr->key) == 0)
+      return (ptr->data);
+  }
+  return NULL;
+}
+
+void hash_delete_hash (HASH * table, int hash, const char *key, const void *data,
+                      void (*destroy) (void *))
+{
+  struct hash_elem *ptr = table->table[hash];
+  struct hash_elem **last = &table->table[hash];
+
+  for (; ptr; last = &ptr->next, ptr = ptr->next)
+  {
+    /* if `data' is given, look for a matching ->data member.  this is
+     * required for the case where we have multiple entries with the same
+     * key
+     */
+    if ((data == ptr->data) || (!data && mutt_strcmp (ptr->key, key) == 0))
+    {
+      *last = ptr->next;
+      if (destroy) destroy (ptr->data);
+      FREE (&ptr);
+      table->curnelem--;
+      return;
+    }
+  }
+}
+
+/* ptr         pointer to the hash table to be freed
+ * destroy()   function to call to free the ->data member (optional) 
+ */
+void hash_destroy (HASH **ptr, void (*destroy) (void *))
+{
+  int i;
+  HASH *pptr = *ptr;
+  struct hash_elem *elem, *tmp;
+
+  for (i = 0 ; i < pptr->nelem; i++)
+  {
+    for (elem = pptr->table[i]; elem; )
+    {
+      tmp = elem;
+      elem = elem->next;
+      if (destroy)
+       destroy (tmp->data);
+      FREE (&tmp);
+    }
+  }
+  FREE (&pptr->table);
+  FREE (ptr);
+}
diff --git a/hash.h b/hash.h
new file mode 100644 (file)
index 0000000..a1d5e91
--- /dev/null
+++ b/hash.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ *
+ *     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.
+ */
+
+#ifndef _HASH_H
+#define _HASH_H
+
+struct hash_elem
+{
+  const char *key;
+  void *data;
+  struct hash_elem *next;
+};
+
+typedef struct
+{
+  int nelem, curnelem;
+  struct hash_elem **table;
+}
+HASH;
+
+#define hash_find(table, key) hash_find_hash(table, hash_string ((unsigned char *)key, table->nelem), key)
+
+#define hash_delete(table,key,data,destroy) hash_delete_hash(table, hash_string ((unsigned char *)key, table->nelem), key, data, destroy)
+
+HASH *hash_create (int nelem);
+int hash_string (const unsigned char *s, int n);
+int hash_insert (HASH * table, const char *key, void *data, int allow_dup);
+HASH *hash_resize (HASH * table, int nelem);
+void *hash_find_hash (const HASH * table, int hash, const char *key);
+void hash_delete_hash (HASH * table, int hash, const char *key, const void *data,
+                      void (*destroy) (void *));
+void hash_destroy (HASH ** hash, void (*destroy) (void *));
+
+#endif
diff --git a/hdrline.c b/hdrline.c
new file mode 100644 (file)
index 0000000..93f3bc7
--- /dev/null
+++ b/hdrline.c
@@ -0,0 +1,738 @@
+/*
+ * Copyright (C) 1996-2000,2002 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "sort.h"
+#include "charset.h"
+#include "mutt_crypt.h"
+#include "mutt_idna.h"
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <locale.h>
+
+int mutt_is_mail_list (ADDRESS *addr)
+{
+  return mutt_match_rx_list (addr->mailbox, MailLists);
+}
+
+int mutt_is_subscribed_list (ADDRESS *addr)
+{
+  return mutt_match_rx_list (addr->mailbox, SubscribedLists);
+}
+
+/* Search for a mailing list in the list of addresses pointed to by adr.
+ * If one is found, print pfx and the name of the list into buf, then
+ * return 1.  Otherwise, simply return 0.
+ */
+static int
+check_for_mailing_list (ADDRESS *adr, char *pfx, char *buf, int buflen)
+{
+  for (; adr; adr = adr->next)
+  {
+    if (mutt_is_subscribed_list (adr))
+    {
+      if (pfx && buf && buflen)
+       snprintf (buf, buflen, "%s%s", pfx, mutt_get_name (adr));
+      return 1;
+    }
+  }
+  return 0;
+}
+
+/* Search for a mailing list in the list of addresses pointed to by adr.
+ * If one is found, print the address of the list into buf, then return 1.
+ * Otherwise, simply return 0.
+ */
+static int
+check_for_mailing_list_addr (ADDRESS *adr, char *buf, int buflen)
+{
+  for (; adr; adr = adr->next)
+  {
+    if (mutt_is_subscribed_list (adr))
+    {
+      if (buf && buflen)
+       snprintf (buf, buflen, "%s", adr->mailbox);
+      return 1;
+    }
+  }
+  return 0;
+}
+
+
+static int first_mailing_list (char *buf, size_t buflen, ADDRESS *a)
+{
+  for (; a; a = a->next)
+  {
+    if (mutt_is_subscribed_list (a))
+    {
+      mutt_save_path (buf, buflen, a);
+      return 1;
+    }
+  }
+  return 0;
+}
+
+static void make_from (ENVELOPE *hdr, char *buf, size_t len, int do_lists)
+{
+  int me;
+
+  me = mutt_addr_is_user (hdr->from);
+
+  if (do_lists || me)
+  {
+    if (check_for_mailing_list (hdr->to, "To ", buf, len))
+      return;
+    if (check_for_mailing_list (hdr->cc, "Cc ", buf, len))
+      return;
+  }
+
+  if (me && hdr->to)
+    snprintf (buf, len, "To %s", mutt_get_name (hdr->to));
+  else if (me && hdr->cc)
+    snprintf (buf, len, "Cc %s", mutt_get_name (hdr->cc));
+  else if (hdr->from)
+    strfcpy (buf, mutt_get_name (hdr->from), len);
+  else
+    *buf = 0;
+}
+
+static void make_from_addr (ENVELOPE *hdr, char *buf, size_t len, int do_lists)
+{
+  int me;
+
+  me = mutt_addr_is_user (hdr->from);
+
+  if (do_lists || me)
+  {
+    if (check_for_mailing_list_addr (hdr->to, buf, len))
+      return;
+    if (check_for_mailing_list_addr (hdr->cc, buf, len))
+      return;
+  }
+
+  if (me && hdr->to)
+    snprintf (buf, len, "%s", hdr->to->mailbox);
+  else if (me && hdr->cc)
+    snprintf (buf, len, "%s", hdr->cc->mailbox);
+  else if (hdr->from)
+    strfcpy (buf, hdr->from->mailbox, len);
+  else
+    *buf = 0;
+}
+
+static int user_in_addr (ADDRESS *a)
+{
+  for (; a; a = a->next)
+    if (mutt_addr_is_user (a))
+      return 1;
+  return 0;
+}
+
+/* Return values:
+ * 0: user is not in list
+ * 1: user is unique recipient
+ * 2: user is in the TO list
+ * 3: user is in the CC list
+ * 4: user is originator
+ * 5: sent to a subscribed mailinglist
+ */
+int mutt_user_is_recipient (HEADER *h)
+{
+  ENVELOPE *env = h->env;
+
+  if(!h->recip_valid)
+  {
+    h->recip_valid = 1;
+    
+    if (mutt_addr_is_user (env->from))
+      h->recipient = 4;
+    else if (user_in_addr (env->to))
+    {
+      if (env->to->next || env->cc)
+       h->recipient = 2; /* non-unique recipient */
+      else
+       h->recipient = 1; /* unique recipient */
+    }
+    else if (user_in_addr (env->cc))
+      h->recipient = 3;
+    else if (check_for_mailing_list (env->to, NULL, NULL, 0))
+      h->recipient = 5;
+    else if (check_for_mailing_list (env->cc, NULL, NULL, 0))
+      h->recipient = 5;
+    else
+      h->recipient = 0;
+  }
+  
+  return h->recipient;
+}
+
+/* %a = address of author
+ * %A = reply-to address (if present; otherwise: address of author
+ * %b = filename of the originating folder
+ * %B = the list to which the letter was sent
+ * %c = size of message in bytes
+ * %C = current message number
+ * %d = date and time of message using $date_format and sender's timezone
+ * %D = date and time of message using $date_format and local timezone
+ * %e = current message number in thread
+ * %E = number of messages in current thread
+ * %f = entire from line
+ * %F = like %n, unless from self
+ * %g = newsgroup name (if compiled with nntp support)
+ * %i = message-id
+ * %I = initials of author
+ * %l = number of lines in the message
+ * %L = like %F, except `lists' are displayed first
+ * %m = number of messages in the mailbox
+ * %n = name of author
+ * %N = score
+ * %O = like %L, except using address instead of name
+ * %s = subject
+ * %S = short message status (e.g., N/O/D/!/r/-)
+ * %t = `to:' field (recipients)
+ * %T = $to_chars
+ * %u = user (login) name of author
+ * %v = first name of author, unless from self
+ * %W = where user is (organization)
+ * %y = `x-label:' field (if present)
+ * %Y = `x-label:' field (if present, tree unfolded, and != parent's x-label)
+ * %Z = status flags   */
+
+struct hdr_format_info
+{
+  CONTEXT *ctx;
+  HEADER *hdr;
+};
+
+static const char *
+hdr_format_str (char *dest,
+               size_t destlen,
+               char op,
+               const char *src,
+               const char *prefix,
+               const char *ifstring,
+               const char *elsestring,
+               unsigned long data,
+               format_flag flags)
+{
+  struct hdr_format_info *hfi = (struct hdr_format_info *) data;
+  HEADER *hdr, *htmp;
+  CONTEXT *ctx;
+  char fmt[SHORT_STRING], buf2[SHORT_STRING], ch, *p;
+  int do_locales, i;
+  int optional = (flags & M_FORMAT_OPTIONAL);
+  int threads = ((Sort & SORT_MASK) == SORT_THREADS);
+  int is_index = (flags & M_FORMAT_INDEX);
+#define THREAD_NEW (threads && hdr->collapsed && hdr->num_hidden > 1 && mutt_thread_contains_unread (ctx, hdr) == 1)
+#define THREAD_OLD (threads && hdr->collapsed && hdr->num_hidden > 1 && mutt_thread_contains_unread (ctx, hdr) == 2)
+  size_t len;
+
+  hdr = hfi->hdr;
+  ctx = hfi->ctx;
+
+  dest[0] = 0;
+  switch (op)
+  {
+    case 'A':
+      if(hdr->env->reply_to && hdr->env->reply_to->mailbox)
+      {
+       mutt_format_s (dest, destlen, prefix, mutt_addr_for_display (hdr->env->reply_to));
+       break;
+      }
+      /* fall through if 'A' returns nothing */
+
+    case 'a':
+      if(hdr->env->from && hdr->env->from->mailbox)
+      {
+       mutt_format_s (dest, destlen, prefix, mutt_addr_for_display (hdr->env->from));
+      }
+      else
+        dest[0] = '\0';
+      break;
+
+    case 'B':
+      if (!first_mailing_list (dest, destlen, hdr->env->to) &&
+         !first_mailing_list (dest, destlen, hdr->env->cc))
+       dest[0] = 0;
+      if (dest[0])
+      {
+       strfcpy (buf2, dest, sizeof(buf2));
+       mutt_format_s (dest, destlen, prefix, buf2);
+       break;
+      }
+      /* fall through if 'B' returns nothing */
+
+    case 'b':
+      if(ctx)
+      {
+       if ((p = strrchr (ctx->path, '/')))
+         strfcpy (dest, p + 1, destlen);
+       else
+         strfcpy (dest, ctx->path, destlen);
+      }
+      else 
+       strfcpy(dest, "(null)", destlen);
+      strfcpy (buf2, dest, sizeof(buf2));
+      mutt_format_s (dest, destlen, prefix, buf2);
+      break;
+    
+    case 'c':
+      mutt_pretty_size (buf2, sizeof (buf2), (long) hdr->content->length);
+      mutt_format_s (dest, destlen, prefix, buf2);
+      break;
+
+    case 'C':
+      snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+      snprintf (dest, destlen, fmt, hdr->msgno + 1);
+      break;
+
+    case 'd':
+    case 'D':
+    case '{':
+    case '[':
+    case '(':
+    case '<':
+
+      /* preprocess $date_format to handle %Z */
+      {
+       const char *cp;
+       struct tm *tm; 
+       time_t T;
+
+       p = dest;
+
+       cp = (op == 'd' || op == 'D') ? (NONULL (DateFmt)) : src;
+       if (*cp == '!')
+       {
+         do_locales = 0;
+         cp++;
+       }
+       else
+         do_locales = 1;
+
+       len = destlen - 1;
+       while (len > 0 && (((op == 'd' || op == 'D') && *cp) ||
+                          (op == '{' && *cp != '}') || 
+                          (op == '[' && *cp != ']') ||
+                          (op == '(' && *cp != ')') ||
+                          (op == '<' && *cp != '>')))
+       {
+         if (*cp == '%')
+         {
+           cp++;
+           if ((*cp == 'Z' || *cp == 'z') && (op == 'd' || op == '{'))
+           {
+             if (len >= 5)
+             {
+               sprintf (p, "%c%02u%02u", hdr->zoccident ? '-' : '+',
+                        hdr->zhours, hdr->zminutes);
+               p += 5;
+               len -= 5;
+             }
+             else
+               break; /* not enough space left */
+           }
+           else
+           {
+             if (len >= 2)
+             {
+               *p++ = '%';
+               *p++ = *cp;
+               len -= 2;
+             }
+             else
+               break; /* not enough space */
+           }
+           cp++;
+         }
+         else
+         {
+           *p++ = *cp++;
+           len--;
+         }
+       }
+       *p = 0;
+
+       if (do_locales && Locale)
+         setlocale (LC_TIME, Locale);
+
+       if (op == '[' || op == 'D')
+         tm = localtime (&hdr->date_sent);
+       else if (op == '(')
+         tm = localtime (&hdr->received);
+       else if (op == '<')
+       {
+         T = time (NULL);
+         tm = localtime (&T);
+       }
+       else
+       {
+         /* restore sender's time zone */
+         T = hdr->date_sent;
+         if (hdr->zoccident)
+           T -= (hdr->zhours * 3600 + hdr->zminutes * 60);
+         else
+           T += (hdr->zhours * 3600 + hdr->zminutes * 60);
+         tm = gmtime (&T);
+       }
+
+       strftime (buf2, sizeof (buf2), dest, tm);
+
+       if (do_locales)
+         setlocale (LC_TIME, "C");
+
+       mutt_format_s (dest, destlen, prefix, buf2);
+       if (len > 0 && op != 'd' && op != 'D') /* Skip ending op */
+         src = cp + 1;
+      }
+      break;
+
+    case 'e':
+      snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+      snprintf (dest, destlen, fmt, mutt_messages_in_thread(ctx, hdr, 1));
+      break;
+
+    case 'E':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (dest, destlen, fmt, mutt_messages_in_thread(ctx, hdr, 0));
+      }
+      else if (mutt_messages_in_thread(ctx, hdr, 0) <= 1)
+       optional = 0;
+      break;
+
+    case 'f':
+      buf2[0] = 0;
+      rfc822_write_address (buf2, sizeof (buf2), hdr->env->from, 1);
+      mutt_format_s (dest, destlen, prefix, buf2);
+      break;
+
+    case 'F':
+      if (!optional)
+      {
+        make_from (hdr->env, buf2, sizeof (buf2), 0);
+       mutt_format_s (dest, destlen, prefix, buf2);
+      }
+      else if (mutt_addr_is_user (hdr->env->from))
+        optional = 0;
+      break;
+
+#ifdef USE_NNTP
+    case 'g':
+      mutt_format_s (dest, destlen, prefix, hdr->env->newsgroups ? hdr->env->newsgroups : "");
+      break;
+#endif
+
+    case 'i':
+      mutt_format_s (dest, destlen, prefix, hdr->env->message_id ? hdr->env->message_id : "<no.id>");
+      break;
+
+    case 'I':
+      {
+       int iflag = FALSE;
+       int j = 0;
+
+       for (i = 0; hdr->env->from && hdr->env->from->personal &&
+                   hdr->env->from->personal[i] && j < SHORT_STRING - 1; i++)
+       {
+         if (isalpha ((int)hdr->env->from->personal[i]))
+         {
+           if (!iflag)
+           {
+             buf2[j++] = hdr->env->from->personal[i];
+             iflag = TRUE;
+           }
+         }
+         else
+           iflag = FALSE;
+       }
+
+       buf2[j] = '\0';
+      }
+      mutt_format_s (dest, destlen, prefix, buf2);
+      break;
+
+    case 'l':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (dest, destlen, fmt, (int) hdr->lines);
+      }
+      else if (hdr->lines <= 0)
+        optional = 0;
+      break;
+
+    case 'L':
+      if (!optional)
+      {
+       make_from (hdr->env, buf2, sizeof (buf2), 1);
+       mutt_format_s (dest, destlen, prefix, buf2);
+      }
+      else if (!check_for_mailing_list (hdr->env->to, NULL, NULL, 0) &&
+              !check_for_mailing_list (hdr->env->cc, NULL, NULL, 0))
+      {
+       optional = 0;
+      }
+      break;
+
+    case 'm':
+      if(ctx)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (dest, destlen, fmt, ctx->msgcount);
+      }
+      else
+       strfcpy(dest, "(null)", destlen);
+      break;
+
+    case 'n':
+      mutt_format_s (dest, destlen, prefix, mutt_get_name (hdr->env->from));
+      break;
+
+    case 'N':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (dest, destlen, fmt, hdr->score);
+      }
+      else
+      {
+       if (hdr->score == 0)
+         optional = 0;
+      }
+      break;
+
+    case 'O':
+      if (!optional)
+      {
+       make_from_addr (hdr->env, buf2, sizeof (buf2), 1);
+       if (!option (OPTSAVEADDRESS) && (p = strpbrk (buf2, "%@")))
+         *p = 0;
+       mutt_format_s (dest, destlen, prefix, buf2);
+      }
+      else if (!check_for_mailing_list_addr (hdr->env->to, NULL, 0) &&
+              !check_for_mailing_list_addr (hdr->env->cc, NULL, 0))
+      {
+       optional = 0;
+      }
+      break;
+
+    case 'M':
+      snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+      if (!optional)
+      {
+       if (threads && is_index && hdr->collapsed && hdr->num_hidden > 1)
+         snprintf (dest, destlen, fmt, hdr->num_hidden);
+       else if (is_index && threads)
+         mutt_format_s (dest, destlen, prefix, " ");
+       else
+         *dest = '\0';
+      }
+      else
+      {
+       if (!(threads && is_index && hdr->collapsed && hdr->num_hidden > 1))
+         optional = 0;
+      }
+      break;
+
+    case 's':
+      
+      if (flags & M_FORMAT_TREE && !hdr->collapsed)
+      {
+       if (flags & M_FORMAT_FORCESUBJ)
+       {
+         mutt_format_s (dest, destlen, "", NONULL (hdr->env->subject));
+         snprintf (buf2, sizeof (buf2), "%s%s", hdr->tree, dest);
+         mutt_format_s_tree (dest, destlen, prefix, buf2);
+       }
+       else
+         mutt_format_s_tree (dest, destlen, prefix, hdr->tree);
+      }
+      else
+       mutt_format_s (dest, destlen, prefix, NONULL (hdr->env->subject));
+      break;
+
+    case 'S':
+      if (hdr->deleted)
+       ch = 'D';
+      else if (hdr->attach_del)
+       ch = 'd';
+      else if (hdr->tagged)
+       ch = '*';
+      else if (hdr->flagged)
+       ch = '!';
+      else if (hdr->replied)
+       ch = 'r';
+      else if (hdr->read && (ctx && ctx->msgnotreadyet != hdr->msgno))
+       ch = '-';
+      else if (hdr->old)
+       ch = 'O';
+      else
+       ch = 'N';
+
+      /* FOO - this is probably unsafe, but we are not likely to have such
+        a short string passed into this routine */
+      *dest = ch;
+      *(dest + 1) = 0;
+      break;
+
+    case 't':
+      buf2[0] = 0;
+      if (!check_for_mailing_list (hdr->env->to, "To ", buf2, sizeof (buf2)) &&
+         !check_for_mailing_list (hdr->env->cc, "Cc ", buf2, sizeof (buf2)))
+      {
+       if (hdr->env->to)
+         snprintf (buf2, sizeof (buf2), "To %s", mutt_get_name (hdr->env->to));
+       else if (hdr->env->cc)
+         snprintf (buf2, sizeof (buf2), "Cc %s", mutt_get_name (hdr->env->cc));
+      }
+      mutt_format_s (dest, destlen, prefix, buf2);
+      break;
+
+    case 'T':
+      snprintf (fmt, sizeof (fmt), "%%%sc", prefix);
+      snprintf (dest, destlen, fmt,
+               (Tochars && ((i = mutt_user_is_recipient (hdr))) < mutt_strlen (Tochars)) ? Tochars[i] : ' ');
+      break;
+
+    case 'u':
+      if (hdr->env->from && hdr->env->from->mailbox)
+      {
+       strfcpy (buf2, mutt_addr_for_display (hdr->env->from), sizeof (buf2));
+       if ((p = strpbrk (buf2, "%@")))
+         *p = 0;
+      }
+      else
+       buf2[0] = 0;
+      mutt_format_s (dest, destlen, prefix, buf2);
+      break;
+
+    case 'v':
+      if (mutt_addr_is_user (hdr->env->from)) 
+      {
+       if (hdr->env->to)
+         mutt_format_s (buf2, sizeof (buf2), prefix, mutt_get_name (hdr->env->to));
+       else if (hdr->env->cc)
+         mutt_format_s (buf2, sizeof (buf2), prefix, mutt_get_name (hdr->env->cc));
+       else
+         *buf2 = 0;
+      }
+      else
+       mutt_format_s (buf2, sizeof (buf2), prefix, mutt_get_name (hdr->env->from));
+      if ((p = strpbrk (buf2, " %@")))
+       *p = 0;
+      mutt_format_s (dest, destlen, prefix, buf2);
+      break;
+
+    case 'W':
+      if (!optional)
+       mutt_format_s (dest, destlen, prefix, hdr->env->organization ? hdr->env->organization : "");
+      else if (!hdr->env->organization)
+       optional = 0;
+      break;
+
+    case 'Z':
+    
+      ch = ' ';
+
+      if (WithCrypto && hdr->security & GOODSIGN)
+        ch = 'S';
+      else if (WithCrypto && hdr->security & ENCRYPT)
+       ch = 'P';
+      else if (WithCrypto && hdr->security & SIGN)
+        ch = 's';
+      else if ((WithCrypto & APPLICATION_PGP) && hdr->security & PGPKEY)
+        ch = 'K';
+
+      snprintf (buf2, sizeof (buf2),
+               "%c%c%c", (THREAD_NEW ? 'n' : (THREAD_OLD ? 'o' : 
+               ((hdr->read && (ctx && ctx->msgnotreadyet != hdr->msgno))
+               ? (hdr->replied ? 'r' : ' ') : (hdr->old ? 'O' : 'N')))),
+               hdr->deleted ? 'D' : (hdr->attach_del ? 'd' : ch),
+               hdr->tagged ? '*' :
+               (hdr->flagged ? '!' :
+                (Tochars && ((i = mutt_user_is_recipient (hdr)) < mutt_strlen (Tochars)) ? Tochars[i] : ' ')));
+      mutt_format_s (dest, destlen, prefix, buf2);
+      break;
+
+     case 'y':
+       if (optional)
+        optional = hdr->env->x_label ? 1 : 0;
+
+       mutt_format_s (dest, destlen, prefix, NONULL (hdr->env->x_label));
+       break;
+    case 'Y':
+      if (hdr->env->x_label)
+      {
+       i = 1;  /* reduce reuse recycle */
+       htmp = NULL;
+       if (flags & M_FORMAT_TREE
+           && (hdr->thread->prev && hdr->thread->prev->message
+               && hdr->thread->prev->message->env->x_label))
+         htmp = hdr->thread->prev->message;
+       else if (flags & M_FORMAT_TREE
+                && (hdr->thread->parent && hdr->thread->parent->message
+                    && hdr->thread->parent->message->env->x_label))
+         htmp = hdr->thread->parent->message;
+       if (htmp && mutt_strcasecmp (hdr->env->x_label,
+                                    htmp->env->x_label) == 0)
+         i = 0;
+      }
+      else
+       i = 0;
+
+      if (optional)
+       optional = i;
+
+      if (i)
+        mutt_format_s (dest, destlen, prefix, NONULL (hdr->env->x_label));
+      else
+        mutt_format_s (dest, destlen, prefix, "");
+
+      break;
+
+    default:
+      snprintf (dest, destlen, "%%%s%c", prefix, op);
+      break;
+  }
+
+  if (optional)
+    mutt_FormatString (dest, destlen, ifstring, hdr_format_str, (unsigned long) hfi, flags);
+  else if (flags & M_FORMAT_OPTIONAL)
+    mutt_FormatString (dest, destlen, elsestring, hdr_format_str, (unsigned long) hfi, flags);
+
+  return (src);
+#undef THREAD_NEW
+#undef THREAD_OLD
+}
+
+void
+_mutt_make_string (char *dest, size_t destlen, const char *s, CONTEXT *ctx, HEADER *hdr, format_flag flags)
+{
+  struct hdr_format_info hfi;
+
+  hfi.hdr = hdr;
+  hfi.ctx = ctx;
+
+  mutt_FormatString (dest, destlen, s, hdr_format_str, (unsigned long) &hfi, flags);
+}
diff --git a/headers.c b/headers.c
new file mode 100644 (file)
index 0000000..4492bf7
--- /dev/null
+++ b/headers.c
@@ -0,0 +1,204 @@
+/* 
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */
+
+#include "mutt.h"
+#include "mutt_crypt.h"
+#include "mutt_idna.h"
+
+#include <sys/stat.h>
+#include <string.h>
+#include <ctype.h>
+
+void mutt_edit_headers (const char *editor,
+                       const char *body,
+                       HEADER *msg,
+                       char *fcc,
+                       size_t fcclen)
+{
+  char path[_POSIX_PATH_MAX];  /* tempfile used to edit headers + body */
+  char buffer[LONG_STRING];
+  char *p;
+  FILE *ifp, *ofp;
+  int i, keep;
+  ENVELOPE *n;
+  time_t mtime;
+  struct stat st;
+  LIST *cur, **last = NULL, *tmp;
+
+  mutt_mktemp (path);
+  if ((ofp = safe_fopen (path, "w")) == NULL)
+  {
+    mutt_perror (path);
+    return;
+  }
+  
+  mutt_env_to_local (msg->env);
+  mutt_write_rfc822_header (ofp, msg->env, NULL, 1, 0);
+  fputc ('\n', ofp);   /* tie off the header. */
+
+  /* now copy the body of the message. */
+  if ((ifp = fopen (body, "r")) == NULL)
+  {
+    mutt_perror (body);
+    return;
+  }
+
+  mutt_copy_stream (ifp, ofp);
+
+  fclose (ifp);
+  fclose (ofp);
+
+  if (stat (path, &st) == -1)
+  {
+    mutt_perror (path);
+    return;
+  }
+
+  mtime = mutt_decrease_mtime (path, &st);
+
+  mutt_edit_file (editor, path);
+  stat (path, &st);
+  if (mtime == st.st_mtime)
+  {
+    dprint (1, (debugfile, "ci_edit_headers(): temp file was not modified.\n"));
+    /* the file has not changed! */
+    mutt_unlink (path);
+    return;
+  }
+
+  mutt_unlink (body);
+  mutt_free_list (&msg->env->userhdrs);
+
+  /* Read the temp file back in */
+  if ((ifp = fopen (path, "r")) == NULL)
+  {
+    mutt_perror (path);
+    return;
+  }
+  
+  if ((ofp = safe_fopen (body, "w")) == NULL)
+  {
+    /* intentionally leak a possible temporary file here */
+    fclose (ifp);
+    mutt_perror (body);
+    return;
+  }
+  
+  n = mutt_read_rfc822_header (ifp, NULL, 1, 0);
+  while ((i = fread (buffer, 1, sizeof (buffer), ifp)) > 0)
+    fwrite (buffer, 1, i, ofp);
+  fclose (ofp);
+  fclose (ifp);
+  mutt_unlink (path);
+
+  /* restore old info. */
+  n->references = msg->env->references;
+  msg->env->references = NULL;
+
+  mutt_free_envelope (&msg->env);
+  msg->env = n; n = NULL;
+
+  if (!msg->env->in_reply_to)
+#ifdef USE_NNTP
+  if (!option (OPTNEWSSEND))
+#endif
+    mutt_free_list (&msg->env->references);
+
+  mutt_expand_aliases_env (msg->env);
+
+  /* search through the user defined headers added to see if either a 
+   * fcc: or attach-file: field was specified.  
+   */
+
+  cur = msg->env->userhdrs;
+  last = &msg->env->userhdrs;
+  while (cur)
+  {
+    keep = 1;
+
+    /* keep track of whether or not we see the in-reply-to field.  if we did
+     * not, remove the references: field later so that we can generate a new
+     * message based upon this one.
+     */
+    if (fcc && ascii_strncasecmp ("fcc:", cur->data, 4) == 0)
+    {
+      p = cur->data + 4;
+      SKIPWS (p);
+      if (*p)
+      {
+       strfcpy (fcc, p, fcclen);
+       mutt_pretty_mailbox (fcc);
+      }
+      keep = 0;
+    }
+    else if (ascii_strncasecmp ("attach:", cur->data, 7) == 0)
+    {
+      BODY *body;
+      BODY *parts;
+      char *q;
+
+      p = cur->data + 7;
+      SKIPWS (p);
+      if (*p)
+      {
+       if ((q = strpbrk (p, " \t")))
+       {
+         mutt_substrcpy (path, p, q, sizeof (path));
+         SKIPWS (q);
+       }
+       else
+         strfcpy (path, p, sizeof (path));
+       mutt_expand_path (path, sizeof (path));
+       if ((body = mutt_make_file_attach (path)))
+       {
+         body->description = safe_strdup (q);
+         for (parts = msg->content; parts->next; parts = parts->next) ;
+         parts->next = body;
+       }
+       else
+       {
+         mutt_pretty_mailbox (path);
+         mutt_error (_("%s: unable to attach file"), path);
+       }
+      }
+      keep = 0;
+    }
+
+
+    else if ((WithCrypto & APPLICATION_PGP)
+             &&ascii_strncasecmp ("pgp:", cur->data, 4) == 0)
+    {
+      msg->security = mutt_parse_crypt_hdr (cur->data + 4, 0);
+      keep = 0;
+    }
+
+    if (keep)
+    {
+      last = &cur->next;
+      cur  = cur->next;
+    }
+    else
+    {
+      tmp       = cur;
+      *last     = cur->next;
+      cur       = cur->next;
+      tmp->next = NULL;
+      mutt_free_list (&tmp);
+    }
+  }
+}
diff --git a/help.c b/help.c
new file mode 100644 (file)
index 0000000..4296122
--- /dev/null
+++ b/help.c
@@ -0,0 +1,351 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#define HELP_C
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "keymap.h"
+#include "pager.h"
+#include "mapping.h"
+
+#include <ctype.h>
+#include <string.h>
+
+static struct binding_t *help_lookupFunction (int op, int menu)
+{
+  int i;
+  struct binding_t *map;
+
+  if (menu != MENU_PAGER)
+  {
+    /* first look in the generic map for the function */
+    for (i = 0; OpGeneric[i].name; i++)
+      if (OpGeneric[i].op == op)
+       return (&OpGeneric[i]);    
+  }
+
+  if ((map = km_get_table(menu)))
+  {
+    for (i = 0; map[i].name; i++)
+      if (map[i].op == op)
+       return (&map[i]);
+  }
+  
+  return (NULL);
+}
+
+void mutt_make_help (char *d, size_t dlen, char *txt, int menu, int op)
+{
+  char buf[SHORT_STRING];
+
+  if (km_expand_key (buf, sizeof (buf), km_find_func (menu, op)) ||
+      km_expand_key (buf, sizeof (buf), km_find_func (MENU_GENERIC, op)))
+    snprintf (d, dlen, "%s:%s", buf, txt);
+  else
+    d[0] = 0;
+}
+
+char *
+mutt_compile_help (char *buf, size_t buflen, int menu, struct mapping_t *items)
+{
+  int i;
+  size_t len;
+  char *pbuf = buf;
+  
+  for (i = 0; items[i].name && buflen > 2; i++)
+  {
+    if (i)
+    {
+      *pbuf++ = ' ';
+      *pbuf++ = ' ';
+      buflen -= 2;
+    }
+    mutt_make_help (pbuf, buflen, _(items[i].name), menu, items[i].value);
+    len = mutt_strlen (pbuf);
+    pbuf += len;
+    buflen -= len;
+  }
+  return buf;
+}
+
+static int print_macro (FILE *f, int maxwidth, const char **macro)
+{
+  int n = maxwidth;
+  wchar_t wc;
+  int w;
+  size_t k;
+  size_t len = mutt_strlen (*macro);
+  mbstate_t mbstate1, mbstate2;
+
+  memset (&mbstate1, 0, sizeof (mbstate1));
+  memset (&mbstate2, 0, sizeof (mbstate2));
+  for (; len && (k = mbrtowc (&wc, *macro, len, &mbstate1)); *macro += k, len -= k)
+  {
+    if (k == (size_t)(-1) || k == (size_t)(-2))
+    {
+      k = (k == (size_t)(-1)) ? 1 : len;
+      wc = replacement_char ();
+    }
+    /* glibc-2.1.3's wcwidth() returns 1 for unprintable chars! */
+    if (IsWPrint (wc) && (w = wcwidth (wc)) >= 0)
+    {
+      if (w > n)
+       break;
+      n -= w;
+      {
+       char buf[MB_LEN_MAX*2];
+       size_t n1, n2;
+       if ((n1 = wcrtomb (buf, wc, &mbstate2)) != (size_t)(-1) &&
+           (n2 = wcrtomb (buf + n1, 0, &mbstate2)) != (size_t)(-1))
+         fputs (buf, f);
+      }
+    }
+    else if (wc < 0x20 || wc == 0x7f)
+    {
+      if (2 > n)
+       break;
+      n -= 2;
+      if (wc == '\033')
+       fprintf (f, "\\e");
+      else if (wc == '\n')
+       fprintf (f, "\\n");
+      else if (wc == '\r')
+       fprintf (f, "\\r");
+      else if (wc == '\t')
+       fprintf (f, "\\t");
+      else
+       fprintf (f, "^%c", (char)((wc + '@') & 0x7f));
+    }
+    else
+    {
+      if (1 > n)
+       break;
+      n -= 1;
+      fprintf (f, "?");
+    }
+  }
+  return (maxwidth - n);
+}
+
+static int pad (FILE *f, int col, int i)
+{
+  char fmt[8];
+
+  if (col < i)
+  {
+    snprintf (fmt, sizeof(fmt), "%%-%ds", i - col);
+    fprintf (f, fmt, "");
+    return (i);
+  }
+  fputc (' ', f);
+  return (col + 1);
+}
+
+static void format_line (FILE *f, int ismacro,
+                        const char *t1, const char *t2, const char *t3)
+{
+  int col;
+  int col_a, col_b;
+  int split;
+  int n;
+
+  fputs (t1, f);
+
+  /* don't try to press string into one line with less than 40 characters.
+     The double paranthesis avoid a gcc warning, sigh ... */
+  if ((split = COLS < 40))
+  {
+    col_a = col = 0;
+    col_b = LONG_STRING;
+    fputc ('\n', f);
+  }
+  else
+  {
+    col_a = COLS > 83 ? (COLS - 32) >> 2 : 12;
+    col_b = COLS > 49 ? (COLS - 10) >> 1 : 19;
+    col = pad (f, mutt_strlen(t1), col_a);
+  }
+
+  if (ismacro > 0)
+  {
+    if (!mutt_strcmp (Pager, "builtin"))
+      fputs ("_\010", f);
+    fputs ("M ", f);
+    col += 2;
+
+    if (!split)
+    {
+      col += print_macro (f, col_b - col - 4, &t2);
+      if (mutt_strlen (t2) > col_b - col)
+       t2 = "...";
+    }
+  }
+
+  col += print_macro (f, col_b - col - 1, &t2);
+  if (split)
+    fputc ('\n', f);
+  else
+    col = pad (f, col, col_b);
+
+  if (split)
+  {
+    print_macro (f, LONG_STRING, &t3);
+    fputc ('\n', f);
+  }
+  else
+  {
+    while (*t3)
+    {
+      n = COLS - col;
+
+      if (ismacro >= 0)
+      {
+       SKIPWS(t3);
+
+       /* FIXME: this is completely wrong */
+       if ((n = mutt_strlen (t3)) > COLS - col)
+       {
+         n = COLS - col;
+         for (col_a = n; col_a > 0 && t3[col_a] != ' '; col_a--) ;
+         if (col_a)
+           n = col_a;
+       }
+      }
+
+      print_macro (f, n, &t3);
+
+      if (*t3)
+      {
+        if (mutt_strcmp (Pager, "builtin"))
+       {
+         fputc ('\n', f);
+         n = 0;
+       }
+       else
+       {
+         n += col - COLS;
+         if (option (OPTMARKERS))
+           ++n;
+       }
+       col = pad (f, n, col_b);
+      }
+    }
+  }
+
+  fputc ('\n', f);
+}
+
+static void dump_menu (FILE *f, int menu)
+{
+  struct keymap_t *map;
+  struct binding_t *b;
+  char buf[SHORT_STRING];
+
+  /* browse through the keymap table */
+  for (map = Keymaps[menu]; map; map = map->next)
+  {
+    if (map->op != OP_NULL)
+    {
+      km_expand_key (buf, sizeof (buf), map);
+
+      if (map->op == OP_MACRO)
+      {
+       if (map->descr == NULL)
+         format_line (f, -1, buf, "macro", map->macro);
+        else
+         format_line (f, 1, buf, map->macro, map->descr);
+      }
+      else
+      {
+       b = help_lookupFunction (map->op, menu);
+       format_line (f, 0, buf, b ? b->name : "UNKNOWN",
+             b ? _(HelpStrings[b->op]) : _("ERROR: please report this bug"));
+      }
+    }
+  }
+}
+
+static int is_bound (struct keymap_t *map, int op)
+{
+  for (; map; map = map->next)
+    if (map->op == op)
+      return 1;
+  return 0;
+}
+
+static void dump_unbound (FILE *f,
+                         struct binding_t *funcs,
+                         struct keymap_t *map,
+                         struct keymap_t *aux)
+{
+  int i;
+
+  for (i = 0; funcs[i].name; i++)
+  {
+    if (! is_bound (map, funcs[i].op) &&
+       (!aux || ! is_bound (aux, funcs[i].op)))
+      format_line (f, 0, funcs[i].name, "", _(HelpStrings[funcs[i].op]));
+  }
+}
+
+void mutt_help (int menu)
+{
+  char t[_POSIX_PATH_MAX];
+  char buf[SHORT_STRING];
+  char *desc;
+  FILE *f;
+  struct binding_t *funcs;
+
+  mutt_mktemp (t);
+
+  funcs = km_get_table (menu);
+  desc = mutt_getnamebyvalue (menu, Menus);
+  if (!desc)
+    desc = _("<UNKNOWN>");
+  
+  do {
+    if ((f = safe_fopen (t, "w")) == NULL)
+    {
+      mutt_perror (t);
+      return;
+    }
+  
+    dump_menu (f, menu);
+    if (menu != MENU_EDITOR && menu != MENU_PAGER)
+    {
+      fputs (_("\nGeneric bindings:\n\n"), f);
+      dump_menu (f, MENU_GENERIC);
+    }
+  
+    fputs (_("\nUnbound functions:\n\n"), f);
+    if (funcs)
+      dump_unbound (f, funcs, Keymaps[menu], NULL);
+    if (menu != MENU_PAGER)
+      dump_unbound (f, OpGeneric, Keymaps[MENU_GENERIC], Keymaps[menu]);
+  
+    fclose (f);
+  
+    snprintf (buf, sizeof (buf), _("Help for %s"), desc);
+  }
+  while
+    (mutt_do_pager (buf, t,
+                   M_PAGER_RETWINCH | M_PAGER_MARKER | M_PAGER_NSKIP,
+                   NULL)
+     == OP_REFORMAT_WINCH);
+}
diff --git a/history.c b/history.c
new file mode 100644 (file)
index 0000000..ca3a2d7
--- /dev/null
+++ b/history.c
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "history.h"
+
+/* global vars used for the string-history routines */
+
+struct history
+{
+  char **hist;
+  short cur;
+  short last;
+}; 
+
+static struct history History[HC_LAST];
+static int OldSize = 0;
+
+static void init_history (struct history *h)
+{
+  int i;
+
+  if(OldSize)
+  {
+    if (h->hist)
+    {
+      for (i = 0 ; i < OldSize ; i ++)
+       FREE (&h->hist[i]);
+      FREE (&h->hist);
+    }
+  }
+  
+  if (HistSize)
+    h->hist = safe_calloc (HistSize, sizeof (char *));
+  
+  h->cur = 0;
+  h->last = 0;
+}
+
+void mutt_init_history(void)
+{
+  history_class_t hclass;
+  
+  if (HistSize == OldSize)
+    return;
+  
+  for(hclass = HC_FIRST; hclass < HC_LAST; hclass++)
+    init_history(&History[hclass]);
+
+  OldSize = HistSize;
+}
+  
+void mutt_history_add (history_class_t hclass, const char *s)
+{
+  int prev;
+  struct history *h = &History[hclass];
+  
+  if (!HistSize)
+    return; /* disabled */
+
+  if (*s)
+  {
+    prev = h->last - 1;
+    if (prev < 0) prev = HistSize - 1;
+    if (!h->hist[prev] || mutt_strcmp (h->hist[prev], s) != 0)
+    {
+      mutt_str_replace (&h->hist[h->last++], s);
+      if (h->last > HistSize - 1)
+       h->last = 0;
+    }
+  }
+  h->cur = h->last; /* reset to the last entry */
+}
+
+char *mutt_history_next (history_class_t hclass)
+{
+  int next;
+  struct history *h = &History[hclass];
+  
+  if (!HistSize)
+    return (""); /* disabled */
+
+  next = h->cur + 1;
+  if (next > HistSize - 1)
+    next = 0;
+  h->cur = h->hist[next] ? next : 0;
+  return (h->hist[h->cur] ? h->hist[h->cur] : "");
+}
+
+char *mutt_history_prev (history_class_t hclass)
+{
+  int prev;
+  struct history *h = &History[hclass];
+
+  if (!HistSize)
+    return (""); /* disabled */
+
+  prev = h->cur - 1;
+  if (prev < 0)
+  {
+    prev = HistSize - 1;
+    while (prev > 0 && h->hist[prev] == NULL)
+      prev--;
+  }
+  if (h->hist[prev])
+    h->cur = prev;
+  return (h->hist[h->cur] ? h->hist[h->cur] : "");
+}
diff --git a/history.h b/history.h
new file mode 100644 (file)
index 0000000..b32a47a
--- /dev/null
+++ b/history.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#ifndef _HISTORY_H
+#define _HISTORY_H
+
+enum history_class
+{
+  HC_CMD,
+  HC_ALIAS,
+  HC_COMMAND,
+  HC_FILE,
+  HC_PATTERN,
+  HC_OTHER,
+  HC_LAST
+};
+
+#define HC_FIRST HC_CMD
+
+typedef enum history_class history_class_t;
+
+void mutt_init_history(void);
+void mutt_history_add(history_class_t, const char *);
+char *mutt_history_next(history_class_t);
+char *mutt_history_prev(history_class_t);
+
+#endif
diff --git a/hook.c b/hook.c
new file mode 100644 (file)
index 0000000..d7931c0
--- /dev/null
+++ b/hook.c
@@ -0,0 +1,483 @@
+/* 
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>, and others
+ *
+ *     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.
+ */
+
+#include "mutt.h"
+#include "mailbox.h"
+#include "mutt_crypt.h"
+
+#include <limits.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <unistd.h>
+
+typedef struct hook
+{
+  int type;            /* hook type */
+  REGEXP rx;           /* regular expression */
+  char *command;       /* filename, command or pattern to execute */
+  pattern_t *pattern;  /* used for fcc,save,send-hook */
+  struct hook *next;
+} HOOK;
+
+static HOOK *Hooks = NULL;
+
+static int current_hook_type = 0;
+
+int mutt_parse_hook (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  HOOK *ptr;
+  BUFFER command, pattern;
+  int rc, not = 0;
+  regex_t *rx = NULL;
+  pattern_t *pat = NULL;
+  char path[_POSIX_PATH_MAX];
+
+  memset (&pattern, 0, sizeof (pattern));
+  memset (&command, 0, sizeof (command));
+
+  if (*s->dptr == '!')
+  {
+    s->dptr++;
+    SKIPWS (s->dptr);
+    not = 1;
+  }
+
+  mutt_extract_token (&pattern, s, 0);
+
+  if (!MoreArgs (s))
+  {
+    strfcpy (err->data, _("too few arguments"), err->dsize);
+    goto error;
+  }
+
+  mutt_extract_token (&command, s, (data & (M_FOLDERHOOK | M_SENDHOOK | M_ACCOUNTHOOK | M_REPLYHOOK)) ?  M_TOKEN_SPACE : 0);
+
+  if (!command.data)
+  {
+    strfcpy (err->data, _("too few arguments"), err->dsize);
+    goto error;
+  }
+
+  if (MoreArgs (s))
+  {
+    strfcpy (err->data, _("too many arguments"), err->dsize);
+    goto error;
+  }
+
+  if (data & (M_FOLDERHOOK | M_MBOXHOOK))
+  {
+    strfcpy (path, pattern.data, sizeof (path));
+    _mutt_expand_path (path, sizeof (path), 1);
+    FREE (&pattern.data);
+    memset (&pattern, 0, sizeof (pattern));
+    pattern.data = safe_strdup (path);
+  }
+  else if (DefaultHook && !(data & (M_CHARSETHOOK | M_ACCOUNTHOOK))
+           && (!WithCrypto || !(data & M_CRYPTHOOK))
+      )
+  {
+    char tmp[HUGE_STRING];
+
+    strfcpy (tmp, pattern.data, sizeof (tmp));
+    mutt_check_simple (tmp, sizeof (tmp), DefaultHook);
+    FREE (&pattern.data);
+    memset (&pattern, 0, sizeof (pattern));
+    pattern.data = safe_strdup (tmp);
+  }
+
+  if (data & (M_MBOXHOOK | M_SAVEHOOK | M_FCCHOOK))
+  {
+    strfcpy (path, command.data, sizeof (path));
+    mutt_expand_path (path, sizeof (path));
+    FREE (&command.data);
+    memset (&command, 0, sizeof (command));
+    command.data = safe_strdup (path);
+  }
+
+  /* check to make sure that a matching hook doesn't already exist */
+  for (ptr = Hooks; ptr; ptr = ptr->next)
+  {
+    if (ptr->type == data &&
+       ptr->rx.not == not &&
+       !mutt_strcmp (pattern.data, ptr->rx.pattern))
+    {
+      if (data & (M_FOLDERHOOK | M_SENDHOOK | M_MESSAGEHOOK | M_ACCOUNTHOOK | M_REPLYHOOK))
+      {
+       /* these hooks allow multiple commands with the same
+        * pattern, so if we've already seen this pattern/command pair, just
+        * ignore it instead of creating a duplicate */
+       if (!mutt_strcmp (ptr->command, command.data))
+       {
+         FREE (&command.data);
+         FREE (&pattern.data);
+         return 0;
+       }
+      }
+      else
+      {
+       /* other hooks only allow one command per pattern, so update the
+        * entry with the new command.  this currently does not change the
+        * order of execution of the hooks, which i think is desirable since
+        * a common action to perform is to change the default (.) entry
+        * based upon some other information. */
+       FREE (&ptr->command);
+       ptr->command = command.data;
+       FREE (&pattern.data);
+       return 0;
+      }
+    }
+    if (!ptr->next)
+      break;
+  }
+
+  if (data & (M_SENDHOOK | M_SAVEHOOK | M_FCCHOOK | M_MESSAGEHOOK | M_REPLYHOOK))
+  {
+    if ((pat = mutt_pattern_comp (pattern.data,
+          (data & (M_SENDHOOK | M_FCCHOOK)) ? 0 : M_FULL_MSG,
+                                 err)) == NULL)
+      goto error;
+  }
+  else
+  {
+    rx = safe_malloc (sizeof (regex_t));
+#ifdef M_CRYPTHOOK
+    if ((rc = REGCOMP (rx, NONULL(pattern.data), ((data & (M_CRYPTHOOK|M_CHARSETHOOK)) ? REG_ICASE : 0))) != 0)
+#else
+    if ((rc = REGCOMP (rx, NONULL(pattern.data), (data & (M_CHARSETHOOK|M_ICONVHOOK)) ? REG_ICASE : 0)) != 0)
+#endif /* M_CRYPTHOOK */
+    {
+      regerror (rc, rx, err->data, err->dsize);
+      regfree (rx);
+      FREE (&rx);
+      goto error;
+    }
+  }
+
+  if (ptr)
+  {
+    ptr->next = safe_calloc (1, sizeof (HOOK));
+    ptr = ptr->next;
+  }
+  else
+    Hooks = ptr = safe_calloc (1, sizeof (HOOK));
+  ptr->type = data;
+  ptr->command = command.data;
+  ptr->pattern = pat;
+  ptr->rx.pattern = pattern.data;
+  ptr->rx.rx = rx;
+  ptr->rx.not = not;
+  return 0;
+
+error:
+  FREE (&pattern.data);
+  FREE (&command.data);
+  return (-1);
+}
+
+static void delete_hook (HOOK *h)
+{
+  FREE (&h->command);
+  FREE (&h->rx.pattern);
+  if (h->rx.rx)
+  {
+    regfree (h->rx.rx);
+  }
+  mutt_pattern_free (&h->pattern);
+  FREE (&h);
+}
+
+/* Deletes all hooks of type ``type'', or all defined hooks if ``type'' is 0 */
+static void delete_hooks (int type)
+{
+  HOOK *h;
+  HOOK *prev;
+
+  while (h = Hooks, h && (type == 0 || type == h->type))
+  {
+    Hooks = h->next;
+    delete_hook (h);
+  }
+
+  prev = h; /* Unused assignment to avoid compiler warnings */
+
+  while (h)
+  {
+    if (type == h->type)
+    {
+      prev->next = h->next;
+      delete_hook (h);
+    }
+    else
+      prev = h;
+    h = prev->next;
+  }
+}
+
+int mutt_parse_unhook (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  while (MoreArgs (s))
+  {
+    mutt_extract_token (buf, s, 0);
+    if (mutt_strcmp ("*", buf->data) == 0)
+    {
+      if (current_hook_type)
+      {
+       snprintf (err->data, err->dsize,
+                 _("unhook: Can't do unhook * from within a hook."));
+       return -1;
+      }
+      delete_hooks (0);
+    }
+    else
+    {
+      int type = mutt_get_hook_type (buf->data);
+
+      if (!type)
+      {
+       snprintf (err->data, err->dsize,
+                _("unhook: unknown hook type: %s"), buf->data);
+       return (-1);
+      }
+      if (current_hook_type == type)
+      {
+       snprintf (err->data, err->dsize,
+                 _("unhook: Can't delete a %s from within a %s."),
+                 buf->data, buf->data);
+       return -1;
+      }
+      delete_hooks (type);
+    }
+  }
+  return 0;
+}
+
+void mutt_folder_hook (char *path)
+{
+  HOOK *tmp = Hooks;
+  BUFFER err, token;
+  char buf[STRING];
+
+  current_hook_type = M_FOLDERHOOK;
+  
+  err.data = buf;
+  err.dsize = sizeof (buf);
+  memset (&token, 0, sizeof (token));
+  for (; tmp; tmp = tmp->next)
+  {
+    if(!tmp->command)
+      continue;
+
+    if (tmp->type & M_FOLDERHOOK)
+    {
+      if ((regexec (tmp->rx.rx, path, 0, NULL, 0) == 0) ^ tmp->rx.not)
+      {
+       if (mutt_parse_rc_line (tmp->command, &token, &err) == -1)
+       {
+         mutt_error ("%s", err.data);
+         FREE (&token.data);
+         mutt_sleep (1);       /* pause a moment to let the user see the error */
+         current_hook_type = 0;
+         return;
+       }
+      }
+    }
+  }
+  FREE (&token.data);
+  
+  current_hook_type = 0;
+}
+
+char *mutt_find_hook (int type, const char *pat)
+{
+  HOOK *tmp = Hooks;
+
+  for (; tmp; tmp = tmp->next)
+    if (tmp->type & type)
+    {
+      if (regexec (tmp->rx.rx, pat, 0, NULL, 0) == 0)
+       return (tmp->command);
+    }
+  return (NULL);
+}
+
+void mutt_message_hook (CONTEXT *ctx, HEADER *hdr, int type)
+{
+  BUFFER err, token;
+  HOOK *hook;
+  char buf[STRING];
+
+  current_hook_type = type;
+  
+  err.data = buf;
+  err.dsize = sizeof (buf);
+  memset (&token, 0, sizeof (token));
+  for (hook = Hooks; hook; hook = hook->next)
+  {
+    if(!hook->command)
+      continue;
+
+    if (hook->type & type)
+      if ((mutt_pattern_exec (hook->pattern, 0, ctx, hdr) > 0) ^ hook->rx.not)
+       if (mutt_parse_rc_line (hook->command, &token, &err) != 0)
+       {
+         FREE (&token.data);
+         mutt_error ("%s", err.data);
+         mutt_sleep (1);
+         current_hook_type = 0;
+         return;
+       }
+  }
+  FREE (&token.data);
+  current_hook_type = 0;
+}
+
+static int
+mutt_addr_hook (char *path, size_t pathlen, int type, CONTEXT *ctx, HEADER *hdr)
+{
+  HOOK *hook;
+
+  /* determine if a matching hook exists */
+  for (hook = Hooks; hook; hook = hook->next)
+  {
+    if(!hook->command)
+      continue;
+
+    if (hook->type & type)
+      if ((mutt_pattern_exec (hook->pattern, 0, ctx, hdr) > 0) ^ hook->rx.not)
+      {
+       mutt_make_string (path, pathlen, hook->command, ctx, hdr);
+       return 0;
+      }
+  }
+
+  return -1;
+}
+
+void mutt_default_save (char *path, size_t pathlen, HEADER *hdr)
+{
+  *path = 0;
+  if (mutt_addr_hook (path, pathlen, M_SAVEHOOK, Context, hdr) != 0)
+  {
+    char tmp[_POSIX_PATH_MAX];
+    ADDRESS *adr;
+    ENVELOPE *env = hdr->env;
+    int fromMe = mutt_addr_is_user (env->from);
+
+    if (!fromMe && env->reply_to && env->reply_to->mailbox)
+      adr = env->reply_to;
+    else if (!fromMe && env->from && env->from->mailbox)
+      adr = env->from;
+    else if (env->to && env->to->mailbox)
+      adr = env->to;
+    else if (env->cc && env->cc->mailbox)
+      adr = env->cc;
+    else
+      adr = NULL;
+    if (adr)
+    {
+      mutt_safe_path (tmp, sizeof (tmp), adr);
+      snprintf (path, pathlen, "=%s", tmp);
+    }
+  }
+}
+
+void mutt_select_fcc (char *path, size_t pathlen, HEADER *hdr)
+{
+  ADDRESS *adr;
+  char buf[_POSIX_PATH_MAX];
+  ENVELOPE *env = hdr->env;
+
+  if (mutt_addr_hook (path, pathlen, M_FCCHOOK, NULL, hdr) != 0)
+  {
+    if ((option (OPTSAVENAME) || option (OPTFORCENAME)) &&
+       (env->to || env->cc || env->bcc))
+    {
+      adr = env->to ? env->to : (env->cc ? env->cc : env->bcc);
+      mutt_safe_path (buf, sizeof (buf), adr);
+      mutt_concat_path (path, NONULL(Maildir), buf, pathlen);
+      if (!option (OPTFORCENAME) && mx_access (path, W_OK) != 0)
+       strfcpy (path, NONULL (Outbox), pathlen);
+    }
+    else
+      strfcpy (path, NONULL (Outbox), pathlen);
+  }
+  mutt_pretty_mailbox (path);
+}
+
+static char *_mutt_string_hook (const char *match, int hook)
+{
+  HOOK *tmp = Hooks;
+
+  for (; tmp; tmp = tmp->next)
+  {
+    if ((tmp->type & hook) && ((match &&
+        regexec (tmp->rx.rx, match, 0, NULL, 0) == 0) ^ tmp->rx.not))
+      return (tmp->command);
+  }
+  return (NULL);
+}
+
+char *mutt_charset_hook (const char *chs)
+{
+  return _mutt_string_hook (chs, M_CHARSETHOOK);
+}
+
+char *mutt_iconv_hook (const char *chs)
+{
+  return _mutt_string_hook (chs, M_ICONVHOOK);
+}
+
+char *mutt_crypt_hook (ADDRESS *adr)
+{
+  return _mutt_string_hook (adr->mailbox, M_CRYPTHOOK);
+}
+
+#ifdef USE_SOCKET
+void mutt_account_hook (const char* url)
+{
+  HOOK* hook;
+  BUFFER token;
+  BUFFER err;
+  char buf[STRING];
+
+  err.data = buf;
+  err.dsize = sizeof (buf);
+  memset (&token, 0, sizeof (token));
+
+  for (hook = Hooks; hook; hook = hook->next)
+  {
+    if (! (hook->command && (hook->type & M_ACCOUNTHOOK)))
+      continue;
+
+    if ((regexec (hook->rx.rx, url, 0, NULL, 0) == 0) ^ hook->rx.not)
+    {
+      if (mutt_parse_rc_line (hook->command, &token, &err) == -1)
+      {
+       FREE (&token.data);
+       mutt_error ("%s", err.data);
+       mutt_sleep (1);
+
+       return;
+      }
+    }
+  }
+
+  FREE (&token.data);
+}
+#endif
diff --git a/imap/BUGS b/imap/BUGS
new file mode 100644 (file)
index 0000000..cb27ba9
--- /dev/null
+++ b/imap/BUGS
@@ -0,0 +1,34 @@
+In no particular order:
+
+* ~h searches download the entire folder, setting everything to \Seen in
+  the process.
+  --> Use SEARCH? or at least try to use .PEEK when doing scans. I've been
+      thinking of going to always PEEK anyway, but then you'd have to store
+      updates for every message you touched. Maybe a config option?
+
+* No checks are performed on long commands to make sure that they are
+  still correct after they've been made to fit in their buffers.
+  Tagged message sets can exceed the fixed space we've allocated for
+  them in large mailboxes. Time to move to dynamic string allocation,
+  at least for these commands.
+
+* Mutt doesn't handle timeouts or dropped connections gracefully. You
+  may see occasional segfaults. Solving this cleanly requires some major
+  architectural updates. Until that happens, I recommend you keep
+  backup copies of messages you're composing from within your editor.
+  Tommi Komulainen's keepalive patch for edit sessions may work for you,
+  though. Committed to CVS late November 1999, I think.
+
+* Mutt is uninterruptible during socket calls. We should handle SIGINT.
+
+* Server copy currently doesn't take into account uncommitted changes in
+  messages about to be copied. Sync first.
+  --> walk tagged or individual message looking for changes, sync those?
+      may require further additions to imap_make_msg_set and breaking up
+      imap_sync_mailbox, otherwise shouldn't be too bad. Not currently a
+      major priority, though - noone's gotten bit by this.
+
+* The mutt_pretty routines don't work well when the delimiter isn't '/'.
+
+Brendan Cully <brendan@kublai.com>
+Updated 20000731
diff --git a/imap/Makefile.am b/imap/Makefile.am
new file mode 100644 (file)
index 0000000..4d7db31
--- /dev/null
@@ -0,0 +1,25 @@
+## Process this file with automake to produce Makefile.in
+
+AR=@AR@
+
+AUTOMAKE_OPTIONS = foreign
+
+if USE_GSS
+GSSSOURCES = auth_gss.c
+endif
+
+if USE_SASL
+AUTHENTICATORS = auth_sasl.c
+else
+AUTHENTICATORS = auth_anon.c auth_cram.c
+endif
+
+EXTRA_DIST = BUGS README TODO auth_anon.c auth_cram.c auth_gss.c auth_sasl.c
+
+INCLUDES = -I$(top_srcdir) -I../intl
+
+noinst_LIBRARIES = libimap.a
+noinst_HEADERS = auth.h imap_private.h message.h
+
+libimap_a_SOURCES = auth.c auth_login.c browse.c command.c imap.c imap.h \
+       message.c utf7.c util.c $(AUTHENTICATORS) $(GSSSOURCES)
diff --git a/imap/Makefile.in b/imap/Makefile.in
new file mode 100644 (file)
index 0000000..8860cc8
--- /dev/null
@@ -0,0 +1,330 @@
+# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CPP = @CPP@
+DATADIRNAME = @DATADIRNAME@
+DBX = @DBX@
+DEBUGGER = @DEBUGGER@
+DOTLOCK_GROUP = @DOTLOCK_GROUP@
+DOTLOCK_PERMISSION = @DOTLOCK_PERMISSION@
+DOTLOCK_TARGET = @DOTLOCK_TARGET@
+GDB = @GDB@
+GENCAT = @GENCAT@
+GLIBC21 = @GLIBC21@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+HAVE_LIB = @HAVE_LIB@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+ISPELL = @ISPELL@
+KRB5CFGPATH = @KRB5CFGPATH@
+LIB = @LIB@
+LIBICONV = @LIBICONV@
+LIBIMAP = @LIBIMAP@
+LIBIMAPDEPS = @LIBIMAPDEPS@
+LTLIB = @LTLIB@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MUTTLIBS = @MUTTLIBS@
+MUTT_LIB_OBJECTS = @MUTT_LIB_OBJECTS@
+OPS = @OPS@
+PACKAGE = @PACKAGE@
+PGPAUX_TARGET = @PGPAUX_TARGET@
+POFILES = @POFILES@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SDB = @SDB@
+SENDMAIL = @SENDMAIL@
+SMIMEAUX_TARGET = @SMIMEAUX_TARGET@
+SUBVERSION = @SUBVERSION@
+U = @U@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+docdir = @docdir@
+mutt_libesmtp_config_path = @mutt_libesmtp_config_path@
+
+AR = @AR@
+
+AUTOMAKE_OPTIONS = foreign
+
+@USE_GSS_TRUE@GSSSOURCES = auth_gss.c
+@USE_SASL_TRUE@AUTHENTICATORS = auth_sasl.c
+@USE_SASL_FALSE@AUTHENTICATORS = auth_anon.c auth_cram.c
+
+EXTRA_DIST = BUGS README TODO auth_anon.c auth_cram.c auth_gss.c auth_sasl.c
+
+INCLUDES = -I$(top_srcdir) -I../intl
+
+noinst_LIBRARIES = libimap.a
+noinst_HEADERS = auth.h imap_private.h message.h
+
+libimap_a_SOURCES = auth.c auth_login.c browse.c command.c imap.c imap.h       message.c utf7.c util.c $(AUTHENTICATORS) $(GSSSOURCES)
+
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../config.h
+CONFIG_CLEAN_FILES = 
+LIBRARIES =  $(noinst_LIBRARIES)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir) -I..
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+libimap_a_LIBADD = 
+@USE_GSS_TRUE@@USE_SASL_FALSE@libimap_a_OBJECTS =  auth.o auth_login.o \
+@USE_GSS_TRUE@@USE_SASL_FALSE@browse.o command.o imap.o message.o \
+@USE_GSS_TRUE@@USE_SASL_FALSE@utf7.o util.o auth_anon.o auth_cram.o \
+@USE_GSS_TRUE@@USE_SASL_FALSE@auth_gss.o
+@USE_GSS_FALSE@@USE_SASL_TRUE@libimap_a_OBJECTS =  auth.o auth_login.o \
+@USE_GSS_FALSE@@USE_SASL_TRUE@browse.o command.o imap.o message.o \
+@USE_GSS_FALSE@@USE_SASL_TRUE@utf7.o util.o auth_sasl.o
+@USE_GSS_TRUE@@USE_SASL_TRUE@libimap_a_OBJECTS =  auth.o auth_login.o \
+@USE_GSS_TRUE@@USE_SASL_TRUE@browse.o command.o imap.o message.o utf7.o \
+@USE_GSS_TRUE@@USE_SASL_TRUE@util.o auth_sasl.o auth_gss.o
+@USE_GSS_FALSE@@USE_SASL_FALSE@libimap_a_OBJECTS =  auth.o auth_login.o \
+@USE_GSS_FALSE@@USE_SASL_FALSE@browse.o command.o imap.o message.o \
+@USE_GSS_FALSE@@USE_SASL_FALSE@utf7.o util.o auth_anon.o auth_cram.o
+CFLAGS = @CFLAGS@
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+HEADERS =  $(noinst_HEADERS)
+
+DIST_COMMON =  README Makefile.am Makefile.in TODO
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+SOURCES = $(libimap_a_SOURCES)
+OBJECTS = $(libimap_a_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .o .s
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
+       cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps imap/Makefile
+
+Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
+       cd $(top_builddir) \
+         && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+mostlyclean-noinstLIBRARIES:
+
+clean-noinstLIBRARIES:
+       -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+
+distclean-noinstLIBRARIES:
+
+maintainer-clean-noinstLIBRARIES:
+
+.c.o:
+       $(COMPILE) -c $<
+
+.s.o:
+       $(COMPILE) -c $<
+
+.S.o:
+       $(COMPILE) -c $<
+
+mostlyclean-compile:
+       -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+       -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+libimap.a: $(libimap_a_OBJECTS) $(libimap_a_DEPENDENCIES)
+       -rm -f libimap.a
+       $(AR) cru libimap.a $(libimap_a_OBJECTS) $(libimap_a_LIBADD)
+       $(RANLIB) libimap.a
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+       list='$(SOURCES) $(HEADERS)'; \
+       unique=`for i in $$list; do echo $$i; done | \
+         awk '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       here=`pwd` && cd $(srcdir) \
+         && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)'; \
+       unique=`for i in $$list; do echo $$i; done | \
+         awk '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+         || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+       -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = imap
+
+distdir: $(DISTFILES)
+       @for file in $(DISTFILES); do \
+         d=$(srcdir); \
+         if test -d $$d/$$file; then \
+           cp -pr $$d/$$file $(distdir)/$$file; \
+         else \
+           test -f $(distdir)/$$file \
+           || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+           || cp -p $$d/$$file $(distdir)/$$file || :; \
+         fi; \
+       done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am:
+uninstall: uninstall-am
+all-am: Makefile $(LIBRARIES) $(HEADERS)
+all-redirect: all-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -rm -f Makefile $(CONFIG_CLEAN_FILES)
+       -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am:  mostlyclean-noinstLIBRARIES mostlyclean-compile \
+               mostlyclean-tags mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am:  clean-noinstLIBRARIES clean-compile clean-tags clean-generic \
+               mostlyclean-am
+
+clean: clean-am
+
+distclean-am:  distclean-noinstLIBRARIES distclean-compile \
+               distclean-tags distclean-generic clean-am
+
+distclean: distclean-am
+
+maintainer-clean-am:  maintainer-clean-noinstLIBRARIES \
+               maintainer-clean-compile maintainer-clean-tags \
+               maintainer-clean-generic distclean-am
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \
+clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \
+mostlyclean-compile distclean-compile clean-compile \
+maintainer-clean-compile tags mostlyclean-tags distclean-tags \
+clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \
+check-am installcheck-am installcheck install-exec-am install-exec \
+install-data-am install-data install-am install uninstall-am uninstall \
+all-redirect all-am all installdirs mostlyclean-generic \
+distclean-generic clean-generic maintainer-clean-generic clean \
+mostlyclean distclean maintainer-clean
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/imap/README b/imap/README
new file mode 100644 (file)
index 0000000..6b73f7e
--- /dev/null
@@ -0,0 +1,31 @@
+IMAP in mutt should be considered beta quality. For the most part it
+works well, but it is still not quite as stable or as full-featured
+as some of the other drivers. I believe it is now acceptable for
+daily use (and that's how I use it now, currently against Cyrus 1.6.24 and
+previously against UW-IMAP 4.7 and 2000).
+
+You may still lose some work if you are suddenly disconnected from your
+server (but your mailboxes should be fine). Currently accessing the same
+IMAP folder with multiple clients is not supported - it may work, but
+no guarantees. There are still several non-critical known bugs, see
+http://bugs.guug.de/ for the current list.
+
+You may also be disappointed in mutt's handling of very large IMAP mailboxes.
+To build the message index mutt must fetch a subset of headers from every
+message in the mailbox, which costs time and network traffic linear to the
+number of messages in your mailbox.
+
+Nevertheless in general mutt is quite a fast and fully-featured IMAP client.
+It tries to be polite to IMAP servers as well, opening few connections and
+avoiding needless polls of the server, unlike certain other popular IMAP
+clients by certain large corporations :)
+
+Mutt supports almost all official authentication and security protocols for
+IMAP, including SSL/TLS, native CRAM-MD5 and GSSAPI routines, and a SASL
+plugin which can handle just about everything else.
+
+Please report bugs to mutt-dev@mutt.org and/or brendan@kublai.com. Version,
+options, stack-trace and .muttdebug files are a plus.
+
+Brendan Cully <brendan@kublai.com>
+20010506
diff --git a/imap/TODO b/imap/TODO
new file mode 100644 (file)
index 0000000..c27817b
--- /dev/null
+++ b/imap/TODO
@@ -0,0 +1,62 @@
+IMAP enhancements, by priority:
+
+[ -- socket -- ]
+
+* Smarter connection code. Mutt should handle dropped connections/routing
+  problems gracefully. It should be able to transparently reconnect. This
+  is facilitated by the next item.
+
+  PRIORITY: [***]
+
+* General connection code rewrite. All commands should be queued via
+  a single interface for communicating with the server. Nothing should
+  have to read or write directly to the socket.
+
+  PRIORITY: [***]
+
+[ -- browsing -- ]
+
+* We should maybe add a new imap_format string for IMAP browsing, without all
+  the stat variables but with tags like how many messages are in the folders,
+  how many subfolders, that weird \Marked tag, etc.
+  PRIORITY: [** ]
+
+[ -- speed -- ]
+
+* Persistent caching of data. I think the nicest way to do this is to store
+  local copies like IMAP does, with an invisible control message at the top,
+  and extra invisible headers in the message (for UID/dirty bits). This does
+  some nice things:
+  o We can use the existing mbox driver.
+  o Mutt can read mail stored in IMAP spools transparently and
+    nondestructively.
+  o An IMAP server could function off of a local cache - maybe we can begin
+    to develop some sort of IMAP clustering system.
+  Disadvantage:
+  o IMAP can't discriminate between its own store and a fake Mutt cache. If
+    the server changes its file format, bad things might happen. Could be
+    worked around with a specific Mutt header in all messages, probably.
+
+  PRIORITY: [*  ]
+
+* Instead of testing for the existence of a mailbox for APPEND, just append
+  and create/retry on failure. This is only a small bandwidth savings, but
+  it should be easy.
+
+  PRIORITY: [*  ]
+
+[ -- new features -- ]
+
+* Commands for creating/deleting folders on the server, since users may not
+  otherwise be able to do this on IMAP servers.
+  Delete done, still must implement create.
+
+  PRIORITY: [** ]
+
+* Implement the x (quit without saving changes) command.
+
+  PRIORITY: [** ]
+
+Brendan Cully <brendan@kublai.com>
+Updated: 20000704
diff --git a/imap/auth.c b/imap/auth.c
new file mode 100644 (file)
index 0000000..0c56e85
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 1996-8 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1996-9 Brandon Long <blong@fiction.net>
+ * Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+/* IMAP login/authentication code */
+
+#include "mutt.h"
+#include "imap_private.h"
+#include "auth.h"
+
+static imap_auth_t imap_authenticators[] = {
+#ifdef USE_SASL
+  { imap_auth_sasl, NULL },
+#else
+  { imap_auth_anon, "anonymous" },
+#endif
+#ifdef USE_GSS
+  { imap_auth_gss, "gssapi" },
+#endif
+  /* SASL includes CRAM-MD5 (and GSSAPI, but that's not enabled by default) */
+#ifndef USE_SASL
+  { imap_auth_cram_md5, "cram-md5" },
+#endif
+  { imap_auth_login, "login" },
+
+  { NULL }
+};
+
+/* imap_authenticate: Attempt to authenticate using either user-specified
+ *   authentication method if specified, or any. */
+int imap_authenticate (IMAP_DATA* idata)
+{
+  imap_auth_t* authenticator;
+  char* methods;
+  char* method;
+  char* delim;
+  int r = -1;
+
+  if (ImapAuthenticators && *ImapAuthenticators)
+  {
+    /* Try user-specified list of authentication methods */
+    methods = safe_strdup (ImapAuthenticators);
+
+    for (method = methods; method; method = delim)
+    {
+      delim = strchr (method, ':');
+      if (delim)
+       *delim++ = '\0';
+      if (! method[0])
+       continue;
+      
+      dprint (2, (debugfile, "imap_authenticate: Trying method %s\n", method));
+      authenticator = imap_authenticators;
+
+      while (authenticator->authenticate)
+      {
+       if (!authenticator->method ||
+           !ascii_strcasecmp (authenticator->method, method))
+         if ((r = authenticator->authenticate (idata, method)) !=
+             IMAP_AUTH_UNAVAIL)
+         {
+           FREE (&methods);
+           return r;
+         }
+       
+       authenticator++;
+      }
+    }
+
+    FREE (&methods);
+  }
+  else
+  {
+    /* Fall back to default: any authenticator */
+    dprint (2, (debugfile, "imap_authenticate: Using any available method.\n"));
+    authenticator = imap_authenticators;
+
+    while (authenticator->authenticate)
+    {
+      if ((r = authenticator->authenticate (idata, NULL)) != IMAP_AUTH_UNAVAIL)
+       return r;
+      authenticator++;
+    }
+  }
+
+  if (r == IMAP_AUTH_UNAVAIL)
+  {
+    mutt_error (_("No authenticators available"));
+    mutt_sleep (1);
+  }
+  
+  return r;
+}
diff --git a/imap/auth.h b/imap/auth.h
new file mode 100644 (file)
index 0000000..608efc2
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2000-1 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+/* common defs for authenticators. A good place to set up a generic callback
+ * system */
+
+#ifndef _IMAP_AUTH_H
+#define _IMAP_AUTH_H 1
+
+typedef enum
+{
+  IMAP_AUTH_SUCCESS = 0,
+  IMAP_AUTH_FAILURE,
+  IMAP_AUTH_UNAVAIL
+} imap_auth_res_t;
+
+
+typedef struct
+{
+  /* do authentication, using named method or any available if method is NULL */
+  imap_auth_res_t (*authenticate) (IMAP_DATA* idata, const char* method);
+  /* name of authentication method supported, NULL means variable. If this
+   * is not null, authenticate may ignore the second parameter. */
+  const char* method;
+} imap_auth_t;
+
+/* external authenticator prototypes */
+#ifndef USE_SASL
+imap_auth_res_t imap_auth_anon (IMAP_DATA* idata, const char* method);
+imap_auth_res_t imap_auth_cram_md5 (IMAP_DATA* idata, const char* method);
+#endif
+imap_auth_res_t imap_auth_login (IMAP_DATA* idata, const char* method);
+#ifdef USE_GSS
+imap_auth_res_t imap_auth_gss (IMAP_DATA* idata, const char* method);
+#endif
+#ifdef USE_SASL
+imap_auth_res_t imap_auth_sasl (IMAP_DATA* idata, const char* method);
+#endif
+
+#endif /* _IMAP_AUTH_H */
diff --git a/imap/auth_anon.c b/imap/auth_anon.c
new file mode 100644 (file)
index 0000000..252a3d0
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 1999-2000 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+/* IMAP login/authentication code */
+
+#include "mutt.h"
+#include "imap_private.h"
+#include "auth.h"
+
+/* this is basically a stripped-down version of the cram-md5 method. */
+imap_auth_res_t imap_auth_anon (IMAP_DATA* idata, const char* method)
+{
+  int rc;
+
+  if (!mutt_bit_isset (idata->capabilities, AUTH_ANON))
+    return IMAP_AUTH_UNAVAIL;
+
+  if (mutt_account_getuser (&idata->conn->account))
+    return IMAP_AUTH_FAILURE;
+
+  if (idata->conn->account.user[0] != '\0')
+    return IMAP_AUTH_UNAVAIL;
+
+  mutt_message _("Authenticating (anonymous)...");
+
+  imap_cmd_start (idata, "AUTHENTICATE ANONYMOUS");
+
+  do
+    rc = imap_cmd_step (idata);
+  while (rc == IMAP_CMD_CONTINUE);
+
+  if (rc != IMAP_CMD_RESPOND)
+  {
+    dprint (1, (debugfile, "Invalid response from server.\n"));
+    goto bail;
+  }
+
+  mutt_socket_write (idata->conn, "ZHVtbXkK\r\n"); /* base64 ("dummy") */
+
+  do
+    rc = imap_cmd_step (idata);
+  while (rc == IMAP_CMD_CONTINUE);
+  
+  if (rc != IMAP_CMD_OK)
+  {
+    dprint (1, (debugfile, "Error receiving server response.\n"));
+    goto bail;
+  }
+
+  if (imap_code (idata->cmd.buf))
+    return IMAP_AUTH_SUCCESS;
+
+ bail:
+  mutt_error _("Anonymous authentication failed.");
+  mutt_sleep (2);
+  return IMAP_AUTH_FAILURE;
+}
diff --git a/imap/auth_cram.c b/imap/auth_cram.c
new file mode 100644 (file)
index 0000000..3003f7a
--- /dev/null
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 1999-2000 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+/* IMAP login/authentication code */
+
+#include "mutt.h"
+#include "imap_private.h"
+#include "auth.h"
+#include "md5.h"
+
+#define MD5_BLOCK_LEN 64
+#define MD5_DIGEST_LEN 16
+
+/* forward declarations */
+static void hmac_md5 (const char* password, char* challenge,
+  unsigned char* response);
+
+/* imap_auth_cram_md5: AUTH=CRAM-MD5 support. */
+imap_auth_res_t imap_auth_cram_md5 (IMAP_DATA* idata, const char* method)
+{
+  char ibuf[LONG_STRING*2], obuf[LONG_STRING];
+  unsigned char hmac_response[MD5_DIGEST_LEN];
+  int len;
+  int rc;
+
+  if (!mutt_bit_isset (idata->capabilities, ACRAM_MD5))
+    return IMAP_AUTH_UNAVAIL;
+
+  mutt_message _("Authenticating (CRAM-MD5)...");
+
+  /* get auth info */
+  if (mutt_account_getuser (&idata->conn->account))
+    return IMAP_AUTH_FAILURE;
+  if (mutt_account_getpass (&idata->conn->account))
+    return IMAP_AUTH_FAILURE;
+
+  imap_cmd_start (idata, "AUTHENTICATE CRAM-MD5");
+
+  /* From RFC 2195:
+   * The data encoded in the first ready response contains a presumptively
+   * arbitrary string of random digits, a timestamp, and the fully-qualified
+   * primary host name of the server. The syntax of the unencoded form must
+   * correspond to that of an RFC 822 'msg-id' [RFC822] as described in [POP3].
+   */
+  do
+    rc = imap_cmd_step (idata);
+  while (rc == IMAP_CMD_CONTINUE);
+  
+  if (rc != IMAP_CMD_RESPOND)
+  {
+    dprint (1, (debugfile, "Invalid response from server: %s\n", ibuf));
+    goto bail;
+  }
+
+  if ((len = mutt_from_base64 (obuf, idata->cmd.buf + 2)) == -1)
+  {
+    dprint (1, (debugfile, "Error decoding base64 response.\n"));
+    goto bail;
+  }
+
+  obuf[len] = '\0';
+  dprint (2, (debugfile, "CRAM challenge: %s\n", obuf));
+
+  /* The client makes note of the data and then responds with a string
+   * consisting of the user name, a space, and a 'digest'. The latter is
+   * computed by applying the keyed MD5 algorithm from [KEYED-MD5] where the
+   * key is a shared secret and the digested text is the timestamp (including
+   * angle-brackets).
+   * 
+   * Note: The user name shouldn't be quoted. Since the digest can't contain
+   *   spaces, there is no ambiguity. Some servers get this wrong, we'll work
+   *   around them when the bug report comes in. Until then, we'll remain
+   *   blissfully RFC-compliant.
+   */
+  hmac_md5 (idata->conn->account.pass, obuf, hmac_response);
+  /* dubious optimisation I saw elsewhere: make the whole string in one call */
+  snprintf (obuf, sizeof (obuf),
+    "%s %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
+    idata->conn->account.user,
+    hmac_response[0], hmac_response[1], hmac_response[2], hmac_response[3],
+    hmac_response[4], hmac_response[5], hmac_response[6], hmac_response[7],
+    hmac_response[8], hmac_response[9], hmac_response[10], hmac_response[11],
+    hmac_response[12], hmac_response[13], hmac_response[14], hmac_response[15]);
+  dprint(2, (debugfile, "CRAM response: %s\n", obuf));
+
+  /* XXX - ibuf must be long enough to store the base64 encoding of obuf, 
+   * plus the additional debris
+   */
+  
+  mutt_to_base64 ((unsigned char*) ibuf, (unsigned char*) obuf, strlen (obuf),
+                 sizeof (ibuf) - 2);
+  strncat (ibuf, "\r\n", sizeof (ibuf));
+  mutt_socket_write (idata->conn, ibuf);
+
+  do
+    rc = imap_cmd_step (idata);
+  while (rc == IMAP_CMD_CONTINUE);
+
+  if (rc != IMAP_CMD_OK)
+  {
+    dprint (1, (debugfile, "Error receiving server response.\n"));
+    goto bail;
+  }
+
+  if (imap_code (idata->cmd.buf))
+    return IMAP_AUTH_SUCCESS;
+
+ bail:
+  mutt_error _("CRAM-MD5 authentication failed.");
+  mutt_sleep (2);
+  return IMAP_AUTH_FAILURE;
+}
+
+/* hmac_md5: produce CRAM-MD5 challenge response. */
+static void hmac_md5 (const char* password, char* challenge,
+  unsigned char* response)
+{
+  MD5_CTX ctx;
+  unsigned char ipad[MD5_BLOCK_LEN], opad[MD5_BLOCK_LEN];
+  unsigned char secret[MD5_BLOCK_LEN+1];
+  unsigned char hash_passwd[MD5_DIGEST_LEN];
+  unsigned int secret_len, chal_len;
+  int i;
+
+  secret_len = strlen (password);
+  chal_len = strlen (challenge);
+
+  /* passwords longer than MD5_BLOCK_LEN bytes are substituted with their MD5
+   * digests */
+  if (secret_len > MD5_BLOCK_LEN)
+  {
+    MD5Init (&ctx);
+    MD5Update (&ctx, (unsigned char*) password, secret_len);
+    MD5Final (hash_passwd, &ctx);
+    strfcpy ((char*) secret, (char*) hash_passwd, MD5_DIGEST_LEN);
+    secret_len = MD5_DIGEST_LEN;
+  }
+  else
+    strfcpy ((char *) secret, password, sizeof (secret));
+
+  memset (ipad, 0, sizeof (ipad));
+  memset (opad, 0, sizeof (opad));
+  memcpy (ipad, secret, secret_len);
+  memcpy (opad, secret, secret_len);
+
+  for (i = 0; i < MD5_BLOCK_LEN; i++)
+  {
+    ipad[i] ^= 0x36;
+    opad[i] ^= 0x5c;
+  }
+
+  /* inner hash: challenge and ipadded secret */
+  MD5Init (&ctx);
+  MD5Update (&ctx, ipad, MD5_BLOCK_LEN);
+  MD5Update (&ctx, (unsigned char*) challenge, chal_len);
+  MD5Final (response, &ctx);
+
+  /* outer hash: inner hash and opadded secret */
+  MD5Init (&ctx);
+  MD5Update (&ctx, opad, MD5_BLOCK_LEN);
+  MD5Update (&ctx, response, MD5_DIGEST_LEN);
+  MD5Final (response, &ctx);
+}
diff --git a/imap/auth_gss.c b/imap/auth_gss.c
new file mode 100644 (file)
index 0000000..a6a2908
--- /dev/null
@@ -0,0 +1,270 @@
+/*
+ * Copyright (C) 1999-2000 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+/* GSS login/authentication code */
+
+/* for HAVE_HEIMDAL */
+#include "config.h"
+
+#include "mutt.h"
+#include "imap_private.h"
+#include "auth.h"
+
+#include <netinet/in.h>
+
+#ifdef HAVE_HEIMDAL
+#  include <gssapi/gssapi.h>
+#  define gss_nt_service_name GSS_C_NT_HOSTBASED_SERVICE
+#else
+#  include <gssapi/gssapi.h>
+#  include <gssapi/gssapi_generic.h>
+#endif
+
+#define GSS_BUFSIZE 8192
+
+#define GSS_AUTH_P_NONE      1
+#define GSS_AUTH_P_INTEGRITY 2
+#define GSS_AUTH_P_PRIVACY   4
+
+/* imap_auth_gss: AUTH=GSSAPI support. */
+imap_auth_res_t imap_auth_gss (IMAP_DATA* idata, const char* method)
+{
+  gss_buffer_desc request_buf, send_token;
+  gss_buffer_t sec_token;
+  gss_name_t target_name;
+  gss_ctx_id_t context;
+  gss_OID mech_name;
+  gss_qop_t quality;
+  int cflags;
+  OM_uint32 maj_stat, min_stat;
+  char buf1[GSS_BUFSIZE], buf2[GSS_BUFSIZE], server_conf_flags;
+  unsigned long buf_size;
+  int rc;
+
+  if (!mutt_bit_isset (idata->capabilities, AGSSAPI))
+    return IMAP_AUTH_UNAVAIL;
+
+  if (mutt_account_getuser (&idata->conn->account))
+    return IMAP_AUTH_FAILURE;
+  
+  /* get an IMAP service ticket for the server */
+  snprintf (buf1, sizeof (buf1), "imap@%s", idata->conn->account.host);
+  request_buf.value = buf1;
+  request_buf.length = strlen (buf1) + 1;
+  maj_stat = gss_import_name (&min_stat, &request_buf, gss_nt_service_name,
+    &target_name);
+  if (maj_stat != GSS_S_COMPLETE)
+  {
+    dprint (2, (debugfile, "Couldn't get service name for [%s]\n", buf1));
+    return IMAP_AUTH_UNAVAIL;
+  }
+#ifdef DEBUG   
+  else if (debuglevel >= 2)
+  {
+    maj_stat = gss_display_name (&min_stat, target_name, &request_buf,
+      &mech_name);
+    dprint (2, (debugfile, "Using service name [%s]\n",
+      (char*) request_buf.value));
+    maj_stat = gss_release_buffer (&min_stat, &request_buf);
+  }
+#endif
+  /* Acquire initial credentials - without a TGT GSSAPI is UNAVAIL */
+  sec_token = GSS_C_NO_BUFFER;
+  context = GSS_C_NO_CONTEXT;
+
+  /* build token */
+  maj_stat = gss_init_sec_context (&min_stat, GSS_C_NO_CREDENTIAL, &context,
+    target_name, GSS_C_NO_OID, GSS_C_MUTUAL_FLAG | GSS_C_SEQUENCE_FLAG, 0, 
+    GSS_C_NO_CHANNEL_BINDINGS, sec_token, NULL, &send_token,
+    (unsigned int*) &cflags, NULL);
+  if (maj_stat != GSS_S_COMPLETE && maj_stat != GSS_S_CONTINUE_NEEDED)
+  {
+    dprint (1, (debugfile, "Error acquiring credentials - no TGT?\n"));
+    gss_release_name (&min_stat, &target_name);
+
+    return IMAP_AUTH_UNAVAIL;
+  }
+
+  /* now begin login */
+  mutt_message _("Authenticating (GSSAPI)...");
+
+  imap_cmd_start (idata, "AUTHENTICATE GSSAPI");
+
+  /* expect a null continuation response ("+") */
+  do
+    rc = imap_cmd_step (idata);
+  while (rc == IMAP_CMD_CONTINUE);
+
+  if (rc != IMAP_CMD_RESPOND)
+  {
+    dprint (2, (debugfile, "Invalid response from server: %s\n", buf1));
+    gss_release_name (&min_stat, &target_name);
+    goto bail;
+  }
+
+  /* now start the security context initialisation loop... */
+  dprint (2, (debugfile, "Sending credentials\n"));
+  mutt_to_base64 ((unsigned char*) buf1, send_token.value, send_token.length,
+    sizeof (buf1) - 2);
+  gss_release_buffer (&min_stat, &send_token);
+  strncat (buf1, "\r\n", sizeof (buf1));
+  mutt_socket_write (idata->conn, buf1);
+
+  while (maj_stat == GSS_S_CONTINUE_NEEDED)
+  {
+    /* Read server data */
+    do
+      rc = imap_cmd_step (idata);
+    while (rc == IMAP_CMD_CONTINUE);
+
+    if (rc != IMAP_CMD_RESPOND)
+    {
+      dprint (1, (debugfile, "Error receiving server response.\n"));
+      gss_release_name (&min_stat, &target_name);
+      goto bail;
+    }
+
+    request_buf.length = mutt_from_base64 (buf2, idata->cmd.buf + 2);
+    request_buf.value = buf2;
+    sec_token = &request_buf;
+
+    /* Write client data */
+    maj_stat = gss_init_sec_context (&min_stat, GSS_C_NO_CREDENTIAL, &context,
+      target_name, GSS_C_NO_OID, GSS_C_MUTUAL_FLAG | GSS_C_SEQUENCE_FLAG, 0, 
+      GSS_C_NO_CHANNEL_BINDINGS, sec_token, NULL, &send_token,
+      (unsigned int*) &cflags, NULL);
+    if (maj_stat != GSS_S_COMPLETE && maj_stat != GSS_S_CONTINUE_NEEDED)
+    {
+      dprint (1, (debugfile, "Error exchanging credentials\n"));
+      gss_release_name (&min_stat, &target_name);
+
+      goto err_abort_cmd;
+    }
+    mutt_to_base64 ((unsigned char*) buf1, send_token.value,
+      send_token.length, sizeof (buf1) - 2);
+    gss_release_buffer (&min_stat, &send_token);
+    strncat (buf1, "\r\n", sizeof (buf1));
+    mutt_socket_write (idata->conn, buf1);
+  }
+
+  gss_release_name (&min_stat, &target_name);
+
+  /* get security flags and buffer size */
+  do
+    rc = imap_cmd_step (idata);
+  while (rc == IMAP_CMD_CONTINUE);
+
+  if (rc != IMAP_CMD_RESPOND)
+  {
+    dprint (1, (debugfile, "Error receiving server response.\n"));
+    goto bail;
+  }
+  request_buf.length = mutt_from_base64 (buf2, idata->cmd.buf + 2);
+  request_buf.value = buf2;
+
+  maj_stat = gss_unwrap (&min_stat, context, &request_buf, &send_token,
+    &cflags, &quality);
+  if (maj_stat != GSS_S_COMPLETE)
+  {
+    dprint (2, (debugfile, "Couldn't unwrap security level data\n"));
+    gss_release_buffer (&min_stat, &send_token);
+    goto err_abort_cmd;
+  }
+  dprint (2, (debugfile, "Credential exchange complete\n"));
+
+  /* first octet is security levels supported. We want NONE */
+  server_conf_flags = ((char*) send_token.value)[0];
+  if ( !(((char*) send_token.value)[0] & GSS_AUTH_P_NONE) )
+  {
+    dprint (2, (debugfile, "Server requires integrity or privacy\n"));
+    gss_release_buffer (&min_stat, &send_token);
+    goto err_abort_cmd;
+  }
+
+  /* we don't care about buffer size if we don't wrap content. But here it is */
+  ((char*) send_token.value)[0] = 0;
+  buf_size = ntohl (*((long *) send_token.value));
+  gss_release_buffer (&min_stat, &send_token);
+  dprint (2, (debugfile, "Unwrapped security level flags: %c%c%c\n",
+    server_conf_flags & GSS_AUTH_P_NONE      ? 'N' : '-',
+    server_conf_flags & GSS_AUTH_P_INTEGRITY ? 'I' : '-',
+    server_conf_flags & GSS_AUTH_P_PRIVACY   ? 'P' : '-'));
+  dprint (2, (debugfile, "Maximum GSS token size is %ld\n", buf_size));
+
+  /* agree to terms (hack!) */
+  buf_size = htonl (buf_size); /* not relevant without integrity/privacy */
+  memcpy (buf1, &buf_size, 4);
+  buf1[0] = GSS_AUTH_P_NONE;
+  /* server decides if principal can log in as user */
+  strncpy (buf1 + 4, idata->conn->account.user, sizeof (buf1) - 4);
+  request_buf.value = buf1;
+  request_buf.length = 4 + strlen (idata->conn->account.user) + 1;
+  maj_stat = gss_wrap (&min_stat, context, 0, GSS_C_QOP_DEFAULT, &request_buf,
+    &cflags, &send_token);
+  if (maj_stat != GSS_S_COMPLETE)
+  {
+    dprint (2, (debugfile, "Error creating login request\n"));
+    goto err_abort_cmd;
+  }
+
+  mutt_to_base64 ((unsigned char*) buf1, send_token.value, send_token.length,
+                 sizeof (buf1) - 2);
+  dprint (2, (debugfile, "Requesting authorisation as %s\n",
+    idata->conn->account.user));
+  strncat (buf1, "\r\n", sizeof (buf1));
+  mutt_socket_write (idata->conn, buf1);
+
+  /* Joy of victory or agony of defeat? */
+  do
+    rc = imap_cmd_step (idata);
+  while (rc == IMAP_CMD_CONTINUE);
+  if (rc == IMAP_CMD_RESPOND)
+  {
+    dprint (1, (debugfile, "Unexpected server continuation request.\n"));
+    goto err_abort_cmd;
+  }
+  if (imap_code (idata->cmd.buf))
+  {
+    /* flush the security context */
+    dprint (2, (debugfile, "Releasing GSS credentials\n"));
+    maj_stat = gss_delete_sec_context (&min_stat, &context, &send_token);
+    if (maj_stat != GSS_S_COMPLETE)
+      dprint (1, (debugfile, "Error releasing credentials\n"));
+
+    /* send_token may contain a notification to the server to flush
+     * credentials. RFC 1731 doesn't specify what to do, and since this
+     * support is only for authentication, we'll assume the server knows
+     * enough to flush its own credentials */
+    gss_release_buffer (&min_stat, &send_token);
+
+    return IMAP_AUTH_SUCCESS;
+  }
+  else
+    goto bail;
+
+ err_abort_cmd:
+  mutt_socket_write (idata->conn, "*\r\n");
+  do
+    rc = imap_cmd_step (idata);
+  while (rc == IMAP_CMD_CONTINUE);
+
+ bail:
+  mutt_error _("GSSAPI authentication failed.");
+  mutt_sleep (2);
+  return IMAP_AUTH_FAILURE;
+}
diff --git a/imap/auth_login.c b/imap/auth_login.c
new file mode 100644 (file)
index 0000000..7be391d
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+/* plain LOGIN support */
+
+#include "mutt.h"
+#include "imap_private.h"
+#include "auth.h"
+
+/* imap_auth_login: Plain LOGIN support */
+imap_auth_res_t imap_auth_login (IMAP_DATA* idata, const char* method)
+{
+  char q_user[SHORT_STRING], q_pass[SHORT_STRING];
+  char buf[STRING];
+  int rc;
+
+  if (mutt_bit_isset (idata->capabilities, LOGINDISABLED))
+  {
+    mutt_message _("LOGIN disabled on this server.");
+    return IMAP_AUTH_UNAVAIL;
+  }
+
+  if (mutt_account_getuser (&idata->conn->account))
+    return IMAP_AUTH_FAILURE;
+  if (mutt_account_getpass (&idata->conn->account))
+    return IMAP_AUTH_FAILURE;
+
+  mutt_message _("Logging in...");
+
+  imap_quote_string (q_user, sizeof (q_user), idata->conn->account.user);
+  imap_quote_string (q_pass, sizeof (q_pass), idata->conn->account.pass);
+
+#ifdef DEBUG
+  /* don't print the password unless we're at the ungodly debugging level
+   * of 5 or higher */
+
+  if (debuglevel < IMAP_LOG_PASS)
+    dprint (2, (debugfile, "Sending LOGIN command for %s...\n",
+      idata->conn->account.user));
+#endif
+
+  snprintf (buf, sizeof (buf), "LOGIN %s %s", q_user, q_pass);
+  rc = imap_exec (idata, buf, IMAP_CMD_FAIL_OK | IMAP_CMD_PASS);
+  
+  if (!rc)
+    return IMAP_AUTH_SUCCESS;
+
+  mutt_error _("Login failed.");
+  mutt_sleep (2);
+  return IMAP_AUTH_FAILURE;
+}
diff --git a/imap/auth_sasl.c b/imap/auth_sasl.c
new file mode 100644 (file)
index 0000000..5740435
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+ * Copyright (C) 2000-3 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+/* SASL login/authentication code */
+
+#include "mutt.h"
+#include "mutt_sasl.h"
+#include "imap_private.h"
+#include "auth.h"
+
+#ifdef USE_SASL2
+#include <sasl/sasl.h>
+#include <sasl/saslutil.h>
+#else
+#include <sasl.h>
+#include <saslutil.h>
+#endif
+
+/* imap_auth_sasl: Default authenticator if available. */
+imap_auth_res_t imap_auth_sasl (IMAP_DATA* idata, const char* method)
+{
+  sasl_conn_t* saslconn;
+  sasl_interact_t* interaction = NULL;
+  int rc, irc;
+  char buf[HUGE_STRING];
+  const char* mech;
+#ifdef USE_SASL2
+  const char *pc = NULL;
+#else
+  char* pc = NULL;
+#endif
+  unsigned int len, olen;
+  unsigned char client_start;
+
+  if (mutt_sasl_client_new (idata->conn, &saslconn) < 0)
+  {
+    dprint (1, (debugfile,
+      "imap_auth_sasl: Error allocating SASL connection.\n"));
+    return IMAP_AUTH_FAILURE;
+  }
+
+  rc = SASL_FAIL;
+
+  /* If the user hasn't specified a method, use any available */
+  if (!method)
+  {
+    method = idata->capstr;
+
+    /* hack for SASL ANONYMOUS support:
+     * 1. Fetch username. If it's "" or "anonymous" then
+     * 2. attempt sasl_client_start with only "AUTH=ANONYMOUS" capability
+     * 3. if sasl_client_start fails, fall through... */
+
+    if (mutt_account_getuser (&idata->conn->account))
+      return IMAP_AUTH_FAILURE;
+
+    if (mutt_bit_isset (idata->capabilities, AUTH_ANON) &&
+       (!idata->conn->account.user[0] ||
+        !ascii_strncmp (idata->conn->account.user, "anonymous", 9)))
+#ifdef USE_SASL2
+      rc = sasl_client_start (saslconn, "AUTH=ANONYMOUS", NULL, &pc, &olen, 
+                              &mech);
+#else
+      rc = sasl_client_start (saslconn, "AUTH=ANONYMOUS", NULL, NULL, &pc, &olen,
+                             &mech);
+#endif
+  }
+  
+  if (rc != SASL_OK && rc != SASL_CONTINUE)
+    do
+    {
+#ifdef USE_SASL2
+      rc = sasl_client_start (saslconn, method, &interaction,
+        &pc, &olen, &mech);
+#else
+      rc = sasl_client_start (saslconn, method, NULL, &interaction,
+        &pc, &olen, &mech);
+#endif
+      if (rc == SASL_INTERACT)
+       mutt_sasl_interact (interaction);
+    }
+    while (rc == SASL_INTERACT);
+
+  client_start = (olen > 0);
+
+  if (rc != SASL_OK && rc != SASL_CONTINUE)
+  {
+    if (method)
+      dprint (2, (debugfile, "imap_auth_sasl: %s unavailable\n", method));
+    else
+      dprint (1, (debugfile, "imap_auth_sasl: Failure starting authentication exchange. No shared mechanisms?\n"));
+    /* SASL doesn't support LOGIN, so fall back */
+
+    return IMAP_AUTH_UNAVAIL;
+  }
+
+  mutt_message (_("Authenticating (%s)..."), mech);
+
+  snprintf (buf, sizeof (buf), "AUTHENTICATE %s", mech);
+  imap_cmd_start (idata, buf);
+  irc = IMAP_CMD_CONTINUE;
+
+  /* looping protocol */
+  while (rc == SASL_CONTINUE)
+  {
+    do
+      irc = imap_cmd_step (idata);
+    while (irc == IMAP_CMD_CONTINUE);
+
+    if (irc == IMAP_CMD_BAD || irc == IMAP_CMD_NO)
+      goto bail;
+
+    if (irc == IMAP_CMD_RESPOND)
+    {
+#ifdef USE_SASL2
+      if (sasl_decode64 (idata->cmd.buf+2, strlen (idata->cmd.buf+2), buf, LONG_STRING-1,
+#else
+      if (sasl_decode64 (idata->cmd.buf+2, strlen (idata->cmd.buf+2), buf,
+#endif
+                        &len) != SASL_OK)
+      {
+       dprint (1, (debugfile, "imap_auth_sasl: error base64-decoding server response.\n"));
+       goto bail;
+      }
+    }
+
+    if (!client_start)
+    {
+      do
+      {
+       rc = sasl_client_step (saslconn, buf, len, &interaction, &pc, &olen);
+       if (rc == SASL_INTERACT)
+         mutt_sasl_interact (interaction);
+      }
+      while (rc == SASL_INTERACT);
+    }
+    else
+      client_start = 0;
+
+    /* send out response, or line break if none needed */
+    if (olen)
+    {
+      if (sasl_encode64 (pc, olen, buf, sizeof (buf), &olen) != SASL_OK)
+      {
+       dprint (1, (debugfile, "imap_auth_sasl: error base64-encoding client response.\n"));
+       goto bail;
+      }
+
+      /* sasl_client_st(art|ep) allocate pc with malloc, expect me to 
+       * free it */
+#ifndef USE_SASL2
+      FREE (&pc);
+#endif
+    }
+    
+    if (irc == IMAP_CMD_RESPOND)
+    {
+      strfcpy (buf + olen, "\r\n", sizeof (buf) - olen);
+      mutt_socket_write (idata->conn, buf);
+    }
+
+    /* If SASL has errored out, send an abort string to the server */
+    if (rc < 0)
+    {
+      mutt_socket_write (idata->conn, "*\r\n");
+      dprint (1, (debugfile, "imap_auth_sasl: sasl_client_step error %d\n",rc));
+    }
+  }
+
+  while (irc != IMAP_CMD_OK)
+    if ((irc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE)
+      break;
+
+  if (rc != SASL_OK)
+    goto bail;
+
+  if (imap_code (idata->cmd.buf))
+  {
+    mutt_sasl_setup_conn (idata->conn, saslconn);
+    return IMAP_AUTH_SUCCESS;
+  }
+
+ bail:
+  mutt_error _("SASL authentication failed.");
+  mutt_sleep(2);
+  sasl_dispose (&saslconn);
+
+  return IMAP_AUTH_FAILURE;
+}
diff --git a/imap/browse.c b/imap/browse.c
new file mode 100644 (file)
index 0000000..4a43420
--- /dev/null
@@ -0,0 +1,555 @@
+/*
+ * Copyright (C) 1996-9 Brandon Long <blong@fiction.net>
+ * Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+/* Mutt browser support routines */
+
+#include <stdlib.h>
+#include <ctype.h>
+
+#include "mutt.h"
+#include "imap_private.h"
+
+/* -- forward declarations -- */
+static int browse_add_list_result (IMAP_DATA* idata, const char* cmd,
+  struct browser_state* state, short isparent);
+static void imap_add_folder (char delim, char *folder, int noselect,
+  int noinferiors, struct browser_state *state, short isparent);
+static int compare_names(struct folder_file *a, struct folder_file *b);
+static int browse_get_namespace (IMAP_DATA *idata, char *nsbuf, int nsblen, 
+  IMAP_NAMESPACE_INFO *nsi, int nsilen, int *nns);
+static int browse_verify_namespace (IMAP_DATA* idata,
+  IMAP_NAMESPACE_INFO* nsi, int nns);
+
+/* imap_browse: IMAP hook into the folder browser, fills out browser_state,
+ *   given a current folder to browse */
+int imap_browse (char* path, struct browser_state* state)
+{
+  IMAP_DATA* idata;
+  char buf[LONG_STRING];
+  char buf2[LONG_STRING];
+  char nsbuf[LONG_STRING];
+  char mbox[LONG_STRING];
+  char list_cmd[5];
+  IMAP_NAMESPACE_INFO nsi[16];
+  int home_namespace = 0;
+  int n;
+  int i;
+  int nsup;
+  char ctmp;
+  int nns;
+  char *cur_folder;
+  short showparents = 0;
+  int noselect;
+  int noinferiors;
+  IMAP_MBOX mx;
+
+  if (imap_parse_path (path, &mx))
+  {
+    mutt_error (_("%s is an invalid IMAP path"), path);
+    return -1;
+  }
+
+  strfcpy (list_cmd, option (OPTIMAPLSUB) ? "LSUB" : "LIST", sizeof (list_cmd));
+
+  if (!(idata = imap_conn_find (&(mx.account), 0)))
+    goto fail;
+
+  if (!mx.mbox)
+  {
+    home_namespace = 1;
+    mbox[0] = '\0';            /* Do not replace "" with "INBOX" here */
+    mx.mbox = safe_strdup(ImapHomeNamespace);
+    nns = 0;
+    if (mutt_bit_isset(idata->capabilities,NAMESPACE))
+    {
+      mutt_message _("Getting namespaces...");
+      if (browse_get_namespace (idata, nsbuf, sizeof (nsbuf), 
+                        nsi, sizeof (nsi),  &nns) != 0)
+       goto fail;
+      if (browse_verify_namespace (idata, nsi, nns) != 0)
+       goto fail;
+    }
+  }
+
+  mutt_message _("Getting folder list...");
+
+  /* skip check for parents when at the root */
+  if (mx.mbox && mx.mbox[0] != '\0')
+  {
+    imap_fix_path (idata, mx.mbox, mbox, sizeof (mbox));
+    imap_munge_mbox_name (buf, sizeof (buf), mbox);
+    imap_unquote_string(buf); /* As kludgy as it gets */
+    mbox[sizeof (mbox) - 1] = '\0';
+    strncpy (mbox, buf, sizeof (mbox) - 1);
+    n = mutt_strlen (mbox);
+
+    dprint (3, (debugfile, "imap_browse: mbox: %s\n", mbox));
+
+    /* if our target exists and has inferiors, enter it if we
+     * aren't already going to */
+    if (mbox[n-1] != idata->delim)
+    {
+      snprintf (buf, sizeof (buf), "%s \"\" \"%s\"", list_cmd, mbox);
+      imap_cmd_start (idata, buf);
+      do 
+      {
+        if (imap_parse_list_response (idata, &cur_folder, &noselect,
+            &noinferiors, &idata->delim) != 0)
+         goto fail;
+
+        if (cur_folder)
+        {
+          imap_unmunge_mbox_name (cur_folder);
+
+          if (!noinferiors && cur_folder[0] &&
+            (n = strlen (mbox)) < LONG_STRING-1)
+          {
+            mbox[n++] = idata->delim;
+            mbox[n] = '\0';
+          }
+        }
+      }
+      while (ascii_strncmp (idata->cmd.buf, idata->cmd.seq, SEQLEN));
+    }
+
+    /* if we're descending a folder, mark it as current in browser_state */
+    if (mbox[n-1] == idata->delim)
+    {
+      /* don't show parents in the home namespace */
+      if (!home_namespace)
+       showparents = 1;
+      imap_qualify_path (buf, sizeof (buf), &mx, mbox);
+      state->folder = safe_strdup (buf);
+      n--;
+    }
+
+    /* Find superiors to list
+     * Note: UW-IMAP servers return folder + delimiter when asked to list
+     *  folder + delimiter. Cyrus servers don't. So we ask for folder,
+     *  and tack on delimiter ourselves.
+     * Further note: UW-IMAP servers return nothing when asked for 
+     *  NAMESPACES without delimiters at the end. Argh! */
+    for (n--; n >= 0 && mbox[n] != idata->delim ; n--);
+    if (n > 0)                 /* "aaaa/bbbb/" -> "aaaa" */
+    {
+      /* forget the check, it is too delicate (see above). Have we ever
+       * had the parent not exist? */
+      ctmp = mbox[n];
+      mbox[n] = '\0';
+
+      if (showparents)
+      {
+       dprint (3, (debugfile, "imap_init_browse: adding parent %s\n", mbox));
+       imap_add_folder (idata->delim, mbox, 1, 0, state, 1);
+      }
+
+      /* if our target isn't a folder, we are in our superior */
+      if (!state->folder)
+      {
+        /* store folder with delimiter */
+        mbox[n++] = ctmp;
+        ctmp = mbox[n];
+        mbox[n] = '\0';
+        imap_qualify_path (buf, sizeof (buf), &mx, mbox);
+        state->folder = safe_strdup (buf);
+      }
+      mbox[n] = ctmp;
+    } 
+    /* "/bbbb/" -> add  "/", "aaaa/" -> add "" */
+    else
+    {
+      char relpath[2];
+      /* folder may be "/" */
+      snprintf (relpath, sizeof (relpath), "%c" , n < 0 ? '\0' : idata->delim);
+      if (showparents)
+        imap_add_folder (idata->delim, relpath, 1, 0, state, 1); 
+      if (!state->folder)
+      {
+        imap_qualify_path (buf, sizeof (buf), &mx, relpath);
+        state->folder = safe_strdup (buf);
+      }
+    }
+  }
+
+  /* no namespace, no folder: set folder to host only */
+  if (!state->folder)
+  {
+    imap_qualify_path (buf, sizeof (buf), &mx, NULL);
+    state->folder = safe_strdup (buf);
+  }
+
+  if (home_namespace && mbox[0] != '\0')
+  {
+    /* Listing the home namespace, so INBOX should be included. Home 
+     * namespace is not "", so we have to list it explicitly. We ask the 
+     * server to see if it has descendants. */
+    dprint (3, (debugfile, "imap_browse: adding INBOX\n"));
+    if (browse_add_list_result (idata, "LIST \"\" \"INBOX\"", state, 0))
+      goto fail;
+  }
+
+  nsup = state->entrylen;
+
+  dprint (3, (debugfile, "imap_browse: Quoting mailbox scan: %s -> ", mbox));
+  snprintf (buf, sizeof (buf), "%s%%", mbox);
+  imap_quote_string (buf2, sizeof (buf2), buf);
+  dprint (3, (debugfile, "%s\n", buf2));
+  snprintf (buf, sizeof (buf), "%s \"\" %s", list_cmd, buf2);
+  if (browse_add_list_result (idata, buf, state, 0))
+    goto fail;
+
+  if (!state->entrylen)
+  {
+    mutt_error _("No such folder");
+    goto fail;
+  }
+
+  mutt_clear_error ();
+
+  qsort(&(state->entry[nsup]),state->entrylen-nsup,sizeof(state->entry[0]),
+       (int (*)(const void*,const void*)) compare_names);
+  if (home_namespace)
+  {                            /* List additional namespaces */
+    for (i = 0; i < nns; i++)
+      if (nsi[i].listable && !nsi[i].home_namespace) {
+       imap_add_folder(nsi[i].delim, nsi[i].prefix, nsi[i].noselect,
+                       nsi[i].noinferiors, state, 0);
+       dprint (3, (debugfile, "imap_browse: adding namespace: %s\n",
+                   nsi[i].prefix));
+      }
+  }
+
+  FREE (&mx.mbox);
+  return 0;
+
+ fail:
+  FREE (&mx.mbox);
+  return -1;
+}
+
+/* imap_mailbox_create: Prompt for a new mailbox name, and try to create it */
+int imap_mailbox_create (const char* folder)
+{
+  IMAP_DATA* idata;
+  IMAP_MBOX mx;
+  char buf[LONG_STRING];
+  short n;
+
+  if (imap_parse_path (folder, &mx) < 0)
+  {
+    dprint (1, (debugfile, "imap_mailbox_create: Bad starting path %s\n",
+      folder));
+    return -1;
+  }
+
+  if (!(idata = imap_conn_find (&mx.account, M_IMAP_CONN_NONEW)))
+  {
+    dprint (1, (debugfile, "imap_mailbox_create: Couldn't find open connection to %s", mx.account.host));
+    goto fail;
+  }
+  
+  strfcpy (buf, NONULL (mx.mbox), sizeof (buf));
+
+  /* append a delimiter if necessary */
+  n = mutt_strlen (buf);
+  if (n && (n < sizeof (buf) - 1) && (buf[n-1] != idata->delim))
+  {
+    buf[n++] = idata->delim;
+    buf[n] = '\0';
+  }
+  
+  if (mutt_get_field (_("Create mailbox: "), buf, sizeof (buf), M_FILE) < 0)
+    goto fail;
+
+  if (!mutt_strlen (buf))
+  {
+    mutt_error (_("Mailbox must have a name."));
+    mutt_sleep(1);
+    goto fail;
+  }
+  
+  if (imap_create_mailbox (idata, buf) < 0)
+    goto fail;
+
+  mutt_message _("Mailbox created.");
+  mutt_sleep (0);
+
+  FREE (&mx.mbox);
+  return 0;
+
+ fail:
+  FREE (&mx.mbox);
+  return -1;
+}
+
+static int browse_add_list_result (IMAP_DATA* idata, const char* cmd,
+  struct browser_state* state, short isparent)
+{
+  char *name;
+  int noselect;
+  int noinferiors;
+  IMAP_MBOX mx;
+
+  if (imap_parse_path (state->folder, &mx))
+  {
+    dprint (2, (debugfile,
+      "browse_add_list_result: current folder %s makes no sense\n", state->folder));
+    return -1;
+  }
+
+  imap_cmd_start (idata, cmd);
+
+  do 
+  {
+    if (imap_parse_list_response(idata, &name, &noselect, &noinferiors,
+        &idata->delim) != 0)
+    {
+      FREE (&mx.mbox);
+      return -1;
+    }
+
+    if (name)
+    {
+      /* Let a parent folder never be selectable for navigation */
+      if (isparent)
+        noselect = 1;
+      /* prune current folder from output */
+      if (isparent || mutt_strncmp (name, mx.mbox, strlen (name)))
+        imap_add_folder (idata->delim, name, noselect, noinferiors, state,
+          isparent);
+    }
+  }
+  while ((ascii_strncmp (idata->cmd.buf, idata->cmd.seq, SEQLEN) != 0));
+
+  FREE (&mx.mbox);
+  return 0;
+}
+
+/* imap_add_folder: add a folder name to the browser list, formatting it as
+ *   necessary. */
+static void imap_add_folder (char delim, char *folder, int noselect,
+  int noinferiors, struct browser_state *state, short isparent)
+{
+  char tmp[LONG_STRING];
+  char relpath[LONG_STRING];
+  IMAP_MBOX mx;
+
+  if (imap_parse_path (state->folder, &mx))
+    return;
+
+  imap_unmunge_mbox_name (folder);
+
+  if (state->entrylen + 1 == state->entrymax)
+  {
+    safe_realloc (&state->entry,
+      sizeof (struct folder_file) * (state->entrymax += 256));
+    memset (state->entry + state->entrylen, 0,
+      (sizeof (struct folder_file) * (state->entrymax - state->entrylen)));
+  }
+
+  /* render superiors as unix-standard ".." */
+  if (isparent)
+    strfcpy (relpath, "../", sizeof (relpath));
+  /* strip current folder from target, to render a relative path */
+  else if (!mutt_strncmp (mx.mbox, folder, mutt_strlen (mx.mbox)))
+    strfcpy (relpath, folder + mutt_strlen (mx.mbox), sizeof (relpath));
+  else
+    strfcpy (relpath, folder, sizeof (relpath));
+
+  /* apply filemask filter. This should really be done at menu setup rather
+   * than at scan, since it's so expensive to scan. But that's big changes
+   * to browser.c */
+  if (!((regexec (Mask.rx, relpath, 0, NULL, 0) == 0) ^ Mask.not))
+  {
+    FREE (&mx.mbox);
+    return;
+  }
+
+  imap_qualify_path (tmp, sizeof (tmp), &mx, folder);
+  (state->entry)[state->entrylen].name = safe_strdup (tmp);
+
+  /* mark desc with delim in browser if it can have subfolders */
+  if (!isparent && !noinferiors && strlen (relpath) < sizeof (relpath) - 1)
+  {
+    relpath[strlen (relpath) + 1] = '\0';
+    relpath[strlen (relpath)] = delim;
+  }
+  
+  (state->entry)[state->entrylen].desc = safe_strdup (relpath);
+
+  (state->entry)[state->entrylen].imap = 1;
+  /* delimiter at the root is useless. */
+  if (folder[0] == '\0')
+    delim = '\0';
+  (state->entry)[state->entrylen].delim = delim;
+  (state->entry)[state->entrylen].selectable = !noselect;
+  (state->entry)[state->entrylen].inferiors = !noinferiors;
+  (state->entrylen)++;
+
+  FREE (&mx.mbox);
+}
+
+static int compare_names(struct folder_file *a, struct folder_file *b) 
+{
+  return mutt_strcmp(a->name, b->name);
+}
+
+static int browse_get_namespace (IMAP_DATA* idata, char* nsbuf, int nsblen,
+  IMAP_NAMESPACE_INFO* nsi, int nsilen, int* nns)
+{
+  char *s;
+  int n;
+  char ns[LONG_STRING];
+  char delim = '/';
+  int type;
+  int nsbused = 0;
+  int rc;
+
+  *nns = 0;
+  nsbuf[nsblen-1] = '\0';
+
+  imap_cmd_start (idata, "NAMESPACE");
+  
+  do 
+  {
+    if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE)
+      break;
+
+    s = imap_next_word (idata->cmd.buf);
+    if (ascii_strncasecmp ("NAMESPACE", s, 9) == 0)
+    {
+      /* There are three sections to the response, User, Other, Shared,
+       * and maybe more by extension */
+      for (type = IMAP_NS_PERSONAL; *s; type++)
+      {
+       s = imap_next_word (s);
+       if (*s && ascii_strncasecmp (s, "NIL", 3))
+       {
+         s++;
+         while (*s && *s != ')')
+         {
+           s++; /* skip ( */
+           /* copy namespace */
+           n = 0;
+           delim = '\0';
+
+           if (*s == '\"')
+           {
+             s++;
+             while (*s && *s != '\"') 
+             {
+               if (*s == '\\')
+                 s++;
+               ns[n++] = *s;
+               s++;
+             }
+             if (*s)
+               s++;
+           }
+           else
+             while (*s && !ISSPACE (*s)) 
+             {
+               ns[n++] = *s;
+               s++;
+             }
+           ns[n] = '\0';
+           /* delim? */
+           s = imap_next_word (s);
+           /* delimiter is meaningless if namespace is "". Why does
+            * Cyrus provide one?! */
+           if (n && *s && *s == '\"')
+           {
+             if (s[1] && s[2] == '\"')
+               delim = s[1];
+             else if (s[1] && s[1] == '\\' && s[2] && s[3] == '\"')
+               delim = s[2];
+           }
+           /* skip "" namespaces, they are already listed at the root */
+           if ((ns[0] != '\0') && (nsbused < nsblen) && (*nns < nsilen))
+           {
+             dprint (3, (debugfile, "browse_get_namespace: adding %s\n", ns));
+             nsi->type = type;
+             /* Cyrus doesn't append the delimiter to the namespace,
+              * but UW-IMAP does. We'll strip it here and add it back
+              * as if it were a normal directory, from the browser */
+             if (n && (ns[n-1] == delim))
+               ns[--n] = '\0';
+             strncpy (nsbuf+nsbused,ns,nsblen-nsbused-1);
+             nsi->prefix = nsbuf+nsbused;
+             nsbused += n+1;
+             nsi->delim = delim;
+             nsi++;
+             (*nns)++;
+           }
+           while (*s && *s != ')') 
+             s++;
+           if (*s)
+             s++;
+         }
+       }
+      }
+    }
+  }
+  while (rc == IMAP_CMD_CONTINUE);
+
+  if (rc != IMAP_CMD_OK)
+    return -1;
+
+  return 0;
+}
+
+/* Check which namespaces have contents */
+static int browse_verify_namespace (IMAP_DATA* idata,
+  IMAP_NAMESPACE_INFO *nsi, int nns)
+{
+  char buf[LONG_STRING];
+  int i = 0;
+  char *name;
+  char delim;
+
+  for (i = 0; i < nns; i++, nsi++)
+  {
+    /* Cyrus gives back nothing if the % isn't added. This may return lots
+     * of data in some cases, I guess, but I currently feel that's better
+     * than invisible namespaces */
+    if (nsi->delim)
+      snprintf (buf, sizeof (buf), "%s \"\" \"%s%c%%\"",
+               option (OPTIMAPLSUB) ? "LSUB" : "LIST", nsi->prefix,
+               nsi->delim);
+    else
+      snprintf (buf, sizeof (buf), "%s \"\" \"%s%%\"",
+               option (OPTIMAPLSUB) ? "LSUB" : "LIST", nsi->prefix);
+
+    imap_cmd_start (idata, buf);
+
+    nsi->listable = 0;
+    nsi->home_namespace = 0;
+    do 
+    {
+      if (imap_parse_list_response(idata, &name, &nsi->noselect,
+          &nsi->noinferiors, &delim) != 0)
+       return -1;
+      nsi->listable |= (name != NULL);
+    }
+    while ((ascii_strncmp (idata->cmd.buf, idata->cmd.seq, SEQLEN) != 0));
+  }
+
+  return 0;
+}
+
diff --git a/imap/command.c b/imap/command.c
new file mode 100644 (file)
index 0000000..47cd3ed
--- /dev/null
@@ -0,0 +1,562 @@
+/*
+ * Copyright (C) 1996-8 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1996-9 Brandon Long <blong@fiction.net>
+ * Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+/* command.c: routines for sending commands to an IMAP server and parsing
+ *  responses */
+
+#include "mutt.h"
+#include "imap_private.h"
+#include "message.h"
+#include "mx.h"
+
+#include <ctype.h>
+#include <stdlib.h>
+
+#define IMAP_CMD_BUFSIZE 512
+
+/* forward declarations */
+static void cmd_handle_fatal (IMAP_DATA* idata);
+static int cmd_handle_untagged (IMAP_DATA* idata);
+static void cmd_make_sequence (IMAP_DATA* idata);
+static void cmd_parse_capabilities (IMAP_DATA* idata, char* s);
+static void cmd_parse_expunge (IMAP_DATA* idata, const char* s);
+static void cmd_parse_fetch (IMAP_DATA* idata, char* s);
+static void cmd_parse_myrights (IMAP_DATA* idata, char* s);
+
+static char *Capabilities[] = {
+  "IMAP4",
+  "IMAP4rev1",
+  "STATUS",
+  "ACL", 
+  "NAMESPACE",
+  "AUTH=CRAM-MD5",
+  "AUTH=GSSAPI",
+  "AUTH=ANONYMOUS",
+  "STARTTLS",
+  "LOGINDISABLED",
+
+  NULL
+};
+
+/* imap_cmd_start: Given an IMAP command, send it to the server.
+ *   Currently a minor convenience, but helps to route all IMAP commands
+ *   through a single interface. */
+int imap_cmd_start (IMAP_DATA* idata, const char* cmd)
+{
+  char* out;
+  int outlen;
+  int rc;
+
+  if (idata->status == IMAP_FATAL)
+  {
+    cmd_handle_fatal (idata);
+    return IMAP_CMD_BAD;
+  }
+
+  cmd_make_sequence (idata);
+  /* seq, space, cmd, \r\n\0 */
+  outlen = strlen (idata->cmd.seq) + strlen (cmd) + 4;
+  out = (char*) safe_malloc (outlen);
+  snprintf (out, outlen, "%s %s\r\n", idata->cmd.seq, cmd);
+
+  rc = mutt_socket_write (idata->conn, out);
+
+  FREE (&out);
+
+  return (rc < 0) ? IMAP_CMD_BAD : 0;
+}
+
+/* imap_cmd_step: Reads server responses from an IMAP command, detects
+ *   tagged completion response, handles untagged messages, can read
+ *   arbitrarily large strings (using malloc, so don't make it _too_
+ *   large!). */
+int imap_cmd_step (IMAP_DATA* idata)
+{
+  IMAP_COMMAND* cmd = &idata->cmd;
+  unsigned int len = 0;
+  int c;
+
+  if (idata->status == IMAP_FATAL)
+  {
+    cmd_handle_fatal (idata);
+    return IMAP_CMD_BAD;
+  }
+
+  /* read into buffer, expanding buffer as necessary until we have a full
+   * line */
+  do
+  {
+    if (len == cmd->blen)
+    {
+      safe_realloc (&cmd->buf, cmd->blen + IMAP_CMD_BUFSIZE);
+      cmd->blen = cmd->blen + IMAP_CMD_BUFSIZE;
+      dprint (3, (debugfile, "imap_cmd_step: grew buffer to %u bytes\n",
+                 cmd->blen));
+    }
+
+    c = mutt_socket_readln (cmd->buf + len, cmd->blen - len, idata->conn);
+    if (c <= 0)
+    {
+      dprint (1, (debugfile, "imap_cmd_step: Error reading server response.\n"));
+      cmd_handle_fatal (idata);
+      return IMAP_CMD_BAD;
+    }
+
+    len += c;
+  }
+  /* if we've read all the way to the end of the buffer, we haven't read a
+   * full line (mutt_socket_readln strips the \r, so we always have at least
+   * one character free when we've read a full line) */
+  while (len == cmd->blen);
+
+  /* don't let one large string make cmd->buf hog memory forever */
+  if ((cmd->blen > IMAP_CMD_BUFSIZE) && (len <= IMAP_CMD_BUFSIZE))
+  {
+    safe_realloc (&cmd->buf, IMAP_CMD_BUFSIZE);
+    cmd->blen = IMAP_CMD_BUFSIZE;
+    dprint (3, (debugfile, "imap_cmd_step: shrank buffer to %u bytes\n", cmd->blen));
+  }
+
+  idata->lastread = time(NULL);
+
+  /* handle untagged messages. The caller still gets its shot afterwards. */
+  if (!ascii_strncmp (cmd->buf, "* ", 2) &&
+      cmd_handle_untagged (idata))
+    return IMAP_CMD_BAD;
+
+  /* server demands a continuation response from us */
+  if (!ascii_strncmp (cmd->buf, "+ ", 2))
+  {
+    return IMAP_CMD_RESPOND;
+  }
+
+  /* tagged completion code */
+  if (!ascii_strncmp (cmd->buf, cmd->seq, SEQLEN))
+  {
+    imap_cmd_finish (idata);
+    return imap_code (cmd->buf) ? IMAP_CMD_OK : IMAP_CMD_NO;
+  }
+
+  return IMAP_CMD_CONTINUE;
+}
+
+/* imap_code: returns 1 if the command result was OK, or 0 if NO or BAD */
+int imap_code (const char *s)
+{
+  s += SEQLEN;
+  SKIPWS (s);
+  return (ascii_strncasecmp ("OK", s, 2) == 0);
+}
+
+/* imap_exec: execute a command, and wait for the response from the server.
+ * Also, handle untagged responses.
+ * Flags:
+ *   IMAP_CMD_FAIL_OK: the calling procedure can handle failure. This is used
+ *     for checking for a mailbox on append and login
+ *   IMAP_CMD_PASS: command contains a password. Suppress logging.
+ * Return 0 on success, -1 on Failure, -2 on OK Failure
+ */
+int imap_exec (IMAP_DATA* idata, const char* cmd, int flags)
+{
+  char* out;
+  int outlen;
+  int rc;
+
+  if (idata->status == IMAP_FATAL)
+  {
+    cmd_handle_fatal (idata);
+    return -1;
+  }
+
+  /* create sequence for command */
+  cmd_make_sequence (idata);
+  /* seq, space, cmd, \r\n\0 */
+  outlen = strlen (idata->cmd.seq) + strlen (cmd) + 4;
+  out = (char*) safe_malloc (outlen);
+  snprintf (out, outlen, "%s %s\r\n", idata->cmd.seq, cmd);
+
+  rc = mutt_socket_write_d (idata->conn, out,
+    flags & IMAP_CMD_PASS ? IMAP_LOG_PASS : IMAP_LOG_CMD);
+  FREE (&out);
+
+  if (rc < 0)
+  {
+    cmd_handle_fatal (idata);
+    return -1;
+  }
+
+  do
+    rc = imap_cmd_step (idata);
+  while (rc == IMAP_CMD_CONTINUE);
+
+  if (rc == IMAP_CMD_NO && (flags & IMAP_CMD_FAIL_OK))
+    return -2;
+
+  if (rc != IMAP_CMD_OK)
+  {
+    if (flags & IMAP_CMD_FAIL_OK)
+      return -2;
+
+    dprint (1, (debugfile, "imap_exec: command failed: %s\n", idata->cmd.buf));
+    return -1;
+  }
+
+  return 0;
+}
+
+/* imap_cmd_running: Returns whether an IMAP command is in progress. */
+int imap_cmd_running (IMAP_DATA* idata)
+{
+  if (idata->cmd.state == IMAP_CMD_CONTINUE ||
+      idata->cmd.state == IMAP_CMD_RESPOND)
+    return 1;
+
+  return 0;
+}
+
+/* imap_cmd_finish: Attempts to perform cleanup (eg fetch new mail if
+ *   detected, do expunge). Called automatically by imap_cmd_step, but
+ *   may be called at any time. Called by imap_check_mailbox just before
+ *   the index is refreshed, for instance. */
+void imap_cmd_finish (IMAP_DATA* idata)
+{
+  if (idata->status == IMAP_FATAL)
+  {
+    cmd_handle_fatal (idata);
+    return;
+  }
+
+  if (!(idata->state == IMAP_SELECTED) || idata->ctx->closing)
+    return;
+  
+  if (idata->reopen & IMAP_REOPEN_ALLOW)
+  {
+    int count = idata->newMailCount;
+
+    if (!(idata->reopen & IMAP_EXPUNGE_PENDING) &&
+       (idata->reopen & IMAP_NEWMAIL_PENDING)
+       && count > idata->ctx->msgcount)
+    {
+      /* read new mail messages */
+      dprint (2, (debugfile, "imap_cmd_finish: Fetching new mail\n"));
+      /* check_status: curs_main uses imap_check_mailbox to detect
+       *   whether the index needs updating */
+      idata->check_status = IMAP_NEWMAIL_PENDING;
+      imap_read_headers (idata, idata->ctx->msgcount, count-1);
+    }
+    else if (idata->reopen & IMAP_EXPUNGE_PENDING)
+    {
+      dprint (2, (debugfile, "imap_cmd_finish: Expunging mailbox\n"));
+      imap_expunge_mailbox (idata);
+      /* Detect whether we've gotten unexpected EXPUNGE messages */
+      if (idata->reopen & IMAP_EXPUNGE_PENDING &&
+         !(idata->reopen & IMAP_EXPUNGE_EXPECTED))
+       idata->check_status = IMAP_EXPUNGE_PENDING;
+      idata->reopen &= ~(IMAP_EXPUNGE_PENDING | IMAP_NEWMAIL_PENDING |
+                        IMAP_EXPUNGE_EXPECTED);
+    }
+  }
+
+  idata->status = 0;
+}
+
+/* cmd_handle_fatal: when IMAP_DATA is in fatal state, do what we can */
+static void cmd_handle_fatal (IMAP_DATA* idata)
+{
+  idata->status = IMAP_FATAL;
+
+  if ((idata->state == IMAP_SELECTED) &&
+      (idata->reopen & IMAP_REOPEN_ALLOW) &&
+      !idata->ctx->closing)
+  {
+    mx_fastclose_mailbox (idata->ctx);
+    mutt_error (_("Mailbox closed"));
+    mutt_sleep (1);
+    idata->state = IMAP_DISCONNECTED;
+  }
+
+  if (idata->state != IMAP_SELECTED)
+  {
+    idata->state = IMAP_DISCONNECTED;
+    idata->status = 0;
+  }
+}
+
+/* cmd_handle_untagged: fallback parser for otherwise unhandled messages. */
+static int cmd_handle_untagged (IMAP_DATA* idata)
+{
+  char* s;
+  char* pn;
+  int count;
+
+  s = imap_next_word (idata->cmd.buf);
+
+  if ((idata->state == IMAP_SELECTED) && isdigit ((unsigned char) *s))
+  {
+    pn = s;
+    s = imap_next_word (s);
+
+    /* EXISTS and EXPUNGE are always related to the SELECTED mailbox for the
+     * connection, so update that one.
+     */
+    if (ascii_strncasecmp ("EXISTS", s, 6) == 0)
+    {
+      dprint (2, (debugfile, "Handling EXISTS\n"));
+
+      /* new mail arrived */
+      count = atoi (pn);
+
+      if ( !(idata->reopen & IMAP_EXPUNGE_PENDING) &&
+          count < idata->ctx->msgcount)
+      {
+       /* something is wrong because the server reported fewer messages
+        * than we previously saw
+        */
+       mutt_error _("Fatal error.  Message count is out of sync!");
+       idata->status = IMAP_FATAL;
+       return -1;
+      }
+      /* at least the InterChange server sends EXISTS messages freely,
+       * even when there is no new mail */
+      else if (count == idata->ctx->msgcount)
+       dprint (3, (debugfile,
+          "cmd_handle_untagged: superfluous EXISTS message.\n"));
+      else
+      {
+       if (!(idata->reopen & IMAP_EXPUNGE_PENDING))
+        {
+          dprint (2, (debugfile,
+            "cmd_handle_untagged: New mail in %s - %d messages total.\n",
+            idata->mailbox, count));
+         idata->reopen |= IMAP_NEWMAIL_PENDING;
+        }
+       idata->newMailCount = count;
+      }
+    }
+    /* pn vs. s: need initial seqno */
+    else if (ascii_strncasecmp ("EXPUNGE", s, 7) == 0)
+      cmd_parse_expunge (idata, pn);
+    else if (ascii_strncasecmp ("FETCH", s, 5) == 0)
+      cmd_parse_fetch (idata, pn);
+  }
+  else if (ascii_strncasecmp ("CAPABILITY", s, 10) == 0)
+    cmd_parse_capabilities (idata, s);
+  else if (ascii_strncasecmp ("MYRIGHTS", s, 8) == 0)
+    cmd_parse_myrights (idata, s);
+  else if (ascii_strncasecmp ("BYE", s, 3) == 0)
+  {
+    dprint (2, (debugfile, "Handling BYE\n"));
+
+    /* check if we're logging out */
+    if (idata->status == IMAP_BYE)
+      return 0;
+
+    /* server shut down our connection */
+    s += 3;
+    SKIPWS (s);
+    mutt_error ("%s", s);
+    idata->status = IMAP_BYE;
+    if (idata->state == IMAP_SELECTED)
+      mx_fastclose_mailbox (idata->ctx);
+    mutt_socket_close (idata->conn);
+    idata->state = IMAP_DISCONNECTED;
+
+    return -1;
+  }
+  else if (option (OPTIMAPSERVERNOISE) && (ascii_strncasecmp ("NO", s, 2) == 0))
+  {
+    dprint (2, (debugfile, "Handling untagged NO\n"));
+
+    /* Display the warning message from the server */
+    mutt_error ("%s", s+3);
+    mutt_sleep (2);
+  }
+
+  return 0;
+}
+
+/* cmd_make_sequence: make a tag suitable for starting an IMAP command */
+static void cmd_make_sequence (IMAP_DATA* idata)
+{
+  snprintf (idata->cmd.seq, sizeof (idata->cmd.seq), "a%04d", idata->seqno++);
+
+  if (idata->seqno > 9999)
+    idata->seqno = 0;
+}
+
+/* cmd_parse_capabilities: set capability bits according to CAPABILITY
+ *   response */
+static void cmd_parse_capabilities (IMAP_DATA* idata, char* s)
+{
+  int x;
+
+  dprint (2, (debugfile, "Handling CAPABILITY\n"));
+
+  s = imap_next_word (s);
+  FREE(&idata->capstr);
+  idata->capstr = safe_strdup (s);
+
+  memset (idata->capabilities, 0, sizeof (idata->capabilities));
+
+  while (*s)
+  {
+    for (x = 0; x < CAPMAX; x++)
+      if (imap_wordcasecmp(Capabilities[x], s) == 0)
+      {
+       mutt_bit_set (idata->capabilities, x);
+       break;
+      }
+    s = imap_next_word (s);
+  }
+}
+
+/* cmd_parse_expunge: mark headers with new sequence ID and mark idata to
+ *   be reopened at our earliest convenience */
+static void cmd_parse_expunge (IMAP_DATA* idata, const char* s)
+{
+  int expno, cur;
+  HEADER* h;
+
+  dprint (2, (debugfile, "Handling EXPUNGE\n"));
+
+  expno = atoi (s);
+
+  /* walk headers, zero seqno of expunged message, decrement seqno of those
+   * above. Possibly we could avoid walking the whole list by resorting
+   * and guessing a good starting point, but I'm guessing the resort would
+   * nullify the gains */
+  for (cur = 0; cur < idata->ctx->msgcount; cur++)
+  {
+    h = idata->ctx->hdrs[cur];
+
+    if (h->index+1 == expno)
+      h->index = -1;
+    else if (h->index+1 > expno)
+      h->index--;
+  }
+
+  idata->reopen |= IMAP_EXPUNGE_PENDING;
+}
+
+/* cmd_parse_fetch: Load fetch response into IMAP_DATA. Currently only
+ *   handles unanticipated FETCH responses, and only FLAGS data. We get
+ *   these if another client has changed flags for a mailbox we've selected.
+ *   Of course, a lot of code here duplicates code in message.c. */
+static void cmd_parse_fetch (IMAP_DATA* idata, char* s)
+{
+  int msgno, cur;
+  HEADER* h = NULL;
+
+  dprint (2, (debugfile, "Handling FETCH\n"));
+
+  msgno = atoi (s);
+  
+  /* see cmd_parse_expunge */
+  for (cur = 0; cur < idata->ctx->msgcount; cur++)
+  {
+    h = idata->ctx->hdrs[cur];
+    
+    if (h->active && h->index+1 == msgno)
+    {
+      dprint (2, (debugfile, "Message UID %d updated\n", HEADER_DATA(h)->uid));
+      break;
+    }
+
+    h = NULL;
+  }
+  
+  if (!h)
+  {
+    dprint (1, (debugfile, "FETCH response ignored for this message\n"));
+    return;
+  }
+  
+  /* skip FETCH */
+  s = imap_next_word (s);
+  s = imap_next_word (s);
+
+  if (*s != '(')
+  {
+    dprint (1, (debugfile, "Malformed FETCH response"));
+    return;
+  }
+  s++;
+
+  if (ascii_strncasecmp ("FLAGS", s, 5) != 0)
+  {
+    dprint (2, (debugfile, "Only handle FLAGS updates\n"));
+    return;
+  }
+
+  /* If server flags could conflict with mutt's flags, reopen the mailbox. */
+  if (h->changed)
+    idata->reopen |= IMAP_EXPUNGE_PENDING;
+  else {
+    imap_set_flags (idata, h, s);
+    idata->check_status = IMAP_FLAGS_PENDING;
+  }
+}
+
+/* cmd_parse_myrights: set rights bits according to MYRIGHTS response */
+static void cmd_parse_myrights (IMAP_DATA* idata, char* s)
+{
+  dprint (2, (debugfile, "Handling MYRIGHTS\n"));
+
+  s = imap_next_word (s);
+  s = imap_next_word (s);
+
+  /* zero out current rights set */
+  memset (idata->rights, 0, sizeof (idata->rights));
+
+  while (*s && !isspace((unsigned char) *s))
+  {
+    switch (*s) 
+    {
+      case 'l':
+       mutt_bit_set (idata->rights, IMAP_ACL_LOOKUP);
+       break;
+      case 'r':
+       mutt_bit_set (idata->rights, IMAP_ACL_READ);
+       break;
+      case 's':
+       mutt_bit_set (idata->rights, IMAP_ACL_SEEN);
+       break;
+      case 'w':
+       mutt_bit_set (idata->rights, IMAP_ACL_WRITE);
+       break;
+      case 'i':
+       mutt_bit_set (idata->rights, IMAP_ACL_INSERT);
+       break;
+      case 'p':
+       mutt_bit_set (idata->rights, IMAP_ACL_POST);
+       break;
+      case 'c':
+       mutt_bit_set (idata->rights, IMAP_ACL_CREATE);
+       break;
+      case 'd':
+       mutt_bit_set (idata->rights, IMAP_ACL_DELETE);
+       break;
+      case 'a':
+       mutt_bit_set (idata->rights, IMAP_ACL_ADMIN);
+       break;
+    }
+    s++;
+  }
+}
diff --git a/imap/imap.c b/imap/imap.c
new file mode 100644 (file)
index 0000000..d4b622c
--- /dev/null
@@ -0,0 +1,1469 @@
+/*
+ * Copyright (C) 1996-8 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1996-9 Brandon Long <blong@fiction.net>
+ * Copyright (C) 1999-2003 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+/* Support for IMAP4rev1, with the occasional nod to IMAP 4. */
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "mx.h"
+#include "mailbox.h"
+#include "globals.h"
+#include "sort.h"
+#include "browser.h"
+#include "message.h"
+#include "imap_private.h"
+#ifdef USE_SSL
+# include "mutt_ssl.h"
+#endif
+
+#include <unistd.h>
+#include <ctype.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+/* imap forward declarations */
+static int imap_get_delim (IMAP_DATA *idata);
+static char* imap_get_flags (LIST** hflags, char* s);
+static int imap_check_acl (IMAP_DATA *idata);
+static int imap_check_capabilities (IMAP_DATA* idata);
+static void imap_set_flag (IMAP_DATA* idata, int aclbit, int flag,
+                          const char* str, char* flags, size_t flsize);
+
+/* imap_access: Check permissions on an IMAP mailbox. */
+int imap_access (const char* path, int flags)
+{
+  IMAP_DATA* idata;
+  IMAP_MBOX mx;
+  char buf[LONG_STRING];
+  char mailbox[LONG_STRING];
+  char mbox[LONG_STRING];
+
+  if (imap_parse_path (path, &mx))
+    return -1;
+
+  if (!(idata = imap_conn_find (&mx.account,
+    option (OPTIMAPPASSIVE) ? M_IMAP_CONN_NONEW : 0)))
+  {
+    FREE (&mx.mbox);
+    return -1;
+  }
+
+  imap_fix_path (idata, mx.mbox, mailbox, sizeof (mailbox));
+  FREE (&mx.mbox);
+  imap_munge_mbox_name (mbox, sizeof (mbox), mailbox);
+
+  /* TODO: ACL checks. Right now we assume if it exists we can mess with it. */
+  if (mutt_bit_isset (idata->capabilities, IMAP4REV1))
+    snprintf (buf, sizeof (buf), "STATUS %s (UIDVALIDITY)", mbox);
+  else if (mutt_bit_isset (idata->capabilities, STATUS))
+    snprintf (buf, sizeof (buf), "STATUS %s (UID-VALIDITY)", mbox);
+  else
+  {
+    dprint (2, (debugfile, "imap_access: STATUS not supported?\n"));
+    return -1;
+  }
+
+  if (imap_exec (idata, buf, IMAP_CMD_FAIL_OK) < 0)
+  {
+    dprint (1, (debugfile, "imap_access: Can't check STATUS of %s\n", mbox));
+    return -1;
+  }
+
+  return 0;
+}
+
+int imap_create_mailbox (IMAP_DATA* idata, char* mailbox)
+{
+  char buf[LONG_STRING], mbox[LONG_STRING];
+
+  imap_munge_mbox_name (mbox, sizeof (mbox), mailbox);
+  snprintf (buf, sizeof (buf), "CREATE %s", mbox);
+      
+  if (imap_exec (idata, buf, 0) != 0)
+    return -1;
+
+  return 0;
+}
+
+int imap_delete_mailbox (CONTEXT* ctx, IMAP_MBOX mx)
+{
+  char buf[LONG_STRING], mbox[LONG_STRING];
+  IMAP_DATA *idata;
+
+  if (!ctx || !ctx->data) {
+       if (!(idata = imap_conn_find (&mx.account,
+               option (OPTIMAPPASSIVE) ? M_IMAP_CONN_NONEW : 0)))
+       {
+               FREE (&mx.mbox);
+               return -1;
+       }
+  } else {
+         idata = ctx->data;
+  }
+
+  imap_munge_mbox_name (mbox, sizeof (mbox), mx.mbox);
+  snprintf (buf, sizeof (buf), "DELETE %s", mbox);
+
+  if (imap_exec ((IMAP_DATA*) idata, buf, 0) != 0)
+    return -1;
+
+  return 0;
+}
+
+/* imap_logout_all: close all open connections. Quick and dirty until we can
+ *   make sure we've got all the context we need. */
+void imap_logout_all (void) 
+{
+  CONNECTION* conn;
+  CONNECTION* tmp;
+
+  conn = mutt_socket_head ();
+
+  while (conn)
+  {
+    tmp = conn->next;
+
+    if (conn->account.type == M_ACCT_TYPE_IMAP && conn->fd >= 0)
+    {
+      mutt_message (_("Closing connection to %s..."), conn->account.host);
+      imap_logout ((IMAP_DATA*) conn->data);
+      mutt_clear_error ();
+      mutt_socket_close (conn);
+      mutt_socket_free (conn);
+    }
+
+    conn = tmp;
+  }
+}
+
+/* imap_read_literal: read bytes bytes from server into file. Not explicitly
+ *   buffered, relies on FILE buffering. NOTE: strips \r from \r\n.
+ *   Apparently even literals use \r\n-terminated strings ?! */
+int imap_read_literal (FILE* fp, IMAP_DATA* idata, long bytes)
+{
+  long pos;
+  char c;
+
+  int r = 0;
+
+  dprint (2, (debugfile, "imap_read_literal: reading %ld bytes\n", bytes));
+  for (pos = 0; pos < bytes; pos++)
+  {
+    if (mutt_socket_readchar (idata->conn, &c) != 1)
+    {
+      dprint (1, (debugfile, "imap_read_literal: error during read, %ld bytes read\n", pos));
+      idata->status = IMAP_FATAL;
+      
+      return -1;
+    }
+
+#if 1
+    if (r == 1 && c != '\n')
+      fputc ('\r', fp);
+
+    if (c == '\r')
+    {
+      r = 1;
+      continue;
+    }
+    else
+      r = 0;
+#endif
+    fputc (c, fp);
+#ifdef DEBUG
+    if (debuglevel >= IMAP_LOG_LTRL)
+      fputc (c, debugfile);
+#endif
+  }
+
+  return 0;
+}
+
+/* imap_expunge_mailbox: Purge IMAP portion of expunged messages from the
+ *   context. Must not be done while something has a handle on any headers
+ *   (eg inside pager or editor). That is, check IMAP_REOPEN_ALLOW. */
+void imap_expunge_mailbox (IMAP_DATA* idata)
+{
+  HEADER* h;
+  int i, cacheno;
+
+  for (i = 0; i < idata->ctx->msgcount; i++)
+  {
+    h = idata->ctx->hdrs[i];
+
+    if (h->index == -1)
+    {
+      dprint (2, (debugfile, "Expunging message UID %d.\n", HEADER_DATA (h)->uid));
+
+      h->active = 0;
+
+      /* free cached body from disk, if neccessary */
+      cacheno = HEADER_DATA(h)->uid % IMAP_CACHE_LEN;
+      if (idata->cache[cacheno].uid == HEADER_DATA(h)->uid &&
+         idata->cache[cacheno].path)
+      {
+       unlink (idata->cache[cacheno].path);
+       FREE (&idata->cache[cacheno].path);
+      }
+
+      imap_free_header_data (&h->data);
+    }
+  }
+
+  /* We may be called on to expunge at any time. We can't rely on the caller
+   * to always know to rethread */
+  mx_update_tables (idata->ctx, 0);
+  mutt_sort_headers (idata->ctx, 1);
+}
+
+static int imap_get_delim (IMAP_DATA *idata)
+{
+  char *s;
+  int rc;
+
+  /* assume that the delim is /.  If this fails, we're in bigger trouble
+   * than getting the delim wrong */
+  idata->delim = '/';
+
+  imap_cmd_start (idata, "LIST \"\" \"\"");
+
+  do 
+  {
+    if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE)
+      break;
+
+    s = imap_next_word (idata->cmd.buf);
+    if (ascii_strncasecmp ("LIST", s, 4) == 0)
+    {
+      s = imap_next_word (s);
+      s = imap_next_word (s);
+      if (s && s[0] == '\"' && s[1] && s[2] == '\"')
+       idata->delim = s[1];
+      else if (s && s[0] == '\"' && s[1] && s[1] == '\\' && s[2] && s[3] == '\"')
+       idata->delim = s[2];
+    }
+  }
+  while (rc == IMAP_CMD_CONTINUE);
+
+  if (rc != IMAP_CMD_OK)
+  {
+    dprint (1, (debugfile, "imap_get_delim: failed.\n"));
+    return -1;
+  }
+
+  dprint (2, (debugfile, "Delimiter: %c\n", idata->delim));
+
+  return -1;
+}
+
+/* get rights for folder, let imap_handle_untagged do the rest */
+static int imap_check_acl (IMAP_DATA *idata)
+{
+  char buf[LONG_STRING];
+  char mbox[LONG_STRING];
+
+  imap_munge_mbox_name (mbox, sizeof(mbox), idata->mailbox);
+  snprintf (buf, sizeof (buf), "MYRIGHTS %s", mbox);
+  if (imap_exec (idata, buf, 0) != 0)
+  {
+    imap_error ("imap_check_acl", buf);
+    return -1;
+  }
+  return 0;
+}
+
+/* imap_check_capabilities: make sure we can log in to this server. */
+static int imap_check_capabilities (IMAP_DATA* idata)
+{
+  if (imap_exec (idata, "CAPABILITY", 0) != 0)
+  {
+    imap_error ("imap_check_capabilities", idata->cmd.buf);
+    return -1;
+  }
+
+  if (!(mutt_bit_isset(idata->capabilities,IMAP4)
+      ||mutt_bit_isset(idata->capabilities,IMAP4REV1)))
+  {
+    mutt_error _("This IMAP server is ancient. Mutt does not work with it.");
+    mutt_sleep (2);    /* pause a moment to let the user see the error */
+
+    return -1;
+  }
+
+  return 0;
+}
+
+/* imap_conn_find: Find an open IMAP connection matching account, or open
+ *   a new one if none can be found. */
+IMAP_DATA* imap_conn_find (const ACCOUNT* account, int flags)
+{
+  CONNECTION* conn;
+  IMAP_DATA* idata;
+  ACCOUNT* creds;
+
+  if (!(conn = mutt_conn_find (NULL, account)))
+    return NULL;
+
+  /* if opening a new UNSELECTED connection, preserve existing creds */
+  creds = &(conn->account);
+
+  /* make sure this connection is not in SELECTED state, if neccessary */
+  if (flags & M_IMAP_CONN_NOSELECT)
+    while (conn->data && ((IMAP_DATA*) conn->data)->state == IMAP_SELECTED)
+    {
+      if (!(conn = mutt_conn_find (conn, account)))
+       return NULL;
+      memcpy (&(conn->account), creds, sizeof (ACCOUNT));
+    }
+  
+  idata = (IMAP_DATA*) conn->data;
+
+  /* don't open a new connection if one isn't wanted */
+  if (flags & M_IMAP_CONN_NONEW)
+  {
+    if (!idata)
+    {
+      mutt_socket_free (conn);
+      return NULL;
+    }
+    if (idata->state < IMAP_AUTHENTICATED)
+      return NULL;
+  }
+  
+  if (!idata)
+  {
+    /* The current connection is a new connection */
+    if (! (idata = imap_new_idata ()))
+    {
+      mutt_socket_free (conn);
+      return NULL;
+    }
+
+    conn->data = idata;
+    idata->conn = conn;
+  }
+
+  if (idata->state == IMAP_DISCONNECTED)
+    imap_open_connection (idata);
+  if (idata->state == IMAP_CONNECTED)
+  {
+    if (!imap_authenticate (idata))
+    {
+      idata->state = IMAP_AUTHENTICATED;
+      if (idata->conn->ssf)
+       dprint (2, (debugfile, "Communication encrypted at %d bits\n",
+                   idata->conn->ssf));
+    }
+    else
+      mutt_account_unsetpass (&idata->conn->account);
+    
+    FREE (&idata->capstr);
+  }
+  if (idata->state == IMAP_AUTHENTICATED)
+    imap_get_delim (idata);
+  
+  return idata;
+}
+
+int imap_open_connection (IMAP_DATA* idata)
+{
+  char buf[LONG_STRING];
+
+  if (mutt_socket_open (idata->conn) < 0)
+    return -1;
+
+  idata->state = IMAP_CONNECTED;
+
+  if (imap_cmd_step (idata) != IMAP_CMD_CONTINUE) {
+    mutt_error (_("Unexpected response received from server: %s"), idata->cmd.buf);
+    mutt_sleep (1);
+
+    mutt_socket_close (idata->conn);
+    idata->state = IMAP_DISCONNECTED;
+    return -1;
+  }
+
+  if (ascii_strncasecmp ("* OK", idata->cmd.buf, 4) == 0)
+  {
+    /* TODO: Parse new tagged CAPABILITY data (* OK [CAPABILITY...]) */
+    if (imap_check_capabilities (idata))
+      goto bail;
+#if defined(USE_SSL) && !defined(USE_NSS)
+    /* Attempt STARTTLS if available and desired. */
+    if (mutt_bit_isset (idata->capabilities, STARTTLS) && !idata->conn->ssf)
+    {
+      int rc;
+
+      if ((rc = query_quadoption (OPT_SSLSTARTTLS,
+        _("Secure connection with TLS?"))) == -1)
+       goto err_close_conn;
+      if (rc == M_YES) {
+       if ((rc = imap_exec (idata, "STARTTLS", IMAP_CMD_FAIL_OK)) == -1)
+         goto bail;
+       if (rc != -2)
+       {
+         if (mutt_ssl_starttls (idata->conn))
+         {
+           mutt_error (_("Could not negotiate TLS connection"));
+           mutt_sleep (1);
+           goto bail;
+         }
+         else
+         {
+           /* RFC 2595 demands we recheck CAPABILITY after TLS completes. */
+           if (imap_exec (idata, "CAPABILITY", 0))
+             goto bail;
+         }
+       }
+      }
+    }
+#endif    
+  }
+  else if (ascii_strncasecmp ("* PREAUTH", idata->cmd.buf, 9) == 0)
+  {
+    idata->state = IMAP_AUTHENTICATED;
+    if (imap_check_capabilities (idata) != 0)
+      goto bail;
+    FREE (&idata->capstr);
+  } 
+  else
+  {
+    imap_error ("imap_open_connection()", buf);
+    goto bail;
+  }
+
+  return 0;
+
+ err_close_conn:
+  mutt_socket_close (idata->conn);
+ bail:
+  FREE (&idata->capstr);
+  return -1;
+}
+
+/* imap_get_flags: Make a simple list out of a FLAGS response.
+ *   return stream following FLAGS response */
+static char* imap_get_flags (LIST** hflags, char* s)
+{
+  LIST* flags;
+  char* flag_word;
+  char ctmp;
+
+  /* sanity-check string */
+  if (ascii_strncasecmp ("FLAGS", s, 5) != 0)
+  {
+    dprint (1, (debugfile, "imap_get_flags: not a FLAGS response: %s\n",
+      s));
+    return NULL;
+  }
+  s += 5;
+  SKIPWS(s);
+  if (*s != '(')
+  {
+    dprint (1, (debugfile, "imap_get_flags: bogus FLAGS response: %s\n",
+      s));
+    return NULL;
+  }
+
+  /* create list, update caller's flags handle */
+  flags = mutt_new_list();
+  *hflags = flags;
+
+  while (*s && *s != ')')
+  {
+    s++;
+    SKIPWS(s);
+    flag_word = s;
+    while (*s && (*s != ')') && !ISSPACE (*s))
+      s++;
+    ctmp = *s;
+    *s = '\0';
+    if (*flag_word)
+      mutt_add_list (flags, flag_word);
+    *s = ctmp;
+  }
+
+  /* note bad flags response */
+  if (*s != ')')
+  {
+    dprint (1, (debugfile,
+      "imap_get_flags: Unterminated FLAGS response: %s\n", s));
+    mutt_free_list (hflags);
+
+    return NULL;
+  }
+
+  s++;
+
+  return s;
+}
+
+int imap_open_mailbox (CONTEXT* ctx)
+{
+  CONNECTION *conn;
+  IMAP_DATA *idata;
+  char buf[LONG_STRING];
+  char bufout[LONG_STRING];
+  int count = 0;
+  IMAP_MBOX mx;
+  int rc;
+  
+  if (imap_parse_path (ctx->path, &mx))
+  {
+    mutt_error (_("%s is an invalid IMAP path"), ctx->path);
+    return -1;
+  }
+
+  /* we require a connection which isn't currently in IMAP_SELECTED state */
+  if (!(idata = imap_conn_find (&(mx.account), M_IMAP_CONN_NOSELECT)))
+    goto fail_noidata;
+  if (idata->state < IMAP_AUTHENTICATED)
+    goto fail;
+
+  conn = idata->conn;
+
+  /* once again the context is new */
+  ctx->data = idata;
+
+  /* Clean up path and replace the one in the ctx */
+  imap_fix_path (idata, mx.mbox, buf, sizeof (buf));
+  FREE(&(idata->mailbox));
+  idata->mailbox = safe_strdup (buf);
+  imap_qualify_path (buf, sizeof (buf), &mx, idata->mailbox);
+
+  FREE (&(ctx->path));
+  ctx->path = safe_strdup (buf);
+
+  idata->ctx = ctx;
+
+  /* clear mailbox status */
+  idata->status = 0;
+  memset (idata->rights, 0, (RIGHTSMAX+7)/8);
+  idata->newMailCount = 0;
+
+  mutt_message (_("Selecting %s..."), idata->mailbox);
+  imap_munge_mbox_name (buf, sizeof(buf), idata->mailbox);
+  snprintf (bufout, sizeof (bufout), "%s %s",
+    ctx->readonly ? "EXAMINE" : "SELECT", buf);
+
+  idata->state = IMAP_SELECTED;
+
+  imap_cmd_start (idata, bufout);
+
+  do
+  {
+    char *pc;
+    
+    if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE)
+      break;
+
+    pc = idata->cmd.buf + 2;
+
+    /* Obtain list of available flags here, may be overridden by a
+     * PERMANENTFLAGS tag in the OK response */
+    if (ascii_strncasecmp ("FLAGS", pc, 5) == 0)
+    {
+      /* don't override PERMANENTFLAGS */
+      if (!idata->flags)
+      {
+       dprint (2, (debugfile, "Getting mailbox FLAGS\n"));
+       if ((pc = imap_get_flags (&(idata->flags), pc)) == NULL)
+         goto fail;
+      }
+    }
+    /* PERMANENTFLAGS are massaged to look like FLAGS, then override FLAGS */
+    else if (ascii_strncasecmp ("OK [PERMANENTFLAGS", pc, 18) == 0)
+    {
+      dprint (2, (debugfile, "Getting mailbox PERMANENTFLAGS\n"));
+      /* safe to call on NULL */
+      mutt_free_list (&(idata->flags));
+      /* skip "OK [PERMANENT" so syntax is the same as FLAGS */
+      pc += 13;
+      if ((pc = imap_get_flags (&(idata->flags), pc)) == NULL)
+       goto fail;
+    }
+    else
+    {
+      pc = imap_next_word (pc);
+      if (!ascii_strncasecmp ("EXISTS", pc, 6))
+      {
+       count = idata->newMailCount;
+       idata->newMailCount = 0;
+      }
+    }
+  }
+  while (rc == IMAP_CMD_CONTINUE);
+
+  if (rc == IMAP_CMD_NO)
+  {
+    char *s;
+    s = imap_next_word (idata->cmd.buf); /* skip seq */
+    s = imap_next_word (s); /* Skip response */
+    mutt_error ("%s", s);
+    mutt_sleep (2);
+    goto fail;
+  }
+
+  if (rc != IMAP_CMD_OK)
+    goto fail;
+
+  /* check for READ-ONLY notification */
+  if (!ascii_strncasecmp (imap_get_qualifier (idata->cmd.buf), "[READ-ONLY]", 11)  \
+  && !mutt_bit_isset (idata->capabilities, ACL))
+  {
+    dprint (2, (debugfile, "Mailbox is read-only.\n"));
+    ctx->readonly = 1;
+  }
+
+#ifdef DEBUG
+  /* dump the mailbox flags we've found */
+  if (debuglevel > 2)
+  {
+    if (!idata->flags)
+      dprint (3, (debugfile, "No folder flags found\n"));
+    else
+    {
+      LIST* t = idata->flags;
+
+      dprint (3, (debugfile, "Mailbox flags: "));
+
+      t = t->next;
+      while (t)
+      {
+        dprint (3, (debugfile, "[%s] ", t->data));
+        t = t->next;
+      }
+      dprint (3, (debugfile, "\n"));
+    }
+  }
+#endif
+
+  if (mutt_bit_isset (idata->capabilities, ACL))
+  {
+    if (imap_check_acl (idata))
+      goto fail;
+    if (!(mutt_bit_isset(idata->rights, IMAP_ACL_DELETE) ||
+          mutt_bit_isset(idata->rights, IMAP_ACL_SEEN) ||
+          mutt_bit_isset(idata->rights, IMAP_ACL_WRITE) ||
+          mutt_bit_isset(idata->rights, IMAP_ACL_INSERT)))
+       ctx->readonly = 1;
+  }
+  /* assume we have all rights if ACL is unavailable */
+  else
+  {
+    mutt_bit_set (idata->rights, IMAP_ACL_LOOKUP);
+    mutt_bit_set (idata->rights, IMAP_ACL_READ);
+    mutt_bit_set (idata->rights, IMAP_ACL_SEEN);
+    mutt_bit_set (idata->rights, IMAP_ACL_WRITE);
+    mutt_bit_set (idata->rights, IMAP_ACL_INSERT);
+    mutt_bit_set (idata->rights, IMAP_ACL_POST);
+    mutt_bit_set (idata->rights, IMAP_ACL_CREATE);
+    mutt_bit_set (idata->rights, IMAP_ACL_DELETE);
+  }
+
+  ctx->hdrmax = count;
+  ctx->hdrs = safe_calloc (count, sizeof (HEADER *));
+  ctx->v2r = safe_calloc (count, sizeof (int));
+  ctx->msgcount = 0;
+  if (count && (imap_read_headers (idata, 0, count-1) < 0))
+  {
+    mutt_error _("Error opening mailbox");
+    mutt_sleep (1);
+    goto fail;
+  }
+
+  dprint (2, (debugfile, "imap_open_mailbox: msgcount is %d\n", ctx->msgcount));
+  FREE (&mx.mbox);
+  return 0;
+
+ fail:
+  if (idata->state == IMAP_SELECTED)
+    idata->state = IMAP_AUTHENTICATED;
+ fail_noidata:
+  FREE (&mx.mbox);
+  return -1;
+}
+
+int imap_open_mailbox_append (CONTEXT *ctx)
+{
+  CONNECTION *conn;
+  IMAP_DATA *idata;
+  char buf[LONG_STRING], mbox[LONG_STRING];
+  char mailbox[LONG_STRING];
+  int r;
+  IMAP_MBOX mx;
+
+  if (imap_parse_path (ctx->path, &mx))
+    return -1;
+
+  /* in APPEND mode, we appear to hijack an existing IMAP connection -
+   * ctx is brand new and mostly empty */
+
+  if (!(idata = imap_conn_find (&(mx.account), 0)))
+    goto fail;
+  conn = idata->conn;
+
+  ctx->magic = M_IMAP;
+  ctx->data = idata;
+
+  /* check mailbox existance */
+
+  imap_fix_path (idata, mx.mbox, mailbox, sizeof (mailbox));
+
+  imap_munge_mbox_name (mbox, sizeof (mbox), mailbox);
+                               
+  if (mutt_bit_isset(idata->capabilities,IMAP4REV1))
+    snprintf (buf, sizeof (buf), "STATUS %s (UIDVALIDITY)", mbox);
+  else if (mutt_bit_isset(idata->capabilities,STATUS))
+    /* We have no idea what the other guy wants. UW imapd 8.3 wants this
+     * (but it does not work if another mailbox is selected) */
+    snprintf (buf, sizeof (buf), "STATUS %s (UID-VALIDITY)", mbox);
+  else
+  {
+    /* STATUS not supported */
+    mutt_message _("Unable to append to IMAP mailboxes at this server");
+
+    goto fail;
+  }
+
+  r = imap_exec (idata, buf, IMAP_CMD_FAIL_OK);
+  if (r == -2)
+  {
+    /* command failed cause folder doesn't exist */
+    snprintf (buf, sizeof (buf), _("Create %s?"), mailbox);
+    if (option (OPTCONFIRMCREATE) && mutt_yesorno (buf, 1) < 1)
+      goto fail;
+
+    if (imap_create_mailbox (idata, mailbox) < 0)
+      goto fail;
+  }
+  else if (r == -1)
+    /* Hmm, some other failure */
+    goto fail;
+
+  FREE (&mx.mbox);
+  return 0;
+
+ fail:
+  FREE (&mx.mbox);
+  return -1;
+}
+
+/* imap_logout: Gracefully log out of server. */
+void imap_logout (IMAP_DATA* idata)
+{
+  /* we set status here to let imap_handle_untagged know we _expect_ to
+   * receive a bye response (so it doesn't freak out and close the conn) */
+  idata->status = IMAP_BYE;
+  imap_cmd_start (idata, "LOGOUT");
+  while (imap_cmd_step (idata) == IMAP_CMD_CONTINUE)
+    ;
+}
+
+int imap_close_connection (CONTEXT *ctx)
+{
+  dprint (1, (debugfile, "imap_close_connection(): closing connection\n"));
+  /* if the server didn't shut down on us, close the connection gracefully */
+  if (CTX_DATA->status != IMAP_BYE)
+  {
+    mutt_message _("Closing connection to IMAP server...");
+    imap_logout (CTX_DATA);
+    mutt_clear_error ();
+  }
+  mutt_socket_close (CTX_DATA->conn);
+  CTX_DATA->state = IMAP_DISCONNECTED;
+  CTX_DATA->conn->data = NULL;
+  return 0;
+}
+
+/* imap_set_flag: append str to flags if we currently have permission
+ *   according to aclbit */
+static void imap_set_flag (IMAP_DATA* idata, int aclbit, int flag,
+  const char *str, char *flags, size_t flsize)
+{
+  if (mutt_bit_isset (idata->rights, aclbit))
+    if (flag)
+      strncat (flags, str, flsize);
+}
+
+/* imap_make_msg_set: make an IMAP4rev1 UID message set out of a set of
+ *   headers, given a flag enum to filter on.
+ * Params: idata: IMAP_DATA containing context containing header set
+ *         buf: to write message set into
+ *         buflen: length of buffer
+ *         flag: enum of flag type on which to filter
+ *         changed: include only changed messages in message set
+ * Returns: number of messages in message set (0 if no matches) */
+int imap_make_msg_set (IMAP_DATA* idata, BUFFER* buf, int flag, int changed)
+{
+  HEADER** hdrs;       /* sorted local copy */
+  int count = 0;       /* number of messages in message set */
+  int match = 0;       /* whether current message matches flag condition */
+  unsigned int setstart = 0;   /* start of current message range */
+  int n;
+  short oldsort;       /* we clobber reverse, must restore it */
+  /* assuming 32-bit UIDs */
+  char uid[12];
+  int started = 0;
+
+  /* make copy of header pointers to sort in natural order */
+  hdrs = safe_calloc (idata->ctx->msgcount, sizeof (HEADER*));
+  memcpy (hdrs, idata->ctx->hdrs, idata->ctx->msgcount * sizeof (HEADER*));
+
+  if (Sort != SORT_ORDER)
+  {
+    oldsort = Sort;
+    Sort = SORT_ORDER;
+    qsort ((void*) hdrs, idata->ctx->msgcount, sizeof (HEADER*),
+      mutt_get_sort_func (SORT_ORDER));
+    Sort = oldsort;
+  }
+  
+  for (n = 0; n < idata->ctx->msgcount; n++)
+  {
+    match = 0;
+    /* don't include pending expunged messages */
+    if (hdrs[n]->active)
+      switch (flag)
+      {
+        case M_DELETE:
+         if (hdrs[n]->deleted)
+           match = 1;
+         break;
+        case M_TAG:
+         if (hdrs[n]->tagged)
+           match = 1;
+         break;
+      }
+
+    if (match && (!changed || hdrs[n]->changed))
+    {
+      count++;
+      if (setstart == 0)
+      {
+        setstart = HEADER_DATA (hdrs[n])->uid;
+        if (started == 0)
+       {
+         snprintf (uid, sizeof (uid), "%u", HEADER_DATA (hdrs[n])->uid);
+         mutt_buffer_addstr (buf, uid);
+         started = 1;
+       }
+        else
+        {
+         snprintf (uid, sizeof (uid), ",%u", HEADER_DATA (hdrs[n])->uid);
+         mutt_buffer_addstr (buf, uid);
+        }
+      }
+      /* tie up if the last message also matches */
+      else if (n == idata->ctx->msgcount-1)
+      {
+       snprintf (uid, sizeof (uid), ":%u", HEADER_DATA (hdrs[n])->uid);
+       mutt_buffer_addstr (buf, uid);
+      }
+    }
+    /* this message is not expunged and doesn't match. End current set. */
+    else if (setstart && hdrs[n]->active)
+    {
+      if (HEADER_DATA (hdrs[n-1])->uid > setstart)
+      {
+       snprintf (uid, sizeof (uid), ":%u", HEADER_DATA (hdrs[n-1])->uid);
+       mutt_buffer_addstr (buf, uid);
+      }
+      setstart = 0;
+    }
+  }
+
+  FREE (&hdrs);
+
+  return count;
+}
+
+/* update the IMAP server to reflect message changes done within mutt.
+ * Arguments
+ *   ctx: the current context
+ *   expunge: 0 or 1 - do expunge? 
+ */
+
+int imap_sync_mailbox (CONTEXT* ctx, int expunge, int* index_hint)
+{
+  IMAP_DATA* idata;
+  CONTEXT* appendctx = NULL;
+  BUFFER cmd;
+  char flags[LONG_STRING];
+  char uid[11];
+  int deleted;
+  int n;
+  int err_continue = M_NO;     /* continue on error? */
+  int rc;
+
+  idata = (IMAP_DATA*) ctx->data;
+
+  if (idata->state != IMAP_SELECTED)
+  {
+    dprint (2, (debugfile, "imap_sync_mailbox: no mailbox selected\n"));
+    return -1;
+  }
+
+  /* CLOSE purges deleted messages. If we don't want to purge them, we must
+   * tell imap_close_mailbox not to issue the CLOSE command */
+  if (expunge)
+    idata->noclose = 0;
+  else
+    idata->noclose = 1;
+
+  /* This function is only called when the calling code        expects the context
+   * to be changed. */
+  imap_allow_reopen (ctx);
+
+  if ((rc = imap_check_mailbox (ctx, index_hint, 0)) != 0)
+    return rc;
+
+  memset (&cmd, 0, sizeof (cmd));
+
+  /* if we are expunging anyway, we can do deleted messages very quickly... */
+  if (expunge && mutt_bit_isset (idata->rights, IMAP_ACL_DELETE))
+  {
+    mutt_buffer_addstr (&cmd, "UID STORE ");
+    deleted = imap_make_msg_set (idata, &cmd, M_DELETE, 1);
+
+    /* if we have a message set, then let's delete */
+    if (deleted)
+    {
+      mutt_message (_("Marking %d messages deleted..."), deleted);
+      mutt_buffer_addstr (&cmd, " +FLAGS.SILENT (\\Deleted)");
+      /* mark these messages as unchanged so second pass ignores them. Done
+       * here so BOGUS UW-IMAP 4.7 SILENT FLAGS updates are ignored. */
+      for (n = 0; n < ctx->msgcount; n++)
+       if (ctx->hdrs[n]->deleted && ctx->hdrs[n]->changed)
+         ctx->hdrs[n]->active = 0;
+      if (imap_exec (idata, cmd.data, 0) != 0)
+      {
+       mutt_error (_("Expunge failed"));
+       mutt_sleep (1);
+       rc = -1;
+       goto out;
+      }
+    }
+  }
+
+  /* save status changes */
+  for (n = 0; n < ctx->msgcount; n++)
+  {
+    if (ctx->hdrs[n]->active && ctx->hdrs[n]->changed)
+    {
+      ctx->hdrs[n]->changed = 0;
+
+      mutt_message (_("Saving message status flags... [%d/%d]"), n+1,
+        ctx->msgcount);
+
+      snprintf (uid, sizeof (uid), "%u", HEADER_DATA(ctx->hdrs[n])->uid);
+      cmd.dptr = cmd.data;
+      mutt_buffer_addstr (&cmd, "UID STORE ");
+      mutt_buffer_addstr (&cmd, uid);
+
+      /* if attachments have been deleted we delete the message and reupload
+       * it. This works better if we're expunging, of course. */
+      if (ctx->hdrs[n]->attach_del)
+      {
+       dprint (3, (debugfile, "imap_sync_mailbox: Attachments to be deleted, falling back to _mutt_save_message\n"));
+       if (!appendctx)
+         appendctx = mx_open_mailbox (ctx->path, M_APPEND | M_QUIET, NULL);
+       if (!appendctx)
+       {
+         dprint (1, (debugfile, "imap_sync_mailbox: Error opening mailbox in append mode\n"));
+       }
+       else
+         _mutt_save_message (ctx->hdrs[n], appendctx, 1, 0, 0);
+      }
+      flags[0] = '\0';
+      
+      imap_set_flag (idata, IMAP_ACL_SEEN, ctx->hdrs[n]->read, "\\Seen ",
+        flags, sizeof (flags));
+      imap_set_flag (idata, IMAP_ACL_WRITE, ctx->hdrs[n]->flagged,
+        "\\Flagged ", flags, sizeof (flags));
+      imap_set_flag (idata, IMAP_ACL_WRITE, ctx->hdrs[n]->replied,
+        "\\Answered ", flags, sizeof (flags));
+      imap_set_flag (idata, IMAP_ACL_DELETE, ctx->hdrs[n]->deleted,
+        "\\Deleted ", flags, sizeof (flags));
+
+      /* now make sure we don't lose custom tags */
+      if (mutt_bit_isset (idata->rights, IMAP_ACL_WRITE))
+        imap_add_keywords (flags, ctx->hdrs[n], idata->flags, sizeof (flags));
+      
+      mutt_remove_trailing_ws (flags);
+      
+      /* UW-IMAP is OK with null flags, Cyrus isn't. The only solution is to
+       * explicitly revoke all system flags (if we have permission) */
+      if (!*flags)
+      {
+        imap_set_flag (idata, IMAP_ACL_SEEN, 1, "\\Seen ", flags, sizeof (flags));
+        imap_set_flag (idata, IMAP_ACL_WRITE, 1, "\\Flagged ", flags, sizeof (flags));
+        imap_set_flag (idata, IMAP_ACL_WRITE, 1, "\\Answered ", flags, sizeof (flags));
+        imap_set_flag (idata, IMAP_ACL_DELETE, 1, "\\Deleted ", flags, sizeof (flags));
+
+        mutt_remove_trailing_ws (flags);
+
+       mutt_buffer_addstr (&cmd, " -FLAGS.SILENT (");
+      }
+      else
+       mutt_buffer_addstr (&cmd, " FLAGS.SILENT (");
+      
+      mutt_buffer_addstr (&cmd, flags);
+      mutt_buffer_addstr (&cmd, ")");
+
+      /* dumb hack for bad UW-IMAP 4.7 servers spurious FLAGS updates */
+      ctx->hdrs[n]->active = 0;
+
+      /* after all this it's still possible to have no flags, if you
+       * have no ACL rights */
+      if (*flags && (imap_exec (idata, cmd.data, 0) != 0) &&
+        (err_continue != M_YES))
+      {
+        err_continue = imap_continue ("imap_sync_mailbox: STORE failed",
+          idata->cmd.buf);
+        if (err_continue != M_YES)
+       {
+         rc = -1;
+         goto out;
+       }
+      }
+
+      ctx->hdrs[n]->active = 1;
+    }
+  }
+  ctx->changed = 0;
+
+  /* We must send an EXPUNGE command if we're not closing. */
+  if (expunge && !(ctx->closing) &&
+      mutt_bit_isset(idata->rights, IMAP_ACL_DELETE))
+  {
+    mutt_message _("Expunging messages from server...");
+    /* Set expunge bit so we don't get spurious reopened messages */
+    idata->reopen |= IMAP_EXPUNGE_EXPECTED;
+    if (imap_exec (idata, "EXPUNGE", 0) != 0)
+    {
+      imap_error (_("imap_sync_mailbox: EXPUNGE failed"), idata->cmd.buf);
+      rc = -1;
+      goto out;
+    }
+  }
+
+  rc = 0;
+ out:
+  if (cmd.data)
+    FREE (&cmd.data);
+  if (appendctx)
+  {
+    mx_fastclose_mailbox (appendctx);
+    FREE (&appendctx);
+  }
+  return rc;
+}
+
+/* imap_close_mailbox: issue close command if neccessary, reset IMAP_DATA */
+void imap_close_mailbox (CONTEXT* ctx)
+{
+  IMAP_DATA* idata;
+  int i;
+
+  idata = (IMAP_DATA*) ctx->data;
+  /* Check to see if the mailbox is actually open */
+  if (!idata)
+    return;
+
+  if ((idata->status != IMAP_FATAL) &&
+      (idata->state == IMAP_SELECTED) &&
+      (ctx == idata->ctx))
+  {
+    if (!(idata->noclose) && imap_exec (idata, "CLOSE", 0))
+      mutt_error (_("CLOSE failed"));
+
+    idata->reopen &= IMAP_REOPEN_ALLOW;
+    idata->state = IMAP_AUTHENTICATED;
+    FREE (&(idata->mailbox));
+    mutt_free_list (&idata->flags);
+    idata->ctx = NULL;
+  }
+
+  /* free IMAP part of headers */
+  for (i = 0; i < ctx->msgcount; i++)
+    imap_free_header_data (&(ctx->hdrs[i]->data));
+
+  for (i = 0; i < IMAP_CACHE_LEN; i++)
+  {
+    if (idata->cache[i].path)
+    {
+      unlink (idata->cache[i].path);
+      FREE (&idata->cache[i].path);
+    }
+  }
+}
+
+/* use the NOOP command to poll for new mail
+ *
+ * return values:
+ *     M_REOPENED      mailbox has been externally modified
+ *     M_NEW_MAIL      new mail has arrived!
+ *     0               no change
+ *     -1              error
+ */
+int imap_check_mailbox (CONTEXT *ctx, int *index_hint, int force)
+{
+  /* overload keyboard timeout to avoid many mailbox checks in a row.
+   * Most users don't like having to wait exactly when they press a key. */
+  IMAP_DATA* idata;
+  int result = 0;
+
+  idata = (IMAP_DATA*) ctx->data;
+
+  if ((force || time(NULL) > idata->lastread + Timeout)
+      && imap_exec (idata, "NOOP", 0) != 0)
+    return -1;
+
+  /* We call this even when we haven't run NOOP in case we have pending
+   * changes to process, since we can reopen here. */
+  imap_cmd_finish (idata);
+
+  if (idata->check_status & IMAP_EXPUNGE_PENDING)
+    result = M_REOPENED;
+  else if (idata->check_status & IMAP_NEWMAIL_PENDING)
+    result = M_NEW_MAIL;
+  else if (idata->check_status & IMAP_FLAGS_PENDING)
+    result = M_FLAGS;
+
+  idata->check_status = 0;
+
+  return result;
+}
+
+/* returns count of recent messages if new = 1, else count of total messages.
+ * (useful for at least postponed function)
+ * Question of taste: use RECENT or UNSEEN for new?
+ *   0+   number of messages in mailbox
+ *  -1    error while polling mailboxes
+ */
+int imap_mailbox_check (char* path, int new)
+{
+  CONNECTION *conn;
+  IMAP_DATA *idata;
+  char buf[LONG_STRING];
+  char mbox[LONG_STRING];
+  char mbox_unquoted[LONG_STRING];
+  char *s;
+  int msgcount = 0;
+  int connflags = 0;
+  IMAP_MBOX mx;
+  int rc;
+  
+  if (imap_parse_path (path, &mx))
+    return -1;
+
+  /* If imap_passive is set, don't open a connection to check for new mail */
+  if (option (OPTIMAPPASSIVE))
+    connflags = M_IMAP_CONN_NONEW;
+
+  if (!(idata = imap_conn_find (&(mx.account), connflags)))
+  {
+    FREE (&mx.mbox);
+    return -1;
+  }
+  conn = idata->conn;
+
+  imap_fix_path (idata, mx.mbox, buf, sizeof (buf));
+  FREE (&mx.mbox);
+
+  imap_munge_mbox_name (mbox, sizeof(mbox), buf);
+  strfcpy (mbox_unquoted, buf, sizeof (mbox_unquoted));
+
+  /* The draft IMAP implementor's guide warns againts using the STATUS
+   * command on a mailbox that you have selected 
+   */
+
+  if (mutt_strcmp (mbox_unquoted, idata->mailbox) == 0
+      || (ascii_strcasecmp (mbox_unquoted, "INBOX") == 0
+         && mutt_strcasecmp (mbox_unquoted, idata->mailbox) == 0))
+  {
+    strfcpy (buf, "NOOP", sizeof (buf));
+  }
+  else if (mutt_bit_isset(idata->capabilities,IMAP4REV1) ||
+          mutt_bit_isset(idata->capabilities,STATUS))
+  {                            
+    snprintf (buf, sizeof (buf), "STATUS %s (%s)", mbox,
+      new ? "RECENT" : "MESSAGES");
+  }
+  else
+    /* Server does not support STATUS, and this is not the current mailbox.
+     * There is no lightweight way to check recent arrivals */
+    return -1;
+
+  imap_cmd_start (idata, buf);
+
+  do 
+  {
+    if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE)
+      break;
+
+    s = imap_next_word (idata->cmd.buf);
+    if (ascii_strncasecmp ("STATUS", s, 6) == 0)
+    {
+      s = imap_next_word (s);
+      /* The mailbox name may or may not be quoted here. We could try to 
+       * munge the server response and compare with quoted (or vise versa)
+       * but it is probably more efficient to just strncmp against both. */
+      if (mutt_strncmp (mbox_unquoted, s, mutt_strlen (mbox_unquoted)) == 0
+         || mutt_strncmp (mbox, s, mutt_strlen (mbox)) == 0)
+      {
+       s = imap_next_word (s);
+       s = imap_next_word (s);
+       if (isdigit ((unsigned char) *s))
+       {
+         if (*s != '0')
+         {
+           msgcount = atoi(s);
+           dprint (2, (debugfile, "%d new messages in %s\n", msgcount, path));
+         }
+       }
+      }
+      else
+       dprint (1, (debugfile, "imap_mailbox_check: STATUS response doesn't match requested mailbox.\n"));
+    }
+  }
+  while (rc == IMAP_CMD_CONTINUE);
+
+  return msgcount;
+}
+
+/* all this listing/browsing is a mess. I don't like that name is a pointer
+ *   into idata->buf (used to be a pointer into the passed in buffer, just
+ *   as bad), nor do I like the fact that the fetch is done here. This
+ *   code can't possibly handle non-LIST untagged responses properly.
+ *   FIXME. ?! */
+int imap_parse_list_response(IMAP_DATA* idata, char **name, int *noselect,
+  int *noinferiors, char *delim)
+{
+  char *s;
+  long bytes;
+  int rc;
+
+  *name = NULL;
+
+  rc = imap_cmd_step (idata);
+  if (rc == IMAP_CMD_OK)
+    return 0;
+  if (rc != IMAP_CMD_CONTINUE)
+    return -1;
+
+  s = imap_next_word (idata->cmd.buf);
+  if ((ascii_strncasecmp ("LIST", s, 4) == 0) ||
+      (ascii_strncasecmp ("LSUB", s, 4) == 0))
+  {
+    *noselect = 0;
+    *noinferiors = 0;
+      
+    s = imap_next_word (s); /* flags */
+    if (*s == '(')
+    {
+      char *ep;
+
+      s++;
+      ep = s;
+      while (*ep && *ep != ')') ep++;
+      do
+      {
+       if (!ascii_strncasecmp (s, "\\NoSelect", 9))
+         *noselect = 1;
+       if (!ascii_strncasecmp (s, "\\NoInferiors", 12))
+         *noinferiors = 1;
+       /* See draft-gahrns-imap-child-mailbox-?? */
+       if (!ascii_strncasecmp (s, "\\HasNoChildren", 14))
+         *noinferiors = 1;
+       if (*s != ')')
+         s++;
+       while (*s && *s != '\\' && *s != ')') s++;
+      } while (s != ep);
+    }
+    else
+      return 0;
+    s = imap_next_word (s); /* delim */
+    /* Reset the delimiter, this can change */
+    if (ascii_strncasecmp (s, "NIL", 3))
+    {
+      if (s && s[0] == '\"' && s[1] && s[2] == '\"')
+       *delim = s[1];
+      else if (s && s[0] == '\"' && s[1] && s[1] == '\\' && s[2] && s[3] == '\"')
+       *delim = s[2];
+    }
+    s = imap_next_word (s); /* name */
+    if (s && *s == '{')        /* Literal */
+    { 
+      if (imap_get_literal_count(idata->cmd.buf, &bytes) < 0)
+       return -1;
+      if (imap_cmd_step (idata) != IMAP_CMD_CONTINUE)
+       return -1;
+      *name = idata->cmd.buf;
+    }
+    else
+      *name = s;
+  }
+
+  return 0;
+}
+
+int imap_subscribe (char *path, int subscribe)
+{
+  CONNECTION *conn;
+  IMAP_DATA *idata;
+  char buf[LONG_STRING];
+  char mbox[LONG_STRING];
+  IMAP_MBOX mx;
+
+  if (!mx_is_imap (path) || imap_parse_path (path, &mx))
+  {
+    mutt_error (_("Bad mailbox name"));
+    return -1;
+  }
+  
+
+  if (!(idata = imap_conn_find (&(mx.account), 0)))
+    goto fail;
+  
+  conn = idata->conn;
+
+  imap_fix_path (idata, mx.mbox, buf, sizeof (buf));
+  if (subscribe)
+    mutt_message (_("Subscribing to %s..."), buf);
+  else
+    mutt_message (_("Unsubscribing to %s..."), buf);
+  imap_munge_mbox_name (mbox, sizeof(mbox), buf);
+
+  snprintf (buf, sizeof (buf), "%s %s", subscribe ? "SUBSCRIBE" :
+    "UNSUBSCRIBE", mbox);
+
+  if (imap_exec (idata, buf, 0) < 0)
+    goto fail;
+
+  FREE (&mx.mbox);
+  return 0;
+
+ fail:
+  FREE (&mx.mbox);
+  return -1;
+}
+
+/* imap_complete: given a partial IMAP folder path, return a string which
+ *   adds as much to the path as is unique */
+int imap_complete(char* dest, size_t dlen, char* path) {
+  CONNECTION* conn;
+  IMAP_DATA* idata;
+  char list[LONG_STRING];
+  char buf[LONG_STRING];
+  char* list_word = NULL;
+  int noselect, noinferiors;
+  char delim;
+  char completion[LONG_STRING];
+  int clen, matchlen = 0;
+  int completions = 0;
+  int pos = 0;
+  IMAP_MBOX mx;
+
+  /* verify passed in path is an IMAP path */
+  if (imap_parse_path (path, &mx))
+  {
+    dprint(2, (debugfile, "imap_complete: bad path %s\n", path));
+    return -1;
+  }
+
+  /* don't open a new socket just for completion */
+  if (!(idata = imap_conn_find (&(mx.account), M_IMAP_CONN_NONEW)))
+    goto fail;
+  conn = idata->conn;
+
+  /* reformat path for IMAP list, and append wildcard */
+  /* don't use INBOX in place of "" */
+  if (mx.mbox && mx.mbox[0])
+    imap_fix_path (idata, mx.mbox, list, sizeof(list));
+  else
+    list[0] = '\0';
+
+  /* fire off command */
+  snprintf (buf, sizeof(buf), "%s \"\" \"%s%%\"",
+    option (OPTIMAPLSUB) ? "LSUB" : "LIST", list);
+
+  imap_cmd_start (idata, buf);
+
+  /* and see what the results are */
+  strfcpy (completion, NONULL(mx.mbox), sizeof(completion));
+  do
+  {
+    if (imap_parse_list_response(idata, &list_word, &noselect, &noinferiors,
+        &delim))
+      break;
+
+    if (list_word)
+    {
+      /* store unquoted */
+      imap_unmunge_mbox_name (list_word);
+
+      /* if the folder isn't selectable, append delimiter to force browse
+       * to enter it on second tab. */
+      if (noselect)
+      {
+        clen = strlen(list_word);
+        list_word[clen++] = delim;
+        list_word[clen] = '\0';
+      }
+      /* copy in first word */
+      if (!completions)
+      {
+        strfcpy (completion, list_word, sizeof(completion));
+        matchlen = strlen (completion);
+        completions++;
+        continue;
+      }
+
+      pos = 0;
+      while (pos < matchlen && list_word[pos] &&
+          completion[pos] == list_word[pos])
+        pos++;
+      completion[pos] = '\0';
+      matchlen = pos;
+
+      completions++;
+    }
+  }
+  while (ascii_strncmp(idata->cmd.seq, idata->cmd.buf, SEQLEN));
+
+  if (completions)
+  {
+    /* reformat output */
+    imap_qualify_path (dest, dlen, &mx, completion);
+    mutt_pretty_mailbox (dest);
+
+    FREE (&mx.mbox);
+    return 0;
+  }
+
+ fail:
+  FREE (&mx.mbox);
+  return -1;
+}
diff --git a/imap/imap.h b/imap/imap.h
new file mode 100644 (file)
index 0000000..4a3608d
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 1996-8 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 2000-3 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+#ifndef _IMAP_H
+#define _IMAP_H 1
+
+#include "account.h"
+#include "browser.h"
+#include "mailbox.h"
+
+/* -- data structures -- */
+typedef struct
+{
+  ACCOUNT account;
+  char* mbox;
+} IMAP_MBOX;
+
+/* imap.c */
+int imap_access (const char*, int);
+int imap_check_mailbox (CONTEXT *ctx, int *index_hint, int force);
+int imap_close_connection (CONTEXT *ctx);
+int imap_delete_mailbox (CONTEXT* idata, IMAP_MBOX mx);
+int imap_open_mailbox (CONTEXT *ctx);
+int imap_open_mailbox_append (CONTEXT *ctx);
+int imap_sync_mailbox (CONTEXT *ctx, int expunge, int *index_hint);
+void imap_close_mailbox (CONTEXT *ctx);
+int imap_buffy_check (char *path);
+int imap_mailbox_check (char *path, int new);
+int imap_subscribe (char *path, int subscribe);
+int imap_complete (char* dest, size_t dlen, char* path);
+
+void imap_allow_reopen (CONTEXT *ctx);
+void imap_disallow_reopen (CONTEXT *ctx);
+
+/* browse.c */
+int imap_browse (char* path, struct browser_state* state);
+int imap_mailbox_create (const char* folder);
+
+/* message.c */
+int imap_append_message (CONTEXT* ctx, MESSAGE* msg);
+int imap_copy_messages (CONTEXT* ctx, HEADER* h, char* dest, int delete);
+int imap_fetch_message (MESSAGE* msg, CONTEXT* ctx, int msgno);
+
+/* socket.c */
+void imap_logout_all (void);
+
+/* util.c */
+int imap_expand_path (char* path, size_t len);
+int imap_parse_path (const char* path, IMAP_MBOX* mx);
+void imap_pretty_mailbox (char* path);
+
+int imap_wait_keepalive (pid_t pid);
+void imap_keepalive (void);
+
+#endif
diff --git a/imap/imap_private.h b/imap/imap_private.h
new file mode 100644 (file)
index 0000000..0a55409
--- /dev/null
@@ -0,0 +1,241 @@
+/*
+ * Copyright (C) 1996-9 Brandon Long <blong@fiction.net>
+ * Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+#ifndef _IMAP_PRIVATE_H
+#define _IMAP_PRIVATE_H 1
+
+#include "imap.h"
+#include "mutt_socket.h"
+
+/* -- symbols -- */
+#define IMAP_PORT 143
+#define IMAP_SSL_PORT 993
+
+/* logging levels */
+#define IMAP_LOG_CMD  2
+#define IMAP_LOG_LTRL 4
+#define IMAP_LOG_PASS 5
+
+/* IMAP command responses. Used in IMAP_COMMAND.state too */
+/* <tag> OK ... */
+#define IMAP_CMD_OK       (0)
+/* <tag> BAD ... */
+#define IMAP_CMD_BAD      (-1)
+/* <tag> NO ... */
+#define IMAP_CMD_NO       (-2)
+/* * ... */
+#define IMAP_CMD_CONTINUE (1)
+/* + */
+#define IMAP_CMD_RESPOND  (2)
+
+/* number of entries in the hash table */
+#define IMAP_CACHE_LEN 10
+
+#define SEQLEN 5
+
+#define IMAP_REOPEN_ALLOW     (1<<0)
+#define IMAP_EXPUNGE_EXPECTED (1<<1)
+#define IMAP_EXPUNGE_PENDING  (1<<2)
+#define IMAP_NEWMAIL_PENDING  (1<<3)
+#define IMAP_FLAGS_PENDING    (1<<4)
+
+/* imap_exec flags (see imap_exec) */
+#define IMAP_CMD_FAIL_OK (1<<0)
+#define IMAP_CMD_PASS    (1<<1)
+
+enum
+{
+  IMAP_FATAL = 1,
+  IMAP_BYE,
+  IMAP_REOPENED
+};
+
+enum
+{
+  /* States */
+  IMAP_DISCONNECTED = 0,
+  IMAP_CONNECTED,
+  IMAP_AUTHENTICATED,
+  IMAP_SELECTED
+};
+
+enum
+{
+  /* Namespace types */
+  IMAP_NS_PERSONAL = 0,
+  IMAP_NS_OTHER,
+  IMAP_NS_SHARED
+};
+
+/* ACL Rights */
+enum
+{
+  IMAP_ACL_LOOKUP = 0,
+  IMAP_ACL_READ,
+  IMAP_ACL_SEEN,
+  IMAP_ACL_WRITE,
+  IMAP_ACL_INSERT,
+  IMAP_ACL_POST,
+  IMAP_ACL_CREATE,
+  IMAP_ACL_DELETE,
+  IMAP_ACL_ADMIN,
+
+  RIGHTSMAX
+};
+
+/* Capabilities we are interested in */
+enum
+{
+  IMAP4 = 0,
+  IMAP4REV1,
+  STATUS,
+  ACL,                         /* RFC 2086: IMAP4 ACL extension */
+  NAMESPACE,                           /* RFC 2342: IMAP4 Namespace */
+  ACRAM_MD5,                   /* RFC 2195: CRAM-MD5 authentication */
+  AGSSAPI,                     /* RFC 1731: GSSAPI authentication */
+  AUTH_ANON,                   /* AUTH=ANONYMOUS */
+  STARTTLS,                    /* RFC 2595: STARTTLS */
+  LOGINDISABLED,               /*           LOGINDISABLED */
+
+  CAPMAX
+};
+
+/* imap_conn_find flags */
+#define M_IMAP_CONN_NONEW    (1<<0)
+#define M_IMAP_CONN_NOSELECT (1<<1)
+
+/* -- data structures -- */
+typedef struct
+{
+  unsigned int uid;
+  char* path;
+} IMAP_CACHE;
+
+typedef struct 
+{
+  int type;
+  int listable;
+  char *prefix;
+  char delim;
+  int home_namespace;
+  /* We get these when we check if namespace exists - cache them */
+  int noselect;                        
+  int noinferiors;
+} IMAP_NAMESPACE_INFO;
+
+/* IMAP command structure */
+typedef struct
+{
+  char seq[SEQLEN+1];
+  char* buf;
+  unsigned int blen;
+  int state;
+} IMAP_COMMAND;
+
+typedef struct
+{
+  /* This data is specific to a CONNECTION to an IMAP server */
+  CONNECTION *conn;
+  unsigned char state;
+  unsigned char status;
+  /* let me explain capstr: SASL needs the capability string (not bits).
+   * we have 3 options:
+   *   1. rerun CAPABILITY inside SASL function.
+   *   2. build appropriate CAPABILITY string by reverse-engineering from bits.
+   *   3. keep a copy until after authentication.
+   * I've chosen (3) for now. (2) might not be too bad, but it involves
+   * tracking all possible capabilities. bah. (1) I don't like because
+   * it's just no fun to get the same information twice */
+  char* capstr;
+  unsigned char capabilities[(CAPMAX + 7)/8];
+  unsigned int seqno;
+  time_t lastread; /* last time we read a command for the server */
+  /* who knows, one day we may run multiple commands in parallel */
+  IMAP_COMMAND cmd;
+
+  /* The following data is all specific to the currently SELECTED mbox */
+  char delim;
+  CONTEXT *ctx;
+  char *mailbox;
+  unsigned short check_status;
+  unsigned char reopen;
+  unsigned char rights[(RIGHTSMAX + 7)/8];
+  unsigned int newMailCount;
+  IMAP_CACHE cache[IMAP_CACHE_LEN];
+  int noclose : 1;
+  
+  /* all folder flags - system flags AND keywords */
+  LIST *flags;
+} IMAP_DATA;
+/* I wish that were called IMAP_CONTEXT :( */
+
+/* -- macros -- */
+#define CTX_DATA ((IMAP_DATA *) ctx->data)
+
+/* -- private IMAP functions -- */
+/* imap.c */
+int imap_create_mailbox (IMAP_DATA* idata, char* mailbox);
+int imap_make_msg_set (IMAP_DATA* idata, BUFFER* buf, int flag, int changed);
+int imap_open_connection (IMAP_DATA* idata);
+IMAP_DATA* imap_conn_find (const ACCOUNT* account, int flags);
+int imap_parse_list_response(IMAP_DATA* idata, char** name, int* noselect,
+  int* noinferiors, char* delim);
+int imap_read_literal (FILE* fp, IMAP_DATA* idata, long bytes);
+void imap_expunge_mailbox (IMAP_DATA* idata);
+void imap_logout (IMAP_DATA* idata);
+
+/* auth.c */
+int imap_authenticate (IMAP_DATA* idata);
+
+/* command.c */
+int imap_cmd_start (IMAP_DATA* idata, const char* cmd);
+int imap_cmd_step (IMAP_DATA* idata);
+void imap_cmd_finish (IMAP_DATA* idata);
+int imap_code (const char* s);
+int imap_exec (IMAP_DATA* idata, const char* cmd, int flags);
+
+/* message.c */
+void imap_add_keywords (char* s, HEADER* keywords, LIST* mailbox_flags, size_t slen);
+void imap_free_header_data (void** data);
+int imap_read_headers (IMAP_DATA* idata, int msgbegin, int msgend);
+char* imap_set_flags (IMAP_DATA* idata, HEADER* h, char* s);
+
+/* util.c */
+int imap_continue (const char* msg, const char* resp);
+void imap_error (const char* where, const char* msg);
+IMAP_DATA* imap_new_idata (void);
+void imap_free_idata (IMAP_DATA** idata);
+char* imap_fix_path (IMAP_DATA* idata, char* mailbox, char* path, 
+  size_t plen);
+int imap_get_literal_count (const char* buf, long* bytes);
+char* imap_get_qualifier (char* buf);
+char* imap_next_word (char* s);
+time_t imap_parse_date (char* s);
+void imap_qualify_path (char *dest, size_t len, IMAP_MBOX *mx, char* path);
+void imap_quote_string (char* dest, size_t slen, const char* src);
+void imap_unquote_string (char* s);
+void imap_munge_mbox_name (char *dest, size_t dlen, const char *src);
+void imap_unmunge_mbox_name (char *s);
+int imap_wordcasecmp(const char *a, const char *b);
+
+/* utf7.c */
+void imap_utf7_encode (char **s);
+void imap_utf7_decode (char **s);
+
+#endif
diff --git a/imap/message.c b/imap/message.c
new file mode 100644 (file)
index 0000000..41d5950
--- /dev/null
@@ -0,0 +1,973 @@
+/*
+ * Copyright (C) 1996-9 Brandon Long <blong@fiction.net>
+ * Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+/* message parsing/updating functions */
+
+#include <stdlib.h>
+#include <ctype.h>
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "imap_private.h"
+#include "message.h"
+#include "mx.h"
+
+#ifdef HAVE_PGP
+#include "pgp.h"
+#endif
+
+static void flush_buffer(char* buf, size_t* len, CONNECTION* conn);
+static int msg_fetch_header (CONTEXT* ctx, IMAP_HEADER* h, char* buf,
+  FILE* fp);
+static int msg_has_flag (LIST* flag_list, const char* flag);
+static int msg_parse_fetch (IMAP_HEADER* h, char* s);
+static char* msg_parse_flags (IMAP_HEADER* h, char* s);
+
+/* imap_read_headers:
+ * Changed to read many headers instead of just one. It will return the
+ * msgno of the last message read. It will return a value other than
+ * msgend if mail comes in while downloading headers (in theory).
+ */
+int imap_read_headers (IMAP_DATA* idata, int msgbegin, int msgend)
+{
+  CONTEXT* ctx;
+  char buf[LONG_STRING];
+  char hdrreq[STRING];
+  FILE *fp;
+  char tempfile[_POSIX_PATH_MAX];
+  int msgno;
+  IMAP_HEADER h;
+  int rc, mfhrc, oldmsgcount;
+  int fetchlast = 0;
+  const char *want_headers = "DATE FROM SUBJECT TO CC MESSAGE-ID REFERENCES CONTENT-TYPE IN-REPLY-TO REPLY-TO LINES X-LABEL";
+
+  ctx = idata->ctx;
+
+  if (mutt_bit_isset (idata->capabilities,IMAP4REV1))
+  {
+    snprintf (hdrreq, sizeof (hdrreq), "BODY.PEEK[HEADER.FIELDS (%s)]", 
+      want_headers); 
+  } 
+  else if (mutt_bit_isset (idata->capabilities,IMAP4))
+  {
+    snprintf (hdrreq, sizeof (hdrreq), "RFC822.HEADER.LINES (%s)", 
+      want_headers);
+  }
+  else
+  {    /* Unable to fetch headers for lower versions */
+    mutt_error _("Unable to fetch headers from this IMAP server version.");
+    mutt_sleep (2);    /* pause a moment to let the user see the error */
+    return -1;
+  }
+
+  /* instead of downloading all headers and then parsing them, we parse them
+   * as they come in. */
+  mutt_mktemp (tempfile);
+  if (!(fp = safe_fopen (tempfile, "w+")))
+  {
+    mutt_error (_("Could not create temporary file %s"), tempfile);
+    mutt_sleep (2);
+    return -1;
+  }
+  unlink (tempfile);
+
+  /* make sure context has room to hold the mailbox */
+  while ((msgend) >= idata->ctx->hdrmax)
+    mx_alloc_memory (idata->ctx);
+
+  oldmsgcount = ctx->msgcount;
+  idata->reopen &= ~IMAP_NEWMAIL_PENDING;
+  idata->newMailCount = 0;
+
+  for (msgno = msgbegin; msgno <= msgend ; msgno++)
+  {
+    if (ReadInc && (!msgno || ((msgno+1) % ReadInc == 0)))
+      mutt_message (_("Fetching message headers... [%d/%d]"), msgno + 1,
+        msgend + 1);
+
+    if (msgno + 1 > fetchlast)
+    {
+      /*
+       * Make one request for everything. This makes fetching headers an
+       * order of magnitude faster if you have a large mailbox.
+       *
+       * If we get more messages while doing this, we make another
+       * request for all the new messages.
+       */
+      snprintf (buf, sizeof (buf),
+        "FETCH %d:%d (UID FLAGS INTERNALDATE RFC822.SIZE %s)", msgno + 1,
+        msgend + 1, hdrreq);
+
+      imap_cmd_start (idata, buf);
+
+      fetchlast = msgend + 1;
+    }
+
+    /* freshen fp, h */
+    rewind (fp);
+    memset (&h, 0, sizeof (h));
+    h.data = safe_calloc (1, sizeof (IMAP_HEADER_DATA));
+
+    /* this DO loop does two things:
+     * 1. handles untagged messages, so we can try again on the same msg
+     * 2. fetches the tagged response at the end of the last message.
+     */
+    do
+    {
+      mfhrc = 0;
+
+      rc = imap_cmd_step (idata);
+      if (rc != IMAP_CMD_CONTINUE)
+       break;
+
+      if ((mfhrc = msg_fetch_header (idata->ctx, &h, idata->cmd.buf, fp)) == -1)
+       continue;
+      else if (mfhrc < 0)
+       break;
+
+      /* make sure we don't get remnants from older larger message headers */
+      fputs ("\n\n", fp);
+
+      /* update context with message header */
+      ctx->hdrs[msgno] = mutt_new_header ();
+
+      ctx->hdrs[msgno]->index = h.sid - 1;
+      if (h.sid != ctx->msgcount + 1)
+       dprint (1, (debugfile, "imap_read_headers: msgcount and sequence ID are inconsistent!"));
+      /* messages which have not been expunged are ACTIVE (borrowed from mh 
+       * folders) */
+      ctx->hdrs[msgno]->active = 1;
+      ctx->hdrs[msgno]->read = h.read;
+      ctx->hdrs[msgno]->old = h.old;
+      ctx->hdrs[msgno]->deleted = h.deleted;
+      ctx->hdrs[msgno]->flagged = h.flagged;
+      ctx->hdrs[msgno]->replied = h.replied;
+      ctx->hdrs[msgno]->changed = h.changed;
+      ctx->hdrs[msgno]->received = h.received;
+      ctx->hdrs[msgno]->data = (void *) (h.data);
+
+      rewind (fp);
+      /* NOTE: if Date: header is missing, mutt_read_rfc822_header depends
+       *   on h.received being set */
+      ctx->hdrs[msgno]->env = mutt_read_rfc822_header (fp, ctx->hdrs[msgno],
+        0, 0);
+      /* content built as a side-effect of mutt_read_rfc822_header */
+      ctx->hdrs[msgno]->content->length = h.content_length;
+
+      ctx->msgcount++;
+    }
+    while ((rc != IMAP_CMD_OK) && ((mfhrc == -1) ||
+      ((msgno + 1) >= fetchlast)));
+
+    if ((mfhrc < -1) || ((rc != IMAP_CMD_CONTINUE) && (rc != IMAP_CMD_OK)))
+    {
+      imap_free_header_data ((void**) &h.data);
+      fclose (fp);
+
+      return -1;
+    }
+       
+    /* in case we get new mail while fetching the headers */
+    if (idata->reopen & IMAP_NEWMAIL_PENDING)
+    {
+      msgend = idata->newMailCount - 1;
+      while ((msgend) >= ctx->hdrmax)
+       mx_alloc_memory (ctx);
+      idata->reopen &= ~IMAP_NEWMAIL_PENDING;
+      idata->newMailCount = 0;
+    }
+  }
+
+  fclose(fp);
+
+  if (ctx->msgcount > oldmsgcount)
+    mx_update_context (ctx, ctx->msgcount - oldmsgcount);
+
+  return msgend;
+}
+
+int imap_fetch_message (MESSAGE *msg, CONTEXT *ctx, int msgno)
+{
+  IMAP_DATA* idata;
+  HEADER* h;
+  char buf[LONG_STRING];
+  char path[_POSIX_PATH_MAX];
+  char *pc;
+  long bytes;
+  int uid;
+  int cacheno;
+  IMAP_CACHE *cache;
+  int read;
+  int rc;
+  /* Sam's weird courier server returns an OK response even when FETCH
+   * fails. Thanks Sam. */
+  short fetched = 0;
+
+  idata = (IMAP_DATA*) ctx->data;
+  h = ctx->hdrs[msgno];
+
+  /* see if we already have the message in our cache */
+  cacheno = HEADER_DATA(h)->uid % IMAP_CACHE_LEN;
+  cache = &idata->cache[cacheno];
+
+  if (cache->path)
+  {
+    if (cache->uid == HEADER_DATA(h)->uid)
+    {
+      /* yes, so just return a pointer to the message */
+      if (!(msg->fp = fopen (cache->path, "r")))
+      {
+       mutt_perror (cache->path);
+       return (-1);
+      }
+      return 0;
+    }
+    else
+    {
+      /* clear the previous entry */
+      unlink (cache->path);
+      FREE (&cache->path);
+    }
+  }
+
+  if (!isendwin())
+    mutt_message _("Fetching message...");
+
+  cache->uid = HEADER_DATA(h)->uid;
+  mutt_mktemp (path);
+  cache->path = safe_strdup (path);
+  if (!(msg->fp = safe_fopen (path, "w+")))
+  {
+    FREE (&cache->path);
+    return -1;
+  }
+
+  /* mark this header as currently inactive so the command handler won't
+   * also try to update it. HACK until all this code can be moved into the
+   * command handler */
+  h->active = 0;
+  
+  snprintf (buf, sizeof (buf), "UID FETCH %d %s", HEADER_DATA(h)->uid,
+           (mutt_bit_isset (idata->capabilities, IMAP4REV1) ?
+            (option (OPTIMAPPEEK) ? "BODY.PEEK[]" : "BODY[]") :
+            "RFC822"));
+
+  imap_cmd_start (idata, buf);
+  do
+  {
+    if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE)
+      break;
+
+    pc = idata->cmd.buf;
+    pc = imap_next_word (pc);
+    pc = imap_next_word (pc);
+
+    if (!ascii_strncasecmp ("FETCH", pc, 5))
+    {
+      while (*pc)
+      {
+       pc = imap_next_word (pc);
+       if (pc[0] == '(')
+         pc++;
+       if (ascii_strncasecmp ("UID", pc, 3) == 0)
+       {
+         pc = imap_next_word (pc);
+         uid = atoi (pc);
+         if (uid != HEADER_DATA(h)->uid)
+           mutt_error (_("The message index is incorrect. Try reopening the mailbox."));
+       }
+       else if ((ascii_strncasecmp ("RFC822", pc, 6) == 0) ||
+                (ascii_strncasecmp ("BODY[]", pc, 6) == 0))
+       {
+         pc = imap_next_word (pc);
+         if (imap_get_literal_count(pc, &bytes) < 0)
+         {
+           imap_error ("imap_fetch_message()", buf);
+           goto bail;
+         }
+         if (imap_read_literal (msg->fp, idata, bytes) < 0)
+           goto bail;
+         /* pick up trailing line */
+         if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE)
+           goto bail;
+         pc = idata->cmd.buf;
+
+         fetched = 1;
+       }
+       /* UW-IMAP will provide a FLAGS update here if the FETCH causes a
+        * change (eg from \Unseen to \Seen).
+        * Uncommitted changes in mutt take precedence. If we decide to
+        * incrementally update flags later, this won't stop us syncing */
+       else if ((ascii_strncasecmp ("FLAGS", pc, 5) == 0) && !h->changed)
+       {
+         if ((pc = imap_set_flags (idata, h, pc)) == NULL)
+           goto bail;
+       }
+      }
+    }
+  }
+  while (rc == IMAP_CMD_CONTINUE);
+
+  /* see comment before command start. */
+  h->active = 1;
+
+  if (rc != IMAP_CMD_OK)
+    goto bail;
+
+  if (!fetched || !imap_code (idata->cmd.buf))
+    goto bail;
+    
+  /* Update the header information.  Previously, we only downloaded a
+   * portion of the headers, those required for the main display.
+   */
+  rewind (msg->fp);
+  /* It may be that the Status header indicates a message is read, but the
+   * IMAP server doesn't know the message has been \Seen. So we capture
+   * the server's notion of 'read' and if it differs from the message info
+   * picked up in mutt_read_rfc822_header, we mark the message (and context
+   * changed). Another possiblity: ignore Status on IMAP?*/
+  read = h->read;
+  /* I hate do this here, since it's so low-level, but I'm not sure where
+   * I can abstract it. Problem: the id and subj hashes lose their keys when
+   * mutt_free_envelope gets called, but keep their spots in the hash. This
+   * confuses threading. Alternatively we could try to merge the new
+   * envelope into the old one. Also messy and lowlevel. */
+  if (ctx->id_hash && h->env->message_id)
+    hash_delete (ctx->id_hash, h->env->message_id, h, NULL);
+  if (ctx->subj_hash && h->env->real_subj)
+    hash_delete (ctx->subj_hash, h->env->real_subj, h, NULL);
+  mutt_free_envelope (&h->env);
+  h->env = mutt_read_rfc822_header (msg->fp, h, 0, 0);
+  if (ctx->id_hash && h->env->message_id)
+    hash_insert (ctx->id_hash, h->env->message_id, h, 0);
+  if (ctx->subj_hash && h->env->real_subj)
+    hash_insert (ctx->subj_hash, h->env->real_subj, h, 1);
+
+  /* see above. We want the new status in h->read, so we unset it manually
+   * and let mutt_set_flag set it correctly, updating context. */
+  if (read != h->read)
+  {
+    h->read = read;
+    mutt_set_flag (ctx, h, M_NEW, read);
+  }
+
+  h->lines = 0;
+  fgets (buf, sizeof (buf), msg->fp);
+  while (!feof (msg->fp))
+  {
+    h->lines++;
+    fgets (buf, sizeof (buf), msg->fp);
+  }
+
+  h->content->length = ftell (msg->fp) - h->content->offset;
+
+  /* This needs to be done in case this is a multipart message */
+#if defined(HAVE_PGP) || defined(HAVE_SMIME)
+  h->security = crypt_query (h->content);
+#endif
+
+  mutt_clear_error();
+  rewind (msg->fp);
+
+  return 0;
+
+bail:
+  safe_fclose (&msg->fp);
+  if (cache->path)
+  {
+    unlink (cache->path);
+    FREE (&cache->path);
+  }
+
+  return -1;
+}
+
+int imap_append_message (CONTEXT *ctx, MESSAGE *msg)
+{
+  IMAP_DATA* idata;
+  FILE *fp;
+  char buf[LONG_STRING];
+  char mbox[LONG_STRING];
+  char mailbox[LONG_STRING]; 
+  size_t len;
+  int c, last;
+  IMAP_MBOX mx;
+  int rc;
+
+  idata = (IMAP_DATA*) ctx->data;
+
+  if (imap_parse_path (ctx->path, &mx))
+    return -1;
+
+  imap_fix_path (idata, mx.mbox, mailbox, sizeof (mailbox));
+  
+  if ((fp = fopen (msg->path, "r")) == NULL)
+  {
+    mutt_perror (msg->path);
+    goto fail;
+  }
+
+  /* currently we set the \Seen flag on all messages, but probably we
+   * should scan the message Status header for flag info. Since we're
+   * already rereading the whole file for length it isn't any more
+   * expensive (it'd be nice if we had the file size passed in already
+   * by the code that writes the file, but that's a lot of changes.
+   * Ideally we'd have a HEADER structure with flag info here... */
+  for (last = EOF, len = 0; (c = fgetc(fp)) != EOF; last = c)
+  {
+    if(c == '\n' && last != '\r')
+      len++;
+
+    len++;
+  }
+  rewind (fp);
+  
+  imap_munge_mbox_name (mbox, sizeof (mbox), mailbox);
+  snprintf (buf, sizeof (buf), "APPEND %s (\\Seen) {%d}", mbox, len);
+
+  imap_cmd_start (idata, buf);
+
+  do
+    rc = imap_cmd_step (idata);
+  while (rc == IMAP_CMD_CONTINUE);
+
+  if (rc != IMAP_CMD_RESPOND)
+  {
+    char *pc;
+
+    dprint (1, (debugfile, "imap_append_message(): command failed: %s\n",
+               idata->cmd.buf));
+
+    pc = idata->cmd.buf + SEQLEN;
+    SKIPWS (pc);
+    pc = imap_next_word (pc);
+    mutt_error ("%s", pc);
+    mutt_sleep (1);
+    fclose (fp);
+    goto fail;
+  }
+
+  mutt_message _("Uploading message ...");
+
+  for (last = EOF, len = 0; (c = fgetc(fp)) != EOF; last = c)
+  {
+    if (c == '\n' && last != '\r')
+      buf[len++] = '\r';
+
+    buf[len++] = c;
+
+    if (len > sizeof(buf) - 3)
+      flush_buffer(buf, &len, idata->conn);
+  }
+  
+  if (len)
+    flush_buffer(buf, &len, idata->conn);
+
+  mutt_socket_write (idata->conn, "\r\n");
+  fclose (fp);
+
+  do
+    rc = imap_cmd_step (idata);
+  while (rc == IMAP_CMD_CONTINUE);
+
+  if (!imap_code (idata->cmd.buf))
+  {
+    char *pc;
+
+    dprint (1, (debugfile, "imap_append_message(): command failed: %s\n",
+               idata->cmd.buf));
+    pc = idata->cmd.buf + SEQLEN;
+    SKIPWS (pc);
+    pc = imap_next_word (pc);
+    mutt_error ("%s", pc);
+    mutt_sleep (1);
+    goto fail;
+  }
+
+  FREE (&mx.mbox);
+  return 0;
+
+ fail:
+  FREE (&mx.mbox);
+  return -1;
+}
+
+/* imap_copy_messages: use server COPY command to copy messages to another
+ *   folder.
+ *   Return codes:
+ *      -1: error
+ *       0: success
+ *       1: non-fatal error - try fetch/append */
+int imap_copy_messages (CONTEXT* ctx, HEADER* h, char* dest, int delete)
+{
+  IMAP_DATA* idata;
+  BUFFER cmd;
+  char uid[11];
+  char mbox[LONG_STRING];
+  char mmbox[LONG_STRING];
+  int rc;
+  int n;
+  IMAP_MBOX mx;
+
+  idata = (IMAP_DATA*) ctx->data;
+
+  if (imap_parse_path (dest, &mx))
+  {
+    dprint (1, (debugfile, "imap_copy_messages: bad destination %s\n", dest));
+    return -1;
+  }
+
+  /* check that the save-to folder is in the same account */
+  if (!mutt_account_match (&(CTX_DATA->conn->account), &(mx.account)))
+  {
+    dprint (3, (debugfile, "imap_copy_messages: %s not same server as %s\n",
+      dest, ctx->path));
+    return 1;
+  }
+
+  if (h && h->attach_del)
+  {
+    dprint (3, (debugfile, "imap_copy_messages: Message contains attachments to be deleted\n"));
+    return 1;
+  }
+  
+  imap_fix_path (idata, mx.mbox, mbox, sizeof (mbox));
+
+  memset (&cmd, 0, sizeof (cmd));
+  mutt_buffer_addstr (&cmd, "UID COPY ");
+
+  /* Null HEADER* means copy tagged messages */
+  if (!h)
+  {
+    /* if any messages have attachments to delete, fall through to FETCH
+     * and APPEND. TODO: Copy what we can with COPY, fall through for the
+     * remainder. */
+    for (n = 0; n < ctx->msgcount; n++)
+    {
+      if (ctx->hdrs[n]->tagged && ctx->hdrs[n]->attach_del)
+      {
+       dprint (3, (debugfile, "imap_copy_messages: Message contains attachments to be deleted\n"));
+       return 1;
+      }
+    }
+
+    rc = imap_make_msg_set (idata, &cmd, M_TAG, 0);
+    if (!rc)
+    {
+      dprint (1, (debugfile, "imap_copy_messages: No messages tagged\n"));
+      goto fail;
+    }
+    mutt_message (_("Copying %d messages to %s..."), rc, mbox);
+  }
+  else
+  {
+    mutt_message (_("Copying message %d to %s..."), h->index+1, mbox);
+    snprintf (uid, sizeof (uid), "%u", HEADER_DATA (h)->uid);
+    mutt_buffer_addstr (&cmd, uid);
+  }
+
+  /* let's get it on */
+  mutt_buffer_addstr (&cmd, " ");
+  imap_munge_mbox_name (mmbox, sizeof (mmbox), mbox);
+  mutt_buffer_addstr (&cmd, mmbox);
+
+  rc = imap_exec (idata, cmd.data, IMAP_CMD_FAIL_OK);
+  if (rc == -2)
+  {
+    /* bail out if command failed for reasons other than nonexistent target */
+    if (ascii_strncasecmp (imap_get_qualifier (idata->cmd.buf), "[TRYCREATE]", 11))
+    {
+      imap_error ("imap_copy_messages", idata->cmd.buf);
+      goto fail;
+    }
+    dprint (2, (debugfile, "imap_copy_messages: server suggests TRYCREATE\n"));
+    snprintf (mmbox, sizeof (mmbox), _("Create %s?"), mbox);
+    if (option (OPTCONFIRMCREATE) && mutt_yesorno (mmbox, 1) < 1)
+    {
+      mutt_clear_error ();
+      goto fail;
+    }
+    if (imap_create_mailbox (idata, mbox) < 0)
+      goto fail;
+
+    /* try again */
+    rc = imap_exec (idata, cmd.data, 0);
+  }
+  if (rc != 0)
+  {
+    imap_error ("imap_copy_messages", idata->cmd.buf);
+    goto fail;
+  }
+
+  /* cleanup */
+  if (delete)
+  {
+    if (!h)
+      for (n = 0; n < ctx->msgcount; n++)
+      {
+        if (ctx->hdrs[n]->tagged)
+        {
+          mutt_set_flag (ctx, ctx->hdrs[n], M_DELETE, 1);
+         mutt_set_flag (ctx, ctx->hdrs[n], M_APPENDED, 1);
+          if (option (OPTDELETEUNTAG))
+            mutt_set_flag (ctx, ctx->hdrs[n], M_TAG, 0);
+        }
+      }
+    else
+    {
+      mutt_set_flag (ctx, h, M_DELETE, 1);
+      mutt_set_flag (ctx, h, M_APPENDED, 1);
+      if (option (OPTDELETEUNTAG))
+        mutt_set_flag (ctx, h, M_TAG, 0);
+    }
+  }
+
+  if (cmd.data)
+    FREE (&cmd.data);
+  FREE (&mx.mbox);
+  return 0;
+
+ fail:
+  if (cmd.data)
+    FREE (&cmd.data);
+  FREE (&mx.mbox);
+  return -1;
+}
+
+/* imap_add_keywords: concatenate custom IMAP tags to list, if they
+ *   appear in the folder flags list. Why wouldn't they? */
+void imap_add_keywords (char* s, HEADER* h, LIST* mailbox_flags, size_t slen)
+{
+  LIST *keywords;
+
+  if (!mailbox_flags || !HEADER_DATA(h) || !HEADER_DATA(h)->keywords)
+    return;
+
+  keywords = HEADER_DATA(h)->keywords->next;
+
+  while (keywords)
+  {
+    if (msg_has_flag (mailbox_flags, keywords->data))
+    {
+      strncat (s, keywords->data, slen);
+      strncat (s, " ", slen);
+    }
+    keywords = keywords->next;
+  }
+}
+
+/* imap_free_header_data: free IMAP_HEADER structure */
+void imap_free_header_data (void** data)
+{
+  /* this should be safe even if the list wasn't used */
+  mutt_free_list (&(((IMAP_HEADER_DATA*) *data)->keywords));
+
+  FREE (data);
+}
+
+/* imap_set_flags: fill out the message header according to the flags from
+ *   the server. Expects a flags line of the form "FLAGS (flag flag ...)" */
+char* imap_set_flags (IMAP_DATA* idata, HEADER* h, char* s)
+{
+  CONTEXT* ctx = idata->ctx;
+  IMAP_HEADER newh;
+  unsigned char readonly;
+
+  memset (&newh, 0, sizeof (newh));
+  newh.data = safe_calloc (1, sizeof (IMAP_HEADER_DATA));
+
+  dprint (2, (debugfile, "imap_fetch_message: parsing FLAGS\n"));
+  if ((s = msg_parse_flags (&newh, s)) == NULL)
+  {
+    FREE (&newh.data);
+    return NULL;
+  }
+  
+  /* YAUH (yet another ugly hack): temporarily set context to
+   * read-write even if it's read-only, so *server* updates of
+   * flags can be processed by mutt_set_flag. ctx->changed must
+   * be restored afterwards */
+  readonly = ctx->readonly;
+  ctx->readonly = 0;
+           
+  mutt_set_flag (ctx, h, M_NEW, !(newh.read || newh.old));
+  mutt_set_flag (ctx, h, M_OLD, newh.old);
+  mutt_set_flag (ctx, h, M_READ, newh.read);
+  mutt_set_flag (ctx, h, M_DELETE, newh.deleted);
+  mutt_set_flag (ctx, h, M_FLAG, newh.flagged);
+  mutt_set_flag (ctx, h, M_REPLIED, newh.replied);
+
+  /* this message is now definitively *not* changed (mutt_set_flag
+   * marks things changed as a side-effect) */
+  h->changed = 0;
+  ctx->changed &= ~readonly;
+  ctx->readonly = readonly;
+
+  mutt_free_list (&(HEADER_DATA(h)->keywords));
+  HEADER_DATA(h)->keywords = newh.data->keywords;
+  FREE(&newh.data);
+
+  return s;
+}
+
+/* msg_fetch_header: import IMAP FETCH response into an IMAP_HEADER.
+ *   Expects string beginning with * n FETCH.
+ *   Returns:
+ *      0 on success
+ *     -1 if the string is not a fetch response
+ *     -2 if the string is a corrupt fetch response */
+static int msg_fetch_header (CONTEXT* ctx, IMAP_HEADER* h, char* buf, FILE* fp)
+{
+  IMAP_DATA* idata;
+  long bytes;
+  int rc = -1; /* default now is that string isn't FETCH response*/
+
+  idata = (IMAP_DATA*) ctx->data;
+
+  if (buf[0] != '*')
+    return rc;
+  
+  /* skip to message number */
+  buf = imap_next_word (buf);
+  h->sid = atoi (buf);
+
+  /* find FETCH tag */
+  buf = imap_next_word (buf);
+  if (ascii_strncasecmp ("FETCH", buf, 5))
+    return rc;
+
+  rc = -2; /* we've got a FETCH response, for better or worse */
+  if (!(buf = strchr (buf, '(')))
+    return rc;
+  buf++;
+
+  /* FIXME: current implementation - call msg_parse_fetch - if it returns -2,
+   *   read header lines and call it again. Silly. */
+  if (msg_parse_fetch (h, buf) != -2)
+    return rc;
+  
+  if (imap_get_literal_count (buf, &bytes) < 0)
+    return rc;
+  imap_read_literal (fp, idata, bytes);
+
+  /* we may have other fields of the FETCH _after_ the literal
+   * (eg Domino puts FLAGS here). Nothing wrong with that, either.
+   * This all has to go - we should accept literals and nonliterals
+   * interchangeably at any time. */
+  if (imap_cmd_step (idata) != IMAP_CMD_CONTINUE)
+    return -2;
+  
+  if (msg_parse_fetch (h, idata->cmd.buf) == -1)
+    return rc;
+
+  rc = 0; /* success */
+  
+  /* subtract headers from message size - unfortunately only the subset of
+   * headers we've requested. */
+  h->content_length -= bytes;
+
+  return rc;
+}
+
+/* msg_has_flag: do a caseless comparison of the flag against a flag list,
+ *   return 1 if found or flag list has '\*', 0 otherwise */
+static int msg_has_flag (LIST* flag_list, const char* flag)
+{
+  if (!flag_list)
+    return 0;
+
+  flag_list = flag_list->next;
+  while (flag_list)
+  {
+    if (!ascii_strncasecmp (flag_list->data, flag, strlen (flag_list->data)))
+      return 1;
+
+    flag_list = flag_list->next;
+  }
+
+  return 0;
+}
+
+/* msg_parse_fetch: handle headers returned from header fetch */
+static int msg_parse_fetch (IMAP_HEADER *h, char *s)
+{
+  char tmp[SHORT_STRING];
+  char *ptmp;
+
+  if (!s)
+    return -1;
+
+  while (*s)
+  {
+    SKIPWS (s);
+
+    if (ascii_strncasecmp ("FLAGS", s, 5) == 0)
+    {
+      if ((s = msg_parse_flags (h, s)) == NULL)
+        return -1;
+    }
+    else if (ascii_strncasecmp ("UID", s, 3) == 0)
+    {
+      s += 3;
+      SKIPWS (s);
+      h->data->uid = (unsigned int) atoi (s);
+
+      s = imap_next_word (s);
+    }
+    else if (ascii_strncasecmp ("INTERNALDATE", s, 12) == 0)
+    {
+      s += 12;
+      SKIPWS (s);
+      if (*s != '\"')
+      {
+        dprint (1, (debugfile, "msg_parse_fetch(): bogus INTERNALDATE entry: %s\n", s));
+        return -1;
+      }
+      s++;
+      ptmp = tmp;
+      while (*s && *s != '\"')
+        *ptmp++ = *s++;
+      if (*s != '\"')
+        return -1;
+      s++; /* skip past the trailing " */
+      *ptmp = 0;
+      h->received = imap_parse_date (tmp);
+    }
+    else if (ascii_strncasecmp ("RFC822.SIZE", s, 11) == 0)
+    {
+      s += 11;
+      SKIPWS (s);
+      ptmp = tmp;
+      while (isdigit ((unsigned char) *s))
+        *ptmp++ = *s++;
+      *ptmp = 0;
+      h->content_length = atoi (tmp);
+    }
+    else if (!ascii_strncasecmp ("BODY", s, 4) ||
+      !ascii_strncasecmp ("RFC822.HEADER", s, 13))
+    {
+      /* handle above, in msg_fetch_header */
+      return -2;
+    }
+    else if (*s == ')')
+      s++; /* end of request */
+    else if (*s)
+    {
+      /* got something i don't understand */
+      imap_error ("msg_parse_fetch", s);
+      return -1;
+    }
+  }
+
+  return 0;
+}
+
+/* msg_parse_flags: read a FLAGS token into an IMAP_HEADER */
+static char* msg_parse_flags (IMAP_HEADER* h, char* s)
+{
+  int recent = 0;
+
+  /* sanity-check string */
+  if (ascii_strncasecmp ("FLAGS", s, 5) != 0)
+  {
+    dprint (1, (debugfile, "msg_parse_flags: not a FLAGS response: %s\n",
+      s));
+    return NULL;
+  }
+  s += 5;
+  SKIPWS(s);
+  if (*s != '(')
+  {
+    dprint (1, (debugfile, "msg_parse_flags: bogus FLAGS response: %s\n",
+      s));
+    return NULL;
+  }
+  s++;
+
+  /* start parsing */
+  while (*s && *s != ')')
+  {
+    if (ascii_strncasecmp ("\\deleted", s, 8) == 0)
+    {
+      s += 8;
+      h->deleted = 1;
+    }
+    else if (ascii_strncasecmp ("\\flagged", s, 8) == 0)
+    {
+      s += 8;
+      h->flagged = 1;
+    }
+    else if (ascii_strncasecmp ("\\answered", s, 9) == 0)
+    {
+      s += 9;
+      h->replied = 1;
+    }
+    else if (ascii_strncasecmp ("\\seen", s, 5) == 0)
+    {
+      s += 5;
+      h->read = 1;
+    }
+    else if (ascii_strncasecmp ("\\recent", s, 5) == 0)
+    {
+      s += 7;
+      recent = 1;
+    }
+    else
+    {
+      /* store custom flags as well */
+      char ctmp;
+      char* flag_word = s;
+
+      if (!h->data->keywords)
+        h->data->keywords = mutt_new_list ();
+
+      while (*s && !ISSPACE (*s) && *s != ')')
+        s++;
+      ctmp = *s;
+      *s = '\0';
+      mutt_add_list (h->data->keywords, flag_word);
+      *s = ctmp;
+    }
+    SKIPWS(s);
+  }
+
+  /* wrap up, or note bad flags response */
+  if (*s == ')')
+  {
+    /* if a message is neither seen nor recent, it is OLD. */
+    if (option (OPTMARKOLD) && !recent && !(h->read))
+      h->old = 1;
+    s++;
+  }
+  else
+  {
+    dprint (1, (debugfile,
+      "msg_parse_flags: Unterminated FLAGS response: %s\n", s));
+    return NULL;
+  }
+
+  return s;
+}
+
+static void flush_buffer(char *buf, size_t *len, CONNECTION *conn)
+{
+  buf[*len] = '\0';
+  mutt_socket_write(conn, buf);
+  *len = 0;
+}
diff --git a/imap/message.h b/imap/message.h
new file mode 100644 (file)
index 0000000..78c5dc3
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 1996-9 Brandon Long <blong@fiction.net>
+ * Copyright (C) 1999-2000 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+/* message.c data structures */
+
+#ifndef MESSAGE_H
+#define MESSAGE_H 1
+
+/* -- data structures -- */
+/* IMAP-specific header data, stored as HEADER->data */
+typedef struct imap_header_data
+{
+  unsigned int uid;    /* 32-bit Message UID */
+  LIST *keywords;
+} IMAP_HEADER_DATA;
+
+typedef struct
+{
+  unsigned int read : 1;
+  unsigned int old : 1;
+  unsigned int deleted : 1;
+  unsigned int flagged : 1;
+  unsigned int replied : 1;
+  unsigned int changed : 1;
+
+  unsigned int sid;
+
+  IMAP_HEADER_DATA* data;
+
+  time_t received;
+  long content_length;
+} IMAP_HEADER;
+
+/* -- macros -- */
+#define HEADER_DATA(ph) ((IMAP_HEADER_DATA*) ((ph)->data))
+
+#endif /* MESSAGE_H */
diff --git a/imap/utf7.c b/imap/utf7.c
new file mode 100644 (file)
index 0000000..b6781a8
--- /dev/null
@@ -0,0 +1,272 @@
+/*
+ * Copyright (C) 2000 Edmund Grimley Evans <edmundo@rano.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "charset.h"
+
+static int Index_64[128] = {
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, 63,-1,-1,-1,
+    52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1,
+    -1, 0, 1, 2,  3, 4, 5, 6,  7, 8, 9,10, 11,12,13,14,
+    15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1,
+    -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
+    41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1
+};
+
+static char B64Chars[64] = {
+  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
+  'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
+  'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
+  't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7',
+  '8', '9', '+', ','
+};
+
+/*
+ * Convert the data (u7,u7len) from RFC 2060's UTF-7 to UTF-8.
+ * The result is null-terminated and returned, and also stored
+ * in (*u8,*u8len) if u8 or u8len is non-zero.
+ * If input data is invalid, return 0 and don't store anything.
+ * RFC 2060 obviously intends the encoding to be unique (see
+ * point 5 in section 5.1.3), so we reject any non-canonical
+ * form, such as &ACY- (instead of &-) or &AMA-&AMA- (instead
+ * of &AMAAwA-).
+ */
+static char *utf7_to_utf8 (const char *u7, size_t u7len, char **u8,
+  size_t *u8len)
+{
+  char *buf, *p;
+  int b, ch, k;
+
+  p = buf = safe_malloc (u7len + u7len / 8 + 1);
+
+  for (; u7len; u7++, u7len--)
+  {
+    if (*u7 == '&')
+    {
+      u7++, u7len--;
+
+      if (u7len && *u7 == '-')
+      {
+       *p++ = '&';
+       continue;
+      }
+
+      ch = 0;
+      k = 10;
+      for (; u7len; u7++, u7len--)
+      {
+       if ((*u7 & 0x80) || (b = Index_64[(int)*u7]) == -1)
+         break;
+       if (k > 0)
+       {
+         ch |= b << k;
+         k -= 6;
+       }
+       else
+       {
+         ch |= b >> (-k);
+         if (ch < 0x80)
+         {
+           if (0x20 <= ch && ch < 0x7f)
+             /* Printable US-ASCII */
+             goto bail;
+           *p++ = ch;
+         }
+         else if (ch < 0x800)
+         {
+           *p++ = 0xc0 | (ch >> 6);
+           *p++ = 0x80 | (ch & 0x3f);
+         }
+         else
+         {
+           *p++ = 0xe0 | (ch >> 12);
+           *p++ = 0x80 | ((ch >> 6) & 0x3f);
+           *p++ = 0x80 | (ch & 0x3f);
+         }
+         ch = (b << (16 + k)) & 0xffff;
+         k += 10;
+       }
+      }
+      if (ch || k < 6)
+       /* Non-zero or too many extra bits */
+       goto bail;
+      if (!u7len || *u7 != '-')
+       /* BASE64 not properly terminated */
+       goto bail;
+      if (u7len > 2 && u7[1] == '&' && u7[2] != '-')
+       /* Adjacent BASE64 sections */
+       goto bail;
+    }
+    else if (*u7 < 0x20 || *u7 >= 0x7f)
+      /* Not printable US-ASCII */
+      goto bail;
+    else
+      *p++ = *u7;
+  }
+  *p++ = '\0';
+  if (u8len)
+    *u8len = p - buf;
+
+  safe_realloc (&buf, p - buf);
+  if (u8)
+    *u8 = buf;
+  return buf;
+
+ bail:
+  FREE (&buf);
+  return 0;
+}
+
+/*
+ * Convert the data (u8,u8len) from UTF-8 to RFC 2060's UTF-7.
+ * The result is null-terminated and returned, and also stored
+ * in (*u7,*u7len) if u7 or u7len is non-zero.
+ * Unicode characters above U+FFFF are replaced by U+FFFE.
+ * If input data is invalid, return 0 and don't store anything.
+ */
+static char *utf8_to_utf7 (const char *u8, size_t u8len, char **u7,
+  size_t *u7len)
+{
+  char *buf, *p;
+  int ch;
+  int n, i, b = 0, k = 0;
+  int base64 = 0;
+
+  /*
+   * In the worst case we convert 2 chars to 7 chars. For example:
+   * "\x10&\x10&..." -> "&ABA-&-&ABA-&-...".
+   */
+  p = buf = safe_malloc ((u8len / 2) * 7 + 6);
+
+  while (u8len)
+  {
+    unsigned char c = *u8;
+
+    if (c < 0x80)
+      ch = c, n = 0;
+    else if (c < 0xc2)
+      goto bail;
+    else if (c < 0xe0)
+      ch = c & 0x1f, n = 1;
+    else if (c < 0xf0)
+      ch = c & 0x0f, n = 2;
+    else if (c < 0xf8)
+      ch = c & 0x07, n = 3;
+    else if (c < 0xfc)
+      ch = c & 0x03, n = 4;
+    else if (c < 0xfe)
+      ch = c & 0x01, n = 5;
+    else
+      goto bail;
+
+    u8++, u8len--;
+    if (n > u8len)
+      goto bail;
+    for (i = 0; i < n; i++)
+    {
+      if ((u8[i] & 0xc0) != 0x80)
+       goto bail;
+      ch = (ch << 6) | (u8[i] & 0x3f);
+    }
+    if (n > 1 && !(ch >> (n * 5 + 1)))
+      goto bail;
+    u8 += n, u8len -= n;
+
+    if (ch < 0x20 || ch >= 0x7f)
+    {
+      if (!base64)
+      {
+       *p++ = '&';
+       base64 = 1;
+       b = 0;
+       k = 10;
+      }
+      if (ch & ~0xffff)
+       ch = 0xfffe;
+      *p++ = B64Chars[b | ch >> k];
+      k -= 6;
+      for (; k >= 0; k -= 6)
+       *p++ = B64Chars[(ch >> k) & 0x3f];
+      b = (ch << (-k)) & 0x3f;
+      k += 16;
+    }
+    else
+    {
+      if (base64)
+      {
+       if (k > 10)
+         *p++ = B64Chars[b];
+       *p++ = '-';
+       base64 = 0;
+      }
+      *p++ = ch;
+      if (ch == '&')
+       *p++ = '-';
+    }
+  }
+
+  if (u8len)
+  {
+    FREE (&buf);
+    return 0;
+  }
+
+  if (base64)
+  {
+    if (k > 10)
+      *p++ = B64Chars[b];
+    *p++ = '-';
+  }
+
+  *p++ = '\0';
+  if (u7len)
+    *u7len = p - buf;
+  safe_realloc (&buf, p - buf);
+  if (u7)  *u7 = buf;
+  return buf;
+
+ bail:
+  FREE (&buf);
+  return 0;
+}
+
+void imap_utf7_encode (char **s)
+{
+  if (Charset)
+  {
+    char *t = safe_strdup (*s);
+    if (!mutt_convert_string (&t, Charset, "UTF-8", 0))
+      utf8_to_utf7 (t, strlen (t), s, 0);
+    FREE (&t);
+  }
+}
+
+void imap_utf7_decode (char **s)
+{
+  if (Charset)
+  {
+    char *t = utf7_to_utf8 (*s, strlen (*s), 0, 0);
+    if (t && !mutt_convert_string (&t, "UTF-8", Charset, 0))
+    {
+      FREE (s);
+      *s = t;
+    }
+  }
+}
diff --git a/imap/util.c b/imap/util.c
new file mode 100644 (file)
index 0000000..18d055a
--- /dev/null
@@ -0,0 +1,637 @@
+/*
+ * Copyright (C) 1996-8 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1996-9 Brandon Long <blong@fiction.net>
+ * Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+/* general IMAP utility functions */
+
+#include "mutt.h"
+#include "mx.h"        /* for M_IMAP */
+#include "url.h"
+#include "imap_private.h"
+#include "mutt_ssl.h"
+
+#include <stdlib.h>
+#include <ctype.h>
+
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <signal.h>
+#include <netdb.h>
+#include <netinet/in.h>
+
+#include <errno.h>
+
+/* -- public functions -- */
+
+/* imap_expand_path: IMAP implementation of mutt_expand_path. Rewrite
+ *   an IMAP path in canonical and absolute form.
+ * Inputs: a buffer containing an IMAP path, and the number of bytes in
+ *   that buffer.
+ * Outputs: The buffer is rewritten in place with the canonical IMAP path.
+ * Returns 0 on success, or -1 if imap_parse_path chokes or url_ciss_tostring
+ *   fails, which it might if there isn't enough room in the buffer. */
+int imap_expand_path (char* path, size_t len)
+{
+  IMAP_MBOX mx;
+  ciss_url_t url;
+  int rc;
+
+  if (imap_parse_path (path, &mx) < 0)
+    return -1;
+
+  mutt_account_tourl (&mx.account, &url);
+  url.path = mx.mbox;
+
+  rc = url_ciss_tostring (&url, path, len, U_DECODE_PASSWD);
+  FREE (&mx.mbox);
+
+  return rc;
+}
+
+/* imap_parse_path: given an IMAP mailbox name, return host, port
+ *   and a path IMAP servers will recognise.
+ * mx.mbox is malloc'd, caller must free it */
+int imap_parse_path (const char* path, IMAP_MBOX* mx)
+{
+  static unsigned short ImapPort = 0;
+  static unsigned short ImapsPort = 0;
+  struct servent* service;
+  char tmp[128];
+  ciss_url_t url;
+  char *c;
+  int n;
+
+  if (!ImapPort)
+  {
+    service = getservbyname ("imap", "tcp");
+    if (service)
+      ImapPort = ntohs (service->s_port);
+    else
+      ImapPort = IMAP_PORT;
+    dprint (3, (debugfile, "Using default IMAP port %d\n", ImapPort));
+  }
+  if (!ImapsPort)
+  {
+    service = getservbyname ("imaps", "tcp");
+    if (service)
+      ImapsPort = ntohs (service->s_port);
+    else
+      ImapsPort = IMAP_SSL_PORT;
+    dprint (3, (debugfile, "Using default IMAPS port %d\n", ImapsPort));
+  }
+
+  /* Defaults */
+  mx->account.flags = 0;
+  mx->account.port = ImapPort;
+  mx->account.type = M_ACCT_TYPE_IMAP;
+
+  c = safe_strdup (path);
+  url_parse_ciss (&url, c);
+  if (url.scheme == U_IMAP || url.scheme == U_IMAPS)
+  {
+    if (mutt_account_fromurl (&mx->account, &url) < 0)
+    {
+      FREE (&c);
+      return -1;
+    }
+
+    mx->mbox = safe_strdup (url.path);
+
+    if (url.scheme == U_IMAPS)
+      mx->account.flags |= M_ACCT_SSL;
+
+    FREE (&c);
+  }
+  /* old PINE-compatibility code */
+  else
+  {
+    FREE (&c);
+    if (sscanf (path, "{%127[^}]}", tmp) != 1)
+      return -1;
+
+    c = strchr (path, '}');
+    if (!c)
+      return -1;
+    else
+      /* walk past closing '}' */
+      mx->mbox = safe_strdup (c+1);
+  
+    if ((c = strrchr (tmp, '@')))
+    {
+      *c = '\0';
+      strfcpy (mx->account.user, tmp, sizeof (mx->account.user));
+      strfcpy (tmp, c+1, sizeof (tmp));
+      mx->account.flags |= M_ACCT_USER;
+    }
+  
+    if ((n = sscanf (tmp, "%127[^:/]%127s", mx->account.host, tmp)) < 1)
+    {
+      dprint (1, (debugfile, "imap_parse_path: NULL host in %s\n", path));
+      FREE (&mx->mbox);
+      return -1;
+    }
+  
+    if (n > 1) {
+      if (sscanf (tmp, ":%hd%127s", &(mx->account.port), tmp) >= 1)
+       mx->account.flags |= M_ACCT_PORT;
+      if (sscanf (tmp, "/%s", tmp) == 1)
+      {
+       if (!ascii_strncmp (tmp, "ssl", 3))
+         mx->account.flags |= M_ACCT_SSL;
+       else
+       {
+         dprint (1, (debugfile, "imap_parse_path: Unknown connection type in %s\n", path));
+         FREE (&mx->mbox);
+         return -1;
+       }
+      }
+    }
+  }
+  
+#ifdef USE_SSL
+  if (option (OPTIMAPFORCESSL))
+    mx->account.flags |= M_ACCT_SSL;
+#endif
+
+  if ((mx->account.flags & M_ACCT_SSL) && !(mx->account.flags & M_ACCT_PORT))
+    mx->account.port = ImapsPort;
+
+  return 0;
+}
+
+/* imap_pretty_mailbox: called by mutt_pretty_mailbox to make IMAP paths
+ *   look nice. */
+void imap_pretty_mailbox (char* path)
+{
+  IMAP_MBOX home, target;
+  ciss_url_t url;
+  char* delim;
+  int tlen;
+  int hlen = 0;
+  char home_match = 0;
+
+  if (imap_parse_path (path, &target) < 0)
+    return;
+
+  tlen = mutt_strlen (target.mbox);
+  /* check whether we can do '=' substitution */
+  if (mx_is_imap(Maildir) && !imap_parse_path (Maildir, &home))
+  {
+    hlen = mutt_strlen (home.mbox);
+    if (tlen && mutt_account_match (&home.account, &target.account) &&
+       !mutt_strncmp (home.mbox, target.mbox, hlen))
+    {
+      if (! hlen)
+       home_match = 1;
+      else
+       for (delim = ImapDelimChars; *delim != '\0'; delim++)
+         if (target.mbox[hlen] == *delim)
+           home_match = 1;
+    }
+    FREE (&home.mbox);
+  }
+
+  /* do the '=' substitution */
+  if (home_match) {
+    *path++ = '=';
+    /* copy remaining path, skipping delimiter */
+    if (! hlen)
+      hlen = -1;
+    memcpy (path, target.mbox + hlen + 1, tlen - hlen - 1);
+    path[tlen - hlen - 1] = '\0';
+  }
+  else
+  {
+    mutt_account_tourl (&target.account, &url);
+    url.path = target.mbox;
+    /* FIXME: That hard-coded constant is bogus. But we need the actual
+     *   size of the buffer from mutt_pretty_mailbox. And these pretty
+     *   operations usually shrink the result. Still... */
+    url_ciss_tostring (&url, path, 1024, 0);
+  }
+
+  FREE (&target.mbox);
+}
+
+/* -- library functions -- */
+
+/* imap_continue: display a message and ask the user if she wants to
+ *   go on. */
+int imap_continue (const char* msg, const char* resp)
+{
+  imap_error (msg, resp);
+  return mutt_yesorno (_("Continue?"), 0);
+}
+
+/* imap_error: show an error and abort */
+void imap_error (const char *where, const char *msg)
+{
+  mutt_error ("%s [%s]\n", where, msg);
+  mutt_sleep (2);
+}
+
+/* imap_new_idata: Allocate and initialise a new IMAP_DATA structure.
+ *   Returns NULL on failure (no mem) */
+IMAP_DATA* imap_new_idata (void) {
+  return safe_calloc (1, sizeof (IMAP_DATA));
+}
+
+/* imap_free_idata: Release and clear storage in an IMAP_DATA structure. */
+void imap_free_idata (IMAP_DATA** idata) {
+  if (!idata)
+    return;
+
+  FREE (&(*idata)->capstr);
+  mutt_free_list (&(*idata)->flags);
+  FREE (&((*idata)->cmd.buf));
+  FREE (idata);
+}
+
+/*
+ * Fix up the imap path.  This is necessary because the rest of mutt
+ * assumes a hierarchy delimiter of '/', which is not necessarily true
+ * in IMAP.  Additionally, the filesystem converts multiple hierarchy
+ * delimiters into a single one, ie "///" is equal to "/".  IMAP servers
+ * are not required to do this.
+ */
+char *imap_fix_path (IMAP_DATA *idata, char *mailbox, char *path, 
+    size_t plen)
+{
+  int x = 0;
+
+  if (!mailbox || !*mailbox)
+  {
+    strfcpy (path, "INBOX", plen);
+    return path;
+  }
+
+  while (mailbox && *mailbox && (x < (plen - 1)))
+  {
+    if ((*mailbox == '/') || (*mailbox == idata->delim))
+    {
+      while ((*mailbox == '/') || (*mailbox == idata->delim)) mailbox++;
+      path[x] = idata->delim;
+    }
+    else
+    {
+      path[x] = *mailbox;
+      mailbox++;
+    }
+    x++;
+  }
+  path[x] = '\0';
+  return path;
+}
+
+/* imap_get_literal_count: write number of bytes in an IMAP literal into
+ *   bytes, return 0 on success, -1 on failure. */
+int imap_get_literal_count(const char *buf, long *bytes)
+{
+  char *pc;
+  char *pn;
+
+  if (!(pc = strchr (buf, '{')))
+    return (-1);
+  pc++;
+  pn = pc;
+  while (isdigit ((unsigned char) *pc))
+    pc++;
+  *pc = 0;
+  *bytes = atoi(pn);
+  return (0);
+}
+
+/* imap_get_qualifier: in a tagged response, skip tag and status for
+ *   the qualifier message. Used by imap_copy_message for TRYCREATE */
+char* imap_get_qualifier (char* buf)
+{
+  char *s = buf;
+
+  /* skip tag */
+  s = imap_next_word (s);
+  /* skip OK/NO/BAD response */
+  s = imap_next_word (s);
+
+  return s;
+}
+
+/* imap_next_word: return index into string where next IMAP word begins */
+char *imap_next_word (char *s)
+{
+  int quoted = 0;
+
+  while (*s) {
+    if (*s == '\\') {
+      s++;
+      if (*s)
+       s++;
+      continue;
+    }
+    if (*s == '\"')
+      quoted = quoted ? 0 : 1;
+    if (!quoted && ISSPACE (*s))
+      break;
+    s++;
+  }
+
+  SKIPWS (s);
+  return s;
+}
+
+/* imap_parse_date: date is of the form: DD-MMM-YYYY HH:MM:SS +ZZzz */
+time_t imap_parse_date (char *s)
+{
+  struct tm t;
+  time_t tz;
+
+  t.tm_mday = (s[0] == ' '? s[1] - '0' : (s[0] - '0') * 10 + (s[1] - '0'));  
+  s += 2;
+  if (*s != '-')
+    return 0;
+  s++;
+  t.tm_mon = mutt_check_month (s);
+  s += 3;
+  if (*s != '-')
+    return 0;
+  s++;
+  t.tm_year = (s[0] - '0') * 1000 + (s[1] - '0') * 100 + (s[2] - '0') * 10 + (s[3] - '0') - 1900;
+  s += 4;
+  if (*s != ' ')
+    return 0;
+  s++;
+
+  /* time */
+  t.tm_hour = (s[0] - '0') * 10 + (s[1] - '0');
+  s += 2;
+  if (*s != ':')
+    return 0;
+  s++;
+  t.tm_min = (s[0] - '0') * 10 + (s[1] - '0');
+  s += 2;
+  if (*s != ':')
+    return 0;
+  s++;
+  t.tm_sec = (s[0] - '0') * 10 + (s[1] - '0');
+  s += 2;
+  if (*s != ' ')
+    return 0;
+  s++;
+
+  /* timezone */
+  tz = ((s[1] - '0') * 10 + (s[2] - '0')) * 3600 +
+    ((s[3] - '0') * 10 + (s[4] - '0')) * 60;
+  if (s[0] == '+')
+    tz = -tz;
+
+  return (mutt_mktime (&t, 0) + tz);
+}
+
+/* imap_qualify_path: make an absolute IMAP folder target, given IMAP_MBOX
+ *   and relative path. */
+void imap_qualify_path (char *dest, size_t len, IMAP_MBOX *mx, char* path)
+{
+  ciss_url_t url;
+
+  mutt_account_tourl (&mx->account, &url);
+  url.path = path;
+
+  url_ciss_tostring (&url, dest, len, 0);
+}
+
+
+/* imap_quote_string: quote string according to IMAP rules:
+ *   surround string with quotes, escape " and \ with \ */
+void imap_quote_string (char *dest, size_t dlen, const char *src)
+{
+  char quote[] = "\"\\", *pt;
+  const char *s;
+
+  pt = dest;
+  s  = src;
+
+  *pt++ = '"';
+  /* save room for trailing quote-char */
+  dlen -= 2;
+  
+  for (; *s && dlen; s++)
+  {
+    if (strchr (quote, *s))
+    {
+      dlen -= 2;
+      if (!dlen)
+       break;
+      *pt++ = '\\';
+      *pt++ = *s;
+    }
+    else
+    {
+      *pt++ = *s;
+      dlen--;
+    }
+  }
+  *pt++ = '"';
+  *pt = 0;
+}
+
+/* imap_unquote_string: equally stupid unquoting routine */
+void imap_unquote_string (char *s)
+{
+  char *d = s;
+
+  if (*s == '\"')
+    s++;
+  else
+    return;
+
+  while (*s)
+  {
+    if (*s == '\"')
+    {
+      *d = '\0';
+      return;
+    }
+    if (*s == '\\')
+    {
+      s++;
+    }
+    if (*s)
+    {
+      *d = *s;
+      d++;
+      s++;
+    }
+  }
+  *d = '\0';
+}
+
+/*
+ * Quoting and UTF-7 conversion
+ */
+
+void imap_munge_mbox_name (char *dest, size_t dlen, const char *src)
+{
+  char *buf;
+
+  buf = safe_strdup (src);
+  imap_utf7_encode (&buf);
+
+  imap_quote_string (dest, dlen, buf);
+
+  FREE (&buf);
+}
+
+void imap_unmunge_mbox_name (char *s)
+{
+  char *buf;
+
+  imap_unquote_string(s);
+
+  buf = safe_strdup (s);
+  if (buf)
+  {
+    imap_utf7_decode (&buf);
+    strncpy (s, buf, strlen (s));
+  }
+  
+  FREE (&buf);
+}
+
+/* imap_wordcasecmp: find word a in word list b */
+int imap_wordcasecmp(const char *a, const char *b)
+{
+  char tmp[SHORT_STRING];
+  char *s = (char *)b;
+  int i;
+
+  tmp[SHORT_STRING-1] = 0;
+  for(i=0;i < SHORT_STRING-2;i++,s++)
+  {
+    if (!*s || ISSPACE(*s))
+    {
+      tmp[i] = 0;
+      break;
+    }
+    tmp[i] = *s;
+  }
+  tmp[i+1] = 0;
+
+  return ascii_strcasecmp(a, tmp);
+}
+
+/* 
+ * Imap keepalive: poll the current folder to keep the
+ * connection alive.
+ * 
+ */
+
+static RETSIGTYPE alrm_handler (int sig)
+{
+  /* empty */
+}
+
+void imap_keepalive (void)
+{
+  CONNECTION *conn;
+  CONTEXT *ctx = NULL;
+  IMAP_DATA *idata;
+
+  conn = mutt_socket_head ();
+  while (conn)
+  {
+    if (conn->account.type == M_ACCT_TYPE_IMAP)
+    {
+      idata = (IMAP_DATA*) conn->data;
+
+      if (idata->state >= IMAP_AUTHENTICATED
+         && time(NULL) >= idata->lastread + ImapKeepalive)
+      {
+       if (idata->ctx)
+         ctx = idata->ctx;
+       else
+       {
+         ctx = safe_calloc (1, sizeof (CONTEXT));
+         ctx->data = idata;
+       }
+       imap_check_mailbox (ctx, NULL, 1);
+       if (!idata->ctx)
+         FREE (&ctx);
+      }
+    }
+
+    conn = conn->next;
+  }
+}
+
+int imap_wait_keepalive (pid_t pid)
+{
+  struct sigaction oldalrm;
+  struct sigaction act;
+  sigset_t oldmask;
+  int rc;
+
+  short imap_passive = option (OPTIMAPPASSIVE);
+  
+  set_option (OPTIMAPPASSIVE);
+  set_option (OPTKEEPQUIET);
+
+  sigprocmask (SIG_SETMASK, NULL, &oldmask);
+
+  sigemptyset (&act.sa_mask);
+  act.sa_handler = alrm_handler;
+#ifdef SA_INTERRUPT
+  act.sa_flags = SA_INTERRUPT;
+#else
+  act.sa_flags = 0;
+#endif
+
+  sigaction (SIGALRM, &act, &oldalrm);
+
+  alarm (ImapKeepalive);
+  while (waitpid (pid, &rc, 0) < 0 && errno == EINTR)
+  {
+    alarm (0); /* cancel a possibly pending alarm */
+    imap_keepalive ();
+    alarm (ImapKeepalive);
+  }
+
+  alarm (0);   /* cancel a possibly pending alarm */
+  
+  sigaction (SIGALRM, &oldalrm, NULL);
+  sigprocmask (SIG_SETMASK, &oldmask, NULL);
+
+  unset_option (OPTKEEPQUIET);
+  if (!imap_passive)
+    unset_option (OPTIMAPPASSIVE);
+
+  return rc;
+}
+
+/* Allow/disallow re-opening a folder upon expunge. */
+
+void imap_allow_reopen (CONTEXT *ctx)
+{
+  if (ctx && ctx->magic == M_IMAP && CTX_DATA->ctx == ctx)
+    CTX_DATA->reopen |= IMAP_REOPEN_ALLOW;
+}
+
+void imap_disallow_reopen (CONTEXT *ctx)
+{
+  if (ctx && ctx->magic == M_IMAP && CTX_DATA->ctx == ctx)
+    CTX_DATA->reopen &= ~IMAP_REOPEN_ALLOW;
+}
diff --git a/init.c b/init.c
new file mode 100644 (file)
index 0000000..dc28df0
--- /dev/null
+++ b/init.c
@@ -0,0 +1,2177 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mapping.h"
+#include "mutt_curses.h"
+#include "mutt_regex.h"
+#include "history.h"
+#include "keymap.h"
+#include "mbyte.h"
+#include "charset.h"
+#include "mutt_crypt.h"
+#include "mutt_idna.h"
+
+#if defined(USE_SSL) || defined(USE_NSS)
+#include "mutt_ssl.h"
+#endif
+
+
+
+#include "mx.h"
+#include "init.h"
+#include "mailbox.h"
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/utsname.h>
+#include <errno.h>
+#include <sys/wait.h>
+
+void toggle_quadoption (int opt)
+{
+  int n = opt/4;
+  int b = (opt % 4) * 2;
+
+  QuadOptions[n] ^= (1 << b);
+}
+
+void set_quadoption (int opt, int flag)
+{
+  int n = opt/4;
+  int b = (opt % 4) * 2;
+
+  QuadOptions[n] &= ~(0x3 << b);
+  QuadOptions[n] |= (flag & 0x3) << b;
+}
+
+int quadoption (int opt)
+{
+  int n = opt/4;
+  int b = (opt % 4) * 2;
+
+  return (QuadOptions[n] >> b) & 0x3;
+}
+
+int query_quadoption (int opt, const char *prompt)
+{
+  int v = quadoption (opt);
+
+  switch (v)
+  {
+    case M_YES:
+    case M_NO:
+      return (v);
+
+    default:
+      v = mutt_yesorno (prompt, (v == M_ASKYES));
+      CLEARLINE (LINES - 1);
+      return (v);
+  }
+
+  /* not reached */
+}
+
+/* given the variable ``s'', return the index into the rc_vars array which
+   matches, or -1 if the variable is not found.  */
+int mutt_option_index (char *s)
+{
+  int i;
+
+  for (i = 0; MuttVars[i].option; i++)
+    if (mutt_strcmp (s, MuttVars[i].option) == 0)
+      return (MuttVars[i].type == DT_SYN ?  mutt_option_index ((char *) MuttVars[i].data) : i);
+  return (-1);
+}
+
+int mutt_extract_token (BUFFER *dest, BUFFER *tok, int flags)
+{
+  char         ch;
+  char         qc = 0; /* quote char */
+  char         *pc;
+
+  /* reset the destination pointer to the beginning of the buffer */
+  dest->dptr = dest->data;
+
+  SKIPWS (tok->dptr);
+  while ((ch = *tok->dptr))
+  {
+    if (!qc)
+    {
+      if ((ISSPACE (ch) && !(flags & M_TOKEN_SPACE)) ||
+         (ch == '#' && !(flags & M_TOKEN_COMMENT)) ||
+         (ch == '=' && (flags & M_TOKEN_EQUAL)) ||
+         (ch == ';' && !(flags & M_TOKEN_SEMICOLON)) ||
+         ((flags & M_TOKEN_PATTERN) && strchr ("~!|", ch)))
+       break;
+    }
+
+    tok->dptr++;
+
+    if (ch == qc)
+      qc = 0; /* end of quote */
+    else if (!qc && (ch == '\'' || ch == '"') && !(flags & M_TOKEN_QUOTE))
+      qc = ch;
+    else if (ch == '\\' && qc != '\'')
+    {
+       if (!*tok->dptr)
+           return -1; /* premature end of token */
+      switch (ch = *tok->dptr++)
+      {
+       case 'c':
+       case 'C':
+           if (!*tok->dptr)
+               return -1; /* premature end of token */
+         mutt_buffer_addch (dest, (toupper ((unsigned char) *tok->dptr)
+                                    - '@') & 0x7f);
+         tok->dptr++;
+         break;
+       case 'r':
+         mutt_buffer_addch (dest, '\r');
+         break;
+       case 'n':
+         mutt_buffer_addch (dest, '\n');
+         break;
+       case 't':
+         mutt_buffer_addch (dest, '\t');
+         break;
+       case 'f':
+         mutt_buffer_addch (dest, '\f');
+         break;
+       case 'e':
+         mutt_buffer_addch (dest, '\033');
+         break;
+       default:
+         if (isdigit ((unsigned char) ch) &&
+             isdigit ((unsigned char) *tok->dptr) &&
+             isdigit ((unsigned char) *(tok->dptr + 1)))
+         {
+
+           mutt_buffer_addch (dest, (ch << 6) + (*tok->dptr << 3) + *(tok->dptr + 1) - 3504);
+           tok->dptr += 2;
+         }
+         else
+           mutt_buffer_addch (dest, ch);
+      }
+    }
+    else if (ch == '^' && (flags & M_TOKEN_CONDENSE))
+    {
+       if (!*tok->dptr)
+           return -1; /* premature end of token */
+      ch = *tok->dptr++;
+      if (ch == '^')
+       mutt_buffer_addch (dest, ch);
+      else if (ch == '[')
+       mutt_buffer_addch (dest, '\033');
+      else if (isalpha ((unsigned char) ch))
+       mutt_buffer_addch (dest, toupper ((unsigned char) ch) - '@');
+      else
+      {
+       mutt_buffer_addch (dest, '^');
+       mutt_buffer_addch (dest, ch);
+      }
+    }
+    else if (ch == '`' && (!qc || qc == '"'))
+    {
+      FILE     *fp;
+      pid_t    pid;
+      char     *cmd, *ptr;
+      size_t   expnlen;
+      BUFFER   expn;
+      int      line = 0;
+
+      pc = tok->dptr;
+      do {
+       if ((pc = strpbrk (pc, "\\`")))
+       {
+         /* skip any quoted chars */
+         if (*pc == '\\')
+           pc += 2;
+       }
+      } while (pc && *pc != '`');
+      if (!pc)
+      {
+       dprint (1, (debugfile, "mutt_get_token: mismatched backtics\n"));
+       return (-1);
+      }
+      cmd = mutt_substrdup (tok->dptr, pc);
+      if ((pid = mutt_create_filter (cmd, NULL, &fp, NULL)) < 0)
+      {
+       dprint (1, (debugfile, "mutt_get_token: unable to fork command: %s", cmd));
+       FREE (&cmd);
+       return (-1);
+      }
+      FREE (&cmd);
+
+      tok->dptr = pc + 1;
+
+      /* read line */
+      memset (&expn, 0, sizeof (expn));
+      expn.data = mutt_read_line (NULL, &expn.dsize, fp, &line);
+      fclose (fp);
+      mutt_wait_filter (pid);
+
+      /* if we got output, make a new string consiting of the shell ouptput
+        plus whatever else was left on the original line */
+      /* BUT: If this is inside a quoted string, directly add output to 
+       * the token */
+      if (expn.data && qc)
+      {
+       mutt_buffer_addstr (dest, expn.data);
+       FREE (&expn.data);
+      }
+      else if (expn.data)
+      {
+       expnlen = mutt_strlen (expn.data);
+       tok->dsize = expnlen + mutt_strlen (tok->dptr) + 1;
+       ptr = safe_malloc (tok->dsize);
+       memcpy (ptr, expn.data, expnlen);
+       strcpy (ptr + expnlen, tok->dptr);      /* __STRCPY_CHECKED__ */
+       if (tok->destroy)
+         FREE (&tok->data);
+       tok->data = ptr;
+       tok->dptr = ptr;
+       tok->destroy = 1; /* mark that the caller should destroy this data */
+       ptr = NULL;
+       FREE (&expn.data);
+      }
+    }
+    else if (ch == '$' && (!qc || qc == '"') && (*tok->dptr == '{' || isalpha ((unsigned char) *tok->dptr)))
+    {
+      char *env = NULL, *var = NULL;
+
+      if (*tok->dptr == '{')
+      {
+       tok->dptr++;
+       if ((pc = strchr (tok->dptr, '}')))
+       {
+         var = mutt_substrdup (tok->dptr, pc);
+         tok->dptr = pc + 1;
+       }
+      }
+      else
+      {
+       for (pc = tok->dptr; isalpha ((unsigned char) *pc) || *pc == '_'; pc++)
+         ;
+       var = mutt_substrdup (tok->dptr, pc);
+       tok->dptr = pc;
+      }
+      if (var && (env = getenv (var)))
+       mutt_buffer_addstr (dest, env);
+      FREE (&var);
+    }
+    else
+      mutt_buffer_addch (dest, ch);
+  }
+  mutt_buffer_addch (dest, 0); /* terminate the string */
+  SKIPWS (tok->dptr);
+  return 0;
+}
+
+static void add_to_list (LIST **list, const char *str)
+{
+  LIST *t, *last = NULL;
+
+  /* don't add a NULL or empty string to the list */
+  if (!str || *str == '\0')
+    return;
+
+  /* check to make sure the item is not already on this list */
+  for (last = *list; last; last = last->next)
+  {
+    if (ascii_strcasecmp (str, last->data) == 0)
+    {
+      /* already on the list, so just ignore it */
+      last = NULL;
+      break;
+    }
+    if (!last->next)
+      break;
+  }
+
+  if (!*list || last)
+  {
+    t = (LIST *) safe_calloc (1, sizeof (LIST));
+    t->data = safe_strdup (str);
+    if (last)
+    {
+      last->next = t;
+      last = last->next;
+    }
+    else
+      *list = last = t;
+  }
+}
+
+static int add_to_rx_list (RX_LIST **list, const char *s, int flags, BUFFER *err)
+{
+  RX_LIST *t, *last = NULL;
+  REGEXP *rx;
+
+  if (!s || !*s)
+    return 0;
+
+  if (!(rx = mutt_compile_regexp (s, flags)))
+  {
+    snprintf (err->data, err->dsize, "Bad regexp: %s\n", s);
+    return -1;
+  }
+
+  /* check to make sure the item is not already on this list */
+  for (last = *list; last; last = last->next)
+  {
+    if (ascii_strcasecmp (rx->pattern, last->rx->pattern) == 0)
+    {
+      /* already on the list, so just ignore it */
+      last = NULL;
+      break;
+    }
+    if (!last->next)
+      break;
+  }
+
+  if (!*list || last)
+  {
+    t = mutt_new_rx_list();
+    t->rx = rx;
+    if (last)
+    {
+      last->next = t;
+      last = last->next;
+    }
+    else
+      *list = last = t;
+  }
+  else /* duplicate */
+    mutt_free_regexp (&rx);
+
+  return 0;
+}
+
+
+static void remove_from_list (LIST **l, const char *str)
+{
+  LIST *p, *last = NULL;
+
+  if (mutt_strcmp ("*", str) == 0)
+    mutt_free_list (l);    /* ``unCMD *'' means delete all current entries */
+  else
+  {
+    p = *l;
+    last = NULL;
+    while (p)
+    {
+      if (ascii_strcasecmp (str, p->data) == 0)
+      {
+       FREE (&p->data);
+       if (last)
+         last->next = p->next;
+       else
+         (*l) = p->next;
+       FREE (&p);
+      }
+      else
+      {
+       last = p;
+       p = p->next;
+      }
+    }
+  }
+}
+
+static void remove_from_rx_list (RX_LIST **l, const char *str)
+{
+  RX_LIST *p, *last = NULL;
+
+  if (mutt_strcmp ("*", str) == 0)
+    mutt_free_rx_list (l);    /* ``unCMD *'' means delete all current entries */
+  else
+  {
+    p = *l;
+    last = NULL;
+    while (p)
+    {
+      if (ascii_strcasecmp (str, p->rx->pattern) == 0)
+      {
+       mutt_free_regexp (&p->rx);
+       if (last)
+         last->next = p->next;
+       else
+         (*l) = p->next;
+       FREE (&p);
+      }
+      else
+      {
+       last = p;
+       p = p->next;
+      }
+    }
+  }
+}
+
+static int parse_unignore (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  do
+  {
+    mutt_extract_token (buf, s, 0);
+
+    /* don't add "*" to the unignore list */
+    if (strcmp (buf->data, "*")) 
+      add_to_list (&UnIgnore, buf->data);
+
+    remove_from_list (&Ignore, buf->data);
+  }
+  while (MoreArgs (s));
+
+  return 0;
+}
+
+static int parse_ignore (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  do
+  {
+    mutt_extract_token (buf, s, 0);
+    remove_from_list (&UnIgnore, buf->data);
+    add_to_list (&Ignore, buf->data);
+  }
+  while (MoreArgs (s));
+
+  return 0;
+}
+
+static int parse_list (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  do
+  {
+    mutt_extract_token (buf, s, 0);
+    add_to_list ((LIST **) data, buf->data);
+  }
+  while (MoreArgs (s));
+
+  return 0;
+}
+
+static int _parse_rx_list (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err, int flags)
+{
+  do 
+  {
+    mutt_extract_token (buf, s, 0);
+    if (add_to_rx_list ((RX_LIST **) data, buf->data, flags, err) != 0)
+      return -1;
+       
+  }
+  while (MoreArgs (s));
+  
+  return 0;
+}
+
+static int parse_rx_list (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  return _parse_rx_list (buf, s, data, err, REG_ICASE);
+}
+
+static int parse_rx_unlist (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  do
+  {
+    mutt_extract_token (buf, s, 0);
+    if (mutt_strcmp (buf->data, "*") == 0)
+    {
+      mutt_free_rx_list ((RX_LIST **) data);
+      break;
+    }
+    remove_from_rx_list ((RX_LIST **) data, buf->data);
+  }
+  while (MoreArgs (s));
+  
+  return 0;
+}
+
+static int parse_unlist (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  do
+  {
+    mutt_extract_token (buf, s, 0);
+    /*
+     * Check for deletion of entire list
+     */
+    if (mutt_strcmp (buf->data, "*") == 0)
+    {
+      mutt_free_list ((LIST **) data);
+      break;
+    }
+    remove_from_list ((LIST **) data, buf->data);
+  }
+  while (MoreArgs (s));
+
+  return 0;
+}
+
+
+static int parse_unlists (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  do
+  {
+    mutt_extract_token (buf, s, 0);
+    remove_from_rx_list (&MailLists, buf->data);
+    remove_from_rx_list (&SubscribedLists, buf->data);
+  }
+  while (MoreArgs (s));
+
+  return 0;
+}
+
+static int parse_subscribe (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  do
+  {
+    mutt_extract_token (buf, s, 0);
+    if (add_to_rx_list (&MailLists, buf->data, REG_ICASE, err) != 0)
+      return -1;
+    if (add_to_rx_list (&SubscribedLists, buf->data, REG_ICASE, err) != 0)
+      return -1;
+  }
+  while (MoreArgs (s));
+
+  return 0;
+}
+  
+static int parse_unalias (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  ALIAS *tmp, *last = NULL;
+
+  do
+  {
+    mutt_extract_token (buf, s, 0);
+
+    if (mutt_strcmp ("*", buf->data) == 0)
+    {
+      if (CurrentMenu == MENU_ALIAS)
+      {
+       for (tmp = Aliases; tmp ; tmp = tmp->next)
+         tmp->del = 1;
+       set_option (OPTFORCEREDRAWINDEX);
+      }
+      else
+       mutt_free_alias (&Aliases);
+      break;
+    }
+    else
+      for (tmp = Aliases; tmp; tmp = tmp->next)
+      {
+       if (mutt_strcasecmp (buf->data, tmp->name) == 0)
+       {
+         if (CurrentMenu == MENU_ALIAS)
+         {
+           tmp->del = 1;
+           set_option (OPTFORCEREDRAWINDEX);
+           break;
+         }
+
+         if (last)
+           last->next = tmp->next;
+         else
+           Aliases = tmp->next;
+         tmp->next = NULL;
+         mutt_free_alias (&tmp);
+         break;
+       }
+       last = tmp;
+      }
+  }
+  while (MoreArgs (s));
+  return 0;
+}
+
+static int parse_alias (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  ALIAS *tmp = Aliases;
+  ALIAS *last = NULL;
+  char *estr = NULL;
+  
+  if (!MoreArgs (s))
+  {
+    strfcpy (err->data, _("alias: no address"), err->dsize);
+    return (-1);
+  }
+
+  mutt_extract_token (buf, s, 0);
+
+  /* check to see if an alias with this name already exists */
+  for (; tmp; tmp = tmp->next)
+  {
+    if (!mutt_strcasecmp (tmp->name, buf->data))
+      break;
+    last = tmp;
+  }
+
+  if (!tmp)
+  {
+    /* create a new alias */
+    tmp = (ALIAS *) safe_calloc (1, sizeof (ALIAS));
+    tmp->self = tmp;
+    tmp->name = safe_strdup (buf->data);
+    /* give the main addressbook code a chance */
+    if (CurrentMenu == MENU_ALIAS)
+      set_option (OPTMENUCALLER);
+  }
+  else
+  {
+    /* override the previous value */
+    rfc822_free_address (&tmp->addr);
+    if (CurrentMenu == MENU_ALIAS)
+      set_option (OPTFORCEREDRAWINDEX);
+  }
+
+  mutt_extract_token (buf, s, M_TOKEN_QUOTE | M_TOKEN_SPACE | M_TOKEN_SEMICOLON);
+  tmp->addr = mutt_parse_adrlist (tmp->addr, buf->data);
+  if (last)
+    last->next = tmp;
+  else
+    Aliases = tmp;
+  if (mutt_addrlist_to_idna (tmp->addr, &estr))
+  {
+    snprintf (err->data, err->dsize, _("Warning: Bad IDN '%s' in alias '%s'.\n"),
+             estr, tmp->name);
+    return -1;
+  }
+  return 0;
+}
+
+static int
+parse_unmy_hdr (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  LIST *last = NULL;
+  LIST *tmp = UserHeader;
+  LIST *ptr;
+  size_t l;
+
+  do
+  {
+    mutt_extract_token (buf, s, 0);
+    if (mutt_strcmp ("*", buf->data) == 0)
+      mutt_free_list (&UserHeader);
+    else
+    {
+      tmp = UserHeader;
+      last = NULL;
+
+      l = mutt_strlen (buf->data);
+      if (buf->data[l - 1] == ':')
+       l--;
+
+      while (tmp)
+      {
+       if (ascii_strncasecmp (buf->data, tmp->data, l) == 0 && tmp->data[l] == ':')
+       {
+         ptr = tmp;
+         if (last)
+           last->next = tmp->next;
+         else
+           UserHeader = tmp->next;
+         tmp = tmp->next;
+         ptr->next = NULL;
+         mutt_free_list (&ptr);
+       }
+       else
+       {
+         last = tmp;
+         tmp = tmp->next;
+       }
+      }
+    }
+  }
+  while (MoreArgs (s));
+  return 0;
+}
+
+static int parse_my_hdr (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  LIST *tmp;
+  size_t keylen;
+  char *p;
+
+  mutt_extract_token (buf, s, M_TOKEN_SPACE | M_TOKEN_QUOTE);
+  if ((p = strpbrk (buf->data, ": \t")) == NULL || *p != ':')
+  {
+    strfcpy (err->data, _("invalid header field"), err->dsize);
+    return (-1);
+  }
+  keylen = p - buf->data + 1;
+
+  if (UserHeader)
+  {
+    for (tmp = UserHeader; ; tmp = tmp->next)
+    {
+      /* see if there is already a field by this name */
+      if (ascii_strncasecmp (buf->data, tmp->data, keylen) == 0)
+      {
+       /* replace the old value */
+       FREE (&tmp->data);
+       tmp->data = buf->data;
+       memset (buf, 0, sizeof (BUFFER));
+       return 0;
+      }
+      if (!tmp->next)
+       break;
+    }
+    tmp->next = mutt_new_list ();
+    tmp = tmp->next;
+  }
+  else
+  {
+    tmp = mutt_new_list ();
+    UserHeader = tmp;
+  }
+  tmp->data = buf->data;
+  memset (buf, 0, sizeof (BUFFER));
+  return 0;
+}
+
+static int
+parse_sort (short *val, const char *s, const struct mapping_t *map, BUFFER *err)
+{
+  int i, flags = 0;
+
+  if (mutt_strncmp ("reverse-", s, 8) == 0)
+  {
+    s += 8;
+    flags = SORT_REVERSE;
+  }
+  
+  if (mutt_strncmp ("last-", s, 5) == 0)
+  {
+    s += 5;
+    flags |= SORT_LAST;
+  }
+
+  if ((i = mutt_getvaluebyname (s, map)) == -1)
+  {
+    snprintf (err->data, err->dsize, _("%s: unknown sorting method"), s);
+    return (-1);
+  }
+
+  *val = i | flags;
+
+  return 0;
+}
+
+static void mutt_set_default (struct option_t *p)
+{
+  switch (p->type & DT_MASK)
+  {
+    case DT_STR:
+      if (!p->init && *((char **) p->data))
+        p->init = (unsigned long) safe_strdup (* ((char **) p->data));
+      break;
+    case DT_PATH:
+      if (!p->init && *((char **) p->data))
+      {
+       char *cp = safe_strdup (*((char **) p->data));
+       /* mutt_pretty_mailbox (cp); */
+        p->init = (unsigned long) cp;
+      }
+      break;
+    case DT_ADDR:
+      if (!p->init && *((ADDRESS **) p->data))
+      {
+       char tmp[HUGE_STRING];
+       *tmp = '\0';
+       rfc822_write_address (tmp, sizeof (tmp), *((ADDRESS **) p->data), 0);
+       p->init = (unsigned long) safe_strdup (tmp);
+      }
+      break;
+    case DT_RX:
+    {
+      REGEXP *pp = (REGEXP *) p->data;
+      if (!p->init && pp->pattern)
+       p->init = (unsigned long) safe_strdup (pp->pattern);
+      break;
+    }
+  }
+}
+
+static void mutt_restore_default (struct option_t *p)
+{
+  switch (p->type & DT_MASK)
+  {
+    case DT_STR:
+      if (p->init)
+       mutt_str_replace ((char **) p->data, (char *) p->init); 
+      break;
+    case DT_PATH:
+      if (p->init)
+      {
+       char path[_POSIX_PATH_MAX];
+
+       strfcpy (path, (char *) p->init, sizeof (path));
+       mutt_expand_path (path, sizeof (path));
+       mutt_str_replace ((char **) p->data, path);
+      }
+      break;
+    case DT_ADDR:
+      if (p->init)
+      {
+       rfc822_free_address ((ADDRESS **) p->data);
+       *((ADDRESS **) p->data) = rfc822_parse_adrlist (NULL, (char *) p->init);
+      }
+      break;
+    case DT_BOOL:
+      if (p->init)
+       set_option (p->data);
+      else
+       unset_option (p->data);
+      break;
+    case DT_QUAD:
+      set_quadoption (p->data, p->init);
+      break;
+    case DT_NUM:
+    case DT_SORT:
+    case DT_MAGIC:
+      *((short *) p->data) = p->init;
+      break;
+    case DT_RX:
+      {
+       REGEXP *pp = (REGEXP *) p->data;
+       int flags = 0;
+
+       FREE (&pp->pattern);
+       if (pp->rx)
+       {
+         regfree (pp->rx);
+         FREE (&pp->rx);
+       }
+
+       if (p->init)
+       {
+         char *s = (char *) p->init;
+
+         pp->rx = safe_calloc (1, sizeof (regex_t));
+         pp->pattern = safe_strdup ((char *) p->init);
+         if (mutt_strcmp (p->option, "alternates") == 0)
+           flags |= REG_ICASE;
+         else if (mutt_strcmp (p->option, "mask") != 0)
+           flags |= mutt_which_case ((const char *) p->init);
+         if (mutt_strcmp (p->option, "mask") == 0 && *s == '!')
+         {
+           s++;
+           pp->not = 1;
+         }
+         if (REGCOMP (pp->rx, s, flags) != 0)
+         {
+           fprintf (stderr, _("mutt_restore_default(%s): error in regexp: %s\n"),
+                    p->option, pp->pattern);
+           FREE (&pp->pattern);
+           regfree (pp->rx);
+           FREE (&pp->rx);
+         }
+       }
+      }
+      break;
+  }
+
+  if (p->flags & R_INDEX)
+    set_option (OPTFORCEREDRAWINDEX);
+  if (p->flags & R_PAGER)
+    set_option (OPTFORCEREDRAWPAGER);
+  if (p->flags & R_RESORT_SUB)
+    set_option (OPTSORTSUBTHREADS);
+  if (p->flags & R_RESORT)
+    set_option (OPTNEEDRESORT);
+  if (p->flags & R_RESORT_INIT)
+    set_option (OPTRESORTINIT);
+  if (p->flags & R_TREE)
+    set_option (OPTREDRAWTREE);
+}
+
+static int parse_set (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  int idx, query, unset, inv, reset, r = 0;
+  char *p, scratch[_POSIX_PATH_MAX];
+
+  while (MoreArgs (s))
+  {
+    /* reset state variables */
+    query = 0;
+    unset = data & M_SET_UNSET;
+    inv = data & M_SET_INV;
+    reset = data & M_SET_RESET;
+
+    if (*s->dptr == '?')
+    {
+      query = 1;
+      s->dptr++;
+    }
+    else if (mutt_strncmp ("no", s->dptr, 2) == 0)
+    {
+      s->dptr += 2;
+      unset = !unset;
+    }
+    else if (mutt_strncmp ("inv", s->dptr, 3) == 0)
+    {
+      s->dptr += 3;
+      inv = !inv;
+    }
+    else if (*s->dptr == '&')
+    {
+      reset = 1;
+      s->dptr++;
+    }
+
+    /* get the variable name */
+    mutt_extract_token (tmp, s, M_TOKEN_EQUAL);
+
+    if ((idx = mutt_option_index (tmp->data)) == -1 &&
+       !(reset && !mutt_strcmp ("all", tmp->data)))
+    {
+      snprintf (err->data, err->dsize, _("%s: unknown variable"), tmp->data);
+      return (-1);
+    }
+    SKIPWS (s->dptr);
+
+    if (reset)
+    {
+      if (query || unset || inv)
+      {
+       snprintf (err->data, err->dsize, _("prefix is illegal with reset"));
+       return (-1);
+      }
+
+      if (s && *s->dptr == '=')
+      {
+       snprintf (err->data, err->dsize, _("value is illegal with reset"));
+       return (-1);
+      }
+     
+      if (!mutt_strcmp ("all", tmp->data))
+      {
+       for (idx = 0; MuttVars[idx].option; idx++)
+         mutt_restore_default (&MuttVars[idx]);
+       return 0;
+      }
+      else
+       mutt_restore_default (&MuttVars[idx]);
+    } 
+    else if (DTYPE (MuttVars[idx].type) == DT_BOOL)
+    { 
+      if (s && *s->dptr == '=')
+      {
+       if (unset || inv || query)
+       {
+         snprintf (err->data, err->dsize, "Usage: set variable=yes|no");
+         return (-1);
+       }
+
+       s->dptr++;
+       mutt_extract_token (tmp, s, 0);
+       if (ascii_strcasecmp ("yes", tmp->data) == 0)
+         unset = inv = 0;
+       else if (ascii_strcasecmp ("no", tmp->data) == 0)
+         unset = 1;
+       else
+       {
+         snprintf (err->data, err->dsize, "Usage: set variable=yes|no");
+         return (-1);
+       }
+      }
+
+      if (query)
+      {
+       snprintf (err->data, err->dsize, option (MuttVars[idx].data)
+                       ? _("%s is set") : _("%s is unset"), tmp->data);
+       return 0;
+      }
+
+      if (unset)
+       unset_option (MuttVars[idx].data);
+      else if (inv)
+       toggle_option (MuttVars[idx].data);
+      else
+       set_option (MuttVars[idx].data);
+    }
+    else if (DTYPE (MuttVars[idx].type) == DT_STR ||
+            DTYPE (MuttVars[idx].type) == DT_PATH ||
+            DTYPE (MuttVars[idx].type) == DT_ADDR)
+    {
+      if (unset)
+      {
+       if (DTYPE (MuttVars[idx].type) == DT_ADDR)
+         rfc822_free_address ((ADDRESS **) MuttVars[idx].data);
+       else
+         FREE (MuttVars[idx].data);
+      }
+      else if (query || *s->dptr != '=')
+      {
+       char _tmp[STRING];
+       char *val = NULL;
+       
+       if (DTYPE (MuttVars[idx].type) == DT_ADDR)
+       {
+         _tmp[0] = '\0';
+         rfc822_write_address (_tmp, sizeof (_tmp), *((ADDRESS **) MuttVars[idx].data), 0);
+         val = _tmp;
+       }
+       else
+         val = *((char **) MuttVars[idx].data);
+       
+       /* user requested the value of this variable */
+       snprintf (err->data, err->dsize, "%s=\"%s\"", MuttVars[idx].option,
+                 NONULL (val));
+       break;
+      }
+      else
+      {
+        s->dptr++;
+
+        /* copy the value of the string */
+        if (DTYPE (MuttVars[idx].type) == DT_ADDR)
+         rfc822_free_address ((ADDRESS **) MuttVars[idx].data);
+        else
+         FREE (MuttVars[idx].data);
+
+        mutt_extract_token (tmp, s, 0);
+        if (DTYPE (MuttVars[idx].type) == DT_PATH)
+        {
+         strfcpy (scratch, tmp->data, sizeof (scratch));
+         mutt_expand_path (scratch, sizeof (scratch));
+         *((char **) MuttVars[idx].data) = safe_strdup (scratch);
+        }
+        else if (DTYPE (MuttVars[idx].type) == DT_STR)
+        {
+         *((char **) MuttVars[idx].data) = safe_strdup (tmp->data);
+         if (mutt_strcmp (MuttVars[idx].option, "charset") == 0)
+           mutt_set_charset (Charset);
+        }
+        else
+        {
+         *((ADDRESS **) MuttVars[idx].data) = rfc822_parse_adrlist (NULL, tmp->data);
+        }
+      }
+    }
+    else if (DTYPE(MuttVars[idx].type) == DT_RX)
+    {
+      REGEXP *ptr = (REGEXP *) MuttVars[idx].data;
+      regex_t *rx;
+      int e, flags = 0;
+
+      if (query || *s->dptr != '=')
+      {
+       /* user requested the value of this variable */
+       snprintf (err->data, err->dsize, "%s=\"%s\"", MuttVars[idx].option,
+                 NONULL (ptr->pattern));
+       break;
+      }
+
+      if (option(OPTATTACHMSG) && (!mutt_strcmp(MuttVars[idx].option, "alternates")
+                                  || !mutt_strcmp(MuttVars[idx].option, "reply_regexp")))
+      {
+       snprintf (err->data, err->dsize, "Operation not permitted when in attach-message mode.");
+       r = -1;
+       break;
+      }
+      
+      s->dptr++;
+
+      /* copy the value of the string */
+      mutt_extract_token (tmp, s, 0);
+
+      if (!ptr->pattern || mutt_strcmp (ptr->pattern, tmp->data) != 0)
+      {
+       int not = 0;
+
+       /* $alternates is case-insensitive,
+          $mask is case-sensitive */
+       if (mutt_strcmp (MuttVars[idx].option, "alternates") == 0)
+         flags |= REG_ICASE;
+       else if (mutt_strcmp (MuttVars[idx].option, "mask") != 0)
+         flags |= mutt_which_case (tmp->data);
+
+       p = tmp->data;
+       if (mutt_strcmp (MuttVars[idx].option, "mask") == 0)
+       {
+         if (*p == '!')
+         {
+           not = 1;
+           p++;
+         }
+       }
+         
+       rx = (regex_t *) safe_malloc (sizeof (regex_t));
+       if ((e = REGCOMP (rx, p, flags)) != 0)
+       {
+         regerror (e, rx, err->data, err->dsize);
+         regfree (rx);
+         FREE (&rx);
+         break;
+       }
+
+       /* get here only if everything went smootly */
+       if (ptr->pattern)
+       {
+         FREE (&ptr->pattern);
+         regfree ((regex_t *) ptr->rx);
+         FREE (&ptr->rx);
+       }
+
+       ptr->pattern = safe_strdup (tmp->data);
+       ptr->rx = rx;
+       ptr->not = not;
+
+       /* $reply_regexp and $alterantes require special treatment */
+       
+       if (Context && Context->msgcount &&
+           mutt_strcmp (MuttVars[idx].option, "reply_regexp") == 0)
+       {
+         regmatch_t pmatch[1];
+         int i;
+         
+#define CUR_ENV Context->hdrs[i]->env
+         for (i = 0; i < Context->msgcount; i++)
+         {
+           if (CUR_ENV && CUR_ENV->subject)
+           {
+             CUR_ENV->real_subj = (regexec (ReplyRegexp.rx,
+                                   CUR_ENV->subject, 1, pmatch, 0)) ?
+                                   CUR_ENV->subject : 
+                                   CUR_ENV->subject + pmatch[0].rm_eo;
+           }
+         }
+#undef CUR_ENV
+       }
+       
+       if(Context && Context->msgcount &&
+          mutt_strcmp(MuttVars[idx].option, "alternates") == 0)
+       {
+         int i;
+         
+         for(i = 0; i < Context->msgcount; i++)
+           Context->hdrs[i]->recip_valid = 0;
+       }
+      }
+    }
+    else if (DTYPE(MuttVars[idx].type) == DT_MAGIC)
+    {
+      if (query || *s->dptr != '=')
+      {
+       switch (DefaultMagic)
+       {
+         case M_MBOX:
+           p = "mbox";
+           break;
+         case M_MMDF:
+           p = "MMDF";
+           break;
+         case M_MH:
+           p = "MH";
+           break;
+         case M_MAILDIR:
+           p = "Maildir";
+           break;
+         default:
+           p = "unknown";
+           break;
+       }
+       snprintf (err->data, err->dsize, "%s=%s", MuttVars[idx].option, p);
+       break;
+      }
+
+      s->dptr++;
+
+      /* copy the value of the string */
+      mutt_extract_token (tmp, s, 0);
+      if (mx_set_magic (tmp->data))
+      {
+       snprintf (err->data, err->dsize, _("%s: invalid mailbox type"), tmp->data);
+       r = -1;
+       break;
+      }
+    }
+    else if (DTYPE(MuttVars[idx].type) == DT_NUM)
+    {
+      short *ptr = (short *) MuttVars[idx].data;
+      int val;
+      char *t;
+
+      if (query || *s->dptr != '=')
+      {
+       /* user requested the value of this variable */
+       snprintf (err->data, err->dsize, "%s=%d", MuttVars[idx].option, *ptr);
+       break;
+      }
+
+      s->dptr++;
+
+      mutt_extract_token (tmp, s, 0);
+      val = strtol (tmp->data, &t, 0);
+
+      if (!*tmp->data || *t || (short) val != val)
+      {
+       snprintf (err->data, err->dsize, _("%s: invalid value"), tmp->data);
+       r = -1;
+       break;
+      }
+      else
+       *ptr = (short) val;
+
+      /* these ones need a sanity check */
+      if (mutt_strcmp (MuttVars[idx].option, "history") == 0)
+      {
+       if (*ptr < 0)
+         *ptr = 0;
+       mutt_init_history ();
+      }
+      else if (mutt_strcmp (MuttVars[idx].option, "pager_index_lines") == 0)
+      {
+       if (*ptr < 0)
+         *ptr = 0;
+      }
+    }
+    else if (DTYPE (MuttVars[idx].type) == DT_QUAD)
+    {
+      if (query)
+      {
+       char *vals[] = { "no", "yes", "ask-no", "ask-yes" };
+
+       snprintf (err->data, err->dsize, "%s=%s", MuttVars[idx].option,
+                 vals [ quadoption (MuttVars[idx].data) ]);
+       break;
+      }
+
+      if (*s->dptr == '=')
+      {
+       s->dptr++;
+       mutt_extract_token (tmp, s, 0);
+       if (ascii_strcasecmp ("yes", tmp->data) == 0)
+         set_quadoption (MuttVars[idx].data, M_YES);
+       else if (ascii_strcasecmp ("no", tmp->data) == 0)
+         set_quadoption (MuttVars[idx].data, M_NO);
+       else if (ascii_strcasecmp ("ask-yes", tmp->data) == 0)
+         set_quadoption (MuttVars[idx].data, M_ASKYES);
+       else if (ascii_strcasecmp ("ask-no", tmp->data) == 0)
+         set_quadoption (MuttVars[idx].data, M_ASKNO);
+       else
+       {
+         snprintf (err->data, err->dsize, _("%s: invalid value"), tmp->data);
+         r = -1;
+         break;
+       }
+      }
+      else
+      {
+       if (inv)
+         toggle_quadoption (MuttVars[idx].data);
+       else if (unset)
+         set_quadoption (MuttVars[idx].data, M_NO);
+       else
+         set_quadoption (MuttVars[idx].data, M_YES);
+      }
+    }
+    else if (DTYPE (MuttVars[idx].type) == DT_SORT)
+    {
+      const struct mapping_t *map = NULL;
+
+      switch (MuttVars[idx].type & DT_SUBTYPE_MASK)
+      {
+       case DT_SORT_ALIAS:
+         map = SortAliasMethods;
+         break;
+       case DT_SORT_BROWSER:
+         map = SortBrowserMethods;
+         break;
+       case DT_SORT_KEYS:
+          if ((WithCrypto & APPLICATION_PGP))
+            map = SortKeyMethods;
+         break;
+       case DT_SORT_AUX:
+         map = SortAuxMethods;
+         break;
+       default:
+         map = SortMethods;
+         break;
+      }
+
+      if (!map)
+      {
+       snprintf (err->data, err->dsize, _("%s: Unknown type."), MuttVars[idx].option);
+       r = -1;
+       break;
+      }
+      
+      if (query || *s->dptr != '=')
+      {
+       p = mutt_getnamebyvalue (*((short *) MuttVars[idx].data) & SORT_MASK, map);
+
+       snprintf (err->data, err->dsize, "%s=%s%s%s", MuttVars[idx].option,
+                 (*((short *) MuttVars[idx].data) & SORT_REVERSE) ? "reverse-" : "",
+                 (*((short *) MuttVars[idx].data) & SORT_LAST) ? "last-" : "",
+                 p);
+       return 0;
+      }
+      s->dptr++;
+      mutt_extract_token (tmp, s , 0);
+
+      if (parse_sort ((short *) MuttVars[idx].data, tmp->data, map, err) == -1)
+      {
+       r = -1;
+       break;
+      }
+    }
+    else
+    {
+      snprintf (err->data, err->dsize, _("%s: unknown type"), MuttVars[idx].option);
+      r = -1;
+      break;
+    }
+
+    if (MuttVars[idx].flags & R_INDEX)
+      set_option (OPTFORCEREDRAWINDEX);
+    if (MuttVars[idx].flags & R_PAGER)
+      set_option (OPTFORCEREDRAWPAGER);
+    if (MuttVars[idx].flags & R_RESORT_SUB)
+      set_option (OPTSORTSUBTHREADS);
+    if (MuttVars[idx].flags & R_RESORT)
+      set_option (OPTNEEDRESORT);
+    if (MuttVars[idx].flags & R_RESORT_INIT)
+      set_option (OPTRESORTINIT);
+    if (MuttVars[idx].flags & R_TREE)
+      set_option (OPTREDRAWTREE);
+  }
+  return (r);
+}
+
+#define MAXERRS 128
+
+/* reads the specified initialization file.  returns -1 if errors were found
+   so that we can pause to let the user know...  */
+static int source_rc (const char *rcfile, BUFFER *err)
+{
+  FILE *f;
+  int line = 0, rc = 0;
+  BUFFER token;
+  char *linebuf = NULL;
+  size_t buflen;
+  pid_t pid;
+  struct stat s;
+
+  if (stat (rcfile, &s) < 0)
+  {
+    snprintf (err->data, err->dsize, _("%s: stat: %s"), rcfile, strerror (errno));
+    return (-1);
+  }
+  if (!S_ISREG (s.st_mode))
+  {
+    snprintf (err->data, err->dsize, _("%s: not a regular file"), rcfile);
+    return (-1);
+  }
+
+  if ((f = mutt_open_read (rcfile, &pid)) == NULL)
+  {
+    snprintf (err->data, err->dsize, "%s: %s", rcfile, strerror (errno));
+    return (-1);
+  }
+
+  memset (&token, 0, sizeof (token));
+  while ((linebuf = mutt_read_line (linebuf, &buflen, f, &line)) != NULL)
+  {
+    if (mutt_parse_rc_line (linebuf, &token, err) == -1)
+    {
+      mutt_error (_("Error in %s, line %d: %s"), rcfile, line, err->data);
+      if (--rc < -MAXERRS)
+        break;
+    }
+    else
+      if (rc < 0)
+        rc = -1;
+  }
+  FREE (&token.data);
+  FREE (&linebuf);
+  fclose (f);
+  if (pid != -1)
+    mutt_wait_filter (pid);
+  if (rc)
+  {
+    /* the muttrc source keyword */
+    snprintf (err->data, err->dsize, rc >= -MAXERRS ? _("source: errors in %s")
+      : _("source: reading aborted due too many errors in %s"), rcfile);
+    rc = -1;
+  }
+  return (rc);
+}
+
+#undef MAXERRS
+
+static int parse_source (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  char path[_POSIX_PATH_MAX];
+  int rc = 0;
+
+  do
+  {
+    if (mutt_extract_token (tmp, s, 0) != 0)
+    {
+      snprintf (err->data, err->dsize, _("source: error at %s"), s->dptr);
+      return (-1);
+    }
+
+    strfcpy (path, tmp->data, sizeof (path));
+    mutt_expand_path (path, sizeof (path));
+
+    rc += source_rc (path, err);
+  }
+  while (MoreArgs (s));
+
+  return ((rc < 0) ? -1 : 0);
+}
+
+/* line                command to execute
+
+   token       scratch buffer to be used by parser.  caller should free
+               token->data when finished.  the reason for this variable is
+               to avoid having to allocate and deallocate a lot of memory
+               if we are parsing many lines.  the caller can pass in the
+               memory to use, which avoids having to create new space for
+               every call to this function.
+
+   err         where to write error messages */
+int mutt_parse_rc_line (/* const */ char *line, BUFFER *token, BUFFER *err)
+{
+  int i, r = -1;
+  BUFFER expn;
+
+  memset (&expn, 0, sizeof (expn));
+  expn.data = expn.dptr = line;
+  expn.dsize = mutt_strlen (line);
+
+  *err->data = 0;
+
+  SKIPWS (expn.dptr);
+  while (*expn.dptr)
+  {
+    if (*expn.dptr == '#')
+      break; /* rest of line is a comment */
+    if (*expn.dptr == ';')
+    {
+      expn.dptr++;
+      continue;
+    }
+    mutt_extract_token (token, &expn, 0);
+    for (i = 0; Commands[i].name; i++)
+    {
+      if (!mutt_strcmp (token->data, Commands[i].name))
+      {
+       if (Commands[i].func (token, &expn, Commands[i].data, err) != 0)
+         goto finish;
+        break;
+      }
+    }
+    if (!Commands[i].name)
+    {
+      snprintf (err->data, err->dsize, _("%s: unknown command"), NONULL (token->data));
+      goto finish;
+    }
+  }
+  r = 0;
+finish:
+  if (expn.destroy)
+    FREE (&expn.data);
+  return (r);
+}
+
+
+#define NUMVARS (sizeof (MuttVars)/sizeof (MuttVars[0]))
+#define NUMCOMMANDS (sizeof (Commands)/sizeof (Commands[0]))
+/* initial string that starts completion. No telling how much crap 
+ * the user has typed so far. Allocate LONG_STRING just to be sure! */
+char User_typed [LONG_STRING] = {0}; 
+
+int  Num_matched = 0; /* Number of matches for completion */
+char Completed [STRING] = {0}; /* completed string (command or variable) */
+char *Matches[MAX(NUMVARS,NUMCOMMANDS) + 1]; /* all the matches + User_typed */
+
+/* helper function for completion.  Changes the dest buffer if
+   necessary/possible to aid completion.
+       dest == completion result gets here.
+       src == candidate for completion.
+       try == user entered data for completion.
+       len == length of dest buffer.
+*/
+static void candidate (char *dest, char *try, char *src, int len)
+{
+  int l;
+
+  if (strstr (src, try) == src)
+  {
+    Matches[Num_matched++] = src;
+    if (dest[0] == 0)
+      strfcpy (dest, src, len);
+    else
+    {
+      for (l = 0; src[l] && src[l] == dest[l]; l++);
+      dest[l] = 0;
+    }
+  }
+}
+
+int mutt_command_complete (char *buffer, size_t len, int pos, int numtabs)
+{
+  char *pt = buffer;
+  int num;
+  int spaces; /* keep track of the number of leading spaces on the line */
+
+  SKIPWS (buffer);
+  spaces = buffer - pt;
+
+  pt = buffer + pos - spaces;
+  while ((pt > buffer) && !isspace ((unsigned char) *pt))
+    pt--;
+
+  if (pt == buffer) /* complete cmd */
+  {
+    /* first TAB. Collect all the matches */
+    if (numtabs == 1)
+    {
+      Num_matched = 0;
+      strfcpy (User_typed, pt, sizeof (User_typed));
+      memset (Matches, 0, sizeof (Matches));
+      memset (Completed, 0, sizeof (Completed));
+      for (num = 0; Commands[num].name; num++)
+       candidate (Completed, User_typed, Commands[num].name, sizeof (Completed));
+      Matches[Num_matched++] = User_typed;
+
+      /* All matches are stored. Longest non-ambiguous string is ""
+       * i.e. dont change 'buffer'. Fake successful return this time */
+      if (User_typed[0] == 0)
+       return 1;
+    }
+
+    if (Completed[0] == 0 && User_typed[0])
+      return 0;
+
+     /* Num_matched will _always_ be atleast 1 since the initial
+      * user-typed string is always stored */
+    if (numtabs == 1 && Num_matched == 2)
+      snprintf(Completed, sizeof(Completed),"%s", Matches[0]);
+    else if (numtabs > 1 && Num_matched > 2)
+      /* cycle thru all the matches */
+      snprintf(Completed, sizeof(Completed), "%s", 
+              Matches[(numtabs - 2) % Num_matched]);
+
+    /* return the completed command */
+    strncpy (buffer, Completed, len - spaces);
+  }
+  else if (!mutt_strncmp (buffer, "set", 3)
+          || !mutt_strncmp (buffer, "unset", 5)
+          || !mutt_strncmp (buffer, "reset", 5)
+          || !mutt_strncmp (buffer, "toggle", 6))
+  {            /* complete variables */
+    char *prefixes[] = { "no", "inv", "?", "&", 0 };
+    
+    pt++;
+    /* loop through all the possible prefixes (no, inv, ...) */
+    if (!mutt_strncmp (buffer, "set", 3))
+    {
+      for (num = 0; prefixes[num]; num++)
+      {
+       if (!mutt_strncmp (pt, prefixes[num], mutt_strlen (prefixes[num])))
+       {
+         pt += mutt_strlen (prefixes[num]);
+         break;
+       }
+      }
+    }
+    
+    /* first TAB. Collect all the matches */
+    if (numtabs == 1)
+    {
+      Num_matched = 0;
+      strfcpy (User_typed, pt, sizeof (User_typed));
+      memset (Matches, 0, sizeof (Matches));
+      memset (Completed, 0, sizeof (Completed));
+      for (num = 0; MuttVars[num].option; num++)
+       candidate (Completed, User_typed, MuttVars[num].option, sizeof (Completed));
+      Matches[Num_matched++] = User_typed;
+
+      /* All matches are stored. Longest non-ambiguous string is ""
+       * i.e. dont change 'buffer'. Fake successful return this time */
+      if (User_typed[0] == 0)
+       return 1;
+    }
+
+    if (Completed[0] == 0 && User_typed[0])
+      return 0;
+
+    /* Num_matched will _always_ be atleast 1 since the initial
+     * user-typed string is always stored */
+    if (numtabs == 1 && Num_matched == 2)
+      snprintf(Completed, sizeof(Completed),"%s", Matches[0]);
+    else if (numtabs > 1 && Num_matched > 2)
+    /* cycle thru all the matches */
+      snprintf(Completed, sizeof(Completed), "%s", 
+              Matches[(numtabs - 2) % Num_matched]);
+
+    strncpy (pt, Completed, buffer + len - pt - spaces);
+  }
+  else if (!mutt_strncmp (buffer, "exec", 4))
+  {
+    struct binding_t *menu = km_get_table (CurrentMenu);
+
+    if (!menu && CurrentMenu != MENU_PAGER)
+      menu = OpGeneric;
+    
+    pt++;
+    /* first TAB. Collect all the matches */
+    if (numtabs == 1)
+    {
+      Num_matched = 0;
+      strfcpy (User_typed, pt, sizeof (User_typed));
+      memset (Matches, 0, sizeof (Matches));
+      memset (Completed, 0, sizeof (Completed));
+      for (num = 0; menu[num].name; num++)
+       candidate (Completed, User_typed, menu[num].name, sizeof (Completed));
+      /* try the generic menu */
+      if (Completed[0] == 0 && CurrentMenu != MENU_PAGER) 
+      {
+       menu = OpGeneric;
+       for (num = 0; menu[num].name; num++)
+         candidate (Completed, User_typed, menu[num].name, sizeof (Completed));
+      }
+      Matches[Num_matched++] = User_typed;
+
+      /* All matches are stored. Longest non-ambiguous string is ""
+       * i.e. dont change 'buffer'. Fake successful return this time */
+      if (User_typed[0] == 0)
+       return 1;
+    }
+
+    if (Completed[0] == 0 && User_typed[0])
+      return 0;
+
+    /* Num_matched will _always_ be atleast 1 since the initial
+     * user-typed string is always stored */
+    if (numtabs == 1 && Num_matched == 2)
+      snprintf(Completed, sizeof(Completed),"%s", Matches[0]);
+    else if (numtabs > 1 && Num_matched > 2)
+    /* cycle thru all the matches */
+      snprintf(Completed, sizeof(Completed), "%s", 
+              Matches[(numtabs - 2) % Num_matched]);
+
+    strncpy (pt, Completed, buffer + len - pt - spaces);
+  }
+  else
+    return 0;
+
+  return 1;
+}
+
+int mutt_var_value_complete (char *buffer, size_t len, int pos)
+{
+  char var[STRING], *pt = buffer;
+  int spaces;
+  
+  if (buffer[0] == 0)
+    return 0;
+
+  SKIPWS (buffer);
+  spaces = buffer - pt;
+
+  pt = buffer + pos - spaces;
+  while ((pt > buffer) && !isspace ((unsigned char) *pt))
+    pt--;
+  pt++; /* move past the space */
+  if (*pt == '=') /* abort if no var before the '=' */
+    return 0;
+
+  if (mutt_strncmp (buffer, "set", 3) == 0)
+  {
+    int idx;
+    strfcpy (var, pt, sizeof (var));
+    /* ignore the trailing '=' when comparing */
+    var[mutt_strlen (var) - 1] = 0;
+    if ((idx = mutt_option_index (var)) == -1) 
+      return 0; /* no such variable. */
+    else
+    {
+      char tmp [LONG_STRING], tmp2[LONG_STRING];
+      char *s, *d;
+      size_t dlen = buffer + len - pt - spaces;
+      char *vals[] = { "no", "yes", "ask-no", "ask-yes" };
+
+      tmp[0] = '\0';
+
+      if ((DTYPE(MuttVars[idx].type) == DT_STR) || 
+         (DTYPE(MuttVars[idx].type) == DT_PATH) ||
+         (DTYPE(MuttVars[idx].type) == DT_RX))
+      {
+       strfcpy (tmp, NONULL (*((char **) MuttVars[idx].data)), sizeof (tmp));
+       if (DTYPE (MuttVars[idx].type) == DT_PATH)
+         mutt_pretty_mailbox (tmp);
+      }
+      else if (DTYPE (MuttVars[idx].type) == DT_ADDR)
+      {
+       rfc822_write_address (tmp, sizeof (tmp), *((ADDRESS **) MuttVars[idx].data), 0);
+      }
+      else if (DTYPE (MuttVars[idx].type) == DT_QUAD)
+       strfcpy (tmp, vals[quadoption (MuttVars[idx].data)], sizeof (tmp));
+      else if (DTYPE (MuttVars[idx].type) == DT_NUM)
+       snprintf (tmp, sizeof (tmp), "%d", (*((short *) MuttVars[idx].data)));
+      else if (DTYPE (MuttVars[idx].type) == DT_SORT)
+      {
+       const struct mapping_t *map;
+       char *p;
+
+       switch (MuttVars[idx].type & DT_SUBTYPE_MASK)
+       {
+         case DT_SORT_ALIAS:
+           map = SortAliasMethods;
+           break;
+         case DT_SORT_BROWSER:
+           map = SortBrowserMethods;
+           break;
+         case DT_SORT_KEYS:
+            if ((WithCrypto & APPLICATION_PGP))
+              map = SortKeyMethods;
+            else
+              map = SortMethods;
+           break;
+         default:
+           map = SortMethods;
+           break;
+       }
+       p = mutt_getnamebyvalue (*((short *) MuttVars[idx].data) & SORT_MASK, map);
+       snprintf (tmp, sizeof (tmp), "%s%s%s",
+                 (*((short *) MuttVars[idx].data) & SORT_REVERSE) ? "reverse-" : "",
+                 (*((short *) MuttVars[idx].data) & SORT_LAST) ? "last-" : "",
+                 p);
+      }
+      else if (DTYPE (MuttVars[idx].type) == DT_BOOL)
+       strfcpy (tmp, option (MuttVars[idx].data) ? "yes" : "no", sizeof (tmp));
+      else
+       return 0;
+      
+      for (s = tmp, d = tmp2; *s && (d - tmp2) < sizeof (tmp2) - 2;)
+      {
+       if (*s == '\\' || *s == '"')
+         *d++ = '\\';
+       *d++ = *s++;
+      }
+      *d = '\0';
+      
+      strfcpy (tmp, pt, sizeof (tmp));
+      snprintf (pt, dlen, "%s\"%s\"", tmp, tmp2);
+         
+      return 1;
+    }
+  }
+  return 0;
+}
+
+/* Implement the -Q command line flag */
+int mutt_query_variables (LIST *queries)
+{
+  LIST *p;
+  
+  char errbuff[STRING];
+  char command[STRING];
+  
+  BUFFER err, token;
+  
+  memset (&err, 0, sizeof (err));
+  memset (&token, 0, sizeof (token));
+  
+  err.data = errbuff;
+  err.dsize = sizeof (errbuff);
+  
+  for (p = queries; p; p = p->next)
+  {
+    snprintf (command, sizeof (command), "set ?%s\n", p->data);
+    if (mutt_parse_rc_line (command, &token, &err) == -1)
+    {
+      fprintf (stderr, "%s\n", err.data);
+      FREE (&token.data);
+      return 1;
+    }
+    printf ("%s\n", err.data);
+  }
+  
+  FREE (&token.data);
+  return 0;
+}
+
+char *mutt_getnamebyvalue (int val, const struct mapping_t *map)
+{
+  int i;
+
+  for (i=0; map[i].name; i++)
+    if (map[i].value == val)
+      return (map[i].name);
+  return NULL;
+}
+
+int mutt_getvaluebyname (const char *name, const struct mapping_t *map)
+{
+  int i;
+
+  for (i = 0; map[i].name; i++)
+    if (ascii_strcasecmp (map[i].name, name) == 0)
+      return (map[i].value);
+  return (-1);
+}
+
+#ifdef DEBUG
+static void start_debug (void)
+{
+  time_t t;
+  int i;
+  char buf[_POSIX_PATH_MAX];
+  char buf2[_POSIX_PATH_MAX];
+
+  /* rotate the old debug logs */
+  for (i=3; i>=0; i--)
+  {
+    snprintf (buf, sizeof(buf), "%s/.muttdebug%d", NONULL(Homedir), i);
+    snprintf (buf2, sizeof(buf2), "%s/.muttdebug%d", NONULL(Homedir), i+1);
+    rename (buf, buf2);
+  }
+  if ((debugfile = safe_fopen(buf, "w")) != NULL)
+  {
+    t = time (0);
+    setbuf (debugfile, NULL); /* don't buffer the debugging output! */
+    fprintf (debugfile, "Mutt %s started at %s.\nDebugging at level %d.\n\n",
+            MUTT_VERSION, asctime (localtime (&t)), debuglevel);
+  }
+}
+#endif
+
+static int mutt_execute_commands (LIST *p)
+{
+  BUFFER err, token;
+  char errstr[SHORT_STRING];
+
+  memset (&err, 0, sizeof (err));
+  err.data = errstr;
+  err.dsize = sizeof (errstr);
+  memset (&token, 0, sizeof (token));
+  for (; p; p = p->next)
+  {
+    if (mutt_parse_rc_line (p->data, &token, &err) != 0)
+    {
+      fprintf (stderr, _("Error in command line: %s\n"), err.data);
+      FREE (&token.data);
+      return (-1);
+    }
+  }
+  FREE (&token.data);
+  return 0;
+}
+
+void mutt_init (int skip_sys_rc, LIST *commands)
+{
+  struct passwd *pw;
+  struct utsname utsname;
+  char *p, buffer[STRING], error[STRING];
+  int i, default_rc = 0, need_pause = 0;
+  BUFFER err;
+
+  memset (&err, 0, sizeof (err));
+  err.data = error;
+  err.dsize = sizeof (error);
+
+  /* 
+   * XXX - use something even more difficult to predict?
+   */
+  snprintf (AttachmentMarker, sizeof (AttachmentMarker),
+           "\033]9;%ld\a", (long) time (NULL));
+  
+  /* on one of the systems I use, getcwd() does not return the same prefix
+     as is listed in the passwd file */
+  if ((p = getenv ("HOME")))
+    Homedir = safe_strdup (p);
+
+  /* Get some information about the user */
+  if ((pw = getpwuid (getuid ())))
+  {
+    char rnbuf[STRING];
+
+    Username = safe_strdup (pw->pw_name);
+    if (!Homedir)
+      Homedir = safe_strdup (pw->pw_dir);
+
+    Realname = safe_strdup (mutt_gecos_name (rnbuf, sizeof (rnbuf), pw));
+    Shell = safe_strdup (pw->pw_shell);
+  }
+  else 
+  {
+    if (!Homedir)
+    {
+      mutt_endwin (NULL);
+      fputs (_("unable to determine home directory"), stderr);
+      exit (1);
+    }
+    if ((p = getenv ("USER")))
+      Username = safe_strdup (p);
+    else
+    {
+      mutt_endwin (NULL);
+      fputs (_("unable to determine username"), stderr);
+      exit (1);
+    }
+    Shell = safe_strdup ((p = getenv ("SHELL")) ? p : "/bin/sh");
+  }
+
+#ifdef DEBUG
+  /* Start up debugging mode if requested */
+  if (debuglevel > 0)
+    start_debug ();
+#endif
+
+  /* And about the host... */
+  uname (&utsname);
+  /* some systems report the FQDN instead of just the hostname */
+  if ((p = strchr (utsname.nodename, '.')))
+  {
+    Hostname = mutt_substrdup (utsname.nodename, p);
+    p++;
+    strfcpy (buffer, p, sizeof (buffer)); /* save the domain for below */
+  }
+  else
+    Hostname = safe_strdup (utsname.nodename);
+
+#ifndef DOMAIN
+#define DOMAIN buffer
+  if (!p && getdnsdomainname (buffer, sizeof (buffer)) == -1)
+    Fqdn = safe_strdup ("@");
+  else
+#endif /* DOMAIN */
+    if (*DOMAIN != '@')
+  {
+    Fqdn = safe_malloc (mutt_strlen (DOMAIN) + mutt_strlen (Hostname) + 2);
+    sprintf (Fqdn, "%s.%s", NONULL(Hostname), DOMAIN); /* __SPRINTF_CHECKED__ */
+  }
+  else
+    Fqdn = safe_strdup(NONULL(Hostname));
+
+#ifdef USE_NNTP
+  {
+    FILE *f;
+    char *i;
+
+    if ((f = safe_fopen (SYSCONFDIR "/nntpserver", "r")))
+    {
+      buffer[0] = '\0';
+      fgets (buffer, sizeof (buffer), f);
+      p = &buffer;
+      SKIPWS (p);
+      i = p;
+      while (*i && (*i != ' ') && (*i != '\t') && (*i != '\r') && (*i != '\n')) i++;
+      *i = '\0';
+      NewsServer = safe_strdup (p);
+      fclose (f);
+    }
+  }
+  if ((p = getenv ("NNTPSERVER")))
+    NewsServer = safe_strdup (p);
+#endif
+
+  if ((p = getenv ("MAIL")))
+    Spoolfile = safe_strdup (p);
+  else if ((p = getenv ("MAILDIR")))
+    Spoolfile = safe_strdup (p);
+  else
+  {
+#ifdef HOMESPOOL
+    mutt_concat_path (buffer, NONULL (Homedir), MAILPATH, sizeof (buffer));
+#else
+    mutt_concat_path (buffer, MAILPATH, NONULL(Username), sizeof (buffer));
+#endif
+    Spoolfile = safe_strdup (buffer);
+  }
+
+  if ((p = getenv ("MAILCAPS")))
+    MailcapPath = safe_strdup (p);
+  else
+  {
+    /* Default search path from RFC1524 */
+    MailcapPath = safe_strdup ("~/.mailcap:" PKGDATADIR "/mailcap:" SYSCONFDIR "/mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap");
+  }
+
+  Tempdir = safe_strdup ((p = getenv ("TMPDIR")) ? p : "/tmp");
+
+  p = getenv ("VISUAL");
+  if (!p)
+  {
+    p = getenv ("EDITOR");
+    if (!p)
+      p = "vi";
+  }
+  Editor = safe_strdup (p);
+  Visual = safe_strdup (p);
+
+  if ((p = getenv ("REPLYTO")) != NULL)
+  {
+    BUFFER buf, token;
+
+    snprintf (buffer, sizeof (buffer), "Reply-To: %s", p);
+
+    memset (&buf, 0, sizeof (buf));
+    buf.data = buf.dptr = buffer;
+    buf.dsize = mutt_strlen (buffer);
+
+    memset (&token, 0, sizeof (token));
+    parse_my_hdr (&token, &buf, 0, &err);
+    FREE (&token.data);
+  }
+
+  if ((p = getenv ("EMAIL")) != NULL)
+    From = rfc822_parse_adrlist (NULL, p);
+  
+  mutt_set_langinfo_charset ();
+  mutt_set_charset (Charset);
+  
+  
+  /* Set standard defaults */
+  for (i = 0; MuttVars[i].option; i++)
+  {
+    mutt_set_default (&MuttVars[i]);
+    mutt_restore_default (&MuttVars[i]);
+  }
+
+  CurrentMenu = MENU_MAIN;
+
+
+#ifndef LOCALES_HACK
+  /* Do we have a locale definition? */
+  if (((p = getenv ("LC_ALL")) != NULL && p[0]) ||
+      ((p = getenv ("LANG")) != NULL && p[0]) ||
+      ((p = getenv ("LC_CTYPE")) != NULL && p[0]))
+    set_option (OPTLOCALES);
+#endif
+
+#ifdef HAVE_GETSID
+  /* Unset suspend by default if we're the session leader */
+  if (getsid(0) == getpid())
+    unset_option (OPTSUSPEND);
+#endif
+
+  mutt_init_history ();
+
+  
+  
+  
+  /*
+   * 
+   *                      BIG FAT WARNING
+   * 
+   * When changing the code which looks for a configuration file,
+   * please also change the corresponding code in muttbug.sh.in.
+   * 
+   * 
+   */
+  
+  
+  
+  
+  if (!Muttrc)
+  {
+    snprintf (buffer, sizeof(buffer), "%s/.muttrc-%s", NONULL(Homedir), MUTT_VERSION);
+    if (access(buffer, F_OK) == -1)
+      snprintf (buffer, sizeof(buffer), "%s/.muttrc", NONULL(Homedir));
+    if (access(buffer, F_OK) == -1)
+      snprintf (buffer, sizeof (buffer), "%s/.mutt/muttrc-%s", NONULL(Homedir), MUTT_VERSION);
+    if (access(buffer, F_OK) == -1)
+      snprintf (buffer, sizeof (buffer), "%s/.mutt/muttrc", NONULL(Homedir));
+    
+    default_rc = 1;
+    Muttrc = safe_strdup (buffer);
+  }
+  else
+  {
+    strfcpy (buffer, Muttrc, sizeof (buffer));
+    FREE (&Muttrc);
+    mutt_expand_path (buffer, sizeof (buffer));
+    Muttrc = safe_strdup (buffer);
+  }
+  FREE (&AliasFile);
+  AliasFile = safe_strdup (NONULL(Muttrc));
+
+  /* Process the global rc file if it exists and the user hasn't explicity
+     requested not to via "-n".  */
+  if (!skip_sys_rc)
+  {
+    snprintf (buffer, sizeof(buffer), "%s/Muttrc-%s", SYSCONFDIR, MUTT_VERSION);
+    if (access (buffer, F_OK) == -1)
+      snprintf (buffer, sizeof(buffer), "%s/Muttrc", SYSCONFDIR);
+    if (access (buffer, F_OK) == -1)
+      snprintf (buffer, sizeof (buffer), "%s/Muttrc-%s", PKGDATADIR, MUTT_VERSION);
+    if (access (buffer, F_OK) == -1)
+      snprintf (buffer, sizeof (buffer), "%s/Muttrc", PKGDATADIR);
+    if (access (buffer, F_OK) != -1)
+    {
+      if (source_rc (buffer, &err) != 0)
+      {
+       fputs (err.data, stderr);
+       fputc ('\n', stderr);
+       need_pause = 1;
+      }
+    }
+  }
+
+  /* Read the user's initialization file.  */
+  if (access (Muttrc, F_OK) != -1)
+  {
+    if (!option (OPTNOCURSES))
+      endwin ();
+    if (source_rc (Muttrc, &err) != 0)
+    {
+      fputs (err.data, stderr);
+      fputc ('\n', stderr);
+      need_pause = 1;
+    }
+  }
+  else if (!default_rc)
+  {
+    /* file specified by -F does not exist */
+    snprintf (buffer, sizeof (buffer), "%s: %s", Muttrc, strerror (errno));
+    mutt_endwin (buffer);
+    exit (1);
+  }
+
+  if (mutt_execute_commands (commands) != 0)
+    need_pause = 1;
+
+  if (need_pause && !option (OPTNOCURSES))
+  {
+    if (mutt_any_key_to_continue (NULL) == -1)
+      mutt_exit(1);
+  }
+
+#if 0
+  set_option (OPTWEED); /* turn weeding on by default */
+#endif
+}
+
+int mutt_get_hook_type (const char *name)
+{
+  struct command_t *c;
+
+  for (c = Commands ; c->name ; c++)
+    if (c->func == mutt_parse_hook && ascii_strcasecmp (c->name, name) == 0)
+      return c->data;
+  return 0;
+}
diff --git a/init.h b/init.h
new file mode 100644 (file)
index 0000000..4af0d27
--- /dev/null
+++ b/init.h
@@ -0,0 +1,3066 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#ifdef _MAKEDOC
+# include "config.h"
+#else
+# include "sort.h"
+#endif
+
+#include "buffy.h"
+
+#ifndef _MAKEDOC
+#define DT_MASK                0x0f
+#define DT_BOOL                1 /* boolean option */
+#define DT_NUM         2 /* a number */
+#define DT_STR         3 /* a string */
+#define DT_PATH                4 /* a pathname */
+#define DT_QUAD                5 /* quad-option (yes/no/ask-yes/ask-no) */
+#define DT_SORT                6 /* sorting methods */
+#define DT_RX          7 /* regular expressions */
+#define DT_MAGIC       8 /* mailbox type */
+#define DT_SYN         9 /* synonym for another variable */
+#define DT_ADDR               10 /* e-mail address */
+
+#define DTYPE(x) ((x) & DT_MASK)
+
+/* subtypes */
+#define DT_SUBTYPE_MASK        0xf0
+#define DT_SORT_ALIAS  0x10
+#define DT_SORT_BROWSER 0x20
+#define DT_SORT_KEYS   0x40
+#define DT_SORT_AUX    0x80
+
+/* flags to parse_set() */
+#define M_SET_INV      (1<<0)  /* default is to invert all vars */
+#define M_SET_UNSET    (1<<1)  /* default is to unset all vars */
+#define M_SET_RESET    (1<<2)  /* default is to reset all vars to default */
+
+/* forced redraw/resort types */
+#define R_NONE         0
+#define R_INDEX                (1<<0)
+#define R_PAGER                (1<<1)
+#define R_RESORT       (1<<2)  /* resort the mailbox */
+#define R_RESORT_SUB   (1<<3)  /* resort subthreads */
+#define R_RESORT_INIT  (1<<4)  /* resort from scratch */
+#define R_TREE         (1<<5)  /* redraw the thread tree */
+#define R_BOTH         (R_INDEX | R_PAGER)
+#define R_RESORT_BOTH  (R_RESORT | R_RESORT_SUB)
+
+struct option_t
+{
+  char *option;
+  short type;
+  short flags;
+  unsigned long data;
+  unsigned long init; /* initial value */
+};
+
+#define UL (unsigned long)
+
+#endif /* _MAKEDOC */
+
+#ifndef ISPELL
+#define ISPELL "ispell"
+#endif
+
+/* build complete documentation */
+
+#ifdef _MAKEDOC
+# ifndef USE_IMAP
+#  define USE_IMAP
+# endif
+# ifndef MIXMASTER
+#  define MIXMASTER "mixmaster"
+# endif
+# ifndef USE_POP
+#  define USE_POP
+# endif
+# ifndef USE_SSL
+#  define USE_SSL
+# endif
+# ifndef USE_SOCKET
+#  define USE_SOCKET
+# endif
+# ifndef USE_LIBESMTP
+#  define USE_LIBESMTP
+# endif
+#endif
+
+struct option_t MuttVars[] = {
+  /*++*/
+  { "abort_nosubject", DT_QUAD, R_NONE, OPT_SUBJECT, M_ASKYES },
+  /*
+  ** .pp
+  ** If set to \fIyes\fP, when composing messages and no subject is given
+  ** at the subject prompt, composition will be aborted.  If set to
+  ** \fIno\fP, composing messages with no subject given at the subject
+  ** prompt will never be aborted.
+  */
+  { "abort_unmodified",        DT_QUAD, R_NONE, OPT_ABORT, M_YES },
+  /*
+  ** .pp
+  ** If set to \fIyes\fP, composition will automatically abort after
+  ** editing the message body if no changes are made to the file (this
+  ** check only happens after the \fIfirst\fP edit of the file).  When set
+  ** to \fIno\fP, composition will never be aborted.
+  */
+  { "alias_file",      DT_PATH, R_NONE, UL &AliasFile, UL "~/.muttrc" },
+  /*
+  ** .pp
+  ** The default file in which to save aliases created by the 
+  ** ``$create-alias'' function.
+  ** .pp
+  ** \fBNote:\fP Mutt will not automatically source this file; you must
+  ** explicitly use the ``$source'' command for it to be executed.
+  */
+  { "alias_format",    DT_STR,  R_NONE, UL &AliasFmt, UL "%4n %2f %t %-10a   %r" },
+  /*
+  ** .pp
+  ** Specifies the format of the data displayed for the `alias' menu.  The
+  ** following printf(3)-style sequences are available:
+  ** .pp
+  ** .dl
+  ** .dt %a .dd alias name
+  ** .dt %f .dd flags - currently, a "d" for an alias marked for deletion
+  ** .dt %n .dd index number
+  ** .dt %r .dd address which alias expands to
+  ** .dt %t .dd character which indicates if the alias is tagged for inclusion
+  ** .de
+  */
+  { "allow_8bit",      DT_BOOL, R_NONE, OPTALLOW8BIT, 1 },
+  /*
+  ** .pp
+  ** Controls whether 8-bit data is converted to 7-bit using either Quoted-
+  ** Printable or Base64 encoding when sending mail.
+  */
+  { "allow_ansi",      DT_BOOL, R_NONE, OPTALLOWANSI, 0 },
+  /*
+  ** .pp
+  ** Controls whether ANSI color codes in messages (and color tags in 
+  ** rich text messages) are to be interpreted.
+  ** Messages containing these codes are rare, but if this option is set,
+  ** their text will be colored accordingly. Note that this may override
+  ** your color choices, and even present a security problem, since a
+  ** message could include a line like "[-- PGP output follows ..." and
+  ** give it the same color as your attachment color.
+  */
+  { "arrow_cursor",    DT_BOOL, R_BOTH, OPTARROWCURSOR, 0 },
+  /*
+  ** .pp
+  ** When set, an arrow (``->'') will be used to indicate the current entry
+  ** in menus instead of highlighting the whole line.  On slow network or modem
+  ** links this will make response faster because there is less that has to
+  ** be redrawn on the screen when moving to the next or previous entries
+  ** in the menu.
+  */
+  { "ascii_chars",     DT_BOOL, R_BOTH, OPTASCIICHARS, 0 },
+  /*
+  ** .pp
+  ** If set, Mutt will use plain ASCII characters when displaying thread
+  ** and attachment trees, instead of the default \fIACS\fP characters.
+  */
+  { "askbcc",          DT_BOOL, R_NONE, OPTASKBCC, 0 },
+  /*
+  ** .pp
+  ** If set, Mutt will prompt you for blind-carbon-copy (Bcc) recipients
+  ** before editing an outgoing message.
+  */
+  { "askcc",           DT_BOOL, R_NONE, OPTASKCC, 0 },
+  /*
+  ** .pp
+  ** If set, Mutt will prompt you for carbon-copy (Cc) recipients before
+  ** editing the body of an outgoing message.
+  */  
+#ifdef USE_NNTP
+  { "ask_follow_up",   DT_BOOL, R_NONE, OPTASKFOLLOWUP, 0 },
+  /*
+  ** .pp
+  ** If set, Mutt will prompt you for follow-up groups before editing
+  ** the body of an outgoing message.
+  */  
+  { "ask_x_comment_to",        DT_BOOL, R_NONE, OPTASKXCOMMENTTO, 0 },
+  /*
+  ** .pp
+  ** If set, Mutt will prompt you for x-comment-to field before editing
+  ** the body of an outgoing message.
+  */  
+#endif
+  { "attach_format",   DT_STR,  R_NONE, UL &AttachFormat, UL "%u%D%I %t%4n %T%.40d%> [%.7m/%.10M, %.6e%?C?, %C?, %s] " },
+  /*
+  ** .pp
+  ** This variable describes the format of the `attachment' menu.  The
+  ** following printf-style sequences are understood:
+  ** .pp
+  ** .dl
+  ** .dt %C  .dd charset
+  ** .dt %c  .dd reqiures charset conversion (n or c)
+  ** .dt %D  .dd deleted flag
+  ** .dt %d  .dd description
+  ** .dt %e  .dd MIME content-transfer-encoding
+  ** .dt %f  .dd filename
+  ** .dt %I  .dd disposition (I=inline, A=attachment)
+  ** .dt %m  .dd major MIME type
+  ** .dt %M  .dd MIME subtype
+  ** .dt %n  .dd attachment number
+  ** .dt %s  .dd size
+  ** .dt %t  .dd tagged flag
+  ** .dt %T  .dd graphic tree characters
+  ** .dt %u  .dd unlink (=to delete) flag
+  ** .dt %>X .dd right justify the rest of the string and pad with character "X"
+  ** .dt %|X .dd pad to the end of the line with character "X"
+  ** .de
+  */
+  { "attach_sep",      DT_STR,  R_NONE, UL &AttachSep, UL "\n" },
+  /*
+  ** .pp
+  ** The separator to add between attachments when operating (saving,
+  ** printing, piping, etc) on a list of tagged attachments.
+  */
+  { "attach_split",    DT_BOOL, R_NONE, OPTATTACHSPLIT, 1 },
+  /*
+  ** .pp
+  ** If this variable is unset, when operating (saving, printing, piping,
+  ** etc) on a list of tagged attachments, Mutt will concatenate the
+  ** attachments and will operate on them as a single attachment. The
+  ** ``$$attach_sep'' separator is added after each attachment. When set,
+  ** Mutt will operate on the attachments one by one.
+  */
+  { "attribution",     DT_STR,  R_NONE, UL &Attribution, UL "On %d, %n wrote:" },
+  /*
+  ** .pp
+  ** This is the string that will precede a message which has been included
+  ** in a reply.  For a full listing of defined printf()-like sequences see
+  ** the section on ``$$index_format''.
+  */
+  { "autoedit",                DT_BOOL, R_NONE, OPTAUTOEDIT, 0 },
+  /*
+  ** .pp
+  ** When set along with ``$$edit_headers'', Mutt will skip the initial
+  ** send-menu and allow you to immediately begin editing the body of your
+  ** message.  The send-menu may still be accessed once you have finished
+  ** editing the body of your message.
+  ** .pp
+  ** Also see ``$$fast_reply''.
+  */
+  { "auto_tag",                DT_BOOL, R_NONE, OPTAUTOTAG, 0 },
+  /*
+  ** .pp
+  ** When set, functions in the \fIindex\fP menu which affect a message
+  ** will be applied to all tagged messages (if there are any).  When
+  ** unset, you must first use the tag-prefix function (default: ";") to
+  ** make the next function apply to all tagged messages.
+  */
+  { "beep",            DT_BOOL, R_NONE, OPTBEEP, 1 },
+  /*
+  ** .pp
+  ** When this variable is set, mutt will beep when an error occurs.
+  */
+  { "beep_new",                DT_BOOL, R_NONE, OPTBEEPNEW, 0 },
+  /*
+  ** .pp
+  ** When this variable is set, mutt will beep whenever it prints a message
+  ** notifying you of new mail.  This is independent of the setting of the
+  ** ``$$beep'' variable.
+  */
+  { "bounce",  DT_QUAD, R_NONE, OPT_BOUNCE, M_ASKYES },
+  /*
+  ** .pp
+  ** Controls whether you will be asked to confirm bouncing messages.
+  ** If set to \fIyes\fP you don't get asked if you want to bounce a
+  ** message. Setting this variable to \fIno\fP is not generally useful,
+  ** and thus not recommended, because you are unable to bounce messages.
+  */
+  { "bounce_delivered", DT_BOOL, R_NONE, OPTBOUNCEDELIVERED, 1 },
+  /*
+  ** .pp
+  ** When this variable is set, mutt will include Delivered-To headers when
+  ** bouncing messages.  Postfix users may wish to unset this variable.
+  */
+#ifdef USE_NNTP
+  { "catchup_newsgroup", DT_QUAD, R_NONE, OPT_CATCHUP, M_ASKYES },
+  /*
+  ** .pp
+  ** If this variable is \fIset\fP, Mutt will mark all articles in newsgroup
+  ** as read when you quit the newsgroup (catchup newsgroup).
+  */
+#endif
+  { "charset",         DT_STR,  R_NONE, UL &Charset, UL 0 },
+  /*
+  ** .pp
+  ** Character set your terminal uses to display and enter textual data.
+  */
+  { "check_new",       DT_BOOL, R_NONE, OPTCHECKNEW, 1 },
+  /*
+  ** .pp
+  ** \fBNote:\fP this option only affects \fImaildir\fP and \fIMH\fP style
+  ** mailboxes.
+  ** .pp
+  ** When \fIset\fP, Mutt will check for new mail delivered while the
+  ** mailbox is open.  Especially with MH mailboxes, this operation can
+  ** take quite some time since it involves scanning the directory and
+  ** checking each file to see if it has already been looked at.  If
+  ** \fIcheck_new\fP is \fIunset\fP, no check for new mail is performed
+  ** while the mailbox is open.
+  */
+  { "collapse_unread", DT_BOOL, R_NONE, OPTCOLLAPSEUNREAD, 1 },
+  /*
+  ** .pp
+  ** When \fIunset\fP, Mutt will not collapse a thread if it contains any
+  ** unread messages.
+  */
+  { "uncollapse_jump",         DT_BOOL, R_NONE, OPTUNCOLLAPSEJUMP, 0 },
+  /*
+  ** .pp
+  ** When \fIset\fP, Mutt will jump to the next unread message, if any,
+  ** when the current thread is \fIun\fPcollapsed.
+  */
+  { "compose_format",  DT_STR,  R_BOTH, UL &ComposeFormat, UL "-- Mutt: Compose  [Approx. msg size: %l   Atts: %a]%>-" },
+  /*
+  ** .pp
+  ** Controls the format of the status line displayed in the \fCompose\fP
+  ** menu.  This string is similar to ``$$status_format'', but has its own
+  ** set of printf()-like sequences:
+  ** .pp
+  ** .dl
+  ** .dt %a .dd total number of attachments 
+  ** .dt %h .dd local hostname
+  ** .dt %l .dd approximate size (in bytes) of the current message
+  ** .dt %v .dd Mutt version string
+  ** .de
+  ** .pp
+  ** See the text describing the ``$$status_format'' option for more 
+  ** information on how to set ``$$compose_format''.
+  */
+  { "confirmappend",   DT_BOOL, R_NONE, OPTCONFIRMAPPEND, 1 },
+  /*
+  ** .pp
+  ** When set, Mutt will prompt for confirmation when appending messages to
+  ** an existing mailbox.
+  */
+  { "confirmcreate",   DT_BOOL, R_NONE, OPTCONFIRMCREATE, 1 },
+  /*
+  ** .pp
+  ** When set, Mutt will prompt for confirmation when saving messages to a
+  ** mailbox which does not yet exist before creating it.
+  */
+  { "connect_timeout", DT_NUM, R_NONE, UL &ConnectTimeout, 30 },
+  /*
+  ** .pp
+  ** Causes Mutt to timeout a network connection (for IMAP or POP) after this
+  ** many seconds if the connection is not able to be established.  A negative
+  ** value causes Mutt to wait indefinitely for the connection to succeed.
+  */
+  { "content_type",    DT_STR, R_NONE, UL &ContentType, UL "text/plain" },
+  /*
+  ** .pp
+  ** Sets the default Content-Type for the body of newly composed messages.
+  */
+  { "copy",            DT_QUAD, R_NONE, OPT_COPY, M_YES },
+  /*
+  ** .pp
+  ** This variable controls whether or not copies of your outgoing messages
+  ** will be saved for later references.  Also see ``$$record'',
+  ** ``$$save_name'', ``$$force_name'' and ``$fcc-hook''.
+  */
+  { "crypt_autopgp",   DT_BOOL, R_NONE, OPTCRYPTAUTOPGP, 1 },
+  /*
+  ** .pp
+  ** This variable controls whether or not mutt may automatically enable
+  ** PGP encryption/signing for messages.  See also ``$$crypt_autoencrypt'',
+  ** ``$$crypt_replyencrypt'',
+  ** ``$$crypt_autosign'', ``$$crypt_replysign'' and ``$$smime_is_default''.
+  */
+  { "crypt_autosmime", DT_BOOL, R_NONE, OPTCRYPTAUTOSMIME, 1 },
+  /*
+  ** .pp
+  ** This variable controls whether or not mutt may automatically enable
+  ** S/MIME encryption/signing for messages. See also ``$$crypt_autoencrypt'',
+  ** ``$$crypt_replyencrypt'',
+  ** ``$$crypt_autosign'', ``$$crypt_replysign'' and ``$$smime_is_default''.
+  */
+  { "date_format",     DT_STR,  R_BOTH, UL &DateFmt, UL "!%a, %b %d, %Y at %I:%M:%S%p %Z" },
+  /*
+  ** .pp
+  ** This variable controls the format of the date printed by the ``%d''
+  ** sequence in ``$$index_format''.  This is passed to the \fIstrftime\fP
+  ** call to process the date. See the man page for \fIstrftime(3)\fP for
+  ** the proper syntax.
+  ** .pp
+  ** Unless the first character in the string is a bang (``!''), the month
+  ** and week day names are expanded according to the locale specified in
+  ** the variable ``$$locale''. If the first character in the string is a
+  ** bang, the bang is discarded, and the month and week day names in the
+  ** rest of the string are expanded in the \fIC\fP locale (that is in US
+  ** English).
+  */  
+  { "default_hook",    DT_STR,  R_NONE, UL &DefaultHook, UL "~f %s !~P | (~P ~C %s)" },
+  /*
+  ** .pp
+  ** This variable controls how send-hooks, message-hooks, save-hooks,
+  ** and fcc-hooks will
+  ** be interpreted if they are specified with only a simple regexp,
+  ** instead of a matching pattern.  The hooks are expanded when they are
+  ** declared, so a hook will be interpreted according to the value of this
+  ** variable at the time the hook is declared.  The default value matches
+  ** if the message is either from a user matching the regular expression
+  ** given, or if it is from you (if the from address matches
+  ** ``alternates'') and is to or cc'ed to a user matching the given
+  ** regular expression.
+  */
+  { "delete",          DT_QUAD, R_NONE, OPT_DELETE, M_ASKYES },
+  /*
+  ** .pp
+  ** Controls whether or not messages are really deleted when closing or
+  ** synchronizing a mailbox.  If set to \fIyes\fP, messages marked for
+  ** deleting will automatically be purged without prompting.  If set to
+  ** \fIno\fP, messages marked for deletion will be kept in the mailbox.
+  */
+  { "delete_untag",    DT_BOOL, R_NONE, OPTDELETEUNTAG, 1 },
+  /*
+  ** .pp
+  ** If this option is \fIset\fP, mutt will untag messages when marking them
+  ** for deletion.  This applies when you either explicitly delete a message,
+  ** or when you save it to another folder.
+  */
+  { "digest_collapse", DT_BOOL, R_NONE, OPTDIGESTCOLLAPSE, 1},
+  /*
+  ** .pp
+  ** If this option is \fIset\fP, mutt's revattach menu will not show the subparts of
+  ** individual messages in a digest.  To see these subparts, press 'v' on that menu.
+  */
+  { "display_filter",  DT_PATH, R_PAGER, UL &DisplayFilter, UL "" },
+  /*
+  ** .pp
+  ** When set, specifies a command used to filter messages.  When a message
+  ** is viewed it is passed as standard input to $$display_filter, and the
+  ** filtered message is read from the standard output.
+  */
+#if defined(DL_STANDALONE) && defined(USE_DOTLOCK)
+  { "dotlock_program",  DT_PATH, R_NONE, UL &MuttDotlock, UL BINDIR "/mutt_dotlock" },
+  /*
+  ** .pp
+  ** Contains the path of the mutt_dotlock (8) binary to be used by
+  ** mutt.
+  */
+#endif
+  { "dsn_notify",      DT_STR,  R_NONE, UL &DsnNotify, UL "" },
+  /*
+  ** .pp
+  ** \fBNote:\fP you should not enable this unless you are using Sendmail
+  ** 8.8.x or greater.
+  ** .pp
+  ** This variable sets the request for when notification is returned.  The
+  ** string consists of a comma separated list (no spaces!) of one or more
+  ** of the following: \fInever\fP, to never request notification,
+  ** \fIfailure\fP, to request notification on transmission failure,
+  ** \fIdelay\fP, to be notified of message delays, \fIsuccess\fP, to be
+  ** notified of successful transmission.
+  ** .pp
+  ** Example: set dsn_notify="failure,delay"
+  */
+  { "dsn_return",      DT_STR,  R_NONE, UL &DsnReturn, UL "" },
+  /*
+  ** .pp
+  ** \fBNote:\fP you should not enable this unless you are using Sendmail
+  ** 8.8.x or greater.
+  ** .pp
+  ** This variable controls how much of your message is returned in DSN
+  ** messages.  It may be set to either \fIhdrs\fP to return just the
+  ** message header, or \fIfull\fP to return the full message.
+  ** .pp
+  ** Example: set dsn_return=hdrs
+  */
+  { "duplicate_threads",       DT_BOOL, R_RESORT|R_RESORT_INIT|R_INDEX, OPTDUPTHREADS, 1 },
+  /*
+  ** .pp
+  ** This variable controls whether mutt, when sorting by threads, threads
+  ** messages with the same message-id together.  If it is set, it will indicate
+  ** that it thinks they are duplicates of each other with an equals sign
+  ** in the thread diagram.
+  */
+  { "edit_headers",    DT_BOOL, R_NONE, OPTEDITHDRS, 0 },
+  /*
+  ** .pp
+  ** This option allows you to edit the header of your outgoing messages
+  ** along with the body of your message.
+  */
+  { "edit_hdrs",       DT_SYN,  R_NONE, UL "edit_headers", 0 },
+  /*
+  */  
+  { "editor",          DT_PATH, R_NONE, UL &Editor, 0 },
+  /*
+  ** .pp
+  ** This variable specifies which editor is used by mutt.
+  ** It defaults to the value of the VISUAL, or EDITOR, environment
+  ** variable, or to the string "vi" if neither of those are set.
+  */
+  { "encode_from",     DT_BOOL, R_NONE, OPTENCODEFROM, 0 },
+  /*
+  ** .pp
+  ** When \fIset\fP, mutt will quoted-printable encode messages when
+  ** they contain the string "From " in the beginning of a line.
+  ** Useful to avoid the tampering certain mail delivery and transport
+  ** agents tend to do with messages.
+  */
+  { "envelope_from",   DT_BOOL, R_NONE, OPTENVFROM, 0 },
+  /*
+  ** .pp
+  ** When \fIset\fP, mutt will try to derive the message's \fIenvelope\fP
+  ** sender from the "From:" header.  Note that this information is passed 
+  ** to sendmail command using the "-f" command line switch, so don't set this
+  ** option if you are using that switch in $$sendmail yourself,
+  ** or if the sendmail on your machine doesn't support that command
+  ** line switch.
+  */
+  { "escape",          DT_STR,  R_NONE, UL &EscChar, UL "~" },
+  /*
+  ** .pp
+  ** Escape character to use for functions in the builtin editor.
+  */
+  { "fast_reply",      DT_BOOL, R_NONE, OPTFASTREPLY, 0 },
+  /*
+  ** .pp
+  ** When set, the initial prompt for recipients and subject are skipped
+  ** when replying to messages, and the initial prompt for subject is
+  ** skipped when forwarding messages.
+  ** .pp
+  ** \fBNote:\fP this variable has no effect when the ``$$autoedit''
+  ** variable is set.
+  */
+  { "fcc_attach",      DT_BOOL, R_NONE, OPTFCCATTACH, 1 },
+  /*
+  ** .pp
+  ** This variable controls whether or not attachments on outgoing messages
+  ** are saved along with the main body of your message.
+  */
+  { "fcc_clear",       DT_BOOL, R_NONE, OPTFCCCLEAR, 0 },
+  /*
+  ** .pp
+  ** When this variable is set, FCCs will be stored unencrypted and
+  ** unsigned, even when the actual message is encrypted and/or
+  ** signed.
+  ** (PGP only)
+  */
+  { "folder",          DT_PATH, R_NONE, UL &Maildir, UL "~/Mail" },
+  /*
+  ** .pp
+  ** Specifies the default location of your mailboxes.  A `+' or `=' at the
+  ** beginning of a pathname will be expanded to the value of this
+  ** variable.  Note that if you change this variable from the default
+  ** value you need to make sure that the assignment occurs \fIbefore\fP
+  ** you use `+' or `=' for any other variables since expansion takes place
+  ** during the `set' command.
+  */
+  { "folder_format",   DT_STR,  R_INDEX, UL &FolderFormat, UL "%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f" },
+  /*
+  ** .pp
+  ** This variable allows you to customize the file browser display to your
+  ** personal taste.  This string is similar to ``$$index_format'', but has
+  ** its own set of printf()-like sequences:
+  ** .pp
+  ** .dl
+  ** .dt %C  .dd current file number
+  ** .dt %d  .dd date/time folder was last modified
+  ** .dt %f  .dd filename
+  ** .dt %F  .dd file permissions
+  ** .dt %g  .dd group name (or numeric gid, if missing)
+  ** .dt %l  .dd number of hard links
+  ** .dt %N  .dd N if folder has new mail, blank otherwise
+  ** .dt %s  .dd size in bytes
+  ** .dt %t  .dd * if the file is tagged, blank otherwise
+  ** .dt %u  .dd owner name (or numeric uid, if missing)
+  ** .dt %>X .dd right justify the rest of the string and pad with character "X"
+  ** .dt %|X .dd pad to the end of the line with character "X"
+  ** .de
+  */
+  { "followup_to",     DT_BOOL, R_NONE, OPTFOLLOWUPTO, 1 },
+  /*
+  ** .pp
+  ** Controls whether or not the \fIMail-Followup-To\fP header field is
+  ** generated when sending mail.  When \fIset\fP, Mutt will generate this
+  ** field when you are replying to a known mailing list, specified with
+  ** the ``subscribe'' or ``$lists'' commands.
+  ** .pp
+  ** This field has two purposes.  First, preventing you from
+  ** receiving duplicate copies of replies to messages which you send
+  ** to mailing lists, and second, ensuring that you do get a reply
+  ** separately for any messages sent to known lists to which you are
+  ** not subscribed.  The header will contain only the list's address
+  ** for subscribed lists, and both the list address and your own
+  ** email address for unsubscribed lists.  Without this header, a
+  ** group reply to your message sent to a subscribed list will be
+  ** sent to both the list and your address, resulting in two copies
+  ** of the same email for you.
+  */
+#ifdef USE_NNTP
+  { "followup_to_poster", DT_QUAD, R_NONE, OPT_FOLLOWUPTOPOSTER, M_ASKYES },
+  /*
+  ** .pp
+  ** If this variable is \fIset\fP and the keyword "poster" is present in
+  ** \fIFollowup-To\fP header, follow-up to newsgroup function is not
+  ** permitted.  The message will be mailed to the submitter of the
+  ** message via mail.
+  */
+#endif
+  { "force_name",      DT_BOOL, R_NONE, OPTFORCENAME, 0 },
+  /*
+  ** .pp
+  ** This variable is similar to ``$$save_name'', except that Mutt will
+  ** store a copy of your outgoing message by the username of the address
+  ** you are sending to even if that mailbox does not exist.
+  ** .pp
+  ** Also see the ``$$record'' variable.
+  */
+  { "forward_decode",  DT_BOOL, R_NONE, OPTFORWDECODE, 1 },
+  /*
+  ** .pp
+  ** Controls the decoding of complex MIME messages into text/plain when
+  ** forwarding a message.  The message header is also RFC2047 decoded.
+  ** This variable is only used, if ``$$mime_forward'' is \fIunset\fP,
+  ** otherwise ``$$mime_forward_decode'' is used instead.
+  */
+  { "forw_decode",     DT_SYN,  R_NONE, UL "forward_decode", 0 },
+  /*
+  */
+  { "forward_edit",    DT_QUAD, R_NONE, OPT_FORWEDIT, M_YES },
+  /*
+  ** .pp
+  ** This quadoption controls whether or not the user is automatically
+  ** placed in the editor when forwarding messages.  For those who always want
+  ** to forward with no modification, use a setting of ``no''.
+  */
+  { "forward_format",  DT_STR,  R_NONE, UL &ForwFmt, UL "[%a: %s]" },
+  /*
+  ** .pp
+  ** This variable controls the default subject when forwarding a message.
+  ** It uses the same format sequences as the ``$$index_format'' variable.
+  */
+  { "forw_format",     DT_SYN,  R_NONE, UL "forward_format", 0 },  
+  /*
+  */
+  { "forward_quote",   DT_BOOL, R_NONE, OPTFORWQUOTE, 0 },
+  /*
+  ** .pp
+  ** When \fIset\fP forwarded messages included in the main body of the
+  ** message (when ``$$mime_forward'' is \fIunset\fP) will be quoted using
+  ** ``$$indent_string''.
+  */
+  { "forw_quote",      DT_SYN,  R_NONE, UL "forward_quote", 0 },
+  /*
+  */
+  { "from",            DT_ADDR, R_NONE, UL &From, UL 0 },
+  /*
+  ** .pp
+  ** When set, this variable contains a default from address.  It
+  ** can be overridden using my_hdr (including from send-hooks) and
+  ** ``$$reverse_name''.  This variable is ignored if ``$$use_from''
+  ** is unset.
+  ** .pp
+  ** Defaults to the contents of the environment variable EMAIL.
+  */
+  { "gecos_mask",      DT_RX,   R_NONE, UL &GecosMask, UL "^[^,]*" },
+  /*
+  ** .pp
+  ** A regular expression used by mutt to parse the GECOS field of a password
+  ** entry when expanding the alias.  By default the regular expression is set
+  ** to "^[^,]*" which will return the string up to the first "," encountered.
+  ** If the GECOS field contains a string like "lastname, firstname" then you
+  ** should set the gecos_mask=".*".
+  ** .pp
+  ** This can be useful if you see the following behavior: you address a e-mail
+  ** to user ID stevef whose full name is Steve Franklin.  If mutt expands 
+  ** stevef to "Franklin" stevef@foo.bar then you should set the gecos_mask to
+  ** a regular expression that will match the whole name so mutt will expand
+  ** "Franklin" to "Franklin, Steve".
+  */
+#ifdef USE_NNTP
+  { "group_index_format", DT_STR, R_BOTH, UL &GroupFormat, UL "%4C %M%N %5s  %-45.45f %d" },
+  /*
+  ** .pp
+  ** This variable allows you to customize the newsgroup browser display to
+  ** your personal taste.  This string is similar to ``$index_format'', but
+  ** has its own set of printf()-like sequences:
+  ** .pp
+  ** .ts
+  ** %C      current newsgroup number
+  ** %d      description of newsgroup (becomes from server)
+  ** %f      newsgroup name
+  ** %M      - if newsgroup not allowed for direct post (moderated for example)
+  ** %N      N if newsgroup is new, u if unsubscribed, blank otherwise
+  ** %n      number of new articles in newsgroup
+  ** %s      number of unread articles in newsgroup
+  ** %>X     right justify the rest of the string and pad with character "X"
+  ** %|X     pad to the end of the line with character "X"
+  ** .te
+  */
+#endif
+  { "hdr_format",      DT_SYN,  R_NONE, UL "index_format", 0 },
+  /*
+  */
+  { "hdrs",            DT_BOOL, R_NONE, OPTHDRS, 1 },
+  /*
+  ** .pp
+  ** When unset, the header fields normally added by the ``$my_hdr''
+  ** command are not created.  This variable \fImust\fP be unset before
+  ** composing a new message or replying in order to take effect.  If set,
+  ** the user defined header fields are added to every new message.
+  */
+  { "header",          DT_BOOL, R_NONE, OPTHEADER, 0 },
+  /*
+  ** .pp
+  ** When set, this variable causes Mutt to include the header
+  ** of the message you are replying to into the edit buffer.
+  ** The ``$$weed'' setting applies.
+  */  
+  { "help",            DT_BOOL, R_BOTH, OPTHELP, 1 },
+  /*
+  ** .pp
+  ** When set, help lines describing the bindings for the major functions
+  ** provided by each menu are displayed on the first line of the screen.
+  ** .pp
+  ** \fBNote:\fP The binding will not be displayed correctly if the
+  ** function is bound to a sequence rather than a single keystroke.  Also,
+  ** the help line may not be updated if a binding is changed while Mutt is
+  ** running.  Since this variable is primarily aimed at new users, neither
+  ** of these should present a major problem.
+  */
+  { "hidden_host",     DT_BOOL, R_NONE, OPTHIDDENHOST, 0 },
+  /*
+  ** .pp
+  ** When set, mutt will skip the host name part of ``$$hostname'' variable
+  ** when adding the domain part to addresses.  This variable does not
+  ** affect the generation of Message-IDs, and it will not lead to the 
+  ** cut-off of first-level domains.
+  */
+  { "hide_limited",    DT_BOOL, R_TREE|R_INDEX, OPTHIDELIMITED, 0 },
+  /*
+  ** .pp
+  ** When set, mutt will not show the presence of messages that are hidden
+  ** by limiting, in the thread tree.
+  */
+  { "hide_missing",    DT_BOOL, R_TREE|R_INDEX, OPTHIDEMISSING, 1 },
+  /*
+  ** .pp
+  ** When set, mutt will not show the presence of missing messages in the
+  ** thread tree.
+  */
+  { "hide_top_limited",        DT_BOOL, R_TREE|R_INDEX, OPTHIDETOPLIMITED, 0 },
+  /*
+  ** .pp
+  ** When set, mutt will not show the presence of messages that are hidden
+  ** by limiting, at the top of threads in the thread tree.  Note that when
+  ** $$hide_missing is set, this option will have no effect.
+  */
+  { "hide_top_missing",        DT_BOOL, R_TREE|R_INDEX, OPTHIDETOPMISSING, 1 },
+  /*
+  ** .pp
+  ** When set, mutt will not show the presence of missing messages at the
+  ** top of threads in the thread tree.  Note that when $$hide_limited is
+  ** set, this option will have no effect.
+  */
+  { "history",         DT_NUM,  R_NONE, UL &HistSize, 10 },
+  /*
+  ** .pp
+  ** This variable controls the size (in number of strings remembered) of
+  ** the string history buffer. The buffer is cleared each time the
+  ** variable is set.
+  */
+  { "honor_followup_to", DT_QUAD, R_NONE, OPT_MFUPTO, M_YES },
+  /*
+  ** .pp
+  ** This variable controls whether or not a Mail-Followup-To header is
+  ** honored when group-replying to a message.
+  */
+  { "hostname",                DT_STR,  R_NONE, UL &Fqdn, 0 },
+  /*
+  ** .pp
+  ** Specifies the hostname to use after the ``@'' in local e-mail
+  ** addresses.  This overrides the compile time definition obtained from
+  ** /etc/resolv.conf.
+  */
+  { "ignore_list_reply_to", DT_BOOL, R_NONE, OPTIGNORELISTREPLYTO, 0 },
+  /*
+  ** .pp
+  ** Affects the behaviour of the \fIreply\fP function when replying to
+  ** messages from mailing lists.  When set, if the ``Reply-To:'' field is
+  ** set to the same value as the ``To:'' field, Mutt assumes that the
+  ** ``Reply-To:'' field was set by the mailing list to automate responses
+  ** to the list, and will ignore this field.  To direct a response to the
+  ** mailing list when this option is set, use the \fIlist-reply\fP
+  ** function; \fIgroup-reply\fP will reply to both the sender and the
+  ** list.
+  */
+#ifdef USE_IMAP
+  { "imap_authenticators", DT_STR, R_NONE, UL &ImapAuthenticators, UL 0 },
+  /*
+  ** .pp
+  ** This is a colon-delimited list of authentication methods mutt may
+  ** attempt to use to log in to an IMAP server, in the order mutt should
+  ** try them.  Authentication methods are either 'login' or the right
+  ** side of an IMAP 'AUTH=xxx' capability string, eg 'digest-md5',
+  ** 'gssapi' or 'cram-md5'. This parameter is case-insensitive. If this
+  ** parameter is unset (the default) mutt will try all available methods,
+  ** in order from most-secure to least-secure.
+  ** .pp
+  ** Example: set imap_authenticators="gssapi:cram-md5:login"
+  ** .pp
+  ** \fBNote:\fP Mutt will only fall back to other authentication methods if
+  ** the previous methods are unavailable. If a method is available but
+  ** authentication fails, mutt will not connect to the IMAP server.
+  */
+  { "imap_delim_chars",                DT_STR, R_NONE, UL &ImapDelimChars, UL "/." },
+  /*
+  ** .pp
+  ** This contains the list of characters which you would like to treat
+  ** as folder separators for displaying IMAP paths. In particular it
+  ** helps in using the '=' shortcut for your \fIfolder\fP variable.
+  */
+# ifdef USE_SSL
+  { "imap_force_ssl",          DT_BOOL, R_NONE, OPTIMAPFORCESSL, 0 },
+  /*
+  ** .pp
+  ** If this variable is set, Mutt will always use SSL when
+  ** connecting to IMAP servers.
+  */
+# endif
+  { "imap_home_namespace",     DT_STR, R_NONE, UL &ImapHomeNamespace, UL 0},
+  /*
+  ** .pp
+  ** You normally want to see your personal folders alongside
+  ** your INBOX in the IMAP browser. If you see something else, you may set
+  ** this variable to the IMAP path to your folders.
+  */
+  { "imap_keepalive",           DT_NUM,  R_NONE, UL &ImapKeepalive, 900 },
+  /*
+  ** .pp
+  ** This variable specifies the maximum amount of time in seconds that mutt
+  ** will wait before polling open IMAP connections, to prevent the server
+  ** from closing them before mutt has finished with them. The default is
+  ** well within the RFC-specified minimum amount of time (30 minutes) before
+  ** a server is allowed to do this, but in practice the RFC does get
+  ** violated every now and then. Reduce this number if you find yourself
+  ** getting disconnected from your IMAP server due to inactivity.
+  */
+  { "imap_list_subscribed",    DT_BOOL, R_NONE, OPTIMAPLSUB, 0 },
+  /*
+  ** .pp
+  ** This variable configures whether IMAP folder browsing will look for
+  ** only subscribed folders or all folders.  This can be toggled in the
+  ** IMAP browser with the \fItoggle-subscribed\fP function.
+  */
+  { "imap_pass",       DT_STR,  R_NONE, UL &ImapPass, UL 0 },
+  /*
+  ** .pp
+  ** Specifies the password for your IMAP account.  If unset, Mutt will
+  ** prompt you for your password when you invoke the fetch-mail function.
+  ** \fBWarning\fP: you should only use this option when you are on a
+  ** fairly secure machine, because the superuser can read your muttrc even
+  ** if you are the only one who can read the file.
+  */
+  { "imap_passive",            DT_BOOL, R_NONE, OPTIMAPPASSIVE, 1 },
+  /*
+  ** .pp
+  ** When set, mutt will not open new IMAP connections to check for new
+  ** mail.  Mutt will only check for new mail over existing IMAP
+  ** connections.  This is useful if you don't want to be prompted to
+  ** user/password pairs on mutt invocation, or if opening the connection
+  ** is slow.
+  */
+  { "imap_peek", DT_BOOL, R_NONE, OPTIMAPPEEK, 1 },
+  /*
+  ** .pp
+  ** If set, mutt will avoid implicitly marking your mail as read whenever
+  ** you fetch a message from the server. This is generally a good thing,
+  ** but can make closing an IMAP folder somewhat slower. This option
+  ** exists to appease speed freaks.
+  */
+  { "imap_servernoise",                DT_BOOL, R_NONE, OPTIMAPSERVERNOISE, 1 },
+  /*
+  ** .pp
+  ** When set, mutt will display warning messages from the IMAP
+  ** server as error messages. Since these messages are often
+  ** harmless, or generated due to configuration problems on the
+  ** server which are out of the users' hands, you may wish to suppress
+  ** them at some point.
+  */
+  { "imap_user",       DT_STR,  R_NONE, UL &ImapUser, UL 0 },
+  /*
+  ** .pp
+  ** Your login name on the IMAP server.
+  ** .pp
+  ** This variable defaults to your user name on the local machine.
+  */
+#endif
+  { "implicit_autoview", DT_BOOL,R_NONE, OPTIMPLICITAUTOVIEW, 0},
+  /*
+  ** .pp
+  ** If set to ``yes'', mutt will look for a mailcap entry with the
+  ** copiousoutput flag set for \fIevery\fP MIME attachment it doesn't have
+  ** an internal viewer defined for.  If such an entry is found, mutt will
+  ** use the viewer defined in that entry to convert the body part to text
+  ** form.
+  */
+  { "include",         DT_QUAD, R_NONE, OPT_INCLUDE, M_ASKYES },
+  /*
+  ** .pp
+  ** Controls whether or not a copy of the message(s) you are replying to
+  ** is included in your reply.
+  */
+  { "indent_string",   DT_STR,  R_NONE, UL &Prefix, UL "> " },
+  /*
+  ** .pp
+  ** Specifies the string to prepend to each line of text quoted in a
+  ** message to which you are replying.  You are strongly encouraged not to
+  ** change this value, as it tends to agitate the more fanatical netizens.
+  */
+  { "indent_str",      DT_SYN,  R_NONE, UL "indent_string", 0 },
+  /*
+  */
+  { "index_format",    DT_STR,  R_BOTH, UL &HdrFmt, UL "%4C %Z %{%b %d} %-15.15L (%?l?%4l&%4c?) %s" },
+  /*
+  ** .pp
+  ** This variable allows you to customize the message index display to
+  ** your personal taste.
+  ** .pp
+  ** ``Format strings'' are similar to the strings used in the ``C''
+  ** function printf to format output (see the man page for more detail).
+  ** The following sequences are defined in Mutt:
+  ** .pp
+  ** .dl
+  ** .dt %a .dd address of the author
+  ** .dt %A .dd reply-to address (if present; otherwise: address of author)
+  ** .dt %b .dd filename of the original message folder (think mailBox)
+  ** .dt %B .dd the list to which the letter was sent, or else the folder name (%b).
+  ** .dt %c .dd number of characters (bytes) in the message
+  ** .dt %C .dd current message number
+  ** .dt %d .dd date and time of the message in the format specified by
+  **            ``date_format'' converted to sender's time zone
+  ** .dt %D .dd date and time of the message in the format specified by
+  **            ``date_format'' converted to the local time zone
+  ** .dt %e .dd current message number in thread
+  ** .dt %E .dd number of messages in current thread
+  ** .dt %f .dd entire From: line (address + real name)
+  ** .dt %F .dd author name, or recipient name if the message is from you
+  ** .dt %g .dd newsgroup name (if compiled with nntp support)
+  ** .dt %i .dd message-id of the current message
+  ** .dt %l .dd number of lines in the message (does not work with maildir,
+  **            mh, and possibly IMAP folders)
+  ** .dt %L .dd If an address in the To or CC header field matches an address
+  **            defined by the users ``subscribe'' command, this displays
+  **            "To <list-name>", otherwise the same as %F.
+  ** .dt %m .dd total number of message in the mailbox
+  ** .dt %M .dd number of hidden messages if the thread is collapsed.
+  ** .dt %N .dd message score
+  ** .dt %n .dd author's real name (or address if missing)
+  ** .dt %O .dd (_O_riginal save folder)  Where mutt would formerly have
+  **            stashed the message: list name or recipient name if no list
+  ** .dt %s .dd subject of the message
+  ** .dt %S .dd status of the message (N/D/d/!/r/\(as)
+  ** .dt %t .dd `to:' field (recipients)
+  ** .dt %T .dd the appropriate character from the $$to_chars string
+  ** .dt %u .dd user (login) name of the author
+  ** .dt %v .dd first name of the author, or the recipient if the message is from you
+  ** .dt %W .dd name of organization of author (`organization:' field)
+  ** .dt %y .dd `x-label:' field, if present
+  ** .dt %Y .dd `x-label' field, if present, and (1) not at part of a thread tree,
+  **            (2) at the top of a thread, or (3) `x-label' is different from
+  **            preceding message's `x-label'.
+  ** .dt %Z .dd message status flags
+  ** .dt %{fmt} .dd the date and time of the message is converted to sender's
+  **                time zone, and ``fmt'' is expanded by the library function
+  **                ``strftime''; a leading bang disables locales
+  ** .dt %[fmt] .dd the date and time of the message is converted to the local
+  **                time zone, and ``fmt'' is expanded by the library function
+  **                ``strftime''; a leading bang disables locales
+  ** .dt %(fmt) .dd the local date and time when the message was received.
+  **                ``fmt'' is expanded by the library function ``strftime'';
+  **                a leading bang disables locales
+  ** .dt %<fmt> .dd the current local time. ``fmt'' is expanded by the library
+  **                function ``strftime''; a leading bang disables locales.
+  ** .dt %>X    .dd right justify the rest of the string and pad with character "X"
+  ** .dt %|X    .dd pad to the end of the line with character "X"
+  ** .de
+  ** .pp
+  ** See also: ``$$to_chars''.
+  */
+#ifdef USE_NNTP
+  { "inews",          DT_PATH, R_NONE, UL &Inews, UL "" },
+  /*
+  ** .pp
+  ** If set, specifies the program and arguments used to deliver news posted
+  ** by Mutt.  Otherwise, mutt posts article using current connection to
+  ** news server.  The following printf-style sequence is understood:
+  ** .pp
+  ** .ts
+  ** %s      newsserver name
+  ** .te
+  ** .pp
+  ** Example: set inews="/usr/local/bin/inews -hS"
+  */
+#endif
+  { "ispell",          DT_PATH, R_NONE, UL &Ispell, UL ISPELL },
+  /*
+  ** .pp
+  ** How to invoke ispell (GNU's spell-checking software).
+  */
+  { "keep_flagged", DT_BOOL, R_NONE, OPTKEEPFLAGGED, 0 },
+  /*
+  ** .pp
+  ** If set, read messages marked as flagged will not be moved
+  ** from your spool mailbox to your ``$$mbox'' mailbox, or as a result of
+  ** a ``$mbox-hook'' command.
+  */
+  { "locale",          DT_STR,  R_BOTH, UL &Locale, UL "C" },
+  /*
+  ** .pp
+  ** The locale used by \fIstrftime(3)\fP to format dates. Legal values are
+  ** the strings your system accepts for the locale variable \fILC_TIME\fP.
+  */
+  { "list_reply",      DT_QUAD, R_NONE, OPT_LISTREPLY, M_NO },
+  /*
+  ** .pp
+  ** When set, address replies to the mailing list the original message came
+  ** from (instead to the author only). Setting this option to ``ask-yes'' or
+  ** ``ask-no'' will ask if you really intended to reply to the author only.
+  */
+  { "mail_check",      DT_NUM,  R_NONE, UL &BuffyTimeout, 5 },
+  /*
+  ** .pp
+  ** This variable configures how often (in seconds) mutt should look for
+  ** new mail.
+  */
+  { "mailcap_path",    DT_STR,  R_NONE, UL &MailcapPath, 0 },
+  /*
+  ** .pp
+  ** This variable specifies which files to consult when attempting to
+  ** display MIME bodies not directly supported by Mutt.
+  */
+  { "mailcap_sanitize",        DT_BOOL, R_NONE, OPTMAILCAPSANITIZE, 1 },
+  /*
+  ** .pp
+  ** If set, mutt will restrict possible characters in mailcap % expandos
+  ** to a well-defined set of safe characters.  This is the safe setting,
+  ** but we are not sure it doesn't break some more advanced MIME stuff.
+  ** .pp
+  ** \fBDON'T CHANGE THIS SETTING UNLESS YOU ARE REALLY SURE WHAT YOU ARE
+  ** DOING!\fP
+  */
+  { "maildir_trash", DT_BOOL, R_NONE, OPTMAILDIRTRASH, 0 },
+  /*
+  ** .pp
+  ** If set, messages marked as deleted will be saved with the maildir
+  ** (T)rashed flag instead of unlinked.  \fBNOTE:\fP this only applies
+  ** to maildir-style mailboxes.  Setting it will have no effect on other
+  ** mailbox types.
+  */
+  { "mark_old",                DT_BOOL, R_BOTH, OPTMARKOLD, 1 },
+  /*
+  ** .pp
+  ** Controls whether or not mutt marks \fInew\fP \fBunread\fP
+  ** messages as \fIold\fP if you exit a mailbox without reading them.
+  ** With this option set, the next time you start mutt, the messages
+  ** will show up with an "O" next to them in the index menu,
+  ** indicating that they are old.
+  */
+  { "markers",         DT_BOOL, R_PAGER, OPTMARKERS, 1 },
+  /*
+  ** .pp
+  ** Controls the display of wrapped lines in the internal pager. If set, a
+  ** ``+'' marker is displayed at the beginning of wrapped lines. Also see
+  ** the ``$$smart_wrap'' variable.
+  */
+  { "mask",            DT_RX,   R_NONE, UL &Mask, UL "!^\\.[^.]" },
+  /*
+  ** .pp
+  ** A regular expression used in the file browser, optionally preceded by
+  ** the \fInot\fP operator ``!''.  Only files whose names match this mask
+  ** will be shown. The match is always case-sensitive.
+  */
+  { "mbox",            DT_PATH, R_BOTH, UL &Inbox, UL "~/mbox" },
+  /*
+  ** .pp
+  ** This specifies the folder into which read mail in your ``$$spoolfile''
+  ** folder will be appended.
+  */
+  { "mbox_type",       DT_MAGIC,R_NONE, UL &DefaultMagic, M_MBOX },
+  /*
+  ** .pp
+  ** The default mailbox type used when creating new folders. May be any of
+  ** mbox, MMDF, MH and Maildir.
+  */
+  { "metoo",           DT_BOOL, R_NONE, OPTMETOO, 0 },
+  /*
+  ** .pp
+  ** If unset, Mutt will remove your address (see the ``alternates''
+  ** command) from the list of recipients when replying to a message.
+  */
+  { "menu_scroll",     DT_BOOL, R_NONE, OPTMENUSCROLL, 0 },
+  /*
+  ** .pp
+  ** When \fIset\fP, menus will be scrolled up or down one line when you
+  ** attempt to move across a screen boundary.  If \fIunset\fP, the screen
+  ** is cleared and the next or previous page of the menu is displayed
+  ** (useful for slow links to avoid many redraws).
+  */
+  { "meta_key",                DT_BOOL, R_NONE, OPTMETAKEY, 0 },
+  /*
+  ** .pp
+  ** If set, forces Mutt to interpret keystrokes with the high bit (bit 8)
+  ** set as if the user had pressed the ESC key and whatever key remains
+  ** after having the high bit removed.  For example, if the key pressed
+  ** has an ASCII value of 0xf4, then this is treated as if the user had
+  ** pressed ESC then ``x''.  This is because the result of removing the
+  ** high bit from ``0xf4'' is ``0x74'', which is the ASCII character
+  ** ``x''.
+  */
+  { "mh_purge",                DT_BOOL, R_NONE, OPTMHPURGE, 0 },
+  /*
+  ** .pp
+  ** When unset, mutt will mimic mh's behaviour and rename deleted messages
+  ** to \fI,<old file name>\fP in mh folders instead of really deleting
+  ** them.  If the variable is set, the message files will simply be
+  ** deleted.
+  */
+  { "mh_seq_flagged",  DT_STR, R_NONE, UL &MhFlagged, UL "flagged" },
+  /*
+  ** .pp
+  ** The name of the MH sequence used for flagged messages.
+  */
+  { "mh_seq_replied",  DT_STR, R_NONE, UL &MhReplied, UL "replied" },
+  /*
+  ** .pp
+  ** The name of the MH sequence used to tag replied messages.
+  */
+  { "mh_seq_unseen",   DT_STR, R_NONE, UL &MhUnseen, UL "unseen" },
+  /*
+  ** .pp
+  ** The name of the MH sequence used for unseen messages.
+  */
+  { "mime_forward",    DT_QUAD, R_NONE, OPT_MIMEFWD, M_NO },
+  /*
+  ** .pp
+  ** When set, the message you are forwarding will be attached as a
+  ** separate MIME part instead of included in the main body of the
+  ** message.  This is useful for forwarding MIME messages so the receiver
+  ** can properly view the message as it was delivered to you. If you like
+  ** to switch between MIME and not MIME from mail to mail, set this
+  ** variable to ask-no or ask-yes.
+  ** .pp
+  ** Also see ``$$forward_decode'' and ``$$mime_forward_decode''.
+  */
+  { "mime_forward_decode", DT_BOOL, R_NONE, OPTMIMEFORWDECODE, 0 },
+  /*
+  ** .pp
+  ** Controls the decoding of complex MIME messages into text/plain when
+  ** forwarding a message while ``$$mime_forward'' is \fIset\fP. Otherwise
+  ** ``$$forward_decode'' is used instead.
+  */
+  { "mime_fwd",                DT_SYN,  R_NONE, UL "mime_forward", 0 },
+  /*
+  */
+
+  { "mime_forward_rest", DT_QUAD, R_NONE, OPT_MIMEFWDREST, M_YES },
+  /*
+  ** .pp
+  ** When forwarding multiple attachments of a MIME message from the recvattach
+  ** menu, attachments which cannot be decoded in a reasonable manner will
+  ** be attached to the newly composed message if this option is set.
+  */
+
+#ifdef USE_NNTP
+  { "mime_subject",   DT_BOOL, R_NONE, OPTMIMESUBJECT, 1 },
+  /*
+  ** .pp
+  ** If \fIunset\fP, 8-bit ``subject:'' line in article header will not be
+  ** encoded according to RFC2047 to base64.  This is useful when message
+  ** is Usenet article, because MIME for news is nonstandard feature.
+  */
+#endif
+
+#ifdef MIXMASTER
+  { "mix_entry_format", DT_STR,  R_NONE, UL &MixEntryFormat, UL "%4n %c %-16s %a" },
+  /*
+  ** .pp
+  ** This variable describes the format of a remailer line on the mixmaster
+  ** chain selection screen.  The following printf-like sequences are 
+  ** supported:
+  ** .pp
+  ** .dl
+  ** .dt %n .dd The running number on the menu.
+  ** .dt %c .dd Remailer capabilities.
+  ** .dt %s .dd The remailer's short name.
+  ** .dt %a .dd The remailer's e-mail address.
+  ** .de
+  */
+  { "mixmaster",       DT_PATH, R_NONE, UL &Mixmaster, UL MIXMASTER },
+  /*
+  ** .pp
+  ** This variable contains the path to the Mixmaster binary on your
+  ** system.  It is used with various sets of parameters to gather the
+  ** list of known remailers, and to finally send a message through the
+  ** mixmaster chain.
+  */
+#endif
+
+
+  { "move",            DT_QUAD, R_NONE, OPT_MOVE, M_ASKNO },
+  /*
+  ** .pp
+  ** Controls whether you will be asked to confirm moving read messages
+  ** from your spool mailbox to your ``$$mbox'' mailbox, or as a result of
+  ** a ``$mbox-hook'' command.
+  */
+  { "message_format",  DT_STR,  R_NONE, UL &MsgFmt, UL "%s" },
+  /*
+  ** .pp
+  ** This is the string displayed in the ``attachment'' menu for
+  ** attachments of type message/rfc822.  For a full listing of defined
+  ** printf()-like sequences see the section on ``$$index_format''.
+  */
+  { "msg_format",      DT_SYN,  R_NONE, UL "message_format", 0 },
+  /*
+  */
+  { "narrow_tree",     DT_BOOL, R_TREE|R_INDEX, OPTNARROWTREE, 0 },
+  /*
+  ** .pp
+  ** This variable, when set, makes the thread tree narrower, allowing
+  ** deeper threads to fit on the screen.
+  */
+#ifdef USE_NNTP
+  { "news_cache_dir", DT_PATH, R_NONE, UL &NewsCacheDir, UL "~/.mutt" },
+  /*
+  ** .pp
+  ** This variable pointing to directory where Mutt will save cached news
+  ** articles headers in. If \fIunset\fP, headers will not be saved at all
+  ** and will be reloaded each time when you enter to newsgroup.
+  */
+  { "news_server",    DT_STR,  R_NONE, UL &NewsServer, 0 },
+  /*
+  ** .pp
+  ** This variable specifies domain name or address of NNTP server. It
+  ** defaults to the newsserver specified in the environment variable
+  ** $$$NNTPSERVER or contained in the file /etc/nntpserver.  You can also
+  ** specify username and an alternative port for each newsserver, ie:
+  ** .pp
+  ** [nntp[s]://][username[:password]@]newsserver[:port]
+  */
+  { "newsrc",         DT_PATH, R_NONE, UL &NewsRc, UL "~/.newsrc" },
+  /*
+  ** .pp
+  ** The file, containing info about subscribed newsgroups - names and
+  ** indexes of read articles.  The following printf-style sequence
+  ** is understood:
+  ** .pp
+  ** .ts
+  ** %s      newsserver name
+  ** .te
+  */
+  { "nntp_context",   DT_NUM,  R_NONE, UL &NntpContext, 1000 },
+  /*
+  ** .pp
+  ** This variable defines number of articles which will be in index when
+  ** newsgroup entered.  If active newsgroup have more articles than this
+  ** number, oldest articles will be ignored.  Also controls how many
+  ** articles headers will be saved in cache when you quit newsgroup.
+  */
+  { "nntp_load_description", DT_BOOL, R_NONE, OPTLOADDESC, 1 },
+  /*
+  ** .pp
+  ** This variable controls whether or not descriptions for each newsgroup
+  ** must be loaded when newsgroup is added to list (first time list
+  ** loading or new newsgroup adding).
+  */
+  { "nntp_user",      DT_STR,  R_NONE, UL &NntpUser, UL "" },
+  /*
+  ** .pp
+  ** Your login name on the NNTP server.  If \fIunset\fP and NNTP server requires
+  ** authentification, Mutt will prompt you for your account name when you
+  ** connect to newsserver.
+  */
+  { "nntp_pass",      DT_STR,  R_NONE, UL &NntpPass, UL "" },
+  /*
+  ** .pp
+  ** Your password for NNTP account.
+  */
+  { "nntp_poll",      DT_NUM,  R_NONE, UL &NewsPollTimeout, 60 },
+  /*
+  ** .pp
+  ** The time in seconds until any operations on newsgroup except post new
+  ** article will cause recheck for new news.  If set to 0, Mutt will
+  ** recheck newsgroup on each operation in index (stepping, read article,
+  ** etc.).
+  */
+  { "nntp_reconnect", DT_QUAD, R_NONE, OPT_NNTPRECONNECT, M_ASKYES },
+  /*
+  ** .pp
+  ** Controls whether or not Mutt will try to reconnect to newsserver when
+  ** connection lost.
+  */
+#endif
+  { "pager",           DT_PATH, R_NONE, UL &Pager, UL "builtin" },
+  /*
+  ** .pp
+  ** This variable specifies which pager you would like to use to view
+  ** messages.  builtin means to use the builtin pager, otherwise this
+  ** variable should specify the pathname of the external pager you would
+  ** like to use.
+  ** .pp
+  ** Using an external pager may have some disadvantages: Additional
+  ** keystrokes are necessary because you can't call mutt functions
+  ** directly from the pager, and screen resizes cause lines longer than
+  ** the screen width to be badly formatted in the help menu.
+  */
+  { "pager_context",   DT_NUM,  R_NONE, UL &PagerContext, 0 },
+  /*
+  ** .pp
+  ** This variable controls the number of lines of context that are given
+  ** when displaying the next or previous page in the internal pager.  By
+  ** default, Mutt will display the line after the last one on the screen
+  ** at the top of the next page (0 lines of context).
+  */
+  { "pager_format",    DT_STR,  R_PAGER, UL &PagerFmt, UL "-%Z- %C/%m: %-20.20n   %s" },
+  /*
+  ** .pp
+  ** This variable controls the format of the one-line message ``status''
+  ** displayed before each message in either the internal or an external
+  ** pager.  The valid sequences are listed in the ``$$index_format''
+  ** section.
+  */
+  { "pager_index_lines",DT_NUM,         R_PAGER, UL &PagerIndexLines, 0 },
+  /*
+  ** .pp
+  ** Determines the number of lines of a mini-index which is shown when in
+  ** the pager.  The current message, unless near the top or bottom of the
+  ** folder, will be roughly one third of the way down this mini-index,
+  ** giving the reader the context of a few messages before and after the
+  ** message.  This is useful, for example, to determine how many messages
+  ** remain to be read in the current thread.  One of the lines is reserved
+  ** for the status bar from the index, so a \fIpager_index_lines\fP of 6
+  ** will only show 5 lines of the actual index.  A value of 0 results in
+  ** no index being shown.  If the number of messages in the current folder
+  ** is less than \fIpager_index_lines\fP, then the index will only use as
+  ** many lines as it needs.
+  */
+  { "pager_stop",      DT_BOOL, R_NONE, OPTPAGERSTOP, 0 },
+  /*
+  ** .pp
+  ** When set, the internal-pager will \fBnot\fP move to the next message
+  ** when you are at the end of a message and invoke the \fInext-page\fP
+  ** function.
+  */
+  { "pgp_autosign",    DT_SYN,  R_NONE, UL "crypt_autosign", 0 },
+  { "crypt_autosign",  DT_BOOL, R_NONE, OPTCRYPTAUTOSIGN, 0 },
+  /*
+  ** .pp
+  ** Setting this variable will cause Mutt to always attempt to
+  ** cryptographically sign outgoing messages.  This can be overridden
+  ** by use of the \fIpgp-menu\fP, when signing is not required or
+  ** encryption is requested as well. If ``$$smime_is_default'' is set,
+  ** then OpenSSL is used instead to create S/MIME messages and settings can
+  ** be overridden by use of the \fIsmime-menu\fP.
+  ** (Crypto only)
+  */
+  { "pgp_autoencrypt",         DT_SYN,  R_NONE, UL "crypt_autoencrypt", 0 },
+  { "crypt_autoencrypt",       DT_BOOL, R_NONE, OPTCRYPTAUTOENCRYPT, 0 },
+  /*
+  ** .pp
+  ** Setting this variable will cause Mutt to always attempt to PGP
+  ** encrypt outgoing messages.  This is probably only useful in
+  ** connection to the \fIsend-hook\fP command.  It can be overridden
+  ** by use of the \fIpgp-menu\fP, when encryption is not required or
+  ** signing is requested as well.  IF ``$$smime_is_default'' is set,
+  ** then OpenSSL is used instead to create S/MIME messages and
+  ** settings can be overridden by use of the \fIsmime-menu\fP.
+  ** (Crypto only)
+  */
+  { "pgp_ignore_subkeys", DT_BOOL, R_NONE, OPTPGPIGNORESUB, 1},
+  /*
+  ** .pp
+  ** Setting this variable will cause Mutt to ignore OpenPGP subkeys. Instead,
+  ** the principal key will inherit the subkeys' capabilities.  Unset this
+  ** if you want to play interesting key selection games.
+  ** (PGP only)
+  */
+  { "pgp_replyencrypt",                DT_SYN,  R_NONE, UL "crypt_replyencrypt", 1  },
+  { "crypt_replyencrypt",      DT_BOOL, R_NONE, OPTCRYPTREPLYENCRYPT, 1 },
+  /*
+  ** .pp
+  ** If set, automatically PGP or OpenSSL encrypt replies to messages which are
+  ** encrypted.
+  ** (Crypto only)
+  */
+  { "pgp_replysign",   DT_SYN, R_NONE, UL "crypt_replysign", 0 },
+  { "crypt_replysign", DT_BOOL, R_NONE, OPTCRYPTREPLYSIGN, 0 },
+  /*
+  ** .pp
+  ** If set, automatically PGP or OpenSSL sign replies to messages which are
+  ** signed.
+  ** .pp
+  ** \fBNote:\fP this does not work on messages that are encrypted
+  ** \fBand\fP signed!
+  ** (Crypto only)
+  */
+  { "pgp_replysignencrypted",   DT_SYN,  R_NONE, UL "crypt_replysignencrypted", 0},
+  { "crypt_replysignencrypted", DT_BOOL, R_NONE, OPTCRYPTREPLYSIGNENCRYPTED, 0 },
+  /*
+  ** .pp
+  ** If set, automatically PGP or OpenSSL sign replies to messages
+  ** which are encrypted. This makes sense in combination with
+  ** ``$$crypt_replyencrypt'', because it allows you to sign all
+  ** messages which are automatically encrypted.  This works around
+  ** the problem noted in ``$$crypt_replysign'', that mutt is not able
+  ** to find out whether an encrypted message is also signed.
+  ** (Crypto only)
+  */
+  { "crypt_timestamp", DT_BOOL, R_NONE, OPTCRYPTTIMESTAMP, 1 },
+  /*
+  ** .pp
+  ** If set, mutt will include a time stamp in the lines surrounding
+  ** PGP or S/MIME output, so spoofing such lines is more difficult.
+  ** If you are using colors to mark these lines, and rely on these,
+  ** you may unset this setting.
+  ** (Crypto only)
+  */
+  { "pgp_use_gpg_agent", DT_BOOL, R_NONE, OPTUSEGPGAGENT, 0},
+  /*
+  ** .pp
+  ** If set, mutt will use a possibly-running gpg-agent process.
+  ** (PGP only)
+  */
+  { "pgp_verify_sig",   DT_SYN,  R_NONE, UL "crypt_verify_sig", 0},
+  { "crypt_verify_sig",        DT_QUAD, R_NONE, OPT_VERIFYSIG, M_YES },
+  /*
+  ** .pp
+  ** If ``yes'', always attempt to verify PGP or S/MIME signatures.
+  ** If ``ask'', ask whether or not to verify the signature. 
+  ** If ``no'', never attempt to verify cryptographic signatures.
+  ** (Crypto only)
+  */
+  { "smime_is_default", DT_BOOL,  R_NONE, OPTSMIMEISDEFAULT, 0},
+  /*
+  ** .pp
+  ** The default behaviour of mutt is to use PGP on all auto-sign/encryption
+  ** operations. To override and to use OpenSSL instead this must be set.
+  ** However, this has no effect while replying, since mutt will automatically 
+  ** select the same application that was used to sign/encrypt the original
+  ** message.  (Note that this variable can be overridden by unsetting $$crypt_autosmime.)
+  ** (S/MIME only)
+  */
+  { "smime_ask_cert_label",    DT_BOOL, R_NONE, OPTASKCERTLABEL, 1 },
+  /*
+  ** .pp
+  ** This flag controls whether you want to be asked to enter a label
+  ** for a certificate about to be added to the database or not. It is
+  ** set by default.
+  ** (S/MIME only)
+  */
+  { "smime_decrypt_use_default_key",   DT_BOOL, R_NONE, OPTSDEFAULTDECRYPTKEY, 1 },
+  /*
+  ** .pp
+  ** If set (default) this tells mutt to use the default key for decryption. Otherwise,
+  ** if manage multiple certificate-key-pairs, mutt will try to use the mailbox-address
+  ** to determine the key to use. It will ask you to supply a key, if it can't find one.
+  ** (S/MIME only)
+  */
+  { "pgp_entry_format", DT_STR,  R_NONE, UL &PgpEntryFormat, UL "%4n %t%f %4l/0x%k %-4a %2c %u" },
+  /*
+  ** .pp
+  ** This variable allows you to customize the PGP key selection menu to
+  ** your personal taste. This string is similar to ``$$index_format'', but
+  ** has its own set of printf()-like sequences:
+  ** .pp
+  ** .dl
+  ** .dt %n     .dd number
+  ** .dt %k     .dd key id
+  ** .dt %u     .dd user id
+  ** .dt %a     .dd algorithm
+  ** .dt %l     .dd key length
+  ** .dt %f     .dd flags
+  ** .dt %c     .dd capabilities
+  ** .dt %t     .dd trust/validity of the key-uid association
+  ** .dt %[<s>] .dd date of the key where <s> is an strftime(3) expression
+  ** .de
+  ** .pp
+  ** (PGP only)
+  */
+  { "pgp_good_sign",   DT_RX,  R_NONE, UL &PgpGoodSign, 0 },
+  /*
+  ** .pp
+  ** If you assign a text to this variable, then a PGP signature is only
+  ** considered verified if the output from $$pgp_verify_command contains
+  ** the text. Use this variable if the exit code from the command is 0
+  ** even for bad signatures.
+  ** (PGP only)
+  */ 
+  { "pgp_check_exit",  DT_BOOL, R_NONE, OPTPGPCHECKEXIT, 1 },
+  /*
+  ** .pp
+  ** If set, mutt will check the exit code of the PGP subprocess when
+  ** signing or encrypting.  A non-zero exit code means that the
+  ** subprocess failed.
+  ** (PGP only)
+  */
+  { "pgp_long_ids",    DT_BOOL, R_NONE, OPTPGPLONGIDS, 0 },
+  /*
+  ** .pp
+  ** If set, use 64 bit PGP key IDs. Unset uses the normal 32 bit Key IDs.
+  ** (PGP only)
+  */
+  { "pgp_retainable_sigs", DT_BOOL, R_NONE, OPTPGPRETAINABLESIG, 0 },
+  /*
+  ** .pp
+  ** If set, signed and encrypted messages will consist of nested
+  ** multipart/signed and multipart/encrypted body parts.
+  ** .pp
+  ** This is useful for applications like encrypted and signed mailing
+  ** lists, where the outer layer (multipart/encrypted) can be easily
+  ** removed, while the inner multipart/signed part is retained.
+  ** (PGP only)
+  */
+  { "pgp_show_unusable", DT_BOOL, R_NONE, OPTPGPSHOWUNUSABLE, 1 },
+  /*
+  ** .pp
+  ** If set, mutt will display non-usable keys on the PGP key selection
+  ** menu.  This includes keys which have been revoked, have expired, or
+  ** have been marked as ``disabled'' by the user.
+  ** (PGP only)
+  */
+  { "pgp_sign_as",     DT_STR,  R_NONE, UL &PgpSignAs, 0 },
+  /*
+  ** .pp
+  ** If you have more than one key pair, this option allows you to specify
+  ** which of your private keys to use.  It is recommended that you use the
+  ** keyid form to specify your key (e.g., ``0x00112233'').
+  ** (PGP only)
+  */
+  { "pgp_strict_enc",  DT_BOOL, R_NONE, OPTPGPSTRICTENC, 1 },
+  /*
+  ** .pp
+  ** If set, Mutt will automatically encode PGP/MIME signed messages as
+  ** \fIquoted-printable\fP.  Please note that unsetting this variable may
+  ** lead to problems with non-verifyable PGP signatures, so only change
+  ** this if you know what you are doing.
+  ** (PGP only)
+  */
+  { "pgp_timeout",     DT_NUM,  R_NONE, UL &PgpTimeout, 300 },
+  /*
+  ** .pp
+  ** The number of seconds after which a cached passphrase will expire if
+  ** not used.
+  ** (PGP only)
+  */
+  { "pgp_sort_keys",   DT_SORT|DT_SORT_KEYS, R_NONE, UL &PgpSortKeys, SORT_ADDRESS },
+  /*
+  ** .pp
+  ** Specifies how the entries in the `pgp keys' menu are sorted. The
+  ** following are legal values:
+  ** .pp
+  ** .dl
+  ** .dt address .dd sort alphabetically by user id
+  ** .dt keyid   .dd sort alphabetically by key id
+  ** .dt date    .dd sort by key creation date
+  ** .dt trust   .dd sort by the trust of the key
+  ** .de
+  ** .pp
+  ** If you prefer reverse order of the above values, prefix it with
+  ** `reverse-'.
+  ** (PGP only)
+  */
+  { "pgp_create_traditional", DT_QUAD, R_NONE, OPT_PGPTRADITIONAL, M_NO },
+  /*
+  ** .pp
+  ** This option controls whether Mutt generates old-style inline PGP
+  ** encrypted or signed messages.
+  ** .pp
+  ** Note that PGP/MIME will be used automatically for messages which have
+  ** a character set different from us-ascii, or which consist of more than
+  ** a single MIME part.
+  ** .pp
+  ** Also note that using the old-style PGP message format is \fBstrongly\fP
+  ** \fBdeprecated\fP.
+  ** (PGP only)
+  */
+  { "pgp_auto_traditional", DT_BOOL, R_NONE, OPTPGPAUTOTRAD, 0 },
+  /*
+  ** .pp
+  ** This option causes Mutt to generate an old-style inline PGP
+  ** encrypted or signed message when replying to an old-style
+  ** message, and a PGP/MIME message when replying to a PGP/MIME
+  ** message.  Note that this option is only meaningful when using
+  ** ``$$crypt_replyencrypt'', ``$$crypt_replysign'', or
+  ** ``$$crypt_replysignencrypted''.
+  ** .pp
+  ** Also note that PGP/MIME will be used automatically for messages
+  ** which have a character set different from us-ascii, or which
+  ** consist of more than a single MIME part.
+  ** .pp
+  ** This option overrides ``$$pgp_create_traditional''
+  ** (PGP only)
+  */
+
+  /* XXX Default values! */
+  
+  { "pgp_decode_command",      DT_STR, R_NONE, UL &PgpDecodeCommand, 0},
+  /*
+  ** .pp
+  ** This format strings specifies a command which is used to decode 
+  ** application/pgp attachments.
+  ** .pp
+  ** The PGP command formats have their own set of printf-like sequences:
+  ** .pp
+  ** .dl
+  ** .dt %p .dd Expands to PGPPASSFD=0 when a pass phrase is needed, to an empty
+  **            string otherwise. Note: This may be used with a %? construct.
+  ** .dt %f .dd Expands to the name of a file containing a message.
+  ** .dt %s .dd Expands to the name of a file containing the signature part
+  ** .          of a multipart/signed attachment when verifying it.
+  ** .dt %a .dd The value of $$pgp_sign_as.
+  ** .dt %r .dd One or more key IDs.
+  ** .de
+  ** .pp
+  ** For examples on how to configure these formats for the various versions
+  ** of PGP which are floating around, see the pgp*.rc and gpg.rc files in
+  ** the samples/ subdirectory which has been installed on your system
+  ** alongside the documentation.
+  ** (PGP only)
+  */
+  { "pgp_getkeys_command",     DT_STR, R_NONE, UL &PgpGetkeysCommand, 0},
+  /*
+  ** .pp
+  ** This command is invoked whenever mutt will need public key information.
+  ** %r is the only printf-like sequence used with this format.
+  ** (PGP only)
+  */
+  { "pgp_verify_command",      DT_STR, R_NONE, UL &PgpVerifyCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to verify PGP signatures.
+  ** (PGP only)
+  */
+  { "pgp_decrypt_command",     DT_STR, R_NONE, UL &PgpDecryptCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to decrypt a PGP encrypted message.
+  ** (PGP only)
+  */  
+  { "pgp_clearsign_command",   DT_STR, R_NONE, UL &PgpClearSignCommand, 0 },
+  /*
+  ** .pp
+  ** This format is used to create a old-style "clearsigned" PGP
+  ** message.  Note that the use of this format is \fBstrongly\fP
+  ** \fBdeprecated\fP.
+  ** (PGP only)
+  */
+  { "pgp_sign_command",                DT_STR, R_NONE, UL &PgpSignCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to create the detached PGP signature for a 
+  ** multipart/signed PGP/MIME body part.
+  ** (PGP only)
+  */  
+  { "pgp_encrypt_sign_command",        DT_STR, R_NONE, UL &PgpEncryptSignCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to both sign and encrypt a body part.
+  ** (PGP only)
+  */  
+  { "pgp_encrypt_only_command", DT_STR, R_NONE, UL &PgpEncryptOnlyCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to encrypt a body part without signing it.
+  ** (PGP only)
+  */  
+  { "pgp_import_command",      DT_STR, R_NONE, UL &PgpImportCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to import a key from a message into 
+  ** the user's public key ring.
+  ** (PGP only)
+  */  
+  { "pgp_export_command",      DT_STR, R_NONE, UL &PgpExportCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to export a public key from the user's
+  ** key ring.
+  ** (PGP only)
+  */  
+  { "pgp_verify_key_command",  DT_STR, R_NONE, UL &PgpVerifyKeyCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to verify key information from the key selection
+  ** menu.
+  ** (PGP only)
+  */  
+  { "pgp_list_secring_command",        DT_STR, R_NONE, UL &PgpListSecringCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to list the secret key ring's contents.  The
+  ** output format must be analogous to the one used by 
+  ** gpg --list-keys --with-colons.
+  ** .pp
+  ** This format is also generated by the pgpring utility which comes 
+  ** with mutt.
+  ** (PGP only)
+  */  
+  { "pgp_list_pubring_command", DT_STR, R_NONE, UL &PgpListPubringCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to list the public key ring's contents.  The
+  ** output format must be analogous to the one used by 
+  ** gpg --list-keys --with-colons.
+  ** .pp
+  ** This format is also generated by the pgpring utility which comes 
+  ** with mutt.
+  ** (PGP only)
+  */  
+  { "forward_decrypt", DT_BOOL, R_NONE, OPTFORWDECRYPT, 1 },
+  /*
+  ** .pp
+  ** Controls the handling of encrypted messages when forwarding a message.
+  ** When set, the outer layer of encryption is stripped off.  This
+  ** variable is only used if ``$$mime_forward'' is \fIset\fP and
+  ** ``$$mime_forward_decode'' is \fIunset\fP.
+  ** (PGP only)
+  */
+  { "forw_decrypt",    DT_SYN,  R_NONE, UL "forward_decrypt", 0 },
+  /*
+  */
+  
+  { "smime_timeout",           DT_NUM,  R_NONE, UL &SmimeTimeout, 300 },
+  /*
+  ** .pp
+  ** The number of seconds after which a cached passphrase will expire if
+  ** not used.
+  ** (S/MIME only)
+  */
+  { "smime_encrypt_with",      DT_STR,  R_NONE, UL &SmimeCryptAlg, 0 },
+  /*
+  ** .pp
+  ** This sets the algorithm that should be used for encryption.
+  ** Valid choices are "des", "des3", "rc2-40", "rc2-64", "rc2-128".
+  ** If unset "3des" (TripleDES) is used.
+  ** (S/MIME only)
+  */
+  { "smime_keys",              DT_PATH, R_NONE, UL &SmimeKeys, 0 },
+  /*
+  ** .pp
+  ** Since there is no pubring/secring as with PGP, mutt has to handle
+  ** storage ad retrieval of keys/certs by itself. This is very basic right now,
+  ** and stores keys and certificates in two different directories, both
+  ** named as the hash-value retrieved from OpenSSL. There is an index file
+  ** which contains mailbox-address keyid pair, and which can be manually
+  ** edited. This one points to the location of the private keys.
+  ** (S/MIME only)
+  */
+  { "smime_ca_location",       DT_PATH, R_NONE, UL &SmimeCALocation, 0 },
+  /*
+  ** .pp
+  ** This variable contains the name of either a directory, or a file which
+  ** contains trusted certificates for use with OpenSSL.
+  ** (S/MIME only)
+  */
+  { "smime_certificates",      DT_PATH, R_NONE, UL &SmimeCertificates, 0 },
+  /*
+  ** .pp
+  ** Since there is no pubring/secring as with PGP, mutt has to handle
+  ** storage and retrieval of keys by itself. This is very basic right
+  ** now, and keys and certificates are stored in two different
+  ** directories, both named as the hash-value retrieved from
+  ** OpenSSL. There is an index file which contains mailbox-address
+  ** keyid pairs, and which can be manually edited. This one points to
+  ** the location of the certificates.
+  ** (S/MIME only)
+  */
+  { "smime_decrypt_command",   DT_STR, R_NONE, UL &SmimeDecryptCommand, 0},
+  /*
+  ** .pp
+  ** This format string specifies a command which is used to decrypt
+  ** application/x-pkcs7-mime attachments.
+  ** .pp
+  ** The OpenSSL command formats have their own set of printf-like sequences
+  ** similar to PGP's:
+  ** .pp
+  ** .dl
+  ** .dt %f .dd Expands to the name of a file containing a message.
+  ** .dt %s .dd Expands to the name of a file containing the signature part
+  ** .          of a multipart/signed attachment when verifying it.
+  ** .dt %k .dd The key-pair specified with $$smime_default_key
+  ** .dt %c .dd One or more certificate IDs.
+  ** .dt %a .dd The algorithm used for encryption.
+  ** .dt %C .dd CA location:  Depending on whether $$smime_ca_location
+  ** .          points to a directory or file, this expands to 
+  ** .          "-CApath $$smime_ca_location" or "-CAfile $$smime_ca_location".
+  ** .de
+  ** .pp
+  ** For examples on how to configure these formats, see the smime.rc in
+  ** the samples/ subdirectory which has been installed on your system
+  ** alongside the documentation.
+  ** (S/MIME only)
+  */
+  { "smime_verify_command",    DT_STR, R_NONE, UL &SmimeVerifyCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to verify S/MIME signatures of type multipart/signed.
+  ** (S/MIME only)
+  */
+  { "smime_verify_opaque_command",     DT_STR, R_NONE, UL &SmimeVerifyOpaqueCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to verify S/MIME signatures of type
+  ** application/x-pkcs7-mime.
+  ** (S/MIME only)
+  */
+  { "smime_sign_command",      DT_STR, R_NONE, UL &SmimeSignCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to created S/MIME signatures of type
+  ** multipart/signed, which can be read by all mail clients.
+  ** (S/MIME only)
+  */
+  { "smime_sign_opaque_command",       DT_STR, R_NONE, UL &SmimeSignOpaqueCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to created S/MIME signatures of type
+  ** application/x-pkcs7-signature, which can only be handled by mail
+  ** clients supporting the S/MIME extension.
+  ** (S/MIME only)
+  */
+  { "smime_encrypt_command",   DT_STR, R_NONE, UL &SmimeEncryptCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to create encrypted S/MIME messages.
+  ** (S/MIME only)
+  */
+  { "smime_pk7out_command",    DT_STR, R_NONE, UL &SmimePk7outCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to extract PKCS7 structures of S/MIME signatures,
+  ** in order to extract the public X509 certificate(s).
+  ** (S/MIME only)
+  */
+  { "smime_get_cert_command",  DT_STR, R_NONE, UL &SmimeGetCertCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to extract X509 certificates from a PKCS7 structure.
+  ** (S/MIME only)
+  */
+  { "smime_get_signer_cert_command",   DT_STR, R_NONE, UL &SmimeGetSignerCertCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to extract only the signers X509 certificate from a S/MIME
+  **  signature, so that the certificate's owner may get compared to the email's 
+  ** 'From'-field.
+  ** (S/MIME only)
+  */
+  { "smime_import_cert_command",       DT_STR, R_NONE, UL &SmimeImportCertCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to import a certificate via smime_keys.
+  ** (S/MIME only)
+  */
+  { "smime_get_cert_email_command",    DT_STR, R_NONE, UL &SmimeGetCertEmailCommand, 0},
+  /*
+  ** .pp
+  ** This command is used to extract the mail address(es) used for storing
+  ** X509 certificates, and for verification purposes (to check whether the
+  ** certificate was issued for the sender's mailbox).
+  ** (S/MIME only)
+  */
+  { "smime_sign_as",                   DT_SYN,  R_NONE, UL "smime_default_key", 0 },
+  { "smime_default_key",               DT_STR,  R_NONE, UL &SmimeDefaultKey, 0 },
+  /*
+  ** .pp
+  ** This is the default key-pair to use for signing. This must be set to the
+  ** keyid (the hash-value that OpenSSL generates) to work properly
+  ** (S/MIME only)
+  */
+#if defined(USE_LIBESMTP)
+  { "smtp_auth_username", DT_STR, R_NONE, UL &SmtpAuthUser, 0 },
+  /*
+  ** .pp
+  ** Defines the username to use with SMTP AUTH.  Setting this variable will
+  ** cause mutt to attempt to use SMTP AUTH when sending.
+  */
+  { "smtp_auth_password", DT_STR, R_NONE, UL &SmtpAuthPass, 0 },
+  /*
+  ** .pp
+  ** Defines the password to use with SMTP AUTH.  If ``$$smtp_auth_username''
+  ** is set, but this variable is not, you will be prompted for a password
+  ** when sending.
+  */
+  { "smtp_host", DT_STR, R_NONE, UL &SmtpHost, 0 },
+  /*
+  ** .pp
+  ** Defines the SMTP host which will be used to deliver mail, as opposed
+  ** to invoking the sendmail binary.  Setting this variable overrides the
+  ** value of ``$$sendmail'', and any associated variables.
+  */
+  { "smtp_port", DT_NUM, R_NONE, UL &SmtpPort, 25 },
+  /*
+  ** .pp
+  ** Defines the port that the SMTP host is listening on for mail delivery.
+  ** Must be specified as a number.
+  ** .pp
+  ** Defaults to 25, the standard SMTP port, but RFC 2476-compliant SMTP
+  ** servers will probably desire 587, the mail submission port.
+  */
+#endif
+#if defined(USE_SSL)||defined(USE_NSS)
+# ifndef USE_NSS  
+  { "ssl_starttls", DT_QUAD, R_NONE, OPT_SSLSTARTTLS, M_YES },
+  /*
+  ** .pp
+  ** If set (the default), mutt will attempt to use STARTTLS on servers
+  ** advertising the capability. When unset, mutt will not attempt to
+  ** use STARTTLS regardless of the server's capabilities.
+  */
+# endif  
+  { "certificate_file",        DT_PATH, R_NONE, UL &SslCertFile, 0 },
+  /*
+  ** .pp
+  ** This variable specifies the file where the certificates you trust
+  ** are saved. When an unknown certificate is encountered, you are asked
+  ** if you accept it or not. If you accept it, the certificate can also 
+  ** be saved in this file and further connections are automatically 
+  ** accepted.
+  ** .pp
+  ** You can also manually add CA certificates in this file. Any server
+  ** certificate that is signed with one of these CA certificates are 
+  ** also automatically accepted.
+  ** .pp
+  ** Example: set certificate_file=~/.mutt/certificates
+  */
+  { "ssl_usesystemcerts", DT_BOOL, R_NONE, OPTSSLSYSTEMCERTS, 1 },
+  /*
+  ** .pp
+  ** If set to \fIyes\fP, mutt will use CA certificates in the
+  ** system-wide certificate store when checking if server certificate 
+  ** is signed by a trusted CA.
+  */
+  { "entropy_file",    DT_PATH, R_NONE, UL &SslEntropyFile, 0 },
+  /*
+  ** .pp
+  ** The file which includes random data that is used to initialize SSL
+  ** library functions.
+   */
+  { "ssl_use_sslv2", DT_BOOL, R_NONE, OPTSSLV2, 1 },
+  /*
+  ** .pp
+  ** This variables specifies whether to attempt to use SSLv2 in the
+  ** SSL authentication process.
+  */
+  { "ssl_use_sslv3", DT_BOOL, R_NONE, OPTSSLV3, 1 },
+  /*
+  ** .pp
+  ** This variables specifies whether to attempt to use SSLv3 in the
+  ** SSL authentication process.
+  */
+  { "ssl_use_tlsv1", DT_BOOL, R_NONE, OPTTLSV1, 1 },
+  /*
+  ** .pp
+  ** This variables specifies whether to attempt to use TLSv1 in the
+  ** SSL authentication process.
+  */
+#endif
+
+  { "pipe_split",      DT_BOOL, R_NONE, OPTPIPESPLIT, 0 },
+  /*
+  ** .pp
+  ** Used in connection with the \fIpipe-message\fP command and the ``tag-
+  ** prefix'' operator.  If this variable is unset, when piping a list of
+  ** tagged messages Mutt will concatenate the messages and will pipe them
+  ** as a single folder.  When set, Mutt will pipe the messages one by one.
+  ** In both cases the messages are piped in the current sorted order,
+  ** and the ``$$pipe_sep'' separator is added after each message.
+  */
+  { "pipe_decode",     DT_BOOL, R_NONE, OPTPIPEDECODE, 0 },
+  /*
+  ** .pp
+  ** Used in connection with the \fIpipe-message\fP command.  When unset,
+  ** Mutt will pipe the messages without any preprocessing. When set, Mutt
+  ** will weed headers and will attempt to PGP/MIME decode the messages
+  ** first.
+  */
+  { "pipe_sep",                DT_STR,  R_NONE, UL &PipeSep, UL "\n" },
+  /*
+  ** .pp
+  ** The separator to add between messages when piping a list of tagged
+  ** messages to an external Unix command.
+  */
+#ifdef USE_POP
+  { "pop_authenticators", DT_STR, R_NONE, UL &PopAuthenticators, UL 0 },
+  /*
+  ** .pp
+  ** This is a colon-delimited list of authentication methods mutt may
+  ** attempt to use to log in to an POP server, in the order mutt should
+  ** try them.  Authentication methods are either 'user', 'apop' or any
+  ** SASL mechanism, eg 'digest-md5', 'gssapi' or 'cram-md5'.
+  ** This parameter is case-insensitive. If this parameter is unset
+  ** (the default) mutt will try all available methods, in order from
+  ** most-secure to least-secure.
+  ** .pp
+  ** Example: set pop_authenticators="digest-md5:apop:user"
+  */
+  { "pop_auth_try_all",        DT_BOOL, R_NONE, OPTPOPAUTHTRYALL, 1 },
+  /*
+  ** .pp
+  ** If set, Mutt will try all available methods. When unset, Mutt will
+  ** only fall back to other authentication methods if the previous
+  ** methods are unavailable. If a method is available but authentication
+  ** fails, Mutt will not connect to the POP server.
+  */
+  { "pop_checkinterval", DT_NUM, R_NONE, UL &PopCheckTimeout, 60 },
+  /*
+  ** .pp
+  ** This variable configures how often (in seconds) POP should look for
+  ** new mail.
+  */
+  { "pop_delete",      DT_QUAD, R_NONE, OPT_POPDELETE, M_ASKNO },
+  /*
+  ** .pp
+  ** If set, Mutt will delete successfully downloaded messages from the POP
+  ** server when using the fetch-mail function.  When unset, Mutt will
+  ** download messages but also leave them on the POP server.
+  */
+  { "pop_host",                DT_STR,  R_NONE, UL &PopHost, UL "" },
+  /*
+  ** .pp
+  ** The name of your POP server for the fetch-mail function.  You
+  ** can also specify an alternative port, username and password, ie:
+  ** .pp
+  ** [pop[s]://][username[:password]@]popserver[:port]
+  */
+  { "pop_last",                DT_BOOL, R_NONE, OPTPOPLAST, 0 },
+  /*
+  ** .pp
+  ** If this variable is set, mutt will try to use the "LAST" POP command
+  ** for retrieving only unread messages from the POP server when using
+  ** the fetch-mail function.
+  */
+  { "pop_reconnect",   DT_QUAD, R_NONE, OPT_POPRECONNECT, M_ASKYES },
+  /*
+  ** .pp
+  ** Controls whether or not Mutt will try to reconnect to POP server when
+  ** connection lost.
+  */
+  { "pop_user",                DT_STR,  R_NONE, UL &PopUser, 0 },
+  /*
+  ** .pp
+  ** Your login name on the POP server.
+  ** .pp
+  ** This variable defaults to your user name on the local machine.
+  */
+  { "pop_pass",                DT_STR,  R_NONE, UL &PopPass, UL "" },
+  /*
+  ** .pp
+  ** Specifies the password for your POP account.  If unset, Mutt will
+  ** prompt you for your password when you open POP mailbox.
+  ** \fBWarning\fP: you should only use this option when you are on a
+  ** fairly secure machine, because the superuser can read your muttrc
+  ** even if you are the only one who can read the file.
+  */
+#endif /* USE_POP */
+  { "post_indent_string",DT_STR, R_NONE, UL &PostIndentString, UL "" },
+  /*
+  ** .pp
+  ** Similar to the ``$$attribution'' variable, Mutt will append this
+  ** string after the inclusion of a message which is being replied to.
+  */
+  { "post_indent_str",  DT_SYN,  R_NONE, UL "post_indent_string", 0 },
+  /*
+  */
+#ifdef USE_NNTP
+  { "post_moderated", DT_QUAD, R_NONE, OPT_TOMODERATED, M_ASKYES },
+  /*
+  ** .pp
+  ** If set to \fIyes\fP, Mutt will post article to newsgroup that have
+  ** not permissions to posting (e.g. moderated).  \fBNote:\fP if newsserver
+  ** does not support posting to that newsgroup or totally read-only, that
+  ** posting will not have an effect.
+  */
+#endif
+  { "postpone",                DT_QUAD, R_NONE, OPT_POSTPONE, M_ASKYES },
+  /*
+  ** .pp
+  ** Controls whether or not messages are saved in the ``$$postponed''
+  ** mailbox when you elect not to send immediately.
+  */
+  { "postponed",       DT_PATH, R_NONE, UL &Postponed, UL "~/postponed" },
+  /*
+  ** .pp
+  ** Mutt allows you to indefinitely ``$postpone sending a message'' which
+  ** you are editing.  When you choose to postpone a message, Mutt saves it
+  ** in the mailbox specified by this variable.  Also see the ``$$postpone''
+  ** variable.
+  */
+#ifdef USE_SOCKET
+  { "preconnect",      DT_STR, R_NONE, UL &Preconnect, UL 0},
+  /*
+  ** .pp
+  ** If set, a shell command to be executed if mutt fails to establish
+  ** a connection to the server. This is useful for setting up secure
+  ** connections, e.g. with ssh(1). If the command returns a  nonzero
+  ** status, mutt gives up opening the server. Example:
+  ** .pp
+  ** preconnect="ssh -f -q -L 1234:mailhost.net:143 mailhost.net
+  **                   sleep 20 < /dev/null > /dev/null"
+  ** .pp
+  ** Mailbox 'foo' on mailhost.net can now be reached
+  ** as '{localhost:1234}foo'.
+  ** .pp
+  ** NOTE: For this example to work, you must be able to log in to the
+  ** remote machine without having to enter a password.
+  */
+#endif /* USE_SOCKET */
+  { "print",           DT_QUAD, R_NONE, OPT_PRINT, M_ASKNO },
+  /*
+  ** .pp
+  ** Controls whether or not Mutt asks for confirmation before printing.
+  ** This is useful for people (like me) who accidentally hit ``p'' often.
+  */
+  { "print_command",   DT_PATH, R_NONE, UL &PrintCmd, UL "lpr" },
+  /*
+  ** .pp
+  ** This specifies the command pipe that should be used to print messages.
+  */
+  { "print_cmd",       DT_SYN,  R_NONE, UL "print_command", 0 },
+  /*
+  */
+  { "print_decode",    DT_BOOL, R_NONE, OPTPRINTDECODE, 1 },
+  /*
+  ** .pp
+  ** Used in connection with the print-message command.  If this
+  ** option is set, the message is decoded before it is passed to the
+  ** external command specified by $$print_command.  If this option
+  ** is unset, no processing will be applied to the message when
+  ** printing it.  The latter setting may be useful if you are using
+  ** some advanced printer filter which is able to properly format
+  ** e-mail messages for printing.
+  */
+  { "print_split",     DT_BOOL, R_NONE, OPTPRINTSPLIT,  0 },
+  /*
+  ** .pp
+  ** Used in connection with the print-message command.  If this option
+  ** is set, the command specified by $$print_command is executed once for
+  ** each message which is to be printed.  If this option is unset, 
+  ** the command specified by $$print_command is executed only once, and
+  ** all the messages are concatenated, with a form feed as the message
+  ** separator.
+  ** .pp
+  ** Those who use the \fBenscript\fP(1) program's mail-printing mode will
+  ** most likely want to set this option.
+  */
+  { "prompt_after",    DT_BOOL, R_NONE, OPTPROMPTAFTER, 1 },
+  /*
+  ** .pp
+  ** If you use an \fIexternal\fP ``$$pager'', setting this variable will
+  ** cause Mutt to prompt you for a command when the pager exits rather
+  ** than returning to the index menu.  If unset, Mutt will return to the
+  ** index menu when the external pager exits.
+  */
+  { "query_command",   DT_PATH, R_NONE, UL &QueryCmd, UL "" },
+  /*
+  ** .pp
+  ** This specifies the command that mutt will use to make external address
+  ** queries.  The string should contain a %s, which will be substituted
+  ** with the query string the user types.  See ``$query'' for more
+  ** information.
+  */
+  { "quit",            DT_QUAD, R_NONE, OPT_QUIT, M_YES },
+  /*
+  ** .pp
+  ** This variable controls whether ``quit'' and ``exit'' actually quit
+  ** from mutt.  If it set to yes, they do quit, if it is set to no, they
+  ** have no effect, and if it is set to ask-yes or ask-no, you are
+  ** prompted for confirmation when you try to quit.
+  */
+  { "quote_empty",     DT_BOOL, R_NONE, OPTQUOTEEMPTY, 1 },
+  /*
+  ** .pp
+  ** Controls whether or not empty lines will be quoted using
+  ** ``$indent_string''.
+  */
+  { "quote_quoted",    DT_BOOL, R_NONE, OPTQUOTEQUOTED, 0 },
+  /*
+  ** .pp
+  ** Controls how quoted lines will be quoted. If set, one quote
+  ** character will be added to the end of existing prefix.  Otherwise,
+  ** quoted lines will be prepended by ``$indent_string''.
+  */
+  { "quote_regexp",    DT_RX,   R_PAGER, UL &QuoteRegexp, UL "^([ \t]*[|>:}#])+" },
+  /*
+  ** .pp
+  ** A regular expression used in the internal-pager to determine quoted
+  ** sections of text in the body of a message.
+  ** .pp
+  ** \fBNote:\fP In order to use the \fIquoted\fP\fBx\fP patterns in the
+  ** internal pager, you need to set this to a regular expression that
+  ** matches \fIexactly\fP the quote characters at the beginning of quoted
+  ** lines.
+  */
+  { "read_inc",                DT_NUM,  R_NONE, UL &ReadInc, 10 },
+  /*
+  ** .pp
+  ** If set to a value greater than 0, Mutt will display which message it
+  ** is currently on when reading a mailbox.  The message is printed after
+  ** \fIread_inc\fP messages have been read (e.g., if set to 25, Mutt will
+  ** print a message when it reads message 25, and then again when it gets
+  ** to message 50).  This variable is meant to indicate progress when
+  ** reading large mailboxes which may take some time.
+  ** When set to 0, only a single message will appear before the reading
+  ** the mailbox.
+  ** .pp
+  ** Also see the ``$$write_inc'' variable.
+  */
+  { "read_only",       DT_BOOL, R_NONE, OPTREADONLY, 0 },
+  /*
+  ** .pp
+  ** If set, all folders are opened in read-only mode.
+  */
+  { "realname",                DT_STR,  R_BOTH, UL &Realname, 0 },
+  /*
+  ** .pp
+  ** This variable specifies what "real" or "personal" name should be used
+  ** when sending messages.
+  ** .pp
+  ** By default, this is the GECOS field from /etc/passwd.  Note that this
+  ** variable will \fInot\fP be used when the user has set a real name
+  ** in the $$from variable.
+  */
+  { "recall",          DT_QUAD, R_NONE, OPT_RECALL, M_ASKYES },
+  /*
+  ** .pp
+  ** Controls whether or not you are prompted to recall postponed messages
+  ** when composing a new message.  Also see ``$$postponed''.
+  ** .pp
+  ** Setting this variable to ``yes'' is not generally useful, and thus not
+  ** recommended.
+  */
+  { "record",          DT_PATH, R_NONE, UL &Outbox, UL "" },
+  /*
+  ** .pp
+  ** This specifies the file into which your outgoing messages should be
+  ** appended.  (This is meant as the primary method for saving a copy of
+  ** your messages, but another way to do this is using the ``$my_hdr''
+  ** command to create a \fIBcc:\fP field with your email address in it.)
+  ** .pp
+  ** The value of \fI$$record\fP is overridden by the ``$$force_name'' and
+  ** ``$$save_name'' variables, and the ``$fcc-hook'' command.
+  */
+  { "reply_regexp",    DT_RX,   R_INDEX|R_RESORT, UL &ReplyRegexp, UL "^(re([\\[0-9\\]+])*|aw):[ \t]*" },
+  /*
+  ** .pp
+  ** A regular expression used to recognize reply messages when threading
+  ** and replying. The default value corresponds to the English "Re:" and
+  ** the German "Aw:".
+  */
+  { "reply_self",      DT_BOOL, R_NONE, OPTREPLYSELF, 0 },
+  /*
+  ** .pp
+  ** If unset and you are replying to a message sent by you, Mutt will
+  ** assume that you want to reply to the recipients of that message rather
+  ** than to yourself.
+  */
+  { "reply_to",                DT_QUAD, R_NONE, OPT_REPLYTO, M_ASKYES },
+  /*
+  ** .pp
+  ** If set, Mutt will ask you if you want to use the address listed in the
+  ** Reply-To: header field when replying to a message.  If you answer no,
+  ** it will use the address in the From: header field instead.  This
+  ** option is useful for reading a mailing list that sets the Reply-To:
+  ** header field to the list address and you want to send a private
+  ** message to the author of a message.
+  */
+  { "resolve",         DT_BOOL, R_NONE, OPTRESOLVE, 1 },
+  /*
+  ** .pp
+  ** When set, the cursor will be automatically advanced to the next
+  ** (possibly undeleted) message whenever a command that modifies the
+  ** current message is executed.
+  */
+  { "reverse_alias",   DT_BOOL, R_BOTH, OPTREVALIAS, 0 },
+  /*
+  ** .pp
+  ** This variable controls whether or not Mutt will display the "personal"
+  ** name from your aliases in the index menu if it finds an alias that
+  ** matches the message's sender.  For example, if you have the following
+  ** alias:
+  ** .pp
+  ** .ts
+  **  alias juser abd30425@somewhere.net (Joe User)
+  ** .te
+  ** .pp
+  ** and then you receive mail which contains the following header:
+  ** .pp
+  ** .ts
+  **  From: abd30425@somewhere.net
+  ** .te
+  ** .pp
+  ** It would be displayed in the index menu as ``Joe User'' instead of
+  ** ``abd30425@somewhere.net.''  This is useful when the person's e-mail
+  ** address is not human friendly (like CompuServe addresses).
+  */
+  { "reverse_name",    DT_BOOL, R_BOTH, OPTREVNAME, 0 },
+  /*
+  ** .pp
+  ** It may sometimes arrive that you receive mail to a certain machine,
+  ** move the messages to another machine, and reply to some the messages
+  ** from there.  If this variable is set, the default \fIFrom:\fP line of
+  ** the reply messages is built using the address where you received the
+  ** messages you are replying to.  If the variable is unset, the
+  ** \fIFrom:\fP line will use your address on the current machine.
+  */
+  { "reverse_realname",        DT_BOOL, R_BOTH, OPTREVREAL, 1 },
+  /*
+  ** .pp
+  ** This variable fine-tunes the behaviour of the $reverse_name feature.
+  ** When it is set, mutt will use the address from incoming messages as-is,
+  ** possibly including eventual real names.  When it is unset, mutt will
+  ** override any such real names with the setting of the $realname variable.
+  */
+  { "rfc2047_parameters", DT_BOOL, R_NONE, OPTRFC2047PARAMS, 0 },
+  /*
+  ** .pp
+  ** When this variable is set, Mutt will decode RFC-2047-encoded MIME 
+  ** parameters. You want to set this variable when mutt suggests you
+  ** to save attachments to files named like this: 
+  ** =?iso-8859-1?Q?file=5F=E4=5F991116=2Ezip?=
+  ** .pp
+  ** When this variable is set interactively, the change doesn't have
+  ** the desired effect before you have changed folders.
+  ** .pp
+  ** Note that this use of RFC 2047's encoding is explicitly,
+  ** prohibited by the standard, but nevertheless encountered in the
+  ** wild.
+  ** Also note that setting this parameter will \fInot\fP have the effect 
+  ** that mutt \fIgenerates\fP this kind of encoding.  Instead, mutt will
+  ** unconditionally use the encoding specified in RFC 2231.
+  */
+  { "save_address",    DT_BOOL, R_NONE, OPTSAVEADDRESS, 0 },
+  /*
+  ** .pp
+  ** If set, mutt will take the sender's full address when choosing a
+  ** default folder for saving a mail. If ``$$save_name'' or ``$$force_name''
+  ** is set too, the selection of the fcc folder will be changed as well.
+  */
+  { "save_empty",      DT_BOOL, R_NONE, OPTSAVEEMPTY, 1 },
+  /*
+  ** .pp
+  ** When unset, mailboxes which contain no saved messages will be removed
+  ** when closed (the exception is ``$$spoolfile'' which is never removed).
+  ** If set, mailboxes are never removed.
+  ** .pp
+  ** \fBNote:\fP This only applies to mbox and MMDF folders, Mutt does not
+  ** delete MH and Maildir directories.
+  */
+  { "save_name",       DT_BOOL, R_NONE, OPTSAVENAME, 0 },
+  /*
+  ** .pp
+  ** This variable controls how copies of outgoing messages are saved.
+  ** When set, a check is made to see if a mailbox specified by the
+  ** recipient address exists (this is done by searching for a mailbox in
+  ** the ``$$folder'' directory with the \fIusername\fP part of the
+  ** recipient address).  If the mailbox exists, the outgoing message will
+  ** be saved to that mailbox, otherwise the message is saved to the
+  ** ``$$record'' mailbox.
+  ** .pp
+  ** Also see the ``$$force_name'' variable.
+  */
+  { "score",           DT_BOOL, R_NONE, OPTSCORE, 1 },
+  /*
+  ** .pp
+  ** When this variable is \fIunset\fP, scoring is turned off.  This can
+  ** be useful to selectively disable scoring for certain folders when the
+  ** ``$$score_threshold_delete'' variable and friends are used.
+  **
+  */
+  { "score_threshold_delete", DT_NUM, R_NONE, UL &ScoreThresholdDelete, UL -1 },
+  /*
+  ** .pp
+  ** Messages which have been assigned a score equal to or lower than the value
+  ** of this variable are automatically marked for deletion by mutt.  Since
+  ** mutt scores are always greater than or equal to zero, the default setting
+  ** of this variable will never mark a message for deletion.
+  */
+  { "score_threshold_flag", DT_NUM, R_NONE, UL &ScoreThresholdFlag, 9999 },
+  /* 
+  ** .pp
+  ** Messages which have been assigned a score greater than or equal to this 
+  ** variable's value are automatically marked "flagged".
+  */
+  { "score_threshold_read", DT_NUM, R_NONE, UL &ScoreThresholdRead, UL -1 },
+  /*
+  ** .pp
+  ** Messages which have been assigned a score equal to or lower than the value
+  ** of this variable are automatically marked as read by mutt.  Since
+  ** mutt scores are always greater than or equal to zero, the default setting
+  ** of this variable will never mark a message read.
+  */
+  { "send_charset",    DT_STR,  R_NONE, UL &SendCharset, UL "us-ascii:iso-8859-1:utf-8" },
+  /*
+  ** .pp
+  ** A list of character sets for outgoing messages. Mutt will use the
+  ** first character set into which the text can be converted exactly.
+  ** If your ``$$charset'' is not iso-8859-1 and recipients may not
+  ** understand UTF-8, it is advisable to include in the list an
+  ** appropriate widely used standard character set (such as
+  ** iso-8859-2, koi8-r or iso-2022-jp) either instead of or after
+  ** "iso-8859-1".
+  */
+  { "sendmail",                DT_PATH, R_NONE, UL &Sendmail, UL SENDMAIL " -oem -oi" },
+  /*
+  ** .pp
+  ** Specifies the program and arguments used to deliver mail sent by Mutt.
+  ** Mutt expects that the specified program interprets additional
+  ** arguments as recipient addresses.
+  */
+  { "sendmail_wait",   DT_NUM,  R_NONE, UL &SendmailWait, 0 },
+  /*
+  ** .pp
+  ** Specifies the number of seconds to wait for the ``$$sendmail'' process
+  ** to finish before giving up and putting delivery in the background.
+  ** .pp
+  ** Mutt interprets the value of this variable as follows:
+  ** .dl
+  ** .dt >0 .dd number of seconds to wait for sendmail to finish before continuing
+  ** .dt 0  .dd wait forever for sendmail to finish
+  ** .dt <0 .dd always put sendmail in the background without waiting
+  ** .de
+  ** .pp
+  ** Note that if you specify a value other than 0, the output of the child
+  ** process will be put in a temporary file.  If there is some error, you
+  ** will be informed as to where to find the output.
+  */
+  { "shell",           DT_PATH, R_NONE, UL &Shell, 0 },
+  /*
+  ** .pp
+  ** Command to use when spawning a subshell.  By default, the user's login
+  ** shell from /etc/passwd is used.
+  */
+#ifdef USE_NNTP
+  { "save_unsubscribed",DT_BOOL, R_NONE, OPTSAVEUNSUB, 0 },
+  /*
+  ** .pp
+  ** When \fIset\fP, info about unsubscribed newsgroups will be saved into
+  ** ``newsrc'' file and into cache.
+  */
+  { "show_new_news",  DT_BOOL, R_NONE, OPTSHOWNEWNEWS, 1 },
+  /*
+  ** .pp
+  ** If \fIset\fP, newsserver will be asked for new newsgroups on entering
+  ** the browser.  Otherwise, it will be done only once for a newsserver.
+  ** Also controls whether or not number of new articles of subscribed
+  ** newsgroups will be then checked.
+  */
+  { "show_only_unread",  DT_BOOL, R_NONE, OPTSHOWONLYUNREAD, 0 },
+  /*
+  ** .pp
+  ** If \fIset\fP, only subscribed newsgroups that contain unread articles
+  ** will be displayed in browser.
+  */
+#endif
+  { "sig_dashes",      DT_BOOL, R_NONE, OPTSIGDASHES, 1 },
+  /*
+  ** .pp
+  ** If set, a line containing ``-- '' will be inserted before your
+  ** ``$$signature''.  It is \fBstrongly\fP recommended that you not unset
+  ** this variable unless your ``signature'' contains just your name.  The
+  ** reason for this is because many software packages use ``-- \n'' to
+  ** detect your signature.  For example, Mutt has the ability to highlight
+  ** the signature in a different color in the builtin pager.
+  */
+  { "sig_on_top",      DT_BOOL, R_NONE, OPTSIGONTOP, 0},
+  /*
+  ** .pp
+  ** If set, the signature will be included before any quoted or forwarded
+  ** text.  It is \fBstrongly\fP recommended that you do not set this variable
+  ** unless you really know what you are doing, and are prepared to take
+  ** some heat from netiquette guardians.
+  */
+  { "signature",       DT_PATH, R_NONE, UL &Signature, UL "~/.signature" },
+  /*
+  ** .pp
+  ** Specifies the filename of your signature, which is appended to all
+  ** outgoing messages.   If the filename ends with a pipe (``|''), it is
+  ** assumed that filename is a shell command and input should be read from
+  ** its stdout.
+  */
+  { "simple_search",   DT_STR,  R_NONE, UL &SimpleSearch, UL "~f %s | ~s %s" },
+  /*
+  ** .pp
+  ** Specifies how Mutt should expand a simple search into a real search
+  ** pattern.  A simple search is one that does not contain any of the ~
+  ** operators.  See ``$patterns'' for more information on search patterns.
+  ** .pp
+  ** For example, if you simply type joe at a search or limit prompt, Mutt
+  ** will automatically expand it to the value specified by this variable.
+  ** For the default value it would be:
+  ** .pp
+  ** ~f joe | ~s joe
+  */
+  { "smart_wrap",      DT_BOOL, R_PAGER, OPTWRAP, 1 },
+  /*
+  ** .pp
+  ** Controls the display of lines longer than the screen width in the
+  ** internal pager. If set, long lines are wrapped at a word boundary.  If
+  ** unset, lines are simply wrapped at the screen edge. Also see the
+  ** ``$$markers'' variable.
+  */
+  { "smileys",         DT_RX,   R_PAGER, UL &Smileys, UL "(>From )|(:[-^]?[][)(><}{|/DP])" },
+  /*
+  ** .pp
+  ** The \fIpager\fP uses this variable to catch some common false
+  ** positives of ``$$quote_regexp'', most notably smileys in the beginning
+  ** of a line
+  */
+  { "sleep_time",      DT_NUM, R_NONE, UL &SleepTime, 1 },
+  /*
+  ** .pp
+  ** Specifies time, in seconds, to pause while displaying certain informational
+  ** messages, while moving from folder to folder and after expunging
+  ** messages from the current folder.  The default is to pause one second, so 
+  ** a value of zero for this option suppresses the pause.
+  */
+  { "sort",            DT_SORT, R_INDEX|R_RESORT, UL &Sort, SORT_DATE },
+  /*
+  ** .pp
+  ** Specifies how to sort messages in the \fIindex\fP menu.  Valid values
+  ** are:
+  ** .pp
+  ** .ts
+  ** .  date or date-sent
+  ** .  date-received
+  ** .  from
+  ** .  mailbox-order (unsorted)
+  ** .  score
+  ** .  size
+  ** .  subject
+  ** .  threads
+  ** .  to
+  ** .te
+  ** .pp
+  ** You may optionally use the reverse- prefix to specify reverse sorting
+  ** order (example: set sort=reverse-date-sent).
+  */
+  { "sort_alias",      DT_SORT|DT_SORT_ALIAS,  R_NONE, UL &SortAlias, SORT_ALIAS },
+  /*
+  ** .pp
+  ** Specifies how the entries in the `alias' menu are sorted.  The
+  ** following are legal values:
+  ** .pp
+  ** .ts
+  ** .  address (sort alphabetically by email address)
+  ** .  alias (sort alphabetically by alias name)
+  ** .  unsorted (leave in order specified in .muttrc)
+  ** .te
+  */
+  { "sort_aux",                DT_SORT|DT_SORT_AUX, R_INDEX|R_RESORT_BOTH, UL &SortAux, SORT_DATE },
+  /*
+  ** .pp
+  ** When sorting by threads, this variable controls how threads are sorted
+  ** in relation to other threads, and how the branches of the thread trees
+  ** are sorted.  This can be set to any value that ``$$sort'' can, except
+  ** threads (in that case, mutt will just use date-sent).  You can also
+  ** specify the last- prefix in addition to the reverse- prefix, but last-
+  ** must come after reverse-.  The last- prefix causes messages to be
+  ** sorted against its siblings by which has the last descendant, using
+  ** the rest of sort_aux as an ordering.  For instance, set sort_aux=last-
+  ** date-received would mean that if a new message is received in a
+  ** thread, that thread becomes the last one displayed (or the first, if
+  ** you have set sort=reverse-threads.) Note: For reversed ``$$sort''
+  ** order $$sort_aux is reversed again (which is not the right thing to do,
+  ** but kept to not break any existing configuration setting).
+  */
+  { "sort_browser",    DT_SORT|DT_SORT_BROWSER, R_NONE, UL &BrowserSort, SORT_SUBJECT },
+  /*
+  ** .pp
+  ** Specifies how to sort entries in the file browser.  By default, the
+  ** entries are sorted alphabetically.  Valid values:
+  ** .pp
+  ** .ts
+  ** .  alpha (alphabetically)
+  ** .  date
+  ** .  size
+  ** .  unsorted
+  ** .te
+  ** .pp
+  ** You may optionally use the reverse- prefix to specify reverse sorting
+  ** order (example: set sort_browser=reverse-date).
+  */
+  { "sort_re",         DT_BOOL, R_INDEX|R_RESORT|R_RESORT_INIT, OPTSORTRE, 1 },
+  /*
+  ** .pp
+  ** This variable is only useful when sorting by threads with
+  ** ``$$strict_threads'' unset.  In that case, it changes the heuristic
+  ** mutt uses to thread messages by subject.  With sort_re set, mutt will
+  ** only attach a message as the child of another message by subject if
+  ** the subject of the child message starts with a substring matching the
+  ** setting of ``$$reply_regexp''.  With sort_re unset, mutt will attach
+  ** the message whether or not this is the case, as long as the
+  ** non-``$$reply_regexp'' parts of both messages are identical.
+  */
+  { "spoolfile",       DT_PATH, R_NONE, UL &Spoolfile, 0 },
+  /*
+  ** .pp
+  ** If your spool mailbox is in a non-default place where Mutt cannot find
+  ** it, you can specify its location with this variable.  Mutt will
+  ** automatically set this variable to the value of the environment
+  ** variable $$$MAIL if it is not set.
+  */
+  { "status_chars",    DT_STR,  R_BOTH, UL &StChars, UL "-*%A" },
+  /*
+  ** .pp
+  ** Controls the characters used by the "%r" indicator in
+  ** ``$$status_format''. The first character is used when the mailbox is
+  ** unchanged. The second is used when the mailbox has been changed, and
+  ** it needs to be resynchronized. The third is used if the mailbox is in
+  ** read-only mode, or if the mailbox will not be written when exiting
+  ** that mailbox (You can toggle whether to write changes to a mailbox
+  ** with the toggle-write operation, bound by default to "%"). The fourth
+  ** is used to indicate that the current folder has been opened in attach-
+  ** message mode (Certain operations like composing a new mail, replying,
+  ** forwarding, etc. are not permitted in this mode).
+  */
+  { "status_format",   DT_STR,  R_BOTH, UL &Status, UL "-%r-Mutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---" },
+  /*
+  ** .pp
+  ** Controls the format of the status line displayed in the \fIindex\fP
+  ** menu.  This string is similar to ``$$index_format'', but has its own
+  ** set of printf()-like sequences:
+  ** .pp
+  ** .dl
+  ** .dt %b  .dd number of mailboxes with new mail *
+  ** .dt %d  .dd number of deleted messages *
+  ** .dt %f  .dd the full pathname of the current mailbox
+  ** .dt %F  .dd number of flagged messages *
+  ** .dt %h  .dd local hostname
+  ** .dt %l  .dd size (in bytes) of the current mailbox *
+  ** .dt %L  .dd size (in bytes) of the messages shown 
+  **             (i.e., which match the current limit) *
+  ** .dt %m  .dd the number of messages in the mailbox *
+  ** .dt %M  .dd the number of messages shown (i.e., which match the current limit) *
+  ** .dt %n  .dd number of new messages in the mailbox *
+  ** .dt %o  .dd number of old unread messages
+  ** .dt %p  .dd number of postponed messages *
+  ** .dt %P  .dd percentage of the way through the index
+  ** .dt %r  .dd modified/read-only/won't-write/attach-message indicator,
+  **             according to $$status_chars
+  ** .dt %s  .dd current sorting mode ($$sort)
+  ** .dt %S  .dd current aux sorting method ($$sort_aux)
+  ** .dt %t  .dd number of tagged messages *
+  ** .dt %u  .dd number of unread messages *
+  ** .dt %v  .dd Mutt version string
+  ** .dt %V  .dd currently active limit pattern, if any *
+  ** .dt %>X .dd right justify the rest of the string and pad with "X"
+  ** .dt %|X .dd pad to the end of the line with "X"
+  ** .de
+  ** .pp
+  ** * = can be optionally printed if nonzero
+  ** .pp
+  ** Some of the above sequences can be used to optionally print a string
+  ** if their value is nonzero.  For example, you may only want to see the
+  ** number of flagged messages if such messages exist, since zero is not
+  ** particularly meaningful.  To optionally print a string based upon one
+  ** of the above sequences, the following construct is used
+  ** .pp
+  **  %?<sequence_char>?<optional_string>?
+  ** .pp
+  ** where \fIsequence_char\fP is a character from the table above, and
+  ** \fIoptional_string\fP is the string you would like printed if
+  ** \fIstatus_char\fP is nonzero.  \fIoptional_string\fP \fBmay\fP contain
+  ** other sequence as well as normal text, but you may \fBnot\fP nest
+  ** optional strings.
+  ** .pp
+  ** Here is an example illustrating how to optionally print the number of
+  ** new messages in a mailbox:
+  ** %?n?%n new messages.?
+  ** .pp
+  ** Additionally you can switch between two strings, the first one, if a
+  ** value is zero, the second one, if the value is nonzero, by using the
+  ** following construct:
+  ** %?<sequence_char>?<if_string>&<else_string>?
+  ** .pp
+  ** You can additionally force the result of any printf-like sequence to
+  ** be lowercase by prefixing the sequence character with an underscore
+  ** (_) sign.  For example, if you want to display the local hostname in
+  ** lowercase, you would use:
+  ** %_h
+  ** .pp
+  ** If you prefix the sequence character with a colon (:) character, mutt
+  ** will replace any dots in the expansion by underscores. This might be helpful 
+  ** with IMAP folders that don't like dots in folder names.
+  */
+  { "status_on_top",   DT_BOOL, R_BOTH, OPTSTATUSONTOP, 0 },
+  /*
+  ** .pp
+  ** Setting this variable causes the ``status bar'' to be displayed on
+  ** the first line of the screen rather than near the bottom.
+  */
+  { "strict_threads",  DT_BOOL, R_RESORT|R_RESORT_INIT|R_INDEX, OPTSTRICTTHREADS, 0 },
+  /*
+  ** .pp
+  ** If set, threading will only make use of the ``In-Reply-To'' and
+  ** ``References'' fields when you ``$$sort'' by message threads.  By
+  ** default, messages with the same subject are grouped together in
+  ** ``pseudo threads.''  This may not always be desirable, such as in a
+  ** personal mailbox where you might have several unrelated messages with
+  ** the subject ``hi'' which will get grouped together.
+  */
+  { "suspend",         DT_BOOL, R_NONE, OPTSUSPEND, 1 },
+  /*
+  ** .pp
+  ** When \fIunset\fP, mutt won't stop when the user presses the terminal's
+  ** \fIsusp\fP key, usually ``control-Z''. This is useful if you run mutt
+  ** inside an xterm using a command like xterm -e mutt.
+  */
+  { "text_flowed",     DT_BOOL, R_NONE, OPTTEXTFLOWED,  0 },
+  /*
+  ** .pp
+  ** When set, mutt will generate text/plain; format=flowed attachments.
+  ** This format is easier to handle for some mailing software, and generally
+  ** just looks like ordinary text.  To actually make use of this format's 
+  ** features, you'll need support in your editor.
+  ** .pp
+  ** Note that $$indent_string is ignored when this option is set.
+  */
+  { "thread_received", DT_BOOL, R_RESORT|R_RESORT_INIT|R_INDEX, OPTTHREADRECEIVED, 0 },
+  /*
+  ** .pp
+  ** When set, mutt uses the date received rather than the date sent
+  ** to thread messages by subject.
+  */
+  { "thorough_search", DT_BOOL, R_NONE, OPTTHOROUGHSRC, 0 },
+  /*
+  ** .pp
+  ** Affects the \fI~b\fP and \fI~h\fP search operations described in
+  ** section ``$patterns'' above.  If set, the headers and attachments of
+  ** messages to be searched are decoded before searching.  If unset,
+  ** messages are searched as they appear in the folder.
+  */
+  { "tilde",           DT_BOOL, R_PAGER, OPTTILDE, 0 },
+  /*
+  ** .pp
+  ** When set, the internal-pager will pad blank lines to the bottom of the
+  ** screen with a tilde (~).
+  */
+  { "timeout",         DT_NUM,  R_NONE, UL &Timeout, 600 },
+  /*
+  ** .pp
+  ** This variable controls the \fInumber of seconds\fP Mutt will wait
+  ** for a key to be pressed in the main menu before timing out and
+  ** checking for new mail.  A value of zero or less will cause Mutt
+  ** to never time out.
+  */
+  { "tmpdir",          DT_PATH, R_NONE, UL &Tempdir, 0 },
+  /*
+  ** .pp
+  ** This variable allows you to specify where Mutt will place its
+  ** temporary files needed for displaying and composing messages.  If
+  ** this variable is not set, the environment variable TMPDIR is
+  ** used.  If TMPDIR is not set then "/tmp" is used.
+  */
+  { "to_chars",                DT_STR,  R_BOTH, UL &Tochars, UL " +TCFL" },
+  /*
+  ** .pp
+  ** Controls the character used to indicate mail addressed to you.  The
+  ** first character is the one used when the mail is NOT addressed to your
+  ** address (default: space).  The second is used when you are the only
+  ** recipient of the message (default: +).  The third is when your address
+  ** appears in the TO header field, but you are not the only recipient of
+  ** the message (default: T).  The fourth character is used when your
+  ** address is specified in the CC header field, but you are not the only
+  ** recipient.  The fifth character is used to indicate mail that was sent
+  ** by \fIyou\fP.  The sixth character is used to indicate when a mail
+  ** was sent to a mailing-list you subscribe to (default: L).
+  */
+  { "trash",           DT_PATH, R_NONE, UL &TrashPath, 0 },
+  /*
+  ** .pp
+  ** If set, this variable specifies the path of the trash folder where the
+  ** mails marked for deletion will be moved, instead of being irremediably
+  ** purged.
+  ** .pp
+  ** NOTE: When you delete a message in the trash folder, it is really
+  ** deleted, so that you have a way to clean the trash.
+  */
+#ifdef USE_SOCKET
+  { "tunnel",            DT_STR, R_NONE, UL &Tunnel, UL 0 },
+  /*
+  ** .pp
+  ** Setting this variable will cause mutt to open a pipe to a command
+  ** instead of a raw socket. You may be able to use this to set up
+  ** preauthenticated connections to your IMAP/POP3 server. Example:
+  ** .pp
+  ** tunnel="ssh -q mailhost.net /usr/local/libexec/imapd"
+  ** .pp
+  ** NOTE: For this example to work you must be able to log in to the remote
+  ** machine without having to enter a password.
+  */
+#endif
+  { "use_8bitmime",    DT_BOOL, R_NONE, OPTUSE8BITMIME, 0 },
+  /*
+  ** .pp
+  ** \fBWarning:\fP do not set this variable unless you are using a version
+  ** of sendmail which supports the -B8BITMIME flag (such as sendmail
+  ** 8.8.x) or you may not be able to send mail.
+  ** .pp
+  ** When \fIset\fP, Mutt will invoke ``$$sendmail'' with the -B8BITMIME
+  ** flag when sending 8-bit messages to enable ESMTP negotiation.
+  */
+  { "use_domain",      DT_BOOL, R_NONE, OPTUSEDOMAIN, 1 },
+  /*
+  ** .pp
+  ** When set, Mutt will qualify all local addresses (ones without the
+  ** @host portion) with the value of ``$$hostname''.  If \fIunset\fP, no
+  ** addresses will be qualified.
+  */
+  { "use_from",                DT_BOOL, R_NONE, OPTUSEFROM, 1 },
+  /*
+  ** .pp
+  ** When \fIset\fP, Mutt will generate the `From:' header field when
+  ** sending messages.  If \fIunset\fP, no `From:' header field will be
+  ** generated unless the user explicitly sets one using the ``$my_hdr''
+  ** command.
+  */
+#ifdef HAVE_GETADDRINFO
+  { "use_ipv6",                DT_BOOL, R_NONE, OPTUSEIPV6, 1},
+  /*
+  ** .pp
+  ** When \fIset\fP, Mutt will look for IPv6 addresses of hosts it tries to
+  ** contact.  If this option is unset, Mutt will restrict itself to IPv4 addresses.
+  ** Normally, the default should work.
+  */
+#endif /* HAVE_GETADDRINFO */
+  { "user_agent",      DT_BOOL, R_NONE, OPTXMAILER, 1},
+  /*
+  ** .pp
+  ** When \fIset\fP, mutt will add a "User-Agent" header to outgoing
+  ** messages, indicating which version of mutt was used for composing
+  ** them.
+  */
+  { "visual",          DT_PATH, R_NONE, UL &Visual, 0 },
+  /*
+  ** .pp
+  ** Specifies the visual editor to invoke when the \fI~v\fP command is
+  ** given in the builtin editor.
+  */
+  { "wait_key",                DT_BOOL, R_NONE, OPTWAITKEY, 1 },
+  /*
+  ** .pp
+  ** Controls whether Mutt will ask you to press a key after \fIshell-
+  ** escape\fP, \fIpipe-message\fP, \fIpipe-entry\fP, \fIprint-message\fP,
+  ** and \fIprint-entry\fP commands.
+  ** .pp
+  ** It is also used when viewing attachments with ``$auto_view'', provided
+  ** that the corresponding mailcap entry has a \fIneedsterminal\fP flag,
+  ** and the external program is interactive.
+  ** .pp
+  ** When set, Mutt will always ask for a key. When unset, Mutt will wait
+  ** for a key only if the external command returned a non-zero status.
+  */
+  { "weed",            DT_BOOL, R_NONE, OPTWEED, 1 },
+  /*
+  ** .pp
+  ** When set, mutt will weed headers when when displaying, forwarding,
+  ** printing, or replying to messages.
+  */
+  { "wrap_search",     DT_BOOL, R_NONE, OPTWRAPSEARCH, 1 },
+  /*
+  ** .pp
+  ** Controls whether searches wrap around the end of the mailbox.
+  ** .pp
+  ** When set, searches will wrap around the first (or last) message. When
+  ** unset, searches will not wrap.
+  */
+  { "wrapmargin",      DT_NUM,  R_PAGER, UL &WrapMargin, 0 },
+  /*
+  ** .pp
+  ** Controls the size of the margin remaining at the right side of
+  ** the terminal when mutt's pager does smart wrapping.
+  */
+  { "write_inc",       DT_NUM,  R_NONE, UL &WriteInc, 10 },
+  /*
+  ** .pp
+  ** When writing a mailbox, a message will be printed every
+  ** \fIwrite_inc\fP messages to indicate progress.  If set to 0, only a
+  ** single message will be displayed before writing a mailbox.
+  ** .pp
+  ** Also see the ``$$read_inc'' variable.
+  */
+  { "write_bcc",       DT_BOOL, R_NONE, OPTWRITEBCC, 1},
+  /*
+  ** .pp
+  ** Controls whether mutt writes out the Bcc header when preparing
+  ** messages to be sent.  Exim users may wish to use this.
+  */
+#ifdef USE_NNTP
+  { "x_comment_to",   DT_BOOL, R_NONE, OPTXCOMMENTTO, 0 },
+  /*
+  ** .pp
+  ** If \fIset\fP, Mutt will add ``X-Comment-To:'' field (that contains full
+  ** name of original article author) to article that followuped to newsgroup.
+  */
+#endif
+  /*--*/
+  { NULL }
+};
+
+const struct mapping_t SortMethods[] = {
+  { "date",            SORT_DATE },
+  { "date-sent",       SORT_DATE },
+  { "date-received",   SORT_RECEIVED },
+  { "mailbox-order",   SORT_ORDER },
+  { "subject",         SORT_SUBJECT },
+  { "from",            SORT_FROM },
+  { "size",            SORT_SIZE },
+  { "threads",         SORT_THREADS },
+  { "to",              SORT_TO },
+  { "score",           SORT_SCORE },
+  { NULL,              0 }
+};
+
+/* same as SortMethods, but with "threads" replaced by "date" */
+
+const struct mapping_t SortAuxMethods[] = {
+  { "date",            SORT_DATE },
+  { "date-sent",       SORT_DATE },
+  { "date-received",   SORT_RECEIVED },
+  { "mailbox-order",   SORT_ORDER },
+  { "subject",         SORT_SUBJECT },
+  { "from",            SORT_FROM },
+  { "size",            SORT_SIZE },
+  { "threads",         SORT_DATE },    /* note: sort_aux == threads
+                                        * isn't possible. 
+                                        */
+  { "to",              SORT_TO },
+  { "score",           SORT_SCORE },
+  { NULL,              0 }
+};
+  
+
+const struct mapping_t SortBrowserMethods[] = {
+  { "alpha",   SORT_SUBJECT },
+  { "date",    SORT_DATE },
+  { "size",    SORT_SIZE },
+  { "unsorted",        SORT_ORDER },
+  { NULL }
+};
+
+const struct mapping_t SortAliasMethods[] = {
+  { "alias",   SORT_ALIAS },
+  { "address", SORT_ADDRESS },
+  { "unsorted", SORT_ORDER },
+  { NULL }
+};
+
+const struct mapping_t SortKeyMethods[] = {
+  { "address", SORT_ADDRESS },
+  { "date",    SORT_DATE },
+  { "keyid",   SORT_KEYID },
+  { "trust",   SORT_TRUST },
+  { NULL }
+};
+
+
+/* functions used to parse commands in a rc file */
+
+static int parse_list (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_rx_list (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_unlist (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_rx_unlist (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+
+static int parse_unlists (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_alias (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_unalias (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_ignore (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_unignore (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_source (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_set (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_my_hdr (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_unmy_hdr (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_subscribe (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+
+struct command_t
+{
+  char *name;
+  int (*func) (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+  unsigned long data;
+};
+
+struct command_t Commands[] = {
+  { "alternates",      parse_rx_list,          UL &Alternates },
+  { "unalternates",    parse_rx_unlist,        UL &Alternates },
+#ifdef USE_SOCKET
+  { "account-hook",     mutt_parse_hook,        M_ACCOUNTHOOK },
+#endif
+  { "alias",           parse_alias,            0 },
+  { "auto_view",       parse_list,             UL &AutoViewList },
+  { "alternative_order",       parse_list,     UL &AlternativeOrderList},
+  { "bind",            mutt_parse_bind,        0 },
+  { "charset-hook",    mutt_parse_hook,        M_CHARSETHOOK },
+#ifdef HAVE_COLOR
+  { "color",           mutt_parse_color,       0 },
+  { "uncolor",         mutt_parse_uncolor,     0 },
+#endif
+  { "exec",            mutt_parse_exec,        0 },
+  { "fcc-hook",                mutt_parse_hook,        M_FCCHOOK },
+  { "fcc-save-hook",   mutt_parse_hook,        M_FCCHOOK | M_SAVEHOOK },
+  { "folder-hook",     mutt_parse_hook,        M_FOLDERHOOK },
+  { "hdr_order",       parse_list,             UL &HeaderOrderList },
+#ifdef HAVE_ICONV
+  { "iconv-hook",      mutt_parse_hook,        M_ICONVHOOK }, 
+#endif
+  { "ignore",          parse_ignore,           0 },
+  { "lists",           parse_rx_list,          UL &MailLists },
+  { "macro",           mutt_parse_macro,       0 },
+  { "mailboxes",       mutt_parse_mailboxes,   M_MAILBOXES },
+  { "unmailboxes",     mutt_parse_mailboxes,   M_UNMAILBOXES },
+  { "message-hook",    mutt_parse_hook,        M_MESSAGEHOOK },
+  { "mbox-hook",       mutt_parse_hook,        M_MBOXHOOK },
+  { "mime_lookup",     parse_list,     UL &MimeLookupList },
+  { "unmime_lookup",   parse_unlist,   UL &MimeLookupList },
+  { "mono",            mutt_parse_mono,        0 },
+  { "my_hdr",          parse_my_hdr,           0 },
+  { "pgp-hook",                mutt_parse_hook,        M_CRYPTHOOK },
+  { "crypt-hook",      mutt_parse_hook,        M_CRYPTHOOK },
+  { "push",            mutt_parse_push,        0 },
+  { "reply-hook",      mutt_parse_hook,        M_REPLYHOOK },
+  { "reset",           parse_set,              M_SET_RESET },
+  { "save-hook",       mutt_parse_hook,        M_SAVEHOOK },
+  { "score",           mutt_parse_score,       0 },
+  { "send-hook",       mutt_parse_hook,        M_SENDHOOK },
+  { "set",             parse_set,              0 },
+  { "source",          parse_source,           0 },
+  { "subscribe",       parse_subscribe,        0 },
+  { "toggle",          parse_set,              M_SET_INV },
+  { "unalias",         parse_unalias,          0 },
+  { "unalternative_order",parse_unlist,                UL &AlternativeOrderList },
+  { "unauto_view",     parse_unlist,           UL &AutoViewList },
+  { "unhdr_order",     parse_unlist,           UL &HeaderOrderList },
+  { "unhook",          mutt_parse_unhook,      0 },
+  { "unignore",                parse_unignore,         0 },
+  { "unlists",         parse_unlists,          0 },
+  { "unmono",          mutt_parse_unmono,      0 },
+  { "unmy_hdr",                parse_unmy_hdr,         0 },
+  { "unscore",         mutt_parse_unscore,     0 },
+  { "unset",           parse_set,              M_SET_UNSET },
+  { "unsubscribe",     parse_rx_unlist,        UL &SubscribedLists },
+  { NULL }
+};
diff --git a/install-sh b/install-sh
new file mode 100755 (executable)
index 0000000..57a2fbd
--- /dev/null
@@ -0,0 +1,269 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+# This originally came from X11R5 (mit/util/scripts/install.sh).
+
+scriptversion=2003-01-17.15
+
+# Copyright 1991 by the Massachusetts Institute of Technology
+# (FSF changes in the public domain.)
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=
+transform_arg=
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+
+usage="Usage: $0 [OPTION]... SRCFILE DSTFILE
+   or: $0 -d DIR1 DIR2...
+
+In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default.
+In the second, create the directory path DIR.
+
+Options:
+-b=TRANSFORMBASENAME
+-c         copy source (using $cpprog) instead of moving (using $mvprog).
+-d         create directories instead of installing files.
+-g GROUP   $chgrp installed files to GROUP.
+-m MODE    $chmod installed files to MODE.
+-o USER    $chown installed files to USER.
+-s         strip installed files (using $stripprog).
+-t=TRANSFORM
+--help     display this help and exit.
+--version  display version info and exit.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test -n "$1"; do
+  case $1 in
+    -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+        shift
+        continue;;
+
+    -c) instcmd=$cpprog
+        shift
+        continue;;
+
+    -d) dir_arg=true
+        shift
+        continue;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+        shift
+        shift
+        continue;;
+
+    --help) echo "$usage"; exit 0;;
+
+    -m) chmodcmd="$chmodprog $2"
+        shift
+        shift
+        continue;;
+
+    -o) chowncmd="$chownprog $2"
+        shift
+        shift
+        continue;;
+
+    -s) stripcmd=$stripprog
+        shift
+        continue;;
+
+    -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+        shift
+        continue;;
+
+    --version) echo "$0 $scriptversion"; exit 0;;
+
+    *)  if test -z "$src"; then
+          src=$1
+        else
+          # this colon is to work around a 386BSD /bin/sh bug
+          :
+          dst=$1
+        fi
+        shift
+        continue;;
+  esac
+done
+
+if test -z "$src"; then
+  echo "$0: no input file specified." >&2
+  exit 1
+fi
+
+if test -n "$dir_arg"; then
+  dst=$src
+  src=
+
+  if test -d "$dst"; then
+    instcmd=:
+    chmodcmd=
+  else
+    instcmd=$mkdirprog
+  fi
+else
+  # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+  # might cause directories to be created, which would be especially bad
+  # if $src (and thus $dsttmp) contains '*'.
+  if test ! -f "$src" && test ! -d "$src"; then
+    echo "$0: $src does not exist." >&2
+    exit 1
+  fi
+
+  if test -z "$dst"; then
+    echo "$0: no destination specified." >&2
+    exit 1
+  fi
+
+  # If destination is a directory, append the input filename; won't work
+  # if double slashes aren't ignored.
+  if test -d "$dst"; then
+    dst=$dst/`basename "$src"`
+  fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+# (this part is taken from Noah Friedman's mkinstalldirs script.)
+
+# Skip lots of stat calls in the usual case.
+if test ! -d "$dstdir"; then
+  defaultIFS='
+       '
+  IFS="${IFS-$defaultIFS}"
+
+  oIFS=$IFS
+  # Some sh's can't handle IFS=/ for some reason.
+  IFS='%'
+  set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+  IFS=$oIFS
+
+  pathcomp=
+
+  while test $# -ne 0 ; do
+    pathcomp=$pathcomp$1
+    shift
+    test -d "$pathcomp" || $mkdirprog "$pathcomp"
+    pathcomp=$pathcomp/
+  done
+fi
+
+if test -n "$dir_arg"; then
+  $doit $instcmd "$dst" \
+    && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
+    && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
+    && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
+    && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
+
+else
+  # If we're going to rename the final executable, determine the name now.
+  if test -z "$transformarg"; then
+    dstfile=`basename "$dst"`
+  else
+    dstfile=`basename "$dst" $transformbasename \
+             | sed $transformarg`$transformbasename
+  fi
+
+  # don't allow the sed command to completely eliminate the filename.
+  test -z "$dstfile" && dstfile=`basename "$dst"`
+
+  # Make a couple of temp file names in the proper directory.
+  dsttmp=$dstdir/#inst.$$#
+  rmtmp=$dstdir/#rm.$$#
+
+  # Trap to clean up those temp files at exit.
+  trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
+  trap '(exit $?); exit' 1 2 13 15
+
+  # Move or copy the file name to the temp name
+  $doit $instcmd "$src" "$dsttmp" &&
+
+  # and set any options; do chmod last to preserve setuid bits.
+  #
+  # If any of these fail, we abort the whole thing.  If we want to
+  # ignore errors from any of these, just make sure not to ignore
+  # errors from the above "$doit $instcmd $src $dsttmp" command.
+  #
+  { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+    && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+    && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+    && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
+
+  # Now remove or move aside any old file at destination location.  We
+  # try this two ways since rm can't unlink itself on some systems and
+  # the destination file might be busy for other reasons.  In this case,
+  # the final cleanup might fail but the new file should still install
+  # successfully.
+  {
+    if test -f "$dstdir/$dstfile"; then
+      $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
+      || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
+      || {
+         echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+         (exit 1); exit
+      }
+    else
+      :
+    fi
+  } &&
+
+  # Now rename the file to the real destination.
+  $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+fi &&
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+{
+  (exit 0); exit
+}
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/intl/ChangeLog b/intl/ChangeLog
new file mode 100644 (file)
index 0000000..84e2b37
--- /dev/null
@@ -0,0 +1,4 @@
+2001-09-13  GNU  <bug-gnu-utils@gnu.org>
+
+       * Version 0.10.40 released.
+
diff --git a/intl/Makefile.in b/intl/Makefile.in
new file mode 100644 (file)
index 0000000..19ed4a7
--- /dev/null
@@ -0,0 +1,313 @@
+# Makefile for directory with message catalog handling in GNU NLS Utilities.
+# Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = ..
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+transform = @program_transform_name@
+libdir = @libdir@
+includedir = @includedir@
+datadir = @datadir@
+localedir = $(datadir)/locale
+gettextsrcdir = $(datadir)/gettext/intl
+aliaspath = $(localedir)
+subdir = intl
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
+
+l = @INTL_LIBTOOL_SUFFIX_PREFIX@
+
+AR = ar
+CC = @CC@
+LIBTOOL = @LIBTOOL@
+RANLIB = @RANLIB@
+YACC = @INTLBISON@ -y -d
+YFLAGS = --name-prefix=__gettext
+
+DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
+-DLIBDIR=\"$(libdir)\" @DEFS@
+CPPFLAGS = @CPPFLAGS@
+CFLAGS = @CFLAGS@
+LDFLAGS = @LDFLAGS@
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+HEADERS = $(COMHDRS) libgnuintl.h libgettext.h loadinfo.h
+COMHDRS = gettext.h gettextP.h hash-string.h
+SOURCES = $(COMSRCS) intl-compat.c
+COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
+finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
+explodename.c dcigettext.c dcngettext.c dngettext.c ngettext.c plural.y \
+localcharset.c
+OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
+finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
+explodename.$lo dcigettext.$lo dcngettext.$lo dngettext.$lo ngettext.$lo \
+plural.$lo localcharset.$lo
+GETTOBJS = intl-compat.$lo
+DISTFILES.common = Makefile.in \
+config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES)
+DISTFILES.generated = plural.c
+DISTFILES.normal = VERSION
+DISTFILES.gettext = COPYING.LIB-2 COPYING.LIB-2.1 libintl.glibc
+DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c
+
+# Libtool's library version information for libintl.
+# Before making a gettext release, the gettext maintainer must change this
+# according to the libtool documentation, section "Library interface versions".
+# Maintainers of other packages that include the intl directory must *not*
+# change these values.
+LTV_CURRENT=1
+LTV_REVISION=1
+LTV_AGE=0
+
+.SUFFIXES:
+.SUFFIXES: .c .y .o .lo .sin .sed
+.c.o:
+       $(COMPILE) $<
+.c.lo:
+       $(LIBTOOL) --mode=compile $(COMPILE) $<
+
+.y.c:
+       $(YACC) $(YFLAGS) --output $@ $<
+       rm -f $*.h
+
+.sin.sed:
+       sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@
+       mv t-$@ $@
+
+INCLUDES = -I.. -I. -I$(top_srcdir)/intl
+
+all: all-@USE_INCLUDED_LIBINTL@
+all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
+all-no: all-no-@BUILD_INCLUDED_LIBINTL@
+all-no-yes: libgnuintl.$la
+all-no-no:
+
+libintl.a libgnuintl.a: $(OBJECTS)
+       rm -f $@
+       $(AR) cru $@ $(OBJECTS)
+       $(RANLIB) $@
+
+libintl.la libgnuintl.la: $(OBJECTS)
+       $(LIBTOOL) --mode=link \
+         $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
+         $(OBJECTS) @LIBICONV@ \
+         -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
+         -rpath $(libdir) \
+         -no-undefined
+
+libintl.h: libgnuintl.h
+       cp $(srcdir)/libgnuintl.h libintl.h
+
+charset.alias: config.charset
+       $(SHELL) $(srcdir)/config.charset '@host@' > t-$@
+       mv t-$@ $@
+
+check: all
+
+# This installation goal is only used in GNU gettext.  Packages which
+# only use the library should use install instead.
+
+# We must not install the libintl.h/libintl.a files if we are on a
+# system which has the GNU gettext() function in its C library or in a
+# separate library.
+# If you want to use the one which comes with this version of the
+# package, you have to use `configure --with-included-gettext'.
+install: install-exec install-data
+install-exec: all
+       if test "$(PACKAGE)" = "gettext" \
+          && test '@INTLOBJS@' = '$(GETTOBJS)'; then \
+         $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
+         $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
+         $(LIBTOOL) --mode=install \
+           $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
+       else \
+         : ; \
+       fi
+       if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+         $(mkinstalldirs) $(DESTDIR)$(libdir); \
+         temp=$(DESTDIR)$(libdir)/t-charset.alias; \
+         dest=$(DESTDIR)$(libdir)/charset.alias; \
+         if test -f $(DESTDIR)$(libdir)/charset.alias; then \
+           orig=$(DESTDIR)$(libdir)/charset.alias; \
+           sed -f ref-add.sed $$orig > $$temp; \
+           $(INSTALL_DATA) $$temp $$dest; \
+           rm -f $$temp; \
+         else \
+           if test @GLIBC21@ = no; then \
+             orig=charset.alias; \
+             sed -f ref-add.sed $$orig > $$temp; \
+             $(INSTALL_DATA) $$temp $$dest; \
+             rm -f $$temp; \
+           fi; \
+         fi; \
+         $(mkinstalldirs) $(DESTDIR)$(localedir); \
+         test -f $(DESTDIR)$(localedir)/locale.alias \
+           && orig=$(DESTDIR)$(localedir)/locale.alias \
+           || orig=$(srcdir)/locale.alias; \
+         temp=$(DESTDIR)$(localedir)/t-locale.alias; \
+         dest=$(DESTDIR)$(localedir)/locale.alias; \
+         sed -f ref-add.sed $$orig > $$temp; \
+         $(INSTALL_DATA) $$temp $$dest; \
+         rm -f $$temp; \
+       else \
+         : ; \
+       fi
+install-data: all
+       if test "$(PACKAGE)" = "gettext"; then \
+         $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+         $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
+         $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
+         dists="COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common)"; \
+         for file in $$dists; do \
+           $(INSTALL_DATA) $(srcdir)/$$file \
+                           $(DESTDIR)$(gettextsrcdir)/$$file; \
+         done; \
+         chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \
+         dists="$(DISTFILES.generated)"; \
+         for file in $$dists; do \
+           if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
+           $(INSTALL_DATA) $$dir/$$file \
+                           $(DESTDIR)$(gettextsrcdir)/$$file; \
+         done; \
+         dists="$(DISTFILES.obsolete)"; \
+         for file in $$dists; do \
+           rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+         done; \
+       else \
+         : ; \
+       fi
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+       if test "$(PACKAGE)" = "gettext" \
+          && test '@INTLOBJS@' = '$(GETTOBJS)'; then \
+         rm -f $(DESTDIR)$(includedir)/libintl.h; \
+         $(LIBTOOL) --mode=uninstall \
+           rm -f $(DESTDIR)$(libdir)/libintl.$la; \
+       else \
+         : ; \
+       fi
+       if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+         if test -f $(DESTDIR)$(libdir)/charset.alias; then \
+           temp=$(DESTDIR)$(libdir)/t-charset.alias; \
+           dest=$(DESTDIR)$(libdir)/charset.alias; \
+           sed -f ref-del.sed $$dest > $$temp; \
+           if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
+             rm -f $$dest; \
+           else \
+             $(INSTALL_DATA) $$temp $$dest; \
+           fi; \
+           rm -f $$temp; \
+         fi; \
+         if test -f $(DESTDIR)$(localedir)/locale.alias; then \
+           temp=$(DESTDIR)$(localedir)/t-locale.alias; \
+           dest=$(DESTDIR)$(localedir)/locale.alias; \
+           sed -f ref-del.sed $$dest > $$temp; \
+           if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
+             rm -f $$dest; \
+           else \
+             $(INSTALL_DATA) $$temp $$dest; \
+           fi; \
+           rm -f $$temp; \
+         fi; \
+       else \
+         : ; \
+       fi
+       if test "$(PACKAGE)" = "gettext"; then \
+         for file in VERSION ChangeLog COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \
+           rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+         done; \
+       else \
+         : ; \
+       fi
+
+info dvi:
+
+$(OBJECTS): ../config.h libgnuintl.h
+bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
+dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h
+
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES)
+       here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
+
+id: ID
+
+ID: $(HEADERS) $(SOURCES)
+       here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES)
+
+
+mostlyclean:
+       rm -f *.a *.la *.o *.lo core core.*
+       rm -f libintl.h charset.alias ref-add.sed ref-del.sed
+       rm -f -r .libs _libs
+
+clean: mostlyclean
+
+distclean: clean
+       rm -f Makefile ID TAGS
+       if test "$(PACKAGE)" = gettext; then \
+         rm -f ChangeLog.inst $(DISTFILES.normal); \
+       else \
+         : ; \
+       fi
+
+maintainer-clean: distclean
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+
+
+# GNU gettext needs not contain the file `VERSION' but contains some
+# other files which should not be distributed in other packages.
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: Makefile
+       if test "$(PACKAGE)" = gettext; then \
+         additional="$(DISTFILES.gettext)"; \
+       else \
+         additional="$(DISTFILES.normal)"; \
+       fi; \
+       $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \
+       for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \
+         if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
+         ln $$dir/$$file $(distdir) 2> /dev/null \
+           || cp -p $$dir/$$file $(distdir); \
+       done
+
+Makefile: Makefile.in ../config.status
+       cd .. \
+         && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/intl/VERSION b/intl/VERSION
new file mode 100644 (file)
index 0000000..cb8a01a
--- /dev/null
@@ -0,0 +1 @@
+GNU gettext library from gettext-0.10.40
diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c
new file mode 100644 (file)
index 0000000..c6a9bd1
--- /dev/null
@@ -0,0 +1,369 @@
+/* Implementation of the bindtextdomain(3) function
+   Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "gettextP.h"
+
+#ifdef _LIBC
+/* We have to handle multi-threaded applications.  */
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc.  */
+# define __libc_rwlock_define(CLASS, NAME)
+# define __libc_rwlock_wrlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+   names than the internal variables in GNU libc, otherwise programs
+   using libintl.a cannot be linked statically.  */
+#if !defined _LIBC
+# define _nl_default_dirname _nl_default_dirname__
+# define _nl_domain_bindings _nl_domain_bindings__
+#endif
+
+/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>.  */
+#ifndef offsetof
+# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Contains the default location of the message catalogs.  */
+extern const char _nl_default_dirname[];
+
+/* List with bindings of specific domains.  */
+extern struct binding *_nl_domain_bindings;
+
+/* Lock variable to protect the global data in the gettext implementation.  */
+__libc_rwlock_define (extern, _nl_state_lock)
+
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define BINDTEXTDOMAIN __bindtextdomain
+# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset
+# ifndef strdup
+#  define strdup(str) __strdup (str)
+# endif
+#else
+# define BINDTEXTDOMAIN bindtextdomain__
+# define BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset__
+#endif
+
+/* Prototypes for local functions.  */
+static void set_binding_values PARAMS ((const char *domainname,
+                                       const char **dirnamep,
+                                       const char **codesetp));
+     
+/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
+   to be used for the DOMAINNAME message catalog.
+   If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
+   modified, only the current value is returned.
+   If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
+   modified nor returned.  */
+static void
+set_binding_values (domainname, dirnamep, codesetp)
+     const char *domainname;
+     const char **dirnamep;
+     const char **codesetp;
+{
+  struct binding *binding;
+  int modified;
+
+  /* Some sanity checks.  */
+  if (domainname == NULL || domainname[0] == '\0')
+    {
+      if (dirnamep)
+       *dirnamep = NULL;
+      if (codesetp)
+       *codesetp = NULL;
+      return;
+    }
+
+  __libc_rwlock_wrlock (_nl_state_lock);
+
+  modified = 0;
+
+  for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+    {
+      int compare = strcmp (domainname, binding->domainname);
+      if (compare == 0)
+       /* We found it!  */
+       break;
+      if (compare < 0)
+       {
+         /* It is not in the list.  */
+         binding = NULL;
+         break;
+       }
+    }
+
+  if (binding != NULL)
+    {
+      if (dirnamep)
+       {
+         const char *dirname = *dirnamep;
+
+         if (dirname == NULL)
+           /* The current binding has be to returned.  */
+           *dirnamep = binding->dirname;
+         else
+           {
+             /* The domain is already bound.  If the new value and the old
+                one are equal we simply do nothing.  Otherwise replace the
+                old binding.  */
+             char *result = binding->dirname;
+             if (strcmp (dirname, result) != 0)
+               {
+                 if (strcmp (dirname, _nl_default_dirname) == 0)
+                   result = (char *) _nl_default_dirname;
+                 else
+                   {
+#if defined _LIBC || defined HAVE_STRDUP
+                     result = strdup (dirname);
+#else
+                     size_t len = strlen (dirname) + 1;
+                     result = (char *) malloc (len);
+                     if (__builtin_expect (result != NULL, 1))
+                       memcpy (result, dirname, len);
+#endif
+                   }
+
+                 if (__builtin_expect (result != NULL, 1))
+                   {
+                     if (binding->dirname != _nl_default_dirname)
+                       free (binding->dirname);
+
+                     binding->dirname = result;
+                     modified = 1;
+                   }
+               }
+             *dirnamep = result;
+           }
+       }
+
+      if (codesetp)
+       {
+         const char *codeset = *codesetp;
+
+         if (codeset == NULL)
+           /* The current binding has be to returned.  */
+           *codesetp = binding->codeset;
+         else
+           {
+             /* The domain is already bound.  If the new value and the old
+                one are equal we simply do nothing.  Otherwise replace the
+                old binding.  */
+             char *result = binding->codeset;
+             if (result == NULL || strcmp (codeset, result) != 0)
+               {
+#if defined _LIBC || defined HAVE_STRDUP
+                 result = strdup (codeset);
+#else
+                 size_t len = strlen (codeset) + 1;
+                 result = (char *) malloc (len);
+                 if (__builtin_expect (result != NULL, 1))
+                   memcpy (result, codeset, len);
+#endif
+
+                 if (__builtin_expect (result != NULL, 1))
+                   {
+                     if (binding->codeset != NULL)
+                       free (binding->codeset);
+
+                     binding->codeset = result;
+                     binding->codeset_cntr++;
+                     modified = 1;
+                   }
+               }
+             *codesetp = result;
+           }
+       }
+    }
+  else if ((dirnamep == NULL || *dirnamep == NULL)
+          && (codesetp == NULL || *codesetp == NULL))
+    {
+      /* Simply return the default values.  */
+      if (dirnamep)
+       *dirnamep = _nl_default_dirname;
+      if (codesetp)
+       *codesetp = NULL;
+    }
+  else
+    {
+      /* We have to create a new binding.  */
+      size_t len = strlen (domainname) + 1;
+      struct binding *new_binding =
+       (struct binding *) malloc (offsetof (struct binding, domainname) + len);
+
+      if (__builtin_expect (new_binding == NULL, 0))
+       goto failed;
+
+      memcpy (new_binding->domainname, domainname, len);
+
+      if (dirnamep)
+       {
+         const char *dirname = *dirnamep;
+
+         if (dirname == NULL)
+           /* The default value.  */
+           dirname = _nl_default_dirname;
+         else
+           {
+             if (strcmp (dirname, _nl_default_dirname) == 0)
+               dirname = _nl_default_dirname;
+             else
+               {
+                 char *result;
+#if defined _LIBC || defined HAVE_STRDUP
+                 result = strdup (dirname);
+                 if (__builtin_expect (result == NULL, 0))
+                   goto failed_dirname;
+#else
+                 size_t len = strlen (dirname) + 1;
+                 result = (char *) malloc (len);
+                 if (__builtin_expect (result == NULL, 0))
+                   goto failed_dirname;
+                 memcpy (result, dirname, len);
+#endif
+                 dirname = result;
+               }
+           }
+         *dirnamep = dirname;
+         new_binding->dirname = (char *) dirname;
+       }
+      else
+       /* The default value.  */
+       new_binding->dirname = (char *) _nl_default_dirname;
+
+      new_binding->codeset_cntr = 0;
+
+      if (codesetp)
+       {
+         const char *codeset = *codesetp;
+
+         if (codeset != NULL)
+           {
+             char *result;
+
+#if defined _LIBC || defined HAVE_STRDUP
+             result = strdup (codeset);
+             if (__builtin_expect (result == NULL, 0))
+               goto failed_codeset;
+#else
+             size_t len = strlen (codeset) + 1;
+             result = (char *) malloc (len);
+             if (__builtin_expect (result == NULL, 0))
+               goto failed_codeset;
+             memcpy (result, codeset, len);
+#endif
+             codeset = result;
+             new_binding->codeset_cntr++;
+           }
+         *codesetp = codeset;
+         new_binding->codeset = (char *) codeset;
+       }
+      else
+       new_binding->codeset = NULL;
+
+      /* Now enqueue it.  */
+      if (_nl_domain_bindings == NULL
+         || strcmp (domainname, _nl_domain_bindings->domainname) < 0)
+       {
+         new_binding->next = _nl_domain_bindings;
+         _nl_domain_bindings = new_binding;
+       }
+      else
+       {
+         binding = _nl_domain_bindings;
+         while (binding->next != NULL
+                && strcmp (domainname, binding->next->domainname) > 0)
+           binding = binding->next;
+
+         new_binding->next = binding->next;
+         binding->next = new_binding;
+       }
+
+      modified = 1;
+
+      /* Here we deal with memory allocation failures.  */
+      if (0)
+       {
+       failed_codeset:
+         if (new_binding->dirname != _nl_default_dirname)
+           free (new_binding->dirname);
+       failed_dirname:
+         free (new_binding);
+       failed:
+         if (dirnamep)
+           *dirnamep = NULL;
+         if (codesetp)
+           *codesetp = NULL;
+       }
+    }
+
+  /* If we modified any binding, we flush the caches.  */
+  if (modified)
+    ++_nl_msg_cat_cntr;
+
+  __libc_rwlock_unlock (_nl_state_lock);
+}
+
+/* Specify that the DOMAINNAME message catalog will be found
+   in DIRNAME rather than in the system locale data base.  */
+char *
+BINDTEXTDOMAIN (domainname, dirname)
+     const char *domainname;
+     const char *dirname;
+{
+  set_binding_values (domainname, &dirname, NULL);
+  return (char *) dirname;
+}
+
+/* Specify the character encoding in which the messages from the
+   DOMAINNAME message catalog will be returned.  */
+char *
+BIND_TEXTDOMAIN_CODESET (domainname, codeset)
+     const char *domainname;
+     const char *codeset;
+{
+  set_binding_values (domainname, NULL, &codeset);
+  return (char *) codeset;
+}
+
+#ifdef _LIBC
+/* Aliases for function names in GNU C Library.  */
+weak_alias (__bindtextdomain, bindtextdomain);
+weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset);
+#endif
diff --git a/intl/config.charset b/intl/config.charset
new file mode 100644 (file)
index 0000000..f4f2611
--- /dev/null
@@ -0,0 +1,438 @@
+#! /bin/sh
+# Output a system dependent table of character encoding aliases.
+#
+#   Copyright (C) 2000-2001 Free Software Foundation, Inc.
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU Library General Public License as published
+#   by the Free Software Foundation; either version 2, 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
+#   Library General Public License for more details.
+#
+#   You should have received a copy of the GNU Library General Public
+#   License along with this program; if not, write to the Free Software
+#   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+#   USA.
+#
+# The table consists of lines of the form
+#    ALIAS  CANONICAL
+#
+# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
+# ALIAS is compared in a case sensitive way.
+#
+# CANONICAL is the GNU canonical name for this character encoding.
+# It must be an encoding supported by libiconv. Support by GNU libc is
+# also desirable. CANONICAL is case insensitive. Usually an upper case
+# MIME charset name is preferred.
+# The current list of GNU canonical charset names is as follows.
+#
+#       name                         used by which systems         a MIME name?
+#   ASCII, ANSI_X3.4-1968     glibc solaris freebsd
+#   ISO-8859-1                glibc aix hpux irix osf solaris freebsd   yes
+#   ISO-8859-2                glibc aix hpux irix osf solaris freebsd   yes
+#   ISO-8859-3                glibc                                     yes
+#   ISO-8859-4                osf solaris freebsd                       yes
+#   ISO-8859-5                glibc aix hpux irix osf solaris freebsd   yes
+#   ISO-8859-6                glibc aix hpux solaris                    yes
+#   ISO-8859-7                glibc aix hpux irix osf solaris           yes
+#   ISO-8859-8                glibc aix hpux osf solaris                yes
+#   ISO-8859-9                glibc aix hpux irix osf solaris           yes
+#   ISO-8859-13               glibc
+#   ISO-8859-15               glibc aix osf solaris freebsd
+#   KOI8-R                    glibc solaris freebsd                     yes
+#   KOI8-U                    glibc freebsd                             yes
+#   CP437                     dos
+#   CP775                     dos
+#   CP850                     aix osf dos
+#   CP852                     dos
+#   CP855                     dos
+#   CP856                     aix
+#   CP857                     dos
+#   CP861                     dos
+#   CP862                     dos
+#   CP864                     dos
+#   CP865                     dos
+#   CP866                     freebsd dos
+#   CP869                     dos
+#   CP874                     win32 dos
+#   CP922                     aix
+#   CP932                     aix win32 dos
+#   CP943                     aix
+#   CP949                     osf win32 dos
+#   CP950                     win32 dos
+#   CP1046                    aix
+#   CP1124                    aix
+#   CP1129                    aix
+#   CP1250                    win32
+#   CP1251                    glibc win32
+#   CP1252                    aix win32
+#   CP1253                    win32
+#   CP1254                    win32
+#   CP1255                    win32
+#   CP1256                    win32
+#   CP1257                    win32
+#   GB2312                    glibc aix hpux irix solaris freebsd       yes
+#   EUC-JP                    glibc aix hpux irix osf solaris freebsd   yes
+#   EUC-KR                    glibc aix hpux irix osf solaris freebsd   yes
+#   EUC-TW                    glibc aix hpux irix osf solaris
+#   BIG5                      glibc aix hpux osf solaris freebsd        yes
+#   BIG5-HKSCS                glibc
+#   GBK                       aix osf win32 dos
+#   GB18030                   glibc
+#   SHIFT_JIS                 hpux osf solaris freebsd                  yes
+#   JOHAB                     glibc win32
+#   TIS-620                   glibc aix hpux osf solaris
+#   VISCII                    glibc                                     yes
+#   HP-ROMAN8                 hpux
+#   HP-ARABIC8                hpux
+#   HP-GREEK8                 hpux
+#   HP-HEBREW8                hpux
+#   HP-TURKISH8               hpux
+#   HP-KANA8                  hpux
+#   DEC-KANJI                 osf
+#   DEC-HANYU                 osf
+#   UTF-8                     glibc aix hpux osf solaris                yes
+#
+# Note: Names which are not marked as being a MIME name should not be used in
+# Internet protocols for information interchange (mail, news, etc.).
+#
+# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
+# must understand both names and treat them as equivalent.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+
+host="$1"
+os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
+echo "# This file contains a table of character encoding aliases,"
+echo "# suitable for operating system '${os}'."
+echo "# It was automatically generated from config.charset."
+# List of references, updated during installation:
+echo "# Packages using this file: "
+case "$os" in
+    linux* | *-gnu*)
+       # With glibc-2.1 or newer, we don't need any canonicalization,
+       # because glibc has iconv and both glibc and libiconv support all
+       # GNU canonical names directly. Therefore, the Makefile does not
+       # need to install the alias file at all.
+       # The following applies only to glibc-2.0.x and older libcs.
+       echo "ISO_646.IRV:1983 ASCII"
+       ;;
+    aix*)
+       echo "ISO8859-1 ISO-8859-1"
+       echo "ISO8859-2 ISO-8859-2"
+       echo "ISO8859-5 ISO-8859-5"
+       echo "ISO8859-6 ISO-8859-6"
+       echo "ISO8859-7 ISO-8859-7"
+       echo "ISO8859-8 ISO-8859-8"
+       echo "ISO8859-9 ISO-8859-9"
+       echo "ISO8859-15 ISO-8859-15"
+       echo "IBM-850 CP850"
+       echo "IBM-856 CP856"
+       echo "IBM-921 ISO-8859-13"
+       echo "IBM-922 CP922"
+       echo "IBM-932 CP932"
+       echo "IBM-943 CP943"
+       echo "IBM-1046 CP1046"
+       echo "IBM-1124 CP1124"
+       echo "IBM-1129 CP1129"
+       echo "IBM-1252 CP1252"
+       echo "IBM-eucCN GB2312"
+       echo "IBM-eucJP EUC-JP"
+       echo "IBM-eucKR EUC-KR"
+       echo "IBM-eucTW EUC-TW"
+       echo "big5 BIG5"
+       echo "GBK GBK"
+       echo "TIS-620 TIS-620"
+       echo "UTF-8 UTF-8"
+       ;;
+    hpux*)
+       echo "iso88591 ISO-8859-1"
+       echo "iso88592 ISO-8859-2"
+       echo "iso88595 ISO-8859-5"
+       echo "iso88596 ISO-8859-6"
+       echo "iso88597 ISO-8859-7"
+       echo "iso88598 ISO-8859-8"
+       echo "iso88599 ISO-8859-9"
+       echo "iso885915 ISO-8859-15"
+       echo "roman8 HP-ROMAN8"
+       echo "arabic8 HP-ARABIC8"
+       echo "greek8 HP-GREEK8"
+       echo "hebrew8 HP-HEBREW8"
+       echo "turkish8 HP-TURKISH8"
+       echo "kana8 HP-KANA8"
+       echo "tis620 TIS-620"
+       echo "big5 BIG5"
+       echo "eucJP EUC-JP"
+       echo "eucKR EUC-KR"
+       echo "eucTW EUC-TW"
+       echo "hp15CN GB2312"
+       #echo "ccdc ?" # what is this?
+       echo "SJIS SHIFT_JIS"
+       echo "utf8 UTF-8"
+       ;;
+    irix*)
+       echo "ISO8859-1 ISO-8859-1"
+       echo "ISO8859-2 ISO-8859-2"
+       echo "ISO8859-5 ISO-8859-5"
+       echo "ISO8859-7 ISO-8859-7"
+       echo "ISO8859-9 ISO-8859-9"
+       echo "eucCN GB2312"
+       echo "eucJP EUC-JP"
+       echo "eucKR EUC-KR"
+       echo "eucTW EUC-TW"
+       ;;
+    osf*)
+       echo "ISO8859-1 ISO-8859-1"
+       echo "ISO8859-2 ISO-8859-2"
+       echo "ISO8859-4 ISO-8859-4"
+       echo "ISO8859-5 ISO-8859-5"
+       echo "ISO8859-7 ISO-8859-7"
+       echo "ISO8859-8 ISO-8859-8"
+       echo "ISO8859-9 ISO-8859-9"
+       echo "ISO8859-15 ISO-8859-15"
+       echo "cp850 CP850"
+       echo "big5 BIG5"
+       echo "dechanyu DEC-HANYU"
+       echo "dechanzi GB2312"
+       echo "deckanji DEC-KANJI"
+       echo "deckorean EUC-KR"
+       echo "eucJP EUC-JP"
+       echo "eucKR EUC-KR"
+       echo "eucTW EUC-TW"
+       echo "GBK GBK"
+       echo "KSC5601 CP949"
+       echo "sdeckanji EUC-JP"
+       echo "SJIS SHIFT_JIS"
+       echo "TACTIS TIS-620"
+       echo "UTF-8 UTF-8"
+       ;;
+    solaris*)
+       echo "646 ASCII"
+       echo "ISO8859-1 ISO-8859-1"
+       echo "ISO8859-2 ISO-8859-2"
+       echo "ISO8859-4 ISO-8859-4"
+       echo "ISO8859-5 ISO-8859-5"
+       echo "ISO8859-6 ISO-8859-6"
+       echo "ISO8859-7 ISO-8859-7"
+       echo "ISO8859-8 ISO-8859-8"
+       echo "ISO8859-9 ISO-8859-9"
+       echo "ISO8859-15 ISO-8859-15"
+       echo "koi8-r KOI8-R"
+       echo "BIG5 BIG5"
+       echo "gb2312 GB2312"
+       echo "cns11643 EUC-TW"
+       echo "5601 EUC-KR"
+       echo "eucJP EUC-JP"
+       echo "PCK SHIFT_JIS"
+       echo "TIS620.2533 TIS-620"
+       #echo "sun_eu_greek ?" # what is this?
+       echo "UTF-8 UTF-8"
+       ;;
+    freebsd*)
+       # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
+       # localcharset.c falls back to using the full locale name
+       # from the environment variables.
+       echo "C ASCII"
+       echo "US-ASCII ASCII"
+       for l in la_LN lt_LN; do
+         echo "$l.ASCII ASCII"
+       done
+       for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
+                fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
+                lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
+         echo "$l.ISO_8859-1 ISO-8859-1"
+         echo "$l.DIS_8859-15 ISO-8859-15"
+       done
+       for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
+         echo "$l.ISO_8859-2 ISO-8859-2"
+       done
+       for l in la_LN lt_LT; do
+         echo "$l.ISO_8859-4 ISO-8859-4"
+       done
+       for l in ru_RU ru_SU; do
+         echo "$l.KOI8-R KOI8-R"
+         echo "$l.ISO_8859-5 ISO-8859-5"
+         echo "$l.CP866 CP866"
+       done
+       echo "uk_UA.KOI8-U KOI8-U"
+       echo "zh_TW.BIG5 BIG5"
+       echo "zh_TW.Big5 BIG5"
+       echo "zh_CN.EUC GB2312"
+       echo "ja_JP.EUC EUC-JP"
+       echo "ja_JP.SJIS SHIFT_JIS"
+       echo "ja_JP.Shift_JIS SHIFT_JIS"
+       echo "ko_KR.EUC EUC-KR"
+       ;;
+    beos*)
+       # BeOS has a single locale, and it has UTF-8 encoding.
+       echo "* UTF-8"
+       ;;
+    msdosdjgpp*)
+       # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
+       # localcharset.c falls back to using the full locale name
+       # from the environment variables.
+       echo "#"
+       echo "# The encodings given here may not all be correct."
+       echo "# If you find that the encoding given for your language and"
+       echo "# country is not the one your DOS machine actually uses, just"
+       echo "# correct it in this file, and send a mail to"
+       echo "# Juan Manuel Guerrero <st001906@hrz1.hrz.tu-darmstadt.de>"
+       echo "# and Bruno Haible <haible@clisp.cons.org>."
+       echo "#"
+       echo "C ASCII"
+       # ISO-8859-1 languages
+       echo "ca CP850"
+       echo "ca_ES CP850"
+       echo "da CP865"    # not CP850 ??
+       echo "da_DK CP865" # not CP850 ??
+       echo "de CP850"
+       echo "de_AT CP850"
+       echo "de_CH CP850"
+       echo "de_DE CP850"
+       echo "en CP850"
+       echo "en_AU CP850" # not CP437 ??
+       echo "en_CA CP850"
+       echo "en_GB CP850"
+       echo "en_NZ CP437"
+       echo "en_US CP437"
+       echo "en_ZA CP850" # not CP437 ??
+       echo "es CP850"
+       echo "es_AR CP850"
+       echo "es_BO CP850"
+       echo "es_CL CP850"
+       echo "es_CO CP850"
+       echo "es_CR CP850"
+       echo "es_CU CP850"
+       echo "es_DO CP850"
+       echo "es_EC CP850"
+       echo "es_ES CP850"
+       echo "es_GT CP850"
+       echo "es_HN CP850"
+       echo "es_MX CP850"
+       echo "es_NI CP850"
+       echo "es_PA CP850"
+       echo "es_PY CP850"
+       echo "es_PE CP850"
+       echo "es_SV CP850"
+       echo "es_UY CP850"
+       echo "es_VE CP850"
+       echo "et CP850"
+       echo "et_EE CP850"
+       echo "eu CP850"
+       echo "eu_ES CP850"
+       echo "fi CP850"
+       echo "fi_FI CP850"
+       echo "fr CP850"
+       echo "fr_BE CP850"
+       echo "fr_CA CP850"
+       echo "fr_CH CP850"
+       echo "fr_FR CP850"
+       echo "ga CP850"
+       echo "ga_IE CP850"
+       echo "gd CP850"
+       echo "gd_GB CP850"
+       echo "gl CP850"
+       echo "gl_ES CP850"
+       echo "id CP850"    # not CP437 ??
+       echo "id_ID CP850" # not CP437 ??
+       echo "is CP861"    # not CP850 ??
+       echo "is_IS CP861" # not CP850 ??
+       echo "it CP850"
+       echo "it_CH CP850"
+       echo "it_IT CP850"
+       echo "lt CP775"
+       echo "lt_LT CP775"
+       echo "lv CP775"
+       echo "lv_LV CP775"
+       echo "nb CP865"    # not CP850 ??
+       echo "nb_NO CP865" # not CP850 ??
+       echo "nl CP850"
+       echo "nl_BE CP850"
+       echo "nl_NL CP850"
+       echo "nn CP865"    # not CP850 ??
+       echo "nn_NO CP865" # not CP850 ??
+       echo "no CP865"    # not CP850 ??
+       echo "no_NO CP865" # not CP850 ??
+       echo "pt CP850"
+       echo "pt_BR CP850"
+       echo "pt_PT CP850"
+       echo "sv CP850"
+       echo "sv_SE CP850"
+       # ISO-8859-2 languages
+       echo "cs CP852"
+       echo "cs_CZ CP852"
+       echo "hr CP852"
+       echo "hr_HR CP852"
+       echo "hu CP852"
+       echo "hu_HU CP852"
+       echo "pl CP852"
+       echo "pl_PL CP852"
+       echo "ro CP852"
+       echo "ro_RO CP852"
+       echo "sk CP852"
+       echo "sk_SK CP852"
+       echo "sl CP852"
+       echo "sl_SI CP852"
+       echo "sq CP852"
+       echo "sq_AL CP852"
+       echo "sr CP852"    # CP852 or CP866 or CP855 ??
+       echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
+       # ISO-8859-3 languages
+       echo "mt CP850"
+       echo "mt_MT CP850"
+       # ISO-8859-5 languages
+       echo "be CP866"
+       echo "be_BE CP866"
+       echo "bg CP866"    # not CP855 ??
+       echo "bg_BG CP866" # not CP855 ??
+       echo "mk CP866"    # not CP855 ??
+       echo "mk_MK CP866" # not CP855 ??
+       echo "ru KOI8-R"    # not CP866 ??
+       echo "ru_RU KOI8-R" # not CP866 ??
+       # ISO-8859-6 languages
+       echo "ar CP864"
+       echo "ar_AE CP864"
+       echo "ar_DZ CP864"
+       echo "ar_EG CP864"
+       echo "ar_IQ CP864"
+       echo "ar_IR CP864"
+       echo "ar_JO CP864"
+       echo "ar_KW CP864"
+       echo "ar_MA CP864"
+       echo "ar_OM CP864"
+       echo "ar_QA CP864"
+       echo "ar_SA CP864"
+       echo "ar_SY CP864"
+       # ISO-8859-7 languages
+       echo "el CP869"
+       echo "el_GR CP869"
+       # ISO-8859-8 languages
+       echo "he CP862"
+       echo "he_IL CP862"
+       # ISO-8859-9 languages
+       echo "tr CP857"
+       echo "tr_TR CP857"
+       # Japanese
+       echo "ja CP932"
+       echo "ja_JP CP932"
+       # Chinese
+       echo "zh_CN GBK"
+       echo "zh_TW CP950" # not CP938 ??
+       # Korean
+       echo "kr CP949"    # not CP934 ??
+       echo "kr_KR CP949" # not CP934 ??
+       # Thai
+       echo "th CP874"
+       echo "th_TH CP874"
+       # Other
+       echo "eo CP850"
+       echo "eo_EO CP850"
+       ;;
+esac
diff --git a/intl/dcgettext.c b/intl/dcgettext.c
new file mode 100644 (file)
index 0000000..b7c9652
--- /dev/null
@@ -0,0 +1,58 @@
+/* Implementation of the dcgettext(3) function.
+   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DCGETTEXT __dcgettext
+# define DCIGETTEXT __dcigettext
+#else
+# define DCGETTEXT dcgettext__
+# define DCIGETTEXT dcigettext__
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+char *
+DCGETTEXT (domainname, msgid, category)
+     const char *domainname;
+     const char *msgid;
+     int category;
+{
+  return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__dcgettext, dcgettext);
+#endif
diff --git a/intl/dcigettext.c b/intl/dcigettext.c
new file mode 100644 (file)
index 0000000..6acde19
--- /dev/null
@@ -0,0 +1,1259 @@
+/* Implementation of the internal dcigettext function.
+   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE   1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+#  include <alloca.h>
+# else
+#  ifdef _AIX
+ #pragma alloca
+#  else
+#   ifndef alloca
+char *alloca ();
+#   endif
+#  endif
+# endif
+#endif
+
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+#ifndef __set_errno
+# define __set_errno(val) errno = (val)
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+
+#include <string.h>
+#if !HAVE_STRCHR && !defined _LIBC
+# ifndef strchr
+#  define strchr index
+# endif
+#endif
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include <locale.h>
+
+#if defined HAVE_SYS_PARAM_H || defined _LIBC
+# include <sys/param.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "hash-string.h"
+
+/* Thread safetyness.  */
+#ifdef _LIBC
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc.  */
+# define __libc_lock_define_initialized(CLASS, NAME)
+# define __libc_lock_lock(NAME)
+# define __libc_lock_unlock(NAME)
+# define __libc_rwlock_define_initialized(CLASS, NAME)
+# define __libc_rwlock_rdlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* Alignment of types.  */
+#if defined __GNUC__ && __GNUC__ >= 2
+# define alignof(TYPE) __alignof__ (TYPE)
+#else
+# define alignof(TYPE) \
+    ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+   names than the internal variables in GNU libc, otherwise programs
+   using libintl.a cannot be linked statically.  */
+#if !defined _LIBC
+# define _nl_default_default_domain _nl_default_default_domain__
+# define _nl_current_default_domain _nl_current_default_domain__
+# define _nl_default_dirname _nl_default_dirname__
+# define _nl_domain_bindings _nl_domain_bindings__
+#endif
+
+/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>.  */
+#ifndef offsetof
+# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions.  This is required by the standard
+   because some ANSI C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# define getcwd __getcwd
+# ifndef stpcpy
+#  define stpcpy __stpcpy
+# endif
+# define tfind __tfind
+#else
+# if !defined HAVE_GETCWD
+char *getwd ();
+#  define getcwd(buf, max) getwd (buf)
+# else
+char *getcwd ();
+# endif
+# ifndef HAVE_STPCPY
+static char *stpcpy PARAMS ((char *dest, const char *src));
+# endif
+# ifndef HAVE_MEMPCPY
+static void *mempcpy PARAMS ((void *dest, const void *src, size_t n));
+# endif
+#endif
+
+/* Amount to increase buffer size by in each try.  */
+#define PATH_INCR 32
+
+/* The following is from pathmax.h.  */
+/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
+   PATH_MAX but might cause redefinition warnings when sys/param.h is
+   later included (as on MORE/BSD 4.3).  */
+#if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__)
+# include <limits.h>
+#endif
+
+#ifndef _POSIX_PATH_MAX
+# define _POSIX_PATH_MAX 255
+#endif
+
+#if !defined PATH_MAX && defined _PC_PATH_MAX
+# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
+#endif
+
+/* Don't include sys/param.h if it already has been.  */
+#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
+# include <sys/param.h>
+#endif
+
+#if !defined PATH_MAX && defined MAXPATHLEN
+# define PATH_MAX MAXPATHLEN
+#endif
+
+#ifndef PATH_MAX
+# define PATH_MAX _POSIX_PATH_MAX
+#endif
+
+/* Pathname support.
+   ISSLASH(C)           tests whether C is a directory separator character.
+   IS_ABSOLUTE_PATH(P)  tests whether P is an absolute path.  If it is not,
+                        it may be concatenated to a directory pathname.
+   IS_PATH_WITH_DIR(P)  tests whether P contains a directory specification.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+  /* Win32, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+    ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+     && (P)[1] == ':')
+# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
+# define IS_PATH_WITH_DIR(P) \
+    (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
+#else
+  /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
+# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
+#endif
+
+/* XPG3 defines the result of `setlocale (category, NULL)' as:
+   ``Directs `setlocale()' to query `category' and return the current
+     setting of `local'.''
+   However it does not specify the exact format.  Neither do SUSV2 and
+   ISO C 99.  So we can use this feature only on selected systems (e.g.
+   those using GNU C Library).  */
+#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2)
+# define HAVE_LOCALE_NULL
+#endif
+
+/* This is the type used for the search tree where known translations
+   are stored.  */
+struct known_translation_t
+{
+  /* Domain in which to search.  */
+  char *domainname;
+
+  /* The category.  */
+  int category;
+
+  /* State of the catalog counter at the point the string was found.  */
+  int counter;
+
+  /* Catalog where the string was found.  */
+  struct loaded_l10nfile *domain;
+
+  /* And finally the translation.  */
+  const char *translation;
+  size_t translation_length;
+
+  /* Pointer to the string in question.  */
+  char msgid[ZERO];
+};
+
+/* Root of the search tree with known translations.  We can use this
+   only if the system provides the `tsearch' function family.  */
+#if defined HAVE_TSEARCH || defined _LIBC
+# include <search.h>
+
+static void *root;
+
+# ifdef _LIBC
+#  define tsearch __tsearch
+# endif
+
+/* Function to compare two entries in the table of known translations.  */
+static int transcmp PARAMS ((const void *p1, const void *p2));
+static int
+transcmp (p1, p2)
+     const void *p1;
+     const void *p2;
+{
+  const struct known_translation_t *s1;
+  const struct known_translation_t *s2;
+  int result;
+
+  s1 = (const struct known_translation_t *) p1;
+  s2 = (const struct known_translation_t *) p2;
+
+  result = strcmp (s1->msgid, s2->msgid);
+  if (result == 0)
+    {
+      result = strcmp (s1->domainname, s2->domainname);
+      if (result == 0)
+       /* We compare the category last (though this is the cheapest
+          operation) since it is hopefully always the same (namely
+          LC_MESSAGES).  */
+       result = s1->category - s2->category;
+    }
+
+  return result;
+}
+#endif
+
+/* Name of the default domain used for gettext(3) prior any call to
+   textdomain(3).  The default value for this is "messages".  */
+const char _nl_default_default_domain[] = "messages";
+
+/* Value used as the default domain for gettext(3).  */
+const char *_nl_current_default_domain = _nl_default_default_domain;
+
+/* Contains the default location of the message catalogs.  */
+const char _nl_default_dirname[] = LOCALEDIR;
+
+/* List with bindings of specific domains created by bindtextdomain()
+   calls.  */
+struct binding *_nl_domain_bindings;
+
+/* Prototypes for local functions.  */
+static char *plural_lookup PARAMS ((struct loaded_l10nfile *domain,
+                                   unsigned long int n,
+                                   const char *translation,
+                                   size_t translation_len))
+     internal_function;
+static unsigned long int plural_eval PARAMS ((struct expression *pexp,
+                                             unsigned long int n))
+     internal_function;
+static const char *category_to_name PARAMS ((int category)) internal_function;
+static const char *guess_category_value PARAMS ((int category,
+                                                const char *categoryname))
+     internal_function;
+
+
+/* For those loosing systems which don't have `alloca' we have to add
+   some additional code emulating it.  */
+#ifdef HAVE_ALLOCA
+/* Nothing has to be done.  */
+# define ADD_BLOCK(list, address) /* nothing */
+# define FREE_BLOCKS(list) /* nothing */
+#else
+struct block_list
+{
+  void *address;
+  struct block_list *next;
+};
+# define ADD_BLOCK(list, addr)                                               \
+  do {                                                                       \
+    struct block_list *newp = (struct block_list *) malloc (sizeof (*newp));  \
+    /* If we cannot get a free block we cannot add the new element to        \
+       the list.  */                                                         \
+    if (newp != NULL) {                                                              \
+      newp->address = (addr);                                                \
+      newp->next = (list);                                                   \
+      (list) = newp;                                                         \
+    }                                                                        \
+  } while (0)
+# define FREE_BLOCKS(list)                                                   \
+  do {                                                                       \
+    while (list != NULL) {                                                   \
+      struct block_list *old = list;                                         \
+      list = list->next;                                                     \
+      free (old);                                                            \
+    }                                                                        \
+  } while (0)
+# undef alloca
+# define alloca(size) (malloc (size))
+#endif /* have alloca */
+
+
+#ifdef _LIBC
+/* List of blocks allocated for translations.  */
+typedef struct transmem_list
+{
+  struct transmem_list *next;
+  char data[ZERO];
+} transmem_block_t;
+static struct transmem_list *transmem_list;
+#else
+typedef unsigned char transmem_block_t;
+#endif
+
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DCIGETTEXT __dcigettext
+#else
+# define DCIGETTEXT dcigettext__
+#endif
+
+/* Lock variable to protect the global data in the gettext implementation.  */
+#ifdef _LIBC
+__libc_rwlock_define_initialized (, _nl_state_lock)
+#endif
+
+/* Checking whether the binaries runs SUID must be done and glibc provides
+   easier methods therefore we make a difference here.  */
+#ifdef _LIBC
+# define ENABLE_SECURE __libc_enable_secure
+# define DETERMINE_SECURE
+#else
+# ifndef HAVE_GETUID
+#  define getuid() 0
+# endif
+# ifndef HAVE_GETGID
+#  define getgid() 0
+# endif
+# ifndef HAVE_GETEUID
+#  define geteuid() getuid()
+# endif
+# ifndef HAVE_GETEGID
+#  define getegid() getgid()
+# endif
+static int enable_secure;
+# define ENABLE_SECURE (enable_secure == 1)
+# define DETERMINE_SECURE \
+  if (enable_secure == 0)                                                    \
+    {                                                                        \
+      if (getuid () != geteuid () || getgid () != getegid ())                \
+       enable_secure = 1;                                                    \
+      else                                                                   \
+       enable_secure = -1;                                                   \
+    }
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+   CATEGORY locale and, if PLURAL is nonzero, search over string
+   depending on the plural form determined by N.  */
+char *
+DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
+     const char *domainname;
+     const char *msgid1;
+     const char *msgid2;
+     int plural;
+     unsigned long int n;
+     int category;
+{
+#ifndef HAVE_ALLOCA
+  struct block_list *block_list = NULL;
+#endif
+  struct loaded_l10nfile *domain;
+  struct binding *binding;
+  const char *categoryname;
+  const char *categoryvalue;
+  char *dirname, *xdomainname;
+  char *single_locale;
+  char *retval;
+  size_t retlen;
+  int saved_errno;
+#if defined HAVE_TSEARCH || defined _LIBC
+  struct known_translation_t *search;
+  struct known_translation_t **foundp = NULL;
+  size_t msgid_len;
+#endif
+  size_t domainname_len;
+
+  /* If no real MSGID is given return NULL.  */
+  if (msgid1 == NULL)
+    return NULL;
+
+  __libc_rwlock_rdlock (_nl_state_lock);
+
+  /* If DOMAINNAME is NULL, we are interested in the default domain.  If
+     CATEGORY is not LC_MESSAGES this might not make much sense but the
+     definition left this undefined.  */
+  if (domainname == NULL)
+    domainname = _nl_current_default_domain;
+
+#if defined HAVE_TSEARCH || defined _LIBC
+  msgid_len = strlen (msgid1) + 1;
+
+  /* Try to find the translation among those which we found at
+     some time.  */
+  search = (struct known_translation_t *)
+          alloca (offsetof (struct known_translation_t, msgid) + msgid_len);
+  memcpy (search->msgid, msgid1, msgid_len);
+  search->domainname = (char *) domainname;
+  search->category = category;
+
+  foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
+  if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
+    {
+      /* Now deal with plural.  */
+      if (plural)
+       retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation,
+                               (*foundp)->translation_length);
+      else
+       retval = (char *) (*foundp)->translation;
+
+      __libc_rwlock_unlock (_nl_state_lock);
+      return retval;
+    }
+#endif
+
+  /* Preserve the `errno' value.  */
+  saved_errno = errno;
+
+  /* See whether this is a SUID binary or not.  */
+  DETERMINE_SECURE;
+
+  /* First find matching binding.  */
+  for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+    {
+      int compare = strcmp (domainname, binding->domainname);
+      if (compare == 0)
+       /* We found it!  */
+       break;
+      if (compare < 0)
+       {
+         /* It is not in the list.  */
+         binding = NULL;
+         break;
+       }
+    }
+
+  if (binding == NULL)
+    dirname = (char *) _nl_default_dirname;
+  else if (IS_ABSOLUTE_PATH (binding->dirname))
+    dirname = binding->dirname;
+  else
+    {
+      /* We have a relative path.  Make it absolute now.  */
+      size_t dirname_len = strlen (binding->dirname) + 1;
+      size_t path_max;
+      char *ret;
+
+      path_max = (unsigned int) PATH_MAX;
+      path_max += 2;           /* The getcwd docs say to do this.  */
+
+      for (;;)
+       {
+         dirname = (char *) alloca (path_max + dirname_len);
+         ADD_BLOCK (block_list, dirname);
+
+         __set_errno (0);
+         ret = getcwd (dirname, path_max);
+         if (ret != NULL || errno != ERANGE)
+           break;
+
+         path_max += path_max / 2;
+         path_max += PATH_INCR;
+       }
+
+      if (ret == NULL)
+       {
+         /* We cannot get the current working directory.  Don't signal an
+            error but simply return the default string.  */
+         FREE_BLOCKS (block_list);
+         __libc_rwlock_unlock (_nl_state_lock);
+         __set_errno (saved_errno);
+         return (plural == 0
+                 ? (char *) msgid1
+                 /* Use the Germanic plural rule.  */
+                 : n == 1 ? (char *) msgid1 : (char *) msgid2);
+       }
+
+      stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
+    }
+
+  /* Now determine the symbolic name of CATEGORY and its value.  */
+  categoryname = category_to_name (category);
+  categoryvalue = guess_category_value (category, categoryname);
+
+  domainname_len = strlen (domainname);
+  xdomainname = (char *) alloca (strlen (categoryname)
+                                + domainname_len + 5);
+  ADD_BLOCK (block_list, xdomainname);
+
+  stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
+                 domainname, domainname_len),
+         ".mo");
+
+  /* Creating working area.  */
+  single_locale = (char *) alloca (strlen (categoryvalue) + 1);
+  ADD_BLOCK (block_list, single_locale);
+
+
+  /* Search for the given string.  This is a loop because we perhaps
+     got an ordered list of languages to consider for the translation.  */
+  while (1)
+    {
+      /* Make CATEGORYVALUE point to the next element of the list.  */
+      while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
+       ++categoryvalue;
+      if (categoryvalue[0] == '\0')
+       {
+         /* The whole contents of CATEGORYVALUE has been searched but
+            no valid entry has been found.  We solve this situation
+            by implicitly appending a "C" entry, i.e. no translation
+            will take place.  */
+         single_locale[0] = 'C';
+         single_locale[1] = '\0';
+       }
+      else
+       {
+         char *cp = single_locale;
+         while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
+           *cp++ = *categoryvalue++;
+         *cp = '\0';
+
+         /* When this is a SUID binary we must not allow accessing files
+            outside the dedicated directories.  */
+         if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale))
+           /* Ingore this entry.  */
+           continue;
+       }
+
+      /* If the current locale value is C (or POSIX) we don't load a
+        domain.  Return the MSGID.  */
+      if (strcmp (single_locale, "C") == 0
+         || strcmp (single_locale, "POSIX") == 0)
+       {
+         FREE_BLOCKS (block_list);
+         __libc_rwlock_unlock (_nl_state_lock);
+         __set_errno (saved_errno);
+         return (plural == 0
+                 ? (char *) msgid1
+                 /* Use the Germanic plural rule.  */
+                 : n == 1 ? (char *) msgid1 : (char *) msgid2);
+       }
+
+
+      /* Find structure describing the message catalog matching the
+        DOMAINNAME and CATEGORY.  */
+      domain = _nl_find_domain (dirname, single_locale, xdomainname, binding);
+
+      if (domain != NULL)
+       {
+         retval = _nl_find_msg (domain, binding, msgid1, &retlen);
+
+         if (retval == NULL)
+           {
+             int cnt;
+
+             for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
+               {
+                 retval = _nl_find_msg (domain->successor[cnt], binding,
+                                        msgid1, &retlen);
+
+                 if (retval != NULL)
+                   {
+                     domain = domain->successor[cnt];
+                     break;
+                   }
+               }
+           }
+
+         if (retval != NULL)
+           {
+             /* Found the translation of MSGID1 in domain DOMAIN:
+                starting at RETVAL, RETLEN bytes.  */
+             FREE_BLOCKS (block_list);
+             __set_errno (saved_errno);
+#if defined HAVE_TSEARCH || defined _LIBC
+             if (foundp == NULL)
+               {
+                 /* Create a new entry and add it to the search tree.  */
+                 struct known_translation_t *newp;
+
+                 newp = (struct known_translation_t *)
+                   malloc (offsetof (struct known_translation_t, msgid)
+                           + msgid_len + domainname_len + 1);
+                 if (newp != NULL)
+                   {
+                     newp->domainname =
+                       mempcpy (newp->msgid, msgid1, msgid_len);
+                     memcpy (newp->domainname, domainname, domainname_len + 1);
+                     newp->category = category;
+                     newp->counter = _nl_msg_cat_cntr;
+                     newp->domain = domain;
+                     newp->translation = retval;
+                     newp->translation_length = retlen;
+
+                     /* Insert the entry in the search tree.  */
+                     foundp = (struct known_translation_t **)
+                       tsearch (newp, &root, transcmp);
+                     if (foundp == NULL
+                         || __builtin_expect (*foundp != newp, 0))
+                       /* The insert failed.  */
+                       free (newp);
+                   }
+               }
+             else
+               {
+                 /* We can update the existing entry.  */
+                 (*foundp)->counter = _nl_msg_cat_cntr;
+                 (*foundp)->domain = domain;
+                 (*foundp)->translation = retval;
+                 (*foundp)->translation_length = retlen;
+               }
+#endif
+             /* Now deal with plural.  */
+             if (plural)
+               retval = plural_lookup (domain, n, retval, retlen);
+
+             __libc_rwlock_unlock (_nl_state_lock);
+             return retval;
+           }
+       }
+    }
+  /* NOTREACHED */
+}
+
+
+char *
+internal_function
+_nl_find_msg (domain_file, domainbinding, msgid, lengthp)
+     struct loaded_l10nfile *domain_file;
+     struct binding *domainbinding;
+     const char *msgid;
+     size_t *lengthp;
+{
+  struct loaded_domain *domain;
+  size_t act;
+  char *result;
+  size_t resultlen;
+
+  if (domain_file->decided == 0)
+    _nl_load_domain (domain_file, domainbinding);
+
+  if (domain_file->data == NULL)
+    return NULL;
+
+  domain = (struct loaded_domain *) domain_file->data;
+
+  /* Locate the MSGID and its translation.  */
+  if (domain->hash_size > 2 && domain->hash_tab != NULL)
+    {
+      /* Use the hashing table.  */
+      nls_uint32 len = strlen (msgid);
+      nls_uint32 hash_val = hash_string (msgid);
+      nls_uint32 idx = hash_val % domain->hash_size;
+      nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
+
+      while (1)
+       {
+         nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]);
+
+         if (nstr == 0)
+           /* Hash table entry is empty.  */
+           return NULL;
+
+         /* Compare msgid with the original string at index nstr-1.
+            We compare the lengths with >=, not ==, because plural entries
+            are represented by strings with an embedded NUL.  */
+         if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) >= len
+             && (strcmp (msgid,
+                         domain->data + W (domain->must_swap,
+                                           domain->orig_tab[nstr - 1].offset))
+                 == 0))
+           {
+             act = nstr - 1;
+             goto found;
+           }
+
+         if (idx >= domain->hash_size - incr)
+           idx -= domain->hash_size - incr;
+         else
+           idx += incr;
+       }
+      /* NOTREACHED */
+    }
+  else
+    {
+      /* Try the default method:  binary search in the sorted array of
+        messages.  */
+      size_t top, bottom;
+
+      bottom = 0;
+      top = domain->nstrings;
+      while (bottom < top)
+       {
+         int cmp_val;
+
+         act = (bottom + top) / 2;
+         cmp_val = strcmp (msgid, (domain->data
+                                   + W (domain->must_swap,
+                                        domain->orig_tab[act].offset)));
+         if (cmp_val < 0)
+           top = act;
+         else if (cmp_val > 0)
+           bottom = act + 1;
+         else
+           goto found;
+       }
+      /* No translation was found.  */
+      return NULL;
+    }
+
+ found:
+  /* The translation was found at index ACT.  If we have to convert the
+     string to use a different character set, this is the time.  */
+  result = ((char *) domain->data
+           + W (domain->must_swap, domain->trans_tab[act].offset));
+  resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
+
+#if defined _LIBC || HAVE_ICONV
+  if (domain->codeset_cntr
+      != (domainbinding != NULL ? domainbinding->codeset_cntr : 0))
+    {
+      /* The domain's codeset has changed through bind_textdomain_codeset()
+        since the message catalog was initialized or last accessed.  We
+        have to reinitialize the converter.  */
+      _nl_free_domain_conv (domain);
+      _nl_init_domain_conv (domain_file, domain, domainbinding);
+    }
+
+  if (
+# ifdef _LIBC
+      domain->conv != (__gconv_t) -1
+# else
+#  if HAVE_ICONV
+      domain->conv != (iconv_t) -1
+#  endif
+# endif
+      )
+    {
+      /* We are supposed to do a conversion.  First allocate an
+        appropriate table with the same structure as the table
+        of translations in the file, where we can put the pointers
+        to the converted strings in.
+        There is a slight complication with plural entries.  They
+        are represented by consecutive NUL terminated strings.  We
+        handle this case by converting RESULTLEN bytes, including
+        NULs.  */
+
+      if (domain->conv_tab == NULL
+         && ((domain->conv_tab = (char **) calloc (domain->nstrings,
+                                                   sizeof (char *)))
+             == NULL))
+       /* Mark that we didn't succeed allocating a table.  */
+       domain->conv_tab = (char **) -1;
+
+      if (__builtin_expect (domain->conv_tab == (char **) -1, 0))
+       /* Nothing we can do, no more memory.  */
+       goto converted;
+
+      if (domain->conv_tab[act] == NULL)
+       {
+         /* We haven't used this string so far, so it is not
+            translated yet.  Do this now.  */
+         /* We use a bit more efficient memory handling.
+            We allocate always larger blocks which get used over
+            time.  This is faster than many small allocations.   */
+         __libc_lock_define_initialized (static, lock)
+# define INITIAL_BLOCK_SIZE    4080
+         static unsigned char *freemem;
+         static size_t freemem_size;
+
+         const unsigned char *inbuf;
+         unsigned char *outbuf;
+         int malloc_count;
+# ifndef _LIBC
+         transmem_block_t *transmem_list = NULL;
+# endif
+
+         __libc_lock_lock (lock);
+
+         inbuf = (const unsigned char *) result;
+         outbuf = freemem + sizeof (size_t);
+
+         malloc_count = 0;
+         while (1)
+           {
+             transmem_block_t *newmem;
+# ifdef _LIBC
+             size_t non_reversible;
+             int res;
+
+             if (freemem_size < sizeof (size_t))
+               goto resize_freemem;
+
+             res = __gconv (domain->conv,
+                            &inbuf, inbuf + resultlen,
+                            &outbuf,
+                            outbuf + freemem_size - sizeof (size_t),
+                            &non_reversible);
+
+             if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT)
+               break;
+
+             if (res != __GCONV_FULL_OUTPUT)
+               {
+                 __libc_lock_unlock (lock);
+                 goto converted;
+               }
+
+             inbuf = result;
+# else
+#  if HAVE_ICONV
+             const char *inptr = (const char *) inbuf;
+             size_t inleft = resultlen;
+             char *outptr = (char *) outbuf;
+             size_t outleft;
+
+             if (freemem_size < sizeof (size_t))
+               goto resize_freemem;
+
+             outleft = freemem_size - sizeof (size_t);
+             if (iconv (domain->conv,
+                        (ICONV_CONST char **) &inptr, &inleft,
+                        &outptr, &outleft)
+                 != (size_t) (-1))
+               {
+                 outbuf = (unsigned char *) outptr;
+                 break;
+               }
+             if (errno != E2BIG)
+               {
+                 __libc_lock_unlock (lock);
+                 goto converted;
+               }
+#  endif
+# endif
+
+           resize_freemem:
+             /* We must allocate a new buffer or resize the old one.  */
+             if (malloc_count > 0)
+               {
+                 ++malloc_count;
+                 freemem_size = malloc_count * INITIAL_BLOCK_SIZE;
+                 newmem = (transmem_block_t *) realloc (transmem_list,
+                                                        freemem_size);
+# ifdef _LIBC
+                 if (newmem != NULL)
+                   transmem_list = transmem_list->next;
+                 else
+                   {
+                     struct transmem_list *old = transmem_list;
+
+                     transmem_list = transmem_list->next;
+                     free (old);
+                   }
+# endif
+               }
+             else
+               {
+                 malloc_count = 1;
+                 freemem_size = INITIAL_BLOCK_SIZE;
+                 newmem = (transmem_block_t *) malloc (freemem_size);
+               }
+             if (__builtin_expect (newmem == NULL, 0))
+               {
+                 freemem = NULL;
+                 freemem_size = 0;
+                 __libc_lock_unlock (lock);
+                 goto converted;
+               }
+
+# ifdef _LIBC
+             /* Add the block to the list of blocks we have to free
+                 at some point.  */
+             newmem->next = transmem_list;
+             transmem_list = newmem;
+
+             freemem = newmem->data;
+             freemem_size -= offsetof (struct transmem_list, data);
+# else
+             transmem_list = newmem;
+             freemem = newmem;
+# endif
+
+             outbuf = freemem + sizeof (size_t);
+           }
+
+         /* We have now in our buffer a converted string.  Put this
+            into the table of conversions.  */
+         *(size_t *) freemem = outbuf - freemem - sizeof (size_t);
+         domain->conv_tab[act] = (char *) freemem;
+         /* Shrink freemem, but keep it aligned.  */
+         freemem_size -= outbuf - freemem;
+         freemem = outbuf;
+         freemem += freemem_size & (alignof (size_t) - 1);
+         freemem_size = freemem_size & ~ (alignof (size_t) - 1);
+
+         __libc_lock_unlock (lock);
+       }
+
+      /* Now domain->conv_tab[act] contains the translation of all
+        the plural variants.  */
+      result = domain->conv_tab[act] + sizeof (size_t);
+      resultlen = *(size_t *) domain->conv_tab[act];
+    }
+
+ converted:
+  /* The result string is converted.  */
+
+#endif /* _LIBC || HAVE_ICONV */
+
+  *lengthp = resultlen;
+  return result;
+}
+
+
+/* Look up a plural variant.  */
+static char *
+internal_function
+plural_lookup (domain, n, translation, translation_len)
+     struct loaded_l10nfile *domain;
+     unsigned long int n;
+     const char *translation;
+     size_t translation_len;
+{
+  struct loaded_domain *domaindata = (struct loaded_domain *) domain->data;
+  unsigned long int index;
+  const char *p;
+
+  index = plural_eval (domaindata->plural, n);
+  if (index >= domaindata->nplurals)
+    /* This should never happen.  It means the plural expression and the
+       given maximum value do not match.  */
+    index = 0;
+
+  /* Skip INDEX strings at TRANSLATION.  */
+  p = translation;
+  while (index-- > 0)
+    {
+#ifdef _LIBC
+      p = __rawmemchr (p, '\0');
+#else
+      p = strchr (p, '\0');
+#endif
+      /* And skip over the NUL byte.  */
+      p++;
+
+      if (p >= translation + translation_len)
+       /* This should never happen.  It means the plural expression
+          evaluated to a value larger than the number of variants
+          available for MSGID1.  */
+       return (char *) translation;
+    }
+  return (char *) p;
+}
+
+
+/* Function to evaluate the plural expression and return an index value.  */
+static unsigned long int
+internal_function
+plural_eval (pexp, n)
+     struct expression *pexp;
+     unsigned long int n;
+{
+  switch (pexp->nargs)
+    {
+    case 0:
+      switch (pexp->operation)
+       {
+       case var:
+         return n;
+       case num:
+         return pexp->val.num;
+       default:
+         break;
+       }
+      /* NOTREACHED */
+      break;
+    case 1:
+      {
+       /* pexp->operation must be lnot.  */
+       unsigned long int arg = plural_eval (pexp->val.args[0], n);
+       return ! arg;
+      }
+    case 2:
+      {
+       unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
+       if (pexp->operation == lor)
+         return leftarg || plural_eval (pexp->val.args[1], n);
+       else if (pexp->operation == land)
+         return leftarg && plural_eval (pexp->val.args[1], n);
+       else
+         {
+           unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
+
+           switch (pexp->operation)
+             {
+             case mult:
+               return leftarg * rightarg;
+             case divide:
+               return leftarg / rightarg;
+             case module:
+               return leftarg % rightarg;
+             case plus:
+               return leftarg + rightarg;
+             case minus:
+               return leftarg - rightarg;
+             case less_than:
+               return leftarg < rightarg;
+             case greater_than:
+               return leftarg > rightarg;
+             case less_or_equal:
+               return leftarg <= rightarg;
+             case greater_or_equal:
+               return leftarg >= rightarg;
+             case equal:
+               return leftarg == rightarg;
+             case not_equal:
+               return leftarg != rightarg;
+             default:
+               break;
+             }
+         }
+       /* NOTREACHED */
+       break;
+      }
+    case 3:
+      {
+       /* pexp->operation must be qmop.  */
+       unsigned long int boolarg = plural_eval (pexp->val.args[0], n);
+       return plural_eval (pexp->val.args[boolarg ? 1 : 2], n);
+      }
+    }
+  /* NOTREACHED */
+  return 0;
+}
+
+
+/* Return string representation of locale CATEGORY.  */
+static const char *
+internal_function
+category_to_name (category)
+     int category;
+{
+  const char *retval;
+
+  switch (category)
+  {
+#ifdef LC_COLLATE
+  case LC_COLLATE:
+    retval = "LC_COLLATE";
+    break;
+#endif
+#ifdef LC_CTYPE
+  case LC_CTYPE:
+    retval = "LC_CTYPE";
+    break;
+#endif
+#ifdef LC_MONETARY
+  case LC_MONETARY:
+    retval = "LC_MONETARY";
+    break;
+#endif
+#ifdef LC_NUMERIC
+  case LC_NUMERIC:
+    retval = "LC_NUMERIC";
+    break;
+#endif
+#ifdef LC_TIME
+  case LC_TIME:
+    retval = "LC_TIME";
+    break;
+#endif
+#ifdef LC_MESSAGES
+  case LC_MESSAGES:
+    retval = "LC_MESSAGES";
+    break;
+#endif
+#ifdef LC_RESPONSE
+  case LC_RESPONSE:
+    retval = "LC_RESPONSE";
+    break;
+#endif
+#ifdef LC_ALL
+  case LC_ALL:
+    /* This might not make sense but is perhaps better than any other
+       value.  */
+    retval = "LC_ALL";
+    break;
+#endif
+  default:
+    /* If you have a better idea for a default value let me know.  */
+    retval = "LC_XXX";
+  }
+
+  return retval;
+}
+
+/* Guess value of current locale from value of the environment variables.  */
+static const char *
+internal_function
+guess_category_value (category, categoryname)
+     int category;
+     const char *categoryname;
+{
+  const char *language;
+  const char *retval;
+
+  /* The highest priority value is the `LANGUAGE' environment
+     variable.  But we don't use the value if the currently selected
+     locale is the C locale.  This is a GNU extension.  */
+  language = getenv ("LANGUAGE");
+  if (language != NULL && language[0] == '\0')
+    language = NULL;
+
+  /* We have to proceed with the POSIX methods of looking to `LC_ALL',
+     `LC_xxx', and `LANG'.  On some systems this can be done by the
+     `setlocale' function itself.  */
+#if defined _LIBC || (defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL)
+  retval = setlocale (category, NULL);
+#else
+  /* Setting of LC_ALL overwrites all other.  */
+  retval = getenv ("LC_ALL");
+  if (retval == NULL || retval[0] == '\0')
+    {
+      /* Next comes the name of the desired category.  */
+      retval = getenv (categoryname);
+      if (retval == NULL || retval[0] == '\0')
+       {
+         /* Last possibility is the LANG environment variable.  */
+         retval = getenv ("LANG");
+         if (retval == NULL || retval[0] == '\0')
+           /* We use C as the default domain.  POSIX says this is
+              implementation defined.  */
+           return "C";
+       }
+    }
+#endif
+
+  return language != NULL && strcmp (retval, "C") != 0 ? language : retval;
+}
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library.  So we
+   avoid the non-standard function stpcpy.  In GNU C Library this
+   function is available, though.  Also allow the symbol HAVE_STPCPY
+   to be defined.  */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (dest, src)
+     char *dest;
+     const char *src;
+{
+  while ((*dest++ = *src++) != '\0')
+    /* Do nothing. */ ;
+  return dest - 1;
+}
+#endif
+
+#if !_LIBC && !HAVE_MEMPCPY
+static void *
+mempcpy (dest, src, n)
+     void *dest;
+     const void *src;
+     size_t n;
+{
+  return (void *) ((char *) memcpy (dest, src, n) + n);
+}
+#endif
+
+
+#ifdef _LIBC
+/* If we want to free all resources we have to do some work at
+   program's end.  */
+static void __attribute__ ((unused))
+free_mem (void)
+{
+  void *old;
+
+  while (_nl_domain_bindings != NULL)
+    {
+      struct binding *oldp = _nl_domain_bindings;
+      _nl_domain_bindings = _nl_domain_bindings->next;
+      if (oldp->dirname != _nl_default_dirname)
+       /* Yes, this is a pointer comparison.  */
+       free (oldp->dirname);
+      free (oldp->codeset);
+      free (oldp);
+    }
+
+  if (_nl_current_default_domain != _nl_default_default_domain)
+    /* Yes, again a pointer comparison.  */
+    free ((char *) _nl_current_default_domain);
+
+  /* Remove the search tree with the known translations.  */
+  __tdestroy (root, free);
+  root = NULL;
+
+  while (transmem_list != NULL)
+    {
+      old = transmem_list;
+      transmem_list = transmem_list->next;
+      free (old);
+    }
+}
+
+text_set_element (__libc_subfreeres, free_mem);
+#endif
diff --git a/intl/dcngettext.c b/intl/dcngettext.c
new file mode 100644 (file)
index 0000000..c16af21
--- /dev/null
@@ -0,0 +1,60 @@
+/* Implementation of the dcngettext(3) function.
+   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DCNGETTEXT __dcngettext
+# define DCIGETTEXT __dcigettext
+#else
+# define DCNGETTEXT dcngettext__
+# define DCIGETTEXT dcigettext__
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+char *
+DCNGETTEXT (domainname, msgid1, msgid2, n, category)
+     const char *domainname;
+     const char *msgid1;
+     const char *msgid2;
+     unsigned long int n;
+     int category;
+{
+  return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__dcngettext, dcngettext);
+#endif
diff --git a/intl/dgettext.c b/intl/dgettext.c
new file mode 100644 (file)
index 0000000..3651207
--- /dev/null
@@ -0,0 +1,59 @@
+/* Implementation of the dgettext(3) function.
+   Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <locale.h>
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DGETTEXT __dgettext
+# define DCGETTEXT __dcgettext
+#else
+# define DGETTEXT dgettext__
+# define DCGETTEXT dcgettext__
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+   LC_MESSAGES locale.  */
+char *
+DGETTEXT (domainname, msgid)
+     const char *domainname;
+     const char *msgid;
+{
+  return DCGETTEXT (domainname, msgid, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__dgettext, dgettext);
+#endif
diff --git a/intl/dngettext.c b/intl/dngettext.c
new file mode 100644 (file)
index 0000000..f214e95
--- /dev/null
@@ -0,0 +1,61 @@
+/* Implementation of the dngettext(3) function.
+   Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <locale.h>
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DNGETTEXT __dngettext
+# define DCNGETTEXT __dcngettext
+#else
+# define DNGETTEXT dngettext__
+# define DCNGETTEXT dcngettext__
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+   LC_MESSAGES locale and skip message according to the plural form.  */
+char *
+DNGETTEXT (domainname, msgid1, msgid2, n)
+     const char *domainname;
+     const char *msgid1;
+     const char *msgid2;
+     unsigned long int n;
+{
+  return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__dngettext, dngettext);
+#endif
diff --git a/intl/explodename.c b/intl/explodename.c
new file mode 100644 (file)
index 0000000..2985064
--- /dev/null
@@ -0,0 +1,192 @@
+/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found.  Sigh!  */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+#  define NULL ((void *) 0)
+# else
+#  define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+char *
+_nl_find_language (name)
+     const char *name;
+{
+  while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
+        && name[0] != '+' && name[0] != ',')
+    ++name;
+
+  return (char *) name;
+}
+
+
+int
+_nl_explode_name (name, language, modifier, territory, codeset,
+                 normalized_codeset, special, sponsor, revision)
+     char *name;
+     const char **language;
+     const char **modifier;
+     const char **territory;
+     const char **codeset;
+     const char **normalized_codeset;
+     const char **special;
+     const char **sponsor;
+     const char **revision;
+{
+  enum { undecided, xpg, cen } syntax;
+  char *cp;
+  int mask;
+
+  *modifier = NULL;
+  *territory = NULL;
+  *codeset = NULL;
+  *normalized_codeset = NULL;
+  *special = NULL;
+  *sponsor = NULL;
+  *revision = NULL;
+
+  /* Now we determine the single parts of the locale name.  First
+     look for the language.  Termination symbols are `_' and `@' if
+     we use XPG4 style, and `_', `+', and `,' if we use CEN syntax.  */
+  mask = 0;
+  syntax = undecided;
+  *language = cp = name;
+  cp = _nl_find_language (*language);
+
+  if (*language == cp)
+    /* This does not make sense: language has to be specified.  Use
+       this entry as it is without exploding.  Perhaps it is an alias.  */
+    cp = strchr (*language, '\0');
+  else if (cp[0] == '_')
+    {
+      /* Next is the territory.  */
+      cp[0] = '\0';
+      *territory = ++cp;
+
+      while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@'
+            && cp[0] != '+' && cp[0] != ',' && cp[0] != '_')
+       ++cp;
+
+      mask |= TERRITORY;
+
+      if (cp[0] == '.')
+       {
+         /* Next is the codeset.  */
+         syntax = xpg;
+         cp[0] = '\0';
+         *codeset = ++cp;
+
+         while (cp[0] != '\0' && cp[0] != '@')
+           ++cp;
+
+         mask |= XPG_CODESET;
+
+         if (*codeset != cp && (*codeset)[0] != '\0')
+           {
+             *normalized_codeset = _nl_normalize_codeset (*codeset,
+                                                          cp - *codeset);
+             if (strcmp (*codeset, *normalized_codeset) == 0)
+               free ((char *) *normalized_codeset);
+             else
+               mask |= XPG_NORM_CODESET;
+           }
+       }
+    }
+
+  if (cp[0] == '@' || (syntax != xpg && cp[0] == '+'))
+    {
+      /* Next is the modifier.  */
+      syntax = cp[0] == '@' ? xpg : cen;
+      cp[0] = '\0';
+      *modifier = ++cp;
+
+      while (syntax == cen && cp[0] != '\0' && cp[0] != '+'
+            && cp[0] != ',' && cp[0] != '_')
+       ++cp;
+
+      mask |= XPG_MODIFIER | CEN_AUDIENCE;
+    }
+
+  if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_'))
+    {
+      syntax = cen;
+
+      if (cp[0] == '+')
+       {
+         /* Next is special application (CEN syntax).  */
+         cp[0] = '\0';
+         *special = ++cp;
+
+         while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_')
+           ++cp;
+
+         mask |= CEN_SPECIAL;
+       }
+
+      if (cp[0] == ',')
+       {
+         /* Next is sponsor (CEN syntax).  */
+         cp[0] = '\0';
+         *sponsor = ++cp;
+
+         while (cp[0] != '\0' && cp[0] != '_')
+           ++cp;
+
+         mask |= CEN_SPONSOR;
+       }
+
+      if (cp[0] == '_')
+       {
+         /* Next is revision (CEN syntax).  */
+         cp[0] = '\0';
+         *revision = ++cp;
+
+         mask |= CEN_REVISION;
+       }
+    }
+
+  /* For CEN syntax values it might be important to have the
+     separator character in the file name, not for XPG syntax.  */
+  if (syntax == xpg)
+    {
+      if (*territory != NULL && (*territory)[0] == '\0')
+       mask &= ~TERRITORY;
+
+      if (*codeset != NULL && (*codeset)[0] == '\0')
+       mask &= ~XPG_CODESET;
+
+      if (*modifier != NULL && (*modifier)[0] == '\0')
+       mask &= ~XPG_MODIFIER;
+    }
+
+  return mask;
+}
diff --git a/intl/finddomain.c b/intl/finddomain.c
new file mode 100644 (file)
index 0000000..2f103d5
--- /dev/null
@@ -0,0 +1,198 @@
+/* Handle list of needed message catalogs
+   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@gnu.org>, 1995.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+/* List of already loaded domains.  */
+static struct loaded_l10nfile *_nl_loaded_domains;
+
+
+/* Return a data structure describing the message catalog described by
+   the DOMAINNAME and CATEGORY parameters with respect to the currently
+   established bindings.  */
+struct loaded_l10nfile *
+internal_function
+_nl_find_domain (dirname, locale, domainname, domainbinding)
+     const char *dirname;
+     char *locale;
+     const char *domainname;
+     struct binding *domainbinding;
+{
+  struct loaded_l10nfile *retval;
+  const char *language;
+  const char *modifier;
+  const char *territory;
+  const char *codeset;
+  const char *normalized_codeset;
+  const char *special;
+  const char *sponsor;
+  const char *revision;
+  const char *alias_value;
+  int mask;
+
+  /* LOCALE can consist of up to four recognized parts for the XPG syntax:
+
+               language[_territory[.codeset]][@modifier]
+
+     and six parts for the CEN syntax:
+
+       language[_territory][+audience][+special][,[sponsor][_revision]]
+
+     Beside the first part all of them are allowed to be missing.  If
+     the full specified locale is not found, the less specific one are
+     looked for.  The various parts will be stripped off according to
+     the following order:
+               (1) revision
+               (2) sponsor
+               (3) special
+               (4) codeset
+               (5) normalized codeset
+               (6) territory
+               (7) audience/modifier
+   */
+
+  /* If we have already tested for this locale entry there has to
+     be one data set in the list of loaded domains.  */
+  retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+                              strlen (dirname) + 1, 0, locale, NULL, NULL,
+                              NULL, NULL, NULL, NULL, NULL, domainname, 0);
+  if (retval != NULL)
+    {
+      /* We know something about this locale.  */
+      int cnt;
+
+      if (retval->decided == 0)
+       _nl_load_domain (retval, domainbinding);
+
+      if (retval->data != NULL)
+       return retval;
+
+      for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+       {
+         if (retval->successor[cnt]->decided == 0)
+           _nl_load_domain (retval->successor[cnt], domainbinding);
+
+         if (retval->successor[cnt]->data != NULL)
+           break;
+       }
+      return cnt >= 0 ? retval : NULL;
+      /* NOTREACHED */
+    }
+
+  /* See whether the locale value is an alias.  If yes its value
+     *overwrites* the alias name.  No test for the original value is
+     done.  */
+  alias_value = _nl_expand_alias (locale);
+  if (alias_value != NULL)
+    {
+#if defined _LIBC || defined HAVE_STRDUP
+      locale = strdup (alias_value);
+      if (locale == NULL)
+       return NULL;
+#else
+      size_t len = strlen (alias_value) + 1;
+      locale = (char *) malloc (len);
+      if (locale == NULL)
+       return NULL;
+
+      memcpy (locale, alias_value, len);
+#endif
+    }
+
+  /* Now we determine the single parts of the locale name.  First
+     look for the language.  Termination symbols are `_' and `@' if
+     we use XPG4 style, and `_', `+', and `,' if we use CEN syntax.  */
+  mask = _nl_explode_name (locale, &language, &modifier, &territory,
+                          &codeset, &normalized_codeset, &special,
+                          &sponsor, &revision);
+
+  /* Create all possible locale entries which might be interested in
+     generalization.  */
+  retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+                              strlen (dirname) + 1, mask, language, territory,
+                              codeset, normalized_codeset, modifier, special,
+                              sponsor, revision, domainname, 1);
+  if (retval == NULL)
+    /* This means we are out of core.  */
+    return NULL;
+
+  if (retval->decided == 0)
+    _nl_load_domain (retval, domainbinding);
+  if (retval->data == NULL)
+    {
+      int cnt;
+      for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+       {
+         if (retval->successor[cnt]->decided == 0)
+           _nl_load_domain (retval->successor[cnt], domainbinding);
+         if (retval->successor[cnt]->data != NULL)
+           break;
+       }
+    }
+
+  /* The room for an alias was dynamically allocated.  Free it now.  */
+  if (alias_value != NULL)
+    free (locale);
+
+  /* The space for normalized_codeset is dynamically allocated.  Free it.  */
+  if (mask & XPG_NORM_CODESET)
+    free ((void *) normalized_codeset);
+
+  return retval;
+}
+
+
+#ifdef _LIBC
+static void __attribute__ ((unused))
+free_mem (void)
+{
+  struct loaded_l10nfile *runp = _nl_loaded_domains;
+
+  while (runp != NULL)
+    {
+      struct loaded_l10nfile *here = runp;
+      if (runp->data != NULL)
+       _nl_unload_domain ((struct loaded_domain *) runp->data);
+      runp = runp->next;
+      free ((char *) here->filename);
+      free (here);
+    }
+}
+
+text_set_element (__libc_subfreeres, free_mem);
+#endif
diff --git a/intl/gettext.c b/intl/gettext.c
new file mode 100644 (file)
index 0000000..22a6c24
--- /dev/null
@@ -0,0 +1,64 @@
+/* Implementation of gettext(3) function.
+   Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define __need_NULL
+# include <stddef.h>
+#else
+# include <stdlib.h>           /* Just for NULL.  */
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define GETTEXT __gettext
+# define DCGETTEXT __dcgettext
+#else
+# define GETTEXT gettext__
+# define DCGETTEXT dcgettext__
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
+   text).  */
+char *
+GETTEXT (msgid)
+     const char *msgid;
+{
+  return DCGETTEXT (NULL, msgid, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__gettext, gettext);
+#endif
diff --git a/intl/gettext.h b/intl/gettext.h
new file mode 100644 (file)
index 0000000..6f5d760
--- /dev/null
@@ -0,0 +1,102 @@
+/* Description of GNU message catalog format: general file layout.
+   Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifndef _GETTEXT_H
+#define _GETTEXT_H 1
+
+#if HAVE_LIMITS_H || _LIBC
+# include <limits.h>
+#endif
+
+/* @@ end of prolog @@ */
+
+/* The magic number of the GNU message catalog format.  */
+#define _MAGIC 0x950412de
+#define _MAGIC_SWAPPED 0xde120495
+
+/* Revision number of the currently used .mo (binary) file format.  */
+#define MO_REVISION_NUMBER 0
+
+/* The following contortions are an attempt to use the C preprocessor
+   to determine an unsigned integral type that is 32 bits wide.  An
+   alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
+   as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
+   when cross-compiling.  */
+
+#if __STDC__
+# define UINT_MAX_32_BITS 4294967295U
+#else
+# define UINT_MAX_32_BITS 0xFFFFFFFF
+#endif
+
+/* If UINT_MAX isn't defined, assume it's a 32-bit type.
+   This should be valid for all systems GNU cares about because
+   that doesn't include 16-bit systems, and only modern systems
+   (that certainly have <limits.h>) have 64+-bit integral types.  */
+
+#ifndef UINT_MAX
+# define UINT_MAX UINT_MAX_32_BITS
+#endif
+
+#if UINT_MAX == UINT_MAX_32_BITS
+typedef unsigned nls_uint32;
+#else
+# if USHRT_MAX == UINT_MAX_32_BITS
+typedef unsigned short nls_uint32;
+# else
+#  if ULONG_MAX == UINT_MAX_32_BITS
+typedef unsigned long nls_uint32;
+#  else
+  /* The following line is intended to throw an error.  Using #error is
+     not portable enough.  */
+  "Cannot determine unsigned 32-bit data type."
+#  endif
+# endif
+#endif
+
+
+/* Header for binary .mo file format.  */
+struct mo_file_header
+{
+  /* The magic number.  */
+  nls_uint32 magic;
+  /* The revision number of the file format.  */
+  nls_uint32 revision;
+  /* The number of strings pairs.  */
+  nls_uint32 nstrings;
+  /* Offset of table with start offsets of original strings.  */
+  nls_uint32 orig_tab_offset;
+  /* Offset of table with start offsets of translation strings.  */
+  nls_uint32 trans_tab_offset;
+  /* Size of hashing table.  */
+  nls_uint32 hash_tab_size;
+  /* Offset of first hashing entry.  */
+  nls_uint32 hash_tab_offset;
+};
+
+struct string_desc
+{
+  /* Length of addressed string.  */
+  nls_uint32 length;
+  /* Offset of string in file.  */
+  nls_uint32 offset;
+};
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettext.h  */
diff --git a/intl/gettextP.h b/intl/gettextP.h
new file mode 100644 (file)
index 0000000..43de1cd
--- /dev/null
@@ -0,0 +1,252 @@
+/* Header describing internals of libintl library.
+   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifndef _GETTEXTP_H
+#define _GETTEXTP_H
+
+#include <stddef.h>            /* Get size_t.  */
+
+#ifdef _LIBC
+# include "../iconv/gconv_int.h"
+#else
+# if HAVE_ICONV
+#  include <iconv.h>
+# endif
+#endif
+
+#include "loadinfo.h"
+
+#include "gettext.h"           /* Get nls_uint32.  */
+
+/* @@ end of prolog @@ */
+
+#ifndef PARAMS
+# if __STDC__
+#  define PARAMS(args) args
+# else
+#  define PARAMS(args) ()
+# endif
+#endif
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+/* Tell the compiler when a conditional or integer expression is
+   almost always true or almost always false.  */
+#ifndef HAVE_BUILTIN_EXPECT
+# define __builtin_expect(expr, val) (expr)
+#endif
+
+#ifndef W
+# define W(flag, data) ((flag) ? SWAP (data) : (data))
+#endif
+
+
+#ifdef _LIBC
+# include <byteswap.h>
+# define SWAP(i) bswap_32 (i)
+#else
+static inline nls_uint32
+SWAP (i)
+     nls_uint32 i;
+{
+  return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
+}
+#endif
+
+
+/* This is the representation of the expressions to determine the
+   plural form.  */
+struct expression
+{
+  int nargs;                   /* Number of arguments.  */
+  enum operator
+  {
+    /* Without arguments:  */
+    var,                       /* The variable "n".  */
+    num,                       /* Decimal number.  */
+    /* Unary operators:  */
+    lnot,                      /* Logical NOT.  */
+    /* Binary operators:  */
+    mult,                      /* Multiplication.  */
+    divide,                    /* Division.  */
+    module,                    /* Module operation.  */
+    plus,                      /* Addition.  */
+    minus,                     /* Subtraction.  */
+    less_than,                 /* Comparison.  */
+    greater_than,              /* Comparison.  */
+    less_or_equal,             /* Comparison.  */
+    greater_or_equal,          /* Comparison.  */
+    equal,                     /* Comparision for equality.  */
+    not_equal,                 /* Comparision for inequality.  */
+    land,                      /* Logical AND.  */
+    lor,                       /* Logical OR.  */
+    /* Ternary operators:  */
+    qmop                       /* Question mark operator.  */
+  } operation;
+  union
+  {
+    unsigned long int num;     /* Number value for `num'.  */
+    struct expression *args[3];        /* Up to three arguments.  */
+  } val;
+};
+
+/* This is the data structure to pass information to the parser and get
+   the result in a thread-safe way.  */
+struct parse_args
+{
+  const char *cp;
+  struct expression *res;
+};
+
+
+/* The representation of an opened message catalog.  */
+struct loaded_domain
+{
+  const char *data;
+  int use_mmap;
+  size_t mmap_size;
+  int must_swap;
+  nls_uint32 nstrings;
+  struct string_desc *orig_tab;
+  struct string_desc *trans_tab;
+  nls_uint32 hash_size;
+  nls_uint32 *hash_tab;
+  int codeset_cntr;
+#ifdef _LIBC
+  __gconv_t conv;
+#else
+# if HAVE_ICONV
+  iconv_t conv;
+# endif
+#endif
+  char **conv_tab;
+
+  struct expression *plural;
+  unsigned long int nplurals;
+};
+
+/* We want to allocate a string at the end of the struct.  But ISO C
+   doesn't allow zero sized arrays.  */
+#ifdef __GNUC__
+# define ZERO 0
+#else
+# define ZERO 1
+#endif
+
+/* A set of settings bound to a message domain.  Used to store settings
+   from bindtextdomain() and bind_textdomain_codeset().  */
+struct binding
+{
+  struct binding *next;
+  char *dirname;
+  int codeset_cntr;    /* Incremented each time codeset changes.  */
+  char *codeset;
+  char domainname[ZERO];
+};
+
+/* A counter which is incremented each time some previous translations
+   become invalid.
+   This variable is part of the external ABI of the GNU libintl.  */
+extern int _nl_msg_cat_cntr;
+
+struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
+                                                char *__locale,
+                                                const char *__domainname,
+                                             struct binding *__domainbinding))
+     internal_function;
+void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain,
+                             struct binding *__domainbinding))
+     internal_function;
+void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
+     internal_function;
+const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file,
+                                         struct loaded_domain *__domain,
+                                         struct binding *__domainbinding))
+     internal_function;
+void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain))
+     internal_function;
+
+char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file,
+                           struct binding *domainbinding,
+                           const char *msgid, size_t *lengthp))
+     internal_function;
+
+#ifdef _LIBC
+extern char *__gettext PARAMS ((const char *__msgid));
+extern char *__dgettext PARAMS ((const char *__domainname,
+                                const char *__msgid));
+extern char *__dcgettext PARAMS ((const char *__domainname,
+                                 const char *__msgid, int __category));
+extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
+                                unsigned long int __n));
+extern char *__dngettext PARAMS ((const char *__domainname,
+                                 const char *__msgid1, const char *__msgid2,
+                                 unsigned long int n));
+extern char *__dcngettext PARAMS ((const char *__domainname,
+                                  const char *__msgid1, const char *__msgid2,
+                                  unsigned long int __n, int __category));
+extern char *__dcigettext PARAMS ((const char *__domainname,
+                                  const char *__msgid1, const char *__msgid2,
+                                  int __plural, unsigned long int __n,
+                                  int __category));
+extern char *__textdomain PARAMS ((const char *__domainname));
+extern char *__bindtextdomain PARAMS ((const char *__domainname,
+                                      const char *__dirname));
+extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname,
+                                               const char *__codeset));
+#else
+extern char *gettext__ PARAMS ((const char *__msgid));
+extern char *dgettext__ PARAMS ((const char *__domainname,
+                                const char *__msgid));
+extern char *dcgettext__ PARAMS ((const char *__domainname,
+                                 const char *__msgid, int __category));
+extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2,
+                                unsigned long int __n));
+extern char *dngettext__ PARAMS ((const char *__domainname,
+                                 const char *__msgid1, const char *__msgid2,
+                                 unsigned long int __n));
+extern char *dcngettext__ PARAMS ((const char *__domainname,
+                                  const char *__msgid1, const char *__msgid2,
+                                  unsigned long int __n, int __category));
+extern char *dcigettext__ PARAMS ((const char *__domainname,
+                                  const char *__msgid1, const char *__msgid2,
+                                  int __plural, unsigned long int __n,
+                                  int __category));
+extern char *textdomain__ PARAMS ((const char *__domainname));
+extern char *bindtextdomain__ PARAMS ((const char *__domainname,
+                                      const char *__dirname));
+extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname,
+                                               const char *__codeset));
+#endif
+
+#ifdef _LIBC
+extern void __gettext_free_exp PARAMS ((struct expression *exp))
+     internal_function;
+extern int __gettextparse PARAMS ((void *arg));
+#else
+extern void gettext_free_exp__ PARAMS ((struct expression *exp))
+     internal_function;
+extern int gettextparse__ PARAMS ((void *arg));
+#endif
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettextP.h  */
diff --git a/intl/hash-string.h b/intl/hash-string.h
new file mode 100644 (file)
index 0000000..ccb7acc
--- /dev/null
@@ -0,0 +1,59 @@
+/* Description of GNU message catalog format: string hashing function.
+   Copyright (C) 1995, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* @@ end of prolog @@ */
+
+#ifndef PARAMS
+# if __STDC__
+#  define PARAMS(Args) Args
+# else
+#  define PARAMS(Args) ()
+# endif
+#endif
+
+/* We assume to have `unsigned long int' value with at least 32 bits.  */
+#define HASHWORDBITS 32
+
+
+/* Defines the so called `hashpjw' function by P.J. Weinberger
+   [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
+   1986, 1987 Bell Telephone Laboratories, Inc.]  */
+static unsigned long int hash_string PARAMS ((const char *__str_param));
+
+static inline unsigned long int
+hash_string (str_param)
+     const char *str_param;
+{
+  unsigned long int hval, g;
+  const char *str = str_param;
+
+  /* Compute the hash value for the given string.  */
+  hval = 0;
+  while (*str != '\0')
+    {
+      hval <<= 4;
+      hval += (unsigned long int) *str++;
+      g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
+      if (g != 0)
+       {
+         hval ^= g >> (HASHWORDBITS - 8);
+         hval ^= g;
+       }
+    }
+  return hval;
+}
diff --git a/intl/intl-compat.c b/intl/intl-compat.c
new file mode 100644 (file)
index 0000000..0a06ce9
--- /dev/null
@@ -0,0 +1,166 @@
+/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
+   Library.
+   Copyright (C) 1995, 2000, 2001 Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "libgnuintl.h"
+#include "gettextP.h"
+
+/* @@ end of prolog @@ */
+
+/* This file redirects the gettext functions (without prefix or suffix) to
+   those defined in the included GNU gettext library (with "__" suffix).
+   It is compiled into libintl when the included GNU gettext library is
+   configured --with-included-gettext.
+
+   This redirection works also in the case that the system C library or
+   the system libintl library contain gettext/textdomain/... functions.
+   If it didn't, we would need to add preprocessor level redirections to
+   libgnuintl.h of the following form:
+
+#    define gettext gettext__
+#    define dgettext dgettext__
+#    define dcgettext dcgettext__
+#    define ngettext ngettext__
+#    define dngettext dngettext__
+#    define dcngettext dcngettext__
+#    define textdomain textdomain__
+#    define bindtextdomain bindtextdomain__
+#    define bind_textdomain_codeset bind_textdomain_codeset__
+
+   How does this redirection work? There are two cases.
+   A. When libintl.a is linked into an executable, it works because
+      functions defined in the executable always override functions in
+      the shared libraries.
+   B. When libintl.so is used, it works because
+      1. those systems defining gettext/textdomain/... in the C library
+         (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer) are
+         ELF systems and define these symbols as weak, thus explicitly
+         letting other shared libraries override it.
+      2. those systems defining gettext/textdomain/... in a standalone
+         libintl.so library (namely, Solaris 2.3 and newer) have this
+         shared library in /usr/lib, and the linker will search /usr/lib
+         *after* the directory where the GNU gettext library is installed.
+
+   A third case, namely when libintl.a is linked into a shared library
+   whose name is not libintl.so, is not supported. In this case, on
+   Solaris, when -lintl precedes the linker option for the shared library
+   containing GNU gettext, the system's gettext would indeed override
+   the GNU gettext. Anyone doing this kind of stuff must be clever enough
+   to 1. compile libintl.a with -fPIC, 2. remove -lintl from his linker
+   command line.  */
+
+
+#undef gettext
+#undef dgettext
+#undef dcgettext
+#undef ngettext
+#undef dngettext
+#undef dcngettext
+#undef textdomain
+#undef bindtextdomain
+#undef bind_textdomain_codeset
+
+
+char *
+gettext (msgid)
+     const char *msgid;
+{
+  return gettext__ (msgid);
+}
+
+
+char *
+dgettext (domainname, msgid)
+     const char *domainname;
+     const char *msgid;
+{
+  return dgettext__ (domainname, msgid);
+}
+
+
+char *
+dcgettext (domainname, msgid, category)
+     const char *domainname;
+     const char *msgid;
+     int category;
+{
+  return dcgettext__ (domainname, msgid, category);
+}
+
+
+char *
+ngettext (msgid1, msgid2, n)
+     const char *msgid1;
+     const char *msgid2;
+     unsigned long int n;
+{
+  return ngettext__ (msgid1, msgid2, n);
+}
+
+
+char *
+dngettext (domainname, msgid1, msgid2, n)
+     const char *domainname;
+     const char *msgid1;
+     const char *msgid2;
+     unsigned long int n;
+{
+  return dngettext__ (domainname, msgid1, msgid2, n);
+}
+
+
+char *
+dcngettext (domainname, msgid1, msgid2, n, category)
+     const char *domainname;
+     const char *msgid1;
+     const char *msgid2;
+     unsigned long int n;
+     int category;
+{
+  return dcngettext__ (domainname, msgid1, msgid2, n, category);
+}
+
+
+char *
+textdomain (domainname)
+     const char *domainname;
+{
+  return textdomain__ (domainname);
+}
+
+
+char *
+bindtextdomain (domainname, dirname)
+     const char *domainname;
+     const char *dirname;
+{
+  return bindtextdomain__ (domainname, dirname);
+}
+
+
+char *
+bind_textdomain_codeset (domainname, codeset)
+     const char *domainname;
+     const char *codeset;
+{
+  return bind_textdomain_codeset__ (domainname, codeset);
+}
diff --git a/intl/l10nflist.c b/intl/l10nflist.c
new file mode 100644 (file)
index 0000000..8e2605b
--- /dev/null
@@ -0,0 +1,405 @@
+/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* Tell glibc's <string.h> to provide a prototype for stpcpy().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE   1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+#if !HAVE_STRCHR && !defined _LIBC
+# ifndef strchr
+#  define strchr index
+# endif
+#endif
+
+#if defined _LIBC || defined HAVE_ARGZ_H
+# include <argz.h>
+#endif
+#include <ctype.h>
+#include <sys/types.h>
+#include <stdlib.h>
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found.  Sigh!  */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+#  define NULL ((void *) 0)
+# else
+#  define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions.  This is required by the standard
+   because some ANSI C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# ifndef stpcpy
+#  define stpcpy(dest, src) __stpcpy(dest, src)
+# endif
+#else
+# ifndef HAVE_STPCPY
+static char *stpcpy PARAMS ((char *dest, const char *src));
+# endif
+#endif
+
+/* Define function which are usually not available.  */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
+/* Returns the number of strings in ARGZ.  */
+static size_t argz_count__ PARAMS ((const char *argz, size_t len));
+
+static size_t
+argz_count__ (argz, len)
+     const char *argz;
+     size_t len;
+{
+  size_t count = 0;
+  while (len > 0)
+    {
+      size_t part_len = strlen (argz);
+      argz += part_len + 1;
+      len -= part_len + 1;
+      count++;
+    }
+  return count;
+}
+# undef __argz_count
+# define __argz_count(argz, len) argz_count__ (argz, len)
+#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
+/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
+   except the last into the character SEP.  */
+static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep));
+
+static void
+argz_stringify__ (argz, len, sep)
+     char *argz;
+     size_t len;
+     int sep;
+{
+  while (len > 0)
+    {
+      size_t part_len = strlen (argz);
+      argz += part_len;
+      len -= part_len + 1;
+      if (len > 0)
+       *argz++ = sep;
+    }
+}
+# undef __argz_stringify
+# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
+#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
+static char *argz_next__ PARAMS ((char *argz, size_t argz_len,
+                                 const char *entry));
+
+static char *
+argz_next__ (argz, argz_len, entry)
+     char *argz;
+     size_t argz_len;
+     const char *entry;
+{
+  if (entry)
+    {
+      if (entry < argz + argz_len)
+        entry = strchr (entry, '\0') + 1;
+
+      return entry >= argz + argz_len ? NULL : (char *) entry;
+    }
+  else
+    if (argz_len > 0)
+      return argz;
+    else
+      return 0;
+}
+# undef __argz_next
+# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry)
+#endif /* !_LIBC && !HAVE___ARGZ_NEXT */
+
+
+/* Return number of bits set in X.  */
+static int pop PARAMS ((int x));
+
+static inline int
+pop (x)
+     int x;
+{
+  /* We assume that no more than 16 bits are used.  */
+  x = ((x & ~0x5555) >> 1) + (x & 0x5555);
+  x = ((x & ~0x3333) >> 2) + (x & 0x3333);
+  x = ((x >> 4) + x) & 0x0f0f;
+  x = ((x >> 8) + x) & 0xff;
+
+  return x;
+}
+
+\f
+struct loaded_l10nfile *
+_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
+                   territory, codeset, normalized_codeset, modifier, special,
+                   sponsor, revision, filename, do_allocate)
+     struct loaded_l10nfile **l10nfile_list;
+     const char *dirlist;
+     size_t dirlist_len;
+     int mask;
+     const char *language;
+     const char *territory;
+     const char *codeset;
+     const char *normalized_codeset;
+     const char *modifier;
+     const char *special;
+     const char *sponsor;
+     const char *revision;
+     const char *filename;
+     int do_allocate;
+{
+  char *abs_filename;
+  struct loaded_l10nfile *last = NULL;
+  struct loaded_l10nfile *retval;
+  char *cp;
+  size_t entries;
+  int cnt;
+
+  /* Allocate room for the full file name.  */
+  abs_filename = (char *) malloc (dirlist_len
+                                 + strlen (language)
+                                 + ((mask & TERRITORY) != 0
+                                    ? strlen (territory) + 1 : 0)
+                                 + ((mask & XPG_CODESET) != 0
+                                    ? strlen (codeset) + 1 : 0)
+                                 + ((mask & XPG_NORM_CODESET) != 0
+                                    ? strlen (normalized_codeset) + 1 : 0)
+                                 + (((mask & XPG_MODIFIER) != 0
+                                     || (mask & CEN_AUDIENCE) != 0)
+                                    ? strlen (modifier) + 1 : 0)
+                                 + ((mask & CEN_SPECIAL) != 0
+                                    ? strlen (special) + 1 : 0)
+                                 + (((mask & CEN_SPONSOR) != 0
+                                     || (mask & CEN_REVISION) != 0)
+                                    ? (1 + ((mask & CEN_SPONSOR) != 0
+                                            ? strlen (sponsor) + 1 : 0)
+                                       + ((mask & CEN_REVISION) != 0
+                                          ? strlen (revision) + 1 : 0)) : 0)
+                                 + 1 + strlen (filename) + 1);
+
+  if (abs_filename == NULL)
+    return NULL;
+
+  retval = NULL;
+  last = NULL;
+
+  /* Construct file name.  */
+  memcpy (abs_filename, dirlist, dirlist_len);
+  __argz_stringify (abs_filename, dirlist_len, PATH_SEPARATOR);
+  cp = abs_filename + (dirlist_len - 1);
+  *cp++ = '/';
+  cp = stpcpy (cp, language);
+
+  if ((mask & TERRITORY) != 0)
+    {
+      *cp++ = '_';
+      cp = stpcpy (cp, territory);
+    }
+  if ((mask & XPG_CODESET) != 0)
+    {
+      *cp++ = '.';
+      cp = stpcpy (cp, codeset);
+    }
+  if ((mask & XPG_NORM_CODESET) != 0)
+    {
+      *cp++ = '.';
+      cp = stpcpy (cp, normalized_codeset);
+    }
+  if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0)
+    {
+      /* This component can be part of both syntaces but has different
+        leading characters.  For CEN we use `+', else `@'.  */
+      *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@';
+      cp = stpcpy (cp, modifier);
+    }
+  if ((mask & CEN_SPECIAL) != 0)
+    {
+      *cp++ = '+';
+      cp = stpcpy (cp, special);
+    }
+  if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0)
+    {
+      *cp++ = ',';
+      if ((mask & CEN_SPONSOR) != 0)
+       cp = stpcpy (cp, sponsor);
+      if ((mask & CEN_REVISION) != 0)
+       {
+         *cp++ = '_';
+         cp = stpcpy (cp, revision);
+       }
+    }
+
+  *cp++ = '/';
+  stpcpy (cp, filename);
+
+  /* Look in list of already loaded domains whether it is already
+     available.  */
+  last = NULL;
+  for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
+    if (retval->filename != NULL)
+      {
+       int compare = strcmp (retval->filename, abs_filename);
+       if (compare == 0)
+         /* We found it!  */
+         break;
+       if (compare < 0)
+         {
+           /* It's not in the list.  */
+           retval = NULL;
+           break;
+         }
+
+       last = retval;
+      }
+
+  if (retval != NULL || do_allocate == 0)
+    {
+      free (abs_filename);
+      return retval;
+    }
+
+  retval = (struct loaded_l10nfile *)
+    malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len)
+                               * (1 << pop (mask))
+                               * sizeof (struct loaded_l10nfile *)));
+  if (retval == NULL)
+    return NULL;
+
+  retval->filename = abs_filename;
+  retval->decided = (__argz_count (dirlist, dirlist_len) != 1
+                    || ((mask & XPG_CODESET) != 0
+                        && (mask & XPG_NORM_CODESET) != 0));
+  retval->data = NULL;
+
+  if (last == NULL)
+    {
+      retval->next = *l10nfile_list;
+      *l10nfile_list = retval;
+    }
+  else
+    {
+      retval->next = last->next;
+      last->next = retval;
+    }
+
+  entries = 0;
+  /* If the DIRLIST is a real list the RETVAL entry corresponds not to
+     a real file.  So we have to use the DIRLIST separation mechanism
+     of the inner loop.  */
+  cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask;
+  for (; cnt >= 0; --cnt)
+    if ((cnt & ~mask) == 0
+       && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
+       && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
+      {
+       /* Iterate over all elements of the DIRLIST.  */
+       char *dir = NULL;
+
+       while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
+              != NULL)
+         retval->successor[entries++]
+           = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt,
+                                 language, territory, codeset,
+                                 normalized_codeset, modifier, special,
+                                 sponsor, revision, filename, 1);
+      }
+  retval->successor[entries] = NULL;
+
+  return retval;
+}
+\f
+/* Normalize codeset name.  There is no standard for the codeset
+   names.  Normalization allows the user to use any of the common
+   names.  The return value is dynamically allocated and has to be
+   freed by the caller.  */
+const char *
+_nl_normalize_codeset (codeset, name_len)
+     const char *codeset;
+     size_t name_len;
+{
+  int len = 0;
+  int only_digit = 1;
+  char *retval;
+  char *wp;
+  size_t cnt;
+
+  for (cnt = 0; cnt < name_len; ++cnt)
+    if (isalnum ((unsigned char) codeset[cnt]))
+      {
+       ++len;
+
+       if (isalpha ((unsigned char) codeset[cnt]))
+         only_digit = 0;
+      }
+
+  retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1);
+
+  if (retval != NULL)
+    {
+      if (only_digit)
+       wp = stpcpy (retval, "iso");
+      else
+       wp = retval;
+
+      for (cnt = 0; cnt < name_len; ++cnt)
+       if (isalpha ((unsigned char) codeset[cnt]))
+         *wp++ = tolower ((unsigned char) codeset[cnt]);
+       else if (isdigit ((unsigned char) codeset[cnt]))
+         *wp++ = codeset[cnt];
+
+      *wp = '\0';
+    }
+
+  return (const char *) retval;
+}
+
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library.  So we
+   avoid the non-standard function stpcpy.  In GNU C Library this
+   function is available, though.  Also allow the symbol HAVE_STPCPY
+   to be defined.  */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (dest, src)
+     char *dest;
+     const char *src;
+{
+  while ((*dest++ = *src++) != '\0')
+    /* Do nothing. */ ;
+  return dest - 1;
+}
+#endif
diff --git a/intl/libgettext.h b/intl/libgettext.h
new file mode 100644 (file)
index 0000000..c5be54a
--- /dev/null
@@ -0,0 +1,49 @@
+/* Convenience header for conditional use of GNU <libintl.h>.
+   Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option.  */
+#if ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions.  */
+# include <libintl.h>
+
+#else
+
+# define gettext(Msgid) (Msgid)
+# define dgettext(Domainname, Msgid) (Msgid)
+# define dcgettext(Domainname, Msgid, Category) (Msgid)
+# define ngettext(Msgid1, Msgid2, N) \
+    ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+    ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+    ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
+# define textdomain(Domainname) ((char *) (Domainname))
+# define bindtextdomain(Domainname, Dirname) ((char *) (Dirname))
+# define bind_textdomain_codeset(Domainname, Codeset) ((char *) (Codeset))
+
+#endif
+
+/* For automatical extraction of messages sometimes no real
+   translation is needed.  Instead the string itself is the result.  */
+#define gettext_noop(Str) (Str)
+
+#endif /* _LIBGETTEXT_H */
diff --git a/intl/libgnuintl.h b/intl/libgnuintl.h
new file mode 100644 (file)
index 0000000..f891deb
--- /dev/null
@@ -0,0 +1,128 @@
+/* Message catalogs for internationalization.
+   Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifndef _LIBINTL_H
+#define _LIBINTL_H     1
+
+#include <locale.h>
+
+/* The LC_MESSAGES locale category is the category used by the functions
+   gettext() and dgettext().  It is specified in POSIX, but not in ANSI C.
+   On systems that don't define it, use an arbitrary value instead.
+   On Solaris, <locale.h> defines __LOCALE_H then includes <libintl.h> (i.e.
+   this file!) and then only defines LC_MESSAGES.  To avoid a redefinition
+   warning, don't define LC_MESSAGES in this case.  */
+#if !defined LC_MESSAGES && !defined __LOCALE_H
+# define LC_MESSAGES 1729
+#endif
+
+/* We define an additional symbol to signal that we use the GNU
+   implementation of gettext.  */
+#define __USE_GNU_GETTEXT 1
+
+/* Resolve a platform specific conflict on DJGPP.  GNU gettext takes
+   precedence over _conio_gettext.  */
+#ifdef __DJGPP__
+# undef gettext
+# define gettext gettext
+#endif
+
+#ifndef PARAMS
+# if __STDC__ || defined __cplusplus
+#  define PARAMS(args) args
+# else
+#  define PARAMS(args) ()
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
+   text).  */
+extern char *gettext PARAMS ((const char *__msgid));
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+   LC_MESSAGES locale.  */
+extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid));
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid,
+                               int __category));
+
+
+/* Similar to `gettext' but select the plural form corresponding to the
+   number N.  */
+extern char *ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
+                              unsigned long int __n));
+
+/* Similar to `dgettext' but select the plural form corresponding to the
+   number N.  */
+extern char *dngettext PARAMS ((const char *__domainname, const char *__msgid1,
+                               const char *__msgid2, unsigned long int __n));
+
+/* Similar to `dcgettext' but select the plural form corresponding to the
+   number N.  */
+extern char *dcngettext PARAMS ((const char *__domainname, const char *__msgid1,
+                                const char *__msgid2, unsigned long int __n,
+                                int __category));
+
+
+/* Set the current default message catalog to DOMAINNAME.
+   If DOMAINNAME is null, return the current default.
+   If DOMAINNAME is "", reset to the default of "messages".  */
+extern char *textdomain PARAMS ((const char *__domainname));
+
+/* Specify that the DOMAINNAME message catalog will be found
+   in DIRNAME rather than in the system locale data base.  */
+extern char *bindtextdomain PARAMS ((const char *__domainname,
+                                    const char *__dirname));
+
+/* Specify the character encoding in which the messages from the
+   DOMAINNAME message catalog will be returned.  */
+extern char *bind_textdomain_codeset PARAMS ((const char *__domainname,
+                                             const char *__codeset));
+
+
+/* Optimized version of the functions above.  */
+#if defined __OPTIMIZED
+/* These are macros, but could also be inline functions.  */
+
+# define gettext(msgid)                                                              \
+  dgettext (NULL, msgid)
+
+# define dgettext(domainname, msgid)                                         \
+  dcgettext (domainname, msgid, LC_MESSAGES)
+
+# define ngettext(msgid1, msgid2, n)                                         \
+  dngettext (NULL, msgid1, msgid2, n)
+
+# define dngettext(domainname, msgid1, msgid2, n)                            \
+  dcngettext (domainname, msgid1, msgid2, n, LC_MESSAGES)
+
+#endif /* Optimizing. */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* libintl.h */
diff --git a/intl/loadinfo.h b/intl/loadinfo.h
new file mode 100644 (file)
index 0000000..b861260
--- /dev/null
@@ -0,0 +1,109 @@
+/* Copyright (C) 1996-1999, 2000, 2001 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifndef _LOADINFO_H
+#define _LOADINFO_H    1
+
+#ifndef PARAMS
+# if __STDC__
+#  define PARAMS(args) args
+# else
+#  define PARAMS(args) ()
+# endif
+#endif
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+/* Tell the compiler when a conditional or integer expression is
+   almost always true or almost always false.  */
+#ifndef HAVE_BUILTIN_EXPECT
+# define __builtin_expect(expr, val) (expr)
+#endif
+
+/* Separator in PATH like lists of pathnames.  */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+  /* Win32, OS/2, DOS */
+# define PATH_SEPARATOR ';'
+#else
+  /* Unix */
+# define PATH_SEPARATOR ':'
+#endif
+
+/* Encoding of locale name parts.  */
+#define CEN_REVISION           1
+#define CEN_SPONSOR            2
+#define CEN_SPECIAL            4
+#define XPG_NORM_CODESET       8
+#define XPG_CODESET            16
+#define TERRITORY              32
+#define CEN_AUDIENCE           64
+#define XPG_MODIFIER           128
+
+#define CEN_SPECIFIC   (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE)
+#define XPG_SPECIFIC   (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER)
+
+
+struct loaded_l10nfile
+{
+  const char *filename;
+  int decided;
+
+  const void *data;
+
+  struct loaded_l10nfile *next;
+  struct loaded_l10nfile *successor[1];
+};
+
+
+/* Normalize codeset name.  There is no standard for the codeset
+   names.  Normalization allows the user to use any of the common
+   names.  The return value is dynamically allocated and has to be
+   freed by the caller.  */
+extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
+                                                 size_t name_len));
+
+extern struct loaded_l10nfile *
+_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
+                           const char *dirlist, size_t dirlist_len, int mask,
+                           const char *language, const char *territory,
+                           const char *codeset,
+                           const char *normalized_codeset,
+                           const char *modifier, const char *special,
+                           const char *sponsor, const char *revision,
+                           const char *filename, int do_allocate));
+
+
+extern const char *_nl_expand_alias PARAMS ((const char *name));
+
+/* normalized_codeset is dynamically allocated and has to be freed by
+   the caller.  */
+extern int _nl_explode_name PARAMS ((char *name, const char **language,
+                                    const char **modifier,
+                                    const char **territory,
+                                    const char **codeset,
+                                    const char **normalized_codeset,
+                                    const char **special,
+                                    const char **sponsor,
+                                    const char **revision));
+
+extern char *_nl_find_language PARAMS ((const char *name));
+
+#endif /* loadinfo.h */
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
new file mode 100644 (file)
index 0000000..a06134a
--- /dev/null
@@ -0,0 +1,567 @@
+/* Load needed message catalogs.
+   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE    1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+#  include <alloca.h>
+# else
+#  ifdef _AIX
+ #pragma alloca
+#  else
+#   ifndef alloca
+char *alloca ();
+#   endif
+#  endif
+# endif
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#ifdef _LIBC
+# include <langinfo.h>
+# include <locale.h>
+#endif
+
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+    || (defined _LIBC && defined _POSIX_MAPPED_FILES)
+# include <sys/mman.h>
+# undef HAVE_MMAP
+# define HAVE_MMAP     1
+#else
+# undef HAVE_MMAP
+#endif
+
+#include "gettext.h"
+#include "gettextP.h"
+
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ISO C functions.  This is required by the standard
+   because some ISO C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# define open   __open
+# define close  __close
+# define read   __read
+# define mmap   __mmap
+# define munmap __munmap
+#endif
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define PLURAL_PARSE __gettextparse
+#else
+# define PLURAL_PARSE gettextparse__
+#endif
+
+/* For those losing systems which don't have `alloca' we have to add
+   some additional code emulating it.  */
+#ifdef HAVE_ALLOCA
+# define freea(p) /* nothing */
+#else
+# define alloca(n) malloc (n)
+# define freea(p) free (p)
+#endif
+
+/* For systems that distinguish between text and binary I/O.
+   O_BINARY is usually declared in <fcntl.h>. */
+#if !defined O_BINARY && defined _O_BINARY
+  /* For MSC-compatible compilers.  */
+# define O_BINARY _O_BINARY
+# define O_TEXT _O_TEXT
+#endif
+#ifdef __BEOS__
+  /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect.  */
+# undef O_BINARY
+# undef O_TEXT
+#endif
+/* On reasonable systems, binary I/O is the default.  */
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+/* We need a sign, whether a new catalog was loaded, which can be associated
+   with all translations.  This is important if the translations are
+   cached by one of GCC's features.  */
+int _nl_msg_cat_cntr;
+
+#if (defined __GNUC__ && !defined __APPLE_CC__) \
+    || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
+
+/* These structs are the constant expression for the germanic plural
+   form determination.  It represents the expression  "n != 1".  */
+static const struct expression plvar =
+{
+  .nargs = 0,
+  .operation = var,
+};
+static const struct expression plone =
+{
+  .nargs = 0,
+  .operation = num,
+  .val =
+  {
+    .num = 1
+  }
+};
+static struct expression germanic_plural =
+{
+  .nargs = 2,
+  .operation = not_equal,
+  .val =
+  {
+    .args =
+    {
+      [0] = (struct expression *) &plvar,
+      [1] = (struct expression *) &plone
+    }
+  }
+};
+
+# define INIT_GERMANIC_PLURAL()
+
+#else
+
+/* For compilers without support for ISO C 99 struct/union initializers:
+   Initialization at run-time.  */
+
+static struct expression plvar;
+static struct expression plone;
+static struct expression germanic_plural;
+
+static void
+init_germanic_plural ()
+{
+  if (plone.val.num == 0)
+    {
+      plvar.nargs = 0;
+      plvar.operation = var;
+
+      plone.nargs = 0;
+      plone.operation = num;
+      plone.val.num = 1;
+
+      germanic_plural.nargs = 2;
+      germanic_plural.operation = not_equal;
+      germanic_plural.val.args[0] = &plvar;
+      germanic_plural.val.args[1] = &plone;
+    }
+}
+
+# define INIT_GERMANIC_PLURAL() init_germanic_plural ()
+
+#endif
+
+
+/* Initialize the codeset dependent parts of an opened message catalog.
+   Return the header entry.  */
+const char *
+internal_function
+_nl_init_domain_conv (domain_file, domain, domainbinding)
+     struct loaded_l10nfile *domain_file;
+     struct loaded_domain *domain;
+     struct binding *domainbinding;
+{
+  /* Find out about the character set the file is encoded with.
+     This can be found (in textual form) in the entry "".  If this
+     entry does not exist or if this does not contain the `charset='
+     information, we will assume the charset matches the one the
+     current locale and we don't have to perform any conversion.  */
+  char *nullentry;
+  size_t nullentrylen;
+
+  /* Preinitialize fields, to avoid recursion during _nl_find_msg.  */
+  domain->codeset_cntr =
+    (domainbinding != NULL ? domainbinding->codeset_cntr : 0);
+#ifdef _LIBC
+  domain->conv = (__gconv_t) -1;
+#else
+# if HAVE_ICONV
+  domain->conv = (iconv_t) -1;
+# endif
+#endif
+  domain->conv_tab = NULL;
+
+  /* Get the header entry.  */
+  nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen);
+
+  if (nullentry != NULL)
+    {
+#if defined _LIBC || HAVE_ICONV
+      const char *charsetstr;
+
+      charsetstr = strstr (nullentry, "charset=");
+      if (charsetstr != NULL)
+       {
+         size_t len;
+         char *charset;
+         const char *outcharset;
+
+         charsetstr += strlen ("charset=");
+         len = strcspn (charsetstr, " \t\n");
+
+         charset = (char *) alloca (len + 1);
+# if defined _LIBC || HAVE_MEMPCPY
+         *((char *) mempcpy (charset, charsetstr, len)) = '\0';
+# else
+         memcpy (charset, charsetstr, len);
+         charset[len] = '\0';
+# endif
+
+         /* The output charset should normally be determined by the
+            locale.  But sometimes the locale is not used or not correctly
+            set up, so we provide a possibility for the user to override
+            this.  Moreover, the value specified through
+            bind_textdomain_codeset overrides both.  */
+         if (domainbinding != NULL && domainbinding->codeset != NULL)
+           outcharset = domainbinding->codeset;
+         else
+           {
+             outcharset = getenv ("OUTPUT_CHARSET");
+             if (outcharset == NULL || outcharset[0] == '\0')
+               {
+# ifdef _LIBC
+                 outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string;
+# else
+#  if HAVE_ICONV
+                 extern const char *locale_charset (void);
+                 outcharset = locale_charset ();
+#  endif
+# endif
+               }
+           }
+
+# ifdef _LIBC
+         /* We always want to use transliteration.  */
+         outcharset = norm_add_slashes (outcharset, "TRANSLIT");
+         charset = norm_add_slashes (charset, NULL);
+         if (__gconv_open (outcharset, charset, &domain->conv,
+                           GCONV_AVOID_NOCONV)
+             != __GCONV_OK)
+           domain->conv = (__gconv_t) -1;
+# else
+#  if HAVE_ICONV
+         /* When using GNU libiconv, we want to use transliteration.  */
+#   if _LIBICONV_VERSION >= 0x0105
+         len = strlen (outcharset);
+         {
+           char *tmp = (char *) alloca (len + 10 + 1);
+           memcpy (tmp, outcharset, len);
+           memcpy (tmp + len, "//TRANSLIT", 10 + 1);
+           outcharset = tmp;
+         }
+#   endif
+         domain->conv = iconv_open (outcharset, charset);
+#   if _LIBICONV_VERSION >= 0x0105
+         freea (outcharset);
+#   endif
+#  endif
+# endif
+
+         freea (charset);
+       }
+#endif /* _LIBC || HAVE_ICONV */
+    }
+
+  return nullentry;
+}
+
+/* Frees the codeset dependent parts of an opened message catalog.  */
+void
+internal_function
+_nl_free_domain_conv (domain)
+     struct loaded_domain *domain;
+{
+  if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1)
+    free (domain->conv_tab);
+
+#ifdef _LIBC
+  if (domain->conv != (__gconv_t) -1)
+    __gconv_close (domain->conv);
+#else
+# if HAVE_ICONV
+  if (domain->conv != (iconv_t) -1)
+    iconv_close (domain->conv);
+# endif
+#endif
+}
+
+/* Load the message catalogs specified by FILENAME.  If it is no valid
+   message catalog do nothing.  */
+void
+internal_function
+_nl_load_domain (domain_file, domainbinding)
+     struct loaded_l10nfile *domain_file;
+     struct binding *domainbinding;
+{
+  int fd;
+  size_t size;
+#ifdef _LIBC
+  struct stat64 st;
+#else
+  struct stat st;
+#endif
+  struct mo_file_header *data = (struct mo_file_header *) -1;
+  int use_mmap = 0;
+  struct loaded_domain *domain;
+  const char *nullentry;
+
+  domain_file->decided = 1;
+  domain_file->data = NULL;
+
+  /* Note that it would be useless to store domainbinding in domain_file
+     because domainbinding might be == NULL now but != NULL later (after
+     a call to bind_textdomain_codeset).  */
+
+  /* If the record does not represent a valid locale the FILENAME
+     might be NULL.  This can happen when according to the given
+     specification the locale file name is different for XPG and CEN
+     syntax.  */
+  if (domain_file->filename == NULL)
+    return;
+
+  /* Try to open the addressed file.  */
+  fd = open (domain_file->filename, O_RDONLY | O_BINARY);
+  if (fd == -1)
+    return;
+
+  /* We must know about the size of the file.  */
+  if (
+#ifdef _LIBC
+      __builtin_expect (fstat64 (fd, &st) != 0, 0)
+#else
+      __builtin_expect (fstat (fd, &st) != 0, 0)
+#endif
+      || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0)
+      || __builtin_expect (size < sizeof (struct mo_file_header), 0))
+    {
+      /* Something went wrong.  */
+      close (fd);
+      return;
+    }
+
+#ifdef HAVE_MMAP
+  /* Now we are ready to load the file.  If mmap() is available we try
+     this first.  If not available or it failed we try to load it.  */
+  data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
+                                        MAP_PRIVATE, fd, 0);
+
+  if (__builtin_expect (data != (struct mo_file_header *) -1, 1))
+    {
+      /* mmap() call was successful.  */
+      close (fd);
+      use_mmap = 1;
+    }
+#endif
+
+  /* If the data is not yet available (i.e. mmap'ed) we try to load
+     it manually.  */
+  if (data == (struct mo_file_header *) -1)
+    {
+      size_t to_read;
+      char *read_ptr;
+
+      data = (struct mo_file_header *) malloc (size);
+      if (data == NULL)
+       return;
+
+      to_read = size;
+      read_ptr = (char *) data;
+      do
+       {
+         long int nb = (long int) read (fd, read_ptr, to_read);
+         if (nb <= 0)
+           {
+#ifdef EINTR
+             if (nb == -1 && errno == EINTR)
+               continue;
+#endif
+             close (fd);
+             return;
+           }
+         read_ptr += nb;
+         to_read -= nb;
+       }
+      while (to_read > 0);
+
+      close (fd);
+    }
+
+  /* Using the magic number we can test whether it really is a message
+     catalog file.  */
+  if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED,
+                       0))
+    {
+      /* The magic number is wrong: not a message catalog file.  */
+#ifdef HAVE_MMAP
+      if (use_mmap)
+       munmap ((caddr_t) data, size);
+      else
+#endif
+       free (data);
+      return;
+    }
+
+  domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
+  if (domain == NULL)
+    return;
+  domain_file->data = domain;
+
+  domain->data = (char *) data;
+  domain->use_mmap = use_mmap;
+  domain->mmap_size = size;
+  domain->must_swap = data->magic != _MAGIC;
+
+  /* Fill in the information about the available tables.  */
+  switch (W (domain->must_swap, data->revision))
+    {
+    case 0:
+      domain->nstrings = W (domain->must_swap, data->nstrings);
+      domain->orig_tab = (struct string_desc *)
+       ((char *) data + W (domain->must_swap, data->orig_tab_offset));
+      domain->trans_tab = (struct string_desc *)
+       ((char *) data + W (domain->must_swap, data->trans_tab_offset));
+      domain->hash_size = W (domain->must_swap, data->hash_tab_size);
+      domain->hash_tab = (nls_uint32 *)
+       ((char *) data + W (domain->must_swap, data->hash_tab_offset));
+      break;
+    default:
+      /* This is an invalid revision.  */
+#ifdef HAVE_MMAP
+      if (use_mmap)
+       munmap ((caddr_t) data, size);
+      else
+#endif
+       free (data);
+      free (domain);
+      domain_file->data = NULL;
+      return;
+    }
+
+  /* Now initialize the character set converter from the character set
+     the file is encoded with (found in the header entry) to the domain's
+     specified character set or the locale's character set.  */
+  nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding);
+
+  /* Also look for a plural specification.  */
+  if (nullentry != NULL)
+    {
+      const char *plural;
+      const char *nplurals;
+
+      plural = strstr (nullentry, "plural=");
+      nplurals = strstr (nullentry, "nplurals=");
+      if (plural == NULL || nplurals == NULL)
+       goto no_plural;
+      else
+       {
+         /* First get the number.  */
+         char *endp;
+         unsigned long int n;
+         struct parse_args args;
+
+         nplurals += 9;
+         while (*nplurals != '\0' && isspace ((unsigned char) *nplurals))
+           ++nplurals;
+#if defined HAVE_STRTOUL || defined _LIBC
+         n = strtoul (nplurals, &endp, 10);
+#else
+         for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++)
+           n = n * 10 + (*endp - '0');
+#endif
+         domain->nplurals = n;
+         if (nplurals == endp)
+           goto no_plural;
+
+         /* Due to the restrictions bison imposes onto the interface of the
+            scanner function we have to put the input string and the result
+            passed up from the parser into the same structure which address
+            is passed down to the parser.  */
+         plural += 7;
+         args.cp = plural;
+         if (PLURAL_PARSE (&args) != 0)
+           goto no_plural;
+         domain->plural = args.res;
+       }
+    }
+  else
+    {
+      /* By default we are using the Germanic form: singular form only
+         for `one', the plural form otherwise.  Yes, this is also what
+         English is using since English is a Germanic language.  */
+    no_plural:
+      INIT_GERMANIC_PLURAL ();
+      domain->plural = &germanic_plural;
+      domain->nplurals = 2;
+    }
+}
+
+
+#ifdef _LIBC
+void
+internal_function
+_nl_unload_domain (domain)
+     struct loaded_domain *domain;
+{
+  if (domain->plural != &germanic_plural)
+    __gettext_free_exp (domain->plural);
+
+  _nl_free_domain_conv (domain);
+
+# ifdef _POSIX_MAPPED_FILES
+  if (domain->use_mmap)
+    munmap ((caddr_t) domain->data, domain->mmap_size);
+  else
+# endif        /* _POSIX_MAPPED_FILES */
+    free ((void *) domain->data);
+
+  free (domain);
+}
+#endif
diff --git a/intl/localcharset.c b/intl/localcharset.c
new file mode 100644 (file)
index 0000000..61f8f3e
--- /dev/null
@@ -0,0 +1,271 @@
+/* Determine a canonical name for the current locale's character encoding.
+
+   Copyright (C) 2000-2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* Written by Bruno Haible <haible@clisp.cons.org>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if HAVE_STDDEF_H
+# include <stddef.h>
+#endif
+
+#include <stdio.h>
+#if HAVE_STRING_H
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#if HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+#if defined _WIN32 || defined __WIN32__
+# undef WIN32   /* avoid warning on mingw32 */
+# define WIN32
+#endif
+
+#ifndef WIN32
+# if HAVE_LANGINFO_CODESET
+#  include <langinfo.h>
+# else
+#  if HAVE_SETLOCALE
+#   include <locale.h>
+#  endif
+# endif
+#else /* WIN32 */
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+
+#ifndef DIRECTORY_SEPARATOR
+# define DIRECTORY_SEPARATOR '/'
+#endif
+
+#ifndef ISSLASH
+# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
+#endif
+
+/* The following static variable is declared 'volatile' to avoid a
+   possible multithread problem in the function get_charset_aliases. If we
+   are running in a threaded environment, and if two threads initialize
+   'charset_aliases' simultaneously, both will produce the same value,
+   and everything will be ok if the two assignments to 'charset_aliases'
+   are atomic. But I don't know what will happen if the two assignments mix.  */
+#if __STDC__ != 1
+# define volatile /* empty */
+#endif
+/* Pointer to the contents of the charset.alias file, if it has already been
+   read, else NULL.  Its format is:
+   ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0'  */
+static const char * volatile charset_aliases;
+
+/* Return a pointer to the contents of the charset.alias file.  */
+static const char *
+get_charset_aliases ()
+{
+  const char *cp;
+
+  cp = charset_aliases;
+  if (cp == NULL)
+    {
+#ifndef WIN32
+      FILE *fp;
+      const char *dir = LIBDIR;
+      const char *base = "charset.alias";
+      char *file_name;
+
+      /* Concatenate dir and base into freshly allocated file_name.  */
+      {
+       size_t dir_len = strlen (dir);
+       size_t base_len = strlen (base);
+       int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
+       file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
+       if (file_name != NULL)
+         {
+           memcpy (file_name, dir, dir_len);
+           if (add_slash)
+             file_name[dir_len] = DIRECTORY_SEPARATOR;
+           memcpy (file_name + dir_len + add_slash, base, base_len + 1);
+         }
+      }
+
+      if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
+       /* Out of memory or file not found, treat it as empty.  */
+       cp = "";
+      else
+       {
+         /* Parse the file's contents.  */
+         int c;
+         char buf1[50+1];
+         char buf2[50+1];
+         char *res_ptr = NULL;
+         size_t res_size = 0;
+         size_t l1, l2;
+
+         for (;;)
+           {
+             c = getc (fp);
+             if (c == EOF)
+               break;
+             if (c == '\n' || c == ' ' || c == '\t')
+               continue;
+             if (c == '#')
+               {
+                 /* Skip comment, to end of line.  */
+                 do
+                   c = getc (fp);
+                 while (!(c == EOF || c == '\n'));
+                 if (c == EOF)
+                   break;
+                 continue;
+               }
+             ungetc (c, fp);
+             if (fscanf(fp, "%50s %50s", buf1, buf2) < 2)
+               break;
+             l1 = strlen (buf1);
+             l2 = strlen (buf2);
+             if (res_size == 0)
+               {
+                 res_size = l1 + 1 + l2 + 1;
+                 res_ptr = malloc (res_size + 1);
+               }
+             else
+               {
+                 res_size += l1 + 1 + l2 + 1;
+                 res_ptr = realloc (res_ptr, res_size + 1);
+               }
+             if (res_ptr == NULL)
+               {
+                 /* Out of memory. */
+                 res_size = 0;
+                 break;
+               }
+             strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
+             strcpy (res_ptr + res_size - (l2 + 1), buf2);
+           }
+         fclose (fp);
+         if (res_size == 0)
+           cp = "";
+         else
+           {
+             *(res_ptr + res_size) = '\0';
+             cp = res_ptr;
+           }
+       }
+
+      if (file_name != NULL)
+       free (file_name);
+
+#else /* WIN32 */
+
+      /* To avoid the troubles of installing a separate file in the same
+        directory as the DLL and of retrieving the DLL's directory at
+        runtime, simply inline the aliases here.  */
+
+      cp = "CP936" "\0" "GBK" "\0"
+          "CP1361" "\0" "JOHAB" "\0";
+#endif
+
+      charset_aliases = cp;
+    }
+
+  return cp;
+}
+
+/* Determine the current locale's character encoding, and canonicalize it
+   into one of the canonical names listed in config.charset.
+   The result must not be freed; it is statically allocated.
+   If the canonical name cannot be determined, the result is a non-canonical
+   name.  */
+
+#ifdef STATIC
+STATIC
+#endif
+const char *
+locale_charset ()
+{
+  const char *codeset;
+  const char *aliases;
+
+#ifndef WIN32
+
+# if HAVE_LANGINFO_CODESET
+
+  /* Most systems support nl_langinfo (CODESET) nowadays.  */
+  codeset = nl_langinfo (CODESET);
+
+# else
+
+  /* On old systems which lack it, use setlocale or getenv.  */
+  const char *locale = NULL;
+
+  /* But most old systems don't have a complete set of locales.  Some
+     (like SunOS 4 or DJGPP) have only the C locale.  Therefore we don't
+     use setlocale here; it would return "C" when it doesn't support the
+     locale name the user has set.  */
+#  if HAVE_SETLOCALE && 0
+  locale = setlocale (LC_CTYPE, NULL);
+#  endif
+  if (locale == NULL || locale[0] == '\0')
+    {
+      locale = getenv ("LC_ALL");
+      if (locale == NULL || locale[0] == '\0')
+       {
+         locale = getenv ("LC_CTYPE");
+         if (locale == NULL || locale[0] == '\0')
+           locale = getenv ("LANG");
+       }
+    }
+
+  /* On some old systems, one used to set locale = "iso8859_1". On others,
+     you set it to "language_COUNTRY.charset". In any case, we resolve it
+     through the charset.alias file.  */
+  codeset = locale;
+
+# endif
+
+#else /* WIN32 */
+
+  static char buf[2 + 10 + 1];
+
+  /* Win32 has a function returning the locale's codepage as a number.  */
+  sprintf (buf, "CP%u", GetACP ());
+  codeset = buf;
+
+#endif
+
+  if (codeset == NULL)
+    /* The canonical name cannot be determined.  */
+    codeset = "";
+
+  /* Resolve alias. */
+  for (aliases = get_charset_aliases ();
+       *aliases != '\0';
+       aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
+    if (strcmp (codeset, aliases) == 0
+       || (aliases[0] == '*' && aliases[1] == '\0'))
+      {
+       codeset = aliases + strlen (aliases) + 1;
+       break;
+      }
+
+  return codeset;
+}
diff --git a/intl/locale.alias b/intl/locale.alias
new file mode 100644 (file)
index 0000000..bd7b9b3
--- /dev/null
@@ -0,0 +1,78 @@
+# Locale name alias data base.
+# Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+
+# The format of this file is the same as for the corresponding file of
+# the X Window System, which normally can be found in
+#      /usr/lib/X11/locale/locale.alias
+# A single line contains two fields: an alias and a substitution value.
+# All entries are case independent.
+
+# Note: This file is far from being complete.  If you have a value for
+# your own site which you think might be useful for others too, share
+# it with the rest of us.  Send it using the `glibcbug' script to
+# bugs@gnu.org.
+
+# Packages using this file: 
+
+bokmal         no_NO.ISO-8859-1
+bokmål         no_NO.ISO-8859-1
+catalan                ca_ES.ISO-8859-1
+croatian       hr_HR.ISO-8859-2
+czech          cs_CZ.ISO-8859-2
+danish          da_DK.ISO-8859-1
+dansk          da_DK.ISO-8859-1
+deutsch                de_DE.ISO-8859-1
+dutch          nl_NL.ISO-8859-1
+eesti          et_EE.ISO-8859-1
+estonian       et_EE.ISO-8859-1
+finnish         fi_FI.ISO-8859-1
+français       fr_FR.ISO-8859-1
+french         fr_FR.ISO-8859-1
+galego         gl_ES.ISO-8859-1
+galician       gl_ES.ISO-8859-1
+german         de_DE.ISO-8859-1
+greek           el_GR.ISO-8859-7
+hebrew          he_IL.ISO-8859-8
+hrvatski       hr_HR.ISO-8859-2
+hungarian       hu_HU.ISO-8859-2
+icelandic       is_IS.ISO-8859-1
+italian         it_IT.ISO-8859-1
+japanese       ja_JP.eucJP
+japanese.euc   ja_JP.eucJP
+ja_JP          ja_JP.eucJP
+ja_JP.ujis     ja_JP.eucJP
+japanese.sjis  ja_JP.SJIS
+korean         ko_KR.eucKR
+korean.euc     ko_KR.eucKR
+ko_KR          ko_KR.eucKR
+lithuanian      lt_LT.ISO-8859-13
+nb_NO          no_NO.ISO-8859-1
+nb_NO.ISO-8859-1 no_NO.ISO-8859-1
+norwegian       no_NO.ISO-8859-1
+nynorsk                nn_NO.ISO-8859-1
+polish          pl_PL.ISO-8859-2
+portuguese      pt_PT.ISO-8859-1
+romanian        ro_RO.ISO-8859-2
+russian         ru_RU.ISO-8859-5
+slovak          sk_SK.ISO-8859-2
+slovene         sl_SI.ISO-8859-2
+slovenian       sl_SI.ISO-8859-2
+spanish         es_ES.ISO-8859-1
+swedish         sv_SE.ISO-8859-1
+thai           th_TH.TIS-620
+turkish         tr_TR.ISO-8859-9
diff --git a/intl/localealias.c b/intl/localealias.c
new file mode 100644 (file)
index 0000000..f57d764
--- /dev/null
@@ -0,0 +1,404 @@
+/* Handle aliases for locale names.
+   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE    1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+#  include <alloca.h>
+# else
+#  ifdef _AIX
+ #pragma alloca
+#  else
+#   ifndef alloca
+char *alloca ();
+#   endif
+#  endif
+# endif
+#endif
+
+#include <stdlib.h>
+
+#include <string.h>
+#if !HAVE_STRCHR && !defined _LIBC
+# ifndef strchr
+#  define strchr index
+# endif
+#endif
+
+#include "gettextP.h"
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions.  This is required by the standard
+   because some ANSI C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# define strcasecmp __strcasecmp
+
+# ifndef mempcpy
+#  define mempcpy __mempcpy
+# endif
+# define HAVE_MEMPCPY  1
+
+/* We need locking here since we can be called from different places.  */
+# include <bits/libc-lock.h>
+
+__libc_lock_define_initialized (static, lock);
+#endif
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+/* For those losing systems which don't have `alloca' we have to add
+   some additional code emulating it.  */
+#ifdef HAVE_ALLOCA
+# define freea(p) /* nothing */
+#else
+# define alloca(n) malloc (n)
+# define freea(p) free (p)
+#endif
+
+#if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED
+# undef fgets
+# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
+#endif
+#if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED
+# undef feof
+# define feof(s) feof_unlocked (s)
+#endif
+
+
+struct alias_map
+{
+  const char *alias;
+  const char *value;
+};
+
+
+static char *string_space;
+static size_t string_space_act;
+static size_t string_space_max;
+static struct alias_map *map;
+static size_t nmap;
+static size_t maxmap;
+
+
+/* Prototypes for local functions.  */
+static size_t read_alias_file PARAMS ((const char *fname, int fname_len))
+     internal_function;
+static int extend_alias_table PARAMS ((void));
+static int alias_compare PARAMS ((const struct alias_map *map1,
+                                 const struct alias_map *map2));
+
+
+const char *
+_nl_expand_alias (name)
+    const char *name;
+{
+  static const char *locale_alias_path = LOCALE_ALIAS_PATH;
+  struct alias_map *retval;
+  const char *result = NULL;
+  size_t added;
+
+#ifdef _LIBC
+  __libc_lock_lock (lock);
+#endif
+
+  do
+    {
+      struct alias_map item;
+
+      item.alias = name;
+
+      if (nmap > 0)
+       retval = (struct alias_map *) bsearch (&item, map, nmap,
+                                              sizeof (struct alias_map),
+                                              (int (*) PARAMS ((const void *,
+                                                                const void *))
+                                               ) alias_compare);
+      else
+       retval = NULL;
+
+      /* We really found an alias.  Return the value.  */
+      if (retval != NULL)
+       {
+         result = retval->value;
+         break;
+       }
+
+      /* Perhaps we can find another alias file.  */
+      added = 0;
+      while (added == 0 && locale_alias_path[0] != '\0')
+       {
+         const char *start;
+
+         while (locale_alias_path[0] == PATH_SEPARATOR)
+           ++locale_alias_path;
+         start = locale_alias_path;
+
+         while (locale_alias_path[0] != '\0'
+                && locale_alias_path[0] != PATH_SEPARATOR)
+           ++locale_alias_path;
+
+         if (start < locale_alias_path)
+           added = read_alias_file (start, locale_alias_path - start);
+       }
+    }
+  while (added != 0);
+
+#ifdef _LIBC
+  __libc_lock_unlock (lock);
+#endif
+
+  return result;
+}
+
+
+static size_t
+internal_function
+read_alias_file (fname, fname_len)
+     const char *fname;
+     int fname_len;
+{
+  FILE *fp;
+  char *full_fname;
+  size_t added;
+  static const char aliasfile[] = "/locale.alias";
+
+  full_fname = (char *) alloca (fname_len + sizeof aliasfile);
+#ifdef HAVE_MEMPCPY
+  mempcpy (mempcpy (full_fname, fname, fname_len),
+          aliasfile, sizeof aliasfile);
+#else
+  memcpy (full_fname, fname, fname_len);
+  memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
+#endif
+
+  fp = fopen (full_fname, "r");
+  freea (full_fname);
+  if (fp == NULL)
+    return 0;
+
+  added = 0;
+  while (!feof (fp))
+    {
+      /* It is a reasonable approach to use a fix buffer here because
+        a) we are only interested in the first two fields
+        b) these fields must be usable as file names and so must not
+           be that long
+       */
+      char buf[BUFSIZ];
+      char *alias;
+      char *value;
+      char *cp;
+
+      if (fgets (buf, sizeof buf, fp) == NULL)
+       /* EOF reached.  */
+       break;
+
+      /* Possibly not the whole line fits into the buffer.  Ignore
+        the rest of the line.  */
+      if (strchr (buf, '\n') == NULL)
+       {
+         char altbuf[BUFSIZ];
+         do
+           if (fgets (altbuf, sizeof altbuf, fp) == NULL)
+             /* Make sure the inner loop will be left.  The outer loop
+                will exit at the `feof' test.  */
+             break;
+         while (strchr (altbuf, '\n') == NULL);
+       }
+
+      cp = buf;
+      /* Ignore leading white space.  */
+      while (isspace ((unsigned char) cp[0]))
+       ++cp;
+
+      /* A leading '#' signals a comment line.  */
+      if (cp[0] != '\0' && cp[0] != '#')
+       {
+         alias = cp++;
+         while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
+           ++cp;
+         /* Terminate alias name.  */
+         if (cp[0] != '\0')
+           *cp++ = '\0';
+
+         /* Now look for the beginning of the value.  */
+         while (isspace ((unsigned char) cp[0]))
+           ++cp;
+
+         if (cp[0] != '\0')
+           {
+             size_t alias_len;
+             size_t value_len;
+
+             value = cp++;
+             while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
+               ++cp;
+             /* Terminate value.  */
+             if (cp[0] == '\n')
+               {
+                 /* This has to be done to make the following test
+                    for the end of line possible.  We are looking for
+                    the terminating '\n' which do not overwrite here.  */
+                 *cp++ = '\0';
+                 *cp = '\n';
+               }
+             else if (cp[0] != '\0')
+               *cp++ = '\0';
+
+             if (nmap >= maxmap)
+               if (__builtin_expect (extend_alias_table (), 0))
+                 return added;
+
+             alias_len = strlen (alias) + 1;
+             value_len = strlen (value) + 1;
+
+             if (string_space_act + alias_len + value_len > string_space_max)
+               {
+                 /* Increase size of memory pool.  */
+                 size_t new_size = (string_space_max
+                                    + (alias_len + value_len > 1024
+                                       ? alias_len + value_len : 1024));
+                 char *new_pool = (char *) realloc (string_space, new_size);
+                 if (new_pool == NULL)
+                   return added;
+
+                 if (__builtin_expect (string_space != new_pool, 0))
+                   {
+                     size_t i;
+
+                     for (i = 0; i < nmap; i++)
+                       {
+                         map[i].alias += new_pool - string_space;
+                         map[i].value += new_pool - string_space;
+                       }
+                   }
+
+                 string_space = new_pool;
+                 string_space_max = new_size;
+               }
+
+             map[nmap].alias = memcpy (&string_space[string_space_act],
+                                       alias, alias_len);
+             string_space_act += alias_len;
+
+             map[nmap].value = memcpy (&string_space[string_space_act],
+                                       value, value_len);
+             string_space_act += value_len;
+
+             ++nmap;
+             ++added;
+           }
+       }
+    }
+
+  /* Should we test for ferror()?  I think we have to silently ignore
+     errors.  --drepper  */
+  fclose (fp);
+
+  if (added > 0)
+    qsort (map, nmap, sizeof (struct alias_map),
+          (int (*) PARAMS ((const void *, const void *))) alias_compare);
+
+  return added;
+}
+
+
+static int
+extend_alias_table ()
+{
+  size_t new_size;
+  struct alias_map *new_map;
+
+  new_size = maxmap == 0 ? 100 : 2 * maxmap;
+  new_map = (struct alias_map *) realloc (map, (new_size
+                                               * sizeof (struct alias_map)));
+  if (new_map == NULL)
+    /* Simply don't extend: we don't have any more core.  */
+    return -1;
+
+  map = new_map;
+  maxmap = new_size;
+  return 0;
+}
+
+
+#ifdef _LIBC
+static void __attribute__ ((unused))
+free_mem (void)
+{
+  if (string_space != NULL)
+    free (string_space);
+  if (map != NULL)
+    free (map);
+}
+text_set_element (__libc_subfreeres, free_mem);
+#endif
+
+
+static int
+alias_compare (map1, map2)
+     const struct alias_map *map1;
+     const struct alias_map *map2;
+{
+#if defined _LIBC || defined HAVE_STRCASECMP
+  return strcasecmp (map1->alias, map2->alias);
+#else
+  const unsigned char *p1 = (const unsigned char *) map1->alias;
+  const unsigned char *p2 = (const unsigned char *) map2->alias;
+  unsigned char c1, c2;
+
+  if (p1 == p2)
+    return 0;
+
+  do
+    {
+      /* I know this seems to be odd but the tolower() function in
+        some systems libc cannot handle nonalpha characters.  */
+      c1 = isupper (*p1) ? tolower (*p1) : *p1;
+      c2 = isupper (*p2) ? tolower (*p2) : *p2;
+      if (c1 == '\0')
+       break;
+      ++p1;
+      ++p2;
+    }
+  while (c1 == c2);
+
+  return c1 - c2;
+#endif
+}
diff --git a/intl/ngettext.c b/intl/ngettext.c
new file mode 100644 (file)
index 0000000..fb3ec5a
--- /dev/null
@@ -0,0 +1,68 @@
+/* Implementation of ngettext(3) function.
+   Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define __need_NULL
+# include <stddef.h>
+#else
+# include <stdlib.h>           /* Just for NULL.  */
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+#include <locale.h>
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define NGETTEXT __ngettext
+# define DCNGETTEXT __dcngettext
+#else
+# define NGETTEXT ngettext__
+# define DCNGETTEXT dcngettext__
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
+   text).  */
+char *
+NGETTEXT (msgid1, msgid2, n)
+     const char *msgid1;
+     const char *msgid2;
+     unsigned long int n;
+{
+  return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__ngettext, ngettext);
+#endif
diff --git a/intl/plural.c b/intl/plural.c
new file mode 100644 (file)
index 0000000..640d43c
--- /dev/null
@@ -0,0 +1,1326 @@
+
+/*  A Bison parser, made from plural.y
+    by GNU Bison version 1.28  */
+
+#define YYBISON 1  /* Identify Bison output.  */
+
+#define yyparse __gettextparse
+#define yylex __gettextlex
+#define yyerror __gettexterror
+#define yylval __gettextlval
+#define yychar __gettextchar
+#define yydebug __gettextdebug
+#define yynerrs __gettextnerrs
+#define        EQUOP2  257
+#define        CMPOP2  258
+#define        ADDOP2  259
+#define        MULOP2  260
+#define        NUMBER  261
+
+#line 1 "plural.y"
+
+/* Expression parsing for plural form selection.
+   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* The bison generated parser uses alloca.  AIX 3 forces us to put this
+   declaration at the beginning of the file.  The declaration in bison's
+   skeleton file comes too late.  This must come before <config.h>
+   because <config.h> may include arbitrary system headers.  */
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include "gettextP.h"
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define FREE_EXPRESSION __gettext_free_exp
+#else
+# define FREE_EXPRESSION gettext_free_exp__
+# define __gettextparse gettextparse__
+#endif
+
+#define YYLEX_PARAM    &((struct parse_args *) arg)->cp
+#define YYPARSE_PARAM  arg
+
+#line 53 "plural.y"
+typedef union {
+  unsigned long int num;
+  enum operator op;
+  struct expression *exp;
+} YYSTYPE;
+#line 59 "plural.y"
+
+/* Prototypes for local functions.  */
+static struct expression *new_exp PARAMS ((int nargs, enum operator op,
+                                          struct expression * const *args));
+static inline struct expression *new_exp_0 PARAMS ((enum operator op));
+static inline struct expression *new_exp_1 PARAMS ((enum operator op,
+                                                  struct expression *right));
+static struct expression *new_exp_2 PARAMS ((enum operator op,
+                                            struct expression *left,
+                                            struct expression *right));
+static inline struct expression *new_exp_3 PARAMS ((enum operator op,
+                                                  struct expression *bexp,
+                                                  struct expression *tbranch,
+                                                  struct expression *fbranch));
+static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
+static void yyerror PARAMS ((const char *str));
+
+/* Allocation of expressions.  */
+
+static struct expression *
+new_exp (nargs, op, args)
+     int nargs;
+     enum operator op;
+     struct expression * const *args;
+{
+  int i;
+  struct expression *newp;
+
+  /* If any of the argument could not be malloc'ed, just return NULL.  */
+  for (i = nargs - 1; i >= 0; i--)
+    if (args[i] == NULL)
+      goto fail;
+
+  /* Allocate a new expression.  */
+  newp = (struct expression *) malloc (sizeof (*newp));
+  if (newp != NULL)
+    {
+      newp->nargs = nargs;
+      newp->operation = op;
+      for (i = nargs - 1; i >= 0; i--)
+       newp->val.args[i] = args[i];
+      return newp;
+    }
+
+ fail:
+  for (i = nargs - 1; i >= 0; i--)
+    FREE_EXPRESSION (args[i]);
+
+  return NULL;
+}
+
+static inline struct expression *
+new_exp_0 (op)
+     enum operator op;
+{
+  return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (op, right)
+     enum operator op;
+     struct expression *right;
+{
+  struct expression *args[1];
+
+  args[0] = right;
+  return new_exp (1, op, args);
+}
+
+static struct expression *
+new_exp_2 (op, left, right)
+     enum operator op;
+     struct expression *left;
+     struct expression *right;
+{
+  struct expression *args[2];
+
+  args[0] = left;
+  args[1] = right;
+  return new_exp (2, op, args);
+}
+
+static inline struct expression *
+new_exp_3 (op, bexp, tbranch, fbranch)
+     enum operator op;
+     struct expression *bexp;
+     struct expression *tbranch;
+     struct expression *fbranch;
+{
+  struct expression *args[3];
+
+  args[0] = bexp;
+  args[1] = tbranch;
+  args[2] = fbranch;
+  return new_exp (3, op, args);
+}
+
+#include <stdio.h>
+
+#ifndef __cplusplus
+#ifndef __STDC__
+#define const
+#endif
+#endif
+
+
+
+#define        YYFINAL         27
+#define        YYFLAG          -32768
+#define        YYNTBASE        16
+
+#define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18)
+
+static const char yytranslate[] = {     0,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,    10,     2,     2,     2,     2,     5,     2,    14,
+    15,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,    12,     2,     2,
+     2,     2,     3,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,    13,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     4,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     1,     6,     7,     8,     9,
+    11
+};
+
+#if YYDEBUG != 0
+static const short yyprhs[] = {     0,
+     0,     2,     8,    12,    16,    20,    24,    28,    32,    35,
+    37,    39
+};
+
+static const short yyrhs[] = {    17,
+     0,    17,     3,    17,    12,    17,     0,    17,     4,    17,
+     0,    17,     5,    17,     0,    17,     6,    17,     0,    17,
+     7,    17,     0,    17,     8,    17,     0,    17,     9,    17,
+     0,    10,    17,     0,    13,     0,    11,     0,    14,    17,
+    15,     0
+};
+
+#endif
+
+#if YYDEBUG != 0
+static const short yyrline[] = { 0,
+   178,   186,   190,   194,   198,   202,   206,   210,   214,   218,
+   222,   227
+};
+#endif
+
+
+#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
+
+static const char * const yytname[] = {   "$","error","$undefined.","'?'","'|'",
+"'&'","EQUOP2","CMPOP2","ADDOP2","MULOP2","'!'","NUMBER","':'","'n'","'('","')'",
+"start","exp", NULL
+};
+#endif
+
+static const short yyr1[] = {     0,
+    16,    17,    17,    17,    17,    17,    17,    17,    17,    17,
+    17,    17
+};
+
+static const short yyr2[] = {     0,
+     1,     5,     3,     3,     3,     3,     3,     3,     2,     1,
+     1,     3
+};
+
+static const short yydefact[] = {     0,
+     0,    11,    10,     0,     1,     9,     0,     0,     0,     0,
+     0,     0,     0,     0,    12,     0,     3,     4,     5,     6,
+     7,     8,     0,     2,     0,     0,     0
+};
+
+static const short yydefgoto[] = {    25,
+     5
+};
+
+static const short yypact[] = {    -9,
+    -9,-32768,-32768,    -9,    34,-32768,    11,    -9,    -9,    -9,
+    -9,    -9,    -9,    -9,-32768,    24,    39,    43,    16,    26,
+    -3,-32768,    -9,    34,    21,    53,-32768
+};
+
+static const short yypgoto[] = {-32768,
+    -1
+};
+
+
+#define        YYLAST          53
+
+
+static const short yytable[] = {     6,
+     1,     2,     7,     3,     4,    14,    16,    17,    18,    19,
+    20,    21,    22,     8,     9,    10,    11,    12,    13,    14,
+    26,    24,    12,    13,    14,    15,     8,     9,    10,    11,
+    12,    13,    14,    13,    14,    23,     8,     9,    10,    11,
+    12,    13,    14,    10,    11,    12,    13,    14,    11,    12,
+    13,    14,    27
+};
+
+static const short yycheck[] = {     1,
+    10,    11,     4,    13,    14,     9,     8,     9,    10,    11,
+    12,    13,    14,     3,     4,     5,     6,     7,     8,     9,
+     0,    23,     7,     8,     9,    15,     3,     4,     5,     6,
+     7,     8,     9,     8,     9,    12,     3,     4,     5,     6,
+     7,     8,     9,     5,     6,     7,     8,     9,     6,     7,
+     8,     9,     0
+};
+#define YYPURE 1
+
+/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
+#line 3 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple"
+/* This file comes from bison-1.28.  */
+
+/* Skeleton output parser for bison,
+   Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
+
+   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, 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-1307, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+/* This is the parser code that is written into each bison parser
+  when the %semantic_parser declaration is not specified in the grammar.
+  It was written by Richard Stallman by simplifying the hairy parser
+  used when %semantic_parser is specified.  */
+
+#ifndef YYSTACK_USE_ALLOCA
+#ifdef alloca
+#define YYSTACK_USE_ALLOCA
+#else /* alloca not defined */
+#ifdef __GNUC__
+#define YYSTACK_USE_ALLOCA
+#define alloca __builtin_alloca
+#else /* not GNU C.  */
+#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
+#define YYSTACK_USE_ALLOCA
+#include <alloca.h>
+#else /* not sparc */
+/* We think this test detects Watcom and Microsoft C.  */
+/* This used to test MSDOS, but that is a bad idea
+   since that symbol is in the user namespace.  */
+#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
+#if 0 /* No need for malloc.h, which pollutes the namespace;
+        instead, just don't use alloca.  */
+#include <malloc.h>
+#endif
+#else /* not MSDOS, or __TURBOC__ */
+#if defined(_AIX)
+/* I don't know what this was needed for, but it pollutes the namespace.
+   So I turned it off.   rms, 2 May 1997.  */
+/* #include <malloc.h>  */
+ #pragma alloca
+#define YYSTACK_USE_ALLOCA
+#else /* not MSDOS, or __TURBOC__, or _AIX */
+#if 0
+#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
+                and on HPUX 10.  Eventually we can turn this on.  */
+#define YYSTACK_USE_ALLOCA
+#define alloca __builtin_alloca
+#endif /* __hpux */
+#endif
+#endif /* not _AIX */
+#endif /* not MSDOS, or __TURBOC__ */
+#endif /* not sparc */
+#endif /* not GNU C */
+#endif /* alloca not defined */
+#endif /* YYSTACK_USE_ALLOCA not defined */
+
+#ifdef YYSTACK_USE_ALLOCA
+#define YYSTACK_ALLOC alloca
+#else
+#define YYSTACK_ALLOC malloc
+#endif
+
+/* Note: there must be only one dollar sign in this file.
+   It is replaced by the list of actions, each action
+   as one case of the switch.  */
+
+#define yyerrok                (yyerrstatus = 0)
+#define yyclearin      (yychar = YYEMPTY)
+#define YYEMPTY                -2
+#define YYEOF          0
+#define YYACCEPT       goto yyacceptlab
+#define YYABORT        goto yyabortlab
+#define YYERROR                goto yyerrlab1
+/* Like YYERROR except do call yyerror.
+   This remains here temporarily to ease the
+   transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+#define YYFAIL         goto yyerrlab
+#define YYRECOVERING()  (!!yyerrstatus)
+#define YYBACKUP(token, value) \
+do                                                             \
+  if (yychar == YYEMPTY && yylen == 1)                         \
+    { yychar = (token), yylval = (value);                      \
+      yychar1 = YYTRANSLATE (yychar);                          \
+      YYPOPSTACK;                                              \
+      goto yybackup;                                           \
+    }                                                          \
+  else                                                         \
+    { yyerror ("syntax error: cannot back up"); YYERROR; }     \
+while (0)
+
+#define YYTERROR       1
+#define YYERRCODE      256
+
+#ifndef YYPURE
+#define YYLEX          yylex()
+#endif
+
+#ifdef YYPURE
+#ifdef YYLSP_NEEDED
+#ifdef YYLEX_PARAM
+#define YYLEX          yylex(&yylval, &yylloc, YYLEX_PARAM)
+#else
+#define YYLEX          yylex(&yylval, &yylloc)
+#endif
+#else /* not YYLSP_NEEDED */
+#ifdef YYLEX_PARAM
+#define YYLEX          yylex(&yylval, YYLEX_PARAM)
+#else
+#define YYLEX          yylex(&yylval)
+#endif
+#endif /* not YYLSP_NEEDED */
+#endif
+
+/* If nonreentrant, generate the variables here */
+
+#ifndef YYPURE
+
+int    yychar;                 /*  the lookahead symbol                */
+YYSTYPE        yylval;                 /*  the semantic value of the           */
+                               /*  lookahead symbol                    */
+
+#ifdef YYLSP_NEEDED
+YYLTYPE yylloc;                        /*  location data for the lookahead     */
+                               /*  symbol                              */
+#endif
+
+int yynerrs;                   /*  number of parse errors so far       */
+#endif  /* not YYPURE */
+
+#if YYDEBUG != 0
+int yydebug;                   /*  nonzero means print parse trace     */
+/* Since this is uninitialized, it does not stop multiple parsers
+   from coexisting.  */
+#endif
+
+/*  YYINITDEPTH indicates the initial size of the parser's stacks      */
+
+#ifndef        YYINITDEPTH
+#define YYINITDEPTH 200
+#endif
+
+/*  YYMAXDEPTH is the maximum size the stacks can grow to
+    (effective only if the built-in stack extension method is used).  */
+
+#if YYMAXDEPTH == 0
+#undef YYMAXDEPTH
+#endif
+
+#ifndef YYMAXDEPTH
+#define YYMAXDEPTH 10000
+#endif
+\f
+/* Define __yy_memcpy.  Note that the size argument
+   should be passed with type unsigned int, because that is what the non-GCC
+   definitions require.  With GCC, __builtin_memcpy takes an arg
+   of type size_t, but it can handle unsigned int.  */
+
+#if __GNUC__ > 1               /* GNU C and GNU C++ define this.  */
+#define __yy_memcpy(TO,FROM,COUNT)     __builtin_memcpy(TO,FROM,COUNT)
+#else                          /* not GNU C or C++ */
+#ifndef __cplusplus
+
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
+static void
+__yy_memcpy (to, from, count)
+     char *to;
+     char *from;
+     unsigned int count;
+{
+  register char *f = from;
+  register char *t = to;
+  register int i = count;
+
+  while (i-- > 0)
+    *t++ = *f++;
+}
+
+#else /* __cplusplus */
+
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
+static void
+__yy_memcpy (char *to, char *from, unsigned int count)
+{
+  register char *t = to;
+  register char *f = from;
+  register int i = count;
+
+  while (i-- > 0)
+    *t++ = *f++;
+}
+
+#endif
+#endif
+\f
+#line 217 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple"
+
+/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+   into yyparse.  The argument should have type void *.
+   It should actually point to an object.
+   Grammar actions can access the variable by casting it
+   to the proper pointer type.  */
+
+#ifdef YYPARSE_PARAM
+#ifdef __cplusplus
+#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+#define YYPARSE_PARAM_DECL
+#else /* not __cplusplus */
+#define YYPARSE_PARAM_ARG YYPARSE_PARAM
+#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
+#endif /* not __cplusplus */
+#else /* not YYPARSE_PARAM */
+#define YYPARSE_PARAM_ARG
+#define YYPARSE_PARAM_DECL
+#endif /* not YYPARSE_PARAM */
+
+/* Prevent warning if -Wstrict-prototypes.  */
+#ifdef __GNUC__
+#ifdef YYPARSE_PARAM
+int yyparse (void *);
+#else
+int yyparse (void);
+#endif
+#endif
+
+int
+yyparse(YYPARSE_PARAM_ARG)
+     YYPARSE_PARAM_DECL
+{
+  register int yystate;
+  register int yyn;
+  register short *yyssp;
+  register YYSTYPE *yyvsp;
+  int yyerrstatus;     /*  number of tokens to shift before error messages enabled */
+  int yychar1 = 0;             /*  lookahead token as an internal (translated) token number */
+
+  short        yyssa[YYINITDEPTH];     /*  the state stack                     */
+  YYSTYPE yyvsa[YYINITDEPTH];  /*  the semantic value stack            */
+
+  short *yyss = yyssa;         /*  refer to the stacks thru separate pointers */
+  YYSTYPE *yyvs = yyvsa;       /*  to allow yyoverflow to reallocate them elsewhere */
+
+#ifdef YYLSP_NEEDED
+  YYLTYPE yylsa[YYINITDEPTH];  /*  the location stack                  */
+  YYLTYPE *yyls = yylsa;
+  YYLTYPE *yylsp;
+
+#define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
+#else
+#define YYPOPSTACK   (yyvsp--, yyssp--)
+#endif
+
+  int yystacksize = YYINITDEPTH;
+  int yyfree_stacks = 0;
+
+#ifdef YYPURE
+  int yychar;
+  YYSTYPE yylval;
+  int yynerrs;
+#ifdef YYLSP_NEEDED
+  YYLTYPE yylloc;
+#endif
+#endif
+
+  YYSTYPE yyval;               /*  the variable used to return         */
+                               /*  semantic values from the action     */
+                               /*  routines                            */
+
+  int yylen;
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Starting parse\n");
+#endif
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;            /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss - 1;
+  yyvsp = yyvs;
+#ifdef YYLSP_NEEDED
+  yylsp = yyls;
+#endif
+
+/* Push a new state, which is found in  yystate  .  */
+/* In all cases, when you get here, the value and location stacks
+   have just been pushed. so pushing a state here evens the stacks.  */
+yynewstate:
+
+  *++yyssp = yystate;
+
+  if (yyssp >= yyss + yystacksize - 1)
+    {
+      /* Give user a chance to reallocate the stack */
+      /* Use copies of these so that the &'s don't force the real ones into memory. */
+      YYSTYPE *yyvs1 = yyvs;
+      short *yyss1 = yyss;
+#ifdef YYLSP_NEEDED
+      YYLTYPE *yyls1 = yyls;
+#endif
+
+      /* Get the current used size of the three stacks, in elements.  */
+      int size = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      /* Each stack pointer address is followed by the size of
+        the data in use in that stack, in bytes.  */
+#ifdef YYLSP_NEEDED
+      /* This used to be a conditional around just the two extra args,
+        but that might be undefined if yyoverflow is a macro.  */
+      yyoverflow("parser stack overflow",
+                &yyss1, size * sizeof (*yyssp),
+                &yyvs1, size * sizeof (*yyvsp),
+                &yyls1, size * sizeof (*yylsp),
+                &yystacksize);
+#else
+      yyoverflow("parser stack overflow",
+                &yyss1, size * sizeof (*yyssp),
+                &yyvs1, size * sizeof (*yyvsp),
+                &yystacksize);
+#endif
+
+      yyss = yyss1; yyvs = yyvs1;
+#ifdef YYLSP_NEEDED
+      yyls = yyls1;
+#endif
+#else /* no yyoverflow */
+      /* Extend the stack our own way.  */
+      if (yystacksize >= YYMAXDEPTH)
+       {
+         yyerror("parser stack overflow");
+         if (yyfree_stacks)
+           {
+             free (yyss);
+             free (yyvs);
+#ifdef YYLSP_NEEDED
+             free (yyls);
+#endif
+           }
+         return 2;
+       }
+      yystacksize *= 2;
+      if (yystacksize > YYMAXDEPTH)
+       yystacksize = YYMAXDEPTH;
+#ifndef YYSTACK_USE_ALLOCA
+      yyfree_stacks = 1;
+#endif
+      yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
+      __yy_memcpy ((char *)yyss, (char *)yyss1,
+                  size * (unsigned int) sizeof (*yyssp));
+      yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
+      __yy_memcpy ((char *)yyvs, (char *)yyvs1,
+                  size * (unsigned int) sizeof (*yyvsp));
+#ifdef YYLSP_NEEDED
+      yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
+      __yy_memcpy ((char *)yyls, (char *)yyls1,
+                  size * (unsigned int) sizeof (*yylsp));
+#endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + size - 1;
+      yyvsp = yyvs + size - 1;
+#ifdef YYLSP_NEEDED
+      yylsp = yyls + size - 1;
+#endif
+
+#if YYDEBUG != 0
+      if (yydebug)
+       fprintf(stderr, "Stack size increased to %d\n", yystacksize);
+#endif
+
+      if (yyssp >= yyss + yystacksize - 1)
+       YYABORT;
+    }
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Entering state %d\n", yystate);
+#endif
+
+  goto yybackup;
+ yybackup:
+
+/* Do appropriate processing given the current state.  */
+/* Read a lookahead token if we need one and don't already have one.  */
+/* yyresume: */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* yychar is either YYEMPTY or YYEOF
+     or a valid token in external form.  */
+
+  if (yychar == YYEMPTY)
+    {
+#if YYDEBUG != 0
+      if (yydebug)
+       fprintf(stderr, "Reading a token: ");
+#endif
+      yychar = YYLEX;
+    }
+
+  /* Convert token to internal form (in yychar1) for indexing tables with */
+
+  if (yychar <= 0)             /* This means end of input. */
+    {
+      yychar1 = 0;
+      yychar = YYEOF;          /* Don't call YYLEX any more */
+
+#if YYDEBUG != 0
+      if (yydebug)
+       fprintf(stderr, "Now at end of input.\n");
+#endif
+    }
+  else
+    {
+      yychar1 = YYTRANSLATE(yychar);
+
+#if YYDEBUG != 0
+      if (yydebug)
+       {
+         fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
+         /* Give the individual parser a way to print the precise meaning
+            of a token, for further debugging info.  */
+#ifdef YYPRINT
+         YYPRINT (stderr, yychar, yylval);
+#endif
+         fprintf (stderr, ")\n");
+       }
+#endif
+    }
+
+  yyn += yychar1;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
+    goto yydefault;
+
+  yyn = yytable[yyn];
+
+  /* yyn is what to do for this token type in this state.
+     Negative => reduce, -yyn is rule number.
+     Positive => shift, yyn is new state.
+       New state is final state => don't bother to shift,
+       just return success.
+     0, or most negative number => error.  */
+
+  if (yyn < 0)
+    {
+      if (yyn == YYFLAG)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrlab;
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Shift the lookahead token.  */
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
+#endif
+
+  /* Discard the token being shifted unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  *++yyvsp = yylval;
+#ifdef YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
+
+  /* count tokens shifted since error; after three, turn off error status.  */
+  if (yyerrstatus) yyerrstatus--;
+
+  yystate = yyn;
+  goto yynewstate;
+
+/* Do the default action for the current state.  */
+yydefault:
+
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+
+/* Do a reduction.  yyn is the number of a rule to reduce with.  */
+yyreduce:
+  yylen = yyr2[yyn];
+  if (yylen > 0)
+    yyval = yyvsp[1-yylen]; /* implement default value of the action */
+
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      int i;
+
+      fprintf (stderr, "Reducing via rule %d (line %d), ",
+              yyn, yyrline[yyn]);
+
+      /* Print the symbols being reduced, and their result.  */
+      for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
+       fprintf (stderr, "%s ", yytname[yyrhs[i]]);
+      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+    }
+#endif
+
+
+  switch (yyn) {
+
+case 1:
+#line 179 "plural.y"
+{
+           if (yyvsp[0].exp == NULL)
+             YYABORT;
+           ((struct parse_args *) arg)->res = yyvsp[0].exp;
+         ;
+    break;}
+case 2:
+#line 187 "plural.y"
+{
+           yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp);
+         ;
+    break;}
+case 3:
+#line 191 "plural.y"
+{
+           yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp);
+         ;
+    break;}
+case 4:
+#line 195 "plural.y"
+{
+           yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp);
+         ;
+    break;}
+case 5:
+#line 199 "plural.y"
+{
+           yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+         ;
+    break;}
+case 6:
+#line 203 "plural.y"
+{
+           yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+         ;
+    break;}
+case 7:
+#line 207 "plural.y"
+{
+           yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+         ;
+    break;}
+case 8:
+#line 211 "plural.y"
+{
+           yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+         ;
+    break;}
+case 9:
+#line 215 "plural.y"
+{
+           yyval.exp = new_exp_1 (lnot, yyvsp[0].exp);
+         ;
+    break;}
+case 10:
+#line 219 "plural.y"
+{
+           yyval.exp = new_exp_0 (var);
+         ;
+    break;}
+case 11:
+#line 223 "plural.y"
+{
+           if ((yyval.exp = new_exp_0 (num)) != NULL)
+             yyval.exp->val.num = yyvsp[0].num;
+         ;
+    break;}
+case 12:
+#line 228 "plural.y"
+{
+           yyval.exp = yyvsp[-1].exp;
+         ;
+    break;}
+}
+   /* the action file gets copied in in place of this dollarsign */
+#line 543 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple"
+\f
+  yyvsp -= yylen;
+  yyssp -= yylen;
+#ifdef YYLSP_NEEDED
+  yylsp -= yylen;
+#endif
+
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      short *ssp1 = yyss - 1;
+      fprintf (stderr, "state stack now");
+      while (ssp1 != yyssp)
+       fprintf (stderr, " %d", *++ssp1);
+      fprintf (stderr, "\n");
+    }
+#endif
+
+  *++yyvsp = yyval;
+
+#ifdef YYLSP_NEEDED
+  yylsp++;
+  if (yylen == 0)
+    {
+      yylsp->first_line = yylloc.first_line;
+      yylsp->first_column = yylloc.first_column;
+      yylsp->last_line = (yylsp-1)->last_line;
+      yylsp->last_column = (yylsp-1)->last_column;
+      yylsp->text = 0;
+    }
+  else
+    {
+      yylsp->last_line = (yylsp+yylen-1)->last_line;
+      yylsp->last_column = (yylsp+yylen-1)->last_column;
+    }
+#endif
+
+  /* Now "shift" the result of the reduction.
+     Determine what state that goes to,
+     based on the state we popped back to
+     and the rule number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
+  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTBASE];
+
+  goto yynewstate;
+
+yyerrlab:   /* here on detecting error */
+
+  if (! yyerrstatus)
+    /* If not already recovering from an error, report this error.  */
+    {
+      ++yynerrs;
+
+#ifdef YYERROR_VERBOSE
+      yyn = yypact[yystate];
+
+      if (yyn > YYFLAG && yyn < YYLAST)
+       {
+         int size = 0;
+         char *msg;
+         int x, count;
+
+         count = 0;
+         /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
+         for (x = (yyn < 0 ? -yyn : 0);
+              x < (sizeof(yytname) / sizeof(char *)); x++)
+           if (yycheck[x + yyn] == x)
+             size += strlen(yytname[x]) + 15, count++;
+         msg = (char *) malloc(size + 15);
+         if (msg != 0)
+           {
+             strcpy(msg, "parse error");
+
+             if (count < 5)
+               {
+                 count = 0;
+                 for (x = (yyn < 0 ? -yyn : 0);
+                      x < (sizeof(yytname) / sizeof(char *)); x++)
+                   if (yycheck[x + yyn] == x)
+                     {
+                       strcat(msg, count == 0 ? ", expecting `" : " or `");
+                       strcat(msg, yytname[x]);
+                       strcat(msg, "'");
+                       count++;
+                     }
+               }
+             yyerror(msg);
+             free(msg);
+           }
+         else
+           yyerror ("parse error; also virtual memory exceeded");
+       }
+      else
+#endif /* YYERROR_VERBOSE */
+       yyerror("parse error");
+    }
+
+  goto yyerrlab1;
+yyerrlab1:   /* here on error raised explicitly by an action */
+
+  if (yyerrstatus == 3)
+    {
+      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
+
+      /* return failure if at end of input */
+      if (yychar == YYEOF)
+       YYABORT;
+
+#if YYDEBUG != 0
+      if (yydebug)
+       fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
+#endif
+
+      yychar = YYEMPTY;
+    }
+
+  /* Else will try to reuse lookahead token
+     after shifting the error token.  */
+
+  yyerrstatus = 3;             /* Each real token shifted decrements this */
+
+  goto yyerrhandle;
+
+yyerrdefault:  /* current state does not do anything special for the error token. */
+
+#if 0
+  /* This is wrong; only states that explicitly want error tokens
+     should shift them.  */
+  yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
+  if (yyn) goto yydefault;
+#endif
+
+yyerrpop:   /* pop the current state because it cannot handle the error token */
+
+  if (yyssp == yyss) YYABORT;
+  yyvsp--;
+  yystate = *--yyssp;
+#ifdef YYLSP_NEEDED
+  yylsp--;
+#endif
+
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      short *ssp1 = yyss - 1;
+      fprintf (stderr, "Error: state stack now");
+      while (ssp1 != yyssp)
+       fprintf (stderr, " %d", *++ssp1);
+      fprintf (stderr, "\n");
+    }
+#endif
+
+yyerrhandle:
+
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yyerrdefault;
+
+  yyn += YYTERROR;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
+    goto yyerrdefault;
+
+  yyn = yytable[yyn];
+  if (yyn < 0)
+    {
+      if (yyn == YYFLAG)
+       goto yyerrpop;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrpop;
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Shifting error token, ");
+#endif
+
+  *++yyvsp = yylval;
+#ifdef YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
+
+  yystate = yyn;
+  goto yynewstate;
+
+ yyacceptlab:
+  /* YYACCEPT comes here.  */
+  if (yyfree_stacks)
+    {
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
+#endif
+    }
+  return 0;
+
+ yyabortlab:
+  /* YYABORT comes here.  */
+  if (yyfree_stacks)
+    {
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
+#endif
+    }
+  return 1;
+}
+#line 233 "plural.y"
+
+
+void
+internal_function
+FREE_EXPRESSION (exp)
+     struct expression *exp;
+{
+  if (exp == NULL)
+    return;
+
+  /* Handle the recursive case.  */
+  switch (exp->nargs)
+    {
+    case 3:
+      FREE_EXPRESSION (exp->val.args[2]);
+      /* FALLTHROUGH */
+    case 2:
+      FREE_EXPRESSION (exp->val.args[1]);
+      /* FALLTHROUGH */
+    case 1:
+      FREE_EXPRESSION (exp->val.args[0]);
+      /* FALLTHROUGH */
+    default:
+      break;
+    }
+
+  free (exp);
+}
+
+
+static int
+yylex (lval, pexp)
+     YYSTYPE *lval;
+     const char **pexp;
+{
+  const char *exp = *pexp;
+  int result;
+
+  while (1)
+    {
+      if (exp[0] == '\0')
+       {
+         *pexp = exp;
+         return YYEOF;
+       }
+
+      if (exp[0] != ' ' && exp[0] != '\t')
+       break;
+
+      ++exp;
+    }
+
+  result = *exp++;
+  switch (result)
+    {
+    case '0': case '1': case '2': case '3': case '4':
+    case '5': case '6': case '7': case '8': case '9':
+      {
+       unsigned long int n = result - '0';
+       while (exp[0] >= '0' && exp[0] <= '9')
+         {
+           n *= 10;
+           n += exp[0] - '0';
+           ++exp;
+         }
+       lval->num = n;
+       result = NUMBER;
+      }
+      break;
+
+    case '=':
+      if (exp[0] == '=')
+       {
+         ++exp;
+         lval->op = equal;
+         result = EQUOP2;
+       }
+      else
+       result = YYERRCODE;
+      break;
+
+    case '!':
+      if (exp[0] == '=')
+       {
+         ++exp;
+         lval->op = not_equal;
+         result = EQUOP2;
+       }
+      break;
+
+    case '&':
+    case '|':
+      if (exp[0] == result)
+       ++exp;
+      else
+       result = YYERRCODE;
+      break;
+
+    case '<':
+      if (exp[0] == '=')
+       {
+         ++exp;
+         lval->op = less_or_equal;
+       }
+      else
+       lval->op = less_than;
+      result = CMPOP2;
+      break;
+
+    case '>':
+      if (exp[0] == '=')
+       {
+         ++exp;
+         lval->op = greater_or_equal;
+       }
+      else
+       lval->op = greater_than;
+      result = CMPOP2;
+      break;
+
+    case '*':
+      lval->op = mult;
+      result = MULOP2;
+      break;
+
+    case '/':
+      lval->op = divide;
+      result = MULOP2;
+      break;
+
+    case '%':
+      lval->op = module;
+      result = MULOP2;
+      break;
+
+    case '+':
+      lval->op = plus;
+      result = ADDOP2;
+      break;
+
+    case '-':
+      lval->op = minus;
+      result = ADDOP2;
+      break;
+
+    case 'n':
+    case '?':
+    case ':':
+    case '(':
+    case ')':
+      /* Nothing, just return the character.  */
+      break;
+
+    case ';':
+    case '\n':
+    case '\0':
+      /* Be safe and let the user call this function again.  */
+      --exp;
+      result = YYEOF;
+      break;
+
+    default:
+      result = YYERRCODE;
+#if YYDEBUG != 0
+      --exp;
+#endif
+      break;
+    }
+
+  *pexp = exp;
+
+  return result;
+}
+
+
+static void
+yyerror (str)
+     const char *str;
+{
+  /* Do nothing.  We don't print error messages here.  */
+}
diff --git a/intl/plural.y b/intl/plural.y
new file mode 100644 (file)
index 0000000..be049a6
--- /dev/null
@@ -0,0 +1,413 @@
+%{
+/* Expression parsing for plural form selection.
+   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* The bison generated parser uses alloca.  AIX 3 forces us to put this
+   declaration at the beginning of the file.  The declaration in bison's
+   skeleton file comes too late.  This must come before <config.h>
+   because <config.h> may include arbitrary system headers.  */
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include "gettextP.h"
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define FREE_EXPRESSION __gettext_free_exp
+#else
+# define FREE_EXPRESSION gettext_free_exp__
+# define __gettextparse gettextparse__
+#endif
+
+#define YYLEX_PARAM    &((struct parse_args *) arg)->cp
+#define YYPARSE_PARAM  arg
+%}
+%pure_parser
+%expect 10
+
+%union {
+  unsigned long int num;
+  enum operator op;
+  struct expression *exp;
+}
+
+%{
+/* Prototypes for local functions.  */
+static struct expression *new_exp PARAMS ((int nargs, enum operator op,
+                                          struct expression * const *args));
+static inline struct expression *new_exp_0 PARAMS ((enum operator op));
+static inline struct expression *new_exp_1 PARAMS ((enum operator op,
+                                                  struct expression *right));
+static struct expression *new_exp_2 PARAMS ((enum operator op,
+                                            struct expression *left,
+                                            struct expression *right));
+static inline struct expression *new_exp_3 PARAMS ((enum operator op,
+                                                  struct expression *bexp,
+                                                  struct expression *tbranch,
+                                                  struct expression *fbranch));
+static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
+static void yyerror PARAMS ((const char *str));
+
+/* Allocation of expressions.  */
+
+static struct expression *
+new_exp (nargs, op, args)
+     int nargs;
+     enum operator op;
+     struct expression * const *args;
+{
+  int i;
+  struct expression *newp;
+
+  /* If any of the argument could not be malloc'ed, just return NULL.  */
+  for (i = nargs - 1; i >= 0; i--)
+    if (args[i] == NULL)
+      goto fail;
+
+  /* Allocate a new expression.  */
+  newp = (struct expression *) malloc (sizeof (*newp));
+  if (newp != NULL)
+    {
+      newp->nargs = nargs;
+      newp->operation = op;
+      for (i = nargs - 1; i >= 0; i--)
+       newp->val.args[i] = args[i];
+      return newp;
+    }
+
+ fail:
+  for (i = nargs - 1; i >= 0; i--)
+    FREE_EXPRESSION (args[i]);
+
+  return NULL;
+}
+
+static inline struct expression *
+new_exp_0 (op)
+     enum operator op;
+{
+  return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (op, right)
+     enum operator op;
+     struct expression *right;
+{
+  struct expression *args[1];
+
+  args[0] = right;
+  return new_exp (1, op, args);
+}
+
+static struct expression *
+new_exp_2 (op, left, right)
+     enum operator op;
+     struct expression *left;
+     struct expression *right;
+{
+  struct expression *args[2];
+
+  args[0] = left;
+  args[1] = right;
+  return new_exp (2, op, args);
+}
+
+static inline struct expression *
+new_exp_3 (op, bexp, tbranch, fbranch)
+     enum operator op;
+     struct expression *bexp;
+     struct expression *tbranch;
+     struct expression *fbranch;
+{
+  struct expression *args[3];
+
+  args[0] = bexp;
+  args[1] = tbranch;
+  args[2] = fbranch;
+  return new_exp (3, op, args);
+}
+
+%}
+
+/* This declares that all operators have the same associativity and the
+   precedence order as in C.  See [Harbison, Steele: C, A Reference Manual].
+   There is no unary minus and no bitwise operators.
+   Operators with the same syntactic behaviour have been merged into a single
+   token, to save space in the array generated by bison.  */
+%right '?'             /*   ?          */
+%left '|'              /*   ||         */
+%left '&'              /*   &&         */
+%left EQUOP2           /*   == !=      */
+%left CMPOP2           /*   < > <= >=  */
+%left ADDOP2           /*   + -        */
+%left MULOP2           /*   * / %      */
+%right '!'             /*   !          */
+
+%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2
+%token <num> NUMBER
+%type <exp> exp
+
+%%
+
+start:   exp
+         {
+           if ($1 == NULL)
+             YYABORT;
+           ((struct parse_args *) arg)->res = $1;
+         }
+       ;
+
+exp:     exp '?' exp ':' exp
+         {
+           $$ = new_exp_3 (qmop, $1, $3, $5);
+         }
+       | exp '|' exp
+         {
+           $$ = new_exp_2 (lor, $1, $3);
+         }
+       | exp '&' exp
+         {
+           $$ = new_exp_2 (land, $1, $3);
+         }
+       | exp EQUOP2 exp
+         {
+           $$ = new_exp_2 ($2, $1, $3);
+         }
+       | exp CMPOP2 exp
+         {
+           $$ = new_exp_2 ($2, $1, $3);
+         }
+       | exp ADDOP2 exp
+         {
+           $$ = new_exp_2 ($2, $1, $3);
+         }
+       | exp MULOP2 exp
+         {
+           $$ = new_exp_2 ($2, $1, $3);
+         }
+       | '!' exp
+         {
+           $$ = new_exp_1 (lnot, $2);
+         }
+       | 'n'
+         {
+           $$ = new_exp_0 (var);
+         }
+       | NUMBER
+         {
+           if (($$ = new_exp_0 (num)) != NULL)
+             $$->val.num = $1;
+         }
+       | '(' exp ')'
+         {
+           $$ = $2;
+         }
+       ;
+
+%%
+
+void
+internal_function
+FREE_EXPRESSION (exp)
+     struct expression *exp;
+{
+  if (exp == NULL)
+    return;
+
+  /* Handle the recursive case.  */
+  switch (exp->nargs)
+    {
+    case 3:
+      FREE_EXPRESSION (exp->val.args[2]);
+      /* FALLTHROUGH */
+    case 2:
+      FREE_EXPRESSION (exp->val.args[1]);
+      /* FALLTHROUGH */
+    case 1:
+      FREE_EXPRESSION (exp->val.args[0]);
+      /* FALLTHROUGH */
+    default:
+      break;
+    }
+
+  free (exp);
+}
+
+
+static int
+yylex (lval, pexp)
+     YYSTYPE *lval;
+     const char **pexp;
+{
+  const char *exp = *pexp;
+  int result;
+
+  while (1)
+    {
+      if (exp[0] == '\0')
+       {
+         *pexp = exp;
+         return YYEOF;
+       }
+
+      if (exp[0] != ' ' && exp[0] != '\t')
+       break;
+
+      ++exp;
+    }
+
+  result = *exp++;
+  switch (result)
+    {
+    case '0': case '1': case '2': case '3': case '4':
+    case '5': case '6': case '7': case '8': case '9':
+      {
+       unsigned long int n = result - '0';
+       while (exp[0] >= '0' && exp[0] <= '9')
+         {
+           n *= 10;
+           n += exp[0] - '0';
+           ++exp;
+         }
+       lval->num = n;
+       result = NUMBER;
+      }
+      break;
+
+    case '=':
+      if (exp[0] == '=')
+       {
+         ++exp;
+         lval->op = equal;
+         result = EQUOP2;
+       }
+      else
+       result = YYERRCODE;
+      break;
+
+    case '!':
+      if (exp[0] == '=')
+       {
+         ++exp;
+         lval->op = not_equal;
+         result = EQUOP2;
+       }
+      break;
+
+    case '&':
+    case '|':
+      if (exp[0] == result)
+       ++exp;
+      else
+       result = YYERRCODE;
+      break;
+
+    case '<':
+      if (exp[0] == '=')
+       {
+         ++exp;
+         lval->op = less_or_equal;
+       }
+      else
+       lval->op = less_than;
+      result = CMPOP2;
+      break;
+
+    case '>':
+      if (exp[0] == '=')
+       {
+         ++exp;
+         lval->op = greater_or_equal;
+       }
+      else
+       lval->op = greater_than;
+      result = CMPOP2;
+      break;
+
+    case '*':
+      lval->op = mult;
+      result = MULOP2;
+      break;
+
+    case '/':
+      lval->op = divide;
+      result = MULOP2;
+      break;
+
+    case '%':
+      lval->op = module;
+      result = MULOP2;
+      break;
+
+    case '+':
+      lval->op = plus;
+      result = ADDOP2;
+      break;
+
+    case '-':
+      lval->op = minus;
+      result = ADDOP2;
+      break;
+
+    case 'n':
+    case '?':
+    case ':':
+    case '(':
+    case ')':
+      /* Nothing, just return the character.  */
+      break;
+
+    case ';':
+    case '\n':
+    case '\0':
+      /* Be safe and let the user call this function again.  */
+      --exp;
+      result = YYEOF;
+      break;
+
+    default:
+      result = YYERRCODE;
+#if YYDEBUG != 0
+      --exp;
+#endif
+      break;
+    }
+
+  *pexp = exp;
+
+  return result;
+}
+
+
+static void
+yyerror (str)
+     const char *str;
+{
+  /* Do nothing.  We don't print error messages here.  */
+}
diff --git a/intl/ref-add.sin b/intl/ref-add.sin
new file mode 100644 (file)
index 0000000..167374e
--- /dev/null
@@ -0,0 +1,31 @@
+# Add this package to a list of references stored in a text file.
+#
+#   Copyright (C) 2000 Free Software Foundation, Inc.
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU Library General Public License as published
+#   by the Free Software Foundation; either version 2, 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
+#   Library General Public License for more details.
+#
+#   You should have received a copy of the GNU Library General Public
+#   License along with this program; if not, write to the Free Software
+#   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+#   USA.
+#
+# Written by Bruno Haible <haible@clisp.cons.org>.
+#
+/^# Packages using this file: / {
+  s/# Packages using this file://
+  ta
+  :a
+  s/ @PACKAGE@ / @PACKAGE@ /
+  tb
+  s/ $/ @PACKAGE@ /
+  :b
+  s/^/# Packages using this file:/
+}
diff --git a/intl/ref-del.sin b/intl/ref-del.sin
new file mode 100644 (file)
index 0000000..613cf37
--- /dev/null
@@ -0,0 +1,26 @@
+# Remove this package from a list of references stored in a text file.
+#
+#   Copyright (C) 2000 Free Software Foundation, Inc.
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU Library General Public License as published
+#   by the Free Software Foundation; either version 2, 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
+#   Library General Public License for more details.
+#
+#   You should have received a copy of the GNU Library General Public
+#   License along with this program; if not, write to the Free Software
+#   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+#   USA.
+#
+# Written by Bruno Haible <haible@clisp.cons.org>.
+#
+/^# Packages using this file: / {
+  s/# Packages using this file://
+  s/ @PACKAGE@ / /
+  s/^/# Packages using this file:/
+}
diff --git a/intl/textdomain.c b/intl/textdomain.c
new file mode 100644 (file)
index 0000000..2e420ad
--- /dev/null
@@ -0,0 +1,142 @@
+/* Implementation of the textdomain(3) function.
+   Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "gettextP.h"
+
+#ifdef _LIBC
+/* We have to handle multi-threaded applications.  */
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc.  */
+# define __libc_rwlock_define(CLASS, NAME)
+# define __libc_rwlock_wrlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+   names than the internal variables in GNU libc, otherwise programs
+   using libintl.a cannot be linked statically.  */
+#if !defined _LIBC
+# define _nl_default_default_domain _nl_default_default_domain__
+# define _nl_current_default_domain _nl_current_default_domain__
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Name of the default text domain.  */
+extern const char _nl_default_default_domain[];
+
+/* Default text domain in which entries for gettext(3) are to be found.  */
+extern const char *_nl_current_default_domain;
+
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define TEXTDOMAIN __textdomain
+# ifndef strdup
+#  define strdup(str) __strdup (str)
+# endif
+#else
+# define TEXTDOMAIN textdomain__
+#endif
+
+/* Lock variable to protect the global data in the gettext implementation.  */
+__libc_rwlock_define (extern, _nl_state_lock)
+
+/* Set the current default message catalog to DOMAINNAME.
+   If DOMAINNAME is null, return the current default.
+   If DOMAINNAME is "", reset to the default of "messages".  */
+char *
+TEXTDOMAIN (domainname)
+     const char *domainname;
+{
+  char *new_domain;
+  char *old_domain;
+
+  /* A NULL pointer requests the current setting.  */
+  if (domainname == NULL)
+    return (char *) _nl_current_default_domain;
+
+  __libc_rwlock_wrlock (_nl_state_lock);
+
+  old_domain = (char *) _nl_current_default_domain;
+
+  /* If domain name is the null string set to default domain "messages".  */
+  if (domainname[0] == '\0'
+      || strcmp (domainname, _nl_default_default_domain) == 0)
+    {
+      _nl_current_default_domain = _nl_default_default_domain;
+      new_domain = (char *) _nl_current_default_domain;
+    }
+  else if (strcmp (domainname, old_domain) == 0)
+    /* This can happen and people will use it to signal that some
+       environment variable changed.  */
+    new_domain = old_domain;
+  else
+    {
+      /* If the following malloc fails `_nl_current_default_domain'
+        will be NULL.  This value will be returned and so signals we
+        are out of core.  */
+#if defined _LIBC || defined HAVE_STRDUP
+      new_domain = strdup (domainname);
+#else
+      size_t len = strlen (domainname) + 1;
+      new_domain = (char *) malloc (len);
+      if (new_domain != NULL)
+       memcpy (new_domain, domainname, len);
+#endif
+
+      if (new_domain != NULL)
+       _nl_current_default_domain = new_domain;
+    }
+
+  /* We use this possibility to signal a change of the loaded catalogs
+     since this is most likely the case and there is no other easy we
+     to do it.  Do it only when the call was successful.  */
+  if (new_domain != NULL)
+    {
+      ++_nl_msg_cat_cntr;
+
+      if (old_domain != new_domain && old_domain != _nl_default_default_domain)
+       free (old_domain);
+    }
+
+  __libc_rwlock_unlock (_nl_state_lock);
+
+  return new_domain;
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__textdomain, textdomain);
+#endif
diff --git a/keymap.c b/keymap.c
new file mode 100644 (file)
index 0000000..665a5fc
--- /dev/null
+++ b/keymap.c
@@ -0,0 +1,923 @@
+/*
+ * Copyright (C) 1996-2000,2002 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_menu.h"
+#include "mutt_curses.h"
+#include "keymap.h"
+#include "mapping.h"
+#include "mutt_crypt.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "functions.h"
+
+struct mapping_t Menus[] = {
+ { "alias",    MENU_ALIAS },
+ { "attach",   MENU_ATTACH },
+ { "browser",  MENU_FOLDER },
+ { "compose",  MENU_COMPOSE },
+ { "editor",   MENU_EDITOR },
+ { "index",    MENU_MAIN },
+ { "pager",    MENU_PAGER },
+ { "postpone", MENU_POST },
+ { "pgp",      MENU_PGP },
+ { "smime",    MENU_SMIME },
+#ifdef MIXMASTER
+  { "mix",     MENU_MIX },
+#endif
+  
+
+ { "query",    MENU_QUERY },
+ { "generic",  MENU_GENERIC },
+ { NULL,       0 }
+};
+
+#define mutt_check_menu(s) mutt_getvaluebyname(s, Menus)
+
+static struct mapping_t KeyNames[] = {
+  { "<PageUp>",        KEY_PPAGE },
+  { "<PageDown>",      KEY_NPAGE },
+  { "<Up>",    KEY_UP },
+  { "<Down>",  KEY_DOWN },
+  { "<Right>", KEY_RIGHT },
+  { "<Left>",  KEY_LEFT },
+  { "<Delete>",        KEY_DC },
+  { "<BackSpace>",KEY_BACKSPACE },
+  { "<Insert>",        KEY_IC },
+  { "<Home>",  KEY_HOME },
+  { "<End>",   KEY_END },
+#ifdef KEY_ENTER
+  { "<Enter>", KEY_ENTER },
+#endif
+  { "<Return>",        M_ENTER_C },
+  { "<Esc>",   '\033' },
+  { "<Tab>",   '\t' },
+  { "<Space>", ' ' },
+#ifdef KEY_BTAB
+  { "<BackTab>", KEY_BTAB },
+#endif
+  { NULL,      0 }
+};
+
+/* contains the last key the user pressed */
+int LastKey;
+
+struct keymap_t *Keymaps[MENU_MAX];
+
+static struct keymap_t *allocKeys (int len, keycode_t *keys)
+{
+  struct keymap_t *p;
+
+  p = safe_calloc (1, sizeof (struct keymap_t));
+  p->len = len;
+  p->keys = safe_malloc (len * sizeof (keycode_t));
+  memcpy (p->keys, keys, len * sizeof (keycode_t));
+  return (p);
+}
+
+static int parse_fkey(char *s)
+{
+  char *t;
+  int n = 0;
+
+  if(s[0] != '<' || ascii_tolower(s[1]) != 'f')
+    return -1;
+
+  for(t = s + 2; *t && isdigit((unsigned char) *t); t++)
+  {
+    n *= 10;
+    n += *t - '0';
+  }
+
+  if(*t != '>')
+    return -1;
+  else
+    return n;
+}
+
+/*
+ * This function parses the string <NNN> and uses the octal value as the key
+ * to bind.
+ */
+static int parse_keycode (const char *s)
+{
+  if (isdigit ((unsigned char) s[1]) &&
+      isdigit ((unsigned char) s[2]) &&
+      isdigit ((unsigned char) s[3]) &&
+      s[4] == '>')
+  {
+    return (s[3] - '0') + (s[2] - '0') * 8 + (s[1] - '0') * 64;
+  }
+  return -1;
+}
+
+static int parsekeys (char *str, keycode_t *d, int max)
+{
+  int n, len = max;
+  char buff[SHORT_STRING];
+  char c;
+  char *s, *t;
+
+  strfcpy(buff, str, sizeof(buff));
+  s = buff;
+  
+  while (*s && len)
+  {
+    *d = '\0';
+    if(*s == '<' && (t = strchr(s, '>')))
+    {
+      t++; c = *t; *t = '\0';
+      
+      if ((n = mutt_getvaluebyname (s, KeyNames)) != -1)
+      {
+       s = t;
+       *d = n;
+      }
+      else if ((n = parse_fkey(s)) > 0)
+      {
+       s = t;
+       *d = KEY_F (n);
+      }
+      else if ((n = parse_keycode(s)) > 0)
+      {
+       s = t;
+       *d = n;
+      }
+      
+      *t = c;
+    }
+
+    if(!*d)
+    {
+      *d = (unsigned char)*s;
+      s++;
+    }
+    d++;
+    len--;
+  }
+
+  return (max - len);
+}
+
+/* insert a key sequence into the specified map.  the map is sorted by ASCII
+ * value (lowest to highest)
+ */
+void km_bind (char *s, int menu, int op, char *macro, char *descr)
+{
+  struct keymap_t *map, *tmp, *last = NULL, *next;
+  keycode_t buf[MAX_SEQ];
+  int len, pos = 0, lastpos = 0;
+
+  len = parsekeys (s, buf, MAX_SEQ);
+
+  map = allocKeys (len, buf);
+  map->op = op;
+  map->macro = safe_strdup (macro);
+  map->descr = safe_strdup (descr);
+
+  tmp = Keymaps[menu];
+
+  while (tmp)
+  {
+    if (pos >= len || pos >= tmp->len)
+    {
+      /* map and tmp match, but have different lengths, so overwrite */
+      do
+      {
+       len = tmp->eq;
+       next = tmp->next;
+       FREE (&tmp->macro);
+       FREE (&tmp->keys);
+       FREE (&tmp->descr);
+       FREE (&tmp);
+       tmp = next;
+      }
+      while (tmp && len >= pos);
+      map->eq = len;
+      break;
+    }
+    else if (buf[pos] == tmp->keys[pos])
+      pos++;
+    else if (buf[pos] < tmp->keys[pos])
+    {
+      /* found location to insert between last and tmp */
+      map->eq = pos;
+      break;
+    }
+    else /* buf[pos] > tmp->keys[pos] */
+    {
+      last = tmp;
+      lastpos = pos;
+      if (pos > tmp->eq)
+       pos = tmp->eq;
+      tmp = tmp->next;
+    }
+  }
+
+  map->next = tmp;
+  if (last)
+  {
+    last->next = map;
+    last->eq = lastpos;
+  }
+  else
+    Keymaps[menu] = map;
+}
+
+void km_bindkey (char *s, int menu, int op)
+{
+  km_bind (s, menu, op, NULL, NULL);
+}
+
+static int get_op (struct binding_t *bindings, const char *start, size_t len)
+{
+  int i;
+
+  for (i = 0; bindings[i].name; i++)
+  {
+    if (!ascii_strncasecmp (start, bindings[i].name, len) &&   
+       mutt_strlen (bindings[i].name) == len)
+      return bindings[i].op;
+  }
+
+  return OP_NULL;
+}
+
+static char *get_func (struct binding_t *bindings, int op)
+{
+  int i;
+
+  for (i = 0; bindings[i].name; i++)
+  {
+    if (bindings[i].op == op)
+      return bindings[i].name;
+  }
+
+  return NULL;
+}
+
+static void push_string (char *s)
+{
+  char *pp, *p = s + mutt_strlen (s) - 1;
+  size_t l;
+  int i, op = OP_NULL;
+
+  while (p >= s)
+  {
+    /* if we see something like "<PageUp>", look to see if it is a real
+       function name and return the corresponding value */
+    if (*p == '>')
+    {
+      for (pp = p - 1; pp >= s && *pp != '<'; pp--)
+       ;
+      if (pp >= s)
+      {
+       if ((i = parse_fkey (pp)) > 0)
+       {
+         mutt_ungetch (KEY_F (i), 0);
+         p = pp - 1;
+         continue;
+       }
+
+       l = p - pp + 1;
+       for (i = 0; KeyNames[i].name; i++)
+       {
+         if (!ascii_strncasecmp (pp, KeyNames[i].name, l))
+           break;
+       }
+       if (KeyNames[i].name)
+       {
+         /* found a match */
+         mutt_ungetch (KeyNames[i].value, 0);
+         p = pp - 1;
+         continue;
+       }
+
+       /* See if it is a valid command
+        * skip the '<' and the '>' when comparing */
+       for (i = 0; Menus[i].name; i++)
+       {
+         struct binding_t *binding = km_get_table (Menus[i].value);
+         if (binding)
+         {
+           op = get_op (binding, pp + 1, l - 2);
+           if (op != OP_NULL)
+             break;
+         }
+       }
+
+       if (op != OP_NULL)
+       {
+         mutt_ungetch (0, op);
+         p = pp - 1;
+         continue;
+       }
+      }
+    }
+    mutt_ungetch (*p--, 0);
+  }
+}
+
+static int retry_generic (int menu, keycode_t *keys, int keyslen, int lastkey)
+{
+  if (menu != MENU_EDITOR && menu != MENU_GENERIC && menu != MENU_PAGER)
+  {
+    if (lastkey)
+      mutt_ungetch (lastkey, 0);
+    for (; keyslen; keyslen--)
+      mutt_ungetch (keys[keyslen - 1], 0);
+    return (km_dokey (MENU_GENERIC));
+  }
+  if (menu != MENU_EDITOR)
+  {
+    /* probably a good idea to flush input here so we can abort macros */
+    mutt_flushinp ();
+  }
+  return OP_NULL;
+}
+
+/* return values:
+ *     >0              function to execute
+ *     OP_NULL         no function bound to key sequence
+ *     -1              error occured while reading input
+ */
+int km_dokey (int menu)
+{
+  event_t tmp;
+  struct keymap_t *map = Keymaps[menu];
+  int pos = 0;
+  int n = 0;
+  int i;
+
+  if (!map)
+    return (retry_generic (menu, NULL, 0, 0));
+
+  FOREVER
+  {
+    /* ncurses doesn't return on resized screen when timeout is set to zero */
+    if (menu != MENU_EDITOR)
+      timeout ((Timeout > 0 ? Timeout : 60) * 1000);
+
+    tmp = mutt_getch();
+
+    if (menu != MENU_EDITOR)
+      timeout (-1); /* restore blocking operation */
+
+    LastKey = tmp.ch;
+    if (LastKey == -1)
+      return -1;
+
+    /* do we have an op already? */
+    if (tmp.op)
+    {
+      char *func = NULL;
+      struct binding_t *bindings;
+
+      /* is this a valid op for this menu? */
+      if ((bindings = km_get_table (menu)) &&
+         (func = get_func (bindings, tmp.op)))
+       return tmp.op;
+
+      if (menu == MENU_EDITOR && get_func (OpEditor, tmp.op))
+       return tmp.op;
+
+      if (menu != MENU_EDITOR && menu != MENU_PAGER)
+      {
+       /* check generic menu */
+       bindings = OpGeneric; 
+       if ((func = get_func (bindings, tmp.op)))
+         return tmp.op;
+      }
+
+      /* Sigh. Valid function but not in this context.
+       * Find the literal string and push it back */
+      for (i = 0; Menus[i].name; i++)
+      {
+       bindings = km_get_table (Menus[i].value);
+       if (bindings)
+       {
+         func = get_func (bindings, tmp.op);
+         if (func)
+         {
+           /* careful not to feed the <..> as one token. otherwise 
+           * push_string() will push the bogus op right back! */
+           mutt_ungetch ('>', 0);
+           push_string (func);
+           mutt_ungetch ('<', 0);
+           break;
+         }
+       }
+      }
+      /* continue to chew */
+      if (func)
+       continue;
+    }
+
+    /* Nope. Business as usual */
+    while (LastKey > map->keys[pos])
+    {
+      if (pos > map->eq || !map->next)
+       return (retry_generic (menu, map->keys, pos, LastKey));
+      map = map->next;
+    }
+
+    if (LastKey != map->keys[pos])
+      return (retry_generic (menu, map->keys, pos, LastKey));
+
+    if (++pos == map->len)
+    {
+
+      if (map->op != OP_MACRO)
+       return map->op;
+
+      if (n++ == 10)
+      {
+       mutt_flushinp ();
+       mutt_error _("Macro loop detected.");
+       return -1;
+      }
+
+      push_string (map->macro);
+      map = Keymaps[menu];
+      pos = 0;
+    }
+  }
+
+  /* not reached */
+}
+
+static void create_bindings (struct binding_t *map, int menu)
+{
+  int i;
+
+  for (i = 0 ; map[i].name ; i++)
+    if (map[i].seq)
+      km_bindkey (map[i].seq, menu, map[i].op);
+}
+
+char *km_keyname (int c)
+{
+  static char buf[10];
+  char *p;
+
+  if ((p = mutt_getnamebyvalue (c, KeyNames)))
+    return p;
+
+  if (c < 256 && c > -128 && iscntrl ((unsigned char) c))
+  {
+    if (c < 0)
+      c += 256;
+
+    if (c < 128)
+    {
+      buf[0] = '^';
+      buf[1] = (c + '@') & 0x7f;
+      buf[2] = 0;
+    }
+    else
+      snprintf (buf, sizeof (buf), "\\%d%d%d", c >> 6, (c >> 3) & 7, c & 7);
+  }
+  else if (c >= KEY_F0 && c < KEY_F(256)) /* this maximum is just a guess */
+    sprintf (buf, "<F%d>", c - KEY_F0);
+  else if (IsPrint (c))
+    snprintf (buf, sizeof (buf), "%c", (unsigned char) c);
+  else
+    snprintf (buf, sizeof (buf), "\\x%hx", (unsigned short) c);
+  return (buf);
+}
+
+int km_expand_key (char *s, size_t len, struct keymap_t *map)
+{
+  size_t l;
+  int p = 0;
+
+  if (!map)
+    return (0);
+
+  FOREVER
+  {
+    strfcpy (s, km_keyname (map->keys[p]), len);
+    len -= (l = mutt_strlen (s));
+
+    if (++p >= map->len || !len)
+      return (1);
+
+    s += l;
+  }
+
+  /* not reached */
+}
+
+struct keymap_t *km_find_func (int menu, int func)
+{
+  struct keymap_t *map = Keymaps[menu];
+
+  for (; map; map = map->next)
+    if (map->op == func)
+      break;
+  return (map);
+}
+
+void km_init (void)
+{
+  memset (Keymaps, 0, sizeof (struct keymap_t *) * MENU_MAX);
+
+  create_bindings (OpAttach, MENU_ATTACH);
+  create_bindings (OpBrowser, MENU_FOLDER);
+  create_bindings (OpCompose, MENU_COMPOSE);
+  create_bindings (OpMain, MENU_MAIN);
+  create_bindings (OpPager, MENU_PAGER);
+  create_bindings (OpPost, MENU_POST);
+  create_bindings (OpQuery, MENU_QUERY);
+  create_bindings (OpAlias, MENU_ALIAS);
+
+
+  if ((WithCrypto & APPLICATION_PGP))
+    create_bindings (OpPgp, MENU_PGP);
+
+  if ((WithCrypto & APPLICATION_SMIME))
+    create_bindings (OpSmime, MENU_SMIME);
+
+#ifdef MIXMASTER
+  create_bindings (OpMix, MENU_MIX);
+  
+  km_bindkey ("<space>", MENU_MIX, OP_GENERIC_SELECT_ENTRY);
+  km_bindkey ("h", MENU_MIX, OP_MIX_CHAIN_PREV);
+  km_bindkey ("l", MENU_MIX, OP_MIX_CHAIN_NEXT);
+#endif
+  
+  /* bindings for the line editor */
+  create_bindings (OpEditor, MENU_EDITOR);
+  
+  km_bindkey ("<up>", MENU_EDITOR, OP_EDITOR_HISTORY_UP);
+  km_bindkey ("<down>", MENU_EDITOR, OP_EDITOR_HISTORY_DOWN);
+  km_bindkey ("<left>", MENU_EDITOR, OP_EDITOR_BACKWARD_CHAR);
+  km_bindkey ("<right>", MENU_EDITOR, OP_EDITOR_FORWARD_CHAR);
+  km_bindkey ("<home>", MENU_EDITOR, OP_EDITOR_BOL);
+  km_bindkey ("<end>", MENU_EDITOR, OP_EDITOR_EOL);
+  km_bindkey ("<backspace>", MENU_EDITOR, OP_EDITOR_BACKSPACE);
+  km_bindkey ("<delete>", MENU_EDITOR, OP_EDITOR_BACKSPACE);
+  km_bindkey ("\177", MENU_EDITOR, OP_EDITOR_BACKSPACE);
+  
+  /* generic menu keymap */
+  create_bindings (OpGeneric, MENU_GENERIC);
+  
+  km_bindkey ("<home>", MENU_GENERIC, OP_FIRST_ENTRY);
+  km_bindkey ("<end>", MENU_GENERIC, OP_LAST_ENTRY);
+  km_bindkey ("<pagedown>", MENU_GENERIC, OP_NEXT_PAGE);
+  km_bindkey ("<pageup>", MENU_GENERIC, OP_PREV_PAGE);
+  km_bindkey ("<right>", MENU_GENERIC, OP_NEXT_PAGE);
+  km_bindkey ("<left>", MENU_GENERIC, OP_PREV_PAGE);
+  km_bindkey ("<up>", MENU_GENERIC, OP_PREV_ENTRY);
+  km_bindkey ("<down>", MENU_GENERIC, OP_NEXT_ENTRY);
+  km_bindkey ("1", MENU_GENERIC, OP_JUMP);
+  km_bindkey ("2", MENU_GENERIC, OP_JUMP);
+  km_bindkey ("3", MENU_GENERIC, OP_JUMP);
+  km_bindkey ("4", MENU_GENERIC, OP_JUMP);
+  km_bindkey ("5", MENU_GENERIC, OP_JUMP);
+  km_bindkey ("6", MENU_GENERIC, OP_JUMP);
+  km_bindkey ("7", MENU_GENERIC, OP_JUMP);
+  km_bindkey ("8", MENU_GENERIC, OP_JUMP);
+  km_bindkey ("9", MENU_GENERIC, OP_JUMP);
+
+  km_bindkey ("<enter>", MENU_GENERIC, OP_GENERIC_SELECT_ENTRY);
+
+  /* Miscellaneous extra bindings */
+  
+  km_bindkey (" ", MENU_MAIN, OP_DISPLAY_MESSAGE);
+  km_bindkey ("<up>", MENU_MAIN, OP_MAIN_PREV_UNDELETED);
+  km_bindkey ("<down>", MENU_MAIN, OP_MAIN_NEXT_UNDELETED);
+  km_bindkey ("J", MENU_MAIN, OP_NEXT_ENTRY);
+  km_bindkey ("K", MENU_MAIN, OP_PREV_ENTRY);
+  km_bindkey ("x", MENU_MAIN, OP_EXIT);
+
+  km_bindkey ("<enter>", MENU_MAIN, OP_DISPLAY_MESSAGE);
+
+  km_bindkey ("x", MENU_PAGER, OP_EXIT);
+  km_bindkey ("<backspace>", MENU_PAGER, OP_PREV_LINE);
+  km_bindkey ("<pagedown>", MENU_PAGER, OP_NEXT_PAGE);
+  km_bindkey ("<pageup>", MENU_PAGER, OP_PREV_PAGE);
+  km_bindkey ("<up>", MENU_PAGER, OP_MAIN_PREV_UNDELETED);
+  km_bindkey ("<right>", MENU_PAGER, OP_MAIN_NEXT_UNDELETED);
+  km_bindkey ("<down>", MENU_PAGER, OP_MAIN_NEXT_UNDELETED);
+  km_bindkey ("<left>", MENU_PAGER, OP_MAIN_PREV_UNDELETED);
+  km_bindkey ("<home>", MENU_PAGER, OP_PAGER_TOP);
+  km_bindkey ("<end>", MENU_PAGER, OP_PAGER_BOTTOM);
+  km_bindkey ("1", MENU_PAGER, OP_JUMP);
+  km_bindkey ("2", MENU_PAGER, OP_JUMP);
+  km_bindkey ("3", MENU_PAGER, OP_JUMP);
+  km_bindkey ("4", MENU_PAGER, OP_JUMP);
+  km_bindkey ("5", MENU_PAGER, OP_JUMP);
+  km_bindkey ("6", MENU_PAGER, OP_JUMP);
+  km_bindkey ("7", MENU_PAGER, OP_JUMP);
+  km_bindkey ("8", MENU_PAGER, OP_JUMP);
+  km_bindkey ("9", MENU_PAGER, OP_JUMP);
+
+  km_bindkey ("<enter>", MENU_PAGER, OP_NEXT_LINE);
+  
+  km_bindkey ("<return>", MENU_ALIAS, OP_GENERIC_SELECT_ENTRY);
+  km_bindkey ("<enter>",  MENU_ALIAS, OP_GENERIC_SELECT_ENTRY);
+  km_bindkey ("<space>", MENU_ALIAS, OP_TAG);
+
+  km_bindkey ("<enter>", MENU_ATTACH, OP_VIEW_ATTACH);
+  km_bindkey ("<enter>", MENU_COMPOSE, OP_VIEW_ATTACH);
+
+  /* edit-to (default "t") hides generic tag-entry in Compose menu
+     This will bind tag-entry to  "T" in the Compose menu */
+  km_bindkey ("T", MENU_COMPOSE, OP_TAG);
+}
+
+void km_error_key (int menu)
+{
+  char buf[SHORT_STRING];
+  struct keymap_t *key;
+
+  if(!(key = km_find_func(menu, OP_HELP)))
+    key = km_find_func(MENU_GENERIC, OP_HELP);
+  
+  if(!(km_expand_key(buf, sizeof(buf), key)))
+  {
+    mutt_error _("Key is not bound.");
+    return;
+  }
+
+  /* make sure the key is really the help key in this menu */
+  push_string (buf);
+  if (km_dokey (menu) != OP_HELP)
+  {
+    mutt_error _("Key is not bound.");
+    return;
+  }
+
+  mutt_error (_("Key is not bound.  Press '%s' for help."), buf);
+  return;
+}
+
+int mutt_parse_push (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  int r = 0;
+
+  mutt_extract_token (buf, s, M_TOKEN_CONDENSE);
+  if (MoreArgs (s))
+  {
+    strfcpy (err->data, _("push: too many arguments"), err->dsize);
+    r = -1;
+  }
+  else
+    push_string (buf->data);
+  return (r);
+}
+
+/* expects to see: <menu-string> <key-string> */
+char *parse_keymap (int *menu, BUFFER *s, BUFFER *err)
+{
+  BUFFER buf;
+
+  memset (&buf, 0, sizeof (buf));
+
+  /* menu name */
+  mutt_extract_token (&buf, s, 0);
+  if (MoreArgs (s))
+  {
+    if ((*menu = mutt_check_menu (buf.data)) == -1)
+    {
+      snprintf (err->data, err->dsize, _("%s: no such menu"), buf.data);
+    }
+    else
+    {
+      /* key sequence */
+      mutt_extract_token (&buf, s, 0);
+
+      if (!*buf.data)
+      {
+       strfcpy (err->data, _("null key sequence"), err->dsize);
+      }
+      else if (MoreArgs (s))
+       return (buf.data);
+    }
+  }
+  else
+  {
+    strfcpy (err->data, _("too few arguments"), err->dsize);
+  }
+  FREE (&buf.data);
+  return (NULL);
+}
+
+static int
+try_bind (char *key, int menu, char *func, struct binding_t *bindings)
+{
+  int i;
+  
+  for (i = 0; bindings[i].name; i++)
+    if (mutt_strcmp (func, bindings[i].name) == 0)
+    {
+      km_bindkey (key, menu, bindings[i].op);
+      return (0);
+    }
+  return (-1);
+}
+
+struct binding_t *km_get_table (int menu)
+{
+  switch (menu)
+  {
+    case MENU_MAIN:
+      return OpMain;
+    case MENU_GENERIC:
+      return OpGeneric;
+    case MENU_COMPOSE:
+      return OpCompose;
+    case MENU_PAGER:
+      return OpPager;
+    case MENU_POST:
+      return OpPost;
+    case MENU_FOLDER:
+      return OpBrowser;
+    case MENU_ALIAS:
+      return OpAlias;
+    case MENU_ATTACH:
+      return OpAttach;
+    case MENU_EDITOR:
+      return OpEditor;
+    case MENU_QUERY:
+      return OpQuery;
+
+    case MENU_PGP:
+      return (WithCrypto & APPLICATION_PGP)? OpPgp:NULL;
+
+#ifdef MIXMASTER
+    case MENU_MIX:
+      return OpMix;
+#endif
+
+  }
+  return NULL;
+}
+
+/* bind menu-name '<key_sequence>' function-name */
+int mutt_parse_bind (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  struct binding_t *bindings = NULL;
+  char *key;
+  int menu, r = 0;
+
+  if ((key = parse_keymap (&menu, s, err)) == NULL)
+    return (-1);
+
+  /* function to execute */
+  mutt_extract_token (buf, s, 0);
+  if (MoreArgs (s))
+  {
+    strfcpy (err->data, _("bind: too many arguments"), err->dsize);
+    r = -1;
+  }
+  else if (ascii_strcasecmp ("noop", buf->data) == 0)
+    km_bindkey (key, menu, OP_NULL); /* the `unbind' command */
+  else
+  {
+    /* First check the "generic" list of commands */
+    if (menu == MENU_PAGER || menu == MENU_EDITOR || menu == MENU_GENERIC ||
+       try_bind (key, menu, buf->data, OpGeneric) != 0)
+    {
+      /* Now check the menu-specific list of commands (if they exist) */
+      bindings = km_get_table (menu);
+      if (bindings && try_bind (key, menu, buf->data, bindings) != 0)
+      {
+       snprintf (err->data, err->dsize, _("%s: no such function in map"), buf->data);
+       r = -1;
+      }
+    }
+  }
+  FREE (&key);
+  return (r);
+}
+
+/* macro <menu> <key> <macro> <description> */
+int mutt_parse_macro (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  int menu, r = -1;
+  char *seq = NULL;
+  char *key;
+
+  if ((key = parse_keymap (&menu, s, err)) == NULL)
+    return (-1);
+
+  mutt_extract_token (buf, s, M_TOKEN_CONDENSE);
+  /* make sure the macro sequence is not an empty string */
+  if (!*buf->data)
+  {
+    strfcpy (err->data, _("macro: empty key sequence"), err->dsize);
+  }
+  else
+  {
+    if (MoreArgs (s))
+    {
+      seq = safe_strdup (buf->data);
+      mutt_extract_token (buf, s, M_TOKEN_CONDENSE);
+
+      if (MoreArgs (s))
+      {
+       strfcpy (err->data, _("macro: too many arguments"), err->dsize);
+      }
+      else
+      {
+       km_bind (key, menu, OP_MACRO, seq, buf->data);
+       r = 0;
+      }
+
+      FREE (&seq);
+    }
+    else
+    {
+      km_bind (key, menu, OP_MACRO, buf->data, NULL);
+      r = 0;
+    }
+  }
+  FREE (&key);
+  return (r);
+}
+
+/* exec function-name */
+int mutt_parse_exec (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  int ops[128]; 
+  int nops = 0;
+  struct binding_t *bindings = NULL;
+  char *function;
+
+  if (!MoreArgs (s))
+  {
+    strfcpy (err->data, _("exec: no arguments"), err->dsize);
+    return (-1);
+  }
+
+  do
+  {
+    mutt_extract_token (buf, s, 0);
+    function = buf->data;
+
+    if ((bindings = km_get_table (CurrentMenu)) == NULL 
+       && CurrentMenu != MENU_PAGER)
+      bindings = OpGeneric;
+
+    ops[nops] = get_op (bindings, function, mutt_strlen(function));
+    if (ops[nops] == OP_NULL && CurrentMenu != MENU_PAGER)
+      ops[nops] = get_op (OpGeneric, function, mutt_strlen(function));
+
+    if (ops[nops] == OP_NULL)
+    {
+      mutt_flushinp ();
+      mutt_error (_("%s: no such function"), function);
+      return (-1);
+    }
+    nops++;
+  }
+  while(MoreArgs(s) && nops < sizeof(ops)/sizeof(ops[0]));
+
+  while(nops)
+    mutt_ungetch(0, ops[--nops]);
+
+  return 0;
+}
+
+/*
+ * prompts the user to enter a keystroke, and displays the octal value back
+ * to the user.
+ */
+void mutt_what_key (void)
+{
+  int ch;
+
+  mvprintw(LINES-1,0, _("Enter keys (^G to abort): "));
+  do {
+    ch = getch();
+    if (ch != ERR && ch != ctrl ('G'))
+    {
+      mutt_message(_("Char = %s, Octal = %o, Decimal = %d"),
+              km_keyname(ch), ch, ch);
+    }
+  }
+  while (ch != ERR && ch != ctrl ('G'));
+
+  mutt_flushinp();
+}
diff --git a/keymap.h b/keymap.h
new file mode 100644 (file)
index 0000000..a88bbf4
--- /dev/null
+++ b/keymap.h
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 1996-2000,2 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#ifndef KEYMAP_H
+#define KEYMAP_H
+
+#include "mapping.h"
+
+/* maximal length of a key binding sequence used for buffer in km_bindkey */
+#define MAX_SEQ 8
+
+/* type for key storage, the rest of mutt works fine with int type */
+typedef short keycode_t;
+
+void km_bind (char *, int, int, char *, char *);
+void km_bindkey (char *, int, int);
+int km_dokey (int);
+
+/* entry in the keymap tree */
+struct keymap_t
+{
+  char *macro;           /* macro expansion (op == OP_MACRO) */
+  char *descr;           /* description of a macro for the help menu */
+  struct keymap_t *next; /* next key in map */
+  short op;              /* operation to perform */
+  short eq;              /* number of leading keys equal to next entry */
+  short len;             /* length of key sequence (unit: sizeof (keycode_t)) */
+  keycode_t *keys;       /* key sequence */
+};
+
+char *km_keyname (int);
+int km_expand_key (char *, size_t, struct keymap_t *);
+struct keymap_t *km_find_func (int, int);
+void km_init (void);
+void km_error_key (int);
+void mutt_what_key (void);
+
+enum
+{
+  MENU_ALIAS,
+  MENU_ATTACH,
+  MENU_COMPOSE,
+  MENU_EDITOR,
+  MENU_FOLDER,
+  MENU_GENERIC,
+  MENU_MAIN,
+  MENU_PAGER,
+  MENU_POST,
+  MENU_QUERY,
+
+  
+  MENU_PGP,
+
+  MENU_SMIME,
+
+#ifdef MIXMASTER
+  MENU_MIX,
+#endif
+
+
+
+  MENU_MAX
+};
+
+/* the keymap trees (one for each menu) */
+extern struct keymap_t *Keymaps[];
+
+/* dokey() records the last real key pressed  */
+extern int LastKey;
+
+extern struct mapping_t Menus[];
+
+struct binding_t
+{
+  char *name;  /* name of the function */
+  int op;      /* function id number */
+  char *seq;   /* default key binding */
+};
+
+struct binding_t *km_get_table (int menu);
+
+extern struct binding_t OpGeneric[];
+extern struct binding_t OpPost[];
+extern struct binding_t OpMain[];
+extern struct binding_t OpAttach[];
+extern struct binding_t OpPager[];
+extern struct binding_t OpCompose[];
+extern struct binding_t OpBrowser[];
+extern struct binding_t OpEditor[];
+extern struct binding_t OpQuery[];
+extern struct binding_t OpAlias[];
+
+extern struct binding_t OpPgp[];
+
+extern struct binding_t OpSmime[];
+
+#ifdef MIXMASTER
+extern struct binding_t OpMix[];
+#endif
+
+#include "keymap_defs.h"
+
+#endif /* KEYMAP_H */
diff --git a/lib.c b/lib.c
new file mode 100644 (file)
index 0000000..33d5757
--- /dev/null
+++ b/lib.c
@@ -0,0 +1,657 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+/*
+ * This file used to contain some more functions, namely those
+ * which are now in muttlib.c.  They have been removed, so we have
+ * some of our "standard" functions in external programs, too.
+ */
+
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <pwd.h>
+
+#include "lib.h"
+
+void mutt_nocurses_error (const char *fmt, ...)
+{
+  va_list ap;
+
+  va_start (ap, fmt);
+  vfprintf (stderr, fmt, ap);
+  va_end (ap);
+  fputc ('\n', stderr);
+}
+
+void *safe_calloc (size_t nmemb, size_t size)
+{
+  void *p;
+
+  if (!nmemb || !size)
+    return NULL;
+
+  if (((size_t) -1) / nmemb <= size)
+  {
+    mutt_error _("Integer overflow -- can't allocate memory!");
+    sleep (1);
+    mutt_exit (1);
+  }
+  
+  if (!(p = calloc (nmemb, size)))
+  {
+    mutt_error _("Out of memory!");
+    sleep (1);
+    mutt_exit (1);
+  }
+  return p;
+}
+
+void *safe_malloc (size_t siz)
+{
+  void *p;
+
+  if (siz == 0)
+    return 0;
+  if ((p = (void *) malloc (siz)) == 0)        /* __MEM_CHECKED__ */
+  {
+    mutt_error _("Out of memory!");
+    sleep (1);
+    mutt_exit (1);
+  }
+  return (p);
+}
+
+void safe_realloc (void *ptr, size_t siz)
+{
+  void *r;
+  void **p = (void **)ptr;
+
+  if (siz == 0)
+  {
+    if (*p)
+    {
+      free (*p);                       /* __MEM_CHECKED__ */
+      *p = NULL;
+    }
+    return;
+  }
+
+  if (*p)
+    r = (void *) realloc (*p, siz);    /* __MEM_CHECKED__ */
+  else
+  {
+    /* realloc(NULL, nbytes) doesn't seem to work under SunOS 4.1.x  --- __MEM_CHECKED__ */
+    r = (void *) malloc (siz);         /* __MEM_CHECKED__ */
+  }
+
+  if (!r)
+  {
+    mutt_error _("Out of memory!");
+    sleep (1);
+    mutt_exit (1);
+  }
+
+  *p = r;
+}
+
+void safe_free (void *ptr)
+{
+  void **p = (void **)ptr;
+  if (*p)
+  {
+    free (*p);                         /* __MEM_CHECKED__ */
+    *p = 0;
+  }
+}
+
+int safe_fclose (FILE **f)
+{
+  int r = 0;
+  
+  if (*f)
+    r = fclose (*f);
+      
+  *f = NULL;
+  return r;
+}
+
+char *safe_strdup (const char *s)
+{
+  char *p;
+  size_t l;
+
+  if (!s || !*s)
+    return 0;
+  l = strlen (s) + 1;
+  p = (char *)safe_malloc (l);
+  memcpy (p, s, l);
+  return (p);
+}
+
+void mutt_str_replace (char **p, const char *s)
+{
+  FREE (p);
+  *p = safe_strdup (s);
+}
+
+void mutt_str_adjust (char **p)
+{
+  if (!p || !*p) return;
+  safe_realloc (p, strlen (*p) + 1);
+}
+
+/* convert all characters in the string to lowercase */
+char *mutt_strlower (char *s)
+{
+  char *p = s;
+
+  while (*p)
+  {
+    *p = tolower ((unsigned char) *p);
+    p++;
+  }
+
+  return (s);
+}
+
+void mutt_unlink (const char *s)
+{
+  FILE *f;
+  struct stat sb;
+  char buf[2048];
+  
+  if (stat (s, &sb) == 0)
+  {
+    if ((f = fopen (s, "r+")))
+    {
+      unlink (s);
+      memset (buf, 0, sizeof (buf));
+      while (sb.st_size > 0)
+      {
+       fwrite (buf, 1, MIN (sizeof (buf), sb.st_size), f);
+       sb.st_size -= MIN (sizeof (buf), sb.st_size);
+      }
+      fclose (f);
+    }
+  }
+}
+
+int mutt_copy_bytes (FILE *in, FILE *out, size_t size)
+{
+  char buf[2048];
+  size_t chunk;
+
+  while (size > 0)
+  {
+    chunk = (size > sizeof (buf)) ? sizeof (buf) : size;
+    if ((chunk = fread (buf, 1, chunk, in)) < 1)
+      break;
+    if (fwrite (buf, 1, chunk, out) != chunk)
+    {
+      /* dprint (1, (debugfile, "mutt_copy_bytes(): fwrite() returned short byte count\n")); */
+      return (-1);
+    }
+    size -= chunk;
+  }
+
+  return 0;
+}
+
+int mutt_copy_stream (FILE *fin, FILE *fout)
+{
+  size_t l;
+  char buf[LONG_STRING];
+
+  while ((l = fread (buf, 1, sizeof (buf), fin)) > 0)
+  {
+    if (fwrite (buf, 1, l, fout) != l)
+      return (-1);
+  }
+
+  return 0;
+}
+
+static int 
+compare_stat (struct stat *osb, struct stat *nsb)
+{
+  if (osb->st_dev != nsb->st_dev || osb->st_ino != nsb->st_ino ||
+      osb->st_rdev != nsb->st_rdev)
+  {
+    return -1;
+  }
+
+  return 0;
+}
+
+int safe_symlink(const char *oldpath, const char *newpath)
+{
+  struct stat osb, nsb;
+
+  if(!oldpath || !newpath)
+    return -1;
+  
+  if(unlink(newpath) == -1 && errno != ENOENT)
+    return -1;
+  
+  if (oldpath[0] == '/')
+  {
+    if (symlink (oldpath, newpath) == -1)
+      return -1;
+  }
+  else
+  {
+    char abs_oldpath[_POSIX_PATH_MAX];
+
+    if ((getcwd (abs_oldpath, sizeof abs_oldpath) == NULL) ||
+       (strlen (abs_oldpath) + 1 + strlen (oldpath) + 1 > sizeof abs_oldpath))
+    return -1;
+  
+    strcat (abs_oldpath, "/");         /* __STRCAT_CHECKED__ */
+    strcat (abs_oldpath, oldpath);     /* __STRCAT_CHECKED__ */
+    if (symlink (abs_oldpath, newpath) == -1)
+      return -1;
+  }
+
+  if(stat(oldpath, &osb) == -1 || stat(newpath, &nsb) == -1
+     || compare_stat(&osb, &nsb) == -1)
+  {
+    unlink(newpath);
+    return -1;
+  }
+  
+  return 0;
+}
+
+/* 
+ * This function is supposed to do nfs-safe renaming of files.
+ * 
+ * Warning: We don't check whether src and target are equal.
+ */
+
+int safe_rename (const char *src, const char *target)
+{
+  struct stat ssb, tsb;
+
+  if (!src || !target)
+    return -1;
+
+  if (link (src, target) != 0)
+  {
+
+    /*
+     * Coda does not allow cross-directory links, but tells
+     * us it's a cross-filesystem linking attempt.
+     * 
+     * However, the Coda rename call is allegedly safe to use.
+     * 
+     * With other file systems, rename should just fail when 
+     * the files reside on different file systems, so it's safe
+     * to try it here.
+     *
+     */
+
+    if (errno == EXDEV)
+      return rename (src, target);
+    
+    return -1;
+  }
+
+  /*
+   * Stat both links and check if they are equal.
+   */
+  
+  if (stat (src, &ssb) == -1)
+  {
+    return -1;
+  }
+  
+  if (stat (target, &tsb) == -1)
+  {
+    return -1;
+  }
+
+  /* 
+   * pretend that the link failed because the target file
+   * did already exist.
+   */
+
+  if (compare_stat (&ssb, &tsb) == -1)
+  {
+    errno = EEXIST;
+    return -1;
+  }
+
+  /*
+   * Unlink the original link.  Should we really ignore the return
+   * value here? XXX
+   */
+
+  unlink (src);
+
+  return 0;
+}
+
+int safe_open (const char *path, int flags)
+{
+  struct stat osb, nsb;
+  int fd;
+
+  if ((fd = open (path, flags, 0600)) < 0)
+    return fd;
+
+  /* make sure the file is not symlink */
+  if (lstat (path, &osb) < 0 || fstat (fd, &nsb) < 0 ||
+      compare_stat(&osb, &nsb) == -1)
+  {
+/*    dprint (1, (debugfile, "safe_open(): %s is a symlink!\n", path)); */
+    close (fd);
+    return (-1);
+  }
+
+  return (fd);
+}
+
+/* when opening files for writing, make sure the file doesn't already exist
+ * to avoid race conditions.
+ */
+FILE *safe_fopen (const char *path, const char *mode)
+{
+  if (mode[0] == 'w')
+  {
+    int fd;
+    int flags = O_CREAT | O_EXCL;
+
+#ifdef O_NOFOLLOW
+    flags |= O_NOFOLLOW;
+#endif
+
+    if (mode[1] == '+')
+      flags |= O_RDWR;
+    else
+      flags |= O_WRONLY;
+
+    if ((fd = safe_open (path, flags)) < 0)
+      return (NULL);
+
+    return (fdopen (fd, mode));
+  }
+  else
+    return (fopen (path, mode));
+}
+
+static char safe_chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+@{}._-:%/";
+
+void mutt_sanitize_filename (char *f, short slash)
+{
+  if (!f) return;
+
+  for (; *f; f++)
+  {
+    if ((slash && *f == '/') || !strchr (safe_chars, *f))
+      *f = '_';
+  }
+}
+
+/* these characters must be escaped in regular expressions */
+
+static char rx_special_chars[] = "^.[$()|*+?{\\";
+
+int mutt_rx_sanitize_string (char *dest, size_t destlen, const char *src)
+{
+  while (*src && --destlen > 2)
+  {
+    if (strchr (rx_special_chars, *src))
+    {
+      *dest++ = '\\';
+      destlen--;
+    }
+    *dest++ = *src++;
+  }
+  
+  *dest = '\0';
+  
+  if (*src)
+    return -1;
+  else
+    return 0;
+}
+
+/* Read a line from ``fp'' into the dynamically allocated ``s'',
+ * increasing ``s'' if necessary. The ending "\n" or "\r\n" is removed.
+ * If a line ends with "\", this char and the linefeed is removed,
+ * and the next line is read too.
+ */
+char *mutt_read_line (char *s, size_t *size, FILE *fp, int *line)
+{
+  size_t offset = 0;
+  char *ch;
+
+  if (!s)
+  {
+    s = safe_malloc (STRING);
+    *size = STRING;
+  }
+
+  FOREVER
+  {
+    if (fgets (s + offset, *size - offset, fp) == NULL)
+    {
+      FREE (&s);
+      return NULL;
+    }
+    if ((ch = strchr (s + offset, '\n')) != NULL)
+    {
+      (*line)++;
+      *ch = 0;
+      if (ch > s && *(ch - 1) == '\r')
+       *--ch = 0;
+      if (ch == s || *(ch - 1) != '\\')
+       return s;
+      offset = ch - s - 1;
+    }
+    else
+    {
+      int c;
+      c = getc (fp); /* This is kind of a hack. We want to know if the
+                        char at the current point in the input stream is EOF.
+                        feof() will only tell us if we've already hit EOF, not
+                        if the next character is EOF. So, we need to read in
+                        the next character and manually check if it is EOF. */
+      if (c == EOF)
+      {
+        /* The last line of fp isn't \n terminated */
+        (*line)++;
+        return s;
+      }
+      else
+      {
+        ungetc (c, fp); /* undo our dammage */
+        /* There wasn't room for the line -- increase ``s'' */
+        offset = *size - 1; /* overwrite the terminating 0 */
+        *size += STRING;
+        safe_realloc (&s, *size);
+      }
+    }
+  }
+}
+
+char *
+mutt_substrcpy (char *dest, const char *beg, const char *end, size_t destlen)
+{
+  size_t len;
+
+  len = end - beg;
+  if (len > destlen - 1)
+    len = destlen - 1;
+  memcpy (dest, beg, len);
+  dest[len] = 0;
+  return dest;
+}
+
+char *mutt_substrdup (const char *begin, const char *end)
+{
+  size_t len;
+  char *p;
+
+  if (end)
+    len = end - begin;
+  else
+    len = strlen (begin);
+
+  p = safe_malloc (len + 1);
+  memcpy (p, begin, len);
+  p[len] = 0;
+  return p;
+}
+
+/* prepare a file name to survive the shell's quoting rules.
+ * From the Unix programming FAQ by way of Liviu.
+ */
+
+size_t mutt_quote_filename (char *d, size_t l, const char *f)
+{
+  size_t i, j = 0;
+
+  if(!f) 
+  {
+    *d = '\0';
+    return 0;
+  }
+
+  /* leave some space for the trailing characters. */
+  l -= 6;
+  
+  d[j++] = '\'';
+  
+  for(i = 0; j < l && f[i]; i++)
+  {
+    if(f[i] == '\'' || f[i] == '`')
+    {
+      d[j++] = '\'';
+      d[j++] = '\\';
+      d[j++] = f[i];
+      d[j++] = '\'';
+    }
+    else
+      d[j++] = f[i];
+  }
+  
+  d[j++] = '\'';
+  d[j]   = '\0';
+  
+  return j;
+}
+
+/* NULL-pointer aware string comparison functions */
+
+int mutt_strcmp(const char *a, const char *b)
+{
+  return strcmp(NONULL(a), NONULL(b));
+}
+
+int mutt_strcasecmp(const char *a, const char *b)
+{
+  return strcasecmp(NONULL(a), NONULL(b));
+}
+
+int mutt_strncmp(const char *a, const char *b, size_t l)
+{
+  return strncmp(NONULL(a), NONULL(b), l);
+}
+
+int mutt_strncasecmp(const char *a, const char *b, size_t l)
+{
+  return strncasecmp(NONULL(a), NONULL(b), l);
+}
+
+size_t mutt_strlen(const char *a)
+{
+  return a ? strlen (a) : 0;
+}
+
+int mutt_strcoll(const char *a, const char *b)
+{
+  return strcoll(NONULL(a), NONULL(b));
+}
+
+const char *mutt_stristr (const char *haystack, const char *needle)
+{
+  const char *p, *q;
+
+  if (!haystack)
+    return NULL;
+  if (!needle)
+    return (haystack);
+
+  while (*(p = haystack))
+  {
+    for (q = needle;
+         *p && *q &&
+           tolower ((unsigned char) *p) == tolower ((unsigned char) *q);
+         p++, q++)
+      ;
+    if (!*q)
+      return (haystack);
+    haystack++;
+  }
+  return NULL;
+}
+
+char *mutt_skip_whitespace (char *p)
+{
+  SKIPWS (p);
+  return p;
+}
+
+void mutt_remove_trailing_ws (char *s)
+{
+  char *p;
+  
+  for (p = s + mutt_strlen (s) - 1 ; p >= s && ISSPACE (*p) ; p--)
+    *p = 0;
+}
+
+char *mutt_concat_path (char *d, const char *dir, const char *fname, size_t l)
+{
+  const char *fmt = "%s/%s";
+  
+  if (!*fname || (*dir && dir[strlen(dir)-1] == '/'))
+    fmt = "%s%s";
+  
+  snprintf (d, l, fmt, dir, fname);
+  return d;
+}
+
+const char *mutt_basename (const char *f)
+{
+  const char *p = strrchr (f, '/');
+  if (p)
+    return p + 1;
+  else
+    return f;
+}
diff --git a/lib.h b/lib.h
new file mode 100644 (file)
index 0000000..2bda25d
--- /dev/null
+++ b/lib.h
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+/* mutt functions which are generally useful. */
+
+#ifndef _LIB_H
+# define _LIB_H
+
+# include "config.h"
+
+# include <stdio.h>
+# include <string.h>
+# ifdef HAVE_UNISTD_H
+#  include <unistd.h> /* needed for SEEK_SET */
+# endif
+# include <sys/types.h>
+# include <sys/stat.h>
+# include <time.h>
+# include <limits.h>
+# include <stdarg.h>
+# include <signal.h>
+
+# ifndef _POSIX_PATH_MAX
+#  include <posix1_lim.h>
+# endif
+
+# ifdef ENABLE_NLS
+#  include <libintl.h>
+# define _(a) (gettext (a))
+#  ifdef gettext_noop
+#   define N_(a) gettext_noop (a)
+#  else
+#   define N_(a) (a)
+#  endif
+# else
+#  define _(a) (a)
+#  define N_(a) a
+# endif
+
+# define TRUE 1
+# define FALSE 0
+
+# define HUGE_STRING   5120
+# define LONG_STRING     1024
+# define STRING          256
+# define SHORT_STRING    128
+
+/*
+ * Create a format string to be used with scanf.
+ * To use it, write, for instance, MUTT_FORMAT(HUGE_STRING).
+ * 
+ * See K&R 2nd ed, p. 231 for an explanation.
+ */
+# define _MUTT_FORMAT_2(a,b)   "%" a  b
+# define _MUTT_FORMAT_1(a, b)  _MUTT_FORMAT_2(#a, b)
+# define MUTT_FORMAT(a)                _MUTT_FORMAT_1(a, "s")
+# define MUTT_FORMAT2(a,b)     _MUTT_FORMAT_1(a, b)
+
+
+# define FREE(x) safe_free(x)
+# define NONULL(x) x?x:""
+# define ISSPACE(c) isspace((unsigned char)c)
+# define strfcpy(A,B,C) strncpy(A,B,C), *(A+(C)-1)=0
+
+# undef MAX
+# undef MIN
+# define MAX(a,b) ((a) < (b) ? (b) : (a))
+# define MIN(a,b) ((a) < (b) ? (a) : (b))
+
+
+#define FOREVER while (1)
+
+/* this macro must check for *c == 0 since isspace(0) has unreliable behavior
+   on some systems */
+# define SKIPWS(c) while (*(c) && isspace ((unsigned char) *(c))) c++;
+
+/*
+ * These functions aren't defined in lib.c, but
+ * they are used there.
+ *
+ * A non-mutt "implementation" (ahem) can be found in extlib.c.
+ */
+
+# ifndef _EXTLIB_C
+extern void (*mutt_error) (const char *, ...);
+# endif
+void mutt_exit (int);
+
+/* The actual library functions. */
+
+FILE *safe_fopen (const char *, const char *);
+
+char *mutt_concat_path (char *, const char *, const char *, size_t);
+char *mutt_read_line (char *, size_t *, FILE *, int *);
+char *mutt_skip_whitespace (char *);
+char *mutt_strlower (char *);
+char *mutt_substrcpy (char *, const char *, const char *, size_t);
+char *mutt_substrdup (const char *, const char *);
+char *safe_strdup (const char *);
+
+const char *mutt_stristr (const char *, const char *);
+const char *mutt_basename (const char *);
+
+int mutt_copy_stream (FILE *, FILE *);
+int mutt_copy_bytes (FILE *, FILE *, size_t);
+int mutt_rx_sanitize_string (char *, size_t, const char *);
+int mutt_strcasecmp (const char *, const char *);
+int mutt_strcmp (const char *, const char *);
+int mutt_strncasecmp (const char *, const char *, size_t);
+int mutt_strncmp (const char *, const char *, size_t);
+int mutt_strcoll (const char *, const char *);
+int safe_open (const char *, int);
+int safe_symlink (const char *, const char *);
+int safe_rename (const char *, const char *);
+int safe_fclose (FILE **);
+
+size_t mutt_quote_filename (char *, size_t, const char *);
+size_t mutt_strlen (const char *);
+
+void *safe_calloc (size_t, size_t);
+void *safe_malloc (size_t);
+void mutt_nocurses_error (const char *, ...);
+void mutt_remove_trailing_ws (char *);
+void mutt_sanitize_filename (char *, short);
+void mutt_str_replace (char **p, const char *s);
+void mutt_str_adjust (char **p);
+void mutt_unlink (const char *);
+void safe_free (void *);
+void safe_realloc (void *, size_t);
+
+#endif
diff --git a/m4/Makefile.am b/m4/Makefile.am
new file mode 100644 (file)
index 0000000..50663ec
--- /dev/null
@@ -0,0 +1,25 @@
+## Process this file with automake to produce Makefile.in -*-Makefile-*-
+
+##m4-files-begin
+EXTRA_DIST = README Makefile.am.in \
+codeset.m4 \
+curslib.m4 \
+funcdecl.m4 \
+gettext.m4 \
+glibc21.m4 \
+gssapi.m4 \
+iconv.m4 \
+lcmessage.m4 \
+progtest.m4
+##m4-files-end
+
+Makefile.am: Makefile.am.in
+       rm -f $@ $@t
+       sed -n '1,/^##m4-files-begin/p' Makefile.am.in > $@t
+       ( (echo EXTRA_DIST = README Makefile.am.in | tr '\012' @); \
+         (echo *.m4|tr ' ' @) ) \
+         |sed 's/@$$/%/;s/@/ \\@/g' |tr @% '\012\012' \
+         >> $@t
+       sed -n '/^##m4-files-end/,$$p' Makefile.am.in >> $@t
+       chmod a-w $@t
+       mv $@t $@
diff --git a/m4/Makefile.am.in b/m4/Makefile.am.in
new file mode 100644 (file)
index 0000000..d4802c3
--- /dev/null
@@ -0,0 +1,15 @@
+## Process this file with automake to produce Makefile.in -*-Makefile-*-
+
+##m4-files-begin
+##m4-files-end
+
+Makefile.am: Makefile.am.in
+       rm -f $@ $@t
+       sed -n '1,/^##m4-files-begin/p' Makefile.am.in > $@t
+       ( (echo EXTRA_DIST = README Makefile.am.in | tr '\012' @); \
+         (echo *.m4|tr ' ' @) ) \
+         |sed 's/@$$/%/;s/@/ \\@/g' |tr @% '\012\012' \
+         >> $@t
+       sed -n '/^##m4-files-end/,$$p' Makefile.am.in >> $@t
+       chmod a-w $@t
+       mv $@t $@
diff --git a/m4/Makefile.in b/m4/Makefile.in
new file mode 100644 (file)
index 0000000..2026ab3
--- /dev/null
@@ -0,0 +1,228 @@
+# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
+AR = @AR@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CPP = @CPP@
+DATADIRNAME = @DATADIRNAME@
+DBX = @DBX@
+DEBUGGER = @DEBUGGER@
+DOTLOCK_GROUP = @DOTLOCK_GROUP@
+DOTLOCK_PERMISSION = @DOTLOCK_PERMISSION@
+DOTLOCK_TARGET = @DOTLOCK_TARGET@
+GDB = @GDB@
+GENCAT = @GENCAT@
+GLIBC21 = @GLIBC21@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+HAVE_LIB = @HAVE_LIB@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+ISPELL = @ISPELL@
+KRB5CFGPATH = @KRB5CFGPATH@
+LIB = @LIB@
+LIBICONV = @LIBICONV@
+LIBIMAP = @LIBIMAP@
+LIBIMAPDEPS = @LIBIMAPDEPS@
+LTLIB = @LTLIB@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MUTTLIBS = @MUTTLIBS@
+MUTT_LIB_OBJECTS = @MUTT_LIB_OBJECTS@
+OPS = @OPS@
+PACKAGE = @PACKAGE@
+PGPAUX_TARGET = @PGPAUX_TARGET@
+POFILES = @POFILES@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SDB = @SDB@
+SENDMAIL = @SENDMAIL@
+SMIMEAUX_TARGET = @SMIMEAUX_TARGET@
+SUBVERSION = @SUBVERSION@
+U = @U@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+docdir = @docdir@
+mutt_libesmtp_config_path = @mutt_libesmtp_config_path@
+
+EXTRA_DIST = README Makefile.am.in codeset.m4 curslib.m4 funcdecl.m4 gettext.m4 glibc21.m4 gssapi.m4 iconv.m4 lcmessage.m4 progtest.m4
+
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../config.h
+CONFIG_CLEAN_FILES = 
+DIST_COMMON =  README Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
+       cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps m4/Makefile
+
+Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
+       cd $(top_builddir) \
+         && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = m4
+
+distdir: $(DISTFILES)
+       @for file in $(DISTFILES); do \
+         d=$(srcdir); \
+         if test -d $$d/$$file; then \
+           cp -pr $$d/$$file $(distdir)/$$file; \
+         else \
+           test -f $(distdir)/$$file \
+           || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+           || cp -p $$d/$$file $(distdir)/$$file || :; \
+         fi; \
+       done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am:
+uninstall: uninstall-am
+all-am: Makefile
+all-redirect: all-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -rm -f Makefile $(CONFIG_CLEAN_FILES)
+       -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am:  mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am:  clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am:  distclean-generic clean-am
+
+distclean: distclean-am
+
+maintainer-clean-am:  maintainer-clean-generic distclean-am
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-am install-data install-am install uninstall-am uninstall \
+all-redirect all-am all installdirs mostlyclean-generic \
+distclean-generic clean-generic maintainer-clean-generic clean \
+mostlyclean distclean maintainer-clean
+
+
+Makefile.am: Makefile.am.in
+       rm -f $@ $@t
+       sed -n '1,/^##m4-files-begin/p' Makefile.am.in > $@t
+       ( (echo EXTRA_DIST = README Makefile.am.in | tr '\012' @); \
+         (echo *.m4|tr ' ' @) ) \
+         |sed 's/@$$/%/;s/@/ \\@/g' |tr @% '\012\012' \
+         >> $@t
+       sed -n '/^##m4-files-end/,$$p' Makefile.am.in >> $@t
+       chmod a-w $@t
+       mv $@t $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/m4/README b/m4/README
new file mode 100644 (file)
index 0000000..5e9b3a8
--- /dev/null
+++ b/m4/README
@@ -0,0 +1,8 @@
+These files are used by a program called aclocal (part of the GNU automake
+package).  aclocal uses these files to create aclocal.m4 which is in turn
+used by autoconf to create the configure script at the the top level in
+this distribution.
+
+The Makefile.am file in this directory is automatically generated
+from the template file, Makefile.am.in.
+
diff --git a/m4/codeset.m4 b/m4/codeset.m4
new file mode 100644 (file)
index 0000000..1669694
--- /dev/null
@@ -0,0 +1,17 @@
+#serial AM1
+
+dnl From Bruno Haible.
+
+AC_DEFUN([MUTT_AM_LANGINFO_CODESET],
+[
+  AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
+    [AC_TRY_LINK([#include <langinfo.h>],
+      [char* cs = nl_langinfo(CODESET);],
+      am_cv_langinfo_codeset=yes,
+      am_cv_langinfo_codeset=no)
+    ])
+  if test $am_cv_langinfo_codeset = yes; then
+    AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
+      [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
+  fi
+])
diff --git a/m4/curslib.m4 b/m4/curslib.m4
new file mode 100644 (file)
index 0000000..5d443ec
--- /dev/null
@@ -0,0 +1,83 @@
+dnl ---------------------------------------------------------------------------
+dnl Look for the curses libraries.  Older curses implementations may require
+dnl termcap/termlib to be linked as well.
+AC_DEFUN([CF_CURSES_LIBS],[
+AC_CHECK_FUNC(initscr,,[
+case $host_os in #(vi
+freebsd*) #(vi
+       AC_CHECK_LIB(mytinfo,tgoto,[LIBS="-lmytinfo $LIBS"])
+       ;;
+hpux10.*|hpux11.*)
+       AC_CHECK_LIB(cur_colr,initscr,[
+               LIBS="-lcur_colr $LIBS"
+               CFLAGS="-I/usr/include/curses_colr $CFLAGS"
+               ac_cv_func_initscr=yes
+               ],[
+       AC_CHECK_LIB(Hcurses,initscr,[
+               # HP's header uses __HP_CURSES, but user claims _HP_CURSES.
+               LIBS="-lHcurses $LIBS"
+               CFLAGS="-D__HP_CURSES -D_HP_CURSES $CFLAGS"
+               ac_cv_func_initscr=yes
+               ])])
+       ;;
+linux*) # Suse Linux does not follow /usr/lib convention
+       LIBS="$LIBS -L/lib"
+       ;;
+esac
+
+if test ".$With5lib" != ".no" ; then
+if test -d /usr/5lib ; then
+       # SunOS 3.x or 4.x
+       CPPFLAGS="$CPPFLAGS -I/usr/5include"
+       LIBS="$LIBS -L/usr/5lib"
+fi
+fi
+
+if test ".$ac_cv_func_initscr" != .yes ; then
+       cf_save_LIBS="$LIBS"
+       cf_term_lib=""
+       cf_curs_lib=""
+
+       # Check for library containing tgoto.  Do this before curses library
+       # because it may be needed to link the test-case for initscr.
+       AC_CHECK_FUNC(tgoto,[cf_term_lib=predefined],[
+               for cf_term_lib in termcap termlib unknown
+               do
+                       AC_CHECK_LIB($cf_term_lib,tgoto,[break])
+               done
+       ])
+
+       # Check for library containing initscr
+       test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS"
+       for cf_curs_lib in cursesX curses ncurses xcurses jcurses unknown
+       do
+               AC_CHECK_LIB($cf_curs_lib,initscr,[break])
+       done
+       test $cf_curs_lib = unknown && AC_ERROR(no curses library found)
+
+       LIBS="-l$cf_curs_lib $cf_save_LIBS"
+       if test "$cf_term_lib" = unknown ; then
+               AC_MSG_CHECKING(if we can link with $cf_curs_lib library)
+               AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>],
+                       [initscr()],
+                       [cf_result=yes],
+                       [cf_result=no])
+               AC_MSG_RESULT($cf_result)
+               test $cf_result = no && AC_ERROR(Cannot link curses library)
+       elif test "$cf_term_lib" != predefined ; then
+               AC_MSG_CHECKING(if we need both $cf_curs_lib and $cf_term_lib libraries)
+               AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>],
+                       [initscr(); tgoto((char *)0, 0, 0);],
+                       [cf_result=no],
+                       [
+                       LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS"
+                       AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>],
+                               [initscr()],
+                               [cf_result=yes],
+                               [cf_result=error])
+                       ])
+               AC_MSG_RESULT($cf_result)
+       fi
+fi
+
+])])
diff --git a/m4/funcdecl.m4 b/m4/funcdecl.m4
new file mode 100644 (file)
index 0000000..f46be2e
--- /dev/null
@@ -0,0 +1,62 @@
+dnl ---------------------------------------------------------------------------
+dnl Check if a function is declared by including a set of include files.
+dnl Invoke the corresponding actions according to whether it is found or not.
+dnl
+dnl Gcc (unlike other compilers) will only warn about the miscast assignment
+dnl in the first test, but most compilers will oblige with an error in the
+dnl second test.
+dnl
+dnl CF_CHECK_FUNCDECL(INCLUDES, FUNCTION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+AC_DEFUN([CF_CHECK_FUNCDECL],
+[
+AC_MSG_CHECKING([for $2 declaration])
+AC_CACHE_VAL(ac_cv_func_decl_$2,
+[AC_TRY_COMPILE([$1],
+[#ifndef ${ac_func}
+extern int     ${ac_func}();
+#endif],[
+AC_TRY_COMPILE([$1],
+[#ifndef ${ac_func}
+int    (*p)() = ${ac_func};
+#endif],[
+eval "ac_cv_func_decl_$2=yes"],[
+eval "ac_cv_func_decl_$2=no"])],[
+eval "ac_cv_func_decl_$2=yes"])])
+if eval "test \"`echo '$ac_cv_func_'decl_$2`\" = yes"; then
+  AC_MSG_RESULT(yes)
+  ifelse([$3], , :, [$3])
+else
+  AC_MSG_RESULT(no)
+ifelse([$4], , , [$4
+])dnl
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Check if functions are declared by including a set of include files.
+dnl and define DECL_XXX if not.
+dnl
+dnl CF_CHECK_FUNCDECLS(INCLUDES, FUNCTION... [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+AC_DEFUN([CF_CHECK_FUNCDECLS],
+[for ac_func in $2
+do
+CF_CHECK_FUNCDECL([$1], $ac_func,
+[
+  CF_UPPER(ac_tr_func,HAVE_$ac_func)
+  AC_DEFINE_UNQUOTED($ac_tr_func) $3],
+[$4])dnl
+dnl [$3],
+dnl [
+dnl   CF_UPPER(ac_tr_func,DECL_$ac_func)
+dnl   AC_DEFINE_UNQUOTED($ac_tr_func) $4])dnl
+done
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Make an uppercase version of a variable
+dnl $1=uppercase($2)
+AC_DEFUN([CF_UPPER],
+[
+changequote(,)dnl
+$1=`echo $2 | tr '[a-z]' '[A-Z]'`
+changequote([,])dnl
+])dnl
+dnl ---------------------------------------------------------------------------
diff --git a/m4/gettext.m4 b/m4/gettext.m4
new file mode 100644 (file)
index 0000000..4e2c4ec
--- /dev/null
@@ -0,0 +1,376 @@
+# Macro to add for using GNU gettext.
+# Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+#
+# Slightly modified by Thomas Roessler <roessler@does-not-exist.org>
+# Updated to gettext-0.10.38 by Edmund Grimley Evans <edmundo@rano.org>
+# Updated to gettext-0.10.40 by Andrew W. Nosenko <awn@bcs.zp.ua>
+#
+
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public
+# License or the GNU Library General Public License but which still want
+# to provide support for the GNU gettext functionality.
+# Please note that the actual code of the GNU gettext library is covered
+# by the GNU Library General Public License, and the rest of the GNU
+# gettext package package is covered by the GNU General Public License.
+# They are *not* in the public domain.
+
+# serial 10
+
+dnl Usage: MUTT_AM_WITH_NLS([TOOLSYMBOL], [NEEDSYMBOL], [LIBDIR]).
+dnl If TOOLSYMBOL is specified and is 'use-libtool', then a libtool library
+dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl    depending on --{enable,disable}-{shared,static} and on the presence of
+dnl    AM-DISABLE-SHARED). Otherwise, a static library
+dnl    $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl    implementations (in libc or libintl) without the ngettext() function
+dnl    will be ignored.
+dnl LIBDIR is used to find the intl libraries.  If empty,
+dnl    the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl    and used.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl    Catalog format: none
+dnl    Catalog extension: none
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([MUTT_AM_WITH_NLS],
+  [AC_MSG_CHECKING([whether NLS is requested])
+    dnl Default is enabled NLS
+    AC_ARG_ENABLE(nls,
+      [  --disable-nls              Do not use Native Language Support],
+      USE_NLS=$enableval, USE_NLS=yes)
+    AC_MSG_RESULT($USE_NLS)
+    AC_SUBST(USE_NLS)
+
+    BUILD_INCLUDED_LIBINTL=no
+    USE_INCLUDED_LIBINTL=no
+    INTLLIBS=
+
+    dnl If we use NLS figure out what method
+    if test "$USE_NLS" = "yes"; then
+      AC_DEFINE(ENABLE_NLS, 1,
+        [Define to 1 if translation of program messages to the user's native language
+   is requested.])
+      AC_MSG_CHECKING([whether included gettext is requested])
+      AC_ARG_WITH(included-gettext,
+        [  --with-included-gettext    Use the GNU gettext library included here],
+        nls_cv_force_use_gnu_gettext=$withval,
+        nls_cv_force_use_gnu_gettext=no)
+      AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
+
+      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+        dnl User does not insist on using GNU NLS library.  Figure out what
+        dnl to use.  If GNU gettext is available we use this.  Else we have
+        dnl to fall back to GNU NLS library.
+       CATOBJEXT=NONE
+
+        dnl Add a version number to the cache macros.
+        define(gt_cv_func_gnugettext_libc, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libc])
+        define(gt_cv_func_gnugettext_libintl, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libintl])
+
+       AC_CHECK_HEADER(libintl.h,
+         [AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
+           [AC_TRY_LINK([#include <libintl.h>
+extern int _nl_msg_cat_cntr;],
+              [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
+              gt_cv_func_gnugettext_libc=yes,
+              gt_cv_func_gnugettext_libc=no)])
+
+          if test "$gt_cv_func_gnugettext_libc" != "yes"; then
+            AC_CACHE_CHECK([for GNU gettext in libintl],
+              gt_cv_func_gnugettext_libintl,
+              [gt_save_LIBS="$LIBS"
+               LIBS="$LIBS -lintl $LIBICONV"
+               AC_TRY_LINK([#include <libintl.h>
+extern int _nl_msg_cat_cntr;],
+                 [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
+                 gt_cv_func_gnugettext_libintl=yes,
+                 gt_cv_func_gnugettext_libintl=no)
+               LIBS="$gt_save_LIBS"])
+          fi
+
+          dnl If an already present or preinstalled GNU gettext() is found,
+          dnl use it.  But if this macro is used in GNU gettext, and GNU
+          dnl gettext is already preinstalled in libintl, we update this
+          dnl libintl.  (Cf. the install rule in intl/Makefile.in.)
+          if test "$gt_cv_func_gnugettext_libc" = "yes" \
+             || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
+                  && test "$PACKAGE" != gettext; }; then
+            AC_DEFINE(HAVE_GETTEXT, 1,
+               [Define if the GNU gettext() function is already present or preinstalled.])
+
+            if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
+              dnl If iconv() is in a separate libiconv library, then anyone
+              dnl linking with libintl{.a,.so} also needs to link with
+              dnl libiconv.
+              INTLLIBS="-lintl $LIBICONV"
+            fi
+
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $INTLLIBS"
+            AC_CHECK_FUNCS(dcgettext)
+            LIBS="$gt_save_LIBS"
+
+            dnl Search for GNU msgfmt in the PATH.
+            MUTT_AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+              [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
+            AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+
+            dnl Search for GNU xgettext in the PATH.
+            MUTT_AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+              [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
+
+            CATOBJEXT=.gmo
+          fi
+       ])
+
+        if test "$CATOBJEXT" = "NONE"; then
+         dnl GNU gettext is not found in the C library.
+         dnl Fall back on GNU gettext library.
+         nls_cv_use_gnu_gettext=yes
+        fi
+      fi
+
+      if test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions used to generate GNU NLS library.
+        INTLOBJS="\$(GETTOBJS)"
+        MUTT_AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+         [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
+        AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+        MUTT_AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+         [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
+        AC_SUBST(MSGFMT)
+       BUILD_INCLUDED_LIBINTL=yes
+       USE_INCLUDED_LIBINTL=yes
+        CATOBJEXT=.gmo
+       INTLLIBS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a $LIBICONV"
+       LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+      fi
+
+      dnl This could go away some day; the MUTT_PATH_PROG_WITH_TEST already does it.
+      dnl Test whether we really found GNU msgfmt.
+      if test "$GMSGFMT" != ":"; then
+       dnl If it is no GNU msgfmt we define it as : so that the
+       dnl Makefiles still can work.
+       if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then
+         : ;
+       else
+         AC_MSG_RESULT(
+           [found msgfmt program is not GNU msgfmt; ignore it])
+         GMSGFMT=":"
+       fi
+      fi
+
+      dnl This could go away some day; the MUTT_PATH_PROG_WITH_TEST already does it.
+      dnl Test whether we really found GNU xgettext.
+      if test "$XGETTEXT" != ":"; then
+       dnl If it is no GNU xgettext we define it as : so that the
+       dnl Makefiles still can work.
+       if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then
+         : ;
+       else
+         AC_MSG_RESULT(
+           [found xgettext program is not GNU xgettext; ignore it])
+         XGETTEXT=":"
+       fi
+      fi
+
+      dnl We need to process the po/ directory.
+      POSUB=po
+    fi
+    AC_OUTPUT_COMMANDS(
+     [for ac_file in $CONFIG_FILES; do
+        # Support "outfile[:infile[:infile...]]"
+        case "$ac_file" in
+          *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+        esac
+        # PO directories have a Makefile.in generated from Makefile.in.in.
+        case "$ac_file" in */Makefile.in)
+          # Adjust a relative srcdir.
+          ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+          ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+          ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+          # In autoconf-2.13 it is called $ac_given_srcdir.
+          # In autoconf-2.50 it is called $srcdir.
+          test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+          case "$ac_given_srcdir" in
+            .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+            /*) top_srcdir="$ac_given_srcdir" ;;
+            *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+          esac
+          if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+            rm -f "$ac_dir/POTFILES"
+            test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+            sed -e "/^#/d" -e "/^[     ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES"
+            test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+            sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          fi
+          ;;
+        esac
+      done])
+
+
+    dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+    dnl to 'yes' because some of the testsuite requires it.
+    if test "$PACKAGE" = gettext; then
+      BUILD_INCLUDED_LIBINTL=yes
+    fi
+
+    dnl intl/plural.c is generated from intl/plural.y. It requires bison,
+    dnl because plural.y uses bison specific features. It requires at least
+    dnl bison-1.26 because earlier versions generate a plural.c that doesn't
+    dnl compile.
+    dnl bison is only needed for the maintainer (who touches plural.y). But in
+    dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
+    dnl the rule in general Makefile. Now, some people carelessly touch the
+    dnl files or have a broken "make" program, hence the plural.c rule will
+    dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
+    dnl present or too old.
+    AC_CHECK_PROGS([INTLBISON], [bison])
+    if test -z "$INTLBISON"; then
+      ac_verc_fail=yes
+    else
+      dnl Found it, now check the version.
+      AC_MSG_CHECKING([version of bison])
+changequote(<<,>>)dnl
+      ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+      case $ac_prog_version in
+        '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+        1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+changequote([,])dnl
+           ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+        *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+      esac
+      AC_MSG_RESULT([$ac_prog_version])
+    fi
+    if test $ac_verc_fail = yes; then
+      INTLBISON=:
+    fi
+
+    dnl These rules are solely for the distribution goal.  While doing this
+    dnl we only have to keep exactly one list of the available catalogs
+    dnl in configure.in.
+    for lang in $ALL_LINGUAS; do
+      GMOFILES="$GMOFILES $lang.gmo"
+      POFILES="$POFILES $lang.po"
+    done
+
+    dnl Make all variables we use known to autoconf.
+    AC_SUBST(BUILD_INCLUDED_LIBINTL)
+    AC_SUBST(USE_INCLUDED_LIBINTL)
+    AC_SUBST(CATALOGS)
+    AC_SUBST(CATOBJEXT)
+    AC_SUBST(GMOFILES)
+    AC_SUBST(INTLLIBS)
+    AC_SUBST(INTLOBJS)
+    AC_SUBST(POFILES)
+    AC_SUBST(POSUB)
+
+    dnl For backward compatibility. Some configure.ins may be using this.
+    nls_cv_header_intl=
+    nls_cv_header_libgt=
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    DATADIRNAME=share
+    AC_SUBST(DATADIRNAME)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    INSTOBJEXT=.mo
+    AC_SUBST(INSTOBJEXT)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    GENCAT=gencat
+    AC_SUBST(GENCAT)
+  ])
+
+dnl Usage: Just like MUTT_AM_WITH_NLS, which see.
+AC_DEFUN([MUTT_AM_GNU_GETTEXT],
+  [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+   AC_REQUIRE([AC_PROG_CC])dnl
+   AC_REQUIRE([AC_CANONICAL_HOST])dnl
+   AC_REQUIRE([AC_PROG_RANLIB])dnl
+   AC_REQUIRE([AC_ISC_POSIX])dnl
+   AC_REQUIRE([AC_HEADER_STDC])dnl
+   AC_REQUIRE([AC_C_CONST])dnl
+   AC_REQUIRE([AC_C_INLINE])dnl
+   AC_REQUIRE([AC_TYPE_OFF_T])dnl
+   AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+   AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+   AC_REQUIRE([AC_FUNC_MMAP])dnl
+   AC_REQUIRE([MUTT_jm_GLIBC21])dnl
+
+   AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+stdlib.h string.h unistd.h sys/param.h])
+   AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getcwd getegid geteuid \
+getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \
+strdup strtoul tsearch __argz_count __argz_stringify __argz_next])
+
+   MUTT_AM_ICONV
+   MUTT_AM_LANGINFO_CODESET
+   MUTT_AM_LC_MESSAGES
+   MUTT_AM_WITH_NLS([$1],[$2],[$3])
+
+   if test "x$CATOBJEXT" != "x"; then
+     if test "x$ALL_LINGUAS" = "x"; then
+       LINGUAS=
+     else
+       AC_MSG_CHECKING(for catalogs to be installed)
+       NEW_LINGUAS=
+       for presentlang in $ALL_LINGUAS; do
+         useit=no
+         for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do
+           # Use the presentlang catalog if desiredlang is
+           #   a. equal to presentlang, or
+           #   b. a variant of presentlang (because in this case,
+           #      presentlang can be used as a fallback for messages
+           #      which are not translated in the desiredlang catalog).
+           case "$desiredlang" in
+             "$presentlang"*) useit=yes;;
+           esac
+         done
+         if test $useit = yes; then
+           NEW_LINGUAS="$NEW_LINGUAS $presentlang"
+         fi
+       done
+       LINGUAS=$NEW_LINGUAS
+       AC_MSG_RESULT($LINGUAS)
+     fi
+
+     dnl Construct list of names of catalog files to be constructed.
+     if test -n "$LINGUAS"; then
+       for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+     fi
+   fi
+
+   dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
+   dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
+   dnl Try to locate is.
+   MKINSTALLDIRS=
+   if test -n "$ac_aux_dir"; then
+     MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
+   fi
+   if test -z "$MKINSTALLDIRS"; then
+     MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+   fi
+   AC_SUBST(MKINSTALLDIRS)
+
+   dnl Enable libtool support if the surrounding package wishes it.
+   INTL_LIBTOOL_SUFFIX_PREFIX=ifelse([$1], use-libtool, [l], [])
+   AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
+  ])
diff --git a/m4/glibc21.m4 b/m4/glibc21.m4
new file mode 100644 (file)
index 0000000..caaba76
--- /dev/null
@@ -0,0 +1,26 @@
+#serial 2
+
+# Test for the GNU C Library, version 2.1 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([MUTT_jm_GLIBC21],
+  [
+    AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
+      ac_cv_gnu_library_2_1,
+      [AC_EGREP_CPP([Lucky GNU user],
+       [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+       ],
+       ac_cv_gnu_library_2_1=yes,
+       ac_cv_gnu_library_2_1=no)
+      ]
+    )
+    AC_SUBST(GLIBC21)
+    GLIBC21="$ac_cv_gnu_library_2_1"
+  ]
+)
diff --git a/m4/gssapi.m4 b/m4/gssapi.m4
new file mode 100644 (file)
index 0000000..e8451ea
--- /dev/null
@@ -0,0 +1,77 @@
+# gssapi.m4: Find GSSAPI libraries in either Heimdal or MIT implementations
+# Brendan Cully <brendan@kublai.com> 20010529
+
+dnl MUTT_AM_PATH_GSSAPI(PREFIX)
+dnl Search for a GSSAPI implementation in the standard locations plus PREFIX,
+dnl if it is set and not "yes".
+dnl Defines GSSAPI_CFLAGS and GSSAPI_LIBS if found.
+dnl Defines GSSAPI_IMPL to "Heimdal", "MIT", or "OldMIT", or "none" if not found
+AC_DEFUN([MUTT_AM_PATH_GSSAPI],
+[
+  GSSAPI_PREFIX=[$]$1
+  GSSAPI_IMPL="none"
+  saved_CPPFLAGS="$CPPFLAGS"
+  saved_LDFLAGS="$LDFLAGS"
+  saved_LIBS="$LIBS"
+  dnl First try krb5-config
+  if test "$GSSAPI_PREFIX" != "yes"
+  then
+    krb5_path="$GSSAPI_PREFIX/bin"
+  else
+    krb5_path="$PATH"
+  fi
+  AC_PATH_PROG(KRB5CFGPATH, krb5-config, none, $krb5_path)
+  if test "$KRB5CFGPATH" != "none"
+  then
+    GSSAPI_CFLAGS="$CPPFLAGS `$KRB5CFGPATH --cflags gssapi`"
+    GSSAPI_LIBS="$MUTTLIBS `$KRB5CFGPATH --libs gssapi`"
+    case "`$KRB5CFGPATH --version`" in
+      "Kerberos 5 "*)  GSSAPI_IMPL="MIT";;
+      ?eimdal*)                GSSAPI_IMPL="Heimdal";;
+      *)               GSSAPI_IMPL="Unknown";;
+   esac
+  else
+    dnl No krb5-config, run the old code
+    if test "$GSSAPI_PREFIX" != "yes"
+    then
+      GSSAPI_CFLAGS="-I$GSSAPI_PREFIX/include"
+      GSSAPI_LDFLAGS="-L$GSSAPI_PREFIX/lib"
+      CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS"
+      LDFLAGS="$LDFLAGS $GSSAPI_LDFLAGS"
+    fi
+
+    dnl New MIT kerberos V support
+    AC_CHECK_LIB(gssapi_krb5, gss_init_sec_context, [
+      GSSAPI_IMPL="MIT",
+      GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err"
+      ],, -lkrb5 -lk5crypto -lcom_err)
+
+    dnl Heimdal kerberos V support
+    if test "$GSSAPI_IMPL" = "none"
+    then
+      AC_CHECK_LIB(gssapi, gss_init_sec_context, [
+          GSSAPI_IMPL="Heimdal"
+          GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi -lkrb5 -ldes -lasn1 -lroken"
+          GSSAPI_LIBS="$GSSAPI_LIBS -lcrypt -lcom_err"
+          ],, -lkrb5 -ldes -lasn1 -lroken -lcrypt -lcom_err)
+    fi
+
+    dnl Old MIT Kerberos V
+    dnl Note: older krb5 distributions use -lcrypto instead of
+    dnl -lk5crypto, which collides with OpenSSL.  One way of dealing
+    dnl with that is to extract all objects from krb5's libcrypto
+    dnl and from openssl's libcrypto into the same directory, then
+    dnl to create a new libcrypto from these.
+    if test "$GSSAPI_IMPL" = "none"
+    then
+      AC_CHECK_LIB(gssapi_krb5, g_order_init, [
+        GSSAPI_IMPL="OldMIT",
+        GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lcrypto -lcom_err"
+        ],, -lkrb5 -lcrypto -lcom_err)
+    fi
+  fi
+
+  CPPFLAGS="$saved_CPPFLAGS"
+  LDFLAGS="$saved_LDFLAGS"
+  LIBS="$saved_LIBS"
+])
diff --git a/m4/iconv.m4 b/m4/iconv.m4
new file mode 100644 (file)
index 0000000..601be4c
--- /dev/null
@@ -0,0 +1,69 @@
+#serial AM2
+
+dnl From Bruno Haible.
+
+AC_DEFUN([MUTT_AM_ICONV],
+[
+  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+  dnl those with the standalone portable GNU libiconv installed).
+
+  AC_ARG_WITH([libiconv-prefix],
+[  --with-libiconv-prefix=DIR Search for libiconv in DIR/include and DIR/lib], [
+    for dir in `echo "$withval" | tr : ' '`; do
+      if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
+      if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi
+    done
+   ])
+
+  AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+      [iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);],
+      am_cv_func_iconv=yes)
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS -liconv"
+      AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+        [iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);],
+        am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes)
+      LIBS="$am_save_LIBS"
+    fi
+  ])
+  if test "$am_cv_func_iconv" = yes; then
+    AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+    AC_MSG_CHECKING([for iconv declaration])
+    AC_CACHE_VAL(am_cv_proto_iconv, [
+      AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    AC_MSG_RESULT([$]{ac_t:-
+         }[$]am_cv_proto_iconv)
+    AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
+      [Define as const if the declaration of iconv() needs const.])
+  fi
+  LIBICONV=
+  if test "$am_cv_lib_iconv" = yes; then
+    LIBICONV="-liconv"
+  fi
+  AC_SUBST(LIBICONV)
+])
diff --git a/m4/lcmessage.m4 b/m4/lcmessage.m4
new file mode 100644 (file)
index 0000000..3a34f86
--- /dev/null
@@ -0,0 +1,24 @@
+# Check whether LC_MESSAGES is available in <locale.h>.
+# Ulrich Drepper <drepper@cygnus.com>, 1995.
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public
+# License or the GNU Library General Public License but which still want
+# to provide support for the GNU gettext functionality.
+# Please note that the actual code of the GNU gettext library is covered
+# by the GNU Library General Public License, and the rest of the GNU
+# gettext package package is covered by the GNU General Public License.
+# They are *not* in the public domain.
+
+# serial 2
+
+AC_DEFUN([MUTT_AM_LC_MESSAGES],
+  [if test $ac_cv_header_locale_h = yes; then
+    AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+      [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+       am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+    if test $am_cv_val_LC_MESSAGES = yes; then
+      AC_DEFINE(HAVE_LC_MESSAGES, 1,
+        [Define if your <locale.h> file defines LC_MESSAGES.])
+    fi
+  fi])
diff --git a/m4/libesmtp.m4 b/m4/libesmtp.m4
new file mode 100644 (file)
index 0000000..b6b10db
--- /dev/null
@@ -0,0 +1,63 @@
+dnl vim:ft=config:
+
+dnl Search for libesmtp, by Steven Engelhardt <sengelha@yahoo.com>
+dnl
+dnl libesmtp often requires linking against -lpthread or -lc_r (BSD).
+dnl This macro attempts to centralize this code.
+
+AC_DEFUN([MUTT_AM_LIBESMTP],
+[
+  AC_ARG_WITH(
+    [libesmtp],
+    [  --with-libesmtp=DIR      Compile in support for libesmtp for the MTA],
+    [ if test "$with_libesmtp" != "no"
+      then
+        mutt_libesmtp_check_path="$PATH"
+
+        if test "$with_libesmtp" != "yes"
+        then
+          mutt_libesmtp_check_path="$tmp_path:$withval/bin"
+        fi
+
+        dnl 1. Find libesmtp-config
+        AC_PATH_PROG([mutt_libesmtp_config_path],
+                     [libesmtp-config],
+                     [no],
+                     [$mutt_libesmtp_check_path])
+
+        if test "$mutt_libesmtp_config_path" = "no"
+        then
+          AC_MSG_ERROR([libesmtp-config binary not found.])
+        fi
+
+        dnl 2. Get CFLAGS and LIBS from libesmtp-config
+        mutt_libesmtp_cflags=`$mutt_libesmtp_config_path --cflags`
+        mutt_libesmtp_libs=`$mutt_libesmtp_config_path --libs`
+
+        dnl 3. Verify libesmtp.h can be found with these settings
+        temp_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $mutt_libesmtp_cflags"
+        AC_CHECK_HEADER([libesmtp.h],
+                        [],
+                        AC_MSG_ERROR([Could not find libesmtp.h]))
+        CFLAGS="$temp_CFLAGS"
+
+        dnl 4. Verify the libesmtp library can be linked in
+        temp_CFLAGS="$CFLAGS"
+        temp_LIBS="$LIBS"
+        CFLAGS="$CFLAGS $mutt_libesmtp_cflags"
+        LIBS="$LIBS $mutt_libesmtp_libs"
+        AC_CHECK_LIB([esmtp],
+                     [smtp_create_session],
+                     [],
+                     AC_MSG_ERROR([Could not find libesmtp]))
+        CFLAGS="$temp_CFLAGS"
+        LIBS="$temp_LIBS"
+
+        dnl 5. Export use_libesmtp variable so configure.in can
+        dnl    act accordingly.
+        use_libesmtp=yes
+      fi
+    ]
+  )
+])
diff --git a/m4/progtest.m4 b/m4/progtest.m4
new file mode 100644 (file)
index 0000000..6b0500e
--- /dev/null
@@ -0,0 +1,51 @@
+# Search path for a program which passes the given test.
+# Ulrich Drepper <drepper@cygnus.com>, 1996.
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public
+# License or the GNU Library General Public License but which still want
+# to provide support for the GNU gettext functionality.
+# Please note that the actual code of the GNU gettext library is covered
+# by the GNU Library General Public License, and the rest of the GNU
+# gettext package package is covered by the GNU General Public License.
+# They are *not* in the public domain.
+
+# serial 2
+
+dnl MUTT_AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([MUTT_AM_PATH_PROG_WITH_TEST],
+[# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+  /*)
+  ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in ifelse([$5], , $PATH, [$5]); do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if [$3]; then
+       ac_cv_path_$1="$ac_dir/$ac_word"
+       break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+  ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+  AC_MSG_RESULT([$]$1)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
diff --git a/mailbox.h b/mailbox.h
new file mode 100644 (file)
index 0000000..45e3f83
--- /dev/null
+++ b/mailbox.h
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#ifndef _MAILBOX_H
+#define _MAILBOX_H
+
+/* flags for mutt_open_mailbox() */
+#define M_NOSORT       (1<<0) /* do not sort the mailbox after opening it */
+#define M_APPEND       (1<<1) /* open mailbox for appending messages */
+#define M_READONLY     (1<<2) /* open in read-only mode */
+#define M_QUIET                (1<<3) /* do not print any messages */
+#define M_NEWFOLDER    (1<<4) /* create a new folder - same as M_APPEND, but uses
+                               * safe_fopen() for mbox-style folders.
+                               */
+
+/* mx_open_new_message() */
+#define M_ADD_FROM     1       /* add a From_ line */
+
+/* return values from mx_check_mailbox() */
+enum
+{
+  M_NEW_MAIL = 1,      /* new mail received in mailbox */
+  M_LOCKED,            /* couldn't lock the mailbox */
+  M_REOPENED,          /* mailbox was reopened */
+  M_FLAGS               /* nondestructive flags change (IMAP) */
+};
+
+typedef struct
+{
+  FILE *fp;    /* pointer to the message data */
+  char *path;  /* path to temp file */
+  short magic; /* type of mailbox this message belongs to */
+  short write; /* nonzero if message is open for writing */
+  struct {
+    unsigned read : 1;
+    unsigned flagged : 1;
+    unsigned replied : 1;
+  } flags;
+  time_t received;     /* the time at which this message was received */
+} MESSAGE;
+
+CONTEXT *mx_open_mailbox (const char *, int, CONTEXT *);
+
+MESSAGE *mx_open_message (CONTEXT *, int);
+MESSAGE *mx_open_new_message (CONTEXT *, HEADER *, int);
+
+void mx_fastclose_mailbox (CONTEXT *);
+
+int mx_close_mailbox (CONTEXT *, int *);
+int mx_sync_mailbox (CONTEXT *, int *);
+int mx_commit_message (MESSAGE *, CONTEXT *);
+int mx_close_message (MESSAGE **);
+int mx_get_magic (const char *);
+int mx_set_magic (const char *);
+int mx_check_mailbox (CONTEXT *, int *, int);
+#ifdef USE_IMAP
+int mx_is_imap (const char *);
+#endif
+#ifdef USE_POP
+int mx_is_pop (const char *);
+#endif
+#ifdef USE_NNTP
+int mx_is_nntp (const char *);
+#endif
+
+int mx_access (const char*, int);
+int mx_check_empty (const char *);
+
+#endif
diff --git a/main.c b/main.c
new file mode 100644 (file)
index 0000000..58e6079
--- /dev/null
+++ b/main.c
@@ -0,0 +1,975 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1999-2002 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+#define MAIN_C 1
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "keymap.h"
+#include "mailbox.h"
+#include "url.h"
+#include "mutt_crypt.h"
+#include "mutt_idna.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <locale.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/utsname.h>
+
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#endif
+
+#ifdef HAVE_LIBIDN
+#include <stringprep.h>
+#endif
+
+#ifdef USE_NNTP
+#include <nntp.h>
+#endif
+
+static const char *ReachingUs = N_("\
+To contact the developers, please mail to <mutt-dev@mutt.org>.\n\
+To report a bug, please use the flea(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 `mutt -vv'.\n\
+Mutt is free software, and you are welcome to redistribute it\n\
+under certain conditions; type `mutt -vv' for details.\n");
+
+static const char *Copyright = N_("\
+Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n\
+Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n\
+Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n\
+Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n\
+Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n\
+Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n\
+Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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\
+");
+
+void mutt_exit (int code)
+{
+  mutt_endwin (NULL);
+  exit (code);
+}
+
+static void mutt_usage (void)
+{
+  puts (mutt_make_version ());
+
+  puts _(
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f <file> ]\n\
+       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] [...]\n\
+       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] [...]\n\
+       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] [ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n\
+       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n\
+       mutt -v[v]\n\
+\n\
+options:\n\
+  -A <alias>\texpand the given alias\n\
+  -a <file>\tattach a file to the message\n\
+  -b <address>\tspecify a blind carbon-copy (BCC) address\n\
+  -c <address>\tspecify a carbon-copy (CC) address\n\
+  -e <command>\tspecify a command to be executed after initialization\n\
+  -f <file>\tspecify which mailbox to read\n\
+  -F <file>\tspecify an alternate muttrc file\n\
+  -g <server>\tspecify a newsserver (if compiled with NNTP)\n\
+  -G\t\tselect a newsgroup (if compiled with NNTP)\n\
+  -H <file>\tspecify a draft file to read header from\n\
+  -i <file>\tspecify a file which Mutt should include in the reply\n\
+  -m <type>\tspecify a default mailbox type\n\
+  -n\t\tcauses Mutt not to read the system Muttrc\n\
+  -p\t\trecall a postponed message\n\
+  -Q <variable>\tquery a configuration variable\n\
+  -R\t\topen mailbox in read-only mode\n\
+  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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\
+  -h\t\tthis help message");
+
+  exit (0);
+}
+
+static void show_version (void)
+{
+  struct utsname uts;
+
+  puts (mutt_make_version());
+  puts (_(Notice));
+
+  uname (&uts);
+
+#ifdef _AIX
+  printf ("System: %s %s.%s", uts.sysname, uts.version, uts.release);
+#elif defined (SCO)
+  printf ("System: SCO %s", uts.release);
+#else
+  printf ("System: %s %s", uts.sysname, uts.release);
+#endif
+
+  printf (" (%s)", uts.machine);
+
+#ifdef NCURSES_VERSION
+  printf (" [using ncurses %s]", NCURSES_VERSION);
+#elif defined(USE_SLANG_CURSES)
+  printf (" [using slang %d]", SLANG_VERSION);
+#endif
+
+#ifdef _LIBICONV_VERSION
+  printf (" [using libiconv %d.%d]", _LIBICONV_VERSION >> 8,
+         _LIBICONV_VERSION & 0xff);
+#endif
+
+#ifdef HAVE_LIBIDN
+  printf (" [using libidn %s (compiled with %s)]", stringprep_check_version (NULL), 
+         STRINGPREP_VERSION);
+#endif
+  
+  puts (_("\nCompile options:"));
+
+#ifdef DOMAIN
+  printf ("DOMAIN=\"%s\"\n", DOMAIN);
+#else
+  puts ("-DOMAIN");
+#endif
+
+#ifdef DEBUG
+  puts ("+DEBUG");
+#else
+  puts ("-DEBUG");
+#endif
+  
+
+  
+  puts (
+
+#ifdef HOMESPOOL
+       "+HOMESPOOL  "
+#else
+       "-HOMESPOOL  "
+#endif
+
+#ifdef USE_SETGID
+       "+USE_SETGID  "
+#else
+       "-USE_SETGID  "
+#endif
+
+#ifdef USE_DOTLOCK
+       "+USE_DOTLOCK  "
+#else
+       "-USE_DOTLOCK  "
+#endif
+
+#ifdef DL_STANDALONE
+       "+DL_STANDALONE  "
+#else
+       "-DL_STANDALONE  "
+#endif
+
+       "\n"
+       
+#ifdef USE_FCNTL
+       "+USE_FCNTL  "
+#else
+       "-USE_FCNTL  "
+#endif
+
+#ifdef USE_FLOCK
+       "+USE_FLOCK"
+#else
+       "-USE_FLOCK"
+#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  "
+#else
+        "-USE_IMAP  "
+#endif
+
+#ifdef USE_GSS
+       "+USE_GSS  "
+#else
+       "-USE_GSS  "
+#endif
+
+       
+#ifdef USE_SSL
+       "+USE_SSL  "
+#else
+       "-USE_SSL  "
+#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"
+       
+#ifdef HAVE_REGCOMP
+       "+HAVE_REGCOMP  "
+#else
+       "-HAVE_REGCOMP  "
+#endif
+
+#ifdef USE_GNU_REGEX
+       "+USE_GNU_REGEX  "
+#else
+       "-USE_GNU_REGEX  "
+#endif
+
+       "\n"
+       
+#ifdef HAVE_COLOR
+       "+HAVE_COLOR  "
+#else
+       "-HAVE_COLOR  "
+#endif
+       
+#ifdef HAVE_START_COLOR
+       "+HAVE_START_COLOR  "
+#else
+       "-HAVE_START_COLOR  "
+#endif
+       
+#ifdef HAVE_TYPEAHEAD
+       "+HAVE_TYPEAHEAD  "
+#else
+       "-HAVE_TYPEAHEAD  "
+#endif
+       
+#ifdef HAVE_BKGDSET
+       "+HAVE_BKGDSET  "
+#else
+       "-HAVE_BKGDSET  "
+#endif
+
+       "\n"
+       
+#ifdef HAVE_CURS_SET
+       "+HAVE_CURS_SET  "
+#else
+       "-HAVE_CURS_SET  "
+#endif
+       
+#ifdef HAVE_META
+       "+HAVE_META  "
+#else
+       "-HAVE_META  "
+#endif
+       
+#ifdef HAVE_RESIZETERM
+       "+HAVE_RESIZETERM  "
+#else
+       "-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  "
+#else
+       "-SUN_ATTACHMENT  "
+#endif
+
+       "\n"
+       
+#ifdef ENABLE_NLS
+       "+ENABLE_NLS  "
+#else
+       "-ENABLE_NLS  "
+#endif
+
+#ifdef LOCALES_HACK
+       "+LOCALES_HACK  "
+#else
+       "-LOCALES_HACK  "
+#endif
+             
+#ifdef HAVE_WC_FUNCS
+       "+HAVE_WC_FUNCS  "
+#else
+       "-HAVE_WC_FUNCS  "
+#endif
+       
+#ifdef HAVE_LANGINFO_CODESET
+       "+HAVE_LANGINFO_CODESET  "
+#else
+       "-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  "
+#else
+       "-ICONV_NONTRANS  "
+#endif
+
+#if HAVE_LIBIDN
+       "+HAVE_LIBIDN  "
+#else
+       "-HAVE_LIBIDN  "
+#endif
+       
+#if HAVE_GETSID
+       "+HAVE_GETSID  "
+#else
+       "-HAVE_GETSID  "
+#endif
+
+#if HAVE_GETADDRINFO
+       "+HAVE_GETADDRINFO  "
+#else
+       "-HAVE_GETADDRINFO  "
+#endif
+
+       );
+
+#ifdef ISPELL
+  printf ("ISPELL=\"%s\"\n", ISPELL);
+#else
+  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);
+#ifdef MIXMASTER
+  printf ("MIXMASTER=\"%s\"\n", MIXMASTER);
+#else
+  puts ("-MIXMASTER");
+#endif
+
+  puts(_(ReachingUs));
+
+  mutt_print_patchlist();
+  
+  exit (0);
+}
+
+static void start_curses (void)
+{
+  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 */
+#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)
+  {
+    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
+  ci_start_color ();
+  keypad (stdscr, TRUE);
+  cbreak ();
+  noecho ();
+#if HAVE_TYPEAHEAD
+  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 */
+#ifdef USE_NNTP
+#define M_NEWS    (1<<5)       /* -g and -G */
+#endif
+
+int main (int argc, char **argv)
+{
+  char folder[_POSIX_PATH_MAX] = "";
+  char *subject = NULL;
+  char *includeFile = NULL;
+  char *draftFile = NULL;
+  char *newMagic = NULL;
+  HEADER *msg = NULL;
+  LIST *attach = NULL;
+  LIST *commands = NULL;
+  LIST *queries = NULL;
+  LIST *alias_queries = NULL;
+  int sendflags = 0;
+  int flags = 0;
+  int version = 0;
+  int i;
+  int explicit_folder = 0;
+  extern char *optarg;
+  extern int optind;
+
+  /* sanity check against stupid administrators */
+  
+  if(getegid() != getgid())
+  {
+    fprintf(stderr, "%s: I don't want to run with privileges!\n",
+           argv[0]);
+    exit(1);
+  }
+
+#ifdef ENABLE_NLS
+  /* FIXME what about init.c:1439 ? */
+  setlocale (LC_ALL, "");
+  bindtextdomain (PACKAGE, MUTTLOCALEDIR);
+  textdomain (PACKAGE);
+#endif
+
+  setlocale (LC_CTYPE, "");
+
+  mutt_error = mutt_nocurses_error;
+  mutt_message = mutt_nocurses_error;
+  SRAND (time (NULL));
+  umask (077);
+
+  memset (Options, 0, sizeof (Options));
+  memset (QuadOptions, 0, 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);
+#else
+       printf _("DEBUG was not defined during compilation.  Ignored.\n");
+#endif
+       break;
+
+      case 'e':
+       commands = mutt_add_list (commands, optarg);
+       break;
+
+      case 'H':
+       draftFile = optarg;
+       break;
+
+      case 'i':
+       includeFile = optarg;
+       break;
+
+      case 'm':
+       /* should take precedence over .muttrc setting, so save it for later */
+       newMagic = optarg; 
+       break;
+
+      case 'n':
+       flags |= M_NOSYSRC;
+       break;
+
+      case 'p':
+       sendflags |= SENDPOSTPONED;
+       break;
+
+      case 'Q':
+        queries = mutt_add_list (queries, optarg);
+        break;
+      
+      case 'R':
+       flags |= M_RO; /* read-only mode */
+       break;
+
+      case 's':
+       subject = optarg;
+       break;
+
+      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];
+
+         snprintf (buf, sizeof (buf), "set news_server=%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 'Z':
+       flags |= M_BUFFY | M_IGNORE;
+       break;
+
+      default:
+       mutt_usage ();
+    }
+
+  switch (version)
+  {
+    case 0:
+      break;
+    case 1:
+      show_version ();
+      break;
+    default:
+      puts (mutt_make_version ());
+      puts (_(Copyright));
+      puts (_(ReachingUs));
+      exit (0);
+  }
+
+  /* Check for a batch send. */
+  if (!isatty (0) || queries || alias_queries)
+  {
+    set_option (OPTNOCURSES);
+    sendflags = SENDBATCH;
+  }
+
+  /* This must come before mutt_init() because curses needs to be started
+     before calling the init_pair() function to set the color scheme.  */
+  if (!option (OPTNOCURSES))
+    start_curses ();
+
+  /* set defaults and read init files */
+  mutt_init (flags & M_NOSYSRC, commands);
+  mutt_free_list (&commands);
+
+  if (queries)
+    return mutt_query_variables (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);
+      }
+    }
+    return rv;
+  }
+  
+  if (newMagic)
+    mx_set_magic (newMagic);
+
+  if (!option (OPTNOCURSES))
+  {
+    SETCOLOR (MT_COLOR_NORMAL);
+    clear ();
+    mutt_error = mutt_curses_error;
+    mutt_message = mutt_curses_message;
+  }
+
+  /* Create the Maildir directory if it doesn't exist. */
+  if (!option (OPTNOCURSES) && Maildir)
+  {
+    struct stat sb;
+    char fpath[_POSIX_PATH_MAX];
+    char msg[STRING];
+
+    strfcpy (fpath, Maildir, sizeof (fpath));
+    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 (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)
+  {
+    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 ();
+
+    if (draftFile)
+      infile = draftFile;
+    else
+    {
+      if (!msg->env)
+       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]);
+      }
+
+      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);
+
+      if (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);
+         }
+       }
+      }
+      else
+       fin = NULL;
+
+      mutt_mktemp (buf);
+      tempfile = safe_strdup (buf);
+
+      if (draftFile)
+       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);
+      }
+    }
+
+    FREE (&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;
+      }
+      mutt_free_list (&attach);
+    }
+
+    ci_send_message (sendflags, msg, tempfile, NULL, NULL);
+
+    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);
+      }
+      folder[0] = 0;
+      mutt_buffy (folder, sizeof (folder));
+    }
+    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);
+      }
+      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])
+      strfcpy (folder, NONULL(Spoolfile), sizeof (folder));
+
+#ifdef USE_NNTP
+    if (option (OPTNEWS))
+    {
+      unset_option (OPTNEWS);
+      nntp_expand_path (folder, sizeof (folder), &CurrentNewsSrv->conn->account);
+    }
+    else
+#endif
+    mutt_expand_path (folder, sizeof (folder));
+
+    mutt_str_replace (&LastFolder, folder);
+
+    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);
+      }
+    }
+
+    mutt_folder_hook (folder);
+
+    if((Context = mx_open_mailbox (folder, ((flags & M_RO) || option (OPTREADONLY)) ? M_READONLY : 0, NULL))
+       || !explicit_folder)
+    {
+      mutt_index_menu ();
+      if (Context)
+       FREE (&Context);
+    }
+    mutt_endwin (Errorbuf);
+  }
+
+  exit (0);
+}
diff --git a/makedoc.c b/makedoc.c
new file mode 100644 (file)
index 0000000..4d3011e
--- /dev/null
+++ b/makedoc.c
@@ -0,0 +1,1208 @@
+/*
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+/**
+ ** This program parses mutt's init.h and generates documentation in
+ ** three different formats:
+ **
+ ** -> a commented muttrc configuration file
+ ** -> nroff, suitable for inclusion in a manual page
+ ** -> linuxdoc-sgml, suitable for inclusion in the 
+ **    SGML-based manual
+ **
+ **/
+
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <errno.h>
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#ifdef HAVE_GETOPT_H
+# include <getopt.h>
+#endif
+
+#ifndef HAVE_STRERROR
+#ifndef STDC_HEADERS
+extern int sys_nerr;
+extern char *sys_errlist[];
+#endif
+
+#define strerror(x) ((x) > 0 && (x) < sys_nerr) ? sys_errlist[(x)] : 0
+#endif /* !HAVE_STRERROR */
+
+extern int optind;
+
+#define BUFFSIZE 2048
+
+enum output_formats_t
+{
+  F_CONF, F_MAN, F_SGML, F_NONE
+};
+
+#define D_NL           (1 << 0)
+#define D_EM           (1 << 1)
+#define D_BF           (1 << 2)
+#define D_TAB          (1 << 3)
+#define D_NP           (1 << 4)
+#define D_INIT         (1 << 5)
+#define D_DL           (1 << 6)
+#define D_DT           (1 << 7)
+
+enum
+{
+  SP_START_EM,
+  SP_START_BF,
+  SP_END_FT,
+  SP_NEWLINE,
+  SP_NEWPAR,
+  SP_STR,
+  SP_START_TAB,
+  SP_END_TAB,
+  SP_START_DL,
+  SP_DT,
+  SP_DD,
+  SP_END_DL,
+  SP_REFER
+};
+
+enum output_formats_t OutputFormat = F_NONE;
+char *Progname;
+short Debug = 0;
+
+static char *get_token (char *, size_t, char *);
+static char *skip_ws (char *);
+static const char *type2human (int);
+static int buff2type (const char *);
+static int flush_doc (int, FILE *);
+static int handle_docline (char *, FILE *, int);
+static int print_it (int, char *, FILE *, int);
+static void print_confline (const char *, int, const char *, FILE *);
+static void handle_confline (char *, FILE *);
+static void makedoc (FILE *, FILE *);
+static void pretty_default (char *, size_t, const char *, int);
+static int sgml_fputc (int, FILE *);
+static int sgml_fputs (const char *, FILE *);
+
+int main (int argc, char *argv[])
+{
+  int c;
+  FILE *f;
+
+  if ((Progname = strrchr (argv[0], '/')))
+    Progname++;
+  else
+    Progname = argv[0];
+  
+  while ((c = getopt (argc, argv, "cmsd")) != EOF)
+  {
+    switch (c)
+    {
+      case 'c': OutputFormat = F_CONF; break;
+      case 'm': OutputFormat = F_MAN; break;
+      case 's': OutputFormat = F_SGML; break;
+      case 'd': Debug++; break;
+      default: 
+      {
+       fprintf (stderr, "%s: bad command line parameter.\n", Progname);
+       exit (1);
+      }
+    }
+  }
+
+  if (optind != argc)
+  {
+    if ((f = fopen (argv[optind], "r")) == NULL)
+    {
+      fprintf (stderr, "%s: Can't open %s (%s).\n",
+              Progname, argv[optind], strerror (errno));
+      exit (1);
+    }
+  }
+  else 
+    f = stdin;
+
+  switch (OutputFormat)
+  {
+    case F_CONF: 
+    case F_MAN:  
+    case F_SGML: makedoc (f, stdout); break;
+    default:
+    {
+      fprintf (stderr, "%s: No output format specified.\n",
+              Progname);
+      exit (1);
+    }
+  }
+  
+  if (f != stdin)
+    fclose (f);
+  
+  exit (1);
+}
+
+
+static void makedoc (FILE *in, FILE *out)
+{
+  char buffer[BUFFSIZE];
+  char token[BUFFSIZE];
+  char *p;
+  int active = 0;
+  int line = 0;
+  int docstat = D_INIT;
+
+  while ((fgets (buffer, sizeof (buffer), in)))
+  {
+    line++;
+    if ((p = strchr (buffer, '\n')) == NULL)
+    {
+      fprintf (stderr, "%s: Line %d too long.  Ask a wizard to enlarge\n"
+                      "%s: my buffer size.\n", Progname, line, Progname);
+      exit (1);
+    }
+    else
+      *p = '\0';
+
+    if (!(p = get_token (token, sizeof (token), buffer)))
+      continue;
+
+    if (Debug)
+    {
+      fprintf (stderr, "%s: line %d.  first token: \"%s\".\n",
+              Progname, line, token);
+    }
+    
+    if (!strcmp (token, "/*++*/"))
+      active = 1;
+    else if (!strcmp (token, "/*--*/"))
+    {
+      docstat = flush_doc (docstat, out);
+      active = 0;
+    }
+    else if (active && (!strcmp (token, "/**") || !strcmp (token, "**")))
+      docstat = handle_docline (p, out, docstat);
+    else if (active && !strcmp (token, "{"))
+    {
+      docstat = flush_doc (docstat, out);
+      handle_confline (p, out);
+    }
+  }
+  flush_doc (docstat, out);
+  fputs ("\n", out);
+}
+
+/* skip whitespace */
+
+static char *skip_ws (char *s)
+{
+  while (*s && isspace ((unsigned char) *s))
+    s++;
+
+  return s;
+}
+
+/* isolate a token */
+
+static char single_char_tokens[] = "[]{},;|";
+
+static char *get_token (char *d, size_t l, char *s)
+{
+  char *t;
+  short is_quoted = 0;
+  char *dd = d;
+
+  if (Debug)
+     fprintf (stderr, "%s: get_token called for `%s'.\n",
+             Progname, s);
+  
+  s = skip_ws (s);
+
+  if (Debug > 1)
+    fprintf (stderr, "%s: argumet after skip_ws():  `%s'.\n",
+            Progname, s);
+
+  if (!*s)
+  {
+    if (Debug)
+      fprintf (stderr, "%s: no more tokens on this line.\n", Progname);
+    return NULL;
+  }
+
+  if (strchr (single_char_tokens, *s))
+  {
+    if (Debug)
+    {
+      fprintf (stderr, "%s: found single character token `%c'.\n",
+              Progname, *s);
+    }
+    d[0] = *s++;
+    d[1] = 0;
+    return s;
+  }
+
+  if (*s == '"')
+  {
+    if (Debug)
+    {
+      fprintf (stderr, "%s: found quote character.\n", Progname);
+    }
+      
+    s++;
+    is_quoted = 1;
+  }
+
+  for (t = s; *t && --l > 0; t++)
+  {
+    if (*t == '\\' && !t[1])
+      break;
+
+    if (is_quoted && *t == '\\')
+    {
+      switch ((*d = *++t))
+      {
+       case 'n': *d = '\n'; break;
+       case 't': *d = '\t'; break;
+       case 'r': *d = '\r'; break;
+       case 'a': *d = '\a'; break;
+      }
+
+      d++;
+      continue;
+    }
+
+    if (is_quoted && *t == '"')
+    {
+      t++;
+      break;
+    }
+    else if (!is_quoted && strchr (single_char_tokens, *t))
+      break;
+    else if (!is_quoted && isspace ((unsigned char) *t))
+      break;
+    else
+      *d++ = *t;
+  }
+
+  *d = '\0';
+
+  if (Debug)
+  {
+    fprintf (stderr, "%s: Got %stoken: `%s'.\n",
+            Progname, is_quoted ? "quoted " : "", dd);
+    fprintf (stderr, "%s: Remainder: `%s'.\n",
+            Progname, t);
+  }
+  
+  return t;
+}
+
+
+/**
+ ** Configuration line parser
+ ** 
+ ** The following code parses a line from init.h which declares
+ ** a configuration variable.
+ **
+ **/
+
+/* note: the following enum must be in the same order as the
+ * following string definitions!
+ */
+
+enum 
+{
+  DT_NONE = 0,
+  DT_BOOL,
+  DT_NUM,
+  DT_STR,
+  DT_PATH,
+  DT_QUAD,
+  DT_SORT,
+  DT_RX,
+  DT_MAGIC,
+  DT_SYN,
+  DT_ADDR
+};
+
+struct 
+{
+  char *machine;
+  char *human;
+}
+types[] = 
+{
+  { "DT_NONE", "-none-"        },
+  { "DT_BOOL",  "boolean"      },
+  { "DT_NUM",   "number"       },
+  { "DT_STR",  "string"        },
+  { "DT_PATH", "path"          },
+  { "DT_QUAD", "quadoption"    },
+  { "DT_SORT", "sort order"    },
+  { "DT_RX",   "regular expression" },
+  { "DT_MAGIC",        "folder magic" },
+  { "DT_SYN",  NULL },
+  { "DT_ADDR", "e-mail address" },
+  { NULL, NULL }
+};
+    
+
+static int buff2type (const char *s)
+{
+  int type;
+  
+  for (type = DT_NONE; types[type].machine; type++)
+    if (!strcmp (types[type].machine, s))
+       return type;
+  
+  return DT_NONE;
+}
+
+static const char *type2human (int type)
+{
+  return types[type].human;
+}
+static void handle_confline (char *s, FILE *out)
+{
+  char varname[BUFFSIZE];
+  char buff[BUFFSIZE];
+  char tmp[BUFFSIZE];
+  int type;
+  
+  char val[BUFFSIZE];
+
+  /* xxx - put this into an actual state machine? */
+
+  /* variable name */
+  if (!(s = get_token (varname, sizeof (varname), s))) return;
+  
+  /* comma */
+  if (!(s = get_token (buff, sizeof (buff), s))) return;
+    
+  /* type */
+  if (!(s = get_token (buff, sizeof (buff), s))) return;
+
+  type = buff2type (buff);
+
+  /* possibly a "|" or comma */
+  if (!(s = get_token (buff, sizeof (buff), s))) return;
+
+  if (!strcmp (buff, "|"))
+  {
+    if (Debug) fprintf (stderr, "%s: Expecting <subtype> <comma>.\n", Progname);
+    /* ignore subtype and comma */
+    if (!(s = get_token (buff, sizeof (buff), s))) return;
+    if (!(s = get_token (buff, sizeof (buff), s))) return;
+  }
+
+  /* redraw, comma */
+  
+  while (1)
+  {
+    if (!(s = get_token (buff, sizeof (buff), s))) return;
+    if (!strcmp (buff, ","))
+      break;
+  }
+
+  /* option name or UL &address */
+  if (!(s = get_token (buff, sizeof (buff), s))) return;
+  if (!strcmp (buff, "UL"))
+    if (!(s = get_token (buff, sizeof (buff), s))) return;
+
+  /* comma */
+  if (!(s = get_token (buff, sizeof (buff), s))) return;
+
+  if (Debug) fprintf (stderr, "%s: Expecting default value.\n", Progname);
+  
+  /* <default value> or UL <default value> */
+  if (!(s = get_token (buff, sizeof (buff), s))) return;
+  if (!strcmp (buff, "UL"))
+  {
+    if (Debug) fprintf (stderr, "%s: Skipping UL.\n", Progname);
+    if (!(s = get_token (buff, sizeof (buff), s))) return;
+  }
+
+  memset (tmp, 0, sizeof (tmp));
+
+  do 
+  {
+    if (!strcmp (buff, "}"))
+      break;
+
+    strncpy (tmp + strlen (tmp), buff, sizeof (tmp) - strlen (tmp));
+  }
+  while ((s = get_token (buff, sizeof (buff), s)));
+
+  pretty_default (val, sizeof (val), tmp, type);
+  print_confline (varname, type, val, out);
+}
+
+static void pretty_default (char *t, size_t l, const char *s, int type)
+{
+  memset (t, 0, l);
+  l--;
+
+  switch (type)
+  {
+    case DT_QUAD:
+    {    
+      if (!strcasecmp (s, "M_YES")) strncpy (t, "yes", l);
+      else if (!strcasecmp (s, "M_NO")) strncpy (t, "no", l);
+      else if (!strcasecmp (s, "M_ASKYES")) strncpy (t, "ask-yes", l);
+      else if (!strcasecmp (s, "M_ASKNO")) strncpy (t, "ask-no", l);
+      break;
+    }
+    case DT_BOOL:
+    {
+      if (atoi (s))
+       strncpy (t, "yes", l);
+      else
+       strncpy (t, "no", l);
+      break;
+    }
+    case DT_SORT:
+    {
+      /* heuristic! */
+      strncpy (t, s + 5, l);
+      for (; *t; t++) *t = tolower ((unsigned char) *t);
+      break;
+    }
+    case DT_MAGIC:
+    {
+      /* heuristic! */
+      strncpy (t, s + 2, l);
+      for (; *t; t++) *t = tolower ((unsigned char) *t);
+      break;
+    }
+    case DT_STR:
+    case DT_RX:
+    case DT_ADDR:
+    case DT_PATH:
+    {
+      if (!strcmp (s, "0"))
+       break;
+      /* fallthrough */
+    }
+    default:
+    {
+      strncpy (t, s, l);
+      break;
+    }
+  }
+}
+
+static void char_to_escape (char *dest, unsigned int c)
+{
+  switch (c)
+  {
+    case '\r': strcpy (dest, "\\r"); break;    /* __STRCPY_CHECKED__ */
+    case '\n': strcpy (dest, "\\n"); break;    /* __STRCPY_CHECKED__ */
+    case '\t': strcpy (dest, "\\t"); break;    /* __STRCPY_CHECKED__ */
+    case '\f': strcpy (dest, "\\f"); break;    /* __STRCPY_CHECKED__ */
+    default: sprintf (dest, "\\%03o", c); break;
+  }
+}
+static void conf_char_to_escape (unsigned int c , FILE *out)
+{
+  char buff[16];
+  char_to_escape (buff, c);
+  fputs (buff, out);
+}
+
+static void conf_print_strval (const char *v, FILE *out)
+{
+  for (; *v; v++)
+  {
+    if (*v < ' ' || *v & 0x80)
+    {
+      conf_char_to_escape ((unsigned int) *v, out);
+      continue;
+    }
+
+    if (*v == '"'  || *v == '\\')
+      fputc ('\\', out);
+    fputc (*v, out);
+  }
+}
+
+static void man_print_strval (const char *v, FILE *out)
+{
+  for (; *v; v++)
+  {
+    if (*v < ' ' || *v & 0x80)
+    {
+      fputc ('\\', out);
+      conf_char_to_escape ((unsigned int) *v, out);
+      continue;
+    }
+    
+    if (*v == '"')
+      fputs ("\\(rq", out);
+    else if (*v == '\\')
+      fputs ("\\\\", out);
+    else
+      fputc (*v, out);
+  }
+}
+
+static void sgml_print_strval (const char *v, FILE *out)
+{
+  char buff[16];
+  for (; *v; v++)
+  {
+    if (*v <  ' ' || *v & 0x80)
+    {
+      char_to_escape (buff, (unsigned int) *v);
+      sgml_fputs (buff, out);
+      continue;
+    }
+    sgml_fputc ((unsigned int) *v, out);
+  }
+}
+
+static int sgml_fputc (int c, FILE *out)
+{
+  switch (c)
+  {
+    case '<': return fputs ("&lt;", out);
+    case '>': return fputs ("&gt;", out);
+    case '$': return fputs ("&dollar;", out);
+    case '_': return fputs ("&lowbar;", out);
+    case '%': return fputs ("&percnt;", out);
+    case '&': return fputs ("&amp;", out);
+    case '\\': return fputs ("&bsol;", out);
+    case '"': return fputs ("&dquot;", out);
+    case '[': return fputs ("&lsqb;", out);
+    case ']': return fputs ("&rsqb;", out);
+    case '~': return fputs ("&tilde;", out);
+    default:  return fputc (c, out);
+  }
+}
+
+static int sgml_fputs (const char *s, FILE *out)
+{
+  for (; *s; s++)
+    if (sgml_fputc ((unsigned int) *s, out) == EOF)
+      return EOF;
+  
+  return 0;
+}
+
+static void print_confline (const char *varname, int type, const char *val, FILE *out)
+{
+  if (type == DT_SYN) return;
+  
+  switch (OutputFormat)
+  {
+    /* configuration file */
+    case F_CONF:
+    {
+      if (type == DT_STR || type == DT_RX || type == DT_ADDR || type == DT_PATH)
+      {
+       fprintf (out, "\n# set %s=\"", varname);
+       conf_print_strval (val, out);
+       fputs ("\"", out);
+      }
+      else if (type != DT_SYN)
+       fprintf (out, "\n# set %s=%s", varname, val);
+      
+      fprintf (out, "\n#\n# Name: %s", varname);
+      fprintf (out, "\n# Type: %s", type2human (type));
+      if (type == DT_STR || type == DT_RX || type == DT_ADDR || type == DT_PATH)
+      {
+       fputs ("\n# Default: \"", out);
+       conf_print_strval (val, out);
+       fputs ("\"", out);
+      }
+      else
+       fprintf (out, "\n# Default: %s", val);
+
+      fputs ("\n# ", out);
+      break;
+    }
+
+    /* manual page */
+    case F_MAN:
+    {
+      fprintf (out, "\n.TP\n.B %s\n", varname);
+      fputs (".nf\n", out);
+      fprintf (out, "Type: %s\n", type2human (type));
+      if (type == DT_STR || type == DT_RX || type == DT_ADDR || type == DT_PATH)
+      {
+       fputs ("Default: \\(lq", out);
+       man_print_strval (val, out);
+       fputs ("\\(rq\n", out);
+      }
+      else
+       fprintf (out, "Default: %s\n", val);
+
+      fputs (".fi", out);
+
+      break;
+    }
+    
+    /* SGML based manual */
+    case F_SGML:
+    {
+      fputs ("\n<sect2>", out);  sgml_fputs (varname, out);
+      fprintf (out, "<label id=\"%s\">", varname);
+      fprintf (out, "\n<p>\nType: %s<newline>", type2human (type));
+      
+      if (type == DT_STR || type == DT_RX || type == DT_ADDR || type == DT_PATH)
+      {
+       fputs ("\nDefault: &dquot;", out);
+       sgml_print_strval (val, out);
+       fputs ("&dquot;\n", out);
+      }
+      else
+       fprintf (out, "\nDefault: %s\n", val);
+      break;
+    }
+    /* make gcc happy */
+    default:
+      break;
+  }
+}
+
+/**
+ ** Documentation line parser
+ **
+ ** The following code parses specially formatted documentation 
+ ** comments in init.h.
+ **
+ ** The format is very remotely inspired by nroff. Most important, it's
+ ** easy to parse and convert, and it was easy to generate from the SGML 
+ ** source of mutt's original manual.
+ **
+ ** - \fI switches to italics
+ ** - \fB switches to boldface
+ ** - \fP switches to normal display
+ ** - .dl on a line starts a definition list (name taken taken from HTML).
+ ** - .dt starts a term in a definition list.
+ ** - .dd starts a definition in a definition list.
+ ** - .de on a line finishes a definition list.
+ ** - .ts on a line starts a "tscreen" environment (name taken from SGML).
+ ** - .te on a line finishes this environment.
+ ** - .pp on a line starts a paragraph.
+ ** - \$word will be converted to a reference to word, where appropriate.
+ **   Note that \$$word is possible as well.
+ ** - '. ' in the beginning of a line expands to two space characters.
+ **   This is used to protect indentations in tables.
+ **/
+
+/* close eventually-open environments. */
+
+static int fd_recurse = 0;
+
+static int flush_doc (int docstat, FILE *out)
+{
+  if (docstat & D_INIT)
+    return D_INIT;
+
+  if (fd_recurse++)
+  {
+    fprintf (stderr, "%s: Internal error, recursion in flush_doc()!\n", Progname);
+    exit (1);
+  }
+
+  if (docstat & (D_TAB))
+    docstat = print_it (SP_END_TAB, NULL, out, docstat);
+
+  if (docstat & (D_DL))
+    docstat = print_it (SP_END_DL, NULL, out, docstat);
+
+  if (docstat & (D_EM | D_BF))
+    docstat = print_it (SP_END_FT, NULL, out, docstat);
+
+  docstat = print_it (SP_NEWLINE, NULL, out, 0);
+
+  fd_recurse--;
+  return D_INIT;
+}
+
+/* print something. */
+
+static int print_it (int special, char *str, FILE *out, int docstat)
+{
+  int onl = docstat & (D_NL|D_NP);
+  
+  docstat &= ~(D_NL|D_NP|D_INIT);
+
+  switch (OutputFormat)
+  {
+    /* configuration file */
+    case F_CONF:
+    {
+      switch (special)
+      {
+       static int Continuation = 0;
+
+       case SP_END_FT: docstat &= ~(D_EM|D_BF); break;
+       case SP_START_BF: docstat |= D_BF; break;
+       case SP_START_EM: docstat |= D_EM; break;
+       case SP_NEWLINE: 
+       {
+         if (onl)
+           docstat |= onl;
+         else
+         {
+           fputs ("\n# ", out);
+           docstat |= D_NL;
+         }
+         if (docstat & D_DL)
+           ++ Continuation;
+         break;
+       }
+       case SP_NEWPAR:
+       {
+         if (onl & D_NP)
+         {
+           docstat |= onl;
+           break;
+         }
+
+         if (!(onl & D_NL))
+           fputs ("\n# ", out);
+         fputs ("\n# ", out);
+         docstat |= D_NP;
+         break;
+       }
+       case SP_START_TAB: 
+       {
+         if (!onl) 
+           fputs ("\n# ", out);
+         docstat |= D_TAB;
+         break;
+       }
+       case SP_END_TAB:
+       {
+         docstat &= ~D_TAB;
+         docstat |= D_NL;
+         break;
+       }
+       case SP_START_DL:
+       {
+         docstat |= D_DL;
+         break;
+       }
+       case SP_DT:
+       {
+         Continuation = 0;
+         docstat |= D_DT;
+         break;
+       }
+       case SP_DD:
+       {
+         Continuation = 0;
+         break;
+       }
+       case SP_END_DL:
+       {
+         Continuation = 0;
+         docstat &= ~D_DL;
+         break;
+       }
+       case SP_STR:
+       {
+         if (Continuation)
+         {
+           Continuation = 0;
+           fputs ("        ", out);
+         }
+         fputs (str, out);
+         if (docstat & D_DT)
+         { 
+           int i;
+
+           for (i = strlen (str) ; i < 8 ; i++)
+             putc (' ', out);
+           docstat &= ~D_DT;
+           docstat |= D_NL;
+         }
+         break;
+       }
+      }
+      break;
+    }
+
+    /* manual page */
+    case F_MAN:
+    {
+      switch (special)
+      {
+       case SP_END_FT: 
+       {
+         fputs ("\\fP", out);
+         docstat &= ~(D_EM|D_BF);
+         break;
+       }
+       case SP_START_BF: 
+       {
+         fputs ("\\fB", out);
+         docstat |= D_BF;
+         docstat &= ~D_EM;
+         break;
+       }
+       case SP_START_EM:
+       {
+         fputs ("\\fI", out);
+         docstat |= D_EM;
+         docstat &= ~D_BF;
+         break;
+       }
+       case SP_NEWLINE:
+       {
+         if (onl)
+           docstat |= onl;
+         else
+         {
+           fputc ('\n', out);
+           docstat |= D_NL;
+         }
+         break;
+       }
+       case SP_NEWPAR:
+       {
+         if (onl & D_NP)
+         {
+           docstat |= onl;
+           break;
+         }
+
+         if (!(onl & D_NL))
+           fputc ('\n', out);
+         fputs (".IP\n", out);
+
+         docstat |= D_NP;
+         break;
+       }
+       case SP_START_TAB:
+       {
+         fputs ("\n.IP\n.DS\n.sp\n.ft CR\n.nf\n", out);
+         docstat |= D_TAB | D_NL;
+         break;
+       }
+       case SP_END_TAB:
+       {
+         fputs ("\n.fi\n.ec\n.ft P\n.sp\n", out);
+         docstat &= ~D_TAB;
+         docstat |= D_NL;
+         break;
+       }
+       case SP_START_DL:
+       {
+         fputs ("\n.RS", out);
+         docstat |= D_DL;
+         break;
+       }
+       case SP_DT:
+       {
+         fputs ("\n.IP ", out);
+         break;
+       }
+       case SP_DD:
+       {
+         fputs ("\n", out);
+         break;
+       }
+       case SP_END_DL:
+       {
+         fputs ("\n.RE", out);
+         docstat &= ~D_DL;
+         break;
+       }
+       case SP_STR:
+       {
+         while (*str)
+         {
+           for (; *str; str++)
+           {
+             if (*str == '"')
+               fputs ("\\(rq", out);
+             else if (*str == '\\')
+               fputs ("\\\\", out);
+             else if (!strncmp (str, "``", 2))
+             {
+               fputs ("\\(lq", out);
+               str++;
+             }
+             else if (!strncmp (str, "''", 2))
+             {
+               fputs ("\\(rq", out);
+               str++;
+             }
+             else
+               fputc (*str, out);
+           }
+         }
+         break;
+       }
+      }
+      break;
+    }
+
+    /* SGML based manual */
+    case F_SGML:
+    {
+      switch (special)
+      {
+       case SP_END_FT: 
+       {
+         if (docstat & D_EM) fputs ("</em>", out);
+         if (docstat & D_BF) fputs ("</bf>", out);
+         docstat &= ~(D_EM|D_BF);
+         break;
+       }
+       case SP_START_BF: 
+       {
+         fputs ("<bf>", out);
+         docstat |= D_BF;
+         docstat &= ~D_EM;
+         break;
+       }
+       case SP_START_EM:
+       {
+         fputs ("<em>", out);
+         docstat |= D_EM;
+         docstat &= ~D_BF;
+         break;
+       }
+       case SP_NEWLINE:
+       {
+         if (onl)
+           docstat |= onl;
+         else
+         {
+           fputc ('\n', out);
+           docstat |= D_NL;
+         }
+         break;
+       }
+       case SP_NEWPAR:
+       {
+         if (onl & D_NP)
+         {
+           docstat |= onl;
+           break;
+         }
+
+         if (!(onl & D_NL))
+           fputc ('\n', out);
+         fputs ("<p>\n", out);
+
+         docstat |= D_NP;
+         break;
+       }
+       case SP_START_TAB:
+       {
+         fputs ("\n<tscreen><verb>\n", out);
+         docstat |= D_TAB | D_NL;
+         break;
+       }
+       case SP_END_TAB:
+       {
+         fputs ("\n</verb></tscreen>", out);
+         docstat &= ~D_TAB;
+         docstat |= D_NL;
+         break;
+       }
+       case SP_START_DL:
+       {
+         fputs ("\n<descrip>\n", out);
+         docstat |= D_DL;
+         break;
+       }
+       case SP_DT:
+       {
+         fputs ("<tag>", out);
+         break;
+       }
+       case SP_DD:
+       {
+         fputs ("</tag>", out);
+         break;
+       }
+       case SP_END_DL:
+       {
+         fputs ("</descrip>\n", out);
+         docstat &= ~D_DL;
+         break;
+       }
+       case SP_STR:
+       {
+         if (docstat & D_TAB)
+           fputs (str, out);
+         else
+           sgml_fputs (str, out);
+         break;
+       }
+      }
+      break;
+    }
+    /* make gcc happy (unreached) */
+    default:
+      break;
+  }
+
+  return docstat;
+}
+
+void print_ref (FILE *out, int output_dollar, const char *ref)
+{
+  switch (OutputFormat)
+  {
+  case F_CONF:
+  case F_MAN:
+    if (output_dollar)
+      putc ('$', out);
+    fputs (ref, out);
+    break;
+
+  case F_SGML:
+    fprintf (out, "<ref id=\"%s\" name=\"", ref);
+    if (output_dollar)
+      fputs ("&dollar;", out);
+    sgml_fputs (ref, out);
+    fputs ("\">", out);
+    break;
+
+  default:
+    break;
+  }
+}
+
+static int commit_buff (char *buff, char **d, FILE *out, int docstat)
+{
+  if (*d > buff)
+  {
+    **d = '\0';
+    docstat = print_it (SP_STR, buff, out, docstat);
+    *d = buff;
+  }
+
+  return docstat;
+}
+
+static int handle_docline (char *l, FILE *out, int docstat)
+{
+  char buff[BUFFSIZE];
+  char *s, *d;
+  l = skip_ws (l);
+
+  if (Debug)
+    fprintf (stderr, "%s: handle_docline `%s'\n", Progname, l);
+  
+  if (!strncmp (l, ".pp", 3))
+    return print_it (SP_NEWPAR, NULL, out, docstat);
+  else if (!strncmp (l, ".ts", 3))
+    return print_it (SP_START_TAB, NULL, out, docstat);
+  else if (!strncmp (l, ".te", 3))
+    return print_it (SP_END_TAB, NULL, out, docstat);
+  else if (!strncmp (l, ".dl", 3))
+    return print_it (SP_START_DL, NULL, out, docstat);
+  else if (!strncmp (l, ".de", 3))
+    return print_it (SP_END_DL, NULL, out, docstat);
+  else if (!strncmp (l, ". ", 2))
+    *l = ' ';
+
+  for (s = l, d = buff; *s; s++)
+  {
+    if (!strncmp (s, "\\(as", 4))
+    {
+      *d++ = '*';
+      s += 3;
+    }
+    else if (!strncmp (s, "\\(rs", 4))
+    {
+      *d++ = '\\';
+      s += 3;
+    }
+    else if (!strncmp (s, "\\fI", 3))
+    {
+      docstat = commit_buff (buff, &d, out, docstat);
+      docstat = print_it (SP_START_EM, NULL, out, docstat);
+      s += 2;
+    }
+    else if (!strncmp (s, "\\fB", 3))
+    {
+      docstat = commit_buff (buff, &d, out, docstat);
+      docstat = print_it (SP_START_BF, NULL, out, docstat);
+      s += 2;
+    }
+    else if (!strncmp (s, "\\fP", 3))
+    {
+      docstat = commit_buff (buff, &d, out, docstat);
+      docstat = print_it (SP_END_FT, NULL, out, docstat);
+      s += 2;
+    }
+    else if (!strncmp (s, ".dt", 3))
+    {
+      docstat = commit_buff (buff, &d, out, docstat);
+      docstat = print_it (SP_DT, NULL, out, docstat);
+      s += 3;
+    }
+    else if (!strncmp (s, ".dd", 3))
+    {
+      docstat = commit_buff (buff, &d, out, docstat);
+      docstat = print_it (SP_DD, NULL, out, docstat);
+      s += 3;
+    }
+    else if (*s == '$')
+    {
+      int output_dollar = 0;
+      char *ref;
+      char save;
+
+      ++s;
+      if (*s == '$')
+      {
+       output_dollar = 1;
+       ++s;
+      }
+      if (*s == '$')
+      {
+       *d++ = '$';
+      }
+      else
+      {
+       ref = s;
+       while (isalnum ((unsigned char) *s) || *s == '-' || *s == '_')
+         ++s;
+
+       docstat = commit_buff (buff, &d, out, docstat);
+       save = *s;
+       *s = 0;
+       print_ref (out, output_dollar, ref);
+       *s = save;
+       --s;
+      }
+    }
+    else
+      *d++ = *s;
+  }
+
+  docstat = commit_buff (buff, &d, out, docstat);
+  return print_it (SP_NEWLINE, NULL, out, docstat);
+}
diff --git a/mapping.h b/mapping.h
new file mode 100644 (file)
index 0000000..b944e2a
--- /dev/null
+++ b/mapping.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#ifndef MAPPING_H
+#define MAPPING_H
+
+struct mapping_t
+{
+  char *name;
+  int value;
+};
+
+char *mutt_getnamebyvalue (int, const struct mapping_t *);
+char *mutt_compile_help (char *, size_t, int, struct mapping_t *);
+
+int mutt_getvaluebyname (const char *, const struct mapping_t *);
+
+#endif
diff --git a/mbox.c b/mbox.c
new file mode 100644 (file)
index 0000000..dc900e4
--- /dev/null
+++ b/mbox.c
@@ -0,0 +1,1214 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+/* This file contains code to parse ``mbox'' and ``mmdf'' style mailboxes */
+
+#include "mutt.h"
+#include "mailbox.h"
+#include "mx.h"
+#include "sort.h"
+#include "copy.h"
+
+#include <sys/stat.h>
+#include <dirent.h>
+#include <string.h>
+#include <utime.h>
+#include <sys/file.h>
+#include <errno.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+/* struct used by mutt_sync_mailbox() to store new offsets */
+struct m_update_t
+{
+  short valid;
+  long hdr;
+  long body;
+  long lines;
+  long length;
+};
+
+/* parameters:
+ * ctx - context to lock
+ * excl - exclusive lock?
+ * retry - should retry if unable to lock?
+ */
+int mbox_lock_mailbox (CONTEXT *ctx, int excl, int retry)
+{
+  int r;
+
+  if ((r = mx_lock_file (ctx->path, fileno (ctx->fp), excl, 1, retry)) == 0)
+    ctx->locked = 1;
+  else if (retry && !excl)
+  {
+    ctx->readonly = 1;
+    return 0;
+  }
+  
+  return (r);
+}
+
+void mbox_unlock_mailbox (CONTEXT *ctx)
+{
+  if (ctx->locked)
+  {
+    fflush (ctx->fp);
+
+    mx_unlock_file (ctx->path, fileno (ctx->fp), 1);
+    ctx->locked = 0;
+  }
+}
+
+int mmdf_parse_mailbox (CONTEXT *ctx)
+{
+  char buf[HUGE_STRING];
+  char return_path[LONG_STRING];
+  int count = 0, oldmsgcount = ctx->msgcount;
+  int lines;
+  time_t t, tz;
+  long loc, tmploc;
+  HEADER *hdr;
+  struct stat sb;
+#ifdef NFS_ATTRIBUTE_HACK
+  struct utimbuf newtime;
+#endif
+
+  if (stat (ctx->path, &sb) == -1)
+  {
+    mutt_perror (ctx->path);
+    return (-1);
+  }
+  ctx->mtime = sb.st_mtime;
+  ctx->size = sb.st_size;
+
+#ifdef NFS_ATTRIBUTE_HACK
+  if (sb.st_mtime > sb.st_atime)
+  {
+    newtime.modtime = sb.st_mtime;
+    newtime.actime = time (NULL);
+    utime (ctx->path, &newtime);
+  }
+#endif
+
+  /* precompute the local timezone to speed up calculation of the
+     received time */
+  tz = mutt_local_tz (0);
+
+  buf[sizeof (buf) - 1] = 0;
+  
+  FOREVER
+  {
+    if (fgets (buf, sizeof (buf) - 1, ctx->fp) == NULL)
+      break;
+
+    if (mutt_strcmp (buf, MMDF_SEP) == 0)
+    {
+      loc = ftell (ctx->fp);
+      
+      count++;
+      if (!ctx->quiet && ReadInc && ((count % ReadInc == 0) || count == 1))
+       mutt_message (_("Reading %s... %d (%d%%)"), ctx->path, count,
+                     loc / (ctx->size / 100 + 1));
+
+
+      if (ctx->msgcount == ctx->hdrmax)
+       mx_alloc_memory (ctx);
+      ctx->hdrs[ctx->msgcount] = hdr = mutt_new_header ();
+      hdr->offset = loc;
+      hdr->index = ctx->msgcount;
+
+      if (fgets (buf, sizeof (buf) - 1, ctx->fp) == NULL)
+      {
+       /* TODO: memory leak??? */
+       dprint (1, (debugfile, "mmdf_parse_mailbox: unexpected EOF\n"));
+       break;
+      }
+
+      return_path[0] = 0;
+
+      if (!is_from (buf, return_path, sizeof (return_path), &t))
+      {
+       if (fseek (ctx->fp, loc, SEEK_SET) != 0)
+       {
+         dprint (1, (debugfile, "mmdf_parse_mailbox: fseek() failed\n"));
+         mutt_error _("Mailbox is corrupt!");
+         return (-1);
+       }
+      } 
+      else
+       hdr->received = t - tz;
+
+      hdr->env = mutt_read_rfc822_header (ctx->fp, hdr, 0, 0);
+
+      loc = ftell (ctx->fp);
+
+      if (hdr->content->length > 0 && hdr->lines > 0)
+      {
+       tmploc = loc + hdr->content->length;
+
+       if (0 < tmploc && tmploc < ctx->size)
+       {
+         if (fseek (ctx->fp, tmploc, SEEK_SET) != 0 ||
+             fgets (buf, sizeof (buf) - 1, ctx->fp) == NULL ||
+             mutt_strcmp (MMDF_SEP, buf) != 0)
+         {
+           if (fseek (ctx->fp, loc, SEEK_SET) != 0)
+             dprint (1, (debugfile, "mmdf_parse_mailbox: fseek() failed\n"));
+           hdr->content->length = -1;
+         }
+       }
+       else
+         hdr->content->length = -1;
+      }
+      else
+       hdr->content->length = -1;
+
+      if (hdr->content->length < 0)
+      {
+       lines = -1;
+       do {
+         loc = ftell (ctx->fp);
+         if (fgets (buf, sizeof (buf) - 1, ctx->fp) == NULL)
+           break;
+         lines++;
+       } while (mutt_strcmp (buf, MMDF_SEP) != 0);
+
+       hdr->lines = lines;
+       hdr->content->length = loc - hdr->content->offset;
+      }
+
+      if (!hdr->env->return_path && return_path[0])
+       hdr->env->return_path = rfc822_parse_adrlist (hdr->env->return_path, return_path);
+
+      if (!hdr->env->from)
+       hdr->env->from = rfc822_cpy_adr (hdr->env->return_path);
+
+      ctx->msgcount++;
+    }
+    else
+    {
+      dprint (1, (debugfile, "mmdf_parse_mailbox: corrupt mailbox!\n"));
+      mutt_error _("Mailbox is corrupt!");
+      return (-1);
+    }
+  }
+
+  if (ctx->msgcount > oldmsgcount)
+    mx_update_context (ctx, ctx->msgcount - oldmsgcount);
+
+  return (0);
+}
+
+/* Note that this function is also called when new mail is appended to the
+ * currently open folder, and NOT just when the mailbox is initially read.
+ *
+ * NOTE: it is assumed that the mailbox being read has been locked before
+ * this routine gets called.  Strange things could happen if it's not!
+ */
+int mbox_parse_mailbox (CONTEXT *ctx)
+{
+  struct stat sb;
+  char buf[HUGE_STRING], return_path[STRING];
+  HEADER *curhdr;
+  time_t t, tz;
+  int count = 0, lines = 0;
+  long loc;
+#ifdef NFS_ATTRIBUTE_HACK
+  struct utimbuf newtime;
+#endif
+
+  /* Save information about the folder at the time we opened it. */
+  if (stat (ctx->path, &sb) == -1)
+  {
+    mutt_perror (ctx->path);
+    return (-1);
+  }
+
+  ctx->size = sb.st_size;
+  ctx->mtime = sb.st_mtime;
+
+#ifdef NFS_ATTRIBUTE_HACK
+  if (sb.st_mtime > sb.st_atime)
+  {
+    newtime.modtime = sb.st_mtime;
+    newtime.actime = time (NULL);
+    utime (ctx->path, &newtime);
+  }
+#endif
+
+  if (!ctx->readonly)
+    ctx->readonly = access (ctx->path, W_OK) ? 1 : 0;
+
+  /* precompute the local timezone to speed up calculation of the
+     date received */
+  tz = mutt_local_tz (0);
+
+  loc = ftell (ctx->fp);
+  while (fgets (buf, sizeof (buf), ctx->fp) != NULL)
+  {
+    if (is_from (buf, return_path, sizeof (return_path), &t))
+    {
+      /* Save the Content-Length of the previous message */
+      if (count > 0)
+      {
+#define PREV ctx->hdrs[ctx->msgcount-1]
+
+       if (PREV->content->length < 0)
+       {
+         PREV->content->length = loc - PREV->content->offset - 1;
+         if (PREV->content->length < 0)
+           PREV->content->length = 0;
+       }
+       if (!PREV->lines)
+         PREV->lines = lines ? lines - 1 : 0;
+      }
+
+      count++;
+
+      if (!ctx->quiet && ReadInc && ((count % ReadInc == 0) || count == 1))
+       mutt_message (_("Reading %s... %d (%d%%)"), ctx->path, count,
+                     ftell (ctx->fp) / (ctx->size / 100 + 1));
+
+      if (ctx->msgcount == ctx->hdrmax)
+       mx_alloc_memory (ctx);
+      
+      curhdr = ctx->hdrs[ctx->msgcount] = mutt_new_header ();
+      curhdr->received = t - tz;
+      curhdr->offset = loc;
+      curhdr->index = ctx->msgcount;
+       
+      curhdr->env = mutt_read_rfc822_header (ctx->fp, curhdr, 0, 0);
+
+      /* if we know how long this message is, either just skip over the body,
+       * or if we don't know how many lines there are, count them now (this will
+       * save time by not having to search for the next message marker).
+       */
+      if (curhdr->content->length > 0)
+      {
+       long tmploc;
+
+       loc = ftell (ctx->fp);
+       tmploc = loc + curhdr->content->length + 1;
+
+       if (0 < tmploc && tmploc < ctx->size)
+       {
+         /*
+          * check to see if the content-length looks valid.  we expect to
+          * to see a valid message separator at this point in the stream
+          */
+         if (fseek (ctx->fp, tmploc, SEEK_SET) != 0 ||
+             fgets (buf, sizeof (buf), ctx->fp) == NULL ||
+             mutt_strncmp ("From ", buf, 5) != 0)
+         {
+           dprint (1, (debugfile, "mbox_parse_mailbox: bad content-length in message %d (cl=%ld)\n", curhdr->index, curhdr->content->length));
+           dprint (1, (debugfile, "\tLINE: %s", buf));
+           if (fseek (ctx->fp, loc, SEEK_SET) != 0) /* nope, return the previous position */
+           {
+             dprint (1, (debugfile, "mbox_parse_mailbox: fseek() failed\n"));
+           }
+           curhdr->content->length = -1;
+         }
+       }
+       else if (tmploc != ctx->size)
+       {
+         /* content-length would put us past the end of the file, so it
+          * must be wrong
+          */
+         curhdr->content->length = -1;
+       }
+
+       if (curhdr->content->length != -1)
+       {
+         /* good content-length.  check to see if we know how many lines
+          * are in this message.
+          */
+         if (curhdr->lines == 0)
+         {
+           int cl = curhdr->content->length;
+
+           /* count the number of lines in this message */
+           if (fseek (ctx->fp, loc, SEEK_SET) != 0)
+             dprint (1, (debugfile, "mbox_parse_mailbox: fseek() failed\n"));
+           while (cl-- > 0)
+           {
+             if (fgetc (ctx->fp) == '\n')
+               curhdr->lines++;
+           }
+         }
+
+         /* return to the offset of the next message separator */
+         if (fseek (ctx->fp, tmploc, SEEK_SET) != 0)
+           dprint (1, (debugfile, "mbox_parse_mailbox: fseek() failed\n"));
+       }
+      }
+
+      ctx->msgcount++;
+
+      if (!curhdr->env->return_path && return_path[0])
+       curhdr->env->return_path = rfc822_parse_adrlist (curhdr->env->return_path, return_path);
+
+      if (!curhdr->env->from)
+       curhdr->env->from = rfc822_cpy_adr (curhdr->env->return_path);
+
+      lines = 0;
+    }
+    else
+      lines++;
+    
+    loc = ftell (ctx->fp);
+  }
+  
+  /*
+   * Only set the content-length of the previous message if we have read more
+   * than one message during _this_ invocation.  If this routine is called
+   * when new mail is received, we need to make sure not to clobber what
+   * previously was the last message since the headers may be sorted.
+   */
+  if (count > 0)
+  {
+    if (PREV->content->length < 0)
+    {
+      PREV->content->length = ftell (ctx->fp) - PREV->content->offset - 1;
+      if (PREV->content->length < 0)
+       PREV->content->length = 0;
+    }
+
+    if (!PREV->lines)
+      PREV->lines = lines ? lines - 1 : 0;
+
+    mx_update_context (ctx, count);
+  }
+
+  return (0);
+}
+
+#undef PREV
+
+/* open a mbox or mmdf style mailbox */
+int mbox_open_mailbox (CONTEXT *ctx)
+{
+  int rc;
+
+  if ((ctx->fp = fopen (ctx->path, "r")) == NULL)
+  {
+    mutt_perror (ctx->path);
+    return (-1);
+  }
+  mutt_block_signals ();
+  if (mbox_lock_mailbox (ctx, 0, 1) == -1)
+  {
+    mutt_unblock_signals ();
+    return (-1);
+  }
+
+  if (ctx->magic == M_MBOX)
+    rc = mbox_parse_mailbox (ctx);
+  else if (ctx->magic == M_MMDF)
+    rc = mmdf_parse_mailbox (ctx);
+  else
+    rc = -1;
+
+  mbox_unlock_mailbox (ctx);
+  mutt_unblock_signals ();
+  return (rc);
+}
+
+/* return 1 if address lists are strictly identical */
+static int strict_addrcmp (const ADDRESS *a, const ADDRESS *b)
+{
+  while (a && b)
+  {
+    if (mutt_strcmp (a->mailbox, b->mailbox) ||
+       mutt_strcmp (a->personal, b->personal))
+      return (0);
+
+    a = a->next;
+    b = b->next;
+  }
+  if (a || b)
+    return (0);
+
+  return (1);
+}
+
+static int strict_cmp_lists (const LIST *a, const LIST *b)
+{
+  while (a && b)
+  {
+    if (mutt_strcmp (a->data, b->data))
+      return (0);
+
+    a = a->next;
+    b = b->next;
+  }
+  if (a || b)
+    return (0);
+
+  return (1);
+}
+
+static int strict_cmp_envelopes (const ENVELOPE *e1, const ENVELOPE *e2)
+{
+  if (e1 && e2)
+  {
+    if (mutt_strcmp (e1->message_id, e2->message_id) ||
+       mutt_strcmp (e1->subject, e2->subject) ||
+       !strict_cmp_lists (e1->references, e2->references) ||
+       !strict_addrcmp (e1->from, e2->from) ||
+       !strict_addrcmp (e1->sender, e2->sender) ||
+       !strict_addrcmp (e1->reply_to, e2->reply_to) ||
+       !strict_addrcmp (e1->to, e2->to) ||
+       !strict_addrcmp (e1->cc, e2->cc) ||
+       !strict_addrcmp (e1->return_path, e2->return_path))
+      return (0);
+    else
+      return (1);
+  }
+  else
+  {
+    if (e1 == NULL && e2 == NULL)
+      return (1);
+    else
+      return (0);
+  }
+}
+
+static int strict_cmp_parameters (const PARAMETER *p1, const PARAMETER *p2)
+{
+  while (p1 && p2)
+  {
+    if (mutt_strcmp (p1->attribute, p2->attribute) ||
+       mutt_strcmp (p1->value, p2->value))
+      return (0);
+
+    p1 = p1->next;
+    p2 = p2->next;
+  }
+  if (p1 || p2)
+    return (0);
+
+  return (1);
+}
+
+static int strict_cmp_bodies (const BODY *b1, const BODY *b2)
+{
+  if (b1->type != b2->type ||
+      b1->encoding != b2->encoding ||
+      mutt_strcmp (b1->subtype, b2->subtype) ||
+      mutt_strcmp (b1->description, b2->description) ||
+      !strict_cmp_parameters (b1->parameter, b2->parameter) ||
+      b1->length != b2->length)
+    return (0);
+  return (1);
+}
+
+/* return 1 if headers are strictly identical */
+int mbox_strict_cmp_headers (const HEADER *h1, const HEADER *h2)
+{
+  if (h1 && h2)
+  {
+    if (h1->received != h2->received ||
+       h1->date_sent != h2->date_sent ||
+       h1->content->length != h2->content->length ||
+       h1->lines != h2->lines ||
+       h1->zhours != h2->zhours ||
+       h1->zminutes != h2->zminutes ||
+       h1->zoccident != h2->zoccident ||
+       h1->mime != h2->mime ||
+       !strict_cmp_envelopes (h1->env, h2->env) ||
+       !strict_cmp_bodies (h1->content, h2->content))
+      return (0);
+    else
+      return (1);
+  }
+  else
+  {
+    if (h1 == NULL && h2 == NULL)
+      return (1);
+    else
+      return (0);
+  }
+}
+
+/* check to see if the mailbox has changed on disk.
+ *
+ * return values:
+ *     M_REOPENED      mailbox has been reopened
+ *     M_NEW_MAIL      new mail has arrived!
+ *     M_LOCKED        couldn't lock the file
+ *     0               no change
+ *     -1              error
+ */
+int mbox_check_mailbox (CONTEXT *ctx, int *index_hint)
+{
+  struct stat st;
+  char buffer[LONG_STRING];
+  int unlock = 0;
+  int modified = 0;
+
+  if (stat (ctx->path, &st) == 0)
+  {
+    if (st.st_mtime == ctx->mtime && st.st_size == ctx->size)
+      return (0);
+
+    if (st.st_size == ctx->size)
+    {
+      /* the file was touched, but it is still the same length, so just exit */
+      ctx->mtime = st.st_mtime;
+      return (0);
+    }
+
+    if (st.st_size > ctx->size)
+    {
+      /* lock the file if it isn't already */
+      if (!ctx->locked)
+      {
+       mutt_block_signals ();
+       if (mbox_lock_mailbox (ctx, 0, 0) == -1)
+       {
+         mutt_unblock_signals ();
+         /* we couldn't lock the mailbox, but nothing serious happened:
+          * probably the new mail arrived: no reason to wait till we can
+          * parse it: we'll get it on the next pass
+          */
+         return (M_LOCKED);
+       }
+       unlock = 1;
+      }
+
+      /*
+       * Check to make sure that the only change to the mailbox is that 
+       * message(s) were appended to this file.  My heuristic is that we should
+       * see the message separator at *exactly* what used to be the end of the
+       * folder.
+       */
+      if (fseek (ctx->fp, ctx->size, SEEK_SET) != 0)
+       dprint (1, (debugfile, "mbox_check_mailbox: fseek() failed\n"));
+      if (fgets (buffer, sizeof (buffer), ctx->fp) != NULL)
+      {
+       if ((ctx->magic == M_MBOX && mutt_strncmp ("From ", buffer, 5) == 0) ||
+           (ctx->magic == M_MMDF && mutt_strcmp (MMDF_SEP, buffer) == 0))
+       {
+         if (fseek (ctx->fp, ctx->size, SEEK_SET) != 0)
+           dprint (1, (debugfile, "mbox_check_mailbox: fseek() failed\n"));
+         if (ctx->magic == M_MBOX)
+           mbox_parse_mailbox (ctx);
+         else
+           mmdf_parse_mailbox (ctx);
+
+         /* Only unlock the folder if it was locked inside of this routine.
+          * It may have been locked elsewhere, like in
+          * mutt_checkpoint_mailbox().
+          */
+
+         if (unlock)
+         {
+           mbox_unlock_mailbox (ctx);
+           mutt_unblock_signals ();
+         }
+
+         return (M_NEW_MAIL); /* signal that new mail arrived */
+       }
+       else
+         modified = 1;
+      }
+      else
+      {
+       dprint (1, (debugfile, "mbox_check_mailbox: fgets returned NULL.\n"));
+       modified = 1;
+      }
+    }
+    else
+      modified = 1;
+  }
+
+  if (modified)
+  {
+    if (mutt_reopen_mailbox (ctx, index_hint) != -1)
+    {
+      if (unlock)
+      {
+       mbox_unlock_mailbox (ctx);
+       mutt_unblock_signals ();
+      }
+      return (M_REOPENED);
+    }
+  }
+
+  /* fatal error */
+
+  mbox_unlock_mailbox (ctx);
+  mx_fastclose_mailbox (ctx);
+  mutt_unblock_signals ();
+  mutt_error _("Mailbox was corrupted!");
+  return (-1);
+}
+
+/* return values:
+ *     0       success
+ *     -1      failure
+ */
+int mbox_sync_mailbox (CONTEXT *ctx, int *index_hint)
+{
+  char tempfile[_POSIX_PATH_MAX];
+  char buf[32];
+  int i, j, save_sort = SORT_ORDER;
+  int rc = -1;
+  int need_sort = 0; /* flag to resort mailbox if new mail arrives */
+  int first = -1;      /* first message to be written */
+  long offset; /* location in mailbox to write changed messages */
+  struct stat statbuf;
+  struct utimbuf utimebuf;
+  struct m_update_t *newOffset = NULL;
+  struct m_update_t *oldOffset = NULL;
+  FILE *fp = NULL;
+
+  /* sort message by their position in the mailbox on disk */
+  if (Sort != SORT_ORDER)
+  {
+    save_sort = Sort;
+    Sort = SORT_ORDER;
+    mutt_sort_headers (ctx, 0);
+  }
+
+  /* need to open the file for writing in such a way that it does not truncate
+   * the file, so use read-write mode.
+   */
+  if ((ctx->fp = freopen (ctx->path, "r+", ctx->fp)) == NULL)
+  {
+    mx_fastclose_mailbox (ctx);
+    mutt_error _("Fatal error!  Could not reopen mailbox!");
+    return (-1);
+  }
+
+  mutt_block_signals ();
+
+  if (mbox_lock_mailbox (ctx, 1, 1) == -1)
+  {
+    mutt_unblock_signals ();
+    mutt_error _("Unable to lock mailbox!");
+    goto bail;
+  }
+
+  /* Check to make sure that the file hasn't changed on disk */
+  if ((i = mbox_check_mailbox (ctx, index_hint)) == M_NEW_MAIL ||  i == M_REOPENED)
+  {
+    /* new mail arrived, or mailbox reopened */
+    need_sort = i;
+    rc = i;
+    goto bail;
+  }
+  else if (i < 0)
+  {
+    /* fatal error */
+    Sort = save_sort;
+    return (-1);
+  }
+
+  /* Create a temporary file to write the new version of the mailbox in. */
+  mutt_mktemp (tempfile);
+  if ((i = open (tempfile, O_WRONLY | O_EXCL | O_CREAT, 0600)) == -1 ||
+      (fp = fdopen (i, "w")) == NULL)
+  {
+    if (-1 != i)
+    {
+      close (i);
+      unlink (tempfile);
+    }
+    mutt_error _("Could not create temporary file!");
+    mutt_sleep (5);
+    goto bail;
+  }
+
+  /* find the first deleted/changed message.  we save a lot of time by only
+   * rewriting the mailbox from the point where it has actually changed.
+   */
+  for (i = 0 ; i < ctx->msgcount && !ctx->hdrs[i]->deleted && 
+               !ctx->hdrs[i]->changed && !ctx->hdrs[i]->attach_del; i++)
+    ;
+  if (i == ctx->msgcount)
+  { 
+    /* this means ctx->changed or ctx->deleted was set, but no
+     * messages were found to be changed or deleted.  This should
+     * never happen, is we presume it is a bug in mutt.
+     */
+    mutt_error _("sync: mbox modified, but no modified messages! (report this bug)");
+    mutt_sleep(5); /* the mutt_error /will/ get cleared! */
+    dprint(1, (debugfile, "mbox_sync_mailbox(): no modified messages.\n"));
+    unlink (tempfile);
+    goto bail;
+  }
+
+    /* save the index of the first changed/deleted message */
+  first = i; 
+  /* where to start overwriting */
+  offset = ctx->hdrs[i]->offset; 
+
+  /* the offset stored in the header does not include the MMDF_SEP, so make
+   * sure we seek to the correct location
+   */
+  if (ctx->magic == M_MMDF)
+    offset -= (sizeof MMDF_SEP - 1);
+  
+  /* allocate space for the new offsets */
+  newOffset = safe_calloc (ctx->msgcount - first, sizeof (struct m_update_t));
+  oldOffset = safe_calloc (ctx->msgcount - first, sizeof (struct m_update_t));
+
+  for (i = first, j = 0; i < ctx->msgcount; i++)
+  {
+    /*
+     * back up some information which is needed to restore offsets when
+     * something fails.
+     */
+    
+    oldOffset[i-first].valid  = 1;
+    oldOffset[i-first].hdr    = ctx->hdrs[i]->offset;
+    oldOffset[i-first].body   = ctx->hdrs[i]->content->offset;
+    oldOffset[i-first].lines  = ctx->hdrs[i]->lines;
+    oldOffset[i-first].length = ctx->hdrs[i]->content->length;
+    
+    if (! ctx->hdrs[i]->deleted)
+    {
+      j++;
+      if (!ctx->quiet && WriteInc && ((i % WriteInc) == 0 || j == 1))
+       mutt_message (_("Writing messages... %d (%d%%)"), i,
+                     ftell (ctx->fp) / (ctx->size / 100 + 1));
+
+      if (ctx->magic == M_MMDF)
+      {
+       if (fputs (MMDF_SEP, fp) == EOF)
+       {
+         mutt_perror (tempfile);
+         mutt_sleep (5);
+         unlink (tempfile);
+         goto bail;
+       }
+         
+      }
+
+      /* save the new offset for this message.  we add `offset' because the
+       * temporary file only contains saved message which are located after
+       * `offset' in the real mailbox
+       */
+      newOffset[i - first].hdr = ftell (fp) + offset;
+
+      if (mutt_copy_message (fp, ctx, ctx->hdrs[i], M_CM_UPDATE, CH_FROM | CH_UPDATE | CH_UPDATE_LEN) == -1)
+      {
+       mutt_perror (tempfile);
+       mutt_sleep (5);
+       unlink (tempfile);
+       goto bail;
+      }
+
+      /* Since messages could have been deleted, the offsets stored in memory
+       * will be wrong, so update what we can, which is the offset of this
+       * message, and the offset of the body.  If this is a multipart message,
+       * we just flush the in memory cache so that the message will be reparsed
+       * if the user accesses it later.
+       */
+      newOffset[i - first].body = ftell (fp) - ctx->hdrs[i]->content->length + offset;
+      mutt_free_body (&ctx->hdrs[i]->content->parts);
+
+      switch(ctx->magic)
+      {
+       case M_MMDF: 
+         if(fputs(MMDF_SEP, fp) == EOF) 
+         {
+           mutt_perror (tempfile);
+           mutt_sleep (5);
+           unlink (tempfile);
+           goto bail; 
+         }
+         break;
+       default:
+         if(fputs("\n", fp) == EOF) 
+         {
+           mutt_perror (tempfile);
+           mutt_sleep (5);
+           unlink (tempfile);
+           goto bail;
+         }
+      }
+    }
+  }
+  
+  if (fclose (fp) != 0)
+  {
+    fp = NULL;
+    dprint(1, (debugfile, "mbox_sync_mailbox: fclose() returned non-zero.\n"));
+    unlink (tempfile);
+    mutt_perror (tempfile);
+    mutt_sleep (5);
+    goto bail;
+  }
+  fp = NULL;
+
+  /* Save the state of this folder. */
+  if (stat (ctx->path, &statbuf) == -1)
+  {
+    mutt_perror (ctx->path);
+    mutt_sleep (5);
+    unlink (tempfile);
+    goto bail;
+  }
+
+  if ((fp = fopen (tempfile, "r")) == NULL)
+  {
+    mutt_unblock_signals ();
+    mx_fastclose_mailbox (ctx);
+    dprint (1, (debugfile, "mbox_sync_mailbox: unable to reopen temp copy of mailbox!\n"));
+    mutt_perror (tempfile);
+    mutt_sleep (5);
+    return (-1);
+  }
+
+  if (fseek (ctx->fp, offset, SEEK_SET) != 0 ||  /* seek the append location */
+      /* do a sanity check to make sure the mailbox looks ok */
+      fgets (buf, sizeof (buf), ctx->fp) == NULL ||
+      (ctx->magic == M_MBOX && mutt_strncmp ("From ", buf, 5) != 0) ||
+      (ctx->magic == M_MMDF && mutt_strcmp (MMDF_SEP, buf) != 0))
+  {
+    dprint (1, (debugfile, "mbox_sync_mailbox: message not in expected position."));
+    dprint (1, (debugfile, "\tLINE: %s\n", buf));
+    i = -1;
+  }
+  else
+  {
+    if (fseek (ctx->fp, offset, SEEK_SET) != 0) /* return to proper offset */
+    {
+      i = -1;
+      dprint (1, (debugfile, "mbox_sync_mailbox: fseek() failed\n"));
+    }
+    else
+    {
+      /* copy the temp mailbox back into place starting at the first
+       * change/deleted message
+       */
+      mutt_message _("Committing changes...");
+      i = mutt_copy_stream (fp, ctx->fp);
+
+      if (ferror (ctx->fp))
+        i = -1;
+    }
+    if (i == 0)
+    {
+      ctx->size = ftell (ctx->fp); /* update the size of the mailbox */
+      ftruncate (fileno (ctx->fp), ctx->size);
+    }
+  }
+
+  fclose (fp);
+  fp = NULL;
+  mbox_unlock_mailbox (ctx);
+
+  if (fclose (ctx->fp) != 0 || i == -1)
+  {
+    /* error occured while writing the mailbox back, so keep the temp copy
+     * around
+     */
+    
+    char savefile[_POSIX_PATH_MAX];
+    
+    snprintf (savefile, sizeof (savefile), "%s/mutt.%s-%s-%d",
+             NONULL (Tempdir), NONULL(Username), NONULL(Hostname), getpid ());
+    rename (tempfile, savefile);
+    mutt_unblock_signals ();
+    mx_fastclose_mailbox (ctx);
+    mutt_pretty_mailbox (savefile);
+    mutt_error (_("Write failed!  Saved partial mailbox to %s"), savefile);
+    mutt_sleep (5);
+    return (-1);
+  }
+
+  /* Restore the previous access/modification times */
+  utimebuf.actime = statbuf.st_atime;
+  utimebuf.modtime = statbuf.st_mtime;
+  utime (ctx->path, &utimebuf);
+
+  /* reopen the mailbox in read-only mode */
+  if ((ctx->fp = fopen (ctx->path, "r")) == NULL)
+  {
+    unlink (tempfile);
+    mutt_unblock_signals ();
+    mx_fastclose_mailbox (ctx);
+    mutt_error _("Fatal error!  Could not reopen mailbox!");
+    Sort = save_sort;
+    return (-1);
+  }
+
+  /* update the offsets of the rewritten messages */
+  for (i = first, j = first; i < ctx->msgcount; i++)
+  {
+    if (!ctx->hdrs[i]->deleted)
+    {
+      ctx->hdrs[i]->offset = newOffset[i - first].hdr;
+      ctx->hdrs[i]->content->hdr_offset = newOffset[i - first].hdr;
+      ctx->hdrs[i]->content->offset = newOffset[i - first].body;
+      ctx->hdrs[i]->index = j++;
+    }
+  }
+  FREE (&newOffset);
+  FREE (&oldOffset);
+  unlink (tempfile); /* remove partial copy of the mailbox */
+  mutt_unblock_signals ();
+  Sort = save_sort; /* Restore the default value. */
+
+  return (0); /* signal success */
+
+bail:  /* Come here in case of disaster */
+
+  safe_fclose (&fp);
+
+  /* restore offsets, as far as they are valid */
+  if (first >= 0 && oldOffset)
+  {
+    for (i = first; i < ctx->msgcount && oldOffset[i-first].valid; i++)
+    {
+      ctx->hdrs[i]->offset = oldOffset[i-first].hdr;
+      ctx->hdrs[i]->content->hdr_offset = oldOffset[i-first].hdr;
+      ctx->hdrs[i]->content->offset = oldOffset[i-first].body;
+      ctx->hdrs[i]->lines = oldOffset[i-first].lines;
+      ctx->hdrs[i]->content->length = oldOffset[i-first].length;
+    }
+  }
+  
+  /* this is ok to call even if we haven't locked anything */
+  mbox_unlock_mailbox (ctx);
+
+  mutt_unblock_signals ();
+  FREE (&newOffset);
+  FREE (&oldOffset);
+
+  if ((ctx->fp = freopen (ctx->path, "r", ctx->fp)) == NULL)
+  {
+    mutt_error _("Could not reopen mailbox!");
+    mx_fastclose_mailbox (ctx);
+    return (-1);
+  }
+
+  if (need_sort || save_sort != Sort)
+  {
+    Sort = save_sort;
+    /* if the mailbox was reopened, the thread tree will be invalid so make
+     * sure to start threading from scratch.  */
+    mutt_sort_headers (ctx, (need_sort == M_REOPENED));
+  }
+
+  return rc;
+}
+
+/* close a mailbox opened in write-mode */
+int mbox_close_mailbox (CONTEXT *ctx)
+{
+  mx_unlock_file (ctx->path, fileno (ctx->fp), 1);
+  mutt_unblock_signals ();
+  mx_fastclose_mailbox (ctx);
+  return 0;
+}
+
+int mutt_reopen_mailbox (CONTEXT *ctx, int *index_hint)
+{
+  int (*cmp_headers) (const HEADER *, const HEADER *) = NULL;
+  HEADER **old_hdrs;
+  int old_msgcount;
+  int msg_mod = 0;
+  int index_hint_set;
+  int i, j;
+  int rc = -1;
+
+  /* silent operations */
+  ctx->quiet = 1;
+  
+  mutt_message _("Reopening mailbox...");
+  
+  /* our heuristics require the old mailbox to be unsorted */
+  if (Sort != SORT_ORDER)
+  {
+    short old_sort;
+
+    old_sort = Sort;
+    Sort = SORT_ORDER;
+    mutt_sort_headers (ctx, 1);
+    Sort = old_sort;
+  }
+
+  old_hdrs = NULL;
+  old_msgcount = 0;
+  
+  /* simulate a close */
+  if (ctx->id_hash)
+    hash_destroy (&ctx->id_hash, NULL);
+  if (ctx->subj_hash)
+    hash_destroy (&ctx->subj_hash, NULL);
+  mutt_clear_threads (ctx);
+  FREE (&ctx->v2r);
+  if (ctx->readonly)
+  {
+    for (i = 0; i < ctx->msgcount; i++)
+      mutt_free_header (&(ctx->hdrs[i])); /* nothing to do! */
+    FREE (&ctx->hdrs);
+  }
+  else
+  {
+      /* save the old headers */
+    old_msgcount = ctx->msgcount;
+    old_hdrs = ctx->hdrs;
+    ctx->hdrs = NULL;
+  }
+
+  ctx->hdrmax = 0;     /* force allocation of new headers */
+  ctx->msgcount = 0;
+  ctx->vcount = 0;
+  ctx->tagged = 0;
+  ctx->deleted = 0;
+  ctx->new = 0;
+  ctx->unread = 0;
+  ctx->flagged = 0;
+  ctx->changed = 0;
+  ctx->id_hash = NULL;
+  ctx->subj_hash = NULL;
+
+  switch (ctx->magic)
+  {
+    case M_MBOX:
+    case M_MMDF:
+      if (fseek (ctx->fp, 0, SEEK_SET) != 0)
+      {
+        dprint (1, (debugfile, "mutt_reopen_mailbox: fseek() failed\n"));
+        rc = -1;
+      } 
+      else 
+      {
+        cmp_headers = mbox_strict_cmp_headers;
+        rc = ((ctx->magic == M_MBOX) ? mbox_parse_mailbox
+                                    : mmdf_parse_mailbox) (ctx);
+      }
+      break;
+
+    default:
+      rc = -1;
+      break;
+  }
+  
+  if (rc == -1)
+  {
+    /* free the old headers */
+    for (j = 0; j < old_msgcount; j++)
+      mutt_free_header (&(old_hdrs[j]));
+    FREE (&old_hdrs);
+
+    ctx->quiet = 0;
+    return (-1);
+  }
+
+  /* now try to recover the old flags */
+
+  index_hint_set = (index_hint == NULL);
+
+  if (!ctx->readonly)
+  {
+    for (i = 0; i < ctx->msgcount; i++)
+    {
+      int found = 0;
+
+      /* some messages have been deleted, and new  messages have been
+       * appended at the end; the heuristic is that old messages have then
+       * "advanced" towards the beginning of the folder, so we begin the
+       * search at index "i"
+       */
+      for (j = i; j < old_msgcount; j++)
+      {
+       if (old_hdrs[j] == NULL)
+         continue;
+       if (cmp_headers (ctx->hdrs[i], old_hdrs[j]))
+       {
+         found = 1;
+         break;
+       }
+      }
+      if (!found)
+      {
+       for (j = 0; j < i && j < old_msgcount; j++)
+       {
+         if (old_hdrs[j] == NULL)
+           continue;
+         if (cmp_headers (ctx->hdrs[i], old_hdrs[j]))
+         {
+           found = 1;
+           break;
+         }
+       }
+      }
+
+      if (found)
+      {
+       /* this is best done here */
+       if (!index_hint_set && *index_hint == j)
+         *index_hint = i;
+
+       if (old_hdrs[j]->changed)
+       {
+         /* Only update the flags if the old header was changed;
+          * otherwise, the header may have been modified externally,
+          * and we don't want to lose _those_ changes
+          */
+         mutt_set_flag (ctx, ctx->hdrs[i], M_FLAG, old_hdrs[j]->flagged);
+         mutt_set_flag (ctx, ctx->hdrs[i], M_REPLIED, old_hdrs[j]->replied);
+         mutt_set_flag (ctx, ctx->hdrs[i], M_OLD, old_hdrs[j]->old);
+         mutt_set_flag (ctx, ctx->hdrs[i], M_READ, old_hdrs[j]->read);
+       }
+       mutt_set_flag (ctx, ctx->hdrs[i], M_DELETE, old_hdrs[j]->deleted);
+       mutt_set_flag (ctx, ctx->hdrs[i], M_TAG, old_hdrs[j]->tagged);
+
+       /* we don't need this header any more */
+       mutt_free_header (&(old_hdrs[j]));
+      }
+    }
+
+    /* free the remaining old headers */
+    for (j = 0; j < old_msgcount; j++)
+    {
+      if (old_hdrs[j])
+      {
+       mutt_free_header (&(old_hdrs[j]));
+       msg_mod = 1;
+      }
+    }
+    FREE (&old_hdrs);
+  }
+
+  ctx->quiet = 0;
+
+  return ((ctx->changed || msg_mod) ? M_REOPENED : M_NEW_MAIL);
+}
+
+/*
+ * Returns:
+ * 1 if the mailbox is not empty
+ * 0 if the mailbox is empty
+ * -1 on error
+ */
+int mbox_check_empty (const char *path)
+{
+  struct stat st;
+
+  if (stat (path, &st) == -1)
+    return -1;
+
+  return ((st.st_size == 0));
+}
diff --git a/mbyte.c b/mbyte.c
new file mode 100644 (file)
index 0000000..3c14c6f
--- /dev/null
+++ b/mbyte.c
@@ -0,0 +1,467 @@
+/*
+ * Copyright (C) 2000 Edmund Grimley Evans <edmundo@rano.org>
+ *
+ *     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.
+ */
+
+/*
+ * Japanese support by TAKIZAWA Takashi <taki@luna.email.ne.jp>.
+ */
+
+#include "mutt.h"
+#include "mbyte.h"
+#include "charset.h"
+
+#include <errno.h>
+
+#include <ctype.h>
+
+#ifndef EILSEQ
+#define EILSEQ EINVAL
+#endif
+
+int Charset_is_utf8 = 0;
+#ifndef HAVE_WC_FUNCS
+static int charset_is_ja = 0;
+static iconv_t charset_to_utf8 = (iconv_t)(-1);
+static iconv_t charset_from_utf8 = (iconv_t)(-1);
+#endif
+
+void mutt_set_charset (char *charset)
+{
+  char buffer[STRING];
+
+  mutt_canonical_charset (buffer, sizeof (buffer), charset);
+
+  Charset_is_utf8 = 0;
+#ifndef HAVE_WC_FUNCS
+  charset_is_ja = 0;
+  if (charset_to_utf8 != (iconv_t)(-1))
+  {
+    iconv_close (charset_to_utf8);
+    charset_to_utf8 = (iconv_t)(-1);
+  }
+  if (charset_from_utf8 != (iconv_t)(-1))
+  {
+    iconv_close (charset_from_utf8);
+    charset_from_utf8 = (iconv_t)(-1);
+  }
+#endif
+
+  if (!strcmp(buffer, "utf-8"))
+    Charset_is_utf8 = 1;
+#ifndef HAVE_WC_FUNCS
+  else if (!strcmp(buffer, "euc-jp") || !strcmp(buffer, "shift_jis")
+       || !strcmp(buffer, "cp932"))
+  {
+    charset_is_ja = 1;
+    charset_to_utf8 = iconv_open ("UTF-8", charset);
+    charset_from_utf8 = iconv_open (charset, "UTF-8");
+  }
+#endif
+
+#ifdef HAVE_BIND_TEXTDOMAIN_CODESET
+  bind_textdomain_codeset(PACKAGE, buffer);
+#endif
+}
+
+#ifndef HAVE_WC_FUNCS
+
+/*
+ * For systems that don't have them, we provide here our own
+ * implementations of wcrtomb(), mbrtowc(), iswprint() and wcwidth().
+ * Instead of using the locale, as these functions normally would,
+ * we use Mutt's Charset variable. We support 3 types of charset:
+ * (1) For 8-bit charsets, wchar_t uses the same encoding as char.
+ * (2) For UTF-8, wchar_t uses UCS.
+ * (3) For stateless Japanese encodings, we use UCS and convert
+ *     via UTF-8 using iconv.
+ * Unfortunately, we can't handle non-stateless encodings.
+ */
+
+static size_t wcrtomb_iconv (char *s, wchar_t wc, iconv_t cd)
+{
+  char buf[MB_LEN_MAX];
+  ICONV_CONST char *ib;
+  char *ob;
+  size_t ibl, obl, r;
+
+  if (s)
+  {
+    ibl = mutt_wctoutf8 (buf, wc);
+    if (ibl == (size_t)(-1))
+      return (size_t)(-1);
+    ib = buf;
+    ob = s;
+    obl = MB_LEN_MAX;
+    r = iconv (cd, &ib, &ibl, &ob, &obl);
+  }
+  else
+  {
+    ib = "";
+    ibl = 1;
+    ob = buf;
+    obl = sizeof (buf);
+    r = iconv (cd, &ib, &ibl, &ob, &obl);
+  }
+  return ob - s;
+}
+
+size_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps)
+{
+  /* We only handle stateless encodings, so we can ignore ps. */
+
+  if (Charset_is_utf8)
+    return mutt_wctoutf8 (s, wc);
+  else if (charset_from_utf8 != (iconv_t)(-1))
+    return wcrtomb_iconv (s, wc, charset_from_utf8);
+  else
+  {
+    if (!s)
+      return 1;
+    if (wc < 0x100)
+    {
+      *s = wc;
+      return 1;
+    }
+    errno = EILSEQ;
+    return (size_t)(-1);
+  }
+}
+
+size_t mbrtowc_iconv (wchar_t *pwc, const char *s, size_t n,
+                     mbstate_t *ps, iconv_t cd)
+{
+  static mbstate_t mbstate;
+  ICONV_CONST char *ib, *ibmax;
+  char *ob, *t;
+  size_t ibl, obl, k, r;
+  char bufi[8], bufo[6];
+
+  if (!n)
+    return (size_t)(-2);
+
+  t = memchr (ps, 0, sizeof (*ps));
+  k = t ? (t - (char *)ps) : sizeof (*ps);
+  if (k > sizeof (bufi))
+    k = 0;
+  if (k)
+  {
+    /* use the buffer for input */
+    memcpy (bufi, ps, k);
+    ib = bufi;
+    ibmax = bufi + (k + n < sizeof (bufi) ? k + n : sizeof (bufi));
+    memcpy (bufi + k, s, ibmax - bufi - k);
+  }
+  else
+  {
+    /* use the real input */
+    ib = s;
+    ibmax = s + n;
+  }
+
+  ob = bufo;
+  obl = sizeof (bufo);
+  ibl = 1;
+
+  for (;;)
+  {
+    r = iconv (cd, &ib, &ibl, &ob, &obl);
+    if (ob > bufo && (!k || ib > bufi + k))
+    {
+      /* we have a character */
+      memset (ps, 0, sizeof (*ps));
+      utf8rtowc (pwc, bufo, ob - bufo, &mbstate);
+      return (pwc && *pwc) ? (ib - (k ? bufi + k : s)) : 0;
+    }
+    else if (!r || (r == (size_t)(-1) && errno == EINVAL))
+    {
+      if (ib + ibl < ibmax)
+       /* try using more input */
+       ++ibl;
+      else if (k && ib > bufi + k && bufi + k + n > ibmax)
+      {
+       /* switch to using real input */
+       ib = s + (ib - bufi - k);
+       ibmax = s + n;
+       k = 0;
+       ++ibl;
+      }
+      else
+      {
+       /* save the state and give up */
+       memset (ps, 0, sizeof (*ps));
+       if (ibl <= sizeof (mbstate_t)) /* need extra condition here! */
+         memcpy (ps, ib, ibl);
+       return (size_t)(-2);
+      }
+    }
+    else
+    {
+      /* bad input */
+      errno = EILSEQ;
+      return (size_t)(-1);
+    }
+  }
+}
+
+size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
+{
+  static mbstate_t mbstate;
+
+  if (!ps)
+    ps = &mbstate;
+
+  if (Charset_is_utf8)
+    return utf8rtowc (pwc, s, n, ps);
+  else if (charset_to_utf8 != (iconv_t)(-1))
+    return mbrtowc_iconv (pwc, s, n, ps, charset_to_utf8);
+  else
+  {
+    if (!s)
+    {
+      memset(ps, 0, sizeof(*ps));
+      return 0;
+    }
+    if (!n)
+      return (size_t)-2;
+    if (pwc)
+      *pwc = (wchar_t)(unsigned char)*s;
+    return (*s != 0);
+  }
+}
+
+int iswprint (wint_t wc)
+{
+  if (Charset_is_utf8 || charset_is_ja)
+    return ((0x20 <= wc && wc < 0x7f) || 0xa0 <= wc);
+  else
+    return (0 <= wc && wc < 256) ? IsPrint (wc) : 0;
+}
+
+int iswspace (wint_t wc)
+{
+  if (Charset_is_utf8 || charset_is_ja)
+    return (9 <= wc && wc <= 13) || wc == 32;
+  else
+    return (0 <= wc && wc < 256) ? isspace (wc) : 0;
+}
+
+static wint_t towupper_ucs (wint_t x)
+{
+  /* Only works for x < 0x130 */
+  if ((0x60 < x && x < 0x7b) || (0xe0 <= x && x < 0xff && x != 0xf7))
+    return x - 32;
+  else if (0x100 <= x && x < 0x130)
+    return x & ~1;
+  else if (x == 0xb5)
+    return 0x39c;
+  else if (x == 0xff)
+    return 0x178;
+  else
+    return x;
+}
+
+static wint_t towlower_ucs (wint_t x)
+{
+  /* Only works for x < 0x130 */
+  if ((0x40 < x && x < 0x5b) || (0xc0 <= x && x < 0xdf && x != 0xd7))
+    return x + 32;
+  else if (0x100 <= x && x < 0x130)
+    return x | 1;
+  else
+    return x;
+}
+
+static int iswalnum_ucs (wint_t wc)
+{
+  /* Only works for x < 0x220 */
+  if (wc >= 0x100)
+    return 1;
+  else if (wc < 0x30)
+    return 0;
+  else if (wc < 0x3a)
+    return 1;
+  else if (wc < 0xa0)
+    return (0x40 < (wc & ~0x20) && (wc & ~0x20) < 0x5b);
+  else if (wc < 0xc0)
+    return (wc == 0xaa || wc == 0xb5 || wc == 0xba);
+  else
+    return !(wc == 0xd7 || wc == 0xf7);
+}
+
+wint_t towupper (wint_t wc)
+{
+  if (Charset_is_utf8 || charset_is_ja)
+    return towupper_ucs (wc);
+  else
+    return (0 <= wc && wc < 256) ? toupper (wc) : wc;
+}
+
+wint_t towlower (wint_t wc)
+{
+  if (Charset_is_utf8 || charset_is_ja)
+    return towlower_ucs (wc);
+  else
+    return (0 <= wc && wc < 256) ? tolower (wc) : wc;
+}
+
+int iswalnum (wint_t wc)
+{
+  if (Charset_is_utf8 || charset_is_ja)
+    return iswalnum_ucs (wc);
+  else
+    return (0 <= wc && wc < 256) ? isalnum (wc) : 0;
+}
+
+/*
+ * l10n for Japanese:
+ *   Symbols, Greek and Cyrillic in JIS X 0208, Japanese Kanji
+ *   Character Set, have a column width of 2.
+ */
+int wcwidth_ja (wchar_t ucs)
+{
+  if (ucs >= 0x3021)
+    return -1; /* continue with the normal check */
+  /* a rough range for quick check */
+  if ((ucs >= 0x00a1 && ucs <= 0x00fe) || /* Latin-1 Supplement */
+      (ucs >= 0x0391 && ucs <= 0x0451) || /* Greek and Cyrillic */
+      (ucs >= 0x2010 && ucs <= 0x266f) || /* Symbols */
+      (ucs >= 0x3000 && ucs <= 0x3020))   /* CJK Symbols and Punctuation */
+    return 2;
+  else
+    return -1;
+}
+
+int wcwidth_ucs(wchar_t ucs);
+
+int wcwidth (wchar_t wc)
+{
+  if (!Charset_is_utf8)
+  {
+    if (!charset_is_ja)
+    {
+      /* 8-bit case */
+      if (!wc)
+       return 0;
+      else if ((0 <= wc && wc < 256) && IsPrint (wc))
+       return 1;
+      else
+       return -1;
+    }
+    else
+    {
+      /* Japanese */
+      int k = wcwidth_ja (wc);
+      if (k != -1)
+       return k;
+    }
+  }
+  return wcwidth_ucs (wc);
+}
+
+size_t utf8rtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *_ps)
+{
+  static wchar_t mbstate;
+  wchar_t *ps = (wchar_t *)_ps;
+  size_t k = 1;
+  unsigned char c;
+  wchar_t wc;
+  int count;
+
+  if (!ps)
+    ps = &mbstate;
+
+  if (!s)
+  {
+    *ps = 0;
+    return 0;
+  }
+  if (!n)
+    return (size_t)-2;
+
+  if (!*ps)
+  {
+    c = (unsigned char)*s;
+    if (c < 0x80)
+    {
+      if (pwc)
+       *pwc = c;
+      return (c != 0);
+    }
+    else if (c < 0xc2)
+    {
+      errno = EILSEQ;
+      return (size_t)-1;
+    }
+    else if (c < 0xe0)
+      wc = ((c & 0x1f) << 6) + (count = 0);
+    else if (c < 0xf0)
+      wc = ((c & 0x0f) << 12) + (count = 1);
+    else if (c < 0xf8)
+      wc = ((c & 0x07) << 18) + (count = 2);
+    else if (c < 0xfc)
+      wc = ((c & 0x03) << 24) + (count = 3);
+    else if (c < 0xfe)
+      wc = ((c & 0x01) << 30) + (count = 4);
+    else
+    {
+      errno = EILSEQ;
+      return (size_t)-1;
+    }
+    ++s, --n, ++k;
+  }
+  else
+  {
+    wc = *ps & 0x7fffffff;
+    count = wc & 7; /* if count > 4 it will be caught below */
+  }
+
+  for (; n; ++s, --n, ++k)
+  {
+    c = (unsigned char)*s;
+    if (0x80 <= c && c < 0xc0)
+    {
+      wc |= (c & 0x3f) << (6 * count);
+      if (!count)
+      {
+       if (pwc)
+         *pwc = wc;
+       *ps = 0;
+       return wc ? k : 0;
+      }
+      --count, --wc;
+      if (!(wc >> (11+count*5)))
+      {
+       errno = count < 4 ? EILSEQ : EINVAL;
+       return (size_t)-1;
+      }
+    }
+    else
+    {
+      errno = EILSEQ;
+      return (size_t)-1;
+    }
+  }
+  *ps = wc;
+  return (size_t)-2;
+}
+
+#endif /* !HAVE_WC_FUNCS */
+
+wchar_t replacement_char ()
+{
+  return Charset_is_utf8 ? 0xfffd : '?';
+}
diff --git a/mbyte.h b/mbyte.h
new file mode 100644 (file)
index 0000000..797a2da
--- /dev/null
+++ b/mbyte.h
@@ -0,0 +1,32 @@
+#ifndef _MBYTE_H
+# define _MBYTE_H
+
+# include "config.h"
+
+# ifdef HAVE_WC_FUNCS
+#  ifdef HAVE_WCHAR_H
+#   include <wchar.h>
+#  endif
+#  ifdef HAVE_WCTYPE_H
+#   include <wctype.h>
+#  endif
+# endif
+
+# ifndef HAVE_WC_FUNCS
+size_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps);
+size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps);
+int iswprint (wint_t wc);
+int iswspace (wint_t wc);
+int iswalnum (wint_t wc);
+wint_t towupper (wint_t wc);
+wint_t towlower (wint_t wc);
+int wcwidth (wchar_t wc);
+# endif /* !HAVE_WC_FUNCS */
+
+
+void mutt_set_charset (char *charset);
+extern int Charset_is_utf8;
+size_t utf8rtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *_ps);
+wchar_t replacement_char (void);
+
+#endif /* _MBYTE_H */
diff --git a/md5.h b/md5.h
new file mode 100644 (file)
index 0000000..f825432
--- /dev/null
+++ b/md5.h
@@ -0,0 +1,62 @@
+/* MD5.H - header file for MD5C.C
+ */
+
+/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+rights reserved.
+
+License to copy and use this software is granted provided that it
+is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+Algorithm" in all material mentioning or referencing this software
+or this function.
+
+License is also granted to make and use derivative works provided
+that such works are identified as "derived from the RSA Data
+Security, Inc. MD5 Message-Digest Algorithm" in all material
+mentioning or referencing the derived work.
+
+RSA Data Security, Inc. makes no representations concerning either
+the merchantability of this software or the suitability of this
+software for any particular purpose. It is provided "as is"
+without express or implied warranty of any kind.
+
+These notices must be retained in any copies of any part of this
+documentation and/or software.
+ */
+
+#ifndef MD5_H
+#define MD5_H 1
+
+#include "config.h"
+
+#include <sys/types.h>
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+
+/* POINTER defines a generic pointer type */
+typedef unsigned char *POINTER;
+
+#ifndef HAVE_UINT32_T
+#  if SIZEOF_INT == 4
+typedef unsigned int uint32_t;
+#  elif SIZEOF_LONG == 4
+typedef unsigned long int uint32_t;
+#  endif
+#endif
+
+/* MD5 context. */
+typedef struct {
+  uint32_t state[4];                                   /* state (ABCD) */
+  uint32_t count[2];        /* number of bits, modulo 2^64 (lsb first) */
+  unsigned char buffer[64];                         /* input buffer */
+} MD5_CTX;
+
+void MD5Init (MD5_CTX *);
+void MD5Update (MD5_CTX *, unsigned char *, unsigned int);
+void MD5Final (unsigned char [16], MD5_CTX *);
+
+#endif
diff --git a/md5c.c b/md5c.c
new file mode 100644 (file)
index 0000000..2c2c564
--- /dev/null
+++ b/md5c.c
@@ -0,0 +1,330 @@
+/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
+ */
+
+/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+rights reserved.
+
+License to copy and use this software is granted provided that it
+is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+Algorithm" in all material mentioning or referencing this software
+or this function.
+
+License is also granted to make and use derivative works provided
+that such works are identified as "derived from the RSA Data
+Security, Inc. MD5 Message-Digest Algorithm" in all material
+mentioning or referencing the derived work.
+
+RSA Data Security, Inc. makes no representations concerning either
+the merchantability of this software or the suitability of this
+software for any particular purpose. It is provided "as is"
+without express or implied warranty of any kind.
+
+These notices must be retained in any copies of any part of this
+documentation and/or software.
+ */
+
+#include "md5.h"
+
+/* Constants for MD5Transform routine.
+ */
+
+#define S11 7
+#define S12 12
+#define S13 17
+#define S14 22
+#define S21 5
+#define S22 9
+#define S23 14
+#define S24 20
+#define S31 4
+#define S32 11
+#define S33 16
+#define S34 23
+#define S41 6
+#define S42 10
+#define S43 15
+#define S44 21
+
+static void MD5Transform (uint32_t [4], unsigned char [64]);
+static void Encode (unsigned char *, uint32_t *, unsigned int);
+static void Decode (uint32_t *, unsigned char *, unsigned int);
+static void MD5_memcpy (POINTER, POINTER, unsigned int);
+static void MD5_memset (POINTER, int, unsigned int);
+
+static unsigned char PADDING[64] = {
+  0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+/* F, G, H and I are basic MD5 functions.
+ */
+#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
+#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
+#define H(x, y, z) ((x) ^ (y) ^ (z))
+#define I(x, y, z) ((y) ^ ((x) | (~z)))
+
+/* ROTATE_LEFT rotates x left n bits.
+ */
+#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
+
+/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
+Rotation is separate from addition to prevent recomputation.
+ */
+#define FF(a, b, c, d, x, s, ac) { \
+ (a) += F ((b), (c), (d)) + (x) + (uint32_t)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+  }
+#define GG(a, b, c, d, x, s, ac) { \
+ (a) += G ((b), (c), (d)) + (x) + (uint32_t)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+  }
+#define HH(a, b, c, d, x, s, ac) { \
+ (a) += H ((b), (c), (d)) + (x) + (uint32_t)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+  }
+#define II(a, b, c, d, x, s, ac) { \
+ (a) += I ((b), (c), (d)) + (x) + (uint32_t)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+  }
+
+/* MD5 initialization. Begins an MD5 operation, writing a new context.
+ */
+void MD5Init (context)
+MD5_CTX *context;                                        /* context */
+{
+  context->count[0] = context->count[1] = 0;
+  /* Load magic initialization constants.
+*/
+  context->state[0] = 0x67452301;
+  context->state[1] = 0xefcdab89;
+  context->state[2] = 0x98badcfe;
+  context->state[3] = 0x10325476;
+}
+
+/* MD5 block update operation. Continues an MD5 message-digest
+  operation, processing another message block, and updating the
+  context.
+ */
+void MD5Update (context, input, inputLen)
+MD5_CTX *context;                                        /* context */
+unsigned char *input;                                /* input block */
+unsigned int inputLen;                     /* length of input block */
+{
+  unsigned int i, index, partLen;
+
+  /* Compute number of bytes mod 64 */
+  index = (unsigned int)((context->count[0] >> 3) & 0x3F);
+
+  /* Update number of bits */
+  if ((context->count[0] += ((uint32_t)inputLen << 3))
+   < ((uint32_t)inputLen << 3))
+ context->count[1]++;
+  context->count[1] += ((uint32_t)inputLen >> 29);
+
+  partLen = 64 - index;
+
+  /* Transform as many times as possible.
+*/
+  if (inputLen >= partLen) {
+ MD5_memcpy
+   ((POINTER)&context->buffer[index], (POINTER)input, partLen);
+ MD5Transform (context->state, context->buffer);
+
+ for (i = partLen; i + 63 < inputLen; i += 64)
+   MD5Transform (context->state, &input[i]);
+
+ index = 0;
+  }
+  else
+ i = 0;
+
+  /* Buffer remaining input */
+  MD5_memcpy
+ ((POINTER)&context->buffer[index], (POINTER)&input[i],
+  inputLen-i);
+}
+
+/* MD5 finalization. Ends an MD5 message-digest operation, writing the
+  the message digest and zeroizing the context.
+ */
+void MD5Final (digest, context)
+unsigned char digest[16];                         /* message digest */
+MD5_CTX *context;                                       /* context */
+{
+  unsigned char bits[8];
+  unsigned int index, padLen;
+
+  /* Save number of bits */
+  Encode (bits, context->count, 8);
+
+  /* Pad out to 56 mod 64.
+*/
+  index = (unsigned int)((context->count[0] >> 3) & 0x3f);
+  padLen = (index < 56) ? (56 - index) : (120 - index);
+  MD5Update (context, PADDING, padLen);
+
+  /* Append length (before padding) */
+  MD5Update (context, bits, 8);
+  /* Store state in digest */
+  Encode (digest, context->state, 16);
+
+  /* Zeroize sensitive information.
+*/
+  MD5_memset ((POINTER)context, 0, sizeof (*context));
+}
+
+/* MD5 basic transformation. Transforms state based on block.
+ */
+static void MD5Transform (state, block)
+uint32_t state[4];
+unsigned char block[64];
+{
+  uint32_t a = state[0], b = state[1], c = state[2], d = state[3], x[16];
+
+  Decode (x, block, 64);
+
+  /* Round 1 */
+  FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
+  FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
+  FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
+  FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
+  FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
+  FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
+  FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
+  FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
+  FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
+  FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
+  FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
+  FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
+  FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
+  FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
+  FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
+  FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
+
+ /* Round 2 */
+  GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
+  GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
+  GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
+  GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
+  GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
+  GG (d, a, b, c, x[10], S22,  0x2441453); /* 22 */
+  GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
+  GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
+  GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
+  GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
+  GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
+  GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
+  GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
+  GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
+  GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
+  GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
+
+  /* Round 3 */
+  HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
+  HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
+  HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
+  HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
+  HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
+  HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
+  HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
+  HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
+  HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
+  HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
+  HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
+  HH (b, c, d, a, x[ 6], S34,  0x4881d05); /* 44 */
+  HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
+  HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
+  HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
+  HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
+
+  /* Round 4 */
+  II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
+  II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
+  II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
+  II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
+  II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
+  II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
+  II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
+  II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
+  II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
+  II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
+  II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
+  II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
+  II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
+  II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
+  II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
+  II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
+
+  state[0] += a;
+  state[1] += b;
+  state[2] += c;
+  state[3] += d;
+
+  /* Zeroize sensitive information. */
+  MD5_memset ((POINTER)x, 0, sizeof (x));
+}
+
+/* Encodes input (uint32_t) into output (unsigned char). Assumes len is
+  a multiple of 4.
+ */
+static void Encode (output, input, len)
+unsigned char *output;
+uint32_t *input;
+unsigned int len;
+{
+  unsigned int i, j;
+
+  for (i = 0, j = 0; j < len; i++, j += 4) {
+ output[j] = (unsigned char)(input[i] & 0xff);
+ output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
+ output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
+ output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
+  }
+}
+
+/* Decodes input (unsigned char) into output (uint32_t). Assumes len is
+  a multiple of 4.
+ */
+static void Decode (output, input, len)
+uint32_t *output;
+unsigned char *input;
+unsigned int len;
+{
+  unsigned int i, j;
+
+  for (i = 0, j = 0; j < len; i++, j += 4)
+ output[i] = ((uint32_t)input[j]) | (((uint32_t)input[j+1]) << 8) |
+   (((uint32_t)input[j+2]) << 16) | (((uint32_t)input[j+3]) << 24);
+}
+
+/* Note: Replace "for loop" with standard memcpy if possible.
+ */
+
+static void MD5_memcpy (output, input, len)
+POINTER output;
+POINTER input;
+unsigned int len;
+{
+  unsigned int i;
+
+  for (i = 0; i < len; i++)
+  output[i] = input[i];
+}
+
+/* Note: Replace "for loop" with standard memset if possible.
+ */
+static void MD5_memset (output, value, len)
+POINTER output;
+int value;
+unsigned int len;
+{
+  unsigned int i;
+
+  for (i = 0; i < len; i++)
+ ((char *)output)[i] = (char)value;
+}
diff --git a/menu.c b/menu.c
new file mode 100644 (file)
index 0000000..ecb8117
--- /dev/null
+++ b/menu.c
@@ -0,0 +1,1070 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ *
+ *     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.
+ */
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "mutt_menu.h"
+#include "mbyte.h"
+
+#ifdef USE_IMAP
+#include "imap.h"
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+
+extern int Charset_is_utf8; /* FIXME: bad modularisation */
+
+extern size_t UngetCount;
+
+static void print_enriched_string (int attr, unsigned char *s, int do_color)
+{
+  wchar_t wc;
+  size_t k;
+  size_t n = mutt_strlen ((char *)s);
+  mbstate_t mbstate;
+  short f1, f2, b1, b2;
+
+  memset (&mbstate, 0, sizeof (mbstate));
+  while (*s)
+  {
+    if (*s < M_TREE_MAX)
+    {
+      if (do_color)
+      {
+        pair_content(PAIR_NUMBER(ColorDefs[MT_COLOR_TREE]), &f1, &b1);
+        pair_content(PAIR_NUMBER(attr), &f2, &b2);
+        if (b1 == b2)
+          SETCOLOR (MT_COLOR_TREE);
+      }
+      while (*s && *s < M_TREE_MAX)
+      {
+        switch (*s)
+        {
+          case M_TREE_LLCORNER:
+            if (option (OPTASCIICHARS))
+              addch ('`');
+            else if (Charset_is_utf8)
+              addstr ("\342\224\224"); /* WACS_LLCORNER */
+            else
+              addch (ACS_LLCORNER);
+            break;
+          case M_TREE_ULCORNER:
+            if (option (OPTASCIICHARS))
+              addch (',');
+            else if (Charset_is_utf8)
+              addstr ("\342\224\214"); /* WACS_ULCORNER */
+            else
+              addch (ACS_ULCORNER);
+            break;
+          case M_TREE_LTEE:
+            if (option (OPTASCIICHARS))
+              addch ('|');
+            else if (Charset_is_utf8)
+              addstr ("\342\224\234"); /* WACS_LTEE */
+            else
+              addch (ACS_LTEE);
+            break;
+          case M_TREE_HLINE:
+            if (option (OPTASCIICHARS))
+              addch ('-');
+            else if (Charset_is_utf8)
+              addstr ("\342\224\200"); /* WACS_HLINE */
+            else
+              addch (ACS_HLINE);
+            break;
+          case M_TREE_VLINE:
+            if (option (OPTASCIICHARS))
+              addch ('|');
+            else if (Charset_is_utf8)
+              addstr ("\342\224\202"); /* WACS_VLINE */
+            else
+              addch (ACS_VLINE);
+            break;
+          case M_TREE_TTEE:
+            if (option (OPTASCIICHARS))
+              addch ('-');
+            else if (Charset_is_utf8)
+              addstr ("\342\224\254"); /* WACS_TTEE */
+            else
+              addch (ACS_TTEE);
+            break;
+          case M_TREE_BTEE:
+            if (option (OPTASCIICHARS))
+              addch ('-');
+            else if (Charset_is_utf8)
+              addstr ("\342\224\264"); /* WACS_BTEE */
+            else
+              addch (ACS_BTEE);
+            break;
+          case M_TREE_SPACE:
+            addch (' ');
+            break;
+          case M_TREE_RARROW:
+            addch ('>');
+            break;
+          case M_TREE_STAR:
+            addch ('*'); /* fake thread indicator */
+            break;
+          case M_TREE_HIDDEN:
+            addch ('&');
+            break;
+          case M_TREE_EQUALS:
+            addch ('=');
+            break;
+          case M_TREE_MISSING:
+            addch ('?');
+            break;
+        }
+        s++, n--;
+      }
+      if (do_color) attrset(attr);
+    }
+    else if ((k = mbrtowc (&wc, (char *)s, n, &mbstate)) > 0)
+    {
+      addnstr ((char *)s, k);
+      s += k, n-= k;
+    }
+    else
+      break;
+  }
+}
+
+static void menu_make_entry (char *s, int l, MUTTMENU *menu, int i) 
+{
+  if (menu->dialog) 
+  {
+    strncpy (s, menu->dialog[i], l);
+    menu->current = -1; /* hide menubar */
+  }
+  else
+    menu->make_entry (s, l, menu, i);
+}
+
+void menu_pad_string (char *s, size_t n)
+{
+  int shift = option (OPTARROWCURSOR) ? 3 : 0;
+  int cols = COLS - shift;
+
+  mutt_format_string (s, n, cols, cols, 0, ' ', s, strlen (s), 1);
+  s[n - 1] = 0;
+}
+
+void menu_redraw_full (MUTTMENU *menu)
+{
+  SETCOLOR (MT_COLOR_NORMAL);
+  /* clear() doesn't optimize screen redraws */
+  move (0, 0);
+  clrtobot ();
+
+  if (option (OPTHELP))
+  {
+    SETCOLOR (MT_COLOR_STATUS);
+    move (option (OPTSTATUSONTOP) ? LINES-2 : 0, 0);
+    mutt_paddstr (COLS, menu->help);
+    SETCOLOR (MT_COLOR_NORMAL);
+    menu->offset = 1;
+    menu->pagelen = LINES - 3;
+  }
+  else
+  {
+    menu->offset = option (OPTSTATUSONTOP) ? 1 : 0;
+    menu->pagelen = LINES - 2;
+  }
+
+  mutt_show_error ();
+
+  menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
+}
+
+void menu_redraw_status (MUTTMENU *menu)
+{
+  char buf[STRING];
+
+  snprintf (buf, sizeof (buf), M_MODEFMT, menu->title);
+  SETCOLOR (MT_COLOR_STATUS);
+  move (option (OPTSTATUSONTOP) ? 0 : LINES - 2, 0);
+  mutt_paddstr (COLS, buf);
+  SETCOLOR (MT_COLOR_NORMAL);
+  menu->redraw &= ~REDRAW_STATUS;
+}
+
+void menu_redraw_index (MUTTMENU *menu)
+{
+  char buf[STRING];
+  int i;
+
+  for (i = menu->top; i < menu->top + menu->pagelen; i++)
+  {
+    if (i < menu->max)
+    {
+      menu_make_entry (buf, sizeof (buf), menu, i);
+      menu_pad_string (buf, sizeof (buf));
+
+      if (option (OPTARROWCURSOR))
+      {
+        attrset (menu->color (i));
+        CLEARLINE (i - menu->top + menu->offset);
+
+        if (i == menu->current)
+        {
+          attrset (menu->color (i));
+          ADDCOLOR (MT_COLOR_INDICATOR);
+          addstr ("->");
+          attrset (menu->color (i));
+          addch (' ');
+        }
+        else
+          move (i - menu->top + menu->offset, 3);
+
+        print_enriched_string (menu->color(i), (unsigned char *) buf, 1);
+        SETCOLOR (MT_COLOR_NORMAL);          
+      }
+      else
+      {
+        attrset (menu->color (i));
+            
+        if (i == menu->current)
+        {
+          ADDCOLOR (MT_COLOR_INDICATOR);
+          BKGDSET (MT_COLOR_INDICATOR);
+        }
+
+        CLEARLINE (i - menu->top + menu->offset);
+        print_enriched_string (menu->color(i), (unsigned char *) buf, i != menu->current);
+        SETCOLOR (MT_COLOR_NORMAL);
+        BKGDSET (MT_COLOR_NORMAL);
+      }
+    }
+    else
+      CLEARLINE (i - menu->top + menu->offset);
+  }
+  menu->redraw = 0;
+}
+
+void menu_redraw_motion (MUTTMENU *menu)
+{
+  char buf[STRING];
+
+  if (menu->dialog) 
+  {
+    menu->redraw &= ~REDRAW_MOTION;
+    return;
+  }
+  
+  move (menu->oldcurrent + menu->offset - menu->top, 0);
+  SETCOLOR (MT_COLOR_NORMAL);
+  BKGDSET (MT_COLOR_NORMAL);
+
+  if (option (OPTARROWCURSOR))
+  {
+    /* clear the pointer */
+    attrset (menu->color (menu->oldcurrent));
+    addstr ("  ");
+
+    if (menu->redraw & REDRAW_MOTION_RESYNCH)
+    {
+      clrtoeol ();
+      menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent);
+      menu_pad_string (buf, sizeof (buf));
+      move (menu->oldcurrent + menu->offset - menu->top, 3);
+      print_enriched_string (menu->color(menu->oldcurrent), (unsigned char *) buf, 1);
+      SETCOLOR (MT_COLOR_NORMAL);
+    }
+
+    /* now draw it in the new location */
+    move (menu->current + menu->offset - menu->top, 0);
+    attrset (menu->color (menu->current));
+    ADDCOLOR (MT_COLOR_INDICATOR);
+    addstr ("->");
+    SETCOLOR (MT_COLOR_NORMAL);
+  }
+  else
+  {
+    /* erase the current indicator */
+    attrset (menu->color (menu->oldcurrent));
+    clrtoeol ();
+    menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent);
+    menu_pad_string (buf, sizeof (buf));
+    print_enriched_string (menu->color(menu->oldcurrent), (unsigned char *) buf, 1);
+
+    /* now draw the new one to reflect the change */
+    menu_make_entry (buf, sizeof (buf), menu, menu->current);
+    menu_pad_string (buf, sizeof (buf));
+    attrset (menu->color (menu->current));
+    ADDCOLOR (MT_COLOR_INDICATOR);
+    BKGDSET (MT_COLOR_INDICATOR);
+    CLEARLINE (menu->current - menu->top + menu->offset);
+    print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0);
+    SETCOLOR (MT_COLOR_NORMAL);
+    BKGDSET (MT_COLOR_NORMAL);
+  }
+  menu->redraw &= REDRAW_STATUS;
+}
+
+void menu_redraw_current (MUTTMENU *menu)
+{
+  char buf[STRING];
+  
+  move (menu->current + menu->offset - menu->top, 0);
+  menu_make_entry (buf, sizeof (buf), menu, menu->current);
+  menu_pad_string (buf, sizeof (buf));
+
+  if (option (OPTARROWCURSOR))
+  {
+    int attr = menu->color (menu->current);
+    attrset (attr);
+    clrtoeol ();
+    attrset (menu->color (menu->current));
+    ADDCOLOR (MT_COLOR_INDICATOR);
+    addstr ("->");
+    attrset (attr);
+    addch (' ');
+    menu_pad_string (buf, sizeof (buf));
+    print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 1);
+    SETCOLOR (MT_COLOR_NORMAL);
+  }
+  else
+  {
+    attrset (menu->color (menu->current));
+    ADDCOLOR (MT_COLOR_INDICATOR);
+    BKGDSET (MT_COLOR_INDICATOR);
+    clrtoeol ();
+    print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0);
+    SETCOLOR (MT_COLOR_NORMAL);
+    BKGDSET (MT_COLOR_NORMAL);
+  }
+  menu->redraw &= REDRAW_STATUS;
+}
+
+void menu_redraw_prompt (MUTTMENU *menu)
+{
+  if (menu->dialog) 
+  {
+    if (option (OPTMSGERR)) 
+    {
+      mutt_sleep (1);
+      unset_option (OPTMSGERR);
+    }
+
+    if (*Errorbuf)
+      mutt_clear_error ();
+
+    SETCOLOR (MT_COLOR_NORMAL);
+    mvaddstr (LINES - 1, 0, menu->prompt);
+    clrtoeol ();
+  }
+}
+
+void menu_check_recenter (MUTTMENU *menu)
+{
+  if (menu->max <= menu->pagelen && menu->top != 0)
+  {
+    menu->top = 0;
+    set_option (OPTNEEDREDRAW);
+    menu->redraw |= REDRAW_INDEX;
+  }
+  else if (menu->current >= menu->top + menu->pagelen)
+  {
+    if (option (OPTMENUSCROLL) || (menu->pagelen <= 0))
+      menu->top = menu->current - menu->pagelen + 1;
+    else
+      menu->top += menu->pagelen * ((menu->current - menu->top) / menu->pagelen);
+    menu->redraw |= REDRAW_INDEX;
+  }
+  else if (menu->current < menu->top)
+  {
+    if (option (OPTMENUSCROLL) || (menu->pagelen <= 0))
+      menu->top = menu->current;
+    else
+    {
+      menu->top -= menu->pagelen * ((menu->top + menu->pagelen - 1 - menu->current) / menu->pagelen);
+      if (menu->top < 0)
+        menu->top = 0;
+    }
+    menu->redraw |= REDRAW_INDEX;
+  }
+}
+
+void menu_jump (MUTTMENU *menu)
+{
+  int n;
+  char buf[SHORT_STRING];
+
+  if (menu->max)
+  {
+    mutt_ungetch (LastKey, 0);
+    buf[0] = 0;
+    if (mutt_get_field (_("Jump to: "), buf, sizeof (buf), 0) == 0 && buf[0])
+    {
+      n = atoi (buf) - 1;
+      if (n >= 0 && n < menu->max)
+      {
+        menu->current = n;
+        menu->redraw = REDRAW_MOTION;
+      }
+      else
+        mutt_error _("Invalid index number.");
+    }
+  }
+  else
+    mutt_error _("No entries.");
+}
+
+void menu_next_line (MUTTMENU *menu)
+{
+  if (menu->max)
+  {
+    if (menu->top + 1 < menu->max)
+    {
+      menu->top++;
+      if (menu->current < menu->top)
+        menu->current++;
+      menu->redraw = REDRAW_INDEX;
+    }
+    else
+      mutt_error _("You cannot scroll down farther.");
+  }
+  else
+    mutt_error _("No entries.");
+}
+
+void menu_prev_line (MUTTMENU *menu)
+{
+  if (menu->top > 0)
+  {
+    menu->top--;
+    if (menu->current >= menu->top + menu->pagelen)
+      menu->current--;
+    menu->redraw = REDRAW_INDEX;
+  }
+  else
+    mutt_error _("You cannot scroll up farther.");
+}
+
+void menu_next_page (MUTTMENU *menu)
+{
+  if (menu->max)
+  {
+    if (menu->top + menu->pagelen < menu->max)
+    {
+      menu->top += menu->pagelen;
+      if (menu->current < menu->top)
+        menu->current = menu->top;
+      menu->redraw = REDRAW_INDEX;
+    }
+    else if (menu->current != menu->max - 1 && !menu->dialog)
+    {
+      menu->current = menu->max - 1;
+      menu->redraw = REDRAW_MOTION;
+    }
+    else
+      mutt_error _("You are on the last page.");
+  }
+  else
+    mutt_error _("No entries.");
+}
+
+void menu_prev_page (MUTTMENU *menu)
+{
+  if (menu->top > 0)
+  {
+    if ((menu->top -= menu->pagelen) < 0)
+      menu->top = 0;
+    if (menu->current >= menu->top + menu->pagelen)
+      menu->current = menu->top + menu->pagelen - 1;
+    menu->redraw = REDRAW_INDEX;
+  }
+  else if (menu->current && !menu->dialog)
+  {
+    menu->current = 0;
+    menu->redraw = REDRAW_MOTION;
+  }
+  else
+    mutt_error _("You are on the first page.");
+}
+
+void menu_top_page (MUTTMENU *menu)
+{
+  if (menu->current != menu->top)
+  {
+    menu->current = menu->top;
+    menu->redraw = REDRAW_MOTION;
+  }
+}
+
+void menu_bottom_page (MUTTMENU *menu)
+{
+  if (menu->max)
+  {
+    menu->current = menu->top + menu->pagelen - 1;
+    if (menu->current > menu->max - 1)
+      menu->current = menu->max - 1;
+    menu->redraw = REDRAW_MOTION;
+  }
+  else
+    mutt_error _("No entries.");
+}
+
+void menu_middle_page (MUTTMENU *menu)
+{
+  int i;
+
+  if (menu->max)
+  {
+    i = menu->top + menu->pagelen;
+    if (i > menu->max - 1)
+      i = menu->max - 1;
+    menu->current = menu->top + (i - menu->top) / 2;
+    menu->redraw = REDRAW_MOTION;
+  }
+  else
+    mutt_error _("No entries.");
+}
+
+void menu_first_entry (MUTTMENU *menu)
+{
+  if (menu->max)
+  {
+    menu->current = 0;
+    menu->redraw = REDRAW_MOTION;
+  }
+  else
+    mutt_error _("No entries.");
+}
+
+void menu_last_entry (MUTTMENU *menu)
+{
+  if (menu->max)
+  {
+    menu->current = menu->max - 1;
+    menu->redraw = REDRAW_MOTION;
+  }
+  else
+    mutt_error _("No entries.");
+}
+
+void menu_half_up (MUTTMENU *menu)
+{
+  if (menu->top > 0)
+  {
+    if ((menu->top -= menu->pagelen / 2) < 0)
+      menu->top = 0;
+    if (menu->current >= menu->top + menu->pagelen)
+      menu->current = menu->top + menu->pagelen - 1;
+    menu->redraw = REDRAW_INDEX;
+  }
+  else if (menu->current && !menu->dialog)
+  {
+    menu->current = 0;
+    menu->redraw = REDRAW_MOTION;
+  }
+  else
+    mutt_error _("First entry is shown.");
+}
+
+void menu_half_down (MUTTMENU *menu)
+{
+  if (menu->max)
+  {
+    if (menu->top + menu->pagelen < menu->max)
+    {
+      menu->top += menu->pagelen / 2;
+      if (menu->current < menu->top)
+        menu->current = menu->top;
+      menu->redraw = REDRAW_INDEX;
+    }
+    else if (menu->current != menu->max - 1 && !menu->dialog)
+    {
+      menu->current = menu->max - 1;
+      menu->redraw = REDRAW_INDEX;
+    }
+    else
+      mutt_error _("Last entry is shown.");
+  }
+  else
+    mutt_error _("No entries.");
+}
+
+void menu_current_top (MUTTMENU *menu)
+{
+  if (menu->max)
+  {
+    menu->top = menu->current;
+    menu->redraw = REDRAW_INDEX;
+  }
+  else
+    mutt_error _("No entries.");
+}
+
+void menu_current_middle (MUTTMENU *menu)
+{
+  if (menu->max)
+  {
+    menu->top = menu->current - menu->pagelen / 2;
+    if (menu->top < 0)
+      menu->top = 0;
+    menu->redraw = REDRAW_INDEX;
+  }
+  else
+    mutt_error _("No entries.");
+}
+
+void menu_current_bottom (MUTTMENU *menu)
+{
+  if (menu->max)
+  {
+    menu->top = menu->current - menu->pagelen + 1;
+    if (menu->top < 0)
+      menu->top = 0;
+    menu->redraw = REDRAW_INDEX;
+  }
+  else
+    mutt_error _("No entries.");
+}
+
+void menu_next_entry (MUTTMENU *menu)
+{
+  if (menu->current < menu->max - 1)
+  {
+    menu->current++;
+    menu->redraw = REDRAW_MOTION;
+  }
+  else
+    mutt_error _("You are on the last entry.");
+}
+
+void menu_prev_entry (MUTTMENU *menu)
+{
+  if (menu->current)
+  {
+    menu->current--;
+    menu->redraw = REDRAW_MOTION;
+  }
+  else
+    mutt_error _("You are on the first entry.");
+}
+
+static int default_color (int i)
+{
+   return ColorDefs[MT_COLOR_NORMAL];
+}
+
+static int menu_search_generic (MUTTMENU *m, regex_t *re, int n)
+{
+  char buf[LONG_STRING];
+
+  menu_make_entry (buf, sizeof (buf), m, n);
+  return (regexec (re, buf, 0, NULL, 0));
+}
+
+MUTTMENU *mutt_new_menu (void)
+{
+  MUTTMENU *p = (MUTTMENU *) safe_calloc (1, sizeof (MUTTMENU));
+
+  p->current = 0;
+  p->top = 0;
+  p->offset = 1;
+  p->redraw = REDRAW_FULL;
+  p->pagelen = PAGELEN;
+  p->color = default_color;
+  p->search = menu_search_generic;
+  return (p);
+}
+
+void mutt_menuDestroy (MUTTMENU **p)
+{
+  int i;
+
+  FREE (&(*p)->searchBuf);
+
+  if ((*p)->dialog) 
+  {
+    for (i=0; i < (*p)->max; i++)
+      FREE (&(*p)->dialog[i]);
+
+    FREE ((*p)->dialog);
+  }
+
+  FREE (p);
+}
+
+#define M_SEARCH_UP   1
+#define M_SEARCH_DOWN 2
+
+static int menu_search (MUTTMENU *menu, int op)
+{
+  int r;
+  int searchDir;
+  regex_t re;
+  char buf[SHORT_STRING];
+
+  if (op != OP_SEARCH_NEXT && op != OP_SEARCH_OPPOSITE)
+  {
+    strfcpy (buf, menu->searchBuf ? menu->searchBuf : "", sizeof (buf));
+    if (mutt_get_field ((op == OP_SEARCH) ? _("Search for: ") : 
+                                            _("Reverse search for: "),
+                         buf, sizeof (buf), M_CLEAR) != 0 || !buf[0])
+      return (-1);
+    mutt_str_replace (&menu->searchBuf, buf);
+    menu->searchDir = (op == OP_SEARCH) ? M_SEARCH_DOWN : M_SEARCH_UP;
+  }
+  else 
+  {
+    if (!menu->searchBuf)
+    {
+      mutt_error _("No search pattern.");
+      return (-1);
+    }
+  }
+
+  searchDir = (menu->searchDir == M_SEARCH_UP) ? -1 : 1;
+  if (op == OP_SEARCH_OPPOSITE)
+    searchDir = -searchDir;
+
+  if ((r = REGCOMP (&re, menu->searchBuf, REG_NOSUB | mutt_which_case (menu->searchBuf))) != 0)
+  {
+    regerror (r, &re, buf, sizeof (buf));
+    regfree (&re);
+    mutt_error ("%s", buf);
+    return (-1);
+  }
+
+  r = menu->current + searchDir;
+  while (r >= 0 && r < menu->max)
+  {
+    if (menu->search (menu, &re, r) == 0)
+    {
+      regfree (&re);
+      return r;
+    }
+
+    r += searchDir;
+  }
+
+  regfree (&re);
+  mutt_error _("Not found.");
+  return (-1);
+}
+
+static int menu_dialog_translate_op (int i)
+{
+  switch (i)
+  {
+    case OP_NEXT_ENTRY:   
+      return OP_NEXT_LINE;
+    case OP_PREV_ENTRY:          
+      return OP_PREV_LINE;
+    case OP_CURRENT_TOP:   case OP_FIRST_ENTRY:  
+      return OP_TOP_PAGE;
+    case OP_CURRENT_BOTTOM:    case OP_LAST_ENTRY:          
+      return OP_BOTTOM_PAGE;
+    case OP_CURRENT_MIDDLE: 
+      return OP_MIDDLE_PAGE; 
+  }
+  
+  return i;
+}
+
+static int menu_dialog_dokey (MUTTMENU *menu, int *ip)
+{
+  event_t ch;
+  char *p;
+
+  ch = mutt_getch ();
+
+  if (ch.ch == -1)
+  {
+    *ip = -1;
+    return 0;
+  }
+
+  if (ch.ch && (p = strchr (menu->keys, ch.ch)))
+  {
+    *ip = OP_MAX + (p - menu->keys + 1);
+    return 0;
+  }
+  else
+  {
+    mutt_ungetch (ch.op ? 0 : ch.ch, ch.op ? ch.op : 0);
+    return -1;
+  }
+}
+
+int menu_redraw (MUTTMENU *menu)
+{
+  /* See if all or part of the screen needs to be updated.  */
+  if (menu->redraw & REDRAW_FULL)
+  {
+    menu_redraw_full (menu);
+    /* allow the caller to do any local configuration */
+    return (OP_REDRAW);
+  }
+  
+  if (!menu->dialog)
+    menu_check_recenter (menu);
+  
+  if (menu->redraw & REDRAW_STATUS)
+    menu_redraw_status (menu);
+  if (menu->redraw & REDRAW_INDEX)
+    menu_redraw_index (menu);
+  else if (menu->redraw & (REDRAW_MOTION | REDRAW_MOTION_RESYNCH))
+    menu_redraw_motion (menu);
+  else if (menu->redraw == REDRAW_CURRENT)
+    menu_redraw_current (menu);
+  
+  if (menu->dialog)
+    menu_redraw_prompt (menu);
+  
+  return OP_NULL;
+}
+
+int mutt_menuLoop (MUTTMENU *menu)
+{
+  int i = OP_NULL;
+
+  FOREVER
+  {
+    if (option (OPTMENUCALLER))
+    {
+      unset_option (OPTMENUCALLER);
+      return OP_NULL;
+    }
+    
+    
+    mutt_curs_set (0);
+
+#ifdef USE_IMAP
+    imap_keepalive ();
+#endif
+
+    if (menu_redraw (menu) == OP_REDRAW)
+      return OP_REDRAW;
+    
+    menu->oldcurrent = menu->current;
+
+
+    /* move the cursor out of the way */
+    move (menu->current - menu->top + menu->offset,
+          (option (OPTARROWCURSOR) ? 2 : COLS-1));
+
+    mutt_refresh ();
+    
+    /* try to catch dialog keys before ops */
+    if (menu->dialog && menu_dialog_dokey (menu, &i) == 0)
+      return i;
+                    
+    i = km_dokey (menu->menu);
+    if (i == OP_TAG_PREFIX || i == OP_TAG_PREFIX_COND)
+    {
+      if (menu->tagged)
+      {
+        mvaddstr (LINES - 1, 0, "Tag-");
+        clrtoeol ();
+        i = km_dokey (menu->menu);
+        menu->tagprefix = 1;
+        CLEARLINE (LINES - 1);
+      }
+      else if (i == OP_TAG_PREFIX)
+      {
+        mutt_error _("No tagged entries.");
+        i = -1;
+      }
+      else /* None tagged, OP_TAG_PREFIX_COND */
+      {
+        event_t tmp;
+        while(UngetCount>0)
+        {
+          tmp=mutt_getch();
+          if(tmp.op==OP_END_COND)break;
+        }
+        mutt_message _("Nothing to do.");
+        i = -1;
+      }
+    }
+    else if (menu->tagged && option (OPTAUTOTAG))
+      menu->tagprefix = 1;
+    else
+      menu->tagprefix = 0;
+
+    mutt_curs_set (1);
+
+#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
+    if (SigWinch)
+    {
+      mutt_resize_screen ();
+      menu->redraw = REDRAW_FULL;
+      SigWinch = 0;
+      clearok(stdscr,TRUE);/*force complete redraw*/
+    }
+#endif
+
+    if (i == -1)
+      continue;
+
+    if (!menu->dialog)
+      mutt_clear_error ();
+
+    /* Convert menubar movement to scrolling */
+    if (menu->dialog) 
+      i = menu_dialog_translate_op (i);
+
+    switch (i)
+    {
+      case OP_NEXT_ENTRY:
+        menu_next_entry (menu);
+        break;
+      case OP_PREV_ENTRY:
+        menu_prev_entry (menu);
+        break;
+      case OP_HALF_DOWN:
+        menu_half_down (menu);
+        break;
+      case OP_HALF_UP:
+        menu_half_up (menu);
+        break;
+      case OP_NEXT_PAGE:
+        menu_next_page (menu);
+        break;
+      case OP_PREV_PAGE:
+        menu_prev_page (menu);
+        break;
+      case OP_NEXT_LINE:
+        menu_next_line (menu);
+        break;
+      case OP_PREV_LINE:
+        menu_prev_line (menu);
+        break;
+      case OP_FIRST_ENTRY:
+        menu_first_entry (menu);
+        break;
+      case OP_LAST_ENTRY:
+        menu_last_entry (menu);
+        break;
+      case OP_TOP_PAGE:
+        menu_top_page (menu);
+        break;
+      case OP_MIDDLE_PAGE:
+        menu_middle_page (menu);
+        break;
+      case OP_BOTTOM_PAGE:
+        menu_bottom_page (menu);
+        break;
+      case OP_CURRENT_TOP:
+        menu_current_top (menu);
+        break;
+      case OP_CURRENT_MIDDLE:
+        menu_current_middle (menu);
+        break;
+      case OP_CURRENT_BOTTOM:
+        menu_current_bottom (menu);
+        break;
+      case OP_SEARCH:
+      case OP_SEARCH_REVERSE:
+      case OP_SEARCH_NEXT:
+      case OP_SEARCH_OPPOSITE:
+        if (menu->search && !menu->dialog) /* Searching dialogs won't work */
+        {
+          menu->oldcurrent = menu->current;
+          if ((menu->current = menu_search (menu, i)) != -1)
+            menu->redraw = REDRAW_MOTION;
+          else
+            menu->current = menu->oldcurrent;
+        }
+        else
+          mutt_error _("Search is not implemented for this menu.");
+        break;
+
+      case OP_JUMP:
+        if (menu->dialog)
+          mutt_error _("Jumping is not implemented for dialogs.");
+        else
+          menu_jump (menu);
+        break;
+
+      case OP_ENTER_COMMAND:
+        CurrentMenu = menu->menu;
+        mutt_enter_command ();
+        if (option (OPTFORCEREDRAWINDEX))
+        {
+          menu->redraw = REDRAW_FULL;
+          unset_option (OPTFORCEREDRAWINDEX);
+          unset_option (OPTFORCEREDRAWPAGER);
+        }
+        break;
+
+      case OP_TAG:
+        if (menu->tag && !menu->dialog)
+        {
+          if (menu->tagprefix && !option (OPTAUTOTAG))
+          {
+            for (i = 0; i < menu->max; i++)
+              menu->tagged += menu->tag (menu, i, 0);
+            menu->redraw = REDRAW_INDEX;
+          }
+          else if (menu->max)
+          {
+            int i = menu->tag (menu, menu->current, -1);
+            menu->tagged += i;
+            if (i && option (OPTRESOLVE) && menu->current < menu->max - 1)
+            {
+              menu->current++;
+              menu->redraw = REDRAW_MOTION_RESYNCH;
+            }
+            else
+              menu->redraw = REDRAW_CURRENT;
+          }
+          else
+            mutt_error _("No entries.");
+        }
+        else
+          mutt_error _("Tagging is not supported.");
+        break;
+
+      case OP_SHELL_ESCAPE:
+        mutt_shell_escape ();
+        MAYBE_REDRAW (menu->redraw);
+        break;
+
+      case OP_WHAT_KEY:
+        mutt_what_key ();
+        break;
+
+      case OP_REDRAW:
+        clearok (stdscr, TRUE);
+        menu->redraw = REDRAW_FULL;
+        break;
+
+      case OP_HELP:
+        mutt_help (menu->menu);
+        menu->redraw = REDRAW_FULL;
+        break;
+
+      case OP_NULL:
+        km_error_key (menu->menu);
+        break;
+
+      case OP_END_COND:
+        break;
+
+      default:
+        return (i);
+    }
+  }
+  /* not reached */
+}
diff --git a/mh.c b/mh.c
new file mode 100644 (file)
index 0000000..56265b5
--- /dev/null
+++ b/mh.c
@@ -0,0 +1,1845 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1999-2002 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */
+
+/*
+ * This file contains routines specific to MH and ``maildir'' style
+ * mailboxes.
+ */
+
+#include "mutt.h"
+#include "mailbox.h"
+#include "mx.h"
+#include "copy.h"
+#include "buffy.h"
+#include "sort.h"
+
+#include <sys/stat.h>
+#include <dirent.h>
+#include <limits.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <errno.h>
+#include <string.h>
+#include <utime.h>
+
+struct maildir
+{
+  HEADER *h;
+  char *canon_fname;
+  unsigned header_parsed:1;
+  struct maildir *next;
+};
+
+struct mh_sequences
+{
+  int max;
+  short *flags;
+};
+
+/* mh_sequences support */
+
+#define MH_SEQ_UNSEEN  (1 << 0)
+#define MH_SEQ_REPLIED (1 << 1)
+#define MH_SEQ_FLAGGED (1 << 2)
+
+static void mhs_alloc (struct mh_sequences *mhs, int i)
+{
+  int j;
+  int newmax;
+
+  if (i > mhs->max || !mhs->flags)
+  {
+    newmax = i + 128;
+    safe_realloc (&mhs->flags, sizeof (mhs->flags[0]) * (newmax + 1));
+    for (j = mhs->max + 1; j <= newmax; j++)
+      mhs->flags[j] = 0;
+
+    mhs->max = newmax;
+  }
+}
+
+static void mhs_free_sequences (struct mh_sequences *mhs)
+{
+  FREE (&mhs->flags);
+}
+
+static short mhs_check (struct mh_sequences *mhs, int i)
+{
+  if (!mhs->flags || i > mhs->max)
+    return 0;
+  else
+    return mhs->flags[i];
+}
+
+static short mhs_set (struct mh_sequences *mhs, int i, short f)
+{
+  mhs_alloc (mhs, i);
+  mhs->flags[i] |= f;
+  return mhs->flags[i];
+}
+
+#if 0
+
+/* unused */
+
+static short mhs_unset (struct mh_sequences *mhs, int i, short f)
+{
+  mhs_alloc (mhs, i);
+  mhs->flags[i] &= ~f;
+  return mhs->flags[i];
+}
+
+#endif
+
+static void mh_read_token (char *t, int *first, int *last)
+{
+  char *p;
+  if ((p = strchr (t, '-')))
+  {
+    *p++ = '\0';
+    *first = atoi (t);
+    *last = atoi (p);
+  }
+  else
+    *first = *last = atoi (t);
+}
+
+static void mh_read_sequences (struct mh_sequences *mhs, const char *path)
+{
+  FILE *fp;
+  int line = 1;
+  char *buff = NULL;
+  char *t;
+  size_t sz = 0;
+
+  short f;
+  int first, last;
+
+  char pathname[_POSIX_PATH_MAX];
+  snprintf (pathname, sizeof (pathname), "%s/.mh_sequences", path);
+
+  if (!(fp = fopen (pathname, "r")))
+    return;
+
+  while ((buff = mutt_read_line (buff, &sz, fp, &line)))
+  {
+    if (!(t = strtok (buff, " \t:")))
+      continue;
+
+    if (!mutt_strcmp (t, MhUnseen))
+      f = MH_SEQ_UNSEEN;
+    else if (!mutt_strcmp (t, MhFlagged))
+      f = MH_SEQ_FLAGGED;
+    else if (!mutt_strcmp (t, MhReplied))
+      f = MH_SEQ_REPLIED;
+    else                       /* unknown sequence */
+      continue;
+
+    while ((t = strtok (NULL, " \t:")))
+    {
+      mh_read_token (t, &first, &last);
+      for (; first <= last; first++)
+       mhs_set (mhs, first, f);
+    }
+  }
+
+  FREE (&buff);
+  safe_fclose (&fp);
+}
+
+int mh_buffy (const char *path)
+{
+  int i, r = 0;
+  struct mh_sequences mhs;
+  memset (&mhs, 0, sizeof (mhs));
+
+  mh_read_sequences (&mhs, path);
+  for (i = 0; !r && i <= mhs.max; i++)
+    if (mhs_check (&mhs, i) & MH_SEQ_UNSEEN)
+      r = 1;
+  mhs_free_sequences (&mhs);
+  return r;
+}
+
+static int mh_mkstemp (CONTEXT * dest, FILE ** fp, char **tgt)
+{
+  int fd;
+  char path[_POSIX_PATH_MAX];
+
+  FOREVER
+  {
+    snprintf (path, _POSIX_PATH_MAX, "%s/.mutt-%s-%d-%d",
+             dest->path, NONULL (Hostname), (int) getpid (), Counter++);
+    if ((fd = open (path, O_WRONLY | O_EXCL | O_CREAT, 0600)) == -1)
+    {
+      if (errno != EEXIST)
+      {
+       mutt_perror (path);
+       return -1;
+      }
+    }
+    else
+    {
+      *tgt = safe_strdup (path);
+      break;
+    }
+  }
+
+  if ((*fp = fdopen (fd, "w")) == NULL)
+  {
+    FREE (tgt);
+    close (fd);
+    unlink (path);
+    return (-1);
+  }
+
+  return 0;
+}
+
+static void mhs_write_one_sequence (FILE * fp, struct mh_sequences *mhs,
+                                   short f, const char *tag)
+{
+  int i;
+  int first, last;
+  fprintf (fp, "%s:", tag);
+
+  first = -1;
+  last = -1;
+
+  for (i = 0; i <= mhs->max; i++)
+  {
+    if ((mhs_check (mhs, i) & f))
+    {
+      if (first < 0)
+       first = i;
+      else
+       last = i;
+    }
+    else if (first >= 0)
+    {
+      if (last < 0)
+       fprintf (fp, " %d", first);
+      else
+       fprintf (fp, " %d-%d", first, last);
+
+      first = -1;
+      last = -1;
+    }
+  }
+
+  if (first >= 0)
+  {
+    if (last < 0)
+      fprintf (fp, " %d", first);
+    else
+      fprintf (fp, " %d-%d", first, last);
+  }
+
+  fputc ('\n', fp);
+}
+
+/* XXX - we don't currently remove deleted messages from sequences we don't know.  Should we? */
+
+void mh_update_sequences (CONTEXT * ctx)
+{
+  FILE *ofp, *nfp;
+
+  char sequences[_POSIX_PATH_MAX];
+  char *tmpfname;
+  char *buff = NULL;
+  char *p;
+  size_t s;
+  int l = 0;
+  int i;
+
+  int unseen = 0;
+  int flagged = 0;
+  int replied = 0;
+
+  char seq_unseen[STRING];
+  char seq_replied[STRING];
+  char seq_flagged[STRING];
+
+
+  struct mh_sequences mhs;
+  memset (&mhs, 0, sizeof (mhs));
+
+  snprintf (seq_unseen, sizeof (seq_unseen), "%s:", NONULL (MhUnseen));
+  snprintf (seq_replied, sizeof (seq_replied), "%s:", NONULL (MhReplied));
+  snprintf (seq_flagged, sizeof (seq_flagged), "%s:", NONULL (MhFlagged));
+
+  if (mh_mkstemp (ctx, &nfp, &tmpfname) != 0)
+  {
+    /* error message? */
+    return;
+  }
+
+  snprintf (sequences, sizeof (sequences), "%s/.mh_sequences", ctx->path);
+
+
+  /* first, copy unknown sequences */
+  if ((ofp = fopen (sequences, "r")))
+  {
+    while ((buff = mutt_read_line (buff, &s, ofp, &l)))
+    {
+      if (!mutt_strncmp (buff, seq_unseen, mutt_strlen (seq_unseen)))
+       continue;
+      if (!mutt_strncmp (buff, seq_flagged, mutt_strlen (seq_flagged)))
+       continue;
+      if (!mutt_strncmp (buff, seq_replied, mutt_strlen (seq_replied)))
+       continue;
+
+      fprintf (nfp, "%s\n", buff);
+    }
+  }
+  safe_fclose (&ofp);
+
+  /* now, update our unseen, flagged, and replied sequences */
+  for (l = 0; l < ctx->msgcount; l++)
+  {
+    if (ctx->hdrs[l]->deleted)
+      continue;
+
+    if ((p = strrchr (ctx->hdrs[l]->path, '/')))
+      p++;
+    else
+      p = ctx->hdrs[l]->path;
+
+    i = atoi (p);
+
+    if (!ctx->hdrs[l]->read)
+    {
+      mhs_set (&mhs, i, MH_SEQ_UNSEEN);
+      unseen++;
+    }
+    if (ctx->hdrs[l]->flagged)
+    {
+      mhs_set (&mhs, i, MH_SEQ_FLAGGED);
+      flagged++;
+    }
+    if (ctx->hdrs[l]->replied)
+    {
+      mhs_set (&mhs, i, MH_SEQ_REPLIED);
+      replied++;
+    }
+  }
+
+  /* write out the new sequences */
+  if (unseen)
+    mhs_write_one_sequence (nfp, &mhs, MH_SEQ_UNSEEN, NONULL (MhUnseen));
+  if (flagged)
+    mhs_write_one_sequence (nfp, &mhs, MH_SEQ_FLAGGED, NONULL (MhFlagged));
+  if (replied)
+    mhs_write_one_sequence (nfp, &mhs, MH_SEQ_REPLIED, NONULL (MhReplied));
+
+  mhs_free_sequences (&mhs);
+
+
+  /* try to commit the changes - no guarantee here */
+  safe_fclose (&nfp);
+
+  unlink (sequences);
+  if (safe_rename (tmpfname, sequences) != 0)
+  {
+    /* report an error? */
+    unlink (tmpfname);
+  }
+
+  FREE (&tmpfname);
+}
+
+static void mh_sequences_add_one (CONTEXT * ctx, int n, short unseen,
+                                 short flagged, short replied)
+{
+  short unseen_done = 0;
+  short flagged_done = 0;
+  short replied_done = 0;
+
+  FILE *ofp = NULL, *nfp = NULL;
+
+  char *tmpfname;
+  char sequences[_POSIX_PATH_MAX];
+
+  char seq_unseen[STRING];
+  char seq_replied[STRING];
+  char seq_flagged[STRING];
+
+  char *buff = NULL;
+  int line;
+  size_t sz;
+
+  if (mh_mkstemp (ctx, &nfp, &tmpfname) == -1)
+    return;
+
+  snprintf (seq_unseen, sizeof (seq_unseen), "%s:", NONULL (MhUnseen));
+  snprintf (seq_replied, sizeof (seq_replied), "%s:", NONULL (MhReplied));
+  snprintf (seq_flagged, sizeof (seq_flagged), "%s:", NONULL (MhFlagged));
+
+  snprintf (sequences, sizeof (sequences), "%s/.mh_sequences", ctx->path);
+  if ((ofp = fopen (sequences, "r")))
+  {
+    while ((buff = mutt_read_line (buff, &sz, ofp, &line)))
+    {
+      if (unseen && !strncmp (buff, seq_unseen, mutt_strlen (seq_unseen)))
+      {
+       fprintf (nfp, "%s %d\n", buff, n);
+       unseen_done = 1;
+      }
+      else if (flagged
+              && !strncmp (buff, seq_flagged, mutt_strlen (seq_flagged)))
+      {
+       fprintf (nfp, "%s %d\n", buff, n);
+       flagged_done = 1;
+      }
+      else if (replied
+              && !strncmp (buff, seq_replied, mutt_strlen (seq_replied)))
+      {
+       fprintf (nfp, "%s %d\n", buff, n);
+       replied_done = 1;
+      }
+      else
+       fprintf (nfp, "%s\n", buff);
+    }
+  }
+  safe_fclose (&ofp);
+  FREE (&buff);
+
+  if (!unseen_done && unseen)
+    fprintf (nfp, "%s: %d\n", NONULL (MhUnseen), n);
+  if (!flagged_done && flagged)
+    fprintf (nfp, "%s: %d\n", NONULL (MhFlagged), n);
+  if (!replied_done && replied)
+    fprintf (nfp, "%s: %d\n", NONULL (MhReplied), n);
+
+  safe_fclose (&nfp);
+
+  unlink (sequences);
+  if (safe_rename (tmpfname, sequences) != 0)
+    unlink (tmpfname);
+
+  FREE (&tmpfname);
+}
+
+static void mh_update_maildir (struct maildir *md, struct mh_sequences *mhs)
+{
+  int i;
+  short f;
+  char *p;
+
+  for (; md; md = md->next)
+  {
+    if ((p = strrchr (md->h->path, '/')))
+      p++;
+    else
+      p = md->h->path;
+
+    i = atoi (p);
+    f = mhs_check (mhs, i);
+
+    md->h->read = (f & MH_SEQ_UNSEEN) ? 0 : 1;
+    md->h->flagged = (f & MH_SEQ_FLAGGED) ? 1 : 0;
+    md->h->replied = (f & MH_SEQ_REPLIED) ? 1 : 0;
+  }
+}
+
+/* maildir support */
+
+static void maildir_free_entry (struct maildir **md)
+{
+  if (!md || !*md)
+    return;
+
+  FREE (&(*md)->canon_fname);
+  if ((*md)->h)
+    mutt_free_header (&(*md)->h);
+
+  FREE (md);
+}
+
+static void maildir_free_maildir (struct maildir **md)
+{
+  struct maildir *p, *q;
+
+  if (!md || !*md)
+    return;
+
+  for (p = *md; p; p = q)
+  {
+    q = p->next;
+    maildir_free_entry (&p);
+  }
+}
+
+static void maildir_parse_flags (HEADER * h, const char *path)
+{
+  char *p, *q = NULL;
+
+  h->flagged = 0;
+  h->read = 0;
+  h->replied = 0;
+
+  if ((p = strrchr (path, ':')) != NULL && mutt_strncmp (p + 1, "2,", 2) == 0)
+  {
+    p += 3;
+    
+    mutt_str_replace (&h->maildir_flags, p);
+    q = h->maildir_flags;
+
+    while (*p)
+    {
+      switch (*p)
+      {
+      case 'F':
+
+       h->flagged = 1;
+       break;
+
+      case 'S':                /* seen */
+
+       h->read = 1;
+       break;
+
+      case 'R':                /* replied */
+
+       h->replied = 1;
+       break;
+
+      case 'T':                /* trashed */
+       h->trash = 1;
+       h->deleted = 1;
+       break;
+      
+      default:
+       *q++ = *p;
+       break;
+      }
+      p++;
+    }
+  }
+  
+  if (q == h->maildir_flags)
+    FREE (&h->maildir_flags);
+  else if (q)
+    *q = '\0';
+}
+
+static void maildir_update_mtime (CONTEXT * ctx)
+{
+  char buf[_POSIX_PATH_MAX];
+  struct stat st;
+
+  if (ctx->magic == M_MAILDIR)
+  {
+    snprintf (buf, sizeof (buf), "%s/%s", ctx->path, "cur");
+    if (stat (buf, &st) == 0)
+      ctx->mtime_cur = st.st_mtime;
+    snprintf (buf, sizeof (buf), "%s/%s", ctx->path, "new");
+  }
+  else
+  {
+    snprintf (buf, sizeof (buf), "%s/.mh_sequences", ctx->path);
+    if (stat (buf, &st) == 0)
+      ctx->mtime_cur = st.st_mtime;
+
+    strfcpy (buf, ctx->path, sizeof (buf));
+  }
+
+  if (stat (buf, &st) == 0)
+    ctx->mtime = st.st_mtime;
+}
+
+/* 
+ * Actually parse a maildir message.  This may also be used to fill
+ * out a fake header structure generated by lazy maildir parsing.
+ */
+static HEADER *maildir_parse_message (int magic, const char *fname,
+                                     int is_old, HEADER * _h)
+{
+  FILE *f;
+  HEADER *h = _h;
+  struct stat st;
+
+  if ((f = fopen (fname, "r")) != NULL)
+  {
+    if (!h)
+      h = mutt_new_header ();
+    h->env = mutt_read_rfc822_header (f, h, 0, 0);
+
+    fstat (fileno (f), &st);
+    fclose (f);
+
+    if (!h->received)
+      h->received = h->date_sent;
+
+    if (h->content->length <= 0)
+      h->content->length = st.st_size - h->content->offset;
+
+    h->index = -1;
+
+    if (magic == M_MAILDIR)
+    {
+      /* 
+       * maildir stores its flags in the filename, so ignore the
+       * flags in the header of the message 
+       */
+
+      h->old = is_old;
+      maildir_parse_flags (h, fname);
+    }
+    return h;
+  }
+  return NULL;
+}
+
+/* 
+ * Note that this routine will _not_ modify the context given by
+ * ctx. 
+ *
+ * It's used in the first parsing pass on maildir and MH folders.
+ * In the MH case, this means full parsing of the folder.  In the
+ * maildir case, it means that we only look at flags, and create a
+ * fake HEADER structure, which may later be filled in by
+ * maildir_parse_message(), when called from
+ * maildir_delayed_parsing().
+ * 
+ */
+
+static int maildir_parse_entry (CONTEXT * ctx, struct maildir ***last,
+                               const char *subdir, const char *fname,
+                               int *count, int is_old)
+{
+  struct maildir *entry;
+  HEADER *h = NULL;
+  char buf[_POSIX_PATH_MAX];
+
+  if (subdir)
+    snprintf (buf, sizeof (buf), "%s/%s/%s", ctx->path, subdir, fname);
+  else
+    snprintf (buf, sizeof (buf), "%s/%s", ctx->path, fname);
+
+  if (ctx->magic == M_MH)
+    h = maildir_parse_message (ctx->magic, buf, is_old, NULL);
+  else
+  {
+    h = mutt_new_header ();
+    h->old = is_old;
+    maildir_parse_flags (h, buf);
+  }
+
+  if (h != NULL)
+  {
+    if (count)
+    {
+      (*count)++;
+      if (!ctx->quiet && ReadInc && ((*count % ReadInc) == 0 || *count == 1))
+       mutt_message (_("Reading %s... %d"), ctx->path, *count);
+    }
+
+    if (subdir)
+    {
+      snprintf (buf, sizeof (buf), "%s/%s", subdir, fname);
+      h->path = safe_strdup (buf);
+    }
+    else
+      h->path = safe_strdup (fname);
+
+    entry = safe_calloc (sizeof (struct maildir), 1);
+    entry->h = h;
+    entry->header_parsed = (ctx->magic == M_MH);
+    **last = entry;
+    *last = &entry->next;
+
+    return 0;
+  }
+
+  return -1;
+}
+
+
+
+/* Ignore the garbage files.  A valid MH message consists of only
+ * digits.  Deleted message get moved to a filename with a comma before
+ * it.
+ */
+
+int mh_valid_message (const char *s)
+{
+  for (; *s; s++)
+  {
+    if (!isdigit ((unsigned char) *s))
+      return 0;
+  }
+  return 1;
+}
+
+static int maildir_parse_dir (CONTEXT * ctx, struct maildir ***last,
+                             const char *subdir, int *count)
+{
+  DIR *dirp;
+  struct dirent *de;
+  char buf[_POSIX_PATH_MAX];
+  int is_old = 0;
+
+  if (subdir)
+  {
+    snprintf (buf, sizeof (buf), "%s/%s", ctx->path, subdir);
+    is_old = (mutt_strcmp ("cur", subdir) == 0);
+  }
+  else
+    strfcpy (buf, ctx->path, sizeof (buf));
+
+  if ((dirp = opendir (buf)) == NULL)
+    return -1;
+
+  while ((de = readdir (dirp)) != NULL)
+  {
+
+    if ((ctx->magic == M_MH && !mh_valid_message (de->d_name))
+       || (ctx->magic == M_MAILDIR && *de->d_name == '.'))
+      continue;
+
+    /* FOO - really ignore the return value? */
+
+    dprint (2,
+           (debugfile, "%s:%d: parsing %s\n", __FILE__, __LINE__,
+            de->d_name));
+    maildir_parse_entry (ctx, last, subdir, de->d_name, count, is_old);
+  }
+
+  closedir (dirp);
+  return 0;
+}
+
+static int maildir_add_to_context (CONTEXT * ctx, struct maildir *md)
+{
+  int oldmsgcount = ctx->msgcount;
+
+  while (md)
+  {
+
+    dprint (2, (debugfile, "%s:%d maildir_add_to_context(): Considering %s\n",
+               __FILE__, __LINE__, NONULL (md->canon_fname)));
+
+    if (md->h)
+    {
+      dprint (2,
+             (debugfile,
+              "%s:%d Adding header structure. Flags: %s%s%s%s%s\n", __FILE__,
+              __LINE__, md->h->flagged ? "f" : "", md->h->deleted ? "D" : "",
+              md->h->replied ? "r" : "", md->h->old ? "O" : "",
+              md->h->read ? "R" : ""));
+      if (ctx->msgcount == ctx->hdrmax)
+       mx_alloc_memory (ctx);
+
+      ctx->hdrs[ctx->msgcount] = md->h;
+      ctx->hdrs[ctx->msgcount]->index = ctx->msgcount;
+      ctx->size +=
+       md->h->content->length + md->h->content->offset -
+       md->h->content->hdr_offset;
+
+      md->h = NULL;
+      ctx->msgcount++;
+    }
+    md = md->next;
+  }
+
+  if (ctx->msgcount > oldmsgcount)
+  {
+    mx_update_context (ctx, ctx->msgcount - oldmsgcount);
+    return 1;
+  }
+  return 0;
+}
+
+static int maildir_move_to_context (CONTEXT * ctx, struct maildir **md)
+{
+  int r;
+  r = maildir_add_to_context (ctx, *md);
+  maildir_free_maildir (md);
+  return r;
+}
+
+
+/* 
+ * This function does the second parsing pass for a maildir-style
+ * folder.
+ */
+
+void maildir_delayed_parsing (CONTEXT * ctx, struct maildir *md)
+{
+  struct maildir *p;
+  char fn[_POSIX_PATH_MAX];
+
+  for (p = md; p; p = p->next)
+    if (p && p->h && !p->header_parsed)
+    {
+      snprintf (fn, sizeof (fn), "%s/%s", ctx->path, p->h->path);
+      if (maildir_parse_message (ctx->magic, fn, p->h->old, p->h))
+       p->header_parsed = 1;
+      else
+       mutt_free_header (&p->h);
+    }
+}
+
+
+
+/* Read a MH/maildir style mailbox.
+ *
+ * args:
+ *     ctx [IN/OUT]    context for this mailbox
+ *     subdir [IN]     NULL for MH mailboxes, otherwise the subdir of the
+ *                     maildir mailbox to read from
+ */
+int mh_read_dir (CONTEXT * ctx, const char *subdir)
+{
+  struct maildir *md;
+  struct mh_sequences mhs;
+  struct maildir **last;
+  int count;
+
+
+  memset (&mhs, 0, sizeof (mhs));
+
+  maildir_update_mtime (ctx);
+
+  md = NULL;
+  last = &md;
+  count = 0;
+  if (maildir_parse_dir (ctx, &last, subdir, &count) == -1)
+    return -1;
+
+  if (ctx->magic == M_MH)
+  {
+    mh_read_sequences (&mhs, ctx->path);
+    mh_update_maildir (md, &mhs);
+    mhs_free_sequences (&mhs);
+  }
+
+  if (ctx->magic == M_MAILDIR)
+    maildir_delayed_parsing (ctx, md);
+
+  maildir_move_to_context (ctx, &md);
+  return 0;
+}
+
+/* read a maildir style mailbox */
+int maildir_read_dir (CONTEXT * ctx)
+{
+  /* maildir looks sort of like MH, except that there are two subdirectories
+   * of the main folder path from which to read messages
+   */
+  if (mh_read_dir (ctx, "new") == -1 || mh_read_dir (ctx, "cur") == -1)
+    return (-1);
+
+  return 0;
+}
+
+/*
+ * Open a new (temporary) message in an MH folder.
+ */
+
+int mh_open_new_message (MESSAGE * msg, CONTEXT * dest, HEADER * hdr)
+{
+  return mh_mkstemp (dest, &msg->fp, &msg->path);
+}
+
+int ch_compar (const void *a, const void *b)
+{
+  return (int)( *((const char *) a) - *((const char *) b));
+}
+
+static void maildir_flags (char *dest, size_t destlen, HEADER * hdr)
+{
+  *dest = '\0';
+
+  /*
+   * The maildir specification requires that all files in the cur
+   * subdirectory have the :unique string appeneded, regardless of whether
+   * or not there are any flags.  If .old is set, we know that this message
+   * will end up in the cur directory, so we include it in the following
+   * test even though there is no associated flag.
+   */
+  
+  if (hdr && (hdr->flagged || hdr->replied || hdr->read || hdr->deleted || hdr->old || hdr->maildir_flags))
+  {
+    char tmp[LONG_STRING];
+    snprintf (tmp, sizeof (tmp),
+             "%s%s%s%s%s",
+             hdr->flagged ? "F" : "",
+             hdr->replied ? "R" : "",
+             hdr->read ? "S" : "", hdr->deleted ? "T" : "",
+             NONULL(hdr->maildir_flags));
+    if (hdr->maildir_flags)
+      qsort (tmp, strlen (tmp), 1, ch_compar);
+    snprintf (dest, destlen, ":2,%s", tmp);
+  }
+}
+
+
+/*
+ * Open a new (temporary) message in a maildir folder.
+ * 
+ * Note that this uses _almost_ the maildir file name format, but
+ * with a {cur,new} prefix.
+ *
+ */
+
+int maildir_open_new_message (MESSAGE * msg, CONTEXT * dest, HEADER * hdr)
+{
+  int fd;
+  char path[_POSIX_PATH_MAX];
+  char suffix[16];
+  char subdir[16];
+
+  if (hdr)
+  {
+    short deleted = hdr->deleted;
+    hdr->deleted = 0;
+
+    maildir_flags (suffix, sizeof (suffix), hdr);
+
+    hdr->deleted = deleted;
+  }
+  else
+    *suffix = '\0';
+
+  if (hdr && (hdr->read || hdr->old))
+    strfcpy (subdir, "cur", sizeof (subdir));
+  else
+    strfcpy (subdir, "new", sizeof (subdir));
+
+  FOREVER
+  {
+    snprintf (path, _POSIX_PATH_MAX, "%s/tmp/%s.%ld.%d_%d.%s%s",
+             dest->path, subdir, time (NULL), getpid (), Counter++,
+             NONULL (Hostname), suffix);
+
+    dprint (2, (debugfile, "maildir_open_new_message (): Trying %s.\n",
+               path));
+
+    if ((fd = open (path, O_WRONLY | O_EXCL | O_CREAT, 0600)) == -1)
+    {
+      if (errno != EEXIST)
+      {
+       mutt_perror (path);
+       return -1;
+      }
+    }
+    else
+    {
+      dprint (2, (debugfile, "maildir_open_new_message (): Success.\n"));
+      msg->path = safe_strdup (path);
+      break;
+    }
+  }
+
+  if ((msg->fp = fdopen (fd, "w")) == NULL)
+  {
+    FREE (&msg->path);
+    close (fd);
+    unlink (path);
+    return (-1);
+  }
+
+  return 0;
+}
+
+
+
+/*
+ * Commit a message to a maildir folder.
+ * 
+ * msg->path contains the file name of a file in tmp/. We take the
+ * flags from this file's name. 
+ *
+ * ctx is the mail folder we commit to.
+ * 
+ * hdr is a header structure to which we write the message's new
+ * file name.  This is used in the mh and maildir folder synch
+ * routines.  When this routine is invoked from mx_commit_message,
+ * hdr is NULL. 
+ *
+ * msg->path looks like this:
+ * 
+ *    tmp/{cur,new}.mutt-HOSTNAME-PID-COUNTER:flags
+ * 
+ * See also maildir_open_new_message().
+ * 
+ */
+
+int maildir_commit_message (CONTEXT * ctx, MESSAGE * msg, HEADER * hdr)
+{
+  char subdir[4];
+  char suffix[16];
+  char path[_POSIX_PATH_MAX];
+  char full[_POSIX_PATH_MAX];
+  char *s;
+
+  if (safe_fclose (&msg->fp) != 0)
+    return -1;
+
+  /* extract the subdir */
+  s = strrchr (msg->path, '/') + 1;
+  strfcpy (subdir, s, 4);
+
+  /* extract the flags */
+  if ((s = strchr (s, ':')))
+    strfcpy (suffix, s, sizeof (suffix));
+  else
+    suffix[0] = '\0';
+
+  /* construct a new file name. */
+  FOREVER
+  {
+    snprintf (path, _POSIX_PATH_MAX, "%s/%ld.%d_%d.%s%s", subdir,
+             time (NULL), getpid (), Counter++, NONULL (Hostname), suffix);
+    snprintf (full, _POSIX_PATH_MAX, "%s/%s", ctx->path, path);
+
+    dprint (2, (debugfile, "maildir_commit_message (): renaming %s to %s.\n",
+               msg->path, full));
+
+    if (safe_rename (msg->path, full) == 0)
+    {
+      if (hdr)
+       mutt_str_replace (&hdr->path, path);
+      FREE (&msg->path);
+
+      /*
+       * Adjust the mtime on the file to match the time at which this
+       * message was received.  Currently this is only set when copying
+       * messages between mailboxes, so we test to ensure that it is
+       * actually set.
+       */
+      if (msg->received)
+      {
+       struct utimbuf ut;
+
+       ut.actime = msg->received;
+       ut.modtime = msg->received;
+       if (utime (full, &ut))
+       {
+         mutt_perror (_("maildir_commit_message(): unable to set time on file"));
+         return -1;
+       }
+      }
+
+      return 0;
+    }
+    else if (errno != EEXIST)
+    {
+      mutt_perror (ctx->path);
+      return -1;
+    }
+  }
+}
+
+/* 
+ * commit a message to an MH folder.
+ * 
+ */
+
+
+static int _mh_commit_message (CONTEXT * ctx, MESSAGE * msg, HEADER * hdr,
+                              short updseq)
+{
+  DIR *dirp;
+  struct dirent *de;
+  char *cp, *dep;
+  unsigned int n, hi = 0;
+  char path[_POSIX_PATH_MAX];
+  char tmp[16];
+
+  if (safe_fclose (&msg->fp) != 0)
+    return -1;
+
+  if ((dirp = opendir (ctx->path)) == NULL)
+  {
+    mutt_perror (ctx->path);
+    return (-1);
+  }
+
+  /* figure out what the next message number is */
+  while ((de = readdir (dirp)) != NULL)
+  {
+    dep = de->d_name;
+    if (*dep == ',')
+      dep++;
+    cp = dep;
+    while (*cp)
+    {
+      if (!isdigit ((unsigned char) *cp))
+       break;
+      cp++;
+    }
+    if (!*cp)
+    {
+      n = atoi (dep);
+      if (n > hi)
+       hi = n;
+    }
+  }
+  closedir (dirp);
+
+  /* 
+   * Now try to rename the file to the proper name.
+   * 
+   * Note: We may have to try multiple times, until we find a free
+   * slot.
+   */
+
+  FOREVER
+  {
+    hi++;
+    snprintf (tmp, sizeof (tmp), "%d", hi);
+    snprintf (path, sizeof (path), "%s/%s", ctx->path, tmp);
+    if (safe_rename (msg->path, path) == 0)
+    {
+      if (hdr)
+       mutt_str_replace (&hdr->path, tmp);
+      FREE (&msg->path);
+      break;
+    }
+    else if (errno != EEXIST)
+    {
+      mutt_perror (ctx->path);
+      return -1;
+    }
+  }
+  if (updseq)
+    mh_sequences_add_one (ctx, hi, !msg->flags.read, msg->flags.flagged,
+                         msg->flags.replied);
+  return 0;
+}
+
+int mh_commit_message (CONTEXT * ctx, MESSAGE * msg, HEADER * hdr)
+{
+  return _mh_commit_message (ctx, msg, hdr, 1);
+}
+
+
+/* Sync a message in an MH folder.
+ * 
+ * This code is also used for attachment deletion in maildir
+ * folders.
+ */
+
+static int mh_rewrite_message (CONTEXT * ctx, int msgno)
+{
+  HEADER *h = ctx->hdrs[msgno];
+  MESSAGE *dest;
+
+  int rc;
+  short restore = 1;
+  char oldpath[_POSIX_PATH_MAX];
+  char newpath[_POSIX_PATH_MAX];
+  char partpath[_POSIX_PATH_MAX];
+
+  long old_body_offset = h->content->offset;
+  long old_body_length = h->content->length;
+  long old_hdr_lines = h->lines;
+
+  if ((dest = mx_open_new_message (ctx, h, 0)) == NULL)
+    return -1;
+
+  if ((rc = mutt_copy_message (dest->fp, ctx, h,
+                              M_CM_UPDATE, CH_UPDATE | CH_UPDATE_LEN)) == 0)
+  {
+    snprintf (oldpath, _POSIX_PATH_MAX, "%s/%s", ctx->path, h->path);
+    strfcpy (partpath, h->path, _POSIX_PATH_MAX);
+
+    if (ctx->magic == M_MAILDIR)
+      rc = maildir_commit_message (ctx, dest, h);
+    else
+      rc = _mh_commit_message (ctx, dest, h, 0);
+
+    mx_close_message (&dest);
+
+    if (rc == 0)
+    {
+      unlink (oldpath);
+      restore = 0;
+    }
+
+    /* 
+     * Try to move the new message to the old place.
+     * (MH only.)
+     *
+     * This is important when we are just updating flags.
+     *
+     * Note that there is a race condition against programs which
+     * use the first free slot instead of the maximum message
+     * number.  Mutt does _not_ behave like this.
+     * 
+     * Anyway, if this fails, the message is in the folder, so
+     * all what happens is that a concurrently runnung mutt will
+     * lose flag modifications.
+     */
+
+    if (ctx->magic == M_MH && rc == 0)
+    {
+      snprintf (newpath, _POSIX_PATH_MAX, "%s/%s", ctx->path, h->path);
+      if ((rc = safe_rename (newpath, oldpath)) == 0)
+       mutt_str_replace (&h->path, partpath);
+    }
+  }
+  else
+    mx_close_message (&dest);
+
+  if (rc == -1 && restore)
+  {
+    h->content->offset = old_body_offset;
+    h->content->length = old_body_length;
+    h->lines = old_hdr_lines;
+  }
+
+  mutt_free_body (&h->content->parts);
+  return rc;
+}
+
+static int mh_sync_message (CONTEXT * ctx, int msgno)
+{
+  HEADER *h = ctx->hdrs[msgno];
+
+  if (h->attach_del)
+    if (mh_rewrite_message (ctx, msgno) != 0)
+      return -1;
+
+  return 0;
+}
+
+static int maildir_sync_message (CONTEXT * ctx, int msgno)
+{
+  HEADER *h = ctx->hdrs[msgno];
+
+  if (h->attach_del)
+  {
+    /* when doing attachment deletion, fall back to the MH case. */
+    if (mh_rewrite_message (ctx, msgno) != 0)
+      return (-1);
+  }
+  else
+  {
+    /* we just have to rename the file. */
+
+    char newpath[_POSIX_PATH_MAX];
+    char partpath[_POSIX_PATH_MAX];
+    char fullpath[_POSIX_PATH_MAX];
+    char oldpath[_POSIX_PATH_MAX];
+    char suffix[16];
+    char *p;
+
+    if ((p = strrchr (h->path, '/')) == NULL)
+    {
+      dprint (1,
+             (debugfile,
+              "maildir_sync_message: %s: unable to find subdir!\n",
+              h->path));
+      return (-1);
+    }
+    p++;
+    strfcpy (newpath, p, sizeof (newpath));
+
+    /* kill the previous flags */
+    if ((p = strchr (newpath, ':')) != NULL)
+      *p = 0;
+
+    maildir_flags (suffix, sizeof (suffix), h);
+
+    snprintf (partpath, sizeof (partpath), "%s/%s%s",
+             (h->read || h->old) ? "cur" : "new", newpath, suffix);
+    snprintf (fullpath, sizeof (fullpath), "%s/%s", ctx->path, partpath);
+    snprintf (oldpath, sizeof (oldpath), "%s/%s", ctx->path, h->path);
+
+    if (mutt_strcmp (fullpath, oldpath) == 0)
+    {
+      /* message hasn't really changed */
+      return 0;
+    }
+
+    /* record that the message is possibly marked as trashed on disk */
+    h->trash = h->deleted;
+
+    if (rename (oldpath, fullpath) != 0)
+    {
+      mutt_perror ("rename");
+      return (-1);
+    }
+    mutt_str_replace (&h->path, partpath);
+  }
+  return (0);
+}
+
+int mh_sync_mailbox (CONTEXT * ctx, int *index_hint)
+{
+  char path[_POSIX_PATH_MAX], tmp[_POSIX_PATH_MAX];
+  int i, j;
+
+  if (ctx->magic == M_MH)
+    i = mh_check_mailbox (ctx, index_hint);
+  else 
+    i = maildir_check_mailbox (ctx, index_hint);
+      
+  if (i != 0)
+    return i;
+
+  for (i = 0; i < ctx->msgcount; i++)
+  {
+    if (ctx->hdrs[i]->deleted
+       && (ctx->magic != M_MAILDIR || !option (OPTMAILDIRTRASH)))
+    {
+      snprintf (path, sizeof (path), "%s/%s", ctx->path, ctx->hdrs[i]->path);
+      if (ctx->magic == M_MAILDIR
+         || (option (OPTMHPURGE) && ctx->magic == M_MH))
+       unlink (path);
+      else if (ctx->magic == M_MH)
+      {
+       /* MH just moves files out of the way when you delete them */
+       if (*ctx->hdrs[i]->path != ',')
+       {
+         snprintf (tmp, sizeof (tmp), "%s/,%s", ctx->path,
+                   ctx->hdrs[i]->path);
+         unlink (tmp);
+         rename (path, tmp);
+       }
+
+      }
+    }
+    else if (ctx->hdrs[i]->changed || ctx->hdrs[i]->attach_del ||
+            (ctx->magic == M_MAILDIR
+             && (option (OPTMAILDIRTRASH) || ctx->hdrs[i]->trash)
+             && (ctx->hdrs[i]->deleted != ctx->hdrs[i]->trash)))
+    {
+      if (ctx->magic == M_MAILDIR)
+      {
+       if (maildir_sync_message (ctx, i) == -1)
+         return -1;
+      }
+      else
+      {
+       if (mh_sync_message (ctx, i) == -1)
+         return -1;
+      }
+    }
+  }
+
+  if (ctx->magic == M_MH)
+    mh_update_sequences (ctx);
+
+  /* XXX race condition? */
+
+  maildir_update_mtime (ctx);
+
+  /* adjust indices */
+
+  if (ctx->deleted)
+  {
+    for (i = 0, j = 0; i < ctx->msgcount; i++)
+    {
+      if (!ctx->hdrs[i]->deleted
+         || (ctx->magic == M_MAILDIR && option (OPTMAILDIRTRASH)))
+       ctx->hdrs[i]->index = j++;
+    }
+  }
+
+  return 0;
+}
+
+static char *maildir_canon_filename (char *dest, const char *src, size_t l)
+{
+  char *t, *u;
+
+  if ((t = strrchr (src, '/')))
+    src = t + 1;
+
+  strfcpy (dest, src, l);
+  if ((u = strrchr (dest, ':')))
+    *u = '\0';
+
+  return dest;
+}
+
+static void maildir_update_tables (CONTEXT *ctx, int *index_hint)
+{
+  short old_sort;
+  int old_count;
+  int i, j;
+  
+  if (Sort != SORT_ORDER)
+  {
+    old_sort = Sort;
+    Sort = SORT_ORDER;
+    mutt_sort_headers (ctx, 1);
+    Sort = old_sort;
+  }
+  
+  old_count = ctx->msgcount;
+  for (i = 0, j = 0; i < old_count; i++)
+  {
+    if (ctx->hdrs[i]->active && index_hint && *index_hint == i)
+      *index_hint = j;
+    
+    if (ctx->hdrs[i]->active)
+      ctx->hdrs[i]->index = j++;
+  }
+
+  mx_update_tables (ctx, 0);
+  mutt_clear_threads (ctx);
+}
+
+static void maildir_update_flags (CONTEXT *ctx, HEADER *o, HEADER *n)
+{
+  /* save the global state here so we can reset it at the
+   * end of list block if required.
+   */
+  int context_changed = ctx->changed;
+  
+  /* user didn't modify this message.  alter the flags to
+   * match the current state on disk.  This may not actually
+   * do anything, but we can't tell right now.  mutt_set_flag()
+   * will just ignore the call if the status bits are
+   * already properly set.
+   */
+  mutt_set_flag (ctx, o, M_FLAG, n->flagged);
+  mutt_set_flag (ctx, o, M_REPLIED, n->replied);
+  mutt_set_flag (ctx, o, M_READ, n->read);
+  mutt_set_flag (ctx, o, M_OLD, n->old);
+
+  /* mutt_set_flag() will set this, but we don't need to
+   * sync the changes we made because we just updated the
+   * context to match the current on-disk state of the
+   * message.
+   */
+  o->changed = 0;
+  
+  /* if the mailbox was not modified before we made these
+   * changes, unset the changed flag since nothing needs to
+   * be synchronized.
+   */
+  if (!context_changed)
+    ctx->changed = 0;
+}
+
+
+/* This function handles arrival of new mail and reopening of
+ * maildir folders.  The basic idea here is we check to see if either
+ * the new or cur subdirectories have changed, and if so, we scan them
+ * for the list of files.  We check for newly added messages, and
+ * then merge the flags messages we already knew about.  We don't treat
+ * either subdirectory differently, as mail could be copied directly into
+ * the cur directory from another agent.
+ */
+int maildir_check_mailbox (CONTEXT * ctx, int *index_hint)
+{
+  struct stat st_new;          /* status of the "new" subdirectory */
+  struct stat st_cur;          /* status of the "cur" subdirectory */
+  char buf[_POSIX_PATH_MAX];
+  int changed = 0;             /* bitmask representing which subdirectories
+                                  have changed.  0x1 = new, 0x2 = cur */
+  int occult = 0;              /* messages were removed from the mailbox */
+  int have_new = 0;            /* messages were added to the mailbox */
+  struct maildir *md;          /* list of messages in the mailbox */
+  struct maildir **last, *p;
+  int i;
+  HASH *fnames;                        /* hash table for quickly looking up the base filename
+                                  for a maildir message */
+
+  /* XXX seems like this check belongs in mx_check_mailbox()
+   * rather than here.
+   */
+  if (!option (OPTCHECKNEW))
+    return 0;
+
+  snprintf (buf, sizeof (buf), "%s/new", ctx->path);
+  if (stat (buf, &st_new) == -1)
+    return -1;
+
+  snprintf (buf, sizeof (buf), "%s/cur", ctx->path);
+  if (stat (buf, &st_cur) == -1)
+    return -1;
+
+  /* determine which subdirectories need to be scanned */
+  if (st_new.st_mtime > ctx->mtime)
+    changed = 1;
+  if (st_cur.st_mtime > ctx->mtime_cur)
+    changed |= 2;
+
+  if (!changed)
+    return 0;                  /* nothing to do */
+
+  /* update the modification times on the mailbox */
+  ctx->mtime_cur = st_cur.st_mtime;
+  ctx->mtime = st_new.st_mtime;
+
+  /* do a fast scan of just the filenames in
+   * the subdirectories that have changed.
+   */
+  md = NULL;
+  last = &md;
+  if (changed & 1)
+    maildir_parse_dir (ctx, &last, "new", NULL);
+  if (changed & 2)
+    maildir_parse_dir (ctx, &last, "cur", NULL);
+
+  /* we create a hash table keyed off the canonical (sans flags) filename
+   * of each message we scanned.  This is used in the loop over the
+   * existing messages below to do some correlation.
+   */
+  fnames = hash_create (1031);
+
+  for (p = md; p; p = p->next)
+  {
+    maildir_canon_filename (buf, p->h->path, sizeof (buf));
+    p->canon_fname = safe_strdup (buf);
+    hash_insert (fnames, p->canon_fname, p, 0);
+  }
+
+  /* check for modifications and adjust flags */
+  for (i = 0; i < ctx->msgcount; i++)
+  {
+    ctx->hdrs[i]->active = 0;
+    maildir_canon_filename (buf, ctx->hdrs[i]->path, sizeof (buf));
+    p = hash_find (fnames, buf);
+    if (p && p->h)
+    {
+      /* message already exists, merge flags */
+      ctx->hdrs[i]->active = 1;
+
+      /* check to see if the message has moved to a different
+       * subdirectory.  If so, update the associated filename.
+       */
+      if (mutt_strcmp (ctx->hdrs[i]->path, p->h->path))
+       mutt_str_replace (&ctx->hdrs[i]->path, p->h->path);
+
+      /* if the user hasn't modified the flags on this message, update
+       * the flags we just detected.
+       */
+      if (!ctx->hdrs[i]->changed)
+       maildir_update_flags (ctx, ctx->hdrs[i], p->h);
+
+      if (ctx->hdrs[i]->deleted == ctx->hdrs[i]->trash)
+       ctx->hdrs[i]->deleted = p->h->deleted;
+      ctx->hdrs[i]->trash = p->h->trash;
+
+      /* this is a duplicate of an existing header, so remove it */
+      mutt_free_header (&p->h);
+    }
+    /* This message was not in the list of messages we just scanned.
+     * Check to see if we have enough information to know if the
+     * message has disappeared out from underneath us.
+     */
+    else if (((changed & 1) && (!strncmp (ctx->hdrs[i]->path, "new/", 4))) ||
+            ((changed & 2) && (!strncmp (ctx->hdrs[i]->path, "cur/", 4))))
+    {
+      /* This message disappeared, so we need to simulate a "reopen"
+       * event.  We know it disappeared because we just scanned the
+       * subdirectory it used to reside in.
+       */
+      occult = 1;
+    }
+    else
+    {
+      /* This message resides in a subdirectory which was not
+       * modified, so we assume that it is still present and
+       * unchanged.
+       */
+      ctx->hdrs[i]->active = 1;
+    }
+  }
+
+  /* destroy the file name hash */
+  hash_destroy (&fnames, NULL);
+
+  /* If we didn't just get new mail, update the tables. */
+  if (occult)
+    maildir_update_tables (ctx, index_hint);
+  
+  /* do any delayed parsing we need to do. */
+  maildir_delayed_parsing (ctx, md);
+
+  /* Incorporate new messages */
+  have_new = maildir_move_to_context (ctx, &md);
+
+  return occult ? M_REOPENED : (have_new ? M_NEW_MAIL : 0);
+}
+
+/* 
+ * This function handles arrival of new mail and reopening of
+ * mh/maildir folders. Things are getting rather complex because we
+ * don't have a well-defined "mailbox order", so the tricks from
+ * mbox.c and mx.c won't work here.
+ *
+ * Don't change this code unless you _really_ understand what
+ * happens.
+ *
+ */
+
+int mh_check_mailbox (CONTEXT * ctx, int *index_hint)
+{
+  char buf[_POSIX_PATH_MAX];
+  struct stat st, st_cur;
+  short modified = 0, have_new = 0, occult = 0;
+  struct maildir *md, *p;
+  struct maildir **last = NULL;
+  struct mh_sequences mhs;
+  HASH *fnames;
+  int i;
+
+  if (!option (OPTCHECKNEW))
+    return 0;
+
+  strfcpy (buf, ctx->path, sizeof (buf));
+  if (stat (buf, &st) == -1)
+    return -1;
+  
+  /* create .mh_sequences when there isn't one. */
+  snprintf (buf, sizeof (buf), "%s/.mh_sequences", ctx->path);
+  if ((i = stat (buf, &st_cur) == -1) && errno == ENOENT)
+  {
+    char *tmp;
+    FILE *fp = NULL;
+    
+    if (mh_mkstemp (ctx, &fp, &tmp) == 0)
+    {
+      safe_fclose (&fp);
+      if (safe_rename (tmp, buf) == -1)
+       unlink (tmp);
+      FREE (&tmp);
+    }
+  }
+
+  if (i == -1 && stat (buf, &st_cur) == -1)
+    modified = 1;
+
+  if (st.st_mtime > ctx->mtime || st_cur.st_mtime > ctx->mtime_cur)
+    modified = 1;
+
+  if (!modified)
+    return 0;
+
+  ctx->mtime_cur = st_cur.st_mtime;
+  ctx->mtime = st.st_mtime;
+
+  memset (&mhs, 0, sizeof (mhs));
+  
+  md   = NULL;
+  last = &md;
+  maildir_parse_dir (ctx, &last, NULL, NULL);
+  mh_read_sequences (&mhs, ctx->path);
+  mh_update_maildir (md, &mhs);
+  mhs_free_sequences (&mhs);
+
+  /* check for modifications and adjust flags */
+  fnames = hash_create (1031);
+
+  for (p = md; p; p = p->next)
+    hash_insert (fnames, p->h->path, p, 0);
+
+  for (i = 0; i < ctx->msgcount; i++)
+  {
+    ctx->hdrs[i]->active = 0;
+
+    if ((p = hash_find (fnames, ctx->hdrs[i]->path)) && p->h &&
+       (mbox_strict_cmp_headers (ctx->hdrs[i], p->h)))
+    {
+      ctx->hdrs[i]->active = 1;
+      /* found the right message */
+      if (!ctx->hdrs[i]->changed)
+       maildir_update_flags (ctx, ctx->hdrs[i], p->h);
+
+      mutt_free_header (&p->h);
+    }
+    else /* message has disappeared */
+      occult = 1;
+  }
+
+  /* destroy the file name hash */
+
+  hash_destroy (&fnames, NULL);
+
+  /* If we didn't just get new mail, update the tables. */
+  if (occult)
+    maildir_update_tables (ctx, index_hint);
+
+  /* Incorporate new messages */
+  have_new = maildir_move_to_context (ctx, &md);
+
+  return occult ? M_REOPENED : (have_new ? M_NEW_MAIL : 0);
+}
+
+
+
+
+/*
+ * These functions try to find a message in a maildir folder when it
+ * has moved under our feet.  Note that this code is rather expensive, but
+ * then again, it's called rarely.
+ */
+
+FILE *_maildir_open_find_message (const char *folder, const char *unique,
+                                 const char *subfolder)
+{
+  char dir[_POSIX_PATH_MAX];
+  char tunique[_POSIX_PATH_MAX];
+  char fname[_POSIX_PATH_MAX];
+
+  DIR *dp;
+  struct dirent *de;
+
+  FILE *fp = NULL;
+  int oe = ENOENT;
+
+  snprintf (dir, sizeof (dir), "%s/%s", folder, subfolder);
+
+  if ((dp = opendir (dir)) == NULL)
+  {
+    errno = ENOENT;
+    return NULL;
+  }
+
+  while ((de = readdir (dp)))
+  {
+    maildir_canon_filename (tunique, de->d_name, sizeof (tunique));
+
+    if (!mutt_strcmp (tunique, unique))
+    {
+      snprintf (fname, sizeof (fname), "%s/%s/%s", folder, subfolder,
+               de->d_name);
+      fp = fopen (fname, "r"); /* __FOPEN_CHECKED__ */
+      oe = errno;
+      break;
+    }
+  }
+
+  closedir (dp);
+
+  errno = oe;
+  return fp;
+}
+
+FILE *maildir_open_find_message (const char *folder, const char *msg)
+{
+  char unique[_POSIX_PATH_MAX];
+  FILE *fp;
+
+  static unsigned int new_hits = 0, cur_hits = 0;      /* simple dynamic optimization */
+
+  maildir_canon_filename (unique, msg, sizeof (unique));
+
+  if (
+      (fp =
+       _maildir_open_find_message (folder, unique,
+                                  new_hits > cur_hits ? "new" : "cur"))
+      || errno != ENOENT)
+  {
+    if (new_hits < UINT_MAX && cur_hits < UINT_MAX)
+    {
+      new_hits += (new_hits > cur_hits ? 1 : 0);
+      cur_hits += (new_hits > cur_hits ? 0 : 1);
+    }
+
+    return fp;
+  }
+  if (
+      (fp =
+       _maildir_open_find_message (folder, unique,
+                                  new_hits > cur_hits ? "cur" : "new"))
+      || errno != ENOENT)
+  {
+    if (new_hits < UINT_MAX && cur_hits < UINT_MAX)
+    {
+      new_hits += (new_hits > cur_hits ? 0 : 1);
+      cur_hits += (new_hits > cur_hits ? 1 : 0);
+    }
+
+    return fp;
+  }
+
+  return NULL;
+}
+
+
+/*
+ * Returns:
+ * 1 if there are no messages in the mailbox
+ * 0 if there are messages in the mailbox
+ * -1 on error
+ */
+int maildir_check_empty (const char *path)
+{
+  DIR *dp;
+  struct dirent *de;
+  int r = 1; /* assume empty until we find a message */
+  char realpath[_POSIX_PATH_MAX];
+  int iter = 0;
+
+  /* Strategy here is to look for any file not beginning with a period */
+
+  do {
+    /* we do "cur" on the first iteration since its more likely that we'll
+     * find old messages without having to scan both subdirs
+     */
+    snprintf (realpath, sizeof (realpath), "%s/%s", path,
+             iter == 0 ? "cur" : "new");
+    if ((dp = opendir (realpath)) == NULL)
+      return -1;
+    while ((de = readdir (dp)))
+    {
+      if (*de->d_name != '.')
+      {
+       r = 0;
+       break;
+      }
+    }
+    closedir (dp);
+    iter++;
+  } while (r && iter < 2);
+
+  return r;
+}
+
+/*
+ * Returns:
+ * 1 if there are no messages in the mailbox
+ * 0 if there are messages in the mailbox
+ * -1 on error
+ */
+int mh_check_empty (const char *path)
+{
+  DIR *dp;
+  struct dirent *de;
+  int r = 1; /* assume empty until we find a message */
+  
+  if ((dp = opendir (path)) == NULL)
+    return -1;
+  while ((de = readdir (dp)))
+  {
+    if (mh_valid_message (de->d_name))
+    {
+      r = 0;
+      break;
+    }
+  }
+  closedir (dp);
+  
+  return r;
+}
diff --git a/mime.h b/mime.h
new file mode 100644 (file)
index 0000000..ebef53e
--- /dev/null
+++ b/mime.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+/* Content-Type */
+enum
+{
+  TYPEOTHER,
+  TYPEAUDIO,
+  TYPEAPPLICATION,
+  TYPEIMAGE,
+  TYPEMESSAGE,
+  TYPEMODEL,
+  TYPEMULTIPART,
+  TYPETEXT,
+  TYPEVIDEO
+};
+
+/* Content-Transfer-Encoding */
+enum
+{
+  ENCOTHER,
+  ENC7BIT,
+  ENC8BIT,
+  ENCQUOTEDPRINTABLE,
+  ENCBASE64,
+  ENCBINARY,
+  ENCUUENCODED
+};
+
+/* Content-Disposition values */
+enum
+{
+  DISPINLINE,
+  DISPATTACH,
+  DISPFORMDATA
+};
+
+/* MIME encoding/decoding global vars */
+
+#ifndef _SENDLIB_C
+extern int Index_hex[];
+extern int Index_64[];
+extern char B64Chars[];
+#endif
+
+#define hexval(c) Index_hex[(unsigned int)(c)]
+#define base64val(c) Index_64[(unsigned int)(c)]
+
+#define is_multipart(x) \
+    ((x)->type == TYPEMULTIPART \
+     || ((x)->type == TYPEMESSAGE && (!strcasecmp((x)->subtype, "rfc822") \
+                                     || !strcasecmp((x)->subtype, "news"))))
+
+extern const char *BodyTypes[];
+extern const char *BodyEncodings[];
+
+#define TYPE(X) ((X->type == TYPEOTHER) && (X->xtype != NULL) ? X->xtype : BodyTypes[(X->type)])
+#define ENCODING(X) BodyEncodings[(X)]
+
+/* other MIME-related global variables */
+#ifndef _SENDLIB_C
+extern char MimeSpecials[];
+#endif
diff --git a/mime.types b/mime.types
new file mode 100644 (file)
index 0000000..23640f6
--- /dev/null
@@ -0,0 +1,83 @@
+# $Id: mime.types,v 3.0 2002/01/24 12:10:50 roessler Exp $
+
+#
+# sample mime.types
+#
+
+application/andrew-inset       ez
+application/excel              xls
+application/octet-stream       bin
+application/oda                        oda
+application/pdf                        pdf
+application/pgp                        pgp
+application/postscript         ps PS eps
+application/rtf                        rtf
+application/x-arj-compressed   arj
+application/x-bcpio            bcpio
+application/x-chess-pgn                pgn
+application/x-cpio             cpio
+application/x-csh              csh
+application/x-debian-package   deb
+application/x-msdos-program    com exe bat
+application/x-dvi              dvi
+application/x-gtar             gtar
+application/x-gunzip           gz
+application/x-hdf              hdf
+application/x-latex            latex
+application/x-mif              mif
+application/x-netcdf           cdf nc
+application/x-perl             pl pm
+application/x-rar-compressed   rar
+application/x-sh               sh
+application/x-shar             shar
+application/x-sv4cpio          sv4cpio
+application/x-sv4crc           sv4crc
+application/x-tar              tar
+application/x-tar-gz           tgz tar.gz
+application/x-tcl              tcl
+application/x-tex              tex
+application/x-texinfo          texi texinfo
+application/x-troff            t tr roff
+application/x-troff-man                man
+application/x-troff-me         me
+application/x-troff-ms         ms
+application/x-ustar            ustar
+application/x-wais-source      src
+application/x-zip-compressed   zip
+
+audio/basic                    snd
+audio/midi                     mid midi
+audio/ulaw                     au
+audio/x-aiff                   aif aifc aiff
+audio/x-wav                    wav
+
+image/gif                      gif
+image/ief                      ief
+image/jpeg                     jpe jpeg jpg
+image/png                      png
+image/tiff                     tif tiff
+image/x-cmu-raster             ras
+image/x-portable-anymap                pnm
+image/x-portable-bitmap                pbm
+image/x-portable-graymap       pgm
+image/x-portable-pixmap                ppm
+image/x-rgb                    rgb
+image/x-xbitmap                        xbm
+image/x-xpixmap                        xpm
+image/x-xwindowdump            xwd
+
+text/html                      html htm
+text/plain                     asc txt
+text/richtext                  rtx
+text/tab-separated-values      tsv
+text/x-setext                  etx
+
+video/dl                       dl
+video/fli                      fli
+video/gl                       gl
+video/mpeg                     mp2 mpe mpeg mpg
+video/quicktime                        mov qt
+video/x-msvideo                        avi
+video/x-sgi-movie              movie
+
+x-world/x-vrml                 vrm vrml wrl
diff --git a/missing b/missing
new file mode 100755 (executable)
index 0000000..6a37006
--- /dev/null
+++ b/missing
@@ -0,0 +1,336 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+# Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# 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, 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-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+case "$1" in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case "$1" in
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]"
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing 0.4 - GNU automake"
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+  aclocal*)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case "$f" in
+      *:*) touch_files="$touch_files "`echo "$f" |
+                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+          sed 's/\.am$/.in/' |
+          while read f; do touch "$f"; done
+    ;;
+
+  autom4te)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+         system.  You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1Help2man' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
+    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo "#! /bin/sh"
+       echo "# Created by GNU Automake missing as a replacement of"
+       echo "#  $ $@"
+       echo "exit 0"
+       chmod +x $file
+       exit 1
+    fi
+    ;;
+
+  bison|yacc)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+       case "$LASTARG" in
+       *.y)
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+           if [ -f "$SRCFILE" ]; then
+                cp "$SRCFILE" y.tab.c
+           fi
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+           if [ -f "$SRCFILE" ]; then
+                cp "$SRCFILE" y.tab.h
+           fi
+         ;;
+       esac
+    fi
+    if [ ! -f y.tab.h ]; then
+       echo >y.tab.h
+    fi
+    if [ ! -f y.tab.c ]; then
+       echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex|flex)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+       case "$LASTARG" in
+       *.l)
+           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+           if [ -f "$SRCFILE" ]; then
+                cp "$SRCFILE" lex.yy.c
+           fi
+         ;;
+       esac
+    fi
+    if [ ! -f lex.yy.c ]; then
+       echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+        you modified a dependency of a manual page.  You may need the
+        \`Help2man' package in order for those modifications to take
+        effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    if test -z "$file"; then
+       file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
+    fi
+    if [ -f "$file" ]; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo ".ab help2man is required to generate this page"
+       exit 1
+    fi
+    ;;
+
+  makeinfo)
+    if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
+       # We have makeinfo, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    if test -z "$file"; then
+      file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+    fi
+    touch $file
+    ;;
+
+  tar)
+    shift
+    if test -n "$run"; then
+      echo 1>&2 "ERROR: \`tar' requires --run"
+      exit 1
+    fi
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+       case "$firstarg" in
+       *o*)
+           firstarg=`echo "$firstarg" | sed s/o//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+       case "$firstarg" in
+       *h*)
+           firstarg=`echo "$firstarg" | sed s/h//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+         system.  You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequirements for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
diff --git a/mkchangelog.sh b/mkchangelog.sh
new file mode 100755 (executable)
index 0000000..f13bec1
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+TZ=GMT; export TZ
+date="`head -1 ChangeLog | awk '{print $1, $2}'`"
+cvs -z9 log -d ">$date" | perl ./cvslog2changelog.pl
diff --git a/mkinstalldirs b/mkinstalldirs
new file mode 100755 (executable)
index 0000000..d2d5f21
--- /dev/null
@@ -0,0 +1,111 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+errstatus=0
+dirmode=""
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
+
+# process command line arguments
+while test $# -gt 0 ; do
+  case $1 in
+    -h | --help | --h*)         # -h for help
+      echo "$usage" 1>&2
+      exit 0
+      ;;
+    -m)                         # -m PERM arg
+      shift
+      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+      dirmode=$1
+      shift
+      ;;
+    --)                         # stop option processing
+      shift
+      break
+      ;;
+    -*)                         # unknown option
+      echo "$usage" 1>&2
+      exit 1
+      ;;
+    *)                          # first non-opt arg
+      break
+      ;;
+  esac
+done
+
+for file
+do
+  if test -d "$file"; then
+    shift
+  else
+    break
+  fi
+done
+
+case $# in
+  0) exit 0 ;;
+esac
+
+case $dirmode in
+  '')
+    if mkdir -p -- . 2>/dev/null; then
+      echo "mkdir -p -- $*"
+      exec mkdir -p -- "$@"
+    fi
+    ;;
+  *)
+    if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
+      echo "mkdir -m $dirmode -p -- $*"
+      exec mkdir -m "$dirmode" -p -- "$@"
+    fi
+    ;;
+esac
+
+for file
+do
+  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+  shift
+
+  pathcomp=
+  for d
+  do
+    pathcomp="$pathcomp$d"
+    case $pathcomp in
+      -*) pathcomp=./$pathcomp ;;
+    esac
+
+    if test ! -d "$pathcomp"; then
+      echo "mkdir $pathcomp"
+
+      mkdir "$pathcomp" || lasterr=$?
+
+      if test ! -d "$pathcomp"; then
+       errstatus=$lasterr
+      else
+       if test ! -z "$dirmode"; then
+         echo "chmod $dirmode $pathcomp"
+         lasterr=""
+         chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+         if test ! -z "$lasterr"; then
+           errstatus=$lasterr
+         fi
+       fi
+      fi
+    fi
+
+    pathcomp="$pathcomp/"
+  done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# End:
+# mkinstalldirs ends here
diff --git a/mutt.h b/mutt.h
new file mode 100644 (file)
index 0000000..84ac4e9
--- /dev/null
+++ b/mutt.h
@@ -0,0 +1,896 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#ifndef MUTT_H
+#define MUTT_H 
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+# include <unistd.h> /* needed for SEEK_SET */
+#endif
+#ifdef HAVE_UNIX_H
+# include <unix.h>   /* needed for snprintf on QNX. */
+#endif
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <time.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <signal.h>
+#ifdef HAVE_WCHAR_H
+# include <wchar.h>
+#endif
+#if defined(HAVE_WCTYPE_H) && defined(HAVE_WC_FUNCS)
+# include <wctype.h>
+#endif
+
+#ifndef _POSIX_PATH_MAX
+#include <posix1_lim.h>
+#endif
+
+#include <pwd.h>
+#include <grp.h>
+
+#include "rfc822.h"
+#include "hash.h"
+#include "charset.h"
+
+#ifndef HAVE_WC_FUNCS
+# ifdef MB_LEN_MAX
+#  undef MB_LEN_MAX
+# endif
+# define MB_LEN_MAX 16
+#endif
+
+#ifdef SUBVERSION
+# define MUTT_VERSION (VERSION SUBVERSION)
+#else  
+# define MUTT_VERSION (VERSION)
+#endif
+
+/* nifty trick I stole from ELM 2.5alpha. */
+#ifdef MAIN_C
+#define WHERE 
+#define INITVAL(x) = x
+#else
+#define WHERE extern
+#define INITVAL(x) 
+#endif
+
+#include "mutt_regex.h"
+
+/* flags for mutt_copy_header() */
+#define CH_UPDATE      1      /* update the status and x-status fields? */
+#define CH_WEED                (1<<1) /* weed the headers? */
+#define CH_DECODE      (1<<2) /* do RFC1522 decoding? */
+#define CH_XMIT                (1<<3) /* transmitting this message? */
+#define CH_FROM                (1<<4) /* retain the "From " message separator? */
+#define CH_PREFIX      (1<<5) /* use Prefix string? */
+#define CH_NOSTATUS    (1<<6) /* supress the status and x-status fields */
+#define CH_REORDER     (1<<7) /* Re-order output of headers */
+#define CH_NONEWLINE   (1<<8) /* don't output terminating newline */
+#define CH_MIME                (1<<9) /* ignore MIME fields */
+#define CH_UPDATE_LEN  (1<<10) /* update Lines: and Content-Length: */
+#define CH_TXTPLAIN    (1<<11) /* generate text/plain MIME headers */
+#define CH_NOLEN       (1<<12) /* don't write Content-Length: and Lines: */
+#define CH_WEED_DELIVERED (1<<13) /* weed eventual Delivered-To headers */
+#define CH_FORCE_FROM  (1<<14) /* give CH_FROM precedence over CH_WEED? */
+#define CH_NOQFROM     (1<<15) /* give CH_FROM precedence over CH_WEED? */
+
+/* flags for mutt_enter_string() */
+#define  M_ALIAS   1      /* do alias "completion" by calling up the alias-menu */
+#define  M_FILE    (1<<1) /* do file completion */
+#define  M_EFILE   (1<<2) /* do file completion, plus incoming folders */
+#define  M_CMD     (1<<3) /* do completion on previous word */
+#define  M_PASS    (1<<4) /* password mode (no echo) */
+#define  M_CLEAR   (1<<5) /* clear input if printable character is pressed */
+#define  M_COMMAND (1<<6) /* do command completion */
+#define  M_PATTERN (1<<7) /* pattern mode - only used for history classes */
+
+/* flags for mutt_get_token() */
+#define M_TOKEN_EQUAL          1       /* treat '=' as a special */
+#define M_TOKEN_CONDENSE       (1<<1)  /* ^(char) to control chars (macros) */
+#define M_TOKEN_SPACE          (1<<2)  /* don't treat whitespace as a term */
+#define M_TOKEN_QUOTE          (1<<3)  /* don't interpret quotes */
+#define M_TOKEN_PATTERN                (1<<4)  /* !)|~ are terms (for patterns) */
+#define M_TOKEN_COMMENT                (1<<5)  /* don't reap comments */
+#define M_TOKEN_SEMICOLON      (1<<6)  /* don't treat ; as special */
+
+/* flags for km_dokey() */
+#define M_KM_UNBUFFERED 1 /* don't read from the key buffer */
+
+typedef struct
+{
+  char *data;  /* pointer to data */
+  char *dptr;  /* current read/write position */
+  size_t dsize;        /* length of data */
+  int destroy; /* destroy `data' when done? */
+} BUFFER;
+
+typedef struct
+{
+  int ch; /* raw key pressed */
+  int op; /* function op */
+} event_t;
+
+/* flags for _mutt_system() */
+#define M_DETACH_PROCESS       1       /* detach subprocess from group */
+
+/* flags for mutt_FormatString() */
+typedef enum
+{
+  M_FORMAT_FORCESUBJ   = (1<<0), /* print the subject even if unchanged */
+  M_FORMAT_TREE                = (1<<1), /* draw the thread tree */
+  M_FORMAT_MAKEPRINT   = (1<<2), /* make sure that all chars are printable */
+  M_FORMAT_OPTIONAL    = (1<<3),
+  M_FORMAT_STAT_FILE   = (1<<4), /* used by mutt_attach_fmt */
+  M_FORMAT_ARROWCURSOR = (1<<5), /* reserve space for arrow_cursor */
+  M_FORMAT_INDEX       = (1<<6)  /* this is a main index entry */
+} format_flag;
+
+/* types for mutt_add_hook() */
+#define M_FOLDERHOOK   1
+#define M_MBOXHOOK     (1<<1)
+#define M_SENDHOOK     (1<<2)
+#define M_FCCHOOK      (1<<3)
+#define M_SAVEHOOK     (1<<4)
+#define M_CHARSETHOOK  (1<<5)
+#define M_ICONVHOOK    (1<<6)
+#define M_MESSAGEHOOK  (1<<7)
+#define M_CRYPTHOOK    (1<<8)
+#define M_ACCOUNTHOOK  (1<<9)
+#define M_REPLYHOOK    (1<<10)
+
+/* tree characters for linearize_tree and print_enriched_string */
+#define M_TREE_LLCORNER                1
+#define M_TREE_ULCORNER                2
+#define M_TREE_LTEE            3
+#define M_TREE_HLINE           4
+#define M_TREE_VLINE           5
+#define M_TREE_SPACE           6
+#define M_TREE_RARROW          7
+#define M_TREE_STAR            8
+#define M_TREE_HIDDEN          9
+#define M_TREE_EQUALS          10
+#define M_TREE_TTEE            11
+#define M_TREE_BTEE            12
+#define M_TREE_MISSING         13
+#define M_TREE_MAX             14
+
+#define M_THREAD_COLLAPSE      (1<<0)
+#define M_THREAD_UNCOLLAPSE    (1<<1)
+#define M_THREAD_GET_HIDDEN    (1<<2)
+#define M_THREAD_UNREAD                (1<<3)
+#define M_THREAD_NEXT_UNREAD   (1<<4)
+
+enum
+{
+  /* modes for mutt_view_attachment() */
+  M_REGULAR = 1,
+  M_MAILCAP,
+  M_AS_TEXT,
+
+  /* action codes used by mutt_set_flag() and mutt_pattern_function() */
+  M_ALL,
+  M_NONE,
+  M_NEW,
+  M_OLD,
+  M_REPLIED,
+  M_READ,
+  M_UNREAD,
+  M_DELETE,
+  M_UNDELETE,
+  M_DELETED,
+  M_APPENDED,
+  M_PURGED,
+  M_FLAG,
+  M_TAG,
+  M_UNTAG,
+  M_LIMIT,
+  M_EXPIRED,
+  M_SUPERSEDED,
+
+  /* actions for mutt_pattern_comp/mutt_pattern_exec */
+  M_AND,
+  M_OR,
+  M_TO,
+  M_CC,
+  M_COLLAPSED,
+  M_SUBJECT,
+  M_FROM,
+  M_DATE,
+  M_DATE_RECEIVED,
+  M_DUPLICATED,
+  M_ID,
+  M_BODY,
+  M_HEADER,
+  M_WHOLE_MSG,
+  M_SENDER,
+  M_MESSAGE,
+  M_SCORE,
+  M_SIZE,
+  M_REFERENCE,
+  M_RECIPIENT,
+  M_LIST,
+  M_PERSONAL_RECIP,
+  M_PERSONAL_FROM,
+  M_ADDRESS,
+  M_CRYPT_SIGN,
+  M_CRYPT_VERIFIED,
+  M_CRYPT_ENCRYPT,
+  M_PGP_KEY,
+  M_XLABEL,
+#ifdef USE_NNTP
+  M_NEWSGROUPS,
+#endif
+  
+  /* Options for Mailcap lookup */
+  M_EDIT,
+  M_COMPOSE,
+  M_PRINT,
+  M_AUTOVIEW,
+
+  /* options for socket code */
+  M_NEW_SOCKET,
+#ifdef USE_SSL
+  M_NEW_SSL_SOCKET,
+#endif
+
+  /* Options for mutt_save_attachment */
+  M_SAVE_APPEND,
+  M_SAVE_OVERWRITE
+};
+
+/* possible arguments to set_quadoption() */
+enum
+{
+  M_NO,
+  M_YES,
+  M_ASKNO,
+  M_ASKYES
+};
+
+/* quad-option vars */
+enum
+{
+  OPT_ABORT,
+  OPT_BOUNCE,
+  OPT_COPY,
+  OPT_DELETE,
+  OPT_FORWEDIT,
+  OPT_INCLUDE,
+  OPT_MFUPTO,
+  OPT_MIMEFWD,
+  OPT_MIMEFWDREST,
+  OPT_MOVE,
+  OPT_PGPTRADITIONAL, /* create old-style PGP messages */
+#ifdef USE_POP
+  OPT_POPDELETE,
+  OPT_POPRECONNECT,
+#endif
+  OPT_POSTPONE,
+  OPT_PRINT,
+  OPT_QUIT,
+  OPT_REPLYTO,
+  OPT_RECALL,
+#ifdef USE_SSL
+  OPT_SSLSTARTTLS,
+#endif
+  OPT_SUBJECT,
+  OPT_VERIFYSIG,      /* verify PGP signatures */
+  OPT_LISTREPLY,
+#ifdef USE_NNTP
+  OPT_TOMODERATED,
+  OPT_NNTPRECONNECT,
+  OPT_CATCHUP,
+  OPT_FOLLOWUPTOPOSTER,
+#endif /* USE_NNTP */
+    
+  /* THIS MUST BE THE LAST VALUE. */
+  OPT_MAX
+};
+
+/* flags to ci_send_message() */
+#define SENDREPLY      (1<<0)
+#define SENDGROUPREPLY (1<<1)
+#define SENDLISTREPLY  (1<<2)
+#define SENDFORWARD    (1<<3)
+#define SENDPOSTPONED  (1<<4)
+#define SENDBATCH      (1<<5)
+#define SENDMAILX      (1<<6)
+#define SENDKEY                (1<<7)
+#define SENDRESEND     (1<<8)
+#define SENDNEWS       (1<<9)
+
+/* flags to _mutt_select_file() */
+#define M_SEL_BUFFY    (1<<0)
+#define M_SEL_MULTI    (1<<1)
+#define M_SEL_FOLDER   (1<<2)
+
+
+/* boolean vars */
+enum
+{
+  OPTALLOW8BIT,
+  OPTALLOWANSI,
+  OPTARROWCURSOR,
+  OPTASCIICHARS,
+  OPTASKBCC,
+  OPTASKCC,
+  OPTASKFOLLOWUP,
+  OPTASKXCOMMENTTO,
+  OPTATTACHSPLIT,
+  OPTAUTOEDIT,
+  OPTAUTOTAG,
+  OPTBEEP,
+  OPTBEEPNEW,
+  OPTBOUNCEDELIVERED,
+  OPTCHECKNEW,
+  OPTCOLLAPSEUNREAD,
+  OPTCONFIRMAPPEND,
+  OPTCONFIRMCREATE,
+  OPTDELETEUNTAG,
+  OPTDIGESTCOLLAPSE,
+  OPTDUPTHREADS,
+  OPTEDITHDRS,
+  OPTENCODEFROM,
+  OPTENVFROM,
+  OPTFASTREPLY,
+  OPTFCCATTACH,
+  OPTFCCCLEAR,
+  OPTFOLLOWUPTO,
+  OPTFORCENAME,
+  OPTFORWDECODE,
+  OPTFORWQUOTE,
+  OPTHDRS,
+  OPTHEADER,
+  OPTHELP,
+  OPTHIDDENHOST,
+  OPTHIDELIMITED,
+  OPTHIDEMISSING,
+  OPTHIDETOPLIMITED,
+  OPTHIDETOPMISSING,
+  OPTIGNORELISTREPLYTO,
+#ifdef USE_IMAP
+  OPTIMAPLSUB,
+  OPTIMAPPASSIVE,
+  OPTIMAPPEEK,
+  OPTIMAPSERVERNOISE,
+# ifdef USE_SSL
+  OPTIMAPFORCESSL,
+# endif
+#endif
+#if defined(USE_SSL) || defined(USE_NSS)
+  OPTSSLV2,
+  OPTSSLV3,
+  OPTTLSV1,
+  OPTSSLSYSTEMCERTS,
+#endif
+  OPTIMPLICITAUTOVIEW,
+  OPTKEEPFLAGGED,
+  OPTMAILCAPSANITIZE,
+  OPTMAILDIRTRASH,
+  OPTMARKERS,
+  OPTMARKOLD,
+  OPTMENUSCROLL,       /* scroll menu instead of implicit next-page */
+  OPTMETAKEY,          /* interpret ALT-x as ESC-x */
+  OPTMETOO,
+  OPTMHPURGE,
+  OPTMIMEFORWDECODE,
+#ifdef USE_NNTP
+  OPTMIMESUBJECT,      /* encode subject line with RFC2047 */
+#endif
+  OPTNARROWTREE,
+  OPTPAGERSTOP,
+  OPTPIPEDECODE,
+  OPTPIPESPLIT,
+#ifdef USE_POP
+  OPTPOPAUTHTRYALL,
+  OPTPOPLAST,
+#endif
+  OPTPRINTDECODE,
+  OPTPRINTSPLIT,
+  OPTPROMPTAFTER,
+  OPTQUOTEEMPTY,
+  OPTQUOTEQUOTED,
+  OPTREADONLY,
+  OPTREPLYSELF,
+  OPTRESOLVE,
+  OPTREVALIAS,
+  OPTREVNAME,
+  OPTREVREAL,
+  OPTRFC2047PARAMS,
+  OPTSAVEADDRESS,
+  OPTSAVEEMPTY,
+  OPTSAVENAME,
+  OPTSCORE,
+  OPTSIGDASHES,
+  OPTSIGONTOP,
+  OPTSORTRE,
+  OPTSTATUSONTOP,
+  OPTSTRICTTHREADS,
+  OPTSUSPEND,
+  OPTTEXTFLOWED,
+  OPTTHOROUGHSRC,
+  OPTTHREADRECEIVED,
+  OPTTILDE,
+  OPTUNCOLLAPSEJUMP,
+  OPTUSE8BITMIME,
+  OPTUSEDOMAIN,
+  OPTUSEFROM,
+  OPTUSEGPGAGENT,
+#ifdef HAVE_GETADDRINFO
+  OPTUSEIPV6,
+#endif
+  OPTWAITKEY,
+  OPTWEED,
+  OPTWRAP,
+  OPTWRAPSEARCH,
+  OPTWRITEBCC,         /* write out a bcc header? */
+  OPTXMAILER,
+
+  /* PGP options */
+  
+  OPTCRYPTAUTOSIGN,
+  OPTCRYPTAUTOENCRYPT,
+  OPTCRYPTAUTOPGP,
+  OPTCRYPTAUTOSMIME,
+  OPTCRYPTREPLYENCRYPT,
+  OPTCRYPTREPLYSIGN,
+  OPTCRYPTREPLYSIGNENCRYPTED,
+  OPTCRYPTTIMESTAMP,
+  OPTSMIMEISDEFAULT,
+  OPTASKCERTLABEL,
+  OPTSDEFAULTDECRYPTKEY,
+  OPTPGPIGNORESUB,
+  OPTPGPCHECKEXIT,
+  OPTPGPLONGIDS,
+  OPTPGPAUTOTRAD,
+#if 0
+  OPTPGPENCRYPTSELF,
+#endif
+  OPTPGPRETAINABLESIG,
+  OPTPGPSTRICTENC,
+  OPTFORWDECRYPT,
+  OPTPGPSHOWUNUSABLE,
+
+  /* news options */
+
+#ifdef USE_NNTP
+  OPTSHOWNEWNEWS,
+  OPTSHOWONLYUNREAD,
+  OPTSAVEUNSUB,
+  OPTLOADDESC,
+  OPTXCOMMENTTO,
+#endif /* USE_NNTP */
+
+  /* pseudo options */
+
+  OPTAUXSORT,          /* (pseudo) using auxillary sort function */
+  OPTFORCEREFRESH,     /* (pseudo) refresh even during macros */
+  OPTLOCALES,          /* (pseudo) set if user has valid locale definition */
+  OPTNOCURSES,         /* (pseudo) when sending in batch mode */
+  OPTNEEDREDRAW,       /* (pseudo) to notify caller of a submenu */
+  OPTSEARCHREVERSE,    /* (pseudo) used by ci_search_command */
+  OPTMSGERR,           /* (pseudo) used by mutt_error/mutt_message */
+  OPTSEARCHINVALID,    /* (pseudo) used to invalidate the search pat */
+  OPTSIGNALSBLOCKED,   /* (pseudo) using by mutt_block_signals () */
+  OPTSYSSIGNALSBLOCKED,        /* (pseudo) using by mutt_block_signals_system () */
+  OPTNEEDRESORT,       /* (pseudo) used to force a re-sort */
+  OPTRESORTINIT,       /* (pseudo) used to force the next resort to be from scratch */
+  OPTVIEWATTACH,       /* (pseudo) signals that we are viewing attachments */
+  OPTFORCEREDRAWINDEX, /* (pseudo) used to force a redraw in the main index */
+  OPTFORCEREDRAWPAGER, /* (pseudo) used to force a redraw in the pager */
+  OPTSORTSUBTHREADS,   /* (pseudo) used when $sort_aux changes */
+  OPTNEEDRESCORE,      /* (pseudo) set when the `score' command is used */
+  OPTATTACHMSG,                /* (pseudo) used by attach-message */
+  OPTHIDEREAD,         /* (pseudo) whether or not hide read messages */
+  OPTKEEPQUIET,                /* (pseudo) shut up the message and refresh
+                        *          functions while we are executing an
+                        *          external program.
+                        */
+  OPTMENUCALLER,       /* (pseudo) tell menu to give caller a take */
+  OPTREDRAWTREE,       /* (pseudo) redraw the thread tree */
+  OPTPGPCHECKTRUST,    /* (pseudo) used by pgp_select_key () */
+  OPTDONTHANDLEPGPKEYS,        /* (pseudo) used to extract PGP keys */
+  OPTUNBUFFEREDINPUT,   /* (pseudo) don't use key buffer */
+
+#ifdef USE_NNTP
+  OPTNEWS,             /* (pseudo) used to change reader mode */
+  OPTNEWSSEND,         /* (pseudo) used to change behavior when posting */
+  OPTNEWSCACHE,                /* (pseudo) used to indicate if news cache exist */
+#endif
+
+  OPTMAX
+};
+
+#define mutt_bit_alloc(n) calloc ((n + 7) / 8, sizeof (char))
+#define mutt_bit_set(v,n) v[n/8] |= (1 << (n % 8))
+#define mutt_bit_unset(v,n) v[n/8] &= ~(1 << (n % 8))
+#define mutt_bit_toggle(v,n) v[n/8] ^= (1 << (n % 8))
+#define mutt_bit_isset(v,n) (v[n/8] & (1 << (n % 8)))
+
+#define set_option(x) mutt_bit_set(Options,x)
+#define unset_option(x) mutt_bit_unset(Options,x)
+#define toggle_option(x) mutt_bit_toggle(Options,x)
+#define option(x) mutt_bit_isset(Options,x)
+
+/* Exit values used in send_msg() */
+#define S_ERR 127
+#define S_BKG 126
+
+typedef struct list_t
+{
+  char *data;
+  struct list_t *next;
+} LIST;
+
+typedef struct rx_list_t
+{
+  REGEXP *rx;
+  struct rx_list_t *next;
+} RX_LIST;
+
+#define mutt_new_list() safe_calloc (1, sizeof (LIST))
+#define mutt_new_rx_list() safe_calloc (1, sizeof (RX_LIST))
+void mutt_free_list (LIST **);
+void mutt_free_rx_list (RX_LIST **);
+int mutt_matches_ignore (const char *, LIST *);
+
+/* add an element to a list */
+LIST *mutt_add_list (LIST *, const char *);
+
+void mutt_init (int, LIST *);
+
+typedef struct alias
+{
+  struct alias *self;          /* XXX - ugly hack */
+  char *name;
+  ADDRESS *addr;
+  struct alias *next;
+  short tagged;
+  short del;
+  short num;
+} ALIAS;
+
+typedef struct envelope
+{
+  ADDRESS *return_path;
+  ADDRESS *from;
+  ADDRESS *to;
+  ADDRESS *cc;
+  ADDRESS *bcc;
+  ADDRESS *sender;
+  ADDRESS *reply_to;
+  ADDRESS *mail_followup_to;
+  char *subject;
+  char *real_subj;             /* offset of the real subject */
+  char *message_id;
+  char *supersedes;
+  char *date;
+  char *x_label;
+  char *organization;
+#ifdef USE_NNTP
+  char *newsgroups;
+  char *xref;
+  char *followup_to;
+  char *x_comment_to;
+#endif
+  LIST *references;            /* message references (in reverse order) */
+  LIST *in_reply_to;           /* in-reply-to header content */
+  LIST *userhdrs;              /* user defined headers */
+} ENVELOPE;
+
+typedef struct parameter
+{
+  char *attribute;
+  char *value;
+  struct parameter *next;
+} PARAMETER;
+
+/* Information that helps in determing the Content-* of an attachment */
+typedef struct content
+{
+  long hibin;              /* 8-bit characters */
+  long lobin;              /* unprintable 7-bit chars (eg., control chars) */
+  long crlf;              /* '\r' and '\n' characters */
+  long ascii;              /* number of ascii chars */
+  long linemax;            /* length of the longest line in the file */
+  unsigned int space : 1;  /* whitespace at the end of lines? */
+  unsigned int binary : 1; /* long lines, or CR not in CRLF pair */
+  unsigned int from : 1;   /* has a line beginning with "From "? */
+  unsigned int dot : 1;    /* has a line consisting of a single dot? */
+  unsigned int cr : 1;     /* has CR, even when in a CRLF pair */
+} CONTENT;
+
+typedef struct body
+{
+  char *xtype;                 /* content-type if x-unknown */
+  char *subtype;                /* content-type subtype */
+  PARAMETER *parameter;         /* parameters of the content-type */
+  char *description;            /* content-description */
+  char *form_name;             /* Content-Disposition form-data name param */
+  long hdr_offset;              /* offset in stream where the headers begin.
+                                * this info is used when invoking metamail,
+                                * where we need to send the headers of the
+                                * attachment
+                                */
+  long offset;                  /* offset where the actual data begins */
+  long length;                  /* length (in bytes) of attachment */
+  char *filename;               /* when sending a message, this is the file
+                                * to which this structure refers
+                                */
+  char *d_filename;            /* filename to be used for the 
+                                * content-disposition header.
+                                * If NULL, filename is used 
+                                * instead.
+                                */
+  CONTENT *content;             /* structure used to store detailed info about
+                                * the content of the attachment.  this is used
+                                * to determine what content-transfer-encoding
+                                * is required when sending mail.
+                                */
+  struct body *next;            /* next attachment in the list */
+  struct body *parts;           /* parts of a multipart or message/rfc822 */
+  struct header *hdr;          /* header information for message/rfc822 */
+
+  struct attachptr *aptr;      /* Menu information, used in recvattach.c */
+  
+  time_t stamp;                        /* time stamp of last
+                                * encoding update.
+                                */
+  
+  unsigned int type : 4;        /* content-type primary type */
+  unsigned int encoding : 3;    /* content-transfer-encoding */
+  unsigned int disposition : 2; /* content-disposition */
+  unsigned int use_disp : 1;    /* Content-Disposition uses filename= ? */
+  unsigned int unlink : 1;      /* flag to indicate the the file named by
+                                * "filename" should be unlink()ed before
+                                * free()ing this structure
+                                */
+  unsigned int tagged : 1;
+  unsigned int deleted : 1;    /* attachment marked for deletion */
+
+  unsigned int noconv : 1;     /* don't do character set conversion */
+  unsigned int force_charset : 1; 
+                               /* send mode: don't adjust the character
+                                * set when in send-mode.
+                                */
+
+  unsigned int goodsig : 1;    /* good cryptographic signature */
+  unsigned int badsig : 1;     /* bad cryptographic signature (needed to check encrypted s/mime-signatures) */
+
+  unsigned int collapsed : 1;  /* used by recvattach */
+
+} BODY;
+
+typedef struct header
+{
+  unsigned int security : 9;  /* bit 0-6: flags, bit 7,8: application.
+                                see: crypt.h pgplib.h, smime.h */
+
+  unsigned int mime : 1;               /* has a Mime-Version header? */
+  unsigned int flagged : 1;            /* marked important? */
+  unsigned int tagged : 1;
+  unsigned int appended : 1; /* has been saved */
+  unsigned int purged : 1;   /* bypassing the trash folder */
+  unsigned int deleted : 1;
+  unsigned int changed : 1;
+  unsigned int attach_del : 1;                 /* has an attachment marked for deletion */
+  unsigned int old : 1;
+  unsigned int read : 1;
+  unsigned int expired : 1;            /* already expired? */
+  unsigned int superseded : 1;                 /* got superseded? */
+  unsigned int replied : 1;
+  unsigned int subject_changed : 1;    /* used for threading */
+  unsigned int threaded : 1;           /* used for threading */
+  unsigned int display_subject : 1;    /* used for threading */
+  unsigned int recip_valid : 1;        /* is_recipient is valid */
+  unsigned int active : 1;             /* message is not to be removed */
+  unsigned int trash : 1;              /* message is marked as trashed on disk.
+                                        * This flag is used by the maildir_trash
+                                        * option.
+                                        */
+  
+  /* timezone of the sender of this message */
+  unsigned int zhours : 5;
+  unsigned int zminutes : 6;
+  unsigned int zoccident : 1;
+
+  /* bits used for caching when searching */
+  unsigned int searched : 1;
+  unsigned int matched : 1;
+
+  /* the following are used to support collapsing threads  */
+  unsigned int collapsed : 1;  /* is this message part of a collapsed thread? */
+  unsigned int limited : 1;    /* is this message in a limited view?  */
+  size_t num_hidden;           /* number of hidden messages in this view */
+
+  short recipient;             /* user_is_recipient()'s return value, cached */
+  
+  int pair;                    /* color-pair to use when displaying in the index */
+
+  time_t date_sent;            /* time when the message was sent (UTC) */
+  time_t received;             /* time when the message was placed in the mailbox */
+  long offset;                 /* where in the stream does this message begin? */
+  int lines;                   /* how many lines in the body of this message? */
+  int index;                   /* the absolute (unsorted) message number */
+  int msgno;                   /* number displayed to the user */
+  int virtual;                 /* virtual message number */
+  int score;
+  ENVELOPE *env;               /* envelope information */
+  BODY *content;               /* list of MIME parts */
+  char *path;
+#ifdef USE_NNTP
+  int article_num;
+#endif
+  
+  char *tree;                  /* character string to print thread tree */
+  struct thread *thread;
+
+#ifdef MIXMASTER
+  LIST *chain;
+#endif
+
+#ifdef USE_POP
+  int refno;                   /* message number on server */
+#endif
+
+#if defined USE_POP || defined USE_IMAP || defined USE_NNTP
+  void *data;                  /* driver-specific data */
+#endif
+  
+  char *maildir_flags;         /* unknown maildir flags */
+} HEADER;
+
+typedef struct thread
+{
+  unsigned int fake_thread : 1;
+  unsigned int duplicate_thread : 1;
+  unsigned int sort_children : 1;
+  unsigned int check_subject : 1;
+  unsigned int visible : 1;
+  unsigned int deep : 1;
+  unsigned int subtree_visible : 2;
+  unsigned int next_subtree_visible : 1;
+  struct thread *parent;
+  struct thread *child;
+  struct thread *next;
+  struct thread *prev;
+  HEADER *message;
+  HEADER *sort_key;
+} THREAD;
+
+
+/* flag to mutt_pattern_comp() */
+#define M_FULL_MSG     1       /* enable body and header matching */
+
+typedef enum {
+  M_MATCH_FULL_ADDRESS = 1
+} pattern_exec_flag;
+
+typedef struct pattern_t
+{
+  short op;
+  short not;
+  short alladdr;
+  int min;
+  int max;
+  struct pattern_t *next;
+  struct pattern_t *child;             /* arguments to logical op */
+  regex_t *rx;
+} pattern_t;
+
+typedef struct
+{
+  char *path;
+  FILE *fp;
+  time_t mtime;
+  time_t mtime_cur;            /* used with maildir folders */
+  off_t size;
+  off_t vsize;
+  char *pattern;                /* limit pattern string */
+  pattern_t *limit_pattern;     /* compiled limit pattern */
+  HEADER **hdrs;
+  THREAD *tree;                        /* top of thread tree */
+  HASH *id_hash;               /* hash table by msg id */
+  HASH *subj_hash;             /* hash table by subject */
+  HASH *thread_hash;           /* hash table for threading */
+  int *v2r;                    /* mapping from virtual to real msgno */
+  int hdrmax;                  /* number of pointers in hdrs */
+  int msgcount;                        /* number of messages in the mailbox */
+  int vcount;                  /* the number of virtual messages */
+  int tagged;                  /* how many messages are tagged? */
+  int new;                     /* how many new messages? */
+  int unread;                  /* how many unread messages? */
+  int deleted;                 /* how many deleted messages */
+  int appended;                 /* how many saved messages? */
+  int flagged;                 /* how many flagged messages */
+  int msgnotreadyet;           /* which msg "new" in pager, -1 if none */
+#if defined USE_POP || defined USE_IMAP || defined USE_NNTP
+  void *data;                  /* driver specific data */
+#endif /* USE_IMAP */
+
+  short magic;                 /* mailbox type */
+
+  unsigned int locked : 1;     /* is the mailbox locked? */
+  unsigned int changed : 1;    /* mailbox has been modified */
+  unsigned int readonly : 1;    /* don't allow changes to the mailbox */
+  unsigned int dontwrite : 1;   /* dont write the mailbox on close */
+  unsigned int append : 1;     /* mailbox is opened in append mode */
+  unsigned int quiet : 1;      /* inhibit status messages? */
+  unsigned int collapsed : 1;   /* are all threads collapsed? */
+  unsigned int closing : 1;    /* mailbox is being closed */
+} CONTEXT;
+
+typedef struct attachptr
+{
+  BODY *content;
+  int parent_type;
+  char *tree;
+  int level;
+  int num;
+} ATTACHPTR;
+
+typedef struct
+{
+  FILE *fpin;
+  FILE *fpout;
+  char *prefix;
+  int flags;
+} STATE;
+
+/* used by enter.c */
+
+typedef struct
+{
+  wchar_t *wbuf;
+  size_t wbuflen;
+  size_t lastchar;
+  size_t curpos;
+  size_t begin;
+  int   tabs;
+} ENTER_STATE;
+
+/* flags for the STATE struct */
+#define M_DISPLAY      (1<<0) /* output is displayed to the user */
+#define M_VERIFY       (1<<1) /* perform signature verification */
+#define M_PENDINGPREFIX (1<<2) /* prefix to write, but character must follow */
+#define M_WEED          (1<<3) /* weed headers even when not in display mode */
+#define M_CHARCONV     (1<<4) /* Do character set conversions */
+#define M_PRINTING     (1<<5) /* are we printing? - M_DISPLAY "light" */
+
+#define state_set_prefix(s) ((s)->flags |= M_PENDINGPREFIX)
+#define state_reset_prefix(s) ((s)->flags &= ~M_PENDINGPREFIX)
+#define state_puts(x,y) fputs(x,(y)->fpout)
+#define state_putc(x,y) fputc(x,(y)->fpout)
+
+void state_mark_attach (STATE *);
+void state_attach_puts (const char *, STATE *);
+void state_prefix_putc (char, STATE *);
+int  state_printf(STATE *, const char *, ...);
+
+#include "ascii.h"
+#include "protos.h"
+#include "lib.h"
+#include "globals.h"
+
+#endif /*MUTT_H*/
diff --git a/mutt_crypt.h b/mutt_crypt.h
new file mode 100644 (file)
index 0000000..bd3c8c5
--- /dev/null
@@ -0,0 +1,253 @@
+/*
+ * Copyright (C) 2003 Werner Koch <wk@gnupg.org>
+ * 
+ *     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.
+ */ 
+
+/*
+   Common definitions and prototypes for the crypt functions. They are
+   all defined in crypt.c and cryptglue.c
+*/
+
+#ifndef MUTT_CRYPT_H
+#define MUTT_CRYPT_H
+
+#include "mutt.h"        /* Need this to declare BODY, ADDRESS. STATE etc. */
+/* FIXME: They should be pointer to anonymous structures for better
+   information hiding. */
+
+
+
+#define ENCRYPT    (1 << 0)
+#define SIGN       (1 << 1)
+#define GOODSIGN   (1 << 2)
+#define BADSIGN    (1 << 3)
+#define PARTSIGN   (1 << 4)
+#define SIGNOPAQUE (1 << 5)
+/* (1 << 6) is used by PGPKEY below. */
+
+#define APPLICATION_PGP    (1 << 7) 
+#define APPLICATION_SMIME  (1 << 8)
+
+#define PGPENCRYPT  (APPLICATION_PGP | ENCRYPT)
+#define PGPSIGN     (APPLICATION_PGP | SIGN)
+#define PGPGOODSIGN (APPLICATION_PGP | GOODSIGN)
+#define PGPKEY      (APPLICATION_PGP | (1 << 6)) 
+
+#define SMIMEENCRYPT  (APPLICATION_SMIME | ENCRYPT)
+#define SMIMESIGN     (APPLICATION_SMIME | SIGN)
+#define SMIMEGOODSIGN (APPLICATION_SMIME | GOODSIGN)
+#define SMIMEBADSIGN  (APPLICATION_SMIME | BADSIGN)
+#define SMIMEOPAQUE   (APPLICATION_SMIME | SIGNOPAQUE)
+
+
+/* WITHCRYPTO actually replaces ifdefs so make the code more readable.
+   Because it is defined as a constant and known at compile time, the
+   compiler can do dead code elimination and thus it behaves
+   effectively as a conditional compile directive. It is set to false
+   if no crypto backend is configures or to a bit vector denoting the
+   configured backends. */
+#if defined(CRYPT_BACKEND_CLASSIC_PGP) && defined(CRYPT_BACKEND_CLASSIC_SMIME)
+# define WithCrypto (APPLICATION_PGP | APPLICATION_SMIME)
+#elif defined(CRYPT_BACKEND_CLASSIC_PGP)
+# define WithCrypto  APPLICATION_PGP
+#elif defined(CRYPT_BACKEND_CLASSIC_SMIME)
+# define WithCrypto  APPLICATION_SMIME
+#elif defined(CRYPT_BACKEND_GPGME)
+# define WithCrypto  (APPLICATION_PGP | APPLICATION_SMIME)
+#else
+# define WithCrypto 0
+#endif
+
+
+#define KEYFLAG_CANSIGN                (1 <<  0)
+#define KEYFLAG_CANENCRYPT             (1 <<  1)
+#define KEYFLAG_SECRET                 (1 <<  7)
+#define KEYFLAG_EXPIRED                (1 <<  8)
+#define KEYFLAG_REVOKED                (1 <<  9)
+#define KEYFLAG_DISABLED               (1 << 10)
+#define KEYFLAG_SUBKEY                         (1 << 11)
+#define KEYFLAG_CRITICAL               (1 << 12)
+#define KEYFLAG_PREFER_ENCRYPTION      (1 << 13)
+#define KEYFLAG_PREFER_SIGNING                 (1 << 14)
+
+#define KEYFLAG_CANTUSE (KEYFLAG_DISABLED|KEYFLAG_REVOKED|KEYFLAG_EXPIRED)
+#define KEYFLAG_RESTRICTIONS (KEYFLAG_CANTUSE|KEYFLAG_CRITICAL)
+
+#define KEYFLAG_ABILITIES (KEYFLAG_CANSIGN|KEYFLAG_CANENCRYPT|KEYFLAG_PREFER_ENCRYPTION|KEYFLAG_PREFER_SIGNING)
+
+enum pgp_ring
+{
+  PGP_PUBRING,
+  PGP_SECRING
+};
+typedef enum pgp_ring pgp_ring_t;
+
+
+struct pgp_keyinfo;
+typedef struct pgp_keyinfo *pgp_key_t;
+
+
+
+/* Some prototypes -- old crypt.h. */
+
+int mutt_protect (HEADER *, HEADER *, char *);
+
+int mutt_is_multipart_encrypted (BODY *);
+
+int mutt_is_multipart_signed (BODY *);
+
+int mutt_is_application_pgp (BODY *);
+
+int mutt_is_application_smime (BODY *);
+
+void mutt_signed_handler (BODY *, STATE *);
+
+int mutt_parse_crypt_hdr (char *, int);
+
+
+void convert_to_7bit (BODY *);
+
+
+
+/*-- crypt.c --*/ 
+
+/* Print the current time. */ 
+void crypt_current_time(STATE *s, char *app_name);
+
+/* Check out the type of encryption used and set the cached status
+   values if there are any. */
+int crypt_query (BODY *m);
+
+/* Fixme: To be documented. */
+void crypt_extract_keys_from_messages (HEADER *h);
+
+/* Do a quick check to make sure that we can find all of the
+   encryption keys if the user has requested this service. 
+   Return the list of keys in KEYLIST. */
+int crypt_get_keys (HEADER *msg, char **keylist);
+
+/* Forget a passphrase and display a message. */
+void crypt_forget_passphrase (void);
+
+/* Check that we have a usable passphrase, ask if not. */
+int crypt_valid_passphrase (int);
+
+/* Write the message body/part A described by state S to a the given
+   TEMPFILE.  */
+int crypt_write_signed(BODY *a, STATE *s, const char *tempf);
+
+
+
+/*-- cryptglue.c --*/
+
+/* Show a message that a backend will be invoked. */
+void crypt_invoke_message (int type);
+
+
+/* Silently forget about a passphrase. */
+void crypt_pgp_void_passphrase (void);
+
+/* Decrypt a PGP/MIME message. */
+int crypt_pgp_decrypt_mime (FILE *a, FILE **b, BODY *c, BODY **d);
+
+/* MIME handler for the application/pgp content-type. */
+void crypt_pgp_application_pgp_handler (BODY *m, STATE *s);
+
+/* MIME handler for an PGP/MIME encrypted message. */
+void crypt_pgp_encrypted_handler (BODY *a, STATE *s);
+
+/* fixme: needs documentation. */
+void crypt_pgp_invoke_getkeys (ADDRESS *addr);
+
+/* Ask for a PGP key. */
+pgp_key_t crypt_pgp_ask_for_key (char *tag, char *whatfor,
+                                 short abilities, pgp_ring_t keyring);
+
+/* Check for a traditional PGP message in body B. */
+int crypt_pgp_check_traditional (FILE *fp, BODY *b, int tagged_only);
+
+/* fixme: needs documentation. */
+BODY *crypt_pgp_traditional_encryptsign (BODY *a, int flags, char *keylist);
+
+/* Release the PGP key KPP (note, that we pass a pointer to it). */
+void crypt_pgp_free_key (pgp_key_t *kpp);
+
+/* Generate a PGP public key attachment. */
+BODY *crypt_pgp_make_key_attachment (char *tempf);
+
+/* This routine attempts to find the keyids of the recipients of a
+   message.  It returns NULL if any of the keys can not be found.  */
+char *crypt_pgp_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc);
+
+/* Create a new body with a PGP signed message from A. */
+BODY *crypt_pgp_sign_message (BODY *a);
+
+/* Warning: A is no longer freed in this routine, you need to free it
+   later.  This is necessary for $fcc_attach. */
+BODY *crypt_pgp_encrypt_message (BODY *a, char *keylist, int sign);
+
+/* Invoke the PGP command to import a key. */
+void crypt_pgp_invoke_import (const char *fname);
+
+/* fixme: needs documentation */
+int crypt_pgp_verify_one (BODY *sigbdy, STATE *s, const char *tempf);
+
+/* Access the keyID in K. */
+char *crypt_pgp_keyid (pgp_key_t k);
+
+/* fixme: needs documentation */
+void crypt_pgp_extract_keys_from_attachment_list (FILE *fp, int tag,BODY *top);
+
+
+
+
+
+/* Silently forget about a passphrase. */
+void crypt_smime_void_passphrase (void);
+
+/* Decrypt an S/MIME message. */
+int crypt_smime_decrypt_mime (FILE *a, FILE **b, BODY *c, BODY **d);
+
+/* MIME handler for the application/smime content-type. */
+void crypt_smime_application_smime_handler (BODY *m, STATE *s);
+
+/* fixme: Needs documentation. */
+void crypt_smime_getkeys (ENVELOPE *env);
+
+/* Check that the sender matches. */
+int crypt_smime_verify_sender(HEADER *h);
+
+/* Ask for an SMIME key. */
+char *crypt_smime_ask_for_key (char *prompt, char *mailbox, short public);
+
+/* This routine attempts to find the keyids of the recipients of a
+   message.  It returns NULL if any of the keys can not be found.  */
+char *crypt_smime_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc);
+
+/* fixme: Needs documentation. */
+BODY *crypt_smime_sign_message (BODY *a);
+
+/* fixme: needs documentation. */
+BODY *crypt_smime_build_smime_entity (BODY *a, char *certlist);
+
+/* Add a certificate and update index file (externally). */
+void crypt_smime_invoke_import (char *infile, char *mailbox);
+
+/* fixme: needs documentation */
+int crypt_smime_verify_one (BODY *sigbdy, STATE *s, const char *tempf);
+
+
+#endif /*MUTT_CRYPT_H*/
diff --git a/mutt_curses.h b/mutt_curses.h
new file mode 100644 (file)
index 0000000..b7b1a82
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#ifdef USE_SLANG_CURSES
+
+#ifndef unix /* this symbol is not defined by the hp-ux compiler (sigh) */
+#define unix
+#endif /* unix */
+
+#include "slcurses.h"
+
+#define KEY_DC SL_KEY_DELETE
+#define KEY_IC SL_KEY_IC
+
+/*
+ * ncurses and SLang seem to send different characters when the Enter key is
+ * pressed, so define some macros to properly detect the Enter key.
+ */
+#define M_ENTER_C '\r'
+#define M_ENTER_S "\r"
+
+#else
+
+#ifdef HAVE_NCURSESW_NCURSES_H
+#include <ncursesw/ncurses.h>
+#else
+#ifdef HAVE_NCURSES_H
+#include <ncurses.h>
+#else
+#include <curses.h>
+#endif
+#endif
+
+#define M_ENTER_C '\n'
+#define M_ENTER_S "\n"
+
+#endif /* USE_SLANG_CURSES */
+
+/* AIX defines ``lines'' in <term.h>, but it's used as a var name in
+ * various places in Mutt
+ */
+#ifdef lines
+#undef lines
+#endif /* lines */
+
+#define CLEARLINE(x) move(x,0), clrtoeol()
+#define CENTERLINE(x,y) move(y, (COLS-strlen(x))/2), addstr(x)
+#define BEEP() do { if (option (OPTBEEP)) beep(); } while (0)
+
+#if ! (defined(USE_SLANG_CURSES) || defined(HAVE_CURS_SET))
+#define curs_set(x)
+#endif
+
+#if !defined(USE_SLANG_CURSES) && defined(HAVE_BKGDSET)
+#define BKGDSET(x) bkgdset (ColorDefs[x] | ' ')
+#else
+#define BKGDSET(x)
+#endif
+
+#if (defined(USE_SLANG_CURSES) || defined(HAVE_CURS_SET))
+void mutt_curs_set (int);
+#else
+#define mutt_curs_set(x)
+#endif
+#define PAGELEN (LINES-3)
+
+#define ctrl(c) ((c)-'@')
+
+#ifdef KEY_ENTER
+#define CI_is_return(c) ((c) == '\r' || (c) == '\n' || (c) == KEY_ENTER)
+#else
+#define CI_is_return(c) ((c) == '\r' || (c) == '\n')
+#endif
+
+event_t mutt_getch (void);
+
+void mutt_endwin (const char *);
+void mutt_flushinp (void);
+void mutt_refresh (void);
+void mutt_resize_screen (void);
+void mutt_ungetch (int, int);
+
+/* ----------------------------------------------------------------------------
+ * Support for color
+ */
+
+enum
+{
+  MT_COLOR_HDEFAULT = 0,
+  MT_COLOR_QUOTED,
+  MT_COLOR_SIGNATURE,
+  MT_COLOR_INDICATOR,
+  MT_COLOR_STATUS,
+  MT_COLOR_TREE,
+  MT_COLOR_NORMAL,
+  MT_COLOR_ERROR,
+  MT_COLOR_TILDE,
+  MT_COLOR_MARKERS,
+  MT_COLOR_BODY,
+  MT_COLOR_HEADER,
+  MT_COLOR_MESSAGE,
+  MT_COLOR_ATTACHMENT,
+  MT_COLOR_SEARCH,
+  MT_COLOR_BOLD,
+  MT_COLOR_UNDERLINE,
+  MT_COLOR_INDEX,
+  MT_COLOR_MAX
+};
+
+typedef struct color_line
+{
+  regex_t rx;
+  char *pattern;
+  pattern_t *color_pattern; /* compiled pattern to speed up index color
+                               calculation */
+  short fg;
+  short bg;
+  int pair;
+  struct color_line *next;
+} COLOR_LINE;
+
+extern int *ColorQuote;
+extern int ColorQuoteUsed;
+extern int ColorDefs[];
+extern COLOR_LINE *ColorHdrList;
+extern COLOR_LINE *ColorBodyList;
+extern COLOR_LINE *ColorIndexList;
+
+void ci_init_color (void);
+void ci_start_color (void);
+
+#define SETCOLOR(X) attrset(ColorDefs[X])
+#define ADDCOLOR(X) attron(ColorDefs[X])
+
+#define MAYBE_REDRAW(x) if (option (OPTNEEDREDRAW)) { unset_option (OPTNEEDREDRAW); x = REDRAW_FULL; }
+
+/* ----------------------------------------------------------------------------
+ * These are here to avoid compiler warnings with -Wall under SunOS 4.1.x
+ */
+
+#if !defined(STDC_HEADERS) && !defined(NCURSES_VERSION) && !defined(USE_SLANG_CURSES)
+extern int endwin();
+extern int printw();
+extern int beep();
+extern int isendwin();
+extern int w32addch();
+extern int keypad();
+extern int wclrtobot();
+extern int mvprintw();
+extern int getcurx();
+extern int getcury();
+extern int noecho();
+extern int wdelch();
+extern int wrefresh();
+extern int wmove();
+extern int wclear();
+extern int waddstr();
+extern int wclrtoeol();
+#endif
diff --git a/mutt_idna.c b/mutt_idna.c
new file mode 100644 (file)
index 0000000..9a3fbb4
--- /dev/null
@@ -0,0 +1,267 @@
+/*
+ * Copyright (C) 2003 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+#include "config.h"
+#include "mutt.h"
+#include "charset.h"
+#include "mutt_idna.h"
+
+/* The low-level interface we use. */
+
+#ifndef HAVE_LIBIDN
+
+int mutt_idna_to_local (const char *in, char **out, int flags)
+{
+  *out = safe_strdup (in);
+  return 1;
+}
+
+int mutt_local_to_idna (const char *in, char **out)
+{
+  *out = safe_strdup (in);
+  return 0;
+}
+                       
+#else
+
+int mutt_idna_to_local (const char *in, char **out, int flags)
+{
+  *out = NULL;
+
+  if (!in)
+    goto notrans;
+  
+  /* Is this the right function?  Interesting effects with some bad identifiers! */
+  if (idna_to_unicode_8z8z (in, out, 1) != IDNA_SUCCESS)
+    goto notrans;
+  if (mutt_convert_string (out, "utf-8", Charset, M_ICONV_HOOK_TO) == -1)
+    goto notrans;
+
+  /* 
+   * make sure that we can convert back and come out with the same
+   * domain name. */
+  
+  if ((flags & MI_MAY_BE_IRREVERSIBLE) == 0)
+  {
+    int irrev = 0;
+    char *t2 = NULL;
+    char *tmp = safe_strdup (*out);
+    if (mutt_convert_string (&tmp, Charset, "utf-8", M_ICONV_HOOK_FROM) == -1)
+      irrev = 1;
+    if (!irrev && idna_to_ascii_8z (tmp, &t2, 1) != IDNA_SUCCESS)
+      irrev = 1;
+    if (!irrev && ascii_strcasecmp (t2, in))
+    {
+      dprint (1, (debugfile, "mutt_idna_to_local: Not reversible. in = '%s', t2 = '%s'.\n",
+                 in, t2));
+      irrev = 1;
+    }
+    
+    FREE (&t2);
+    FREE (&tmp);
+
+    if (irrev)
+      goto notrans;
+  }
+
+  return 0;
+  
+ notrans:
+  FREE (out);
+  *out = safe_strdup (in);
+  return 1;
+}
+
+int mutt_local_to_idna (const char *in, char **out)
+{
+  int rv = 0;
+  char *tmp = safe_strdup (in);
+  *out = NULL;
+
+  if (!in)
+  {
+    *out = NULL;
+    return -1;
+  }
+  
+  if (mutt_convert_string (&tmp, Charset, "utf-8", M_ICONV_HOOK_FROM) == -1)
+    rv = -1;
+  if (!rv && idna_to_ascii_8z (tmp, out, 1) != IDNA_SUCCESS)
+    rv = -2;
+  
+  FREE (&tmp);
+  if (rv < 0)
+  {
+    FREE (out);
+    *out = safe_strdup (in);
+  }
+  return rv;
+}
+
+#endif
+
+
+/* higher level functions */
+
+static int mbox_to_udomain (const char *mbx, char **user, char **domain)
+{
+  char *p;
+  *user = NULL;
+  *domain = NULL;
+  
+  p = strchr (mbx, '@');
+  if (!p)
+    return -1;
+  *user = safe_calloc((p - mbx + 1), sizeof(mbx[0]));
+  strfcpy (*user, mbx, (p - mbx + 1));
+  *domain = safe_strdup(p + 1);
+  return 0;
+}
+
+int mutt_addrlist_to_idna (ADDRESS *a, char **err)
+{
+  char *user = NULL, *domain = NULL;
+  char *tmp = NULL;
+  int e = 0;
+  
+  if (err)
+    *err = NULL;
+
+  for (; a; a = a->next)
+  {
+    if (!a->mailbox)
+      continue;
+    if (mbox_to_udomain (a->mailbox, &user, &domain) == -1)
+      continue;
+    
+    if (mutt_local_to_idna (domain, &tmp) < 0)
+    {
+      e = 1;
+      if (err)
+       *err = safe_strdup (domain);
+    }
+    else
+    {
+      safe_realloc (&a->mailbox, mutt_strlen (user) + mutt_strlen (tmp) + 2);
+      sprintf (a->mailbox, "%s@%s", NONULL(user), NONULL(tmp)); /* __SPRINTF_CHECKED__ */
+    }
+    
+    FREE (&domain);
+    FREE (&user);
+    FREE (&tmp);
+    
+    if (e)
+      return -1;
+  }
+  
+  return 0;
+}
+
+int mutt_addrlist_to_local (ADDRESS *a)
+{
+  char *user, *domain;
+  char *tmp = NULL;
+  
+  for (; a; a = a->next)
+  {
+    if (!a->mailbox)
+      continue;
+    if (mbox_to_udomain (a->mailbox, &user, &domain) == -1)
+      continue;
+    
+    if (mutt_idna_to_local (domain, &tmp, 0) == 0)
+    {
+      safe_realloc (&a->mailbox, mutt_strlen (user) + mutt_strlen (tmp) + 2);
+      sprintf (a->mailbox, "%s@%s", NONULL (user), NONULL (tmp)); /* __SPRINTF_CHECKED__ */
+    }
+    
+    FREE (&domain);
+    FREE (&user);
+    FREE (&tmp);
+  }
+  
+  return 0;
+}
+
+/* convert just for displaying purposes */
+const char *mutt_addr_for_display (ADDRESS *a)
+{
+  static char *buff = NULL;
+  char *tmp = NULL;
+  /* user and domain will be either allocated or reseted to the NULL in
+   * the mbox_to_udomain(), but for safety... */
+  char *domain = NULL;
+  char *user = NULL;
+  
+  FREE (&buff);
+  
+  if (mbox_to_udomain (a->mailbox, &user, &domain) != 0)
+    return a->mailbox;
+  if (mutt_idna_to_local (domain, &tmp, MI_MAY_BE_IRREVERSIBLE) != 0)
+  {
+    FREE (&user);
+    FREE (&domain);
+    FREE (&tmp);
+    return a->mailbox;
+  }
+  
+  safe_realloc (&buff, mutt_strlen (tmp) + mutt_strlen (user) + 2);
+  sprintf (buff, "%s@%s", NONULL(user), NONULL(tmp)); /* __SPRINTF_CHECKED__ */
+  FREE (&tmp);
+  FREE (&user);
+  FREE (&domain);
+  return buff;
+}
+
+/* Convert an ENVELOPE structure */
+
+void mutt_env_to_local (ENVELOPE *e)
+{
+  mutt_addrlist_to_local (e->return_path);
+  mutt_addrlist_to_local (e->from);
+  mutt_addrlist_to_local (e->to);
+  mutt_addrlist_to_local (e->cc);
+  mutt_addrlist_to_local (e->bcc);
+  mutt_addrlist_to_local (e->reply_to);
+  mutt_addrlist_to_local (e->mail_followup_to);
+}
+
+/* Note that `a' in the `env->a' expression is macro argument, not
+ * "real" name of an `env' compound member.  Real name will be substituted
+ * by preprocessor at the macro-expansion time.
+ */
+#define H_TO_IDNA(a)   \
+  if (mutt_addrlist_to_idna (env->a, err) && !e) \
+  { \
+     if (tag) *tag = #a; e = 1; err = NULL; \
+  }
+
+int mutt_env_to_idna (ENVELOPE *env, char **tag, char **err)
+{
+  int e = 0;
+  H_TO_IDNA(return_path);
+  H_TO_IDNA(from);
+  H_TO_IDNA(to);
+  H_TO_IDNA(cc);
+  H_TO_IDNA(bcc);
+  H_TO_IDNA(reply_to);
+  H_TO_IDNA(mail_followup_to);
+  return e;
+}
+
+#undef H_TO_IDNA
diff --git a/mutt_idna.h b/mutt_idna.h
new file mode 100644 (file)
index 0000000..0e2534a
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2003 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+#ifndef _MUTT_IDNA_H
+# define _MUTT_IDNA_H
+
+#include "config.h"
+#include "rfc822.h"
+#include "charset.h"
+
+#ifdef HAVE_LIBIDN
+#include <idna.h>
+#endif
+
+#define MI_MAY_BE_IRREVERSIBLE         (1 << 0)
+
+int mutt_idna_to_local (const char *, char **, int);
+int mutt_local_to_idna (const char *, char **);
+
+int mutt_addrlist_to_idna (ADDRESS *, char **);
+int mutt_addrlist_to_local (ADDRESS *);
+
+void mutt_env_to_local (ENVELOPE *);
+int mutt_env_to_idna (ENVELOPE *, char **, char **);
+
+const char *mutt_addr_for_display (ADDRESS *a);
+
+/* Work around incompatibilities in the libidn API */
+
+#ifdef HAVE_LIBIDN
+# if (!defined(HAVE_IDNA_TO_ASCII_8Z) && defined(HAVE_IDNA_TO_ASCII_FROM_UTF8))
+#  define idna_to_ascii_8z(a,b,c) idna_to_ascii_from_utf8(a,b,(c)&1,((c)&2)?1:0)
+# endif
+# if (!defined(HAVE_IDNA_TO_ASCII_LZ) && defined(HAVE_IDNA_TO_ASCII_FROM_LOCALE))
+#  define idna_to_ascii_lz(a,b,c) idna_to_ascii_from_locale(a,b,(c)&1,((c)&2)?1:0)
+# endif
+# if (!defined(HAVE_IDNA_TO_UNICODE_8Z8Z) && defined(HAVE_IDNA_TO_UNICODE_UTF8_FROM_UTF8))
+#  define idna_to_unicode_8z8z(a,b,c) idna_to_unicode_utf8_from_utf8(a,b,(c)&1,((c)&2)?1:0)
+# endif
+#endif
+
+#endif
diff --git a/mutt_libesmtp.c b/mutt_libesmtp.c
new file mode 100644 (file)
index 0000000..2d1fecc
--- /dev/null
@@ -0,0 +1,228 @@
+#include "mutt.h"
+#include <errno.h>
+#include <auth-client.h>
+#include <libesmtp.h>
+
+static char authpass[STRING] = "";
+
+#define FAIL() \
+  do { \
+    ret = -1; \
+    goto Done; \
+  } while (0)
+#define MSGFAIL(msg) \
+  do { \
+    mutt_error("%s", msg); \
+    FAIL(); \
+  } while (0)
+#define LIBCFAIL(msg) \
+  do { \
+    mutt_error("%s: %s", msg, strerror(errno)); \
+    FAIL(); \
+  } while (0)
+#define SMTPFAIL(msg) \
+  do { \
+    _mutt_libesmtp_perror(msg); \
+    FAIL(); \
+  } while (0)
+
+/*
+ * _mutt_libesmtp_ensure_init
+ *   Make sure the libESMTP support in mutt is initialized at some time.
+ */
+static void
+_mutt_libesmtp_ensure_init()
+{
+  static int libesmtp_init = 0;
+
+  if (!libesmtp_init) {
+    if (SmtpAuthUser)
+      auth_client_init();
+    libesmtp_init = 1;
+  }
+}
+
+/*
+ * _mutt_libesmtp_perror
+ *   Prints 'msg', a colon, and then a string representation of the
+ *   libesmtp errno as a mutt error.
+ */
+static void
+_mutt_libesmtp_perror(const char* msg)
+{
+  char buf[512];
+
+  mutt_error("%s: %s", msg, smtp_strerror(smtp_errno(), buf, sizeof(buf)));
+}
+
+/*
+ * _mutt_libesmtp_add_recipients
+ *   Adds every address in 'addr' as a recipient to the smtp message
+ *   'message'.  Note that this does not mean that they will necessarily
+ *   show up in the mail headers (e.g., when bcc'ing).  Returns 0 upon
+ *   success, -1 upon failure (and prints an error message).
+ *
+ *   Very similar to sendlib.c::add_args
+ */
+static int
+_mutt_libesmtp_add_recipients(smtp_message_t message, ADDRESS *addr)
+{
+  int ret = 0;
+
+  for (; addr; addr = addr->next) {
+    /* weed out group mailboxes, since those are for display only */
+    if (addr->mailbox && !addr->group) {
+      if (!smtp_add_recipient(message, addr->mailbox))
+        SMTPFAIL("smtp_add_recipient");
+    }
+  }
+
+Done:
+  return ret;
+}
+
+static int
+_mutt_libesmtp_auth_interact(auth_client_request_t request,
+                             char **result, int fields, void *arg)
+{
+  int i;
+
+  for (i = 0; i < fields; i++) {
+    if (request[i].flags & AUTH_USER) {
+      result[i] = SmtpAuthUser;
+    } else if (request[i].flags & AUTH_PASS) {
+      if (SmtpAuthPass) {
+        result[i] = SmtpAuthPass;
+      } else {
+        if (authpass[0] == '\0') {
+          char prompt[STRING];
+
+          snprintf(prompt, sizeof(prompt), "%s%s: ", request[i].prompt,
+                   (request[i].flags & AUTH_CLEARTEXT) ? " (not encrypted)" : "");
+          mutt_get_password(prompt, authpass, sizeof(authpass));
+        }
+        result[i] = authpass;
+      }
+    }
+  }
+
+  return 1;
+}
+
+#define BUFLEN 8192
+
+static const char*
+_mutt_libesmtp_messagefp_cb(void **buf, int *len, void *arg)
+{
+  int octets;
+
+  if (*buf == NULL)
+    *buf = malloc(BUFLEN);
+
+  if (len == NULL) {
+    rewind((FILE*) arg);
+    return NULL;
+  }
+
+  if (fgets(*buf, BUFLEN - 2, (FILE*) arg) == NULL) {
+    octets = 0;
+  } else {
+    char* p = strchr(*buf, '\0');
+
+    if (p[-1] == '\n' && p[-2] != '\r') {
+      strcpy(p - 1, "\r\n");
+      p++;
+    }
+    octets = p - (char*) *buf;
+  }
+
+  *len = octets;
+  return *buf;
+}
+
+/*
+ * mutt_invoke_libesmtp
+ *   Sends a mail message to the provided recipients using libesmtp.
+ *   Returns 0 upon success, -1 upon failure (and prints an error
+ *   message).
+ */
+int
+mutt_invoke_libesmtp(ADDRESS *from,  /* the sender */
+                     ADDRESS *to, ADDRESS *cc, ADDRESS *bcc, /* recips */
+                     const char *msg, /* file containing message */
+                     int eightbit) /* message contains 8bit chars */
+{
+  int ret = 0; /* return value, default = success */
+  smtp_session_t session;
+  smtp_message_t message;
+  char* hostportstr = NULL;
+  size_t hostportlen;
+  FILE* fp = NULL;
+  auth_context_t authctx = NULL;
+  const smtp_status_t* status;
+
+  _mutt_libesmtp_ensure_init();
+
+  if ((session = smtp_create_session()) == NULL)
+    SMTPFAIL("smtp_create_session");
+
+  /* Create hostname:port string and tell libesmtp */
+  /* len = SmtpHost len + colon + max port (65536 => 5 chars) + terminator */
+  hostportlen = strlen(SmtpHost) + 7;
+  hostportstr = safe_malloc(hostportlen);
+  snprintf(hostportstr, hostportlen, "%s:%d", SmtpHost, SmtpPort);
+  if (!smtp_set_server(session, hostportstr))
+    SMTPFAIL("smtp_set_server");
+
+  if (SmtpAuthUser) {
+    if ((authctx = auth_create_context()) == NULL)
+      MSGFAIL("auth_create_context failed");
+    auth_set_mechanism_flags(authctx, AUTH_PLUGIN_PLAIN, 0);
+    auth_set_interact_cb(authctx, _mutt_libesmtp_auth_interact, NULL);
+    if (!smtp_auth_set_context(session, authctx))
+      SMTPFAIL("smtp_auth_set_context");
+  }
+  
+  if ((message = smtp_add_message(session)) == NULL)
+    SMTPFAIL("smtp_add_message");
+  /*  Initialize envelope sender */
+  if (!smtp_set_reverse_path(message, from->mailbox))
+    SMTPFAIL("smtp_set_reverse_path");
+
+  if ((fp = fopen(msg, "r")) == NULL)
+    LIBCFAIL("fopen");
+  if (!smtp_set_messagecb(message, _mutt_libesmtp_messagefp_cb, fp))
+    SMTPFAIL("smtp_set_messagecb");
+  if (_mutt_libesmtp_add_recipients(message, to))
+    FAIL(); 
+  if (_mutt_libesmtp_add_recipients(message, cc))
+    FAIL();
+  if (_mutt_libesmtp_add_recipients(message, bcc))
+    FAIL();
+  if (!smtp_start_session(session))
+    SMTPFAIL("smtp_start_session");
+
+  status = smtp_message_transfer_status(message);
+  if (status->code < 200 || status->code > 299) {
+    char buf[256];
+    snprintf(buf, sizeof(buf), "SMTP error while sending: %d %s", status->code, status->text);
+    MSGFAIL(buf);
+  }
+
+Done:
+  if (fp != NULL)
+    fclose(fp);
+  if (hostportstr != NULL)
+    free(hostportstr);
+  if (session != NULL)
+    smtp_destroy_session(session);
+  if (authctx != NULL)
+    auth_destroy_context(authctx);
+
+  /* Forget user-entered SMTP AUTH password if send fails */
+  if (ret != 0)
+    authpass[0] = '\0'; 
+
+  return ret;
+}
diff --git a/mutt_libesmtp.h b/mutt_libesmtp.h
new file mode 100644 (file)
index 0000000..9470792
--- /dev/null
@@ -0,0 +1,10 @@
+#if !defined(LIBESMTP_H)
+#define LIBESMTP_H
+
+int
+mutt_invoke_libesmtp (ADDRESS *from,   /* the sender */
+                ADDRESS *to, ADDRESS *cc, ADDRESS *bcc, /* recips */
+                const char *msg, /* file containing message */
+                int eightbit); /* message contains 8bit chars */
+
+#endif /* !defined(LIBESMTP_H) */
diff --git a/mutt_menu.h b/mutt_menu.h
new file mode 100644 (file)
index 0000000..9ed85bb
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ *
+ *     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.
+ */
+
+/*
+ * This file is named mutt_menu.h so it doesn't collide with ncurses menu.h
+ */
+
+#include "keymap.h"
+#include "mutt_regex.h"
+
+#define REDRAW_INDEX           (1)
+#define REDRAW_MOTION          (1<<1)
+#define REDRAW_MOTION_RESYNCH  (1<<2)
+#define REDRAW_CURRENT         (1<<3)
+#define REDRAW_STATUS          (1<<4)
+#define REDRAW_FULL            (1<<5)
+#define REDRAW_BODY            (1<<6)
+#define REDRAW_SIGWINCH                (1<<7)
+
+#define M_MODEFMT "-- Mutt: %s"
+
+typedef struct menu_t
+{
+  char *title;   /* the title of this menu */
+  char *help;    /* quickref for the current menu */
+  void *data;    /* extra data for the current menu */
+  int current;   /* current entry */
+  int max;       /* the number of entries in the menu */
+  int redraw;  /* when to redraw the screen */
+  int menu;    /* menu definition for keymap entries. */
+  int offset;  /* which screen row to start the index */
+  int pagelen; /* number of entries per screen */
+  int tagprefix;
+
+  /* Setting dialog != NULL overrides normal menu behaviour. 
+   * In dialog mode menubar is hidden and prompt keys are checked before
+   * normal menu movement keys. This can cause problems with scrolling, if 
+   * prompt keys override movement keys.
+   */
+  char **dialog;       /* dialog lines themselves */
+  char *prompt;                /* prompt for user, similar to mutt_multi_choice */
+  char *keys;          /* keys used in the prompt */
+  
+  /* callback to generate an index line for the requested element */
+  void (*make_entry) (char *, size_t, struct menu_t *, int);
+  
+  /* how to search the menu */
+  int (*search) (struct menu_t *, regex_t *re, int n);
+
+  int (*tag) (struct menu_t *, int i, int m);
+
+  /* color pair to be used for the requested element 
+   * (default function returns ColorDefs[MT_COLOR_NORMAL])
+   */
+  int (*color) (int i);
+   
+  /* the following are used only by mutt_menuLoop() */
+  int top;             /* entry that is the top of the current page */
+  int oldcurrent;      /* for driver use only. */
+  char *searchBuf;     /* last search pattern */
+  int searchDir;       /* direction of search */
+  int tagged;          /* number of tagged entries */
+} MUTTMENU;
+
+void menu_jump (MUTTMENU *);
+void menu_redraw_full (MUTTMENU *);
+void menu_redraw_index (MUTTMENU *);
+void menu_redraw_status (MUTTMENU *);
+void menu_redraw_motion (MUTTMENU *);
+void menu_redraw_current (MUTTMENU *);
+int  menu_redraw (MUTTMENU *);
+void menu_first_entry (MUTTMENU *);
+void menu_last_entry (MUTTMENU *);
+void menu_top_page (MUTTMENU *);
+void menu_bottom_page (MUTTMENU *);
+void menu_middle_page (MUTTMENU *);
+void menu_next_page (MUTTMENU *);
+void menu_prev_page (MUTTMENU *);
+void menu_next_line (MUTTMENU *);
+void menu_prev_line (MUTTMENU *);
+void menu_half_up (MUTTMENU *);
+void menu_half_down (MUTTMENU *);
+void menu_current_top (MUTTMENU *);
+void menu_current_middle (MUTTMENU *);
+void menu_current_bottom (MUTTMENU *);
+void menu_check_recenter (MUTTMENU *);
+void menu_status_line (char *, size_t, MUTTMENU *, const char *);
+
+MUTTMENU *mutt_new_menu (void);
+void mutt_menuDestroy (MUTTMENU **);
+int mutt_menuLoop (MUTTMENU *);
+
+/* used in both the index and pager index to make an entry. */
+void index_make_entry (char *, size_t, struct menu_t *, int);
+int index_color (int);
diff --git a/mutt_regex.h b/mutt_regex.h
new file mode 100644 (file)
index 0000000..0f37d9d
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+/*
+ * A (more) generic interface to regular expression matching
+ */
+
+#ifndef MUTT_REGEX_H
+#define MUTT_REGEX_H
+
+#ifdef USE_GNU_REGEX
+#include "_regex.h"
+#else
+#include <regex.h>
+#endif
+
+/* this is a non-standard option supported by Solaris 2.5.x which allows
+ * patterns of the form \<...\>
+ */
+#ifndef REG_WORDS
+#define REG_WORDS 0
+#endif
+
+#define REGCOMP(X,Y,Z) regcomp(X, Y, REG_WORDS|REG_EXTENDED|(Z))
+#define REGEXEC(X,Y) regexec(&X, Y, (size_t)0, (regmatch_t *)0, (int)0)
+
+typedef struct
+{
+  char *pattern;       /* printable version */
+  regex_t *rx;                 /* compiled expression */
+  int not;             /* do not match */
+} REGEXP;
+
+WHERE REGEXP Mask;
+WHERE REGEXP QuoteRegexp;
+WHERE REGEXP ReplyRegexp;
+WHERE REGEXP Smileys;
+WHERE REGEXP GecosMask;
+
+#endif /* MUTT_REGEX_H */
diff --git a/mutt_sasl.c b/mutt_sasl.c
new file mode 100644 (file)
index 0000000..6a20137
--- /dev/null
@@ -0,0 +1,670 @@
+/*
+ * Copyright (C) 2000-3 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+/* common SASL helper routines */
+
+#include "mutt.h"
+#include "account.h"
+#include "mutt_sasl.h"
+#include "mutt_socket.h"
+
+#ifdef USE_SASL2
+#include <netdb.h>
+#include <sasl/sasl.h>
+#else
+#include <sasl.h>
+#endif
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+#ifdef USE_SASL2
+static int getnameinfo_err(int ret)
+{
+  int err;
+  dprint (1, (debugfile, "getnameinfo: "));
+  switch(ret)
+  {
+     case EAI_AGAIN:
+       dprint (1, (debugfile, "The name could not be resolved at this time.  Future attempts may succeed.\n"));
+       err=SASL_TRYAGAIN;
+       break;
+     case EAI_BADFLAGS:
+       dprint (1, (debugfile, "The flags had an invalid value.\n"));
+       err=SASL_BADPARAM;
+       break;
+     case EAI_FAIL:
+       dprint (1, (debugfile, "A non-recoverable error occurred.\n"));
+       err=SASL_FAIL;
+       break;
+     case EAI_FAMILY:
+       dprint (1, (debugfile, "The address family was not recognized or the address length was invalid for the specified family.\n"));
+       err=SASL_BADPROT;
+       break;
+     case EAI_MEMORY:
+       dprint (1, (debugfile, "There was a memory allocation failure.\n"));
+       err=SASL_NOMEM;
+       break;
+     case EAI_NONAME:
+       dprint (1, (debugfile, "The name does not resolve for the supplied parameters.  NI_NAMEREQD is set and the host's name cannot be located, or both nodename and servname were null.\n"));
+       err=SASL_FAIL; /* no real equivalent */
+       break;
+     case EAI_SYSTEM:
+       dprint (1, (debugfile, "A system error occurred.  The error code can be found in errno(%d,%s)).\n",errno,strerror(errno)));
+       err=SASL_FAIL; /* no real equivalent */
+       break;
+     default:
+       dprint (1, (debugfile, "Unknown error %d\n",ret));
+       err=SASL_FAIL; /* no real equivalent */
+       break;
+  }
+  return err;
+}
+#endif
+
+/* arbitrary. SASL will probably use a smaller buffer anyway. OTOH it's
+ * been a while since I've had access to an SASL server which negotiated
+ * a protection buffer. */ 
+#define M_SASL_MAXBUF 65536
+
+#ifdef USE_SASL2
+#define IP_PORT_BUFLEN 1024
+#endif
+
+static sasl_callback_t mutt_sasl_callbacks[5];
+
+static int mutt_sasl_start (void);
+
+/* callbacks */
+static int mutt_sasl_cb_log (void* context, int priority, const char* message);
+static int mutt_sasl_cb_authname (void* context, int id, const char** result,
+  unsigned int* len);
+static int mutt_sasl_cb_pass (sasl_conn_t* conn, void* context, int id,
+  sasl_secret_t** psecret);
+
+/* socket wrappers for a SASL security layer */
+static int mutt_sasl_conn_open (CONNECTION* conn);
+static int mutt_sasl_conn_close (CONNECTION* conn);
+static int mutt_sasl_conn_read (CONNECTION* conn, char* buf, size_t len);
+static int mutt_sasl_conn_write (CONNECTION* conn, const char* buf,
+  size_t count);
+
+#ifdef USE_SASL2
+/* utility function, stolen from sasl2 sample code */
+static int iptostring(const struct sockaddr *addr, socklen_t addrlen,
+                     char *out, unsigned outlen) {
+    char hbuf[NI_MAXHOST], pbuf[NI_MAXSERV];
+    int ret;
+    
+    if(!addr || !out) return SASL_BADPARAM;
+
+    ret=getnameinfo(addr, addrlen, hbuf, sizeof(hbuf), pbuf, sizeof(pbuf),
+                   NI_NUMERICHOST |
+#ifdef NI_WITHSCOPEID
+                  NI_WITHSCOPEID |
+#endif
+                  NI_NUMERICSERV);
+    if(ret)
+      return getnameinfo_err(ret);
+
+    if(outlen < strlen(hbuf) + strlen(pbuf) + 2)
+        return SASL_BUFOVER;
+
+    snprintf(out, outlen, "%s;%s", hbuf, pbuf);
+
+    return SASL_OK;
+}
+#endif
+
+/* mutt_sasl_start: called before doing a SASL exchange - initialises library
+ *   (if neccessary). */
+int mutt_sasl_start (void)
+{
+  static unsigned char sasl_init = 0;
+
+  static sasl_callback_t callbacks[2];
+  int rc;
+
+  if (sasl_init)
+    return SASL_OK;
+
+  /* set up default logging callback */
+  callbacks[0].id = SASL_CB_LOG;
+  callbacks[0].proc = mutt_sasl_cb_log;
+  callbacks[0].context = NULL;
+
+  callbacks[1].id = SASL_CB_LIST_END;
+  callbacks[1].proc = NULL;
+  callbacks[1].context = NULL;
+
+  rc = sasl_client_init (callbacks);
+
+  if (rc != SASL_OK)
+  {
+    dprint (1, (debugfile, "mutt_sasl_start: libsasl initialisation failed.\n"));
+    return SASL_FAIL;
+  }
+
+  sasl_init = 1;
+
+  return SASL_OK;
+}
+
+/* mutt_sasl_client_new: wrapper for sasl_client_new which also sets various
+ * security properties. If this turns out to be fine for POP too we can
+ * probably stop exporting mutt_sasl_get_callbacks(). */
+int mutt_sasl_client_new (CONNECTION* conn, sasl_conn_t** saslconn)
+{
+  sasl_security_properties_t secprops;
+#ifdef USE_SASL2
+  struct sockaddr_storage local, remote;
+  socklen_t size;
+  char iplocalport[IP_PORT_BUFLEN], ipremoteport[IP_PORT_BUFLEN];
+#else
+  sasl_external_properties_t extprops;
+#endif
+  const char* service;
+  int rc;
+
+  if (mutt_sasl_start () != SASL_OK)
+    return -1;
+
+  switch (conn->account.type)
+  {
+    case M_ACCT_TYPE_IMAP:
+      service = "imap";
+      break;
+    case M_ACCT_TYPE_POP:
+      service = "pop-3";
+      break;
+    default:
+      dprint (1, (debugfile, "mutt_sasl_client_new: account type unset\n"));
+      return -1;
+  }
+
+#ifdef USE_SASL2
+  size = sizeof (local);
+  if (getsockname (conn->fd, (struct sockaddr *)&local, &size)){
+    dprint (1, (debugfile, "mutt_sasl_client_new: getsockname for local failed\n"));
+    return -1;
+  }
+  else 
+  if (iptostring((struct sockaddr *)&local, size, iplocalport, IP_PORT_BUFLEN) != SASL_OK){
+    dprint (1, (debugfile, "mutt_sasl_client_new: iptostring for local failed\n"));
+    return -1;
+  }
+  
+  size = sizeof (remote);
+  if (getpeername (conn->fd, (struct sockaddr *)&remote, &size)){
+    dprint (1, (debugfile, "mutt_sasl_client_new: getsockname for remote failed\n"));
+    return -1;
+  }
+  else 
+  if (iptostring((struct sockaddr *)&remote, size, ipremoteport, IP_PORT_BUFLEN) != SASL_OK){
+    dprint (1, (debugfile, "mutt_sasl_client_new: iptostring for remote failed\n"));
+    return -1;
+  }
+
+dprint(1,(debugfile, "local ip: %s, remote ip:%s\n", iplocalport, ipremoteport));
+  
+  rc = sasl_client_new (service, conn->account.host, iplocalport, ipremoteport,
+    mutt_sasl_get_callbacks (&conn->account), 0, saslconn);
+
+#else
+  rc = sasl_client_new (service, conn->account.host,
+    mutt_sasl_get_callbacks (&conn->account), SASL_SECURITY_LAYER, saslconn);
+#endif
+
+  if (rc != SASL_OK)
+  {
+    dprint (1, (debugfile,
+      "mutt_sasl_client_new: Error allocating SASL connection\n"));
+    return -1;
+  }
+
+  /*** set sasl IP properties, necessary for use with krb4 ***/
+  /* Do we need to fail if this fails? I would assume having these unset
+   * would just disable KRB4. Who wrote this code? I'm not sure how this
+   * interacts with the NSS code either, since that mucks with the fd. */
+#ifndef USE_SASL2 /* with SASLv2 this all happens in sasl_client_new */
+  {
+    struct sockaddr_in local, remote;
+    socklen_t size;
+
+    size = sizeof (local);
+    if (getsockname (conn->fd, (struct sockaddr*) &local, &size))
+      return -1;
+
+    size = sizeof(remote);
+    if (getpeername(conn->fd, (struct sockaddr*) &remote, &size))
+      return -1;
+
+#ifdef SASL_IP_LOCAL
+    if (sasl_setprop(*saslconn, SASL_IP_LOCAL, &local) != SASL_OK)
+    {
+      dprint (1, (debugfile,
+       "mutt_sasl_client_new: Error setting local IP address\n"));
+      return -1;
+    }
+#endif
+
+#ifdef SASL_IP_REMOTE
+    if (sasl_setprop(*saslconn, SASL_IP_REMOTE, &remote) != SASL_OK)
+    {
+      dprint (1, (debugfile,
+       "mutt_sasl_client_new: Error setting remote IP address\n"));
+      return -1;
+    }
+#endif
+  }
+#endif
+
+  /* set security properties. We use NOPLAINTEXT globally, since we can
+   * just fall back to LOGIN in the IMAP case anyway. If that doesn't
+   * work for POP, we can make it a flag or move this code into
+   * imap/auth_sasl.c */
+  memset (&secprops, 0, sizeof (secprops));
+  /* Work around a casting bug in the SASL krb4 module */
+  secprops.max_ssf = 0x7fff;
+  secprops.maxbufsize = M_SASL_MAXBUF;
+  secprops.security_flags |= SASL_SEC_NOPLAINTEXT;
+  if (sasl_setprop (*saslconn, SASL_SEC_PROPS, &secprops) != SASL_OK)
+  {
+    dprint (1, (debugfile,
+      "mutt_sasl_client_new: Error setting security properties\n"));
+    return -1;
+  }
+
+  /* we currently don't have an SSF finder for NSS (I don't know the API).
+   * If someone does it'd probably be trivial to write mutt_nss_get_ssf().
+   * I have a feeling more SSL code could be shared between those two files,
+   * but I haven't looked into it yet, since I still don't know the APIs. */
+#if defined(USE_SSL) && !defined(USE_NSS)
+  if (conn->account.flags & M_ACCT_SSL)
+  {
+#ifdef USE_SASL2 /* I'm not sure this actually has an effect, at least with SASLv2 */
+    dprint (2, (debugfile, "External SSF: %d\n", conn->ssf));
+    if (sasl_setprop (*saslconn, SASL_SSF_EXTERNAL, &(conn->ssf)) != SASL_OK)
+#else
+    memset (&extprops, 0, sizeof (extprops));
+    extprops.ssf = conn->ssf;
+    dprint (2, (debugfile, "External SSF: %d\n", extprops.ssf));
+    if (sasl_setprop (*saslconn, SASL_SSF_EXTERNAL, &extprops) != SASL_OK)
+#endif
+    {
+      dprint (1, (debugfile, "mutt_sasl_client_new: Error setting external properties\n"));
+      return -1;
+    }
+#ifdef USE_SASL2
+    dprint (2, (debugfile, "External authentication name: %s\n","NULL"));
+    if (sasl_setprop (*saslconn, SASL_AUTH_EXTERNAL, NULL) != SASL_OK)
+     {
+      dprint (1, (debugfile, "mutt_sasl_client_new: Error setting external properties\n"));
+      return -1;
+    }
+#endif
+  }
+#endif
+
+  return 0;
+}
+
+sasl_callback_t* mutt_sasl_get_callbacks (ACCOUNT* account)
+{
+  sasl_callback_t* callback;
+
+  callback = mutt_sasl_callbacks;
+
+  callback->id = SASL_CB_AUTHNAME;
+  callback->proc = mutt_sasl_cb_authname;
+  callback->context = account;
+  callback++;
+
+  callback->id = SASL_CB_USER;
+  callback->proc = mutt_sasl_cb_authname;
+  callback->context = account;
+  callback++;
+
+  callback->id = SASL_CB_PASS;
+  callback->proc = mutt_sasl_cb_pass;
+  callback->context = account;
+  callback++;
+
+  callback->id = SASL_CB_GETREALM;
+  callback->proc = NULL;
+  callback->context = NULL;
+  callback++;
+
+  callback->id = SASL_CB_LIST_END;
+  callback->proc = NULL;
+  callback->context = NULL;
+
+  return mutt_sasl_callbacks;
+}
+
+int mutt_sasl_interact (sasl_interact_t* interaction)
+{
+  char prompt[SHORT_STRING];
+  char resp[SHORT_STRING];
+
+  while (interaction->id != SASL_CB_LIST_END)
+  {
+    dprint (2, (debugfile, "mutt_sasl_interact: filling in SASL interaction %ld.\n", interaction->id));
+
+    snprintf (prompt, sizeof (prompt), "%s: ", interaction->prompt);
+    resp[0] = '\0';
+    if (mutt_get_field (prompt, resp, sizeof (resp), 0))
+      return SASL_FAIL;
+
+    interaction->len = mutt_strlen (resp)+1;
+    interaction->result = safe_malloc (interaction->len);
+    memcpy (interaction->result, resp, interaction->len);
+
+    interaction++;
+  }
+
+  return SASL_OK;
+}
+
+/* SASL can stack a protection layer on top of an existing connection.
+ * To handle this, we store a saslconn_t in conn->sockdata, and write
+ * wrappers which en/decode the read/write stream, then replace sockdata
+ * with an embedded copy of the old sockdata and call the underlying
+ * functions (which we've also preserved). I thought about trying to make
+ * a general stackable connection system, but it seemed like overkill -
+ * something is wrong if we have 15 filters on top of a socket. Anyway,
+ * anything else which wishes to stack can use the same method. The only
+ * disadvantage is we have to write wrappers for all the socket methods,
+ * even if we only stack over read and write. Thinking about it, the
+ * abstraction problem is that there is more in CONNECTION than there
+ * needs to be. Ideally it would have only (void*)data and methods. */
+
+/* mutt_sasl_setup_conn: replace connection methods, sockdata with 
+ *   SASL wrappers, for protection layers. Also get ssf, as a fastpath
+ *   for the read/write methods. */
+void mutt_sasl_setup_conn (CONNECTION* conn, sasl_conn_t* saslconn)
+{
+  SASL_DATA* sasldata = (SASL_DATA*) safe_malloc (sizeof (SASL_DATA));
+
+  sasldata->saslconn = saslconn;
+  /* get ssf so we know whether we have to (en|de)code read/write */
+#ifdef USE_SASL2
+  sasl_getprop (saslconn, SASL_SSF, (const void**) &sasldata->ssf);
+#else
+  sasl_getprop (saslconn, SASL_SSF, (void**) &sasldata->ssf);
+#endif
+  dprint (3, (debugfile, "SASL protection strength: %u\n", *sasldata->ssf));
+  /* Add SASL SSF to transport SSF */
+  conn->ssf += *sasldata->ssf;
+#ifdef USE_SASL2
+  sasl_getprop (saslconn, SASL_MAXOUTBUF, (const void**) &sasldata->pbufsize);
+#else
+  sasl_getprop (saslconn, SASL_MAXOUTBUF, (void**) &sasldata->pbufsize);
+#endif
+  dprint (3, (debugfile, "SASL protection buffer size: %u\n", *sasldata->pbufsize));
+
+  /* clear input buffer */
+  sasldata->buf = NULL;
+  sasldata->bpos = 0;
+  sasldata->blen = 0;
+
+  /* preserve old functions */
+  sasldata->sockdata = conn->sockdata;
+  sasldata->open = conn->open;
+  sasldata->close = conn->close;
+  sasldata->read = conn->read;
+  sasldata->write = conn->write;
+
+  /* and set up new functions */
+  conn->sockdata = sasldata;
+  conn->open = mutt_sasl_conn_open;
+  conn->close = mutt_sasl_conn_close;
+  conn->read = mutt_sasl_conn_read;
+  conn->write = mutt_sasl_conn_write;
+}
+
+/* mutt_sasl_cb_log: callback to log SASL messages */
+static int mutt_sasl_cb_log (void* context, int priority, const char* message)
+{
+  dprint (priority, (debugfile, "SASL: %s\n", message));
+
+  return SASL_OK;
+}
+
+/* mutt_sasl_cb_authname: callback to retrieve authname or user (mutt
+ *   doesn't distinguish, even if some SASL plugins do) from ACCOUNT */
+static int mutt_sasl_cb_authname (void* context, int id, const char** result,
+  unsigned* len)
+{
+  ACCOUNT* account = (ACCOUNT*) context;
+
+  *result = NULL;
+  if (len)
+    *len = 0;
+
+  if (!account)
+    return SASL_BADPARAM;
+
+  dprint (2, (debugfile, "mutt_sasl_cb_authname: getting %s for %s:%u\n",
+             id == SASL_CB_AUTHNAME ? "authname" : "user",
+             account->host, account->port));
+
+  if (mutt_account_getuser (account))
+    return SASL_FAIL;
+
+  *result = account->user;
+
+  if (len)
+    *len = strlen (*result);
+
+  return SASL_OK;
+}
+
+static int mutt_sasl_cb_pass (sasl_conn_t* conn, void* context, int id,
+  sasl_secret_t** psecret)
+{
+  ACCOUNT* account = (ACCOUNT*) context;
+  int len;
+
+  if (!account || !psecret)
+    return SASL_BADPARAM;
+
+  dprint (2, (debugfile,
+    "mutt_sasl_cb_pass: getting password for %s@%s:%u\n", account->user,
+    account->host, account->port));
+
+  if (mutt_account_getpass (account))
+    return SASL_FAIL;
+
+  len = strlen (account->pass);
+
+  *psecret = (sasl_secret_t*) safe_malloc (sizeof (sasl_secret_t) + len);
+  (*psecret)->len = len;
+  strcpy ((*psecret)->data, account->pass);    /* __STRCPY_CHECKED__ */
+
+  return SASL_OK;
+}
+
+/* mutt_sasl_conn_open: empty wrapper for underlying open function. We
+ *   don't know in advance that a connection will use SASL, so we
+ *   replace conn's methods with sasl methods when authentication
+ *   is successful, using mutt_sasl_setup_conn */
+static int mutt_sasl_conn_open (CONNECTION* conn)
+{
+  SASL_DATA* sasldata;
+  int rc;
+
+  sasldata = (SASL_DATA*) conn->sockdata;
+  conn->sockdata = sasldata->sockdata;
+  rc = (sasldata->open) (conn);
+  conn->sockdata = sasldata;
+
+  return rc;
+}
+
+/* mutt_sasl_conn_close: calls underlying close function and disposes of
+ *   the sasl_conn_t object, then restores connection to pre-sasl state */
+static int mutt_sasl_conn_close (CONNECTION* conn)
+{
+  SASL_DATA* sasldata;
+  int rc;
+
+  sasldata = (SASL_DATA*) conn->sockdata;
+
+  /* restore connection's underlying methods */
+  conn->sockdata = sasldata->sockdata;
+  conn->open = sasldata->open;
+  conn->close = sasldata->close;
+  conn->read = sasldata->read;
+  conn->write = sasldata->write;
+
+  /* release sasl resources */
+  sasl_dispose (&sasldata->saslconn);
+#ifndef USE_SASL2
+  FREE (&sasldata->buf);
+#endif
+  FREE (&sasldata);
+
+  /* call underlying close */
+  rc = (conn->close) (conn);
+
+  return rc;
+}
+
+static int mutt_sasl_conn_read (CONNECTION* conn, char* buf, size_t len)
+{
+  SASL_DATA* sasldata;
+  int rc;
+
+  unsigned int olen;
+
+  sasldata = (SASL_DATA*) conn->sockdata;
+
+  /* if we still have data in our read buffer, copy it into buf */
+  if (sasldata->blen > sasldata->bpos)
+  {
+    olen = (sasldata->blen - sasldata->bpos > len) ? len :
+      sasldata->blen - sasldata->bpos;
+
+    memcpy (buf, sasldata->buf+sasldata->bpos, olen);
+    sasldata->bpos += olen;
+
+    return olen;
+  }
+  
+  conn->sockdata = sasldata->sockdata;
+
+#ifndef USE_SASL2
+  FREE (&sasldata->buf);
+#endif
+  sasldata->bpos = 0;
+  sasldata->blen = 0;
+
+  /* and decode the result, if necessary */
+  if (*sasldata->ssf)
+  {
+    do
+    {
+      /* call the underlying read function to fill the buffer */
+      rc = (sasldata->read) (conn, buf, len);
+      if (rc <= 0)
+       goto out;
+
+      rc = sasl_decode (sasldata->saslconn, buf, rc, &sasldata->buf,
+        &sasldata->blen);
+      if (rc != SASL_OK)
+      {
+       dprint (1, (debugfile, "SASL decode failed: %s\n",
+          sasl_errstring (rc, NULL, NULL)));
+       goto out;
+      }
+    }
+    while (!sasldata->blen);
+
+    olen = (sasldata->blen - sasldata->bpos > len) ? len :
+      sasldata->blen - sasldata->bpos;
+
+    memcpy (buf, sasldata->buf, olen);
+    sasldata->bpos += olen;
+
+    rc = olen;
+  }
+  else
+    rc = (sasldata->read) (conn, buf, len);
+
+  out:
+    conn->sockdata = sasldata;
+
+    return rc;
+}
+
+static int mutt_sasl_conn_write (CONNECTION* conn, const char* buf,
+  size_t len)
+{
+  SASL_DATA* sasldata;
+  int rc;
+
+#ifdef USE_SASL2
+  const char *pbuf;
+#else
+  char* pbuf;
+#endif
+  unsigned int olen, plen;
+
+  sasldata = (SASL_DATA*) conn->sockdata;
+  conn->sockdata = sasldata->sockdata;
+
+  /* encode data, if necessary */
+  if (*sasldata->ssf)
+  {
+    /* handle data larger than MAXOUTBUF */
+    do
+    {
+      olen = (len > *sasldata->pbufsize) ? *sasldata->pbufsize : len;
+
+      rc = sasl_encode (sasldata->saslconn, buf, olen, &pbuf, &plen);
+      if (rc != SASL_OK)
+      {
+       dprint (1, (debugfile, "SASL encoding failed: %s\n",
+          sasl_errstring (rc, NULL, NULL)));
+       goto fail;
+      }
+
+      rc = (sasldata->write) (conn, pbuf, plen);
+#ifndef USE_SASL2
+      FREE (&pbuf);
+#endif
+      if (rc != plen)
+       goto fail;
+
+      len -= olen;
+      buf += olen;
+    }
+    while (len > *sasldata->pbufsize);
+  }
+  else
+  /* just write using the underlying socket function */
+    rc = (sasldata->write) (conn, buf, len);
+  
+  conn->sockdata = sasldata;
+
+  return rc;
+
+ fail:
+  conn->sockdata = sasldata;
+  return -1;
+}
diff --git a/mutt_sasl.h b/mutt_sasl.h
new file mode 100644 (file)
index 0000000..eaba032
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2000-1 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+/* common SASL helper routines */
+
+#ifndef _MUTT_SASL_H_
+#define _MUTT_SASL_H_ 1
+
+#ifdef USE_SASL2
+#include <sasl/sasl.h>
+#else
+#include <sasl.h>
+#endif
+
+#include "mutt_socket.h"
+
+int mutt_sasl_client_new (CONNECTION*, sasl_conn_t**);
+sasl_callback_t* mutt_sasl_get_callbacks (ACCOUNT*);
+int mutt_sasl_interact (sasl_interact_t*);
+void mutt_sasl_setup_conn (CONNECTION*, sasl_conn_t*);
+
+typedef struct 
+{
+  sasl_conn_t* saslconn;
+  const sasl_ssf_t* ssf;
+  const unsigned int* pbufsize;
+
+  /* read buffer */
+#ifdef USE_SASL2
+  const char *buf;
+#else
+  char* buf;
+#endif
+  unsigned int blen;
+  unsigned int bpos;
+
+  /* underlying socket data */
+  void* sockdata;
+  int (*open) (CONNECTION* conn);
+  int (*close) (CONNECTION* conn);
+  int (*read) (CONNECTION* conn, char* buf, size_t len);
+  int (*write) (CONNECTION* conn, const char* buf, size_t count);
+}
+SASL_DATA;
+
+#endif /* _MUTT_SASL_H_ */
diff --git a/mutt_socket.c b/mutt_socket.c
new file mode 100644 (file)
index 0000000..50ee94d
--- /dev/null
@@ -0,0 +1,526 @@
+/*
+ * Copyright (C) 1998 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com>
+ * Copyright (C) 1999-2000 Tommi Komulainen <Tommi.Komulainen@iki.fi>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "globals.h"
+#include "mutt_socket.h"
+#include "mutt_tunnel.h"
+#ifdef USE_SSL
+# include "mutt_ssl.h"
+#endif
+
+#include "mutt_idna.h"
+
+#include <unistd.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <string.h>
+#include <errno.h>
+
+/* support for multiple socket connections */
+static CONNECTION *Connections = NULL;
+
+/* forward declarations */
+static int socket_preconnect (void);
+static int socket_connect (int fd, struct sockaddr* sa);
+static CONNECTION* socket_new_conn ();
+
+/* Wrappers */
+int mutt_socket_open (CONNECTION* conn) 
+{
+  if (socket_preconnect ())
+    return -1;
+
+  return conn->open (conn);
+}
+
+int mutt_socket_close (CONNECTION* conn)
+{
+  int rc = -1;
+
+  if (conn->fd < 0)
+    dprint (1, (debugfile, "mutt_socket_close: Attempt to close closed connection.\n"));
+  else
+    rc = conn->close (conn);
+
+  conn->fd = -1;
+  conn->ssf = 0;
+
+  return rc;
+}
+
+int mutt_socket_read (CONNECTION* conn, char* buf, size_t len)
+{
+  int rc;
+
+  if (conn->fd < 0)
+  {
+    dprint (1, (debugfile, "mutt_socket_read: attempt to read from closed connection\n"));
+    return -1;
+  }
+
+  rc = conn->read (conn, buf, len);
+  /* EOF */
+  if (rc == 0)
+  {
+    mutt_error (_("Connection to %s closed"), conn->account.host);
+    mutt_sleep (2);
+  }
+  if (rc <= 0)
+    mutt_socket_close (conn);
+
+  return rc;
+}
+
+int mutt_socket_write_d (CONNECTION *conn, const char *buf, int dbg)
+{
+  int rc;
+  int len;
+
+  dprint (dbg, (debugfile,"> %s", buf));
+
+  if (conn->fd < 0)
+  {
+    dprint (1, (debugfile, "mutt_socket_write: attempt to write to closed connection\n"));
+    return -1;
+  }
+
+  len = mutt_strlen (buf);
+  if ((rc = conn->write (conn, buf, len)) < 0)
+  {
+    dprint (1, (debugfile,
+      "mutt_socket_write: error writing, closing socket\n"));
+    mutt_socket_close (conn);
+
+    return -1;
+  }
+
+  if (rc < len)
+  {
+    dprint (1, (debugfile,
+      "mutt_socket_write: ERROR: wrote %d of %d bytes!\n", rc, len));
+  }
+
+  return rc;
+}
+
+/* simple read buffering to speed things up. */
+int mutt_socket_readchar (CONNECTION *conn, char *c)
+{
+  if (conn->bufpos >= conn->available)
+  {
+    if (conn->fd >= 0)
+      conn->available = conn->read (conn, conn->inbuf, sizeof (conn->inbuf));
+    else
+    {
+      dprint (1, (debugfile, "mutt_socket_readchar: attempt to read from closed connection.\n"));
+      return -1;
+    }
+    conn->bufpos = 0;
+    if (conn->available == 0)
+    {
+      mutt_error (_("Connection to %s closed"), conn->account.host);
+      mutt_sleep (2);
+    }
+    if (conn->available <= 0)
+    {
+      mutt_socket_close (conn);
+      return -1;
+    }
+  }
+  *c = conn->inbuf[conn->bufpos];
+  conn->bufpos++;
+  return 1;
+}
+
+int mutt_socket_readln_d (char* buf, size_t buflen, CONNECTION* conn, int dbg)
+{
+  char ch;
+  int i;
+
+  for (i = 0; i < buflen-1; i++)
+  {
+    if (mutt_socket_readchar (conn, &ch) != 1)
+    {
+      buf[i] = '\0';
+      return -1;
+    }
+
+    if (ch == '\n')
+      break;
+    buf[i] = ch;
+  }
+
+  /* strip \r from \r\n termination */
+  if (i && buf[i-1] == '\r')
+    buf[--i] = '\0';
+  else
+    buf[i] = '\0';
+
+  dprint (dbg, (debugfile, "< %s\n", buf));
+  
+  /* number of bytes read, not strlen */
+  return i + 1;
+}
+
+CONNECTION* mutt_socket_head (void)
+{
+  return Connections;
+}
+
+/* mutt_socket_free: remove connection from connection list and free it */
+void mutt_socket_free (CONNECTION* conn)
+{
+  CONNECTION* iter;
+  CONNECTION* tmp;
+
+  iter = Connections;
+
+  /* head is special case, doesn't need prev updated */
+  if (iter == conn)
+  {
+    Connections = iter->next;
+    FREE (&iter);
+    return;
+  }
+
+  while (iter->next)
+  {
+    if (iter->next == conn)
+    {
+      tmp = iter->next;
+      iter->next = tmp->next;
+      FREE (&tmp);
+      return;
+    }
+    iter = iter->next;
+  }
+}
+
+/* mutt_conn_find: find a connection off the list of connections whose
+ *   account matches account. If start is not null, only search for
+ *   connections after the given connection (allows higher level socket code
+ *   to make more fine-grained searches than account info - eg in IMAP we may
+ *   wish to find a connection which is not in IMAP_SELECTED state) */
+CONNECTION* mutt_conn_find (const CONNECTION* start, const ACCOUNT* account)
+{
+  CONNECTION* conn;
+  ciss_url_t url;
+  char hook[LONG_STRING];
+
+  /* account isn't actually modified, since url isn't either */
+  mutt_account_tourl ((ACCOUNT*) account, &url);
+  url.path = NULL;
+  url_ciss_tostring (&url, hook, sizeof (hook), 0);
+  mutt_account_hook (hook);
+
+  conn = start ? start->next : Connections;
+  while (conn)
+  {
+    if (mutt_account_match (account, &(conn->account)))
+      return conn;
+    conn = conn->next;
+  }
+
+  conn = socket_new_conn ();
+  memcpy (&conn->account, account, sizeof (ACCOUNT));
+
+  conn->next = Connections;
+  Connections = conn;
+
+  if (Tunnel && *Tunnel)
+    mutt_tunnel_socket_setup (conn);
+  else if (account->flags & M_ACCT_SSL) 
+  {
+#ifdef USE_SSL
+    ssl_socket_setup (conn);
+#elif USE_NSS
+    mutt_nss_socket_setup (conn);
+#else
+    mutt_error _("SSL is unavailable.");
+    mutt_sleep (2);
+    mutt_socket_free (conn);
+
+    return NULL;
+#endif
+  }
+  else
+  {
+    conn->read = raw_socket_read;
+    conn->write = raw_socket_write;
+    conn->open = raw_socket_open;
+    conn->close = raw_socket_close;
+  }
+
+  return conn;
+}
+
+static int socket_preconnect (void)
+{
+  int rc;
+  int save_errno;
+
+  if (mutt_strlen (Preconnect))
+  {
+    dprint (2, (debugfile, "Executing preconnect: %s\n", Preconnect));
+    rc = mutt_system (Preconnect);
+    dprint (2, (debugfile, "Preconnect result: %d\n", rc));
+    if (rc)
+    {
+      save_errno = errno;
+      mutt_perror (_("Preconnect command failed."));
+      mutt_sleep (1);
+      
+      return save_errno;
+    }
+  }
+
+  return 0;
+}
+
+/* socket_connect: set up to connect to a socket fd. */
+static int socket_connect (int fd, struct sockaddr* sa)
+{
+  int sa_size;
+  int save_errno;
+
+  if (sa->sa_family == AF_INET)
+    sa_size = sizeof (struct sockaddr_in);
+#ifdef HAVE_GETADDRINFO
+  else if (sa->sa_family == AF_INET6)
+    sa_size = sizeof (struct sockaddr_in6);
+#endif
+  else
+  {
+    dprint (1, (debugfile, "Unknown address family!\n"));
+    return -1;
+  }
+  
+  if (ConnectTimeout > 0)
+      alarm (ConnectTimeout);
+
+  mutt_allow_interrupt (1);
+
+  save_errno = 0;
+
+  if (connect (fd, sa, sa_size) < 0)
+  {
+      save_errno = errno;
+      dprint (2, (debugfile, "Connection failed. errno: %d...\n", errno));
+      SigInt = 0;      /* reset in case we caught SIGINTR while in connect() */
+  }
+
+  if (ConnectTimeout > 0)
+      alarm (0);
+  mutt_allow_interrupt (0);
+
+  return save_errno;
+}
+
+/* socket_new_conn: allocate and initialise a new connection. */
+static CONNECTION* socket_new_conn ()
+{
+  CONNECTION* conn;
+
+  conn = (CONNECTION *) safe_calloc (1, sizeof (CONNECTION));
+  conn->fd = -1;
+
+  return conn;
+}
+
+int raw_socket_close (CONNECTION *conn)
+{
+  return close (conn->fd);
+}
+
+int raw_socket_read (CONNECTION* conn, char* buf, size_t len)
+{
+  int rc;
+
+  if ((rc = read (conn->fd, buf, len)) == -1)
+  {
+    mutt_error (_("Error talking to %s (%s)"), conn->account.host,
+               strerror (errno));
+    mutt_sleep (2);
+  }
+
+  return rc;
+}
+
+int raw_socket_write (CONNECTION* conn, const char* buf, size_t count)
+{
+  int rc;
+
+  if ((rc = write (conn->fd, buf, count)) == -1)
+  {
+    mutt_error (_("Error talking to %s (%s)"), conn->account.host,
+               strerror (errno));
+    mutt_sleep (2);
+  }
+
+  return rc;
+}
+
+int raw_socket_open (CONNECTION* conn)
+{
+  int rc;
+  int fd;
+
+  char *host_idna = NULL;
+  
+#ifdef HAVE_GETADDRINFO
+/* --- IPv4/6 --- */
+
+  /* "65536\0" */
+  char port[6];
+  struct addrinfo hints;
+  struct addrinfo* res;
+  struct addrinfo* cur;
+
+  /* we accept v4 or v6 STREAM sockets */
+  memset (&hints, 0, sizeof (hints));
+
+  if (option (OPTUSEIPV6))
+    hints.ai_family = AF_UNSPEC;
+  else
+    hints.ai_family = AF_INET;
+
+  hints.ai_socktype = SOCK_STREAM;
+
+  snprintf (port, sizeof (port), "%d", conn->account.port);
+  
+# ifdef HAVE_LIBIDN
+  if (idna_to_ascii_lz (conn->account.host, &host_idna, 1) != IDNA_SUCCESS)
+  {
+    mutt_error (_("Bad IDN \"%s\"."), conn->account.host);
+    return -1;
+  }
+# else
+  host_idna = conn->account.host;
+# endif
+
+  mutt_message (_("Looking up %s..."), conn->account.host);
+
+  
+  rc = getaddrinfo (host_idna, port, &hints, &res);
+
+# ifdef HAVE_LIBIDN
+  FREE (&host_idna);
+# endif
+
+  if (rc)
+  {
+    mutt_error (_("Could not find the host \"%s\""), conn->account.host);
+    return -1;
+  }
+
+  mutt_message (_("Connecting to %s..."), conn->account.host); 
+
+  rc = -1;
+  for (cur = res; cur != NULL; cur = cur->ai_next)
+  {
+    fd = socket (cur->ai_family, cur->ai_socktype, cur->ai_protocol);
+    if (fd >= 0)
+    {
+      if ((rc = socket_connect (fd, cur->ai_addr)) == 0)
+      {
+       fcntl (fd, F_SETFD, FD_CLOEXEC);
+       conn->fd = fd;
+       break;
+      }
+      else
+       close (fd);
+    }
+  }
+
+  freeaddrinfo (res);
+
+#else
+  /* --- IPv4 only --- */
+
+  struct sockaddr_in sin;
+  struct hostent* he;
+  int i;
+
+  memset (&sin, 0, sizeof (sin));
+  sin.sin_port = htons (conn->account.port);
+  sin.sin_family = AF_INET;
+
+# ifdef HAVE_LIBIDN
+  if (idna_to_ascii_lz (conn->account.host, &host_idna, 1) != IDNA_SUCCESS)
+  {
+    mutt_error (_("Bad IDN \"%s\"."), conn->account.host);
+    return -1;
+  }
+# else
+  host_idna = conn->account.host;
+# endif
+
+  mutt_message (_("Looking up %s..."), conn->account.host);
+
+  if ((he = gethostbyname (host_idna)) == NULL)
+  {
+# ifdef HAVE_LIBIDN
+    FREE (&host_idna);
+# endif
+    mutt_error (_("Could not find the host \"%s\""), conn->account.host);
+       
+    return -1;
+  }
+
+# ifdef HAVE_LIBIDN
+  FREE (&host_idna);
+# endif
+
+  mutt_message (_("Connecting to %s..."), conn->account.host); 
+
+  rc = -1;
+  for (i = 0; he->h_addr_list[i] != NULL; i++)
+  {
+    memcpy (&sin.sin_addr, he->h_addr_list[i], he->h_length);
+    fd = socket (PF_INET, SOCK_STREAM, IPPROTO_IP);
+
+    if (fd >= 0)
+    {
+      if ((rc = socket_connect (fd, (struct sockaddr*) &sin)) == 0)
+      {
+       conn->fd = fd;
+       break;
+      }
+      else
+       close (fd);
+    }
+  }
+
+#endif
+  if (rc)
+  {
+    mutt_error (_("Could not connect to %s (%s)."), conn->account.host,
+           (rc > 0) ? strerror (rc) : _("unknown error"));
+    mutt_sleep (2);
+    return -1;
+  }
+  
+  return 0;
+}
diff --git a/mutt_socket.h b/mutt_socket.h
new file mode 100644 (file)
index 0000000..ce191fb
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 1998 Brandon Long <blong@fiction.net>
+ * Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com>
+ * 
+ *     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.
+ */ 
+
+#ifndef _MUTT_SOCKET_H_
+#define _MUTT_SOCKET_H_ 1
+
+#include "account.h"
+#include "lib.h"
+
+/* logging levels */
+#define M_SOCK_LOG_CMD  2
+#define M_SOCK_LOG_HDR  3
+#define M_SOCK_LOG_FULL 4
+
+typedef struct _connection
+{
+  ACCOUNT account;
+  /* security strength factor, in bits */
+  unsigned int ssf;
+  void *data;
+
+  char inbuf[LONG_STRING];
+  int bufpos;
+
+  int fd;
+  int available;
+
+  struct _connection *next;
+
+  void *sockdata;
+  int (*read) (struct _connection* conn, char* buf, size_t len);
+  int (*write) (struct _connection *conn, const char *buf, size_t count);
+  int (*open) (struct _connection *conn);
+  int (*close) (struct _connection *conn);
+} CONNECTION;
+
+int mutt_socket_open (CONNECTION* conn);
+int mutt_socket_close (CONNECTION* conn);
+int mutt_socket_read (CONNECTION* conn, char* buf, size_t len);
+int mutt_socket_readchar (CONNECTION *conn, char *c);
+#define mutt_socket_readln(A,B,C) mutt_socket_readln_d(A,B,C,M_SOCK_LOG_CMD)
+int mutt_socket_readln_d (char *buf, size_t buflen, CONNECTION *conn, int dbg);
+#define mutt_socket_write(A,B) mutt_socket_write_d(A,B,M_SOCK_LOG_CMD);
+int mutt_socket_write_d (CONNECTION *conn, const char *buf, int dbg);
+
+/* stupid hack for imap_logout_all */
+CONNECTION* mutt_socket_head (void);
+void mutt_socket_free (CONNECTION* conn);
+CONNECTION* mutt_conn_find (const CONNECTION* start, const ACCOUNT* account);
+
+int raw_socket_read (CONNECTION* conn, char* buf, size_t len);
+int raw_socket_write (CONNECTION* conn, const char* buf, size_t count);
+int raw_socket_open (CONNECTION *conn);
+int raw_socket_close (CONNECTION *conn);
+
+#endif /* _MUTT_SOCKET_H_ */
diff --git a/mutt_ssl.c b/mutt_ssl.c
new file mode 100644 (file)
index 0000000..1f847a4
--- /dev/null
@@ -0,0 +1,669 @@
+/*
+ * Copyright (C) 1999-2001 Tommi Komulainen <Tommi.Komulainen@iki.fi>
+ * 
+ *     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.
+ */
+
+/* for SSL NO_* defines */
+#include "config.h"
+
+#include <openssl/ssl.h>
+#include <openssl/x509.h>
+#include <openssl/err.h>
+#include <openssl/rand.h>
+
+#undef _
+
+#include <string.h>
+
+#include "mutt.h"
+#include "mutt_socket.h"
+#include "mutt_menu.h"
+#include "mutt_curses.h"
+#include "mutt_ssl.h"
+
+#if OPENSSL_VERSION_NUMBER >= 0x00904000L
+#define READ_X509_KEY(fp, key) PEM_read_X509(fp, key, NULL, NULL)
+#else
+#define READ_X509_KEY(fp, key) PEM_read_X509(fp, key, NULL)
+#endif
+
+/* Just in case OpenSSL doesn't define DEVRANDOM */
+#ifndef DEVRANDOM
+#define DEVRANDOM "/dev/urandom"
+#endif
+
+/* This is ugly, but as RAND_status came in on OpenSSL version 0.9.5
+ * and the code has to support older versions too, this is seemed to
+ * be cleaner way compared to having even uglier #ifdefs all around.
+ */
+#ifdef HAVE_RAND_STATUS
+#define HAVE_ENTROPY() (RAND_status() == 1)
+#else
+static int entropy_byte_count = 0;
+/* OpenSSL fills the entropy pool from /dev/urandom if it exists */
+#define HAVE_ENTROPY() (!access(DEVRANDOM, R_OK) || entropy_byte_count >= 16)
+#endif
+
+typedef struct _sslsockdata
+{
+  SSL_CTX *ctx;
+  SSL *ssl;
+  X509 *cert;
+}
+sslsockdata;
+
+/* local prototypes */
+int ssl_init (void);
+static int add_entropy (const char *file);
+static int ssl_check_certificate (sslsockdata * data);
+static int ssl_socket_read (CONNECTION* conn, char* buf, size_t len);
+static int ssl_socket_write (CONNECTION* conn, const char* buf, size_t len);
+static int ssl_socket_open (CONNECTION * conn);
+static int ssl_socket_close (CONNECTION * conn);
+static int tls_close (CONNECTION* conn);
+int ssl_negotiate (sslsockdata*);
+
+/* mutt_ssl_starttls: Negotiate TLS over an already opened connection.
+ *   TODO: Merge this code better with ssl_socket_open. */
+int mutt_ssl_starttls (CONNECTION* conn)
+{
+  sslsockdata* ssldata;
+  int maxbits;
+
+  if (ssl_init())
+    goto bail;
+
+  ssldata = (sslsockdata*) safe_calloc (1, sizeof (sslsockdata));
+  /* the ssl_use_xxx protocol options don't apply. We must use TLS in TLS. */
+  if (! (ssldata->ctx = SSL_CTX_new (TLSv1_client_method ())))
+  {
+    dprint (1, (debugfile, "mutt_ssl_starttls: Error allocating SSL_CTX\n"));
+    goto bail_ssldata;
+  }
+
+  if (! (ssldata->ssl = SSL_new (ssldata->ctx)))
+  {
+    dprint (1, (debugfile, "mutt_ssl_starttls: Error allocating SSL\n"));
+    goto bail_ctx;
+  }
+
+  if (SSL_set_fd (ssldata->ssl, conn->fd) != 1)
+  {
+    dprint (1, (debugfile, "mutt_ssl_starttls: Error setting fd\n"));
+    goto bail_ssl;
+  }
+
+  if (ssl_negotiate (ssldata))
+    goto bail_ssl;
+
+  /* hmm. watch out if we're starting TLS over any method other than raw. */
+  conn->sockdata = ssldata;
+  conn->read = ssl_socket_read;
+  conn->write = ssl_socket_write;
+  conn->close = tls_close;
+
+  conn->ssf = SSL_CIPHER_get_bits (SSL_get_current_cipher (ssldata->ssl),
+    &maxbits);
+
+  return 0;
+
+ bail_ssl:
+  FREE (&ssldata->ssl);
+ bail_ctx:
+  FREE (&ssldata->ctx);
+ bail_ssldata:
+  FREE (&ssldata);
+ bail:
+  return -1;
+}
+
+/* 
+ * OpenSSL library needs to be fed with sufficient entropy. On systems
+ * with /dev/urandom, this is done transparently by the library itself,
+ * on other systems we need to fill the entropy pool ourselves.
+ *
+ * Even though only OpenSSL 0.9.5 and later will complain about the
+ * lack of entropy, we try to our best and fill the pool with older
+ * versions also. (That's the reason for the ugly #ifdefs and macros,
+ * otherwise I could have simply #ifdef'd the whole ssl_init funcion)
+ */
+int ssl_init (void)
+{
+  char path[_POSIX_PATH_MAX];
+  static unsigned char init_complete = 0;
+
+  if (init_complete)
+    return 0;
+
+  if (! HAVE_ENTROPY())
+  {
+    /* load entropy from files */
+    add_entropy (SslEntropyFile);
+    add_entropy (RAND_file_name (path, sizeof (path)));
+  
+    /* load entropy from egd sockets */
+#ifdef HAVE_RAND_EGD
+    add_entropy (getenv ("EGDSOCKET"));
+    snprintf (path, sizeof(path), "%s/.entropy", NONULL(Homedir));
+    add_entropy (path);
+    add_entropy ("/tmp/entropy");
+#endif
+
+    /* shuffle $RANDFILE (or ~/.rnd if unset) */
+    RAND_write_file (RAND_file_name (path, sizeof (path)));
+    mutt_clear_error ();
+    if (! HAVE_ENTROPY())
+    {
+      mutt_error (_("Failed to find enough entropy on your system"));
+      mutt_sleep (2);
+      return -1;
+    }
+  }
+
+  /* I don't think you can do this just before reading the error. The call
+   * itself might clobber the last SSL error. */
+  SSL_load_error_strings();
+  SSL_library_init();
+  init_complete = 1;
+  return 0;
+}
+
+static int add_entropy (const char *file)
+{
+  struct stat st;
+  int n = -1;
+
+  if (!file) return 0;
+
+  if (stat (file, &st) == -1)
+    return errno == ENOENT ? 0 : -1;
+
+  mutt_message (_("Filling entropy pool: %s...\n"),
+               file);
+  
+  /* check that the file permissions are secure */
+  if (st.st_uid != getuid () || 
+      ((st.st_mode & (S_IWGRP | S_IRGRP)) != 0) ||
+      ((st.st_mode & (S_IWOTH | S_IROTH)) != 0))
+  {
+    mutt_error (_("%s has insecure permissions!"), file);
+    mutt_sleep (2);
+    return -1;
+  }
+
+#ifdef HAVE_RAND_EGD
+  n = RAND_egd (file);
+#endif
+  if (n <= 0)
+    n = RAND_load_file (file, -1);
+
+#ifndef HAVE_RAND_STATUS
+  if (n > 0) entropy_byte_count += n;
+#endif
+  return n;
+}
+
+static int ssl_socket_open_err (CONNECTION *conn)
+{
+  mutt_error (_("SSL disabled due the lack of entropy"));
+  mutt_sleep (2);
+  return -1;
+}
+
+
+int ssl_socket_setup (CONNECTION * conn)
+{
+  if (ssl_init() < 0)
+  {
+    conn->open = ssl_socket_open_err;
+    return -1;
+  }
+
+  conn->open   = ssl_socket_open;
+  conn->read   = ssl_socket_read;
+  conn->write  = ssl_socket_write;
+  conn->close  = ssl_socket_close;
+
+  return 0;
+}
+
+static int ssl_socket_read (CONNECTION* conn, char* buf, size_t len)
+{
+  sslsockdata *data = conn->sockdata;
+  return SSL_read (data->ssl, buf, len);
+}
+
+static int ssl_socket_write (CONNECTION* conn, const char* buf, size_t len)
+{
+  sslsockdata *data = conn->sockdata;
+  return SSL_write (data->ssl, buf, len);
+}
+
+static int ssl_socket_open (CONNECTION * conn)
+{
+  sslsockdata *data;
+  int maxbits;
+
+  if (raw_socket_open (conn) < 0)
+    return -1;
+
+  data = (sslsockdata *) safe_calloc (1, sizeof (sslsockdata));
+  conn->sockdata = data;
+
+  data->ctx = SSL_CTX_new (SSLv23_client_method ());
+
+  /* disable SSL protocols as needed */
+  if (!option(OPTTLSV1)) 
+  {
+    SSL_CTX_set_options(data->ctx, SSL_OP_NO_TLSv1);
+  }
+  if (!option(OPTSSLV2)) 
+  {
+    SSL_CTX_set_options(data->ctx, SSL_OP_NO_SSLv2);
+  }
+  if (!option(OPTSSLV3)) 
+  {
+    SSL_CTX_set_options(data->ctx, SSL_OP_NO_SSLv3);
+  }
+
+  data->ssl = SSL_new (data->ctx);
+  SSL_set_fd (data->ssl, conn->fd);
+
+  if (ssl_negotiate(data))
+  {
+    mutt_socket_close (conn);
+    return -1;
+  }
+  
+  conn->ssf = SSL_CIPHER_get_bits (SSL_get_current_cipher (data->ssl),
+    &maxbits);
+
+  return 0;
+}
+
+/* ssl_negotiate: After SSL state has been initialised, attempt to negotiate
+ *   SSL over the wire, including certificate checks. */
+int ssl_negotiate (sslsockdata* ssldata)
+{
+  int err;
+  const char* errmsg;
+
+#if OPENSSL_VERSION_NUMBER >= 0x00906000L
+  /* This only exists in 0.9.6 and above. Without it we may get interrupted
+   *   reads or writes. Bummer. */
+  SSL_set_mode (ssldata->ssl, SSL_MODE_AUTO_RETRY);
+#endif
+
+  if ((err = SSL_connect (ssldata->ssl)) != 1)
+  {
+    switch (SSL_get_error (ssldata->ssl, err))
+    {
+    case SSL_ERROR_SYSCALL:
+      errmsg = _("I/O error");
+      break;
+    case SSL_ERROR_SSL:
+      errmsg = _("unspecified protocol error");
+      break;
+    default:
+      errmsg = _("unknown error");
+    }
+    
+    mutt_error (_("SSL failed: %s"), errmsg);
+    mutt_sleep (1);
+
+    return -1;
+  }
+
+  ssldata->cert = SSL_get_peer_certificate (ssldata->ssl);
+  if (!ssldata->cert)
+  {
+    mutt_error (_("Unable to get certificate from peer"));
+    mutt_sleep (1);
+    return -1;
+  }
+
+  if (!ssl_check_certificate (ssldata))
+    return -1;
+
+  mutt_message (_("SSL connection using %s (%s)"), 
+    SSL_get_cipher_version (ssldata->ssl), SSL_get_cipher_name (ssldata->ssl));
+  mutt_sleep (0);
+
+  return 0;
+}
+
+static int ssl_socket_close (CONNECTION * conn)
+{
+  sslsockdata *data = conn->sockdata;
+  if (data)
+  {
+    SSL_shutdown (data->ssl);
+
+    X509_free (data->cert);
+    SSL_free (data->ssl);
+    SSL_CTX_free (data->ctx);
+    FREE (&conn->sockdata);
+  }
+
+  return raw_socket_close (conn);
+}
+
+static int tls_close (CONNECTION* conn)
+{
+  int rc;
+
+  rc = ssl_socket_close (conn);
+  conn->read = raw_socket_read;
+  conn->write = raw_socket_write;
+  conn->close = raw_socket_close;
+
+  return rc;
+}
+
+static char *x509_get_part (char *line, const char *ndx)
+{
+  static char ret[SHORT_STRING];
+  char *c, *c2;
+
+  strfcpy (ret, _("Unknown"), sizeof (ret));
+
+  c = strstr (line, ndx);
+  if (c)
+  {
+    c += strlen (ndx);
+    c2 = strchr (c, '/');
+    if (c2)
+      *c2 = '\0';
+    strfcpy (ret, c, sizeof (ret));
+    if (c2)
+      *c2 = '/';
+  }
+
+  return ret;
+}
+
+static void x509_fingerprint (char *s, int l, X509 * cert)
+{
+  unsigned char md[EVP_MAX_MD_SIZE];
+  unsigned int n;
+  int j;
+
+  if (!X509_digest (cert, EVP_md5 (), md, &n))
+  {
+    snprintf (s, l, _("[unable to calculate]"));
+  }
+  else
+  {
+    for (j = 0; j < (int) n; j++)
+    {
+      char ch[8];
+      snprintf (ch, 8, "%02X%s", md[j], (j % 2 ? " " : ""));
+      strncat (s, ch, l);
+    }
+  }
+}
+
+static char *asn1time_to_string (ASN1_UTCTIME *tm)
+{
+  static char buf[64];
+  BIO *bio;
+
+  strfcpy (buf, _("[invalid date]"), sizeof (buf));
+  
+  bio = BIO_new (BIO_s_mem());
+  if (bio)
+  {
+    if (ASN1_TIME_print (bio, tm))
+      (void) BIO_read (bio, buf, sizeof (buf));
+    BIO_free (bio);
+  }
+
+  return buf;
+}
+
+static int check_certificate_by_signer (X509 *peercert)
+{
+  X509_STORE_CTX xsc;
+  X509_STORE *ctx;
+  int pass = 0;
+
+  ctx = X509_STORE_new ();
+  if (ctx == NULL) return 0;
+
+  if (option (OPTSSLSYSTEMCERTS))
+  {
+    if (X509_STORE_set_default_paths (ctx))
+      pass++;
+    else
+      dprint (2, (debugfile, "X509_STORE_set_default_paths failed\n"));
+  }
+
+  if (X509_STORE_load_locations (ctx, SslCertFile, NULL))
+    pass++;
+  else
+    dprint (2, (debugfile, "X509_STORE_load_locations_failed\n"));
+
+  if (pass == 0)
+  {
+    /* nothing to do */
+    X509_STORE_free (ctx);
+    return 0;
+  }
+
+  X509_STORE_CTX_init (&xsc, ctx, peercert, NULL);
+
+  pass = (X509_verify_cert (&xsc) > 0);
+#ifdef DEBUG
+  if (! pass)
+  {
+    char buf[SHORT_STRING];
+    int err;
+
+    err = X509_STORE_CTX_get_error (&xsc);
+    snprintf (buf, sizeof (buf), "%s (%d)", 
+       X509_verify_cert_error_string(err), err);
+    dprint (2, (debugfile, "X509_verify_cert: %s\n", buf));
+  }
+#endif
+  X509_STORE_CTX_cleanup (&xsc);
+  X509_STORE_free (ctx);
+
+  return pass;
+}
+
+static int check_certificate_by_digest (X509 *peercert)
+{
+  unsigned char peermd[EVP_MAX_MD_SIZE];
+  unsigned int peermdlen;
+  X509 *cert = NULL;
+  int pass = 0;
+  FILE *fp;
+
+  /* expiration check */
+  if (X509_cmp_current_time (X509_get_notBefore (peercert)) >= 0)
+  {
+    dprint (2, (debugfile, "Server certificate is not yet valid\n"));
+    mutt_error (_("Server certificate is not yet valid"));
+    mutt_sleep (2);
+    return 0;
+  }
+  if (X509_cmp_current_time (X509_get_notAfter (peercert)) <= 0)
+  {
+    dprint (2, (debugfile, "Server certificate has expired"));
+    mutt_error (_("Server certificate has expired"));
+    mutt_sleep (2);
+    return 0;
+  }
+
+  if ((fp = fopen (SslCertFile, "rt")) == NULL)
+    return 0;
+
+  if (!X509_digest (peercert, EVP_sha1(), peermd, &peermdlen))
+  {
+    fclose (fp);
+    return 0;
+  }
+  
+  while ((cert = READ_X509_KEY (fp, &cert)) != NULL)
+  {
+    unsigned char md[EVP_MAX_MD_SIZE];
+    unsigned int mdlen;
+
+    /* Avoid CPU-intensive digest calculation if the certificates are
+     * not even remotely equal.
+     */
+    if (X509_subject_name_cmp (cert, peercert) != 0 ||
+       X509_issuer_name_cmp (cert, peercert) != 0)
+      continue;
+
+    if (!X509_digest (cert, EVP_sha1(), md, &mdlen) || peermdlen != mdlen)
+      continue;
+    
+    if (memcmp(peermd, md, mdlen) != 0)
+      continue;
+
+    pass = 1;
+    break;
+  }
+  X509_free (cert);
+  fclose (fp);
+
+  return pass;
+}
+
+static int ssl_check_certificate (sslsockdata * data)
+{
+  char *part[] =
+  {"/CN=", "/Email=", "/O=", "/OU=", "/L=", "/ST=", "/C="};
+  char helpstr[SHORT_STRING];
+  char buf[SHORT_STRING];
+  MUTTMENU *menu;
+  int done, row, i;
+  FILE *fp;
+  char *name = NULL, *c;
+
+  if (check_certificate_by_signer (data->cert))
+  {
+    dprint (1, (debugfile, "ssl_check_certificate: signer check passed\n"));
+    return 1;
+  }
+
+  /* automatic check from user's database */
+  if (SslCertFile && check_certificate_by_digest (data->cert))
+  {
+    dprint (1, (debugfile, "ssl_check_certificate: digest check passed\n"));
+    return 1;
+  }
+
+  /* interactive check from user */
+  menu = mutt_new_menu ();
+  menu->max = 19;
+  menu->dialog = (char **) safe_calloc (1, menu->max * sizeof (char *));
+  for (i = 0; i < menu->max; i++)
+    menu->dialog[i] = (char *) safe_calloc (1, SHORT_STRING * sizeof (char));
+
+  row = 0;
+  strfcpy (menu->dialog[row], _("This certificate belongs to:"), SHORT_STRING);
+  row++;
+  name = X509_NAME_oneline (X509_get_subject_name (data->cert),
+                           buf, sizeof (buf));
+  for (i = 0; i < 5; i++)
+  {
+    c = x509_get_part (name, part[i]);
+    snprintf (menu->dialog[row++], SHORT_STRING, "   %s", c);
+  }
+
+  row++;
+  strfcpy (menu->dialog[row], _("This certificate was issued by:"), SHORT_STRING);
+  row++;
+  name = X509_NAME_oneline (X509_get_issuer_name (data->cert),
+                           buf, sizeof (buf));
+  for (i = 0; i < 5; i++)
+  {
+    c = x509_get_part (name, part[i]);
+    snprintf (menu->dialog[row++], SHORT_STRING, "   %s", c);
+  }
+
+  row++;
+  snprintf (menu->dialog[row++], SHORT_STRING, _("This certificate is valid"));
+  snprintf (menu->dialog[row++], SHORT_STRING, _("   from %s"), 
+      asn1time_to_string (X509_get_notBefore (data->cert)));
+  snprintf (menu->dialog[row++], SHORT_STRING, _("     to %s"), 
+      asn1time_to_string (X509_get_notAfter (data->cert)));
+
+  row++;
+  buf[0] = '\0';
+  x509_fingerprint (buf, sizeof (buf), data->cert);
+  snprintf (menu->dialog[row++], SHORT_STRING, _("Fingerprint: %s"), buf);
+
+  menu->title = _("SSL Certificate check");
+  if (SslCertFile)
+  {
+    menu->prompt = _("(r)eject, accept (o)nce, (a)ccept always");
+    menu->keys = _("roa");
+  }
+  else
+  {
+    menu->prompt = _("(r)eject, accept (o)nce");
+    menu->keys = _("ro");
+  }
+  
+  helpstr[0] = '\0';
+  mutt_make_help (buf, sizeof (buf), _("Exit  "), MENU_GENERIC, OP_EXIT);
+  strncat (helpstr, buf, sizeof (helpstr));
+  mutt_make_help (buf, sizeof (buf), _("Help"), MENU_GENERIC, OP_HELP);
+  strncat (helpstr, buf, sizeof (helpstr));
+  menu->help = helpstr;
+
+  done = 0;
+  set_option(OPTUNBUFFEREDINPUT);
+  while (!done)
+  {
+    switch (mutt_menuLoop (menu))
+    {
+      case -1:                 /* abort */
+      case OP_MAX + 1:         /* reject */
+      case OP_EXIT:
+        done = 1;
+        break;
+      case OP_MAX + 3:         /* accept always */
+        done = 0;
+        if ((fp = fopen (SslCertFile, "a")))
+       {
+         if (PEM_write_X509 (fp, data->cert))
+           done = 1;
+         fclose (fp);
+       }
+       if (!done)
+        {
+         mutt_error (_("Warning: Couldn't save certificate"));
+         mutt_sleep (2);
+       }
+       else
+        {
+         mutt_message (_("Certificate saved"));
+         mutt_sleep (0);
+       }
+        /* fall through */
+      case OP_MAX + 2:         /* accept once */
+        done = 2;
+        break;
+    }
+  }
+  unset_option(OPTUNBUFFEREDINPUT);
+  mutt_menuDestroy (&menu);
+  return (done == 2);
+}
diff --git a/mutt_ssl.h b/mutt_ssl.h
new file mode 100644 (file)
index 0000000..37e0af2
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 1999-2000 Tommi Komulainen <Tommi.Komulainen@iki.fi>
+ * 
+ *     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.
+ */ 
+
+#ifndef _MUTT_SSL_H_
+#define _MUTT_SSL_H_ 1
+
+#include "mutt_socket.h"
+
+int mutt_ssl_starttls (CONNECTION* conn);
+
+extern int ssl_socket_setup (CONNECTION *conn);
+
+#endif /* _MUTT_SSL_H_ */
diff --git a/mutt_ssl_nss.c b/mutt_ssl_nss.c
new file mode 100644 (file)
index 0000000..9549d99
--- /dev/null
@@ -0,0 +1,378 @@
+/* Copyright (C) 2000 Michael R. Elkins <me@mutt.org>
+ *
+ *     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.
+ */
+
+#include <prinit.h>
+#include <pk11func.h>
+#include <prtypes.h>
+#include <prio.h>
+#include <prnetdb.h>
+#include "nss.h"
+#include "ssl.h"
+#include "sechash.h"
+#include "cert.h"
+#include "cdbhdl.h"
+#include "mutt.h"
+#include "mutt_socket.h"
+#include "mutt_curses.h"
+
+static int MuttNssInitialized = 0;
+
+/* internal data struct we use with the CONNECTION.  this is where NSS-specific
+ * data gets stuffed so that the main mutt_socket.h doesn't have to be
+ * modified.
+ */
+typedef struct
+{
+  PRFileDesc *fd;
+  CERTCertDBHandle *db;
+}
+mutt_nss_t;
+
+/* nss callback to grab the user's password. */
+static char *
+mutt_nss_password_func (PK11SlotInfo * slot, PRBool retry, void *arg)
+{
+  return NULL;
+}
+
+static int
+mutt_nss_error (const char *call)
+{
+  mutt_error (_("%s failed (error %d)"), call, PR_GetError ());
+  return -1;
+}
+
+/* initialize the NSS library for use.  must be called prior to any other
+ * functions in this module.
+ */
+static int
+mutt_nss_init (void)
+{
+  if (!MuttNssInitialized)
+  {
+    PK11_SetPasswordFunc (mutt_nss_password_func);
+    if (NSS_Init (SslCertFile) == SECFailure)
+      return mutt_nss_error ("NSS_Init");
+    
+    /* always use strong crypto. */
+    if (NSS_SetDomesticPolicy () == SECFailure)
+      return mutt_nss_error ("NSS_SetDomesticPolicy");
+    
+    /* intialize the session cache */
+    SSL_ClearSessionCache ();
+    
+    MuttNssInitialized = 1;
+  }
+  return 0;
+}
+
+/* convert from int64 to a readable string and print on the screen */
+static void
+mutt_nss_pretty_time (int64 usecs)
+{
+  struct tm t;
+  PRExplodedTime ex;
+  char timebuf[128];
+  
+  PR_ExplodeTime (usecs, PR_LocalTimeParameters, &ex);
+  
+  t.tm_sec = ex.tm_sec;
+  t.tm_min = ex.tm_min;
+  t.tm_hour = ex.tm_hour;
+  t.tm_mday = ex.tm_mday;
+  t.tm_mon = ex.tm_month;
+  t.tm_year = ex.tm_year - 1900;       /* PRExplodedTime uses the absolute year */
+  t.tm_wday = ex.tm_wday;
+  t.tm_yday = ex.tm_yday;
+  
+  strfcpy (timebuf, asctime (&t), sizeof (timebuf));
+  timebuf[strlen (timebuf) - 1] = 0;
+  
+  addstr (timebuf);
+}
+
+/* this function is called by the default hook CERT_AuthCertificate when it
+ * can't verify a cert based upon the contents of the user's certificate
+ * database.  we are given the option to override the decision and accept
+ * it anyway.
+ */
+static SECStatus
+mutt_nss_bad_cert (void *arg, PRFileDesc * fd)
+{
+  PRErrorCode err;
+  CERTCertificate *cert, *issuer;
+  unsigned char hash[16];
+  int i;
+  CERTCertTrust trust;
+  int64 not_before, not_after;
+  event_t ch;
+  char status[256];
+
+  /* first lets see why this certificate failed.  we only want to override
+   * in the case where the cert was not found.
+   */
+  err = PR_GetError ();
+  mutt_error (_("SSL_AuthCertificate failed (error %d)"), err);
+
+  /* fetch the cert in question */
+  cert = SSL_PeerCertificate (fd);
+
+  move (LINES - 8, 0);
+  clrtoeol ();
+  move (LINES - 7, 0);
+  clrtoeol ();
+  addstr ("Issuer:      ");
+  addstr (CERT_NameToAscii (&cert->issuer));
+  move (LINES - 6, 0);
+  clrtoeol ();
+  addstr ("Subject:     ");
+  addstr (CERT_NameToAscii (&cert->subject));
+
+  move (LINES - 5, 0);
+  clrtoeol ();
+  addstr ("Valid:       ");
+  CERT_GetCertTimes (cert, &not_before, &not_after);
+  mutt_nss_pretty_time (not_before);
+  addstr (" to ");
+  mutt_nss_pretty_time (not_after);
+
+  move (LINES - 4, 0);
+  clrtoeol ();
+  addstr ("Fingerprint: ");
+
+  /* calculate the MD5 hash of the raw certificate */
+  HASH_HashBuf (HASH_AlgMD5, hash, cert->derCert.data, cert->derCert.len);
+  for (i = 0; i < 16; i++)
+  {
+    printw ("%0x", hash[i]);
+    if (i != 15)
+      addch (':');
+  }
+  
+  mvaddstr (LINES - 3, 0, "Signature:   ");
+  clrtoeol ();
+
+  /* find the cert which signed this cert */
+  issuer = CERT_FindCertByName ((CERTCertDBHandle *) arg, &cert->derIssuer);
+
+  /* verify the sig (only) if we have the issuer cert handy */
+  if (issuer &&
+      CERT_VerifySignedData (&cert->signatureWrap, issuer, PR_Now (), NULL)
+      == SECSuccess)
+    addstr ("GOOD");
+  else
+    addstr ("BAD");
+
+  move (LINES - 2, 0);
+  SETCOLOR (MT_COLOR_STATUS);
+  memset (status, ' ', sizeof (status) - 1);
+  if (COLS < sizeof (status))
+    status[COLS - 1] = 0;
+  else
+    status[sizeof (status) - 1] = 0;
+  memcpy (status, "--- SSL Certificate Check",
+         sizeof ("--- SSL Certificate Check") - 1);
+  addstr (status);
+  clrtoeol ();
+  SETCOLOR (MT_COLOR_NORMAL);
+
+  for (;;)
+  {
+    mvaddstr (LINES - 1, 0, "(r)eject, accept (o)nce, (a)lways accept?");
+    clrtoeol ();
+    ch = mutt_getch ();
+    if (ch.ch == -1)
+    {
+      i = SECFailure;
+      break;
+    }
+    else if (ascii_tolower (ch.ch) == 'r')
+    {
+      i = SECFailure;
+      break;
+    }
+    else if (ascii_tolower (ch.ch) == 'o')
+    {
+      i = SECSuccess;
+      break;
+    }
+    else if (ascii_tolower (ch.ch) == 'a')
+    {
+      /* push this certificate onto the user's certificate store so it
+       * automatically becomes valid next time we see it
+       */
+      
+      /* set this certificate as a valid peer for SSL-auth ONLY. */
+      CERT_DecodeTrustString (&trust, "P,,");
+      
+      CERT_AddTempCertToPerm (cert, NULL, &trust);
+      i = SECSuccess;
+      break;
+    }
+    BEEP ();
+  }
+  
+  /* SSL_PeerCertificate() returns a copy with an updated ref count, so
+   * we have to destroy our copy here.
+   */
+  CERT_DestroyCertificate (cert);
+  
+  return i;
+}
+
+static int
+mutt_nss_socket_open (CONNECTION * con)
+{
+  mutt_nss_t *sockdata;
+  PRNetAddr addr;
+  struct hostent *he;
+
+  memset (&addr, 0, sizeof (addr));
+  addr.inet.family = AF_INET;
+  addr.inet.port = PR_htons (con->account.port);
+  he = gethostbyname (con->account.host);
+  if (!he)
+  {
+    mutt_error (_("Unable to find ip for host %s"), con->account.host);
+    return -1;
+  }
+  addr.inet.ip = *((int *) he->h_addr_list[0]);
+
+  sockdata = safe_calloc (1, sizeof (mutt_nss_t));
+
+  do
+  {
+    sockdata->fd = PR_NewTCPSocket ();
+    if (sockdata->fd == NULL)
+    {
+      mutt_error (_("PR_NewTCPSocket failed."));
+      break;
+    }
+    /* make this a SSL socket */
+    sockdata->fd = SSL_ImportFD (NULL, sockdata->fd);
+    
+    /* set SSL version options based upon user's preferences */
+    if (!option (OPTTLSV1))
+      SSL_OptionSet (sockdata->fd, SSL_ENABLE_TLS, PR_FALSE);
+    
+    if (!option (OPTSSLV2))
+      SSL_OptionSet (sockdata->fd, SSL_ENABLE_SSL2, PR_FALSE);
+
+    if (!option (OPTSSLV3))
+      SSL_OptionSet (sockdata->fd, SSL_ENABLE_SSL3, PR_FALSE);
+    
+    /* set the host we were attempting to connect to in order to verify
+     * the name in the certificate we get back.
+     */
+    if (SSL_SetURL (sockdata->fd, con->account.host))
+    {
+      mutt_nss_error ("SSL_SetURL");
+      break;
+    }
+
+    /* we don't need no stinking pin.  we don't authenticate ourself
+     * via SSL.
+     */
+    SSL_SetPKCS11PinArg (sockdata->fd, 0);
+    
+    sockdata->db = CERT_GetDefaultCertDB ();
+    
+    /* use the default supplied hook.  it takes an argument to our
+     * certificate database.  the manual lies, you can't really specify
+     * NULL for the callback to get the default!
+     */
+    SSL_AuthCertificateHook (sockdata->fd, SSL_AuthCertificate,
+                            sockdata->db);
+    /* set the callback to be used when SSL_AuthCertificate() fails.  this
+     * allows us to override and insert the cert back into the db
+     */
+    SSL_BadCertHook (sockdata->fd, mutt_nss_bad_cert, sockdata->db);
+    
+    if (PR_Connect (sockdata->fd, &addr, PR_INTERVAL_NO_TIMEOUT) ==
+       PR_FAILURE)
+    {
+      mutt_error (_("Unable to connect to host %s"), con->account.host);
+      break;
+    }
+    
+    /* store the extra info in the CONNECTION struct for later use. */
+    con->sockdata = sockdata;
+    
+    /* HACK.  some of the higher level calls in mutt_socket.c depend on this
+     * being >0 when we are in the connected state.  we just set this to
+     * an arbitrary value to avoid hitting that bug, since we neve have the
+     * real fd.
+     */
+    con->fd = 42;
+    
+    /* success */
+    return 0;
+  }
+  while (0);
+  
+  /* we get here when we had an oops.  clean up the mess. */
+
+  if (sockdata)
+  {
+    if (sockdata->fd)
+      PR_Close (sockdata->fd);
+    if (sockdata->db)
+      CERT_ClosePermCertDB (sockdata->db);
+    FREE (&sockdata);
+  }
+  return -1;
+}
+
+static int
+mutt_nss_socket_close (CONNECTION * con)
+{
+  mutt_nss_t *sockdata = (mutt_nss_t *) con->sockdata;
+
+  if (PR_Close (sockdata->fd) == PR_FAILURE)
+    return -1;
+
+  if (sockdata->db)
+    CERT_ClosePermCertDB (sockdata->db);
+  /* free up the memory we used for this connection specific to NSS. */
+  FREE (&con->sockdata);
+  return 0;
+}
+
+static int
+mutt_nss_socket_read (CONNECTION* conn, char* buf, size_t len)
+{
+  return PR_Read (((mutt_nss_t*) conn->sockdata)->fd, buf, len);
+}
+
+static int
+mutt_nss_socket_write (CONNECTION * con, const char *buf, size_t count)
+{
+  return PR_Write (((mutt_nss_t *) con->sockdata)->fd, buf, count);
+}
+
+/* initialize a new connection for use with NSS */
+int
+mutt_nss_socket_setup (CONNECTION * con)
+{
+  if (mutt_nss_init ())
+    return -1;
+  con->open = mutt_nss_socket_open;
+  con->read = mutt_nss_socket_read;
+  con->write = mutt_nss_socket_write;
+  con->close = mutt_nss_socket_close;
+  return 0;
+}
diff --git a/mutt_tunnel.c b/mutt_tunnel.c
new file mode 100644 (file)
index 0000000..01e1d72
--- /dev/null
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2000 Manoj Kasichainula <manoj@io.com>
+ * Copyright (C) 2001 Brendan Cully <brendan@kublai.com>
+ *
+ *     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.
+ */
+
+#include "mutt.h"
+#include "mutt_socket.h"
+#include "mutt_tunnel.h"
+
+#include <netinet/in.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/wait.h>
+#include <fcntl.h>
+#include <errno.h>
+
+/* -- data types -- */
+typedef struct
+{
+  pid_t pid;
+  int readfd;
+  int writefd;
+} TUNNEL_DATA;
+
+/* forward declarations */
+static int tunnel_socket_open (CONNECTION*);
+static int tunnel_socket_close (CONNECTION*);
+static int tunnel_socket_read (CONNECTION* conn, char* buf, size_t len);
+static int tunnel_socket_write (CONNECTION* conn, const char* buf, size_t len);
+
+/* -- public functions -- */
+int mutt_tunnel_socket_setup (CONNECTION *conn)
+{
+  conn->open = tunnel_socket_open;
+  conn->close = tunnel_socket_close;
+  conn->read = tunnel_socket_read;
+  conn->write = tunnel_socket_write;
+
+  return 0;
+}
+
+static int tunnel_socket_open (CONNECTION *conn)
+{
+  TUNNEL_DATA* tunnel;
+  int pid;
+  int rc;
+  int pin[2], pout[2];
+
+  tunnel = (TUNNEL_DATA*) safe_malloc (sizeof (TUNNEL_DATA));
+  conn->sockdata = tunnel;
+
+  mutt_message (_("Connecting with \"%s\"..."), Tunnel);
+
+  if ((rc = pipe (pin)) == -1)
+  {
+    mutt_perror ("pipe");
+    return -1;
+  }
+  if ((rc = pipe (pout)) == -1)
+  {
+    mutt_perror ("pipe");
+    return -1;
+  }
+
+  mutt_block_signals_system ();
+  if ((pid = fork ()) == 0)
+  {
+    mutt_unblock_signals_system (0);
+    if (dup2 (pout[0], STDIN_FILENO) < 0 || dup2 (pin[1], STDOUT_FILENO) < 0)
+      _exit (127);
+    close (pin[0]);
+    close (pin[1]);
+    close (pout[0]);
+    close (pout[1]);
+    close (STDERR_FILENO);
+
+    /* Don't let the subprocess think it can use the controlling tty */
+    setsid ();
+
+    execl (EXECSHELL, "sh", "-c", Tunnel, NULL);
+    _exit (127);
+  }
+  mutt_unblock_signals_system (1);
+
+  if (pid == -1)
+  {
+    close (pin[0]);
+    close (pin[1]);
+    close (pout[0]);
+    close (pout[1]);
+    mutt_perror ("fork");
+    return -1;
+  }
+  if (close (pin[1]) < 0 || close (pout[0]) < 0)
+    mutt_perror ("close");
+
+  fcntl (pin[0], F_SETFD, FD_CLOEXEC);
+  fcntl (pout[1], F_SETFD, FD_CLOEXEC);
+
+  tunnel->readfd = pin[0];
+  tunnel->writefd = pout[1];
+  tunnel->pid = pid;
+
+  conn->fd = 42; /* stupid hack */
+
+  return 0;
+}
+
+static int tunnel_socket_close (CONNECTION* conn)
+{
+  TUNNEL_DATA* tunnel = (TUNNEL_DATA*) conn->sockdata;
+
+  close (tunnel->readfd);
+  close (tunnel->writefd);
+  waitpid (tunnel->pid, NULL, 0);
+  FREE (&conn->sockdata);
+
+  return 0;
+}
+
+static int tunnel_socket_read (CONNECTION* conn, char* buf, size_t len)
+{
+  TUNNEL_DATA* tunnel = (TUNNEL_DATA*) conn->sockdata;
+  int rc;
+
+  rc = read (tunnel->readfd, buf, len);
+  if (rc == -1)
+  {
+    mutt_error (_("Tunnel error talking to %s: %s"), conn->account.host,
+               strerror (errno));
+    mutt_sleep (1);
+  }
+
+  return rc;
+}
+
+static int tunnel_socket_write (CONNECTION* conn, const char* buf, size_t len)
+{
+  TUNNEL_DATA* tunnel = (TUNNEL_DATA*) conn->sockdata;
+  int rc;
+
+  rc = write (tunnel->writefd, buf, len);
+  if (rc == -1)
+  {
+    mutt_error (_("Tunnel error talking to %s: %s"), conn->account.host,
+               strerror (errno));
+    mutt_sleep (1);
+  }
+
+  return rc;
+}
diff --git a/mutt_tunnel.h b/mutt_tunnel.h
new file mode 100644 (file)
index 0000000..b6e20af
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ *     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.
+ */
+
+#ifndef _MUTT_TUNNEL_H_
+#define _MUTT_TUNNEL_H_ 1
+
+#include "mutt_socket.h"
+
+int mutt_tunnel_socket_setup (CONNECTION *);
+
+#endif /* _MUTT_TUNNEL_H_ */
diff --git a/muttbug b/muttbug
new file mode 100755 (executable)
index 0000000..e94d8cd
--- /dev/null
+++ b/muttbug
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+exec flea "$@"
diff --git a/muttbug.sh.in b/muttbug.sh.in
new file mode 100644 (file)
index 0000000..df65431
--- /dev/null
@@ -0,0 +1,336 @@
+#!/bin/sh
+
+#
+#     File a bug against the Mutt mail user agent.
+#
+
+# 
+#     $Id: muttbug.sh.in,v 3.6 2003/09/20 06:24:10 roessler Exp $
+#
+
+#
+#     Copyright (c) 2000 Thomas Roessler <roessler@guug.de>
+#
+#
+#     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.
+#
+
+SUBMIT="submit@bugs.guug.de"
+DEBIAN_SUBMIT="submit@bugs.debian.org"
+
+prefix=@prefix@
+
+DEBUGGER=@DEBUGGER@
+SENDMAIL=@SENDMAIL@
+sysconfdir=@sysconfdir@
+pkgdatadir=@pkgdatadir@
+
+include_file ()
+{
+       echo
+       echo "--- Begin $1"
+       sed -e 's/^-/- -/' $1 | egrep -v '^[    ]*(#|$)'
+       echo "--- End $1"
+       echo
+}
+
+debug_gdb ()
+{
+       cat << EOF > $SCRATCH/gdb.rc
+bt
+list
+quit
+EOF
+       $DEBUGGER -n -x $SCRATCH/gdb.rc -c $CORE mutt
+}
+
+debug_dbx ()
+{
+       cat << EOF > $SCRATCH/dbx.rc
+where
+list
+quit
+EOF
+       $DEBUGGER -s $SCRATCH/dbx.rc mutt $CORE
+}
+
+debug_sdb ()
+{
+       cat << EOF > $SCRATCH/sdb.rc
+t
+w
+q
+EOF
+       $DEBUGGER mutt $CORE < $SCRATCH/sdb.rc
+}
+
+case `echo -n` in
+"") n=-n; c=   ;;
+ *) n=; c='\c' ;;
+esac
+
+exec > /dev/tty
+exec < /dev/tty
+
+SCRATCH=${TMPDIR-/tmp}/`basename $0`.`hostname`.$$
+
+mkdir ${SCRATCH} || \
+{ 
+       echo "`basename $0`: Can't create temporary directory." >& 2 ; 
+       exit 1 ; 
+}
+
+trap "rm -r -f ${SCRATCH} ; trap '' 0 ; exit" 0 1 2
+
+TEMPLATE=${SCRATCH}/template.txt
+
+if test -z "$EMAIL" ; then
+       EMAIL="`mutt -Q from 2> /dev/null | sed -e 's/^from=.\(.*\).$/\1/'`"
+fi
+
+echo "Please enter your e-mail address [$EMAIL]:"
+echo $n "> $c"
+read EMAILTMP
+
+if test -n "$EMAILTMP" ; then
+       EMAIL="$EMAILTMP"
+fi
+
+echo "Please enter a one-line description of the problem you experience:"
+echo $n "> $c"
+read SUBJECT
+
+cat <<EOF  
+What should the severity for this bug report be?
+
+       0) Feature request, or maybe a bug which is very difficult to
+       fix due to major design considerations.
+
+       1) The package fails to perform correctly in some conditions,
+       or on some systems, or fails to comply with current policy
+       documents. Most bugs are in this category.
+
+       2) This bug makes this version of the package unsuitable for
+       a stable release.
+
+       3) Dangerous bug. Makes the package in question unusable by
+       anyone or mostly so, or causes data loss, or introduces a
+       security hole allowing access to the accounts of users who
+       use the package.
+
+       4) Critical bug. Makes unrelated software on the system (or
+       the whole system) break, or causes serious data loss, or
+       introduces a security hole on systems where you install the
+       package.
+
+EOF
+echo $n "Severity? [01234] $c"
+read severity
+case "$severity" in
+0|[Ww]) severity=wishlist  ;;
+2|[Ii]) severity=important ;;
+3|[Gg]) severity=grave     ;;
+4|[Cc]) severity=critical  ;;
+     *) severity=normal    ;;
+esac
+
+if test -x $DEBUGGER ; then
+       test -f core && CORE=core
+       echo "If mutt has crashed, it may have saved some program state in"
+       echo "a file named core.  We can include this information with the bug"
+       echo "report if you wish so."
+       echo "Do you want to include information gathered from a core file?"
+       echo "If yes, please enter the path - otherwise just say no: [$CORE]"
+       echo $n "> $c"
+       read _CORE
+       test "$_CORE" && CORE="$_CORE"
+fi
+
+echo $n "Do you want to include your personal mutt configuration files? [Y|n] $c"
+read personal
+case "$personal" in
+[nN]*)  personal=no  ;;
+    *)  personal=yes ;;
+esac
+
+echo $n "Do you want to include your system's global mutt configuration file? [Y|n] $c"
+read global
+case "$global" in
+[nN]*)  global=no  ;;
+    *) global=yes ;;
+esac
+
+if test -f /etc/debian_version ; then
+       DEBIAN=yes
+       echo $n "Checking whether mutt has been installed as a package... $c"
+       DEBIANVERSION="`dpkg -l mutt | grep '^[ih]' | awk '{print $3}'`" 2> /dev/null
+       if test "$DEBIANVERSION" ; then
+               DPKG=yes
+       else
+               DPKG=no
+               unset DEBIANVERSION
+       fi
+       echo "$DPKG"
+       echo $n "File this bug with Debian? [Y|n] $c"
+       read DPKG
+       case "$DPKG" in
+       [nN])   DPKG=no ;;
+       *)      DPKG=yes ;;
+       esac
+else
+       DEBIAN=no
+       DPKG=no
+fi
+
+if rpm -q mutt > /dev/null 2> /dev/null ; then
+       echo "Mutt seems to come from an RPM package."
+       RPMVERSION="`rpm -q mutt`"
+       RPMPACKAGER="`rpm -q -i mutt | sed -n -e 's/^Packager *: *//p'`"
+fi
+
+MUTTVERSION="`mutt -v | awk '{print $2; exit; }'`"
+test "$DPKG" = "yes" && SUBMIT="$SUBMIT, $DEBIAN_SUBMIT"
+
+exec > ${TEMPLATE}
+
+test "$EMAIL"        && echo "From: $EMAIL"
+test "$REPLYTO"      && echo "Reply-To: $REPLYTO"
+test "$ORGANIZATION" && echo "Organization: $ORGANIZATION"
+
+echo "Subject: mutt-$MUTTVERSION: $SUBJECT"
+echo "To: $SUBMIT"
+test "$EMAIL"       && echo "Bcc: ${EMAIL}"
+echo
+echo "Package: mutt"
+echo "Version: ${DEBIANVERSION-${RPMVERSION-$MUTTVERSION}}"
+echo "Severity: $severity"
+echo 
+echo "-- Please type your report below this line"
+echo
+echo
+echo
+
+if test "$DEBIAN" = "yes" ; then
+       echo "Obtaining Debian-specific information..." > /dev/tty
+       bug -p -s dummy mutt < /dev/null 2> /dev/null |        \
+               sed -n -e "/^-- System Information/,/^---/p" | \
+               grep -v '^---'
+else
+       echo "-- System Information"
+       echo "System Version: `uname -a`"
+       test -z "$RPMPACKAGER" || echo "RPM Packager: $RPMPACKAGER";
+       test -f /etc/redhat-release && echo "RedHat Release: `cat /etc/redhat-release`"
+       test -f /etc/SuSE-release && echo "SuSE Release: `sed 1q /etc/SuSE-release`"
+       # Please provide more of these if you have any.
+fi
+
+echo 
+echo "-- Build environment information"
+echo
+echo "(Note: This is the build environment installed on the system"
+echo "muttbug is run on.  Information may or may not match the environment"
+echo "used to build mutt.)"
+echo
+echo "- gcc version information"
+echo "@CC@"
+@CC@ -v 2>&1
+echo
+echo "- CFLAGS"
+echo @CFLAGS@
+
+
+echo
+echo "-- Mutt Version Information"
+echo
+mutt -v
+
+if test "$CORE" && test -f "$CORE" ; then
+       echo 
+       echo "-- Core Dump Analysis Output"
+       echo
+
+       case "$DEBUGGER" in
+               *sdb) debug_sdb $CORE ;;
+               *dbx) debug_dbx $CORE ;;
+               *gdb) debug_gdb $CORE ;;
+       esac
+       
+       echo
+fi
+
+if test "$personal" = "yes" ; then
+       CANDIDATES=".muttrc-${MUTTVERSION} .muttrc .mutt/muttrc-${MUTTVERSION} .mutt/muttrc"
+       MATCHED="none"
+       for f in $CANDIDATES; do
+               if test -f "${HOME}/$f" ; then
+                       MATCHED="${HOME}/$f"
+                       break
+               fi
+       done
+       
+       if test "$MATCHED" = "none" ; then
+               echo "Warning: Can't find your personal .muttrc." >&2
+       else
+               include_file $MATCHED
+       fi
+fi
+
+
+if test "$global" = "yes" ; then
+       CANDIDATES="Muttrc-${MUTTVERSION} Muttrc"
+       DIRECTORIES="$sysconfdir $pkgdatadir"
+       MATCHED="none"
+       for d in $DIRECTORIES ; do
+               for f in $CANDIDATES; do
+                       if test -f $d/$f ; then
+                               MATCHED="$d/$f"
+                               break
+                       fi
+               done
+               test "$MATCHED" = "none" || break
+       done
+       
+       if test "$MATCHED" = "none" ; then
+               echo "Warning: Can't find global Muttrc." >&2
+       else
+               include_file $MATCHED
+       fi
+fi
+
+exec > /dev/tty
+
+cp $TEMPLATE $SCRATCH/mutt-bug.txt
+
+input="e"
+while : ; do
+       if test "$input" = "e" ; then
+               ${VISUAL-${EDITOR-vi}} $SCRATCH/mutt-bug.txt
+               if cmp $SCRATCH/mutt-bug.txt ${TEMPLATE} > /dev/null ; then
+                       echo "Warning: Bug report was not modified!"
+               fi
+       fi
+       
+       echo $n "Submit, Edit, View, Quit? [S|e|v|q] $c"
+       read _input
+       input="`echo $_input | tr EVSQ evsq`"
+       case $input in
+       e*)     ;;
+       v*)     ${PAGER-more} $SCRATCH/mutt-bug.txt ;;
+       s*|"")  $SENDMAIL -t < $SCRATCH/mutt-bug.txt ; exit ;;
+       q*)     exit
+       esac
+done
+
diff --git a/muttlib.c b/muttlib.c
new file mode 100644 (file)
index 0000000..038010d
--- /dev/null
+++ b/muttlib.c
@@ -0,0 +1,1443 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "mime.h"
+#include "mailbox.h"
+#include "mx.h"
+#include "url.h"
+
+#include "reldate.h"
+
+#ifdef USE_IMAP
+#include "imap.h"
+#endif
+
+#include "mutt_crypt.h"
+
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <time.h>
+#include <sys/types.h>
+#include <utime.h>
+
+BODY *mutt_new_body (void)
+{
+  BODY *p = (BODY *) safe_calloc (1, sizeof (BODY));
+    
+  p->disposition = DISPATTACH;
+  p->use_disp = 1;
+  return (p);
+}
+
+
+/* Modified by blong to accept a "suggestion" for file name.  If
+ * that file exists, then construct one with unique name but 
+ * keep any extension.  This might fail, I guess.
+ * Renamed to mutt_adv_mktemp so I only have to change where it's
+ * called, and not all possible cases.
+ */
+void mutt_adv_mktemp (char *s, size_t l)
+{
+  char buf[_POSIX_PATH_MAX];
+  char tmp[_POSIX_PATH_MAX];
+  char *period;
+  size_t sl;
+  struct stat sb;
+  
+  strfcpy (buf, NONULL (Tempdir), sizeof (buf));
+  mutt_expand_path (buf, sizeof (buf));
+  if (s[0] == '\0')
+  {
+    snprintf (s, l, "%s/muttXXXXXX", buf);
+    mktemp (s);
+  }
+  else
+  {
+    strfcpy (tmp, s, sizeof (tmp));
+    mutt_sanitize_filename (tmp, 1);
+    snprintf (s, l, "%s/%s", buf, tmp);
+    if (lstat (s, &sb) == -1 && errno == ENOENT)
+      return;
+    if ((period = strrchr (tmp, '.')) != NULL)
+      *period = 0;
+    snprintf (s, l, "%s/%s.XXXXXX", buf, tmp);
+    mktemp (s);
+    if (period != NULL)
+    {
+      *period = '.';
+      sl = mutt_strlen(s);
+      strfcpy(s + sl, period, l - sl);
+    }
+  }
+}
+
+/* create a send-mode duplicate from a receive-mode body */
+
+int mutt_copy_body (FILE *fp, BODY **tgt, BODY *src)
+{
+  char tmp[_POSIX_PATH_MAX];
+  BODY *b;
+
+  PARAMETER *par, **ppar;
+  
+  short use_disp;
+
+  if (src->filename)
+  {
+    use_disp = 1;
+    strfcpy (tmp, src->filename, sizeof (tmp));
+  }
+  else
+  {
+    use_disp = 0;
+    tmp[0] = '\0';
+  }
+
+  mutt_adv_mktemp (tmp, sizeof (tmp));
+  if (mutt_save_attachment (fp, src, tmp, 0, NULL) == -1)
+    return -1;
+      
+  *tgt = mutt_new_body ();
+  b = *tgt;
+
+  memcpy (b, src, sizeof (BODY));
+  b->parts = NULL;
+  b->next  = NULL;
+
+  b->filename = safe_strdup (tmp);
+  b->use_disp = use_disp;
+  b->unlink = 1;
+
+  if (mutt_is_text_part (b))
+    b->noconv = 1;
+
+  b->xtype = safe_strdup (b->xtype);
+  b->subtype = safe_strdup (b->subtype);
+  b->form_name = safe_strdup (b->form_name);
+  b->filename = safe_strdup (b->filename);
+  b->d_filename = safe_strdup (b->d_filename);
+  b->description = safe_strdup (b->description);
+
+  /* 
+   * we don't seem to need the HEADER structure currently.
+   * XXX - this may change in the future
+   */
+
+  if (b->hdr) b->hdr = NULL;
+  
+  /* copy parameters */
+  for (par = b->parameter, ppar = &b->parameter; par; ppar = &(*ppar)->next, par = par->next)
+  {
+    *ppar = mutt_new_parameter ();
+    (*ppar)->attribute = safe_strdup (par->attribute);
+    (*ppar)->value = safe_strdup (par->value);
+  }
+
+  mutt_stamp_attachment (b);
+  
+  return 0;
+}
+
+
+
+void mutt_free_body (BODY **p)
+{
+  BODY *a = *p, *b;
+
+  while (a)
+  {
+    b = a;
+    a = a->next; 
+
+    if (b->parameter)
+      mutt_free_parameter (&b->parameter);
+    if (b->unlink && b->filename)
+    {
+      dprint (1, (debugfile, "mutt_free_body: Unlinking %s.\n", b->filename));
+      unlink (b->filename);
+    }
+    else if (b->filename) 
+      dprint (1, (debugfile, "mutt_free_body: Not unlinking %s.\n", b->filename));
+
+    FREE (&b->filename);
+    FREE (&b->content);
+    FREE (&b->xtype);
+    FREE (&b->subtype);
+    FREE (&b->description);
+    FREE (&b->form_name);
+
+    if (b->hdr)
+    {
+      /* Don't free twice (b->hdr->content = b->parts) */
+      b->hdr->content = NULL;
+      mutt_free_header(&b->hdr);
+    }
+
+    if (b->parts)
+      mutt_free_body (&b->parts);
+
+    FREE (&b);
+  }
+
+  *p = 0;
+}
+
+void mutt_free_parameter (PARAMETER **p)
+{
+  PARAMETER *t = *p;
+  PARAMETER *o;
+
+  while (t)
+  {
+    FREE (&t->attribute);
+    FREE (&t->value);
+    o = t;
+    t = t->next;
+    FREE (&o);
+  }
+  *p = 0;
+}
+
+LIST *mutt_add_list (LIST *head, const char *data)
+{
+  LIST *tmp;
+
+  for (tmp = head; tmp && tmp->next; tmp = tmp->next)
+    ;
+  if (tmp)
+  {
+    tmp->next = safe_malloc (sizeof (LIST));
+    tmp = tmp->next;
+  }
+  else
+    head = tmp = safe_malloc (sizeof (LIST));
+
+  tmp->data = safe_strdup (data);
+  tmp->next = NULL;
+  return head;
+}
+
+void mutt_free_list (LIST **list)
+{
+  LIST *p;
+  
+  if (!list) return;
+  while (*list)
+  {
+    p = *list;
+    *list = (*list)->next;
+    FREE (&p->data);
+    FREE (&p);
+  }
+}
+
+HEADER *mutt_dup_header(HEADER *h)
+{
+  HEADER *hnew;
+
+  hnew = mutt_new_header();
+  memcpy(hnew, h, sizeof (HEADER));
+  return hnew;
+}
+
+void mutt_free_header (HEADER **h)
+{
+  if(!h || !*h) return;
+  mutt_free_envelope (&(*h)->env);
+  mutt_free_body (&(*h)->content);
+  FREE (&(*h)->maildir_flags);
+  FREE (&(*h)->tree);
+  FREE (&(*h)->path);
+#ifdef MIXMASTER
+  mutt_free_list (&(*h)->chain);
+#endif
+#if defined USE_POP || defined USE_IMAP || defined USE_NNTP
+  FREE (&(*h)->data);
+#endif
+  FREE (h);
+}
+
+/* returns true if the header contained in "s" is in list "t" */
+int mutt_matches_ignore (const char *s, LIST *t)
+{
+  for (; t; t = t->next)
+  {
+    if (!ascii_strncasecmp (s, t->data, mutt_strlen (t->data)) || *t->data == '*')
+      return 1;
+  }
+  return 0;
+}
+
+/* prepend the path part of *path to *link */
+void mutt_expand_link (char *newpath, const char *path, const char *link)
+{
+  const char *lb = NULL;
+  size_t len;
+
+  /* link is full path */
+  if (*link == '/')
+  {
+    strfcpy (newpath, link, _POSIX_PATH_MAX);
+    return;
+  }
+
+  if ((lb = strrchr (path, '/')) == NULL)
+  {
+    /* no path in link */
+    strfcpy (newpath, link, _POSIX_PATH_MAX);
+    return;
+  }
+
+  len = lb - path + 1;
+  memcpy (newpath, path, len);
+  strfcpy (newpath + len, link, _POSIX_PATH_MAX - len);
+}
+
+char *mutt_expand_path (char *s, size_t slen)
+{
+  return _mutt_expand_path (s, slen, 0);
+}
+
+char *_mutt_expand_path (char *s, size_t slen, int rx)
+{
+  char p[_POSIX_PATH_MAX] = "";
+  char q[_POSIX_PATH_MAX] = "";
+  char tmp[_POSIX_PATH_MAX];
+  char *t;
+
+  char *tail = ""; 
+
+  int recurse = 0;
+  
+  do 
+  {
+    recurse = 0;
+
+    switch (*s)
+    {
+      case '~':
+      {
+       if (*(s + 1) == '/' || *(s + 1) == 0)
+       {
+         strfcpy (p, NONULL(Homedir), sizeof (p));
+         tail = s + 1;
+       }
+       else
+       {
+         struct passwd *pw;
+         if ((t = strchr (s + 1, '/'))) 
+           *t = 0;
+
+         if ((pw = getpwnam (s + 1)))
+         {
+           strfcpy (p, pw->pw_dir, sizeof (p));
+           if (t)
+           {
+             *t = '/';
+             tail = t;
+           }
+           else
+             tail = "";
+         }
+         else
+         {
+           /* user not found! */
+           if (t)
+             *t = '/';
+           *p = '\0';
+           tail = s;
+         }
+       }
+      }
+      break;
+      
+      case '=':
+      case '+':    
+      {
+#ifdef USE_IMAP
+       /* if folder = {host} or imap[s]://host/: don't append slash */
+       if (mx_is_imap (NONULL (Maildir)) &&
+           (Maildir[strlen (Maildir) - 1] == '}' ||
+            Maildir[strlen (Maildir) - 1] == '/'))
+         strfcpy (p, NONULL (Maildir), sizeof (p));
+       else
+#endif
+         snprintf (p, sizeof (p), "%s/", NONULL (Maildir));
+       
+       tail = s + 1;
+      }
+      break;
+      
+      /* elm compatibility, @ expands alias to user name */
+    
+      case '@':
+      {
+       HEADER *h;
+       ADDRESS *alias;
+       
+       if ((alias = mutt_lookup_alias (s + 1)))
+       {
+         h = mutt_new_header();
+         h->env = mutt_new_envelope();
+         h->env->from = h->env->to = alias;
+         mutt_default_save (p, sizeof (p), h);
+         h->env->from = h->env->to = NULL;
+         mutt_free_header (&h);
+         /* Avoid infinite recursion if the resulting folder starts with '@' */
+         if (*p != '@')
+           recurse = 1;
+         
+         tail = "";
+       }
+      }
+      break;
+      
+      case '>':
+      {
+       strfcpy (p, NONULL(Inbox), sizeof (p));
+       tail = s + 1;
+      }
+      break;
+      
+      case '<':
+      {
+       strfcpy (p, NONULL(Outbox), sizeof (p));
+       tail = s + 1;
+      }
+      break;
+      
+      case '!':
+      {
+       if (*(s+1) == '!')
+       {
+         strfcpy (p, NONULL(LastFolder), sizeof (p));
+         tail = s + 2;
+       }
+       else 
+       {
+         strfcpy (p, NONULL(Spoolfile), sizeof (p));
+         tail = s + 1;
+       }
+      }
+      break;
+      
+      case '-':
+      {
+       strfcpy (p, NONULL(LastFolder), sizeof (p));
+       tail = s + 1;
+      }
+      break;
+      
+      default:
+      {
+       *p = '\0';
+       tail = s;
+      }
+    }
+
+    if (rx && *p && !recurse)
+    {
+      mutt_rx_sanitize_string (q, sizeof (q), p);
+      snprintf (tmp, sizeof (tmp), "%s%s", q, tail);
+    }
+    else
+      snprintf (tmp, sizeof (tmp), "%s%s", p, tail);
+    
+    strfcpy (s, tmp, slen);
+  }
+  while (recurse);
+
+#ifdef USE_IMAP
+  /* Rewrite IMAP path in canonical form - aids in string comparisons of
+   * folders. May possibly fail, in which case s should be the same. */
+  if (mx_is_imap (s))
+    imap_expand_path (s, slen);
+#endif
+
+  return (s);
+}
+
+/* Extract the real name from /etc/passwd's GECOS field.
+ * When set, honor the regular expression in GecosMask,
+ * otherwise assume that the GECOS field is a 
+ * comma-separated list.
+ * Replace "&" by a capitalized version of the user's login
+ * name.
+ */
+
+char *mutt_gecos_name (char *dest, size_t destlen, struct passwd *pw)
+{
+  regmatch_t pat_match[1];
+  size_t pwnl;
+  int idx;
+  char *p;
+  
+  if (!pw || !pw->pw_gecos) 
+    return NULL;
+
+  memset (dest, 0, destlen);
+  
+  if (GecosMask.rx)
+  {
+    if (regexec (GecosMask.rx, pw->pw_gecos, 1, pat_match, 0) == 0)
+      strfcpy (dest, pw->pw_gecos + pat_match[0].rm_so, 
+              MIN (pat_match[0].rm_eo - pat_match[0].rm_so + 1, destlen));
+  }
+  else if ((p = strchr (pw->pw_gecos, ',')))
+    strfcpy (dest, pw->pw_gecos, MIN (destlen, p - pw->pw_gecos + 1));
+  else
+    strfcpy (dest, pw->pw_gecos, destlen);
+
+  pwnl = strlen (pw->pw_name);
+
+  for (idx = 0; dest[idx]; idx++)
+  {
+    if (dest[idx] == '&')
+    {
+      memmove (&dest[idx + pwnl], &dest[idx + 1],
+              MAX(destlen - idx - pwnl - 1, 0));
+      memcpy (&dest[idx], pw->pw_name, MIN(destlen - idx - 1, pwnl));
+      dest[idx] = toupper ((unsigned char) dest[idx]);
+    }
+  }
+      
+  return dest;
+}
+  
+
+char *mutt_get_parameter (const char *s, PARAMETER *p)
+{
+  for (; p; p = p->next)
+    if (ascii_strcasecmp (s, p->attribute) == 0)
+      return (p->value);
+
+  return NULL;
+}
+
+void mutt_set_parameter (const char *attribute, const char *value, PARAMETER **p)
+{
+  PARAMETER *q;
+
+  if (!value)
+  {
+    mutt_delete_parameter (attribute, p);
+    return;
+  }
+  
+  for(q = *p; q; q = q->next)
+  {
+    if (ascii_strcasecmp (attribute, q->attribute) == 0)
+    {
+      mutt_str_replace (&q->value, value);
+      return;
+    }
+  }
+  
+  q = mutt_new_parameter();
+  q->attribute = safe_strdup(attribute);
+  q->value = safe_strdup(value);
+  q->next = *p;
+  *p = q;
+}
+
+void mutt_delete_parameter (const char *attribute, PARAMETER **p)
+{
+  PARAMETER *q;
+  
+  for (q = *p; q; p = &q->next, q = q->next)
+  {
+    if (ascii_strcasecmp (attribute, q->attribute) == 0)
+    {
+      *p = q->next;
+      q->next = NULL;
+      mutt_free_parameter (&q);
+      return;
+    }
+  }
+}
+
+/* returns 1 if Mutt can't display this type of data, 0 otherwise */
+int mutt_needs_mailcap (BODY *m)
+{
+  switch (m->type)
+  {
+    case TYPETEXT:
+
+      if (!ascii_strcasecmp ("plain", m->subtype) ||
+         !ascii_strcasecmp ("rfc822-headers", m->subtype) ||
+         !ascii_strcasecmp ("enriched", m->subtype))
+       return 0;
+      break;
+
+    case TYPEAPPLICATION:
+      if((WithCrypto & APPLICATION_PGP) && mutt_is_application_pgp(m))
+       return 0;
+      if((WithCrypto & APPLICATION_SMIME) && mutt_is_application_smime(m))
+       return 0;
+      break;
+
+    case TYPEMULTIPART:
+    case TYPEMESSAGE:
+      return 0;
+  }
+
+  return 1;
+}
+
+int mutt_is_text_part (BODY *b)
+{
+  int t = b->type;
+  char *s = b->subtype;
+  
+  if ((WithCrypto & APPLICATION_PGP) && mutt_is_application_pgp (b))
+    return 0;
+
+  if (t == TYPETEXT)
+    return 1;
+
+  if (t == TYPEMESSAGE)
+  {
+    if (!ascii_strcasecmp ("delivery-status", s))
+      return 1;
+  }
+
+  if ((WithCrypto & APPLICATION_PGP) && t == TYPEAPPLICATION)
+  {
+    if (!ascii_strcasecmp ("pgp-keys", s))
+      return 1;
+  }
+
+  return 0;
+}
+
+void mutt_free_envelope (ENVELOPE **p)
+{
+  if (!*p) return;
+  rfc822_free_address (&(*p)->return_path);
+  rfc822_free_address (&(*p)->to);
+  rfc822_free_address (&(*p)->cc);
+  rfc822_free_address (&(*p)->bcc);
+  rfc822_free_address (&(*p)->sender);
+  rfc822_free_address (&(*p)->from);
+  rfc822_free_address (&(*p)->reply_to);
+  rfc822_free_address (&(*p)->mail_followup_to);
+  FREE (&(*p)->subject);
+  FREE (&(*p)->message_id);
+  FREE (&(*p)->supersedes);
+  FREE (&(*p)->date);
+  FREE (&(*p)->organization);
+#ifdef USE_NNTP
+  FREE (&(*p)->newsgroups);
+  FREE (&(*p)->xref);
+  FREE (&(*p)->followup_to);
+  FREE (&(*p)->x_comment_to);
+#endif
+  mutt_free_list (&(*p)->references);
+  mutt_free_list (&(*p)->in_reply_to);
+  mutt_free_list (&(*p)->userhdrs);
+  FREE (p);
+}
+
+void _mutt_mktemp (char *s, const char *src, int line)
+{
+  snprintf (s, _POSIX_PATH_MAX, "%s/mutt-%s-%d-%d", NONULL (Tempdir), NONULL(Hostname), (int) getpid (), Counter++);
+  dprint (1, (debugfile, "%s:%d: mutt_mktemp returns \"%s\".\n", src, line, s));
+  unlink (s);
+}
+
+void mutt_free_alias (ALIAS **p)
+{
+  ALIAS *t;
+
+  while (*p)
+  {
+    t = *p;
+    *p = (*p)->next;
+    FREE (&t->name);
+    rfc822_free_address (&t->addr);
+    FREE (&t);
+  }
+}
+
+/* collapse the pathname using ~ or = when possible */
+void mutt_pretty_mailbox (char *s)
+{
+  char *p = s, *q = s;
+  size_t len;
+  url_scheme_t scheme;
+
+  scheme = url_check_scheme (s);
+
+#ifdef USE_IMAP
+  if (scheme == U_IMAP || scheme == U_IMAPS)
+  {
+    imap_pretty_mailbox (s);
+    return;
+  }
+#endif
+
+  /* if s is an url, only collapse path component */
+  if (scheme != U_UNKNOWN)
+  {
+    p = strchr(s, ':')+1;
+    if (!strncmp (p, "//", 2))
+      q = strchr (p+2, '/');
+    if (!q)
+      q = strchr (p, '\0');
+    p = q;
+  }
+  
+  /* first attempt to collapse the pathname */
+  while (*p)
+  {
+    if (*p == '/' && p[1] == '/')
+    {
+      *q++ = '/';
+      p += 2;
+    }
+    else if (p[0] == '/' && p[1] == '.' && p[2] == '/')
+    {
+      *q++ = '/';
+      p += 3;
+    }
+    else
+      *q++ = *p++;
+  }
+  *q = 0;
+
+  if (mutt_strncmp (s, Maildir, (len = mutt_strlen (Maildir))) == 0 &&
+      s[len] == '/')
+  {
+    *s++ = '=';
+    memmove (s, s + len, mutt_strlen (s + len) + 1);
+  }
+  else if (mutt_strncmp (s, Homedir, (len = mutt_strlen (Homedir))) == 0 &&
+          s[len] == '/')
+  {
+    *s++ = '~';
+    memmove (s, s + len - 1, mutt_strlen (s + len - 1) + 1);
+  }
+}
+
+void mutt_pretty_size (char *s, size_t len, long n)
+{
+  if (n == 0)
+    strfcpy (s, "0K", len);
+  else if (n < 10189) /* 0.1K - 9.9K */
+    snprintf (s, len, "%3.1fK", (n < 103) ? 0.1 : n / 1024.0);
+  else if (n < 1023949) /* 10K - 999K */
+  {
+    /* 51 is magic which causes 10189/10240 to be rounded up to 10 */
+    snprintf (s, len, "%ldK", (n + 51) / 1024);
+  }
+  else if (n < 10433332) /* 1.0M - 9.9M */
+    snprintf (s, len, "%3.1fM", n / 1048576.0);
+  else /* 10M+ */
+  {
+    /* (10433332 + 52428) / 1048576 = 10 */
+    snprintf (s, len, "%ldM", (n + 52428) / 1048576);
+  }
+}
+
+void mutt_expand_file_fmt (char *dest, size_t destlen, const char *fmt, const char *src)
+{
+  char tmp[LONG_STRING];
+  
+  mutt_quote_filename (tmp, sizeof (tmp), src);
+  mutt_expand_fmt (dest, destlen, fmt, tmp);
+}
+
+void mutt_expand_fmt (char *dest, size_t destlen, const char *fmt, const char *src)
+{
+  const char *p;
+  char *d;
+  size_t slen;
+  int found = 0;
+
+  slen = mutt_strlen (src);
+  destlen--;
+  
+  for (p = fmt, d = dest; destlen && *p; p++)
+  {
+    if (*p == '%') 
+    {
+      switch (p[1])
+      {
+       case '%':
+         *d++ = *p++;
+         destlen--;
+         break;
+       case 's':
+         found = 1;
+         strfcpy (d, src, destlen + 1);
+         d       += destlen > slen ? slen : destlen;
+         destlen -= destlen > slen ? slen : destlen;
+         p++;
+         break;
+       default:
+         *d++ = *p; 
+         destlen--;
+         break;
+      }
+    }
+    else
+    {
+      *d++ = *p;
+      destlen--;
+    }
+  }
+  
+  *d = '\0';
+  
+  if (!found && destlen > 0)
+  {
+    strncat (dest, " ", destlen);
+    strncat (dest, src, destlen-1);
+  }
+  
+}
+
+/* return 0 on success, -1 on abort, 1 on error */
+int mutt_check_overwrite (const char *attname, const char *path,
+                               char *fname, size_t flen, int *append, char **directory) 
+{
+  int rc = 0;
+  char tmp[_POSIX_PATH_MAX];
+  struct stat st;
+
+  strfcpy (fname, path, flen);
+  if (access (fname, F_OK) != 0)
+    return 0;
+  if (stat (fname, &st) != 0)
+    return -1;
+  if (S_ISDIR (st.st_mode))
+  {
+    if (directory)
+    {
+      switch (mutt_multi_choice
+             (_("File is a directory, save under it? [(y)es, (n)o, (a)ll]"), _("yna")))
+      {
+       case 3:         /* all */
+         mutt_str_replace (directory, fname);
+         break;
+       case 1:         /* yes */
+         FREE (directory);
+         break;
+       case -1:        /* abort */
+         FREE (directory); 
+         return -1;
+       case  2:        /* no */
+         FREE (directory);
+         return 1;
+      }
+    }
+    else if ((rc = mutt_yesorno (_("File is a directory, save under it?"), M_YES)) != M_YES)
+      return (rc == M_NO) ? 1 : -1;
+
+    if (!attname || !attname[0])
+    {
+      tmp[0] = 0;
+      if (mutt_get_field (_("File under directory: "), tmp, sizeof (tmp),
+                                     M_FILE | M_CLEAR) != 0 || !tmp[0])
+       return (-1);
+      mutt_concat_path (fname, path, tmp, flen);
+    }
+    else
+      mutt_concat_path (fname, path, mutt_basename (attname), flen);
+  }
+  
+  if (*append == 0 && access (fname, F_OK) == 0)
+  {
+    switch (mutt_multi_choice
+           (_("File exists, (o)verwrite, (a)ppend, or (c)ancel?"), _("oac")))
+    {
+      case -1: /* abort */
+        return -1;
+      case 3:  /* cancel */
+       return 1;
+
+      case 2: /* append */
+        *append = M_SAVE_APPEND;
+        break;
+      case 1: /* overwrite */
+        *append = M_SAVE_OVERWRITE;
+        break;
+    }
+  }
+  return 0;
+}
+
+void mutt_save_path (char *d, size_t dsize, ADDRESS *a)
+{
+  if (a && a->mailbox)
+  {
+    strfcpy (d, a->mailbox, dsize);
+    if (!option (OPTSAVEADDRESS))
+    {
+      char *p;
+
+      if ((p = strpbrk (d, "%@")))
+       *p = 0;
+    }
+    mutt_strlower (d);
+  }
+  else
+    *d = 0;
+}
+
+void mutt_safe_path (char *s, size_t l, ADDRESS *a)
+{
+  char *p;
+
+  mutt_save_path (s, l, a);
+  for (p = s; *p; p++)
+    if (*p == '/' || ISSPACE (*p) || !IsPrint ((unsigned char) *p))
+      *p = '_';
+}
+
+
+void mutt_FormatString (char *dest,            /* output buffer */
+                       size_t destlen,         /* output buffer len */
+                       const char *src,        /* template string */
+                       format_t *callback,     /* callback for processing */
+                       unsigned long data,     /* callback data */
+                       format_flag flags)      /* callback flags */
+{
+  char prefix[SHORT_STRING], buf[LONG_STRING], *cp, *wptr = dest, ch;
+  char ifstring[SHORT_STRING], elsestring[SHORT_STRING];
+  size_t wlen, count, len;
+
+  prefix[0] = '\0';
+  destlen--; /* save room for the terminal \0 */
+  wlen = (flags & M_FORMAT_ARROWCURSOR && option (OPTARROWCURSOR)) ? 3 : 0;
+    
+  while (*src && wlen < destlen)
+  {
+    if (*src == '%')
+    {
+      if (*++src == '%')
+      {
+       *wptr++ = '%';
+       wlen++;
+       src++;
+       continue;
+      }
+
+      if (*src == '?')
+      {
+       flags |= M_FORMAT_OPTIONAL;
+       src++;
+      }
+      else
+      {
+       flags &= ~M_FORMAT_OPTIONAL;
+
+       /* eat the format string */
+       cp = prefix;
+       count = 0;
+       while (count < sizeof (prefix) &&
+              (isdigit ((unsigned char) *src) || *src == '.' || *src == '-'))
+       {
+         *cp++ = *src++;
+         count++;
+       }
+       *cp = 0;
+      }
+
+      if (!*src)
+       break; /* bad format */
+
+      ch = *src++; /* save the character to switch on */
+
+      if (flags & M_FORMAT_OPTIONAL)
+      {
+        if (*src != '?')
+          break; /* bad format */
+        src++;
+
+        /* eat the `if' part of the string */
+        cp = ifstring;
+       count = 0;
+        while (count < sizeof (ifstring) && *src && *src != '?' && *src != '&')
+       {
+          *cp++ = *src++;
+         count++;
+       }
+        *cp = 0;
+
+       /* eat the `else' part of the string (optional) */
+       if (*src == '&')
+         src++; /* skip the & */
+       cp = elsestring;
+       count = 0;
+       while (count < sizeof (elsestring) && *src && *src != '?')
+       {
+         *cp++ = *src++;
+         count++;
+       }
+       *cp = 0;
+
+       if (!*src)
+         break; /* bad format */
+
+        src++; /* move past the trailing `?' */
+      }
+
+      /* handle generic cases first */
+      if (ch == '>')
+      {
+       /* right justify to EOL */
+       ch = *src++; /* pad char */
+       /* calculate space left on line.  if we've already written more data
+          than will fit on the line, ignore the rest of the line */
+       count = (COLS < destlen ? COLS : destlen);
+       if (count > wlen)
+       {
+         count -= wlen; /* how many chars left on this line */
+         mutt_FormatString (buf, sizeof (buf), src, callback, data, flags);
+         len = mutt_strlen (buf);
+         if (count > len)
+         {
+           count -= len; /* how many chars to pad */
+           memset (wptr, ch, count);
+           wptr += count;
+           wlen += count;
+         }
+         if (len + wlen > destlen)
+           len = destlen - wlen;
+         memcpy (wptr, buf, len);
+         wptr += len;
+         wlen += len;
+       }
+       break; /* skip rest of input */
+      }
+      else if (ch == '|')
+      {
+       /* pad to EOL */
+       ch = *src++;
+       if (destlen > COLS)
+         destlen = COLS;
+       if (destlen > wlen)
+       {
+         count = destlen - wlen;
+         memset (wptr, ch, count);
+         wptr += count;
+       }
+       break; /* skip rest of input */
+      }
+      else
+      {
+       short tolower =  0;
+       short nodots  = 0;
+       
+       while (ch == '_' || ch == ':') 
+       {
+         if (ch == '_')
+           tolower = 1;
+         else if (ch == ':') 
+           nodots = 1;
+         
+         ch = *src++;
+       }
+       
+       /* use callback function to handle this case */
+       src = callback (buf, sizeof (buf), ch, src, prefix, ifstring, elsestring, data, flags);
+
+       if (tolower)
+         mutt_strlower (buf);
+       if (nodots) 
+       {
+         char *p = buf;
+         for (; *p; p++)
+           if (*p == '.')
+               *p = '_';
+       }
+       
+       if ((len = mutt_strlen (buf)) + wlen > destlen)
+         len = (destlen - wlen > 0) ? (destlen - wlen) : 0;
+
+       memcpy (wptr, buf, len);
+       wptr += len;
+       wlen += len;
+      }
+    }
+    else if (*src == '\\')
+    {
+      if (!*++src)
+       break;
+      switch (*src)
+      {
+       case 'n':
+         *wptr = '\n';
+         break;
+       case 't':
+         *wptr = '\t';
+         break;
+       case 'r':
+         *wptr = '\r';
+         break;
+       case 'f':
+         *wptr = '\f';
+         break;
+       case 'v':
+         *wptr = '\v';
+         break;
+       default:
+         *wptr = *src;
+         break;
+      }
+      src++;
+      wptr++;
+      wlen++;
+    }
+    else
+    {
+      *wptr++ = *src++;
+      wlen++;
+    }
+  }
+  *wptr = 0;
+
+#if 0
+  if (flags & M_FORMAT_MAKEPRINT)
+  {
+    /* Make sure that the string is printable by changing all non-printable
+       chars to dots, or spaces for non-printable whitespace */
+    for (cp = dest ; *cp ; cp++)
+      if (!IsPrint (*cp) &&
+         !((flags & M_FORMAT_TREE) && (*cp <= M_TREE_MAX)))
+       *cp = isspace ((unsigned char) *cp) ? ' ' : '.';
+  }
+#endif
+}
+
+/* This function allows the user to specify a command to read stdout from in
+   place of a normal file.  If the last character in the string is a pipe (|),
+   then we assume it is a commmand to run instead of a normal file. */
+FILE *mutt_open_read (const char *path, pid_t *thepid)
+{
+  FILE *f;
+  int len = mutt_strlen (path);
+
+  if (path[len - 1] == '|')
+  {
+    /* read from a pipe */
+
+    char *s = safe_strdup (path);
+
+    s[len - 1] = 0;
+    mutt_endwin (NULL);
+    *thepid = mutt_create_filter (s, NULL, &f, NULL);
+    FREE (&s);
+  }
+  else
+  {
+    f = fopen (path, "r");
+    *thepid = -1;
+  }
+  return (f);
+}
+
+/* returns 0 if OK to proceed, -1 to abort, 1 to retry */
+int mutt_save_confirm (const char *s, struct stat *st)
+{
+  char tmp[_POSIX_PATH_MAX];
+  int ret = 0;
+  int rc;
+  int magic = 0;
+
+  magic = mx_get_magic (s);
+
+#ifdef USE_POP
+  if (magic == M_POP)
+  {
+    mutt_error _("Can't save message to POP mailbox.");
+    return 1;
+  }
+#endif
+
+#ifdef USE_NNTP
+  if (magic == M_NNTP)
+  {
+    mutt_error _("Can't save message to newsserver.");
+    return 0;
+  }
+#endif
+
+  if (stat (s, st) != -1)
+  {
+    if (magic == -1)
+    {
+      mutt_error (_("%s is not a mailbox!"), s);
+      return 1;
+    }
+
+    if (option (OPTCONFIRMAPPEND) &&
+       (!TrashPath || (mutt_strcmp (s, TrashPath) != 0)))
+      /* if we're appending to the trash, there's no point in asking */
+    {
+      snprintf (tmp, sizeof (tmp), _("Append messages to %s?"), s);
+      if ((rc = mutt_yesorno (tmp, M_YES)) == M_NO)
+       ret = 1;
+      else if (rc == -1)
+       ret = -1;
+    }
+  }
+  else
+  {
+#ifdef USE_IMAP
+    if (magic != M_IMAP)
+#endif /* execute the block unconditionally if we don't use imap */
+    {
+      st->st_mtime = 0;
+      st->st_atime = 0;
+
+      if (errno == ENOENT)
+      {
+       if (option (OPTCONFIRMCREATE))
+       {
+         snprintf (tmp, sizeof (tmp), _("Create %s?"), s);
+         if ((rc = mutt_yesorno (tmp, M_YES)) == M_NO)
+           ret = 1;
+         else if (rc == -1)
+           ret = -1;
+       }
+      }
+      else
+      {
+       mutt_perror (s);
+       return 1;
+      }
+    }
+  }
+
+  CLEARLINE (LINES-1);
+  return (ret);
+}
+
+void state_prefix_putc (char c, STATE *s)
+{
+  if (s->flags & M_PENDINGPREFIX)
+  {
+    int i;
+
+    i = strlen (Quotebuf);
+    Quotebuf[i++] = c;
+    Quotebuf[i] = '\0';
+    if (i == sizeof (Quotebuf) - 1 || c == '\n')
+    {
+      char buf[2 * SHORT_STRING];
+      int j = 0, offset = 0;
+      regmatch_t pmatch[1];
+
+      state_reset_prefix (s);
+      while (regexec ((regex_t *) QuoteRegexp.rx, &Quotebuf[offset], 1, pmatch, 0) == 0)
+       offset += pmatch->rm_eo;
+
+      if (!option (OPTQUOTEEMPTY) && Quotebuf[0] == '\n')
+       strcpy (buf, Quotebuf);
+      else if (option (OPTQUOTEQUOTED) && offset)
+      {
+       for (i = 0; i < offset; i++)
+         if (Quotebuf[i] != ' ')
+           j = i;
+       strncpy (buf, Quotebuf, j + 1);
+       strcpy (buf + j + 1, Quotebuf + j);
+      }
+      else
+       snprintf (buf, sizeof (buf), "%s%s", NONULL(s->prefix), Quotebuf);
+
+      state_puts (buf, s);
+    }
+  }
+  else
+    state_putc (c, s);
+
+  if (c == '\n')
+  {
+    state_set_prefix (s);
+    Quotebuf[0] = '\0';
+  }
+}
+
+int state_printf (STATE *s, const char *fmt, ...)
+{
+  int rv;
+  va_list ap;
+
+  va_start (ap, fmt);
+  rv = vfprintf (s->fpout, fmt, ap);
+  va_end (ap);
+  
+  return rv;
+}
+
+void state_mark_attach (STATE *s)
+{
+  if ((s->flags & M_DISPLAY) && !mutt_strcmp (Pager, "builtin"))
+    state_puts (AttachmentMarker, s);
+}
+
+void state_attach_puts (const char *t, STATE *s)
+{
+  if (*t != '\n') state_mark_attach (s);
+  while (*t)
+  {
+    state_putc (*t, s);
+    if (*t++ == '\n' && *t)
+      if (*t != '\n') state_mark_attach (s);
+  }
+}
+
+void mutt_display_sanitize (char *s)
+{
+  for (; *s; s++)
+  {
+    if (!IsPrint (*s))
+      *s = '?';
+  }
+}
+      
+void mutt_sleep (short s)
+{
+  if (SleepTime > s)
+    sleep (SleepTime);
+  else if (s)
+    sleep (s);
+}
+
+void mutt_buffer_addstr (BUFFER* buf, const char* s)
+{
+  mutt_buffer_add (buf, s, mutt_strlen (s));
+}
+
+void mutt_buffer_addch (BUFFER* buf, char c)
+{
+  mutt_buffer_add (buf, &c, 1);
+}
+
+/* dynamically grows a BUFFER to accomodate s, in increments of 128 bytes.
+ * Always one byte bigger than necessary for the null terminator, and
+ * the buffer is always null-terminated */
+void mutt_buffer_add (BUFFER* buf, const char* s, size_t len)
+{
+  size_t offset;
+
+  if (buf->dptr + len + 1 > buf->data + buf->dsize)
+  {
+    offset = buf->dptr - buf->data;
+    buf->dsize += len < 128 ? 128 : len + 1;
+    safe_realloc ((void**) &buf->data, buf->dsize);
+    buf->dptr = buf->data + offset;
+  }
+  memcpy (buf->dptr, s, len);
+  buf->dptr += len;
+  *(buf->dptr) = '\0';
+}
+
+/* Decrease a file's modification time by 1 second */
+
+time_t mutt_decrease_mtime (const char *f, struct stat *st)
+{
+  struct utimbuf utim;
+  struct stat _st;
+  time_t mtime;
+  
+  if (!st)
+  {
+    if (stat (f, &_st) == -1)
+      return -1;
+    st = &_st;
+  }
+
+  if ((mtime = st->st_mtime) == time (NULL))
+  {
+    mtime -= 1;
+    utim.actime = mtime;
+    utim.modtime = mtime;
+    utime (f, &utim);
+  }
+  
+  return mtime;
+}
+
+const char *mutt_make_version (void)
+{
+  static char vstring[STRING];
+  snprintf (vstring, sizeof (vstring), "Mutt %s (%s)",
+           MUTT_VERSION, ReleaseDate);
+  return vstring;
+}
+
+REGEXP *mutt_compile_regexp (const char *s, int flags)
+{
+  REGEXP *pp = safe_calloc (sizeof (REGEXP), 1);
+  pp->pattern = safe_strdup (s);
+  pp->rx = safe_calloc (sizeof (regex_t), 1);
+  if (REGCOMP (pp->rx, NONULL(s), flags) != 0)
+    mutt_free_regexp (&pp);
+
+  return pp;
+}
+
+void mutt_free_regexp (REGEXP **pp)
+{
+  FREE (&(*pp)->pattern);
+  regfree ((*pp)->rx);
+  FREE (&(*pp)->rx);
+  FREE (pp);
+}
+
+void mutt_free_rx_list (RX_LIST **list)
+{
+  RX_LIST *p;
+  
+  if (!list) return;
+  while (*list)
+  {
+    p = *list;
+    *list = (*list)->next;
+    mutt_free_regexp (&p->rx);
+    FREE (&p);
+  }
+}
+
+int mutt_match_rx_list (const char *s, RX_LIST *l)
+{
+  if (!s)  return 0;
+  
+  for (; l; l = l->next)
+  {
+    if (regexec (l->rx->rx, s, (size_t) 0, (regmatch_t *) 0, (int) 0) == 0)
+    {
+      dprint (5, (debugfile, "mutt_match_rx_list: %s matches %s\n", s, l->rx->pattern));
+      return 1;
+    }
+  }
+
+  return 0;
+}
diff --git a/mx.c b/mx.c
new file mode 100644 (file)
index 0000000..2186651
--- /dev/null
+++ b/mx.c
@@ -0,0 +1,1779 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mx.h"
+#include "rfc2047.h"
+#include "sort.h"
+#include "mailbox.h"
+#include "copy.h"
+#include "keymap.h"
+#include "url.h"
+
+#ifdef USE_IMAP
+#include "imap.h"
+#endif
+
+#ifdef USE_POP
+#include "pop.h"
+#endif
+
+#ifdef USE_NNTP
+#include "nntp.h"
+#endif
+
+#ifdef BUFFY_SIZE
+#include "buffy.h"
+#endif
+
+#ifdef USE_DOTLOCK
+#include "dotlock.h"
+#endif
+
+#include "mutt_crypt.h"
+
+#include <dirent.h>
+#include <fcntl.h>
+#include <sys/file.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#ifndef BUFFY_SIZE
+#include <utime.h>
+#endif
+
+
+#define mutt_is_spool(s)  (mutt_strcmp (Spoolfile, s) == 0)
+
+#ifdef USE_DOTLOCK
+/* parameters: 
+ * path - file to lock
+ * retry - should retry if unable to lock?
+ */
+
+#ifdef DL_STANDALONE
+
+static int invoke_dotlock (const char *path, int dummy, int flags, int retry)
+{
+  char cmd[LONG_STRING + _POSIX_PATH_MAX];
+  char f[SHORT_STRING + _POSIX_PATH_MAX];
+  char r[SHORT_STRING];
+  
+  if (flags & DL_FL_RETRY)
+    snprintf (r, sizeof (r), "-r %d ", retry ? MAXLOCKATTEMPT : 0);
+  
+  mutt_quote_filename (f, sizeof (f), path);
+  
+  snprintf (cmd, sizeof (cmd),
+           "%s %s%s%s%s%s%s%s",
+           NONULL (MuttDotlock),
+           flags & DL_FL_TRY ? "-t " : "",
+           flags & DL_FL_UNLOCK ? "-u " : "",
+           flags & DL_FL_USEPRIV ? "-p " : "",
+           flags & DL_FL_FORCE ? "-f " : "",
+           flags & DL_FL_UNLINK ? "-d " : "",
+           flags & DL_FL_RETRY ? r : "",
+           f);
+  
+  return mutt_system (cmd);
+}
+
+#else 
+
+#define invoke_dotlock dotlock_invoke
+
+#endif
+
+static int dotlock_file (const char *path, int fd, int retry)
+{
+  int r;
+  int flags = DL_FL_USEPRIV | DL_FL_RETRY;
+
+  if (retry) retry = 1;
+
+retry_lock:
+  if ((r = invoke_dotlock(path, fd, flags, retry)) == DL_EX_EXIST)
+  {
+    if (!option (OPTNOCURSES))
+    {
+      char msg[LONG_STRING];
+      
+      snprintf(msg, sizeof(msg), _("Lock count exceeded, remove lock for %s?"),
+              path);
+      if(retry && mutt_yesorno(msg, M_YES) == M_YES)
+      {
+       flags |= DL_FL_FORCE;
+       retry--;
+       mutt_clear_error ();
+       goto retry_lock;
+      }
+    } 
+    else
+    {
+      mutt_error ( _("Can't dotlock %s.\n"), path);
+    }
+  }
+  return (r == DL_EX_OK ? 0 : -1);
+}
+
+static int undotlock_file (const char *path, int fd)
+{
+  return (invoke_dotlock(path, fd, DL_FL_USEPRIV | DL_FL_UNLOCK, 0) == DL_EX_OK ? 
+         0 : -1);
+}
+
+#endif /* USE_DOTLOCK */
+
+/* Args:
+ *     excl            if excl != 0, request an exclusive lock
+ *     dot             if dot != 0, try to dotlock the file
+ *     timeout         should retry locking?
+ */
+int mx_lock_file (const char *path, int fd, int excl, int dot, int timeout)
+{
+#if defined (USE_FCNTL) || defined (USE_FLOCK)
+  int count;
+  int attempt;
+  struct stat prev_sb;
+#endif
+  int r = 0;
+
+#ifdef USE_FCNTL
+  struct flock lck;
+  
+
+  memset (&lck, 0, sizeof (struct flock));
+  lck.l_type = excl ? F_WRLCK : F_RDLCK;
+  lck.l_whence = SEEK_SET;
+
+  count = 0;
+  attempt = 0;
+  while (fcntl (fd, F_SETLK, &lck) == -1)
+  {
+    struct stat sb;
+    dprint(1,(debugfile, "mx_lock_file(): fcntl errno %d.\n", errno));
+    if (errno != EAGAIN && errno != EACCES)
+    {
+      mutt_perror ("fcntl");
+      return (-1);
+    }
+
+    if (fstat (fd, &sb) != 0)
+     sb.st_size = 0;
+    
+    if (count == 0)
+      prev_sb = sb;
+
+    /* only unlock file if it is unchanged */
+    if (prev_sb.st_size == sb.st_size && ++count >= (timeout?MAXLOCKATTEMPT:0))
+    {
+      if (timeout)
+       mutt_error _("Timeout exceeded while attempting fcntl lock!");
+      return (-1);
+    }
+
+    prev_sb = sb;
+
+    mutt_message (_("Waiting for fcntl lock... %d"), ++attempt);
+    sleep (1);
+  }
+#endif /* USE_FCNTL */
+
+#ifdef USE_FLOCK
+  count = 0;
+  attempt = 0;
+  while (flock (fd, (excl ? LOCK_EX : LOCK_SH) | LOCK_NB) == -1)
+  {
+    struct stat sb;
+    if (errno != EWOULDBLOCK)
+    {
+      mutt_perror ("flock");
+      r = -1;
+      break;
+    }
+
+    if (fstat(fd,&sb) != 0 )
+     sb.st_size=0;
+    
+    if (count == 0)
+      prev_sb=sb;
+
+    /* only unlock file if it is unchanged */
+    if (prev_sb.st_size == sb.st_size && ++count >= (timeout?MAXLOCKATTEMPT:0))
+    {
+      if (timeout)
+       mutt_error _("Timeout exceeded while attempting flock lock!");
+      r = -1;
+      break;
+    }
+
+    prev_sb = sb;
+
+    mutt_message (_("Waiting for flock attempt... %d"), ++attempt);
+    sleep (1);
+  }
+#endif /* USE_FLOCK */
+
+#ifdef USE_DOTLOCK
+  if (r == 0 && dot)
+    r = dotlock_file (path, fd, timeout);
+#endif /* USE_DOTLOCK */
+
+  if (r == -1)
+  {
+    /* release any other locks obtained in this routine */
+
+#ifdef USE_FCNTL
+    lck.l_type = F_UNLCK;
+    fcntl (fd, F_SETLK, &lck);
+#endif /* USE_FCNTL */
+
+#ifdef USE_FLOCK
+    flock (fd, LOCK_UN);
+#endif /* USE_FLOCK */
+
+    return (-1);
+  }
+
+  return 0;
+}
+
+int mx_unlock_file (const char *path, int fd, int dot)
+{
+#ifdef USE_FCNTL
+  struct flock unlockit = { F_UNLCK, 0, 0, 0 };
+
+  memset (&unlockit, 0, sizeof (struct flock));
+  unlockit.l_type = F_UNLCK;
+  unlockit.l_whence = SEEK_SET;
+  fcntl (fd, F_SETLK, &unlockit);
+#endif
+
+#ifdef USE_FLOCK
+  flock (fd, LOCK_UN);
+#endif
+
+#ifdef USE_DOTLOCK
+  if (dot)
+    undotlock_file (path, fd);
+#endif
+  
+  return 0;
+}
+
+void mx_unlink_empty (const char *path)
+{
+  int fd;
+#ifndef USE_DOTLOCK
+  struct stat sb;
+#endif
+
+  if ((fd = open (path, O_RDWR)) == -1)
+    return;
+
+  if (mx_lock_file (path, fd, 1, 0, 1) == -1)
+  {
+    close (fd);
+    return;
+  }
+
+#ifdef USE_DOTLOCK
+  invoke_dotlock (path, fd, DL_FL_UNLINK, 1);
+#else
+  if (fstat (fd, &sb) == 0 && sb.st_size == 0)
+    unlink (path);
+#endif
+
+  mx_unlock_file (path, fd, 0);
+  close (fd);
+}
+
+/* try to figure out what type of mailbox ``path'' is
+ *
+ * return values:
+ *     M_*     mailbox type
+ *     0       not a mailbox
+ *     -1      error
+ */
+
+#ifdef USE_IMAP
+
+int mx_is_imap(const char *p)
+{
+  url_scheme_t scheme;
+
+  if (!p)
+    return 0;
+
+  if (*p == '{')
+    return 1;
+
+  scheme = url_check_scheme (p);
+  if (scheme == U_IMAP || scheme == U_IMAPS)
+    return 1;
+
+  return 0;
+}
+
+#endif
+
+#ifdef USE_POP
+int mx_is_pop (const char *p)
+{
+  url_scheme_t scheme;
+
+  if (!p)
+    return 0;
+
+  scheme = url_check_scheme (p);
+  if (scheme == U_POP || scheme == U_POPS)
+    return 1;
+
+  return 0;
+}
+#endif
+
+#ifdef USE_NNTP
+int mx_is_nntp (const char *p)
+{
+  url_scheme_t scheme;
+
+  if (!p)
+    return 0;
+
+  scheme = url_check_scheme (p);
+  if (scheme == U_NNTP || scheme == U_NNTPS)
+    return 1;
+
+  return 0;
+}
+#endif
+
+int mx_get_magic (const char *path)
+{
+  struct stat st;
+  int magic = 0;
+  char tmp[_POSIX_PATH_MAX];
+  FILE *f;
+
+#ifdef USE_IMAP
+  if(mx_is_imap(path))
+    return M_IMAP;
+#endif /* USE_IMAP */
+
+#ifdef USE_POP
+  if (mx_is_pop (path))
+    return M_POP;
+#endif /* USE_POP */
+
+#ifdef USE_NNTP
+  if (mx_is_nntp (path))
+    return M_NNTP;
+#endif /* USE_NNTP */
+
+  if (stat (path, &st) == -1)
+  {
+    dprint (1, (debugfile, "mx_get_magic(): unable to stat %s: %s (errno %d).\n",
+               path, strerror (errno), errno));
+    return (-1);
+  }
+
+  if (S_ISDIR (st.st_mode))
+  {
+    /* check for maildir-style mailbox */
+
+    snprintf (tmp, sizeof (tmp), "%s/cur", path);
+    if (stat (tmp, &st) == 0 && S_ISDIR (st.st_mode))
+      return (M_MAILDIR);
+
+    /* check for mh-style mailbox */
+
+    snprintf (tmp, sizeof (tmp), "%s/.mh_sequences", path);
+    if (access (tmp, F_OK) == 0)
+      return (M_MH);
+
+    snprintf (tmp, sizeof (tmp), "%s/.xmhcache", path);
+    if (access (tmp, F_OK) == 0)
+      return (M_MH);
+    
+    snprintf (tmp, sizeof (tmp), "%s/.mew_cache", path);
+    if (access (tmp, F_OK) == 0)
+      return (M_MH);
+
+    snprintf (tmp, sizeof (tmp), "%s/.mew-cache", path);
+    if (access (tmp, F_OK) == 0)
+      return (M_MH);
+    
+    snprintf (tmp, sizeof (tmp), "%s/.sylpheed_cache", path);
+    if (access (tmp, F_OK) == 0)
+      return (M_MH);
+
+    /* 
+     * ok, this isn't an mh folder, but mh mode can be used to read
+     * Usenet news from the spool. ;-) 
+     */
+
+    snprintf (tmp, sizeof (tmp), "%s/.overview", path);
+    if (access (tmp, F_OK) == 0)
+      return (M_MH);
+
+  }
+  else if (st.st_size == 0)
+  {
+    /* hard to tell what zero-length files are, so assume the default magic */
+    if (DefaultMagic == M_MBOX || DefaultMagic == M_MMDF)
+      return (DefaultMagic);
+    else
+      return (M_MBOX);
+  }
+  else if ((f = fopen (path, "r")) != NULL)
+  {
+#ifndef BUFFY_SIZE
+    struct utimbuf times;
+#endif
+
+    fgets (tmp, sizeof (tmp), f);
+    if (mutt_strncmp ("From ", tmp, 5) == 0)
+      magic = M_MBOX;
+    else if (mutt_strcmp (MMDF_SEP, tmp) == 0)
+      magic = M_MMDF;
+    safe_fclose (&f);
+#ifndef BUFFY_SIZE
+    /* need to restore the times here, the file was not really accessed,
+     * only the type was accessed.  This is important, because detection
+     * of "new mail" depends on those times set correctly.
+     */
+    times.actime = st.st_atime;
+    times.modtime = st.st_mtime;
+    utime (path, &times);
+#endif
+  }
+  else
+  {
+    dprint (1, (debugfile, "mx_get_magic(): unable to open file %s for reading.\n",
+               path));
+    mutt_perror (path);
+    return (-1);
+  }
+
+  return (magic);
+}
+
+/*
+ * set DefaultMagic to the given value
+ */
+int mx_set_magic (const char *s)
+{
+  if (ascii_strcasecmp (s, "mbox") == 0)
+    DefaultMagic = M_MBOX;
+  else if (ascii_strcasecmp (s, "mmdf") == 0)
+    DefaultMagic = M_MMDF;
+  else if (ascii_strcasecmp (s, "mh") == 0)
+    DefaultMagic = M_MH;
+  else if (ascii_strcasecmp (s, "maildir") == 0)
+    DefaultMagic = M_MAILDIR;
+  else
+    return (-1);
+
+  return 0;
+}
+
+/* mx_access: Wrapper for access, checks permissions on a given mailbox.
+ *   We may be interested in using ACL-style flags at some point, currently
+ *   we use the normal access() flags. */
+int mx_access (const char* path, int flags)
+{
+#ifdef USE_IMAP
+  if (mx_is_imap (path))
+    return imap_access (path, flags);
+#endif
+
+  return access (path, flags);
+}
+
+static int mx_open_mailbox_append (CONTEXT *ctx, int flags)
+{
+  struct stat sb;
+
+  ctx->append = 1;
+
+#ifdef USE_IMAP
+  
+  if(mx_is_imap(ctx->path))  
+    return imap_open_mailbox_append (ctx);
+
+#endif
+  
+  if(stat(ctx->path, &sb) == 0)
+  {
+    ctx->magic = mx_get_magic (ctx->path);
+    
+    switch (ctx->magic)
+    {
+      case 0:
+       mutt_error (_("%s is not a mailbox."), ctx->path);
+       /* fall through */
+      case -1:
+       return (-1);
+    }
+  }
+  else if (errno == ENOENT)
+  {
+    ctx->magic = DefaultMagic;
+
+    if (ctx->magic == M_MH || ctx->magic == M_MAILDIR)
+    {
+      char tmp[_POSIX_PATH_MAX];
+
+      if (mkdir (ctx->path, S_IRWXU))
+      {
+       mutt_perror (ctx->path);
+       return (-1);
+      }
+
+      if (ctx->magic == M_MAILDIR)
+      {
+       snprintf (tmp, sizeof (tmp), "%s/cur", ctx->path);
+       if (mkdir (tmp, S_IRWXU))
+       {
+         mutt_perror (tmp);
+         rmdir (ctx->path);
+         return (-1);
+       }
+
+       snprintf (tmp, sizeof (tmp), "%s/new", ctx->path);
+       if (mkdir (tmp, S_IRWXU))
+       {
+         mutt_perror (tmp);
+         snprintf (tmp, sizeof (tmp), "%s/cur", ctx->path);
+         rmdir (tmp);
+         rmdir (ctx->path);
+         return (-1);
+       }
+       snprintf (tmp, sizeof (tmp), "%s/tmp", ctx->path);
+       if (mkdir (tmp, S_IRWXU))
+       {
+         mutt_perror (tmp);
+         snprintf (tmp, sizeof (tmp), "%s/cur", ctx->path);
+         rmdir (tmp);
+         snprintf (tmp, sizeof (tmp), "%s/new", ctx->path);
+         rmdir (tmp);
+         rmdir (ctx->path);
+         return (-1);
+       }
+      }
+      else
+      {
+       int i;
+
+       snprintf (tmp, sizeof (tmp), "%s/.mh_sequences", ctx->path);
+       if ((i = creat (tmp, S_IRWXU)) == -1)
+       {
+         mutt_perror (tmp);
+         rmdir (ctx->path);
+         return (-1);
+       }
+       close (i);
+      }
+    }
+  }
+  else
+  {
+    mutt_perror (ctx->path);
+    return (-1);
+  }
+
+  switch (ctx->magic)
+  {
+    case M_MBOX:
+    case M_MMDF:
+    if ((ctx->fp = safe_fopen (ctx->path, flags & M_NEWFOLDER ? "w" : "a")) == NULL ||
+         mbox_lock_mailbox (ctx, 1, 1) != 0)
+      {
+       if (!ctx->fp)
+         mutt_perror (ctx->path);
+       else
+       {
+         mutt_error (_("Couldn't lock %s\n"), ctx->path);
+         safe_fclose (&ctx->fp);
+       }
+       return (-1);
+      }
+      fseek (ctx->fp, 0, 2);
+      break;
+
+    case M_MH:
+    case M_MAILDIR:
+      /* nothing to do */
+      break;
+
+    default:
+      return (-1);
+  }
+
+  return 0;
+}
+
+/*
+ * open a mailbox and parse it
+ *
+ * Args:
+ *     flags   M_NOSORT        do not sort mailbox
+ *             M_APPEND        open mailbox for appending
+ *             M_READONLY      open mailbox in read-only mode
+ *             M_QUIET         only print error messages
+ *     ctx     if non-null, context struct to use
+ */
+CONTEXT *mx_open_mailbox (const char *path, int flags, CONTEXT *pctx)
+{
+  CONTEXT *ctx = pctx;
+  int rc;
+
+  if (!ctx)
+    ctx = safe_malloc (sizeof (CONTEXT));
+  memset (ctx, 0, sizeof (CONTEXT));
+  ctx->path = safe_strdup (path);
+
+  ctx->msgnotreadyet = -1;
+  ctx->collapsed = 0;
+  
+  if (flags & M_QUIET)
+    ctx->quiet = 1;
+  if (flags & M_READONLY)
+    ctx->readonly = 1;
+
+  if (flags & (M_APPEND|M_NEWFOLDER))
+  {
+    if (mx_open_mailbox_append (ctx, flags) != 0)
+    {
+      mx_fastclose_mailbox (ctx);
+      if (!pctx)
+       FREE (&ctx);
+      return NULL;
+    }
+    return ctx;
+  }
+
+  ctx->magic = mx_get_magic (path);
+  
+  if(ctx->magic == 0)
+    mutt_error (_("%s is not a mailbox."), path);
+
+  if(ctx->magic == -1)
+    mutt_perror(path);
+  
+  if(ctx->magic <= 0)
+  {
+    mx_fastclose_mailbox (ctx);
+    if (!pctx)
+      FREE (&ctx);
+    return (NULL);
+  }
+  
+  /* if the user has a `push' command in their .muttrc, or in a folder-hook,
+   * it will cause the progress messages not to be displayed because
+   * mutt_refresh() will think we are in the middle of a macro.  so set a
+   * flag to indicate that we should really refresh the screen.
+   */
+  set_option (OPTFORCEREFRESH);
+
+  if (!ctx->quiet)
+    mutt_message (_("Reading %s..."), ctx->path);
+
+  switch (ctx->magic)
+  {
+    case M_MH:
+      rc = mh_read_dir (ctx, NULL);
+      break;
+
+    case M_MAILDIR:
+      rc = maildir_read_dir (ctx);
+      break;
+
+    case M_MMDF:
+    case M_MBOX:
+      rc = mbox_open_mailbox (ctx);
+      break;
+
+#ifdef USE_IMAP
+    case M_IMAP:
+      rc = imap_open_mailbox (ctx);
+      break;
+#endif /* USE_IMAP */
+
+#ifdef USE_POP
+    case M_POP:
+      rc = pop_open_mailbox (ctx);
+      break;
+#endif /* USE_POP */
+
+#ifdef USE_NNTP
+    case M_NNTP:
+      rc = nntp_open_mailbox (ctx);
+      break;
+#endif /* USE_NNTP */
+
+    default:
+      rc = -1;
+      break;
+  }
+
+  if (rc == 0)
+  {
+    if ((flags & M_NOSORT) == 0)
+    {
+      /* avoid unnecessary work since the mailbox is completely unthreaded
+        to begin with */
+      unset_option (OPTSORTSUBTHREADS);
+      unset_option (OPTNEEDRESCORE);
+      mutt_sort_headers (ctx, 1);
+    }
+    if (!ctx->quiet)
+      mutt_clear_error ();
+  }
+  else
+  {
+    mx_fastclose_mailbox (ctx);
+    if (!pctx)
+      FREE (&ctx);
+  }
+
+  unset_option (OPTFORCEREFRESH);
+  return (ctx);
+}
+
+/* free up memory associated with the mailbox context */
+void mx_fastclose_mailbox (CONTEXT *ctx)
+{
+  int i;
+
+  if(!ctx) 
+    return;
+  
+#ifdef USE_IMAP
+  if (ctx->magic == M_IMAP)
+    imap_close_mailbox (ctx);
+#endif /* USE_IMAP */
+#ifdef USE_POP
+  if (ctx->magic == M_POP)
+    pop_close_mailbox (ctx);
+#endif /* USE_POP */
+#ifdef USE_NNTP
+  if (ctx->magic == M_NNTP)
+    nntp_fastclose_mailbox (ctx);
+#endif /* USE_NNTP */
+  if (ctx->subj_hash)
+    hash_destroy (&ctx->subj_hash, NULL);
+  if (ctx->id_hash)
+    hash_destroy (&ctx->id_hash, NULL);
+  mutt_clear_threads (ctx);
+  for (i = 0; i < ctx->msgcount; i++)
+    mutt_free_header (&ctx->hdrs[i]);
+  FREE (&ctx->hdrs);
+  FREE (&ctx->v2r);
+  FREE (&ctx->path);
+  FREE (&ctx->pattern);
+  if (ctx->limit_pattern) 
+    mutt_pattern_free (&ctx->limit_pattern);
+  safe_fclose (&ctx->fp);
+  memset (ctx, 0, sizeof (CONTEXT));
+}
+
+/* save changes to disk */
+static int sync_mailbox (CONTEXT *ctx, int *index_hint)
+{
+#ifdef BUFFY_SIZE
+  BUFFY *tmp = NULL;
+#endif
+  int rc = -1;
+
+  if (!ctx->quiet)
+    mutt_message (_("Writing %s..."), ctx->path);
+
+  switch (ctx->magic)
+  {
+    case M_MBOX:
+    case M_MMDF:
+      rc = mbox_sync_mailbox (ctx, index_hint);
+#ifdef BUFFY_SIZE
+      tmp = mutt_find_mailbox (ctx->path);
+#endif
+      break;
+      
+    case M_MH:
+    case M_MAILDIR:
+      rc = mh_sync_mailbox (ctx, index_hint);
+      break;
+      
+#ifdef USE_IMAP
+    case M_IMAP:
+      /* extra argument means EXPUNGE */
+      rc = imap_sync_mailbox (ctx, 1, index_hint);
+      break;
+#endif /* USE_IMAP */
+
+#ifdef USE_POP
+    case M_POP:
+      rc = pop_sync_mailbox (ctx, index_hint);
+      break;
+#endif /* USE_POP */
+
+#ifdef USE_NNTP
+    case M_NNTP:
+      rc = nntp_sync_mailbox (ctx);
+      break;
+#endif /* USE_NNTP */
+  }
+
+#if 0
+  if (!ctx->quiet && !ctx->shutup && rc == -1)
+    mutt_error ( _("Could not synchronize mailbox %s!"), ctx->path);
+#endif
+  
+#ifdef BUFFY_SIZE
+  if (tmp && tmp->new == 0)
+    mutt_update_mailbox (tmp);
+#endif
+  return rc;
+}
+
+/* move deleted mails to the trash folder */
+static int trash_append (CONTEXT *ctx)
+{
+    CONTEXT *ctx_trash;
+    int i = 0;
+    struct stat st, stc;
+
+    if (!TrashPath || !ctx->deleted ||
+       (ctx->magic == M_MAILDIR && option (OPTMAILDIRTRASH)))
+      return 0;
+
+    for (;i < ctx->msgcount && (!ctx->hdrs[i]->deleted ||
+                               ctx->hdrs[i]->appended); i++);
+    if (i == ctx->msgcount)
+      return 0; /* nothing to be done */
+
+    if (mutt_save_confirm (TrashPath, &st) != 0)
+    {
+      mutt_error _("message(s) not deleted");
+      return -1;
+    }
+
+    if (lstat (ctx->path, &stc) == 0 && stc.st_ino == st.st_ino
+       && stc.st_dev == st.st_dev && stc.st_rdev == st.st_rdev)
+      return 0;  /* we are in the trash folder: simple sync */
+
+    if ((ctx_trash = mx_open_mailbox (TrashPath, M_APPEND, NULL)) != NULL)
+    {
+      for (i = 0 ; i < ctx->msgcount ; i++)
+       if (ctx->hdrs[i]->deleted && !ctx->hdrs[i]->appended
+           && !ctx->hdrs[i]->purged
+           && mutt_append_message (ctx_trash, ctx, ctx->hdrs[i], 0, 0) == -1)
+         {
+           mx_close_mailbox (ctx_trash, NULL);
+           return -1;
+         }
+
+      mx_close_mailbox (ctx_trash, NULL);
+    }
+    else
+    {
+      mutt_error _("Can't open trash folder");
+      return -1;
+    }
+
+    return 0;
+}
+
+/* save changes and close mailbox */
+int mx_close_mailbox (CONTEXT *ctx, int *index_hint)
+{
+  int i, move_messages = 0, purge = 1, read_msgs = 0;
+  int check;
+  int isSpool = 0;
+  CONTEXT f;
+  char mbox[_POSIX_PATH_MAX];
+  char buf[SHORT_STRING];
+
+  if (!ctx) return 0;
+
+  ctx->closing = 1;
+
+#ifdef USE_NNTP
+  if (ctx->magic == M_NNTP)
+  {
+    int ret;
+
+    ret = nntp_close_mailbox (ctx);
+    mx_fastclose_mailbox (ctx);
+    return ret;
+  }
+#endif
+  if (ctx->readonly || ctx->dontwrite)
+  {
+    /* mailbox is readonly or we don't want to write */
+    mx_fastclose_mailbox (ctx);
+    return 0;
+  }
+
+  if (ctx->append)
+  {
+    /* mailbox was opened in write-mode */
+    if (ctx->magic == M_MBOX || ctx->magic == M_MMDF)
+      mbox_close_mailbox (ctx);
+    else
+      mx_fastclose_mailbox (ctx);
+    return 0;
+  }
+
+  for (i = 0; i < ctx->msgcount; i++)
+  {
+    if (!ctx->hdrs[i]->deleted && ctx->hdrs[i]->read 
+        && !(ctx->hdrs[i]->flagged && option (OPTKEEPFLAGGED)))
+      read_msgs++;
+  }
+
+  if (read_msgs && quadoption (OPT_MOVE) != M_NO)
+  {
+    char *p;
+
+    if ((p = mutt_find_hook (M_MBOXHOOK, ctx->path)))
+    {
+      isSpool = 1;
+      strfcpy (mbox, p, sizeof (mbox));
+    }
+    else
+    {
+      strfcpy (mbox, NONULL(Inbox), sizeof (mbox));
+      isSpool = mutt_is_spool (ctx->path) && !mutt_is_spool (mbox);
+    }
+    mutt_expand_path (mbox, sizeof (mbox));
+
+    if (isSpool)
+    {
+      snprintf (buf, sizeof (buf), _("Move read messages to %s?"), mbox);
+      if ((move_messages = query_quadoption (OPT_MOVE, buf)) == -1)
+      {
+       ctx->closing = 0;
+       return (-1);
+      }
+    }
+  }
+
+  /* 
+   * There is no point in asking whether or not to purge if we are
+   * just marking messages as "trash".
+   */
+  if (ctx->deleted && !(ctx->magic == M_MAILDIR && option (OPTMAILDIRTRASH)))
+  {
+    snprintf (buf, sizeof (buf), ctx->deleted == 1
+            ? _("Purge %d deleted message?") : _("Purge %d deleted messages?"),
+             ctx->deleted);
+    if ((purge = query_quadoption (OPT_DELETE, buf)) < 0)
+    {
+      ctx->closing = 0;
+      return (-1);
+    }
+  }
+
+#ifdef USE_IMAP
+  /* IMAP servers manage the OLD flag themselves */
+  if (ctx->magic != M_IMAP)
+#endif
+  if (option (OPTMARKOLD))
+  {
+    for (i = 0; i < ctx->msgcount; i++)
+    {
+      if (!ctx->hdrs[i]->deleted && !ctx->hdrs[i]->old)
+       mutt_set_flag (ctx, ctx->hdrs[i], M_OLD, 1);
+    }
+  }
+
+  if (move_messages)
+  {
+    mutt_message (_("Moving read messages to %s..."), mbox);
+
+#ifdef USE_IMAP
+    /* try to use server-side copy first */
+    i = 1;
+    
+    if (ctx->magic == M_IMAP && mx_is_imap (mbox))
+    {
+      /* tag messages for moving, and clear old tags, if any */
+      for (i = 0; i < ctx->msgcount; i++)
+       if (ctx->hdrs[i]->read && !ctx->hdrs[i]->deleted
+            && !(ctx->hdrs[i]->flagged && option (OPTKEEPFLAGGED))) 
+         ctx->hdrs[i]->tagged = 1;
+       else
+         ctx->hdrs[i]->tagged = 0;
+      
+      i = imap_copy_messages (ctx, NULL, mbox, 1);
+    }
+    
+    if (i == 0) /* success */
+      mutt_clear_error ();
+    else if (i == -1) /* horrible error, bail */
+    {
+      ctx->closing=0;
+      return -1;
+    }
+    else /* use regular append-copy mode */
+#endif
+    {
+      if (mx_open_mailbox (mbox, M_APPEND, &f) == NULL)
+      {
+       ctx->closing = 0;
+       return -1;
+      }
+
+      for (i = 0; i < ctx->msgcount; i++)
+      {
+       if (ctx->hdrs[i]->read && !ctx->hdrs[i]->deleted
+            && !(ctx->hdrs[i]->flagged && option (OPTKEEPFLAGGED)))
+        {
+         if (mutt_append_message (&f, ctx, ctx->hdrs[i], 0, CH_UPDATE_LEN) == 0)
+         {
+           mutt_set_flag (ctx, ctx->hdrs[i], M_DELETE, 1);
+           mutt_set_flag (ctx, ctx->hdrs[i], M_APPENDED, 1);
+         }
+         else
+         {
+           mx_close_mailbox (&f, NULL);
+           ctx->closing = 0;
+           return -1;
+         }
+       }
+      }
+    
+      mx_close_mailbox (&f, NULL);
+    }
+    
+  }
+  else if (!ctx->changed && ctx->deleted == 0)
+  {
+    mutt_message _("Mailbox is unchanged.");
+    mx_fastclose_mailbox (ctx);
+    return 0;
+  }
+  
+  /* copy mails to the trash before expunging */
+  if (purge && ctx->deleted)
+    if (trash_append (ctx) != 0)
+    {
+      ctx->closing = 0;
+      return -1;
+    }
+
+#ifdef USE_IMAP
+  /* allow IMAP to preserve the deleted flag across sessions */
+  if (ctx->magic == M_IMAP)
+  {
+    if ((check = imap_sync_mailbox (ctx, purge, index_hint)) != 0)
+    {
+      ctx->closing = 0;
+      return check;
+    }
+  }
+  else
+#endif
+  {
+    if (!purge)
+    {
+      for (i = 0; i < ctx->msgcount; i++)
+        ctx->hdrs[i]->deleted = 0;
+      ctx->deleted = 0;
+    }
+
+    if (ctx->changed || ctx->deleted)
+    {
+      if ((check = sync_mailbox (ctx, index_hint)) != 0)
+      {
+       ctx->closing = 0;
+       return check;
+      }
+    }
+  }
+
+  if (move_messages)
+     mutt_message (_("%d kept, %d moved, %d deleted."),
+       ctx->msgcount - ctx->deleted, read_msgs, ctx->deleted);
+  else
+    mutt_message (_("%d kept, %d deleted."),
+      ctx->msgcount - ctx->deleted, ctx->deleted);
+
+  if (ctx->msgcount == ctx->deleted &&
+      (ctx->magic == M_MMDF || ctx->magic == M_MBOX) &&
+      !mutt_is_spool(ctx->path) && !option (OPTSAVEEMPTY))
+    mx_unlink_empty (ctx->path);
+
+  mx_fastclose_mailbox (ctx);
+
+  return 0;
+}
+
+
+/* update a Context structure's internal tables. */
+
+void mx_update_tables(CONTEXT *ctx, int committing)
+{
+  int i, j;
+  
+  /* update memory to reflect the new state of the mailbox */
+  ctx->vcount = 0;
+  ctx->vsize = 0;
+  ctx->tagged = 0;
+  ctx->deleted = 0;
+  ctx->new = 0;
+  ctx->unread = 0;
+  ctx->changed = 0;
+  ctx->flagged = 0;
+#define this_body ctx->hdrs[j]->content
+  for (i = 0, j = 0; i < ctx->msgcount; i++)
+  {
+    if ((committing && (!ctx->hdrs[i]->deleted || 
+                       (ctx->magic == M_MAILDIR && option (OPTMAILDIRTRASH)))) ||
+       (!committing && ctx->hdrs[i]->active))
+    {
+      if (i != j)
+      {
+       ctx->hdrs[j] = ctx->hdrs[i];
+       ctx->hdrs[i] = NULL;
+      }
+      ctx->hdrs[j]->msgno = j;
+      if (ctx->hdrs[j]->virtual != -1)
+      {
+       ctx->v2r[ctx->vcount] = j;
+       ctx->hdrs[j]->virtual = ctx->vcount++;
+       ctx->vsize += this_body->length + this_body->offset -
+         this_body->hdr_offset;
+      }
+
+      if (committing)
+       ctx->hdrs[j]->changed = 0;
+      else if (ctx->hdrs[j]->changed)
+       ctx->changed++;
+      
+      if (!committing || (ctx->magic == M_MAILDIR && option (OPTMAILDIRTRASH)))
+      {
+       if (ctx->hdrs[j]->deleted)
+         ctx->deleted++;
+      }
+
+      if (ctx->hdrs[j]->tagged)
+       ctx->tagged++;
+      if (ctx->hdrs[j]->flagged)
+       ctx->flagged++;
+      if (!ctx->hdrs[j]->read)
+      { 
+       ctx->unread++;
+       if (!ctx->hdrs[j]->old)
+         ctx->new++;
+      } 
+
+      j++;
+    }
+    else
+    {
+      if (ctx->magic == M_MH || ctx->magic == M_MAILDIR)
+       ctx->size -= (ctx->hdrs[i]->content->length +
+                     ctx->hdrs[i]->content->offset -
+                     ctx->hdrs[i]->content->hdr_offset);
+      /* remove message from the hash tables */
+      if (ctx->subj_hash && ctx->hdrs[i]->env->real_subj)
+       hash_delete (ctx->subj_hash, ctx->hdrs[i]->env->real_subj, ctx->hdrs[i], NULL);
+      if (ctx->id_hash && ctx->hdrs[i]->env->message_id)
+       hash_delete (ctx->id_hash, ctx->hdrs[i]->env->message_id, ctx->hdrs[i], NULL);
+      mutt_free_header (&ctx->hdrs[i]);
+    }
+  }
+#undef this_body
+  ctx->msgcount = j;
+}
+
+
+/* save changes to mailbox
+ *
+ * return values:
+ *     0               success
+ *     -1              error
+ */
+int mx_sync_mailbox (CONTEXT *ctx, int *index_hint)
+{
+  int rc, i;
+  int purge = 1;
+  int msgcount, deleted;
+
+  if (ctx->dontwrite)
+  {
+    char buf[STRING], tmp[STRING];
+    if (km_expand_key (buf, sizeof(buf),
+                       km_find_func (MENU_MAIN, OP_TOGGLE_WRITE)))
+      snprintf (tmp, sizeof(tmp), _(" Press '%s' to toggle write"), buf);
+    else
+      strfcpy (tmp, _("Use 'toggle-write' to re-enable write!"), sizeof(tmp));
+
+    mutt_error (_("Mailbox is marked unwritable. %s"), tmp);
+    return -1;
+  }
+  else if (ctx->readonly)
+  {
+    mutt_error _("Mailbox is read-only.");
+    return -1;
+  }
+
+  if (!ctx->changed && !ctx->deleted)
+  {
+    mutt_message _("Mailbox is unchanged.");
+    return (0);
+  }
+
+  if (ctx->deleted)
+  {
+    char buf[SHORT_STRING];
+
+    snprintf (buf, sizeof (buf), ctx->deleted == 1
+            ? _("Purge %d deleted message?") : _("Purge %d deleted messages?"),
+             ctx->deleted);
+    if ((purge = query_quadoption (OPT_DELETE, buf)) < 0)
+      return (-1);
+    else if (purge == M_NO)
+    {
+      if (!ctx->changed)
+       return 0; /* nothing to do! */
+#ifdef USE_IMAP
+      /* let IMAP servers hold on to D flags */
+      if (ctx->magic != M_IMAP)
+#endif
+      {
+        for (i = 0 ; i < ctx->msgcount ; i++)
+          ctx->hdrs[i]->deleted = 0;
+        ctx->deleted = 0;
+      }
+    }
+  }
+
+  /* really only for IMAP - imap_sync_mailbox results in a call to
+   * mx_update_tables, so ctx->deleted is 0 when it comes back */
+  msgcount = ctx->msgcount;
+  deleted = ctx->deleted;
+
+  if (purge && ctx->deleted)
+  {
+    if (trash_append (ctx) == -1)
+      return -1;
+  } 
+
+#ifdef USE_IMAP
+  if (ctx->magic == M_IMAP)
+    rc = imap_sync_mailbox (ctx, purge, index_hint);
+  else
+#endif
+    rc = sync_mailbox (ctx, index_hint);
+  if (rc == 0)
+  {
+#ifdef USE_IMAP
+    if (ctx->magic == M_IMAP && !purge)
+      mutt_message _("Mailbox checkpointed.");
+    else
+#endif
+    mutt_message (_("%d kept, %d deleted."), msgcount - deleted,
+      deleted);
+
+    mutt_sleep (0);
+    
+    if (ctx->msgcount == ctx->deleted &&
+       (ctx->magic == M_MBOX || ctx->magic == M_MMDF) &&
+       !mutt_is_spool (ctx->path) && !option (OPTSAVEEMPTY))
+    {
+      unlink (ctx->path);
+      mx_fastclose_mailbox (ctx);
+      return 0;
+    }
+
+    /* if we haven't deleted any messages, we don't need to resort */
+    /* ... except for certain folder formats which need "unsorted" 
+     * sort order in order to synchronize folders.
+     * 
+     * MH and maildir are safe.  mbox-style seems to need re-sorting,
+     * at least with the new threading code.
+     */
+    if (purge || (ctx->magic != M_MAILDIR && ctx->magic != M_MH))
+    {
+#ifdef USE_IMAP
+      /* IMAP does this automatically after handling EXPUNGE */
+      if (ctx->magic != M_IMAP)
+#endif
+      {
+       mx_update_tables (ctx, 1);
+       mutt_sort_headers (ctx, 1); /* rethread from scratch */
+      }
+    }
+  }
+
+  return (rc);
+}
+
+
+/* {maildir,mh}_open_new_message are in mh.c. */
+
+int mbox_open_new_message (MESSAGE *msg, CONTEXT *dest, HEADER *hdr)
+{
+  msg->fp = dest->fp;
+  return 0;
+}
+
+#ifdef USE_IMAP
+int imap_open_new_message (MESSAGE *msg, CONTEXT *dest, HEADER *hdr)
+{
+  char tmp[_POSIX_PATH_MAX];
+
+  mutt_mktemp(tmp);
+  if ((msg->fp = safe_fopen (tmp, "w")) == NULL)
+    return (-1);
+  msg->path = safe_strdup(tmp);
+  return 0;
+}
+#endif
+
+/* args:
+ *     dest    destintation mailbox
+ *     hdr     message being copied (required for maildir support, because
+ *             the filename depends on the message flags)
+ */
+MESSAGE *mx_open_new_message (CONTEXT *dest, HEADER *hdr, int flags)
+{
+  MESSAGE *msg;
+  int (*func) (MESSAGE *, CONTEXT *, HEADER *);
+  ADDRESS *p = NULL;
+
+  switch (dest->magic)
+  {
+    case M_MMDF:
+    case M_MBOX:
+      func = mbox_open_new_message;
+      break;
+    case M_MAILDIR:
+      func = maildir_open_new_message;
+      break;
+    case M_MH:
+      func = mh_open_new_message;
+      break;
+#ifdef USE_IMAP
+    case M_IMAP:
+      func = imap_open_new_message;
+      break;
+#endif
+    default:
+      dprint (1, (debugfile, "mx_open_new_message(): function unimplemented for mailbox type %d.\n",
+                 dest->magic));
+      return (NULL);
+  }
+
+  msg = safe_calloc (1, sizeof (MESSAGE));
+  msg->magic = dest->magic;
+  msg->write = 1;
+
+  if (hdr)
+  {
+    msg->flags.flagged = hdr->flagged;
+    msg->flags.replied = hdr->replied;
+    msg->flags.read    = hdr->read;
+    msg->received = hdr->received;
+  }
+
+  if(msg->received == 0)
+    time(&msg->received);
+  
+  if (func (msg, dest, hdr) == 0)
+  {
+    if (dest->magic == M_MMDF)
+      fputs (MMDF_SEP, msg->fp);
+
+    if ((msg->magic == M_MBOX || msg->magic ==  M_MMDF) &&
+       flags & M_ADD_FROM)
+    {
+      if (hdr)
+      {
+       if (hdr->env->return_path)
+         p = hdr->env->return_path;
+       else if (hdr->env->sender)
+         p = hdr->env->sender;
+       else
+         p = hdr->env->from;
+      }
+
+      fprintf (msg->fp, "From %s %s", p ? p->mailbox : NONULL(Username), ctime (&msg->received));
+    }
+  }
+  else
+    FREE (&msg);
+
+  return msg;
+}
+
+/* check for new mail */
+int mx_check_mailbox (CONTEXT *ctx, int *index_hint, int lock)
+{
+  int rc;
+
+  if (ctx)
+  {
+    if (ctx->locked) lock = 0;
+
+    switch (ctx->magic)
+    {
+      case M_MBOX:
+      case M_MMDF:
+
+       if (lock)
+       {
+         mutt_block_signals ();
+         if (mbox_lock_mailbox (ctx, 0, 0) == -1)
+         {
+           mutt_unblock_signals ();
+           return M_LOCKED;
+         }
+       }
+       
+       rc = mbox_check_mailbox (ctx, index_hint);
+
+       if (lock)
+       {
+         mutt_unblock_signals ();
+         mbox_unlock_mailbox (ctx);
+       }
+       
+       return rc;
+
+
+      case M_MH:
+       return (mh_check_mailbox (ctx, index_hint));
+      case M_MAILDIR:
+       return (maildir_check_mailbox (ctx, index_hint));
+
+#ifdef USE_IMAP
+      case M_IMAP:
+       return (imap_check_mailbox (ctx, index_hint, 0));
+#endif /* USE_IMAP */
+
+#ifdef USE_POP
+      case M_POP:
+       return (pop_check_mailbox (ctx, index_hint));
+#endif /* USE_POP */
+
+#ifdef USE_NNTP
+      case M_NNTP:
+       return (nntp_check_mailbox (ctx));
+#endif /* USE_NNTP */
+    }
+  }
+
+  dprint (1, (debugfile, "mx_check_mailbox: null or invalid context.\n"));
+  return (-1);
+}
+
+/* return a stream pointer for a message */
+MESSAGE *mx_open_message (CONTEXT *ctx, int msgno)
+{
+  MESSAGE *msg;
+  
+  msg = safe_calloc (1, sizeof (MESSAGE));
+  switch (msg->magic = ctx->magic)
+  {
+    case M_MBOX:
+    case M_MMDF:
+      msg->fp = ctx->fp;
+      break;
+
+    case M_MH:
+    case M_MAILDIR:
+    {
+      HEADER *cur = ctx->hdrs[msgno];
+      char path[_POSIX_PATH_MAX];
+      
+      snprintf (path, sizeof (path), "%s/%s", ctx->path, cur->path);
+      
+      if ((msg->fp = fopen (path, "r")) == NULL && errno == ENOENT &&
+         ctx->magic == M_MAILDIR)
+       msg->fp = maildir_open_find_message (ctx->path, cur->path);
+      
+      if (msg->fp == NULL)
+      {
+       mutt_perror (path);
+       dprint (1, (debugfile, "mx_open_message: fopen: %s: %s (errno %d).\n",
+                   path, strerror (errno), errno));
+       FREE (&msg);
+      }
+    }
+    break;
+    
+#ifdef USE_IMAP
+    case M_IMAP:
+    {
+      if (imap_fetch_message (msg, ctx, msgno) != 0)
+       FREE (&msg);
+      break;
+    }
+#endif /* USE_IMAP */
+
+#ifdef USE_POP
+    case M_POP:
+    {
+      if (pop_fetch_message (msg, ctx, msgno) != 0)
+       FREE (&msg);
+      break;
+    }
+#endif /* USE_POP */
+
+#ifdef USE_NNTP
+    case M_NNTP:
+    {
+      if (nntp_fetch_message (msg, ctx, msgno) != 0)
+       FREE (&msg);
+      break;
+    }
+#endif /* USE_NNTP */
+
+    default:
+      dprint (1, (debugfile, "mx_open_message(): function not implemented for mailbox type %d.\n", ctx->magic));
+      FREE (&msg);
+      break;
+  }
+  return (msg);
+}
+
+/* commit a message to a folder */
+
+int mx_commit_message (MESSAGE *msg, CONTEXT *ctx)
+{
+  int r = 0;
+
+  if (!(msg->write && ctx->append))
+  {
+    dprint (1, (debugfile, "mx_commit_message(): msg->write = %d, ctx->append = %d\n",
+               msg->write, ctx->append));
+    return -1;
+  }
+
+  switch (msg->magic)
+  {
+    case M_MMDF:
+    {
+      if (fputs (MMDF_SEP, msg->fp) == EOF)
+       r = -1;
+      break;
+    }
+    
+    case M_MBOX:
+    {
+      if (fputc ('\n', msg->fp) == EOF)
+       r = -1;
+      break;
+    }
+
+#ifdef USE_IMAP
+    case M_IMAP:
+    {
+      if ((r = safe_fclose (&msg->fp)) == 0)
+       r = imap_append_message (ctx, msg);
+      break;
+    }
+#endif
+    
+    case M_MAILDIR:
+    {
+      r = maildir_commit_message (ctx, msg, NULL);
+      break;
+    }
+    
+    case M_MH:
+    {
+      r = mh_commit_message (ctx, msg, NULL);
+      break;
+    }
+  }
+  
+  if (r == 0 && (ctx->magic == M_MBOX || ctx->magic == M_MMDF)
+      && (fflush (msg->fp) == EOF || fsync (fileno (msg->fp)) == -1))
+  {
+    mutt_perror _("Can't write message");
+    r = -1;
+  }
+  return r;
+}
+
+/* close a pointer to a message */
+int mx_close_message (MESSAGE **msg)
+{
+  int r = 0;
+
+  if ((*msg)->magic == M_MH || (*msg)->magic == M_MAILDIR
+#ifdef USE_IMAP
+      || (*msg)->magic == M_IMAP
+#endif
+#ifdef USE_POP
+      || (*msg)->magic == M_POP
+#endif
+#ifdef USE_NNTP
+      || (*msg)->magic == M_NNTP
+#endif
+      )
+  {
+    r = safe_fclose (&(*msg)->fp);
+  }
+  else
+    (*msg)->fp = NULL;
+
+  if ((*msg)->path)
+  {
+    dprint (1, (debugfile, "mx_close_message (): unlinking %s\n",
+               (*msg)->path));
+    unlink ((*msg)->path);
+    FREE (&(*msg)->path);
+  }
+
+  FREE (msg);
+  return (r);
+}
+
+void mx_alloc_memory (CONTEXT *ctx)
+{
+  int i;
+  size_t s = MAX (sizeof (HEADER *), sizeof (int));
+  
+  if ((ctx->hdrmax + 25) * s < ctx->hdrmax * s)
+  {
+    mutt_error _("Integer overflow -- can't allocate memory.");
+    sleep (1);
+    mutt_exit (1);
+  }
+  
+  if (ctx->hdrs)
+  {
+    safe_realloc (&ctx->hdrs, sizeof (HEADER *) * (ctx->hdrmax += 25));
+    safe_realloc (&ctx->v2r, sizeof (int) * ctx->hdrmax);
+  }
+  else
+  {
+    ctx->hdrs = safe_calloc ((ctx->hdrmax += 25), sizeof (HEADER *));
+    ctx->v2r = safe_calloc (ctx->hdrmax, sizeof (int));
+  }
+  for (i = ctx->msgcount ; i < ctx->hdrmax ; i++)
+  {
+    ctx->hdrs[i] = NULL;
+    ctx->v2r[i] = -1;
+  }
+}
+
+/* this routine is called to update the counts in the context structure for
+ * the last message header parsed.
+ */
+void mx_update_context (CONTEXT *ctx, int new_messages)
+{
+  HEADER *h;
+  int msgno;
+
+  for (msgno = ctx->msgcount - new_messages; msgno < ctx->msgcount; msgno++)
+  {
+    h = ctx->hdrs[msgno];
+
+    if (WithCrypto)
+    {
+      /* NOTE: this _must_ be done before the check for mailcap! */
+      h->security = crypt_query (h->content);
+    }
+
+    if (!ctx->pattern)
+    {
+      ctx->v2r[ctx->vcount] = msgno;
+      h->virtual = ctx->vcount++;
+    }
+    else
+      h->virtual = -1;
+    h->msgno = msgno;
+
+    if (h->env->supersedes)
+    {
+      HEADER *h2;
+
+      if (!ctx->id_hash)       
+       ctx->id_hash = mutt_make_id_hash (ctx);
+
+      h2 = hash_find (ctx->id_hash, h->env->supersedes);
+
+      /* FREE (&h->env->supersedes); should I ? */
+      if (h2)
+      {
+       h2->superseded = 1;
+       if (option (OPTSCORE)) 
+         mutt_score_message (ctx, h2, 1);
+      }
+    }
+
+    /* add this message to the hash tables */
+    if (ctx->id_hash && h->env->message_id)
+      hash_insert (ctx->id_hash, h->env->message_id, h, 0);
+    if (ctx->subj_hash && h->env->real_subj)
+      hash_insert (ctx->subj_hash, h->env->real_subj, h, 1);
+
+    if (option (OPTSCORE)) 
+      mutt_score_message (ctx, h, 0);
+
+    if (h->changed)
+      ctx->changed = 1;
+    if (h->flagged)
+      ctx->flagged++;
+    if (h->deleted)
+      ctx->deleted++;
+    if (!h->read)
+    {
+      ctx->unread++;
+      if (!h->old)
+       ctx->new++;
+    }
+  }
+}
+
+/*
+ * Return:
+ * 1 if the specified mailbox contains 0 messages.
+ * 0 if the mailbox contains messages
+ * -1 on error
+ */
+int mx_check_empty (const char *path)
+{
+  switch (mx_get_magic (path))
+  {
+    case M_MBOX:
+    case M_MMDF:
+      return mbox_check_empty (path);
+    case M_MH:
+      return mh_check_empty (path);
+    case M_MAILDIR:
+      return maildir_check_empty (path);
+    default:
+      errno = EINVAL;
+      return -1;
+  }
+  /* not reached */
+}
diff --git a/mx.h b/mx.h
new file mode 100644 (file)
index 0000000..3750928
--- /dev/null
+++ b/mx.h
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1999-2002 Thomas Roessler <roessler@does-not-exist.org>
+ *
+ *     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.
+ */ 
+
+/*
+ * This header file contains prototypes for internal functions used by the
+ * generic mailbox api.  None of these functions should be called directly.
+ */
+
+#ifndef _MX_H
+#define _MX_H
+
+#include "mailbox.h"
+
+/* supported mailbox formats */
+enum
+{
+  M_MBOX = 1,
+  M_MMDF,
+  M_MH,
+  M_MAILDIR
+#ifdef USE_IMAP
+  , M_IMAP
+#endif
+#ifdef USE_POP
+  , M_POP
+#endif
+#ifdef USE_NNTP
+  , M_NNTP
+#endif
+};
+
+WHERE short DefaultMagic INITVAL (M_MBOX);
+
+#define MMDF_SEP "\001\001\001\001\n"
+#define MAXLOCKATTEMPT 5
+
+int mbox_sync_mailbox (CONTEXT *, int *);
+int mbox_open_mailbox (CONTEXT *);
+int mbox_check_mailbox (CONTEXT *, int *);
+int mbox_close_mailbox (CONTEXT *);
+int mbox_lock_mailbox (CONTEXT *, int, int);
+int mbox_parse_mailbox (CONTEXT *);
+int mmdf_parse_mailbox (CONTEXT *);
+void mbox_unlock_mailbox (CONTEXT *);
+int mbox_check_empty (const char *);
+
+int mh_read_dir (CONTEXT *, const char *);
+int mh_sync_mailbox (CONTEXT *, int *);
+int mh_check_mailbox (CONTEXT *, int *);
+int mh_buffy (const char *);
+int mh_check_empty (const char *);
+
+int maildir_read_dir (CONTEXT *);
+int maildir_check_mailbox (CONTEXT *, int *);
+int maildir_check_empty (const char *);
+
+int maildir_commit_message (CONTEXT *, MESSAGE *, HEADER *);
+int mh_commit_message (CONTEXT *, MESSAGE *, HEADER *);
+
+int maildir_open_new_message (MESSAGE *, CONTEXT *, HEADER *);
+int mh_open_new_message (MESSAGE *, CONTEXT *, HEADER *);
+
+FILE *maildir_open_find_message (const char *, const char *);
+
+int mbox_strict_cmp_headers (const HEADER *, const HEADER *);
+int mutt_reopen_mailbox (CONTEXT *, int *);
+
+void mx_alloc_memory (CONTEXT *);
+void mx_update_context (CONTEXT *, int);
+void mx_update_tables (CONTEXT *, int);
+
+
+int mx_lock_file (const char *, int, int, int, int);
+int mx_unlock_file (const char *path, int fd, int dot);
+
+
+#endif
diff --git a/newsrc.c b/newsrc.c
new file mode 100644 (file)
index 0000000..0679216
--- /dev/null
+++ b/newsrc.c
@@ -0,0 +1,1043 @@
+/*
+ * Copyright (C) 1998 Brandon Long <blong@fiction.net>
+ * Copyright (C) 1999 Andrej Gritsenko <andrej@lucky.net>
+ * Copyright (C) 2000-2001 Vsevolod Volkov <vvv@mutt.org.ua>
+ * 
+ *     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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */ 
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "sort.h"
+#include "mx.h"
+#include "mime.h"
+#include "mailbox.h"
+#include "nntp.h"
+#include "rfc822.h"
+#include "rfc1524.h"
+#include "rfc2047.h"
+
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+
+void nntp_add_to_list (NNTP_SERVER *s, NNTP_DATA *d)
+{
+  LIST *l;
+
+  if (!s || !d)
+    return;
+
+  l = safe_calloc (1, sizeof (LIST));
+  if (s->list)
+    s->tail->next = l;
+  else
+    s->list = l;
+  s->tail = l;
+  l->data = (void *) d;
+}
+
+static int nntp_parse_newsrc_line (NNTP_SERVER *news, char *line)
+{
+  NNTP_DATA *data;
+  char group[LONG_STRING];
+  int x = 1;
+  char *p = line, *b, *h;
+  size_t len;
+
+  while (*p)
+  {
+    if (*p++ == ',')
+      x++;
+  }
+
+  p = line;
+  while (*p && (*p != ':' && *p != '!')) p++;
+  if (!*p)
+    return -1;
+  len = p + 1 - line;
+  if (len > sizeof (group))
+    len = sizeof (group);
+  strfcpy (group, line, len);
+  if ((data = (NNTP_DATA *)hash_find (news->newsgroups, group)) == NULL)
+  {
+    data = (NNTP_DATA *) safe_calloc (1, sizeof (NNTP_DATA) + strlen (group) + 1);
+    data->group = (char *) data + sizeof (NNTP_DATA);
+    strcpy (data->group, group);
+    data->nserv = news;
+    data->deleted = 1;
+    if (news->newsgroups->nelem < news->newsgroups->curnelem * 2)
+      news->newsgroups = hash_resize (news->newsgroups, news->newsgroups->nelem * 2);
+    hash_insert (news->newsgroups, data->group, data, 0);
+    nntp_add_to_list (news, data);
+  }
+  else
+    FREE ((void **) &data->entries);
+
+  data->rc = 1;
+  data->entries = safe_calloc (x*2, sizeof (NEWSRC_ENTRY));
+  data->max = x*2;
+
+  if (*p == ':')
+    data->subscribed = 1;
+  else
+    data->subscribed = 0;
+
+  p++;
+  b = p;
+  x = 0;
+  while (*b)
+  {
+    while (*p && *p != ',' && *p != '\n') p++;
+    if (*p)
+    {
+      *p = '\0';
+      p++;
+    }
+    if ((h = strchr(b, '-')))
+    {
+      *h = '\0';
+      h++;
+      data->entries[x].first = atoi(b);
+      data->entries[x].last = atoi(h);
+    }
+    else
+    {
+      data->entries[x].first = atoi(b);
+      data->entries[x].last = data->entries[x].first;
+    }
+    b = p;
+    if (data->entries[x].last != 0)
+      x++;
+  }
+  if (x && !data->lastMessage)
+    data->lastMessage = data->entries[x-1].last;
+  data->num = x;
+  mutt_newsgroup_stat (data);
+  dprint (2, (debugfile, "parse_line: Newsgroup %s\n", data->group));
+  
+  return 0;
+}
+
+static int slurp_newsrc (NNTP_SERVER *news)
+{
+  FILE *fp;
+  char *buf;
+  struct stat sb;
+
+  news->stat = stat (news->newsrc, &sb);
+  news->size = sb.st_size;
+  news->mtime = sb.st_mtime;
+
+  if ((fp = safe_fopen (news->newsrc, "r")) == NULL)
+    return -1;
+  /* hmm, should we use dotlock? */
+  if (mx_lock_file (news->newsrc, fileno (fp), 0, 0, 1))
+  {
+    fclose (fp);
+    return -1;
+  }
+
+  buf = safe_malloc (sb.st_size + 1);
+  while (fgets (buf, sb.st_size + 1, fp))
+    nntp_parse_newsrc_line (news, buf);
+  FREE (&buf);
+
+  mx_unlock_file (news->newsrc, fileno (fp), 0);
+  fclose (fp);
+  return 0;
+}
+
+void nntp_cache_expand (char *dst, const char *src)
+{
+  snprintf (dst, _POSIX_PATH_MAX, "%s/%s", NewsCacheDir, src);
+  mutt_expand_path (dst, _POSIX_PATH_MAX);
+}
+
+/* Loads $news_cache_dir/.index into memory, loads newsserver data
+ * and newsgroup cache names */
+static int nntp_parse_cacheindex (NNTP_SERVER *news)
+{
+  struct stat st;
+  char buf[HUGE_STRING], *cp;
+  char dir[_POSIX_PATH_MAX], file[_POSIX_PATH_MAX];
+  FILE *index;
+  NNTP_DATA *data;
+  int l, m, t;
+
+  /* check is server name defined or not */
+  if (!news || !news->conn || !news->conn->account.host)
+    return -1;
+  unset_option (OPTNEWSCACHE);
+  if (!NewsCacheDir || !*NewsCacheDir)
+    return 0;
+
+  strfcpy (dir, NewsCacheDir, sizeof (dir));
+  mutt_expand_path (dir, sizeof(dir));
+
+  if (lstat (dir, &st) || (st.st_mode & S_IFDIR) == 0)
+  {
+    snprintf (buf, sizeof(buf), _("Directory %s not exist. Create it?"), dir);
+    if (mutt_yesorno (buf, M_YES) != M_YES || mkdir (dir, (S_IRWXU+S_IRWXG+
+         S_IRWXO)))
+    {
+      mutt_error _("Cache directory not created!");
+      return -1;
+    }
+    mutt_clear_error();
+  }
+
+  set_option (OPTNEWSCACHE);
+
+  FREE (&news->cache);
+  snprintf (buf, sizeof(buf), "%s/.index", dir);
+  if (!(index = safe_fopen (buf, "a+")))
+    return 0;
+  rewind (index);
+  while (fgets (buf, sizeof(buf), index))
+  {
+    buf[strlen(buf) - 1] = 0;  /* strip ending '\n' */
+    if (!mutt_strncmp (buf, "#: ", 3) &&
+       !mutt_strcasecmp (buf+3, news->conn->account.host))
+      break;
+  }
+  while (fgets (buf, sizeof(buf), index))
+  {
+    cp = buf;
+    while (*cp && *cp != ' ') cp++;
+    if (!*cp) continue;
+    cp[0] = 0;
+    if (!mutt_strcmp (buf, "#:"))
+      break;
+    sscanf (cp + 1, "%s %d %d", file, &l, &m);
+    if (!mutt_strcmp (buf, "ALL"))
+    {
+      news->cache = safe_strdup (file);
+      news->newgroups_time = m;
+    }
+    else if (news->newsgroups)
+    {
+      if ((data = (NNTP_DATA *)hash_find (news->newsgroups, buf)) == NULL)
+      {
+       data = (NNTP_DATA *) safe_calloc (1, sizeof (NNTP_DATA) + strlen (buf) + 1);
+       data->group = (char *) data + sizeof (NNTP_DATA);
+       strcpy(data->group, buf);
+       data->nserv = news;
+       data->deleted = 1;
+       if (news->newsgroups->nelem < news->newsgroups->curnelem * 2)
+         news->newsgroups = hash_resize (news->newsgroups, news->newsgroups->nelem * 2);
+       hash_insert (news->newsgroups, data->group, data, 0);
+       nntp_add_to_list (news, data);
+      }
+      data->cache = safe_strdup (file);
+      t = 0;
+      if (!data->firstMessage || data->lastMessage < m)
+       t = 1;
+      if (!data->firstMessage)
+       data->firstMessage = l;
+      if (data->lastMessage < m)
+       data->lastMessage = m;
+      data->lastCached = m;
+      if (t || !data->unread)
+       mutt_newsgroup_stat (data);
+    }
+  }
+  fclose (index);
+  return 0;
+}
+
+const char *
+nntp_format_str (char *dest, size_t destlen, char op, const char *src,
+               const char *fmt, const char *ifstring, const char *elsestring,
+               unsigned long data, format_flag flags)
+{
+  char fn[SHORT_STRING], tmp[SHORT_STRING];
+
+  switch (op)
+  {
+    case 's':
+      strncpy (fn, NewsServer, sizeof(fn) - 1);
+      mutt_strlower (fn);
+      snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
+      snprintf (dest, destlen, tmp, fn);
+      break;
+  }
+  return (src);
+}
+
+/* nntp_parse_url: given an NNPT URL, return host, port,
+ * username, password and newsgroup will recognise. */
+int nntp_parse_url (const char *server, ACCOUNT *acct,
+                   char *group, size_t group_len)
+{
+  ciss_url_t url;
+  char *c;
+  int ret = -1;
+
+  /* Defaults */
+  acct->flags = 0;
+  acct->port = NNTP_PORT;
+  acct->type = M_ACCT_TYPE_NNTP;
+
+  c = safe_strdup (server);
+  url_parse_ciss (&url, c);
+
+  if (url.scheme == U_NNTP || url.scheme == U_NNTPS)
+  {
+    if (url.scheme == U_NNTPS)
+    {
+      acct->flags |= M_ACCT_SSL;
+      acct->port = NNTP_SSL_PORT;
+    }
+
+    *group = '\0';
+    if (url.path)
+      strfcpy (group, url.path, group_len);
+
+    ret = mutt_account_fromurl (acct, &url);
+  }
+
+  FREE (&c);
+  return ret;
+}
+
+void nntp_expand_path (char *line, size_t len, ACCOUNT *acct)
+{
+  ciss_url_t url;
+
+  url.path = safe_strdup (line);
+  mutt_account_tourl (acct, &url);
+  url_ciss_tostring (&url, line, len, 0);
+  FREE (&url.path);
+}
+
+/*
+ * Automatically loads a newsrc into memory, if necessary.
+ * Checks the size/mtime of a newsrc file, if it doesn't match, load
+ * again.  Hmm, if a system has broken mtimes, this might mean the file
+ * is reloaded every time, which we'd have to fix.
+ *
+ * a newsrc file is a line per newsgroup, with the newsgroup, then a 
+ * ':' denoting subscribed or '!' denoting unsubscribed, then a 
+ * comma separated list of article numbers and ranges.
+ */
+NNTP_SERVER *mutt_select_newsserver (char *server)
+{
+  char file[_POSIX_PATH_MAX];
+  char *buf, *p;
+  LIST *list;
+  ACCOUNT acct;
+  NNTP_SERVER *serv;
+  CONNECTION *conn;
+
+  if (!server || !*server)
+  {
+    mutt_error _("No newsserver defined!");
+    return NULL;
+  }
+
+  buf = p = safe_calloc (strlen (server) + 10, sizeof (char));
+  if (url_check_scheme (server) == U_UNKNOWN)
+  {
+    strcpy (buf, "nntp://");
+    p = strchr (buf, '\0');
+  }
+  strcpy (p, server);
+
+  if ((nntp_parse_url (buf, &acct, file, sizeof (file))) < 0 || *file)
+  {
+    FREE (&buf);
+    mutt_error (_("%s is an invalid newsserver specification!"), server);
+    return NULL;
+  }
+  FREE (&buf);
+
+  conn = mutt_conn_find (NULL, &acct);
+  if (!conn)
+    return NULL;
+
+  mutt_FormatString (file, sizeof (file), NONULL (NewsRc), nntp_format_str, 0, 0);
+  mutt_expand_path (file, sizeof (file));
+
+  serv = (NNTP_SERVER *)conn->data;
+  if (serv)
+  {
+    struct stat sb;
+
+    /* externally modified? */
+    if (serv->stat != stat (file, &sb) || (!serv->stat &&
+       (serv->size != sb.st_size || serv->mtime != sb.st_mtime)))
+    {
+      for (list = serv->list; list; list = list->next)
+      {
+       NNTP_DATA *data = (NNTP_DATA *) list->data;
+
+       if (data)
+       {
+         data->subscribed = 0;
+         data->rc = 0;
+         data->num = 0;
+       }
+      }
+      slurp_newsrc (serv);
+      nntp_clear_cacheindex (serv);
+    }
+
+    if (serv->status == NNTP_BYE)
+      serv->status = NNTP_NONE;
+    nntp_check_newgroups (serv, 0);
+    return serv;
+  }
+
+  /* New newsserver */
+  serv = safe_calloc (1, sizeof (NNTP_SERVER));
+  serv->conn = conn;
+  serv->newsrc = safe_strdup (file);
+  serv->newsgroups = hash_create (1009);
+  slurp_newsrc (serv);                 /* load .newsrc */
+  nntp_parse_cacheindex (serv);                /* load .index */
+  if (option (OPTNEWSCACHE) && serv->cache && nntp_get_cache_all (serv) >= 0)
+    nntp_check_newgroups (serv, 1);
+  else if (nntp_get_active (serv) < 0)
+  {
+    hash_destroy (&serv->newsgroups, nntp_delete_data);
+    for (list = serv->list; list; list = list->next)
+      list->data = NULL;
+    mutt_free_list (&serv->list);
+    FREE (&serv->newsrc);
+    FREE (&serv->cache);
+    FREE (&serv);
+    return NULL;
+  }
+  nntp_clear_cacheindex (serv);
+  conn->data = (void *)serv;
+
+  return serv;
+}
+
+/* 
+ * full status flags are not supported by nntp, but we can fake some
+ * of them.  This is how:
+ * Read = a read message number is in the .newsrc
+ * New = a message is new since we last read this newsgroup
+ * Old = anything else
+ * So, Read is marked as such in the newsrc, old is anything that is 
+ * "skipped" in the newsrc, and new is anything not in the newsrc nor
+ * in the cache. By skipped, I mean before the last unread message
+ */
+void nntp_get_status (CONTEXT *ctx, HEADER *h, char *group, int article)
+{
+  NNTP_DATA *data = (NNTP_DATA *) ctx->data;
+  int x;
+
+  if (group)
+    data = (NNTP_DATA *) hash_find (data->nserv->newsgroups, group);
+
+  if (!data)
+  {
+#ifdef DEBUG
+    if (group)
+      dprint (3, (debugfile, "newsgroup %s not found\n", group));
+#endif
+    return;
+  }
+
+  for (x = 0; x < data->num; x++)
+  {
+    if ((article >= data->entries[x].first) &&
+       (article <= data->entries[x].last))
+    {
+      /* we cannot use mutt_set_flag() because mx_update_context()
+        didn't called yet */
+      h->read = 1;
+      return;
+    }
+  }
+  /* If article was not cached yet, it is new! :) */
+  if (!data->cache || article > data->lastCached)
+    return;
+  /* Old articles are articles which aren't read but an article after them
+   * has been cached */
+  if (option (OPTMARKOLD))
+    h->old = 1;
+}
+
+void mutt_newsgroup_stat (NNTP_DATA *data)
+{
+  int i;
+  unsigned int first, last;
+
+  data->unread = 0;
+  if (data->lastMessage == 0 || data->firstMessage > data->lastMessage)
+    return;
+
+  data->unread = data->lastMessage - data->firstMessage + 1;
+  for (i = 0; i < data->num; i++)
+  {
+    first = data->entries[i].first;
+    if (first < data->firstMessage)
+      first = data->firstMessage;
+    last = data->entries[i].last;
+    if (last > data->lastMessage)
+      last = data->lastMessage;
+    if (first <= last)
+      data->unread -= last - first + 1;
+  }
+}
+
+static int puti (char *line, int num)
+{
+  char *p, s[32];
+
+  for (p = s; num; )
+  {
+    *p++ = '0' + num % 10;
+    num /= 10;
+  }
+  while (p > s)
+    *line++ = *--p, num++;
+  *line = '\0';
+  return num;
+}
+
+static void nntp_create_newsrc_line (NNTP_DATA *data, char **buf, char **pline, size_t *buflen)
+{
+  char *line = *pline;
+  size_t len = *buflen - (*pline - *buf);
+  int x, i;
+
+  if (len < LONG_STRING * 10)
+  {
+    len += *buflen;
+    *buflen *= 2;
+    line = *buf;
+    safe_realloc (buf, *buflen);
+    line = *buf + (*pline - line);
+  }
+  strcpy (line, data->group);
+  len -= strlen (line) + 1;
+  line += strlen (line);
+  *line++ = data->subscribed ? ':' : '!';
+  *line++ = ' ';
+  *line = '\0';
+
+  for (x = 0; x < data->num; x++)
+  {
+    if (len < LONG_STRING)
+    {
+      len += *buflen;
+      *buflen *= 2;
+      *pline = line;
+      line = *buf;
+      safe_realloc (buf, *buflen);
+      line = *buf + (*pline - line);
+    }
+    if (x)
+    {
+      *line++ = ',';
+      len--;
+    }
+
+#if 0
+    if (data->entries[x].first == data->entries[x].last)
+      snprintf (line, len, "%d%n", data->entries[x].first, &i);
+    else
+      snprintf (line, len, "%d-%d%n", 
+           data->entries[x].first, data->entries[x].last, &i);
+    len -= i;
+    line += i;
+#else
+    i = puti (line, data->entries[x].first);
+    line +=i; len -= i;
+    if (data->entries[x].first != data->entries[x].last)
+    {
+      *line++ = '-';
+      len--;
+      i = puti (line, data->entries[x].last);
+      line +=i; len -= i;
+    }
+#endif
+  }
+  *line++ = '\n';
+  *line = '\0';
+  *pline = line;
+}
+
+void newsrc_gen_entries (CONTEXT *ctx)
+{
+  NNTP_DATA *data = (NNTP_DATA *)ctx->data;
+  int series, x;
+  unsigned int last = 0, first = 1;
+  int save_sort = SORT_ORDER;
+
+  if (Sort != SORT_ORDER)
+  {
+    save_sort = Sort;
+    Sort = SORT_ORDER;
+    mutt_sort_headers (ctx, 0);
+  }
+
+  if (!data->max)
+  {
+    data->entries = safe_calloc (5, sizeof (NEWSRC_ENTRY));
+    data->max = 5;
+  }
+
+  /*
+   * Set up to fake initial sequence from 1 to the article before the 
+   * first article in our list
+   */
+  data->num = 0;
+  series = 1;
+
+  for (x = 0; x < ctx->msgcount; x++)
+  {
+    if (series) /* search for first unread */
+    {
+      /*
+       * We don't actually check sequential order, since we mark 
+       * "missing" entries as read/deleted
+       */
+      last = ctx->hdrs[x]->article_num;
+      if (last >= data->firstMessage && !ctx->hdrs[x]->deleted &&
+           !ctx->hdrs[x]->read)
+      {
+       if (data->num >= data->max)
+       {
+         data->max = data->max * 2;
+         safe_realloc (&data->entries, 
+             data->max * sizeof (NEWSRC_ENTRY));
+       }
+       data->entries[data->num].first = first;
+       data->entries[data->num].last = last - 1;
+       data->num++;
+       series = 0;
+      }
+    }
+    else /* search for first read */
+    {
+      if (ctx->hdrs[x]->deleted || ctx->hdrs[x]->read)
+      {
+       first = last + 1;
+       series = 1;
+      }
+      last = ctx->hdrs[x]->article_num;
+    }
+  }
+  if (series && first <= data->lastLoaded)
+  {
+    if (data->num >= data->max)
+    {
+      data->max = data->max * 2;
+      safe_realloc (&data->entries, 
+                   data->max * sizeof (NEWSRC_ENTRY));
+    }
+    data->entries[data->num].first = first;
+    data->entries[data->num].last = data->lastLoaded;
+    data->num++;
+  }
+
+  if (save_sort != Sort)
+  {
+    Sort = save_sort;
+    mutt_sort_headers (ctx, 0);
+  }
+}
+
+int mutt_newsrc_update (NNTP_SERVER *news)
+{
+  char *buf, *line;
+  NNTP_DATA *data;
+  LIST *tmp;
+  int r = -1;
+  size_t len, llen;
+
+  if (!news)
+    return -1;
+  llen = len = 10 * LONG_STRING;
+  line = buf = safe_calloc (1, len);
+  /* we will generate full newsrc here */
+  for (tmp = news->list; tmp; tmp = tmp->next)
+  {
+    data = (NNTP_DATA *) tmp->data;
+    if (!data || !data->rc)
+      continue;
+    nntp_create_newsrc_line (data, &buf, &line, &llen);
+    dprint (2, (debugfile, "Added to newsrc: %s", line));
+    line += strlen (line);
+  }
+  /* newrc being fully rewritten */
+  if (news->newsrc &&
+     (r = mutt_update_list_file (news->newsrc, NULL, "", buf)) == 0)
+  {
+    struct stat st;
+
+    stat (news->newsrc, &st);
+    news->size = st.st_size;
+    news->mtime = st.st_mtime;
+  }
+  FREE (&buf);
+  return r;
+}
+
+static FILE *mutt_mkname (char *s)
+{
+  char buf[_POSIX_PATH_MAX], *pc;
+  int fd;
+  FILE *fp;
+
+  nntp_cache_expand (buf, s);
+  if ((fp = safe_fopen (buf, "w")))
+    return fp;
+
+  nntp_cache_expand (buf, "cache-XXXXXX");
+  pc = buf + strlen (buf) - 12;        /* positioning to "cache-XXXXXX" */
+  if ((fd = mkstemp (buf)) == -1)
+    return NULL;
+  strcpy (s, pc);      /* generated name */
+  return fdopen (fd, "w");
+}
+
+/* Updates info into .index file: ALL or about selected newsgroup */
+static int nntp_update_cacheindex (NNTP_SERVER *serv, NNTP_DATA *data)
+{
+  char buf[LONG_STRING], *key = "ALL";
+  char file[_POSIX_PATH_MAX];
+
+  if (!serv || !serv->conn || !serv->conn->account.host)
+    return -1;
+
+  if (data && data->group)
+  {
+    key = data->group;
+    snprintf (buf, sizeof (buf), "%s %s %d %d", key, data->cache,
+         data->firstMessage, data->lastLoaded);
+  }
+  else
+  {
+    strfcpy (file, serv->cache, sizeof (file));
+    snprintf (buf, sizeof (buf), "ALL %s 0 %d", file, (int)serv->newgroups_time);
+  }
+  nntp_cache_expand (file, ".index");
+  return mutt_update_list_file (file, serv->conn->account.host, key, buf);
+}
+
+/* Remove cache files of unsubscribed newsgroups */
+void nntp_clear_cacheindex (NNTP_SERVER *news)
+{
+  NNTP_DATA *data;
+  LIST *tmp;
+
+  if (option (OPTSAVEUNSUB) || !news)
+    return;
+
+  for (tmp = news->list; tmp; tmp = tmp->next)
+  {
+    data = (NNTP_DATA *) tmp->data;
+    if (!data || data->subscribed || !data->cache)
+      continue;
+    nntp_delete_cache (data);
+    dprint (2, (debugfile, "Removed from .index: %s\n", data->group));
+  }
+  return;
+}
+
+int nntp_save_cache_index (NNTP_SERVER *news)
+{
+  char buf[HUGE_STRING];
+  char file[_POSIX_PATH_MAX];
+  NNTP_DATA *d;
+  FILE *f;
+  LIST *l;
+
+  if (!news || !news->newsgroups)
+    return -1;
+  if (!option (OPTNEWSCACHE))
+    return 0;
+
+  if (news->cache)
+  {
+    nntp_cache_expand (file, news->cache);
+    unlink (file);
+    f = safe_fopen (file, "w");
+  }
+  else
+  {
+    strfcpy (buf, news->conn->account.host, sizeof(buf));
+    f = mutt_mkname (buf);
+    news->cache = safe_strdup (buf);
+    nntp_cache_expand (file, buf);
+  }
+  if (!f)
+    return -1;
+
+  for (l = news->list; l; l = l->next)
+  {
+    if ((d = (NNTP_DATA *)l->data) && !d->deleted)
+    {
+      if (d->desc)
+       snprintf (buf, sizeof(buf), "%s %d %d %c %s\n", d->group,
+             d->lastMessage, d->firstMessage, d->allowed ? 'y' : 'n',
+             d->desc);
+      else
+       snprintf (buf, sizeof(buf), "%s %d %d %c\n", d->group,
+             d->lastMessage, d->firstMessage, d->allowed ? 'y' : 'n');
+      if (fputs (buf, f) == EOF)
+      {
+       fclose (f);
+       unlink (file);
+       return -1;
+      }
+    }
+  }
+  fclose (f);
+
+  if (nntp_update_cacheindex (news, NULL))
+  {
+    unlink (file);
+    return -1;
+  }
+  return 0;
+}
+
+int nntp_save_cache_group (CONTEXT *ctx)
+{
+  char buf[HUGE_STRING], addr[STRING];
+  char file[_POSIX_PATH_MAX];
+  FILE *f;
+  HEADER *h;
+  struct tm *tm;
+  int i = 0, save = SORT_ORDER;
+  int prev = 0;
+
+  if (!option (OPTNEWSCACHE))
+    return 0;
+  if (!ctx || !ctx->data || ctx->magic != M_NNTP)
+    return -1;
+
+  if (((NNTP_DATA *)ctx->data)->cache)
+  {
+    nntp_cache_expand (file, ((NNTP_DATA *)ctx->data)->cache);
+    unlink (file);
+    f = safe_fopen (file, "w");
+  }
+  else
+  {
+    snprintf (buf, sizeof(buf), "%s-%s",
+       ((NNTP_DATA *)ctx->data)->nserv->conn->account.host,
+       ((NNTP_DATA *)ctx->data)->group);
+    f = mutt_mkname (buf);
+    ((NNTP_DATA *)ctx->data)->cache = safe_strdup (buf);
+    nntp_cache_expand (file, buf);
+  }
+  if (!f)
+    return -1;
+
+  if (Sort != SORT_ORDER)
+  {
+    save = Sort;
+    Sort = SORT_ORDER;
+    mutt_sort_headers (ctx, 0);
+  }
+
+  /* Save only $nntp_context messages... */
+  ((NNTP_DATA *)ctx->data)->lastCached = 0;
+  if (NntpContext && ctx->msgcount > NntpContext)
+    i = ctx->msgcount - NntpContext;
+  for (; i < ctx->msgcount; i++)
+  {
+    if (!ctx->hdrs[i]->deleted && ctx->hdrs[i]->article_num != prev)
+    {
+      h = ctx->hdrs[i];
+      addr[0] = 0;
+      rfc822_write_address (addr, sizeof(addr), h->env->from, 0);
+      tm = gmtime (&h->date_sent);
+      snprintf (buf, sizeof(buf),
+           "%d\t%s\t%s\t%d %s %d %02d:%02d:%02d GMT\t%s\t",
+           h->article_num, h->env->subject, addr, tm->tm_mday,
+           Months[tm->tm_mon], tm->tm_year+1900, tm->tm_hour, tm->tm_min,
+           tm->tm_sec, h->env->message_id);
+      fputs (buf, f);
+      if (h->env->references)
+       mutt_write_references (h->env->references, f);
+      snprintf (buf, sizeof(buf), "\t%ld\t%d\tXref: %s\n", h->content->length,
+           h->lines, NONULL(h->env->xref));
+      if (fputs (buf, f) == EOF)
+      {
+       fclose (f);
+       unlink (file);
+       return -1;
+      }
+    }
+    prev = ctx->hdrs[i]->article_num;
+  }
+
+  if (save != Sort)
+  {
+    Sort = save;
+    mutt_sort_headers (ctx, 0);
+  }
+  fclose (f);
+
+  if (nntp_update_cacheindex (((NNTP_DATA *)ctx->data)->nserv,
+       (NNTP_DATA *)ctx->data))
+  {
+    unlink (file);
+    return -1;
+  }
+  ((NNTP_DATA *)ctx->data)->lastCached = ((NNTP_DATA *)ctx->data)->lastLoaded;
+  return 0;
+}
+
+void nntp_delete_cache (NNTP_DATA *data)
+{
+  char buf[_POSIX_PATH_MAX];
+
+  if (!option (OPTNEWSCACHE) || !data || !data->cache || !data->nserv)
+    return;
+
+  nntp_cache_expand (buf, data->cache);
+  unlink (buf);
+  FREE (&data->cache);
+  data->lastCached = 0;
+  nntp_cache_expand (buf, ".index");
+  mutt_update_list_file (buf, data->nserv->conn->account.host, data->group, NULL);
+}
+
+NNTP_DATA *mutt_newsgroup_subscribe (NNTP_SERVER *news, char *group)
+{
+  NNTP_DATA *data;
+
+  if (!news || !news->newsgroups || !group || !*group)
+    return NULL;
+  if (!(data = (NNTP_DATA *)hash_find (news->newsgroups, group)))
+  {
+    data = (NNTP_DATA *) safe_calloc (1, sizeof (NNTP_DATA) + strlen (group) + 1);
+    data->group = (char *) data + sizeof (NNTP_DATA);
+    strcpy (data->group, group);
+    data->nserv = news;
+    data->deleted = 1;
+    if (news->newsgroups->nelem < news->newsgroups->curnelem * 2)
+      news->newsgroups = hash_resize (news->newsgroups, news->newsgroups->nelem * 2);
+    hash_insert (news->newsgroups, data->group, data, 0);
+    nntp_add_to_list (news, data);
+  }
+  if (!data->subscribed)
+  {
+    data->subscribed = 1;
+    data->rc = 1;
+  }
+  return data;
+}
+
+NNTP_DATA *mutt_newsgroup_unsubscribe (NNTP_SERVER *news, char *group)
+{
+  NNTP_DATA *data;
+
+  if (!news || !news->newsgroups || !group || !*group ||
+       !(data = (NNTP_DATA *)hash_find (news->newsgroups, group)))
+    return NULL;
+  if (data->subscribed)
+  {
+    data->subscribed = 0;
+    if (!option (OPTSAVEUNSUB))
+      data->rc = 0;
+  }
+  return data;
+}
+
+NNTP_DATA *mutt_newsgroup_catchup (NNTP_SERVER *news, char *group)
+{
+  NNTP_DATA *data;
+
+  if (!news || !news->newsgroups || !group || !*group ||
+      !(data = (NNTP_DATA *)hash_find (news->newsgroups, group)))
+    return NULL;
+  if (!data->max)
+  {
+    data->entries = safe_calloc (5, sizeof (NEWSRC_ENTRY));
+    data->max = 5;
+  }
+  data->num = 1;
+  data->entries[0].first = 1;
+  data->unread = 0;
+  data->entries[0].last = data->lastMessage;
+  if (Context && Context->data == data)
+  {
+    int x;
+
+    for (x = 0; x < Context->msgcount; x++)
+      mutt_set_flag (Context, Context->hdrs[x], M_READ, 1);
+  }
+  return data;
+}
+
+NNTP_DATA *mutt_newsgroup_uncatchup (NNTP_SERVER *news, char *group)
+{
+  NNTP_DATA *data;
+
+  if (!news || !news->newsgroups || !group || !*group ||
+      !(data = (NNTP_DATA *)hash_find (news->newsgroups, group)))
+    return NULL;
+  if (!data->max)
+  {
+    data->entries = safe_calloc (5, sizeof (NEWSRC_ENTRY));
+    data->max = 5;
+  }
+  data->num = 1;
+  data->entries[0].first = 1;
+  data->entries[0].last = data->firstMessage - 1;
+  if (Context && Context->data == data)
+  {
+    int x;
+
+    data->unread = Context->msgcount;
+    for (x = 0; x < Context->msgcount; x++)
+      mutt_set_flag (Context, Context->hdrs[x], M_READ, 0);
+  }
+  else
+    data->unread = data->lastMessage - data->entries[0].last;
+  return data;
+}
+
+/* this routine gives the first newsgroup with new messages */
+void nntp_buffy (char *s)
+{
+  LIST *list;
+
+  for (list = CurrentNewsSrv->list; list; list = list->next)
+  {
+    NNTP_DATA *data = (NNTP_DATA *) list->data;
+
+    if (data && data->subscribed && data->unread)
+    {
+      if (Context && Context->magic == M_NNTP &&
+         !mutt_strcmp (data->group, ((NNTP_DATA *) Context->data)->group))
+      {
+       unsigned int i, unread = 0;
+
+       for (i = 0; i < Context->msgcount; i++)
+         if (!Context->hdrs[i]->read && !Context->hdrs[i]->deleted)
+           unread++;
+       if (!unread)
+         continue;
+      }
+      strcpy (s, data->group);
+      break;
+    }
+  }
+}
diff --git a/nntp.c b/nntp.c
new file mode 100644 (file)
index 0000000..3926b05
--- /dev/null
+++ b/nntp.c
@@ -0,0 +1,1557 @@
+/*
+ * Copyright (C) 1998 Brandon Long <blong@fiction.net>
+ * Copyright (C) 1999 Andrej Gritsenko <andrej@lucky.net>
+ * Copyright (C) 2000-2002 Vsevolod Volkov <vvv@mutt.org.ua>
+ * 
+ *     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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */ 
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "sort.h"
+#include "mx.h"
+#include "mime.h"
+#include "rfc1524.h"
+#include "rfc2047.h"
+#include "mailbox.h"
+#include "nntp.h"
+
+#ifdef HAVE_PGP
+#include "pgp.h"
+#endif
+
+#ifdef HAVE_SMIME
+#include "smime.h"
+#endif
+
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+
+static unsigned int _checked = 0;
+
+#ifdef DEBUG
+static void nntp_error (const char *where, const char *msg)
+{
+  dprint (1, (debugfile, "nntp_error(): unexpected response in %s: %s\n", where, msg));
+}
+#endif /* DEBUG */
+
+static int nntp_auth (NNTP_SERVER *serv)
+{
+  CONNECTION *conn = serv->conn;
+  char buf[STRING];
+  unsigned char flags = conn->account.flags;
+
+  if (mutt_account_getuser (&conn->account) || !conn->account.user[0] ||
+      mutt_account_getpass (&conn->account) || !conn->account.pass[0])
+  {
+    conn->account.flags = flags;
+    return -2;
+  }
+
+  mutt_message _("Logging in...");
+
+  snprintf (buf, sizeof (buf), "AUTHINFO USER %s\r\n", conn->account.user);
+  mutt_socket_write (conn, buf);
+  if (mutt_socket_readln (buf, sizeof (buf), conn) < 0)
+  {
+    conn->account.flags = flags;
+    return -1;
+  }
+
+#ifdef DEBUG
+  /* don't print the password unless we're at the ungodly debugging level */
+  if (debuglevel < M_SOCK_LOG_FULL)
+    dprint (M_SOCK_LOG_CMD, (debugfile, "> AUTHINFO PASS *\n"));
+#endif
+  snprintf (buf, sizeof (buf), "AUTHINFO PASS %s\r\n", conn->account.pass);
+  mutt_socket_write_d (conn, buf, M_SOCK_LOG_FULL);
+  if (mutt_socket_readln (buf, sizeof (buf), conn) < 0)
+  {
+    conn->account.flags = flags;
+    return -1;
+  }
+
+  if (mutt_strncmp ("281", buf, 3))
+  {
+    conn->account.flags = flags;
+    mutt_error _("Login failed.");
+    sleep (2);
+    return -3;
+  }
+
+  return 0;
+}
+
+static int nntp_connect_error (NNTP_SERVER *serv)
+{
+  serv->status = NNTP_NONE;
+  mutt_socket_close (serv->conn);
+  mutt_error _("Server closed connection!");
+  sleep (2);
+  return -1;
+}
+
+static int nntp_connect_and_auth (NNTP_SERVER *serv)
+{
+  CONNECTION *conn = serv->conn;
+  char buf[STRING];
+  int rc;
+
+  serv->status = NNTP_NONE;
+
+  if (mutt_socket_open (conn) < 0)
+    return -1;
+
+  if (mutt_socket_readln (buf, sizeof (buf), conn) < 0)
+    return nntp_connect_error (serv);
+
+  if (!mutt_strncmp ("200", buf, 3))
+    mutt_message (_("Connected to %s. Posting ok."), conn->account.host);
+  else if (!mutt_strncmp ("201", buf, 3))
+    mutt_message (_("Connected to %s. Posting NOT ok."), conn->account.host);
+  else
+  {
+    mutt_socket_close (conn);
+    mutt_remove_trailing_ws (buf);
+    mutt_error ("%s", buf);
+    sleep (2);
+    return -1;
+  }
+
+  sleep (1);
+
+  /* Tell INN to switch to mode reader if it isn't so. Ignore all
+   returned codes and messages. */
+  mutt_socket_write (conn, "MODE READER\r\n");
+  if (mutt_socket_readln (buf, sizeof (buf), conn) < 0)
+    return nntp_connect_error (serv);
+
+  mutt_socket_write (conn, "STAT\r\n");
+  if (mutt_socket_readln (buf, sizeof (buf), conn) < 0)
+    return nntp_connect_error (serv);
+
+  if (!(conn->account.flags & M_ACCT_USER) && mutt_strncmp ("480", buf, 3))
+  {
+    serv->status = NNTP_OK;
+    return 0;
+  }
+
+  rc = nntp_auth (serv);
+  if (rc == -1)
+    return nntp_connect_error (serv);
+  if (rc == -2)
+  {
+    mutt_socket_close (conn);
+    serv->status = NNTP_BYE;
+    return -1;
+  }
+  if (rc < 0)
+  {
+    mutt_socket_close (conn);
+    mutt_error _("Login failed.");
+    sleep (2);
+    return -1;
+  }
+  serv->status = NNTP_OK;
+  return 0;
+}
+
+static int nntp_attempt_features (NNTP_SERVER *serv)
+{
+  char buf[LONG_STRING];
+  CONNECTION *conn = serv->conn;
+
+  mutt_socket_write (conn, "XOVER\r\n");
+  if (mutt_socket_readln (buf, sizeof (buf), conn) < 0)
+    return nntp_connect_error (serv);
+  if (mutt_strncmp ("500", buf, 3))
+    serv->hasXOVER = 1;
+
+  mutt_socket_write (conn, "XPAT\r\n");
+  if (mutt_socket_readln (buf, sizeof (buf), conn) < 0)
+    return nntp_connect_error (serv);
+  if (mutt_strncmp ("500", buf, 3))
+    serv->hasXPAT = 1;
+
+  mutt_socket_write (conn, "XGTITLE +\r\n");
+  if (mutt_socket_readln (buf, sizeof (buf), conn) < 0)
+    return nntp_connect_error (serv);
+  if (mutt_strncmp ("500", buf, 3))
+    serv->hasXGTITLE = 1;
+
+  if (!mutt_strncmp ("282", buf, 3))
+  {
+    do
+    {
+      if (mutt_socket_readln (buf, sizeof (buf), conn) < 0)
+       return nntp_connect_error (serv);
+    } while (!(buf[0] == '.' && buf[1] == '\0'));
+  }
+
+  return 0;
+}
+
+static int nntp_open_connection (NNTP_SERVER *serv)
+{
+  if (serv->status == NNTP_OK)
+    return 0;
+  if (serv->status == NNTP_BYE)
+    return -1;
+  if (nntp_connect_and_auth (serv) < 0)
+    return -1;
+  if (nntp_attempt_features (serv) < 0)
+    return -1;
+  return 0;
+}
+
+static int nntp_reconnect (NNTP_SERVER *serv)
+{
+  char buf[SHORT_STRING];
+
+  mutt_socket_close (serv->conn);
+
+  FOREVER
+  {
+    if (nntp_connect_and_auth (serv) == 0)
+      return 0;
+
+    snprintf (buf, sizeof (buf), _("Connection to %s lost. Reconnect?"),
+                               serv->conn->account.host);
+    if (query_quadoption (OPT_NNTPRECONNECT, buf) != M_YES)
+    {
+      serv->status = NNTP_BYE;
+      return -1;
+    }
+  }
+}
+
+/* Send data from line[LONG_STRING] and receive answer to same line */
+static int mutt_nntp_query (NNTP_DATA *data, char *line, size_t linelen)
+{
+  char buf[LONG_STRING];
+  int done = TRUE;
+
+  if (data->nserv->status == NNTP_BYE)
+    return -1;
+
+  do
+  {
+    if (*line)
+    {
+      mutt_socket_write (data->nserv->conn, line);
+    }
+    else if (data->group)
+    {
+      snprintf (buf, sizeof (buf), "GROUP %s\r\n", data->group);
+      mutt_socket_write (data->nserv->conn, buf);
+    }
+
+    done = TRUE;
+    if (mutt_socket_readln (buf, sizeof (buf), data->nserv->conn) < 0)
+    {
+      if (nntp_reconnect (data->nserv) < 0)
+       return -1;
+
+      if (data->group)
+      {
+       snprintf (buf, sizeof (buf), "GROUP %s\r\n", data->group);
+       mutt_socket_write (data->nserv->conn, buf);
+       if (mutt_socket_readln (buf, sizeof (buf), data->nserv->conn) < 0)
+         return -1;
+      }
+      if (*line)
+       done = FALSE;
+    }
+    else if ((!mutt_strncmp ("480", buf, 3)) && nntp_auth (data->nserv) < 0)
+      return -1;
+  } while (!done);
+
+  strfcpy (line, buf, linelen);
+  return 0;
+}
+
+/*
+ * This function calls  funct(*line, *data)  for each received line,
+ * funct(NULL, *data)  if  rewind(*data)  needs, exits when fail or done.
+ * Returned codes:
+ *  0 - successful,
+ *  1 - correct but not performed (may be, have to be continued),
+ * -1 - conection lost,
+ * -2 - invalid command or execution error,
+ * -3 - error in funct(*line, *data).
+ */
+static int mutt_nntp_fetch (NNTP_DATA *nntp_data, char *query, char *msg,
+               int (*funct) (char *, void *), void *data, int tagged)
+{
+  char buf[LONG_STRING];
+  char *inbuf, *p;
+  int done = FALSE;
+  int chunk, line;
+  size_t lenbuf = 0;
+  int ret;
+
+  do
+  {
+    strfcpy (buf, query, sizeof (buf));
+    if (mutt_nntp_query (nntp_data, buf, sizeof (buf)) < 0)
+      return -1;
+    if (buf[0] == '5')
+      return -2;
+    if (buf[0] != '2')
+      return 1;
+
+    ret = 0;
+    line = 0;
+    inbuf = safe_malloc (sizeof (buf));
+
+    FOREVER
+    {
+      chunk = mutt_socket_readln_d (buf, sizeof (buf), nntp_data->nserv->conn,
+                                   M_SOCK_LOG_HDR);
+      if (chunk < 0)
+       break;
+
+      p = buf;
+      if (!lenbuf && buf[0] == '.')
+      {
+       if (buf[1] == '\0')
+       {
+         done = TRUE;
+         break;
+       }
+       if (buf[1] == '.')
+         p++;
+      }
+
+      strfcpy (inbuf + lenbuf, p, sizeof (buf));
+
+      if (chunk >= sizeof (buf))
+      {
+       lenbuf += strlen (p);
+      }
+      else
+      {
+       line++;
+       if (msg && ReadInc && (line % ReadInc == 0)) {
+         if (tagged)
+           mutt_message (_("%s (tagged: %d) %d"), msg, tagged, line);
+         else
+           mutt_message ("%s %d", msg, line);
+       }
+
+       if (ret == 0 && funct (inbuf, data) < 0)
+         ret = -3;
+       lenbuf = 0;
+      }
+
+      safe_realloc (&inbuf, lenbuf + sizeof (buf));
+    }
+    FREE (&inbuf);
+    funct (NULL, data);
+  }
+  while (!done);
+  return ret;
+}
+
+static int nntp_read_tempfile (char *line, void *file)
+{
+  FILE *f = (FILE *)file;
+
+  if (!line)
+    rewind (f);
+  else
+  {
+    fputs (line, f);
+    if (fputc ('\n', f) == EOF)
+      return -1;
+  }
+  return 0;
+}
+
+static void nntp_parse_xref (CONTEXT *ctx, char *group, char *xref, HEADER *h)
+{
+  register char *p, *b;
+  register char *colon = NULL;
+
+  b = p = xref;
+  while (*p)
+  {
+    /* skip to next word */
+    b = p;
+    while (*b && ((*b == ' ') || (*b == '\t'))) b++;
+    p = b;
+    colon = NULL;
+    /* skip to end of word */
+    while (*p && (*p != ' ') && (*p != '\t')) 
+    {
+      if (*p == ':')
+       colon = p;
+      p++;
+    }
+    if (*p)
+    {
+      *p = '\0';
+      p++;
+    }
+    if (colon)
+    {
+      *colon = '\0';
+      colon++;
+      nntp_get_status (ctx, h, p, atoi(colon));
+      if (h && h->article_num == 0 && mutt_strcmp (group, b) == 0)
+       h->article_num = atoi(colon);
+    }
+  }
+}
+
+/*
+ * returns:
+ *  0 on success
+ *  1 if article not found
+ * -1 if read or write error on tempfile or socket
+ */
+static int nntp_read_header (CONTEXT *ctx, const char *msgid, int article_num)
+{
+  NNTP_DATA *nntp_data = ((NNTP_DATA *)ctx->data);
+  FILE *f;
+  char buf[LONG_STRING];
+  char tempfile[_POSIX_PATH_MAX];
+  int ret;
+  HEADER *h = ctx->hdrs[ctx->msgcount];
+
+  mutt_mktemp (tempfile);
+  if (!(f = safe_fopen (tempfile, "w+")))
+    return -1;
+
+  if (!msgid)
+    snprintf (buf, sizeof (buf), "HEAD %d\r\n", article_num);
+  else
+    snprintf (buf, sizeof (buf), "HEAD %s\r\n", msgid);
+
+  ret = mutt_nntp_fetch (nntp_data, buf, NULL, nntp_read_tempfile, f, 0);
+  if (ret)
+  {
+#ifdef DEBUG
+    if (ret != -1)
+      dprint(1, (debugfile, "nntp_read_header: %s\n", buf));
+#endif
+    fclose (f);
+    unlink (tempfile);
+    return (ret == -1 ? -1 : 1);
+  }
+
+  h->article_num = article_num;
+  h->env = mutt_read_rfc822_header (f, h, 0, 0);
+  fclose (f);
+  unlink (tempfile);
+
+  if (h->env->xref != NULL)
+    nntp_parse_xref (ctx, nntp_data->group, h->env->xref, h);
+  else if (h->article_num == 0 && msgid)
+  {
+    snprintf (buf, sizeof (buf), "STAT %s\r\n", msgid);
+    if (mutt_nntp_query (nntp_data, buf, sizeof (buf)) == 0)
+      h->article_num = atoi (buf + 4);
+  }
+
+  return 0;
+}
+
+static int parse_description (char *line, void *n)
+{
+#define news ((NNTP_SERVER *) n)
+  register char *d = line;
+  NNTP_DATA *data;
+
+  if (!line)
+    return 0;
+  while (*d && *d != '\t' && *d != ' ') d++;
+    *d = 0;
+  d++;
+  while (*d && (*d == '\t' || *d == ' ')) d++;
+  dprint (2, (debugfile, "group: %s, desc: %s\n", line, d));
+  if ((data = (NNTP_DATA *) hash_find (news->newsgroups, line)) != NULL &&
+       mutt_strcmp (d, data->desc))
+  {
+    FREE (&data->desc);
+    data->desc = safe_strdup (d);
+  }
+  return 0;
+#undef news
+}
+
+static void nntp_get_desc (NNTP_DATA *data, char *mask, char *msg)
+{
+  char buf[STRING];
+
+  if (!option (OPTLOADDESC) || !data || !data->nserv)
+    return;
+
+  /* Get newsgroup description, if we can */
+  if (data->nserv->hasXGTITLE)
+    snprintf (buf, sizeof (buf), "XGTITLE %s\r\n", mask);
+  else
+    snprintf (buf, sizeof (buf), "LIST NEWSGROUPS %s\r\n", mask);
+  if (mutt_nntp_fetch (data, buf, msg, parse_description, data->nserv, 0) != 0)
+  {
+#ifdef DEBUG
+    nntp_error ("nntp_get_desc()", buf);
+#endif
+  }
+}
+
+/*
+ * XOVER returns a tab separated list of:
+ * id|subject|from|date|Msgid|references|bytes|lines|xref
+ *
+ * This has to duplicate some of the functionality of 
+ * mutt_read_rfc822_header(), since it replaces the call to that (albeit with
+ * a limited number of headers which are "parsed" by placement in the list)
+ */
+static int nntp_parse_xover (CONTEXT *ctx, char *buf, HEADER *hdr)
+{
+  NNTP_DATA *nntp_data = (NNTP_DATA *) ctx->data;
+  char *p, *b;
+  int x, done = 0;
+
+  hdr->env = mutt_new_envelope();
+  hdr->env->newsgroups = safe_strdup (nntp_data->group);
+  hdr->content = mutt_new_body();
+  hdr->content->type = TYPETEXT;
+  hdr->content->subtype = safe_strdup ("plain");
+  hdr->content->encoding = ENC7BIT;
+  hdr->content->disposition = DISPINLINE;
+  hdr->content->length = -1;
+  b = p = buf;
+
+  for (x = 0; !done && x < 9; x++)
+  {
+    /* if from file, need to skip newline character */
+    while (*p && *p != '\n' && *p != '\t') p++;
+    if (!*p) done++;
+    *p = '\0';
+    p++;
+    switch (x)
+    {
+      case 0:
+
+       hdr->article_num = atoi (b);
+       nntp_get_status (ctx, hdr, NULL, hdr->article_num);
+       break;
+      case 1:
+       hdr->env->subject = safe_strdup (b);
+       /* Now we need to do the things which would normally be done in 
+        * mutt_read_rfc822_header() */
+       if (hdr->env->subject)
+       {
+         regmatch_t pmatch[1];
+
+         rfc2047_decode (&hdr->env->subject);
+
+         if (regexec (ReplyRegexp.rx, hdr->env->subject, 1, pmatch, 0) == 0)
+           hdr->env->real_subj = hdr->env->subject + pmatch[0].rm_eo;
+         else
+           hdr->env->real_subj = hdr->env->subject;
+       }
+       break;
+      case 2:
+       rfc822_free_address (&hdr->env->from);
+       hdr->env->from = rfc822_parse_adrlist (hdr->env->from, b);
+       rfc2047_decode_adrlist (hdr->env->from);
+       break;
+      case 3:
+       hdr->date_sent = mutt_parse_date (b, hdr);
+       hdr->received = hdr->date_sent;
+       break;
+      case 4:
+       FREE (&hdr->env->message_id);
+       hdr->env->message_id = safe_strdup (b);
+       break;
+      case 5:
+       mutt_free_list (&hdr->env->references);
+       hdr->env->references = mutt_parse_references (b, 0);
+       break;
+      case 6:
+       hdr->content->length = atoi (b);
+       break;
+      case 7:
+       hdr->lines = atoi (b);
+       break;
+      case 8:
+       if (!hdr->read)
+         FREE (&hdr->env->xref);
+         b = b + 6;    /* skips the "Xref: " */
+         hdr->env->xref = safe_strdup (b);
+         nntp_parse_xref (ctx, nntp_data->group, b, hdr);
+    }
+    if (!*p)
+      return -1;
+    b = p;
+  }
+  return 0;
+}
+
+typedef struct
+{
+  CONTEXT *ctx;
+  unsigned int base;
+  unsigned int first;
+  unsigned int last;
+  unsigned short *messages;
+  char* msg;
+} FETCH_CONTEXT;
+
+#define fc ((FETCH_CONTEXT *) c)
+static int nntp_fetch_numbers (char *line, void *c)
+{
+  unsigned int num;
+
+  if (!line)
+    return 0;
+  num = atoi (line);
+  if (num < fc->base || num > fc->last)
+    return 0;
+  fc->messages[num - fc->base] = 1;
+  return 0;
+}
+
+static int add_xover_line (char *line, void *c)
+{
+  unsigned int num, total;
+  CONTEXT *ctx = fc->ctx;
+  NNTP_DATA *data = (NNTP_DATA *)ctx->data;
+
+  if (!line)
+    return 0;
+
+  if (ctx->msgcount >= ctx->hdrmax)
+    mx_alloc_memory (ctx);
+  ctx->hdrs[ctx->msgcount] = mutt_new_header ();
+  ctx->hdrs[ctx->msgcount]->index = ctx->msgcount;
+
+  nntp_parse_xover (ctx, line, ctx->hdrs[ctx->msgcount]);
+  num = ctx->hdrs[ctx->msgcount]->article_num;
+
+  if (num >= fc->first && num <= fc->last && fc->messages[num - fc->base])
+  {
+    ctx->msgcount++;
+    if (num > data->lastLoaded)
+      data->lastLoaded = num;
+    num = num - fc->first + 1;
+    total = fc->last - fc->first + 1;
+    if (!ctx->quiet && fc->msg && ReadInc && (num % ReadInc == 0))
+      mutt_message ("%s %d/%d", fc->msg, num, total);
+  }
+  else
+    mutt_free_header (&ctx->hdrs[ctx->msgcount]); /* skip it */
+
+  return 0;
+}
+#undef fc
+
+static int nntp_fetch_headers (CONTEXT *ctx, unsigned int first,
+       unsigned int last)
+{
+  char buf[HUGE_STRING];
+  char *msg = _("Fetching message headers...");
+  NNTP_DATA *nntp_data = ((NNTP_DATA *)ctx->data);
+  int ret;
+  int num;
+  int oldmsgcount;
+  unsigned int current;
+  FILE *f;
+  FETCH_CONTEXT fc;
+
+  /* if empty group or nothing to do */
+  if (!last || first > last)
+    return 0;
+
+  /* fetch list of articles */
+  mutt_message _("Fetching list of articles...");
+  fc.ctx = ctx;
+  fc.base = first;
+  fc.last = last;
+  fc.messages = safe_calloc (last - first + 1, sizeof (unsigned short));
+  snprintf (buf, sizeof (buf), "LISTGROUP %s\r\n", nntp_data->group);
+  if (mutt_nntp_fetch (nntp_data, buf, NULL, nntp_fetch_numbers, &fc, 0) != 0)
+  {
+    mutt_error (_("LISTGROUP command failed: %s"), buf);
+#ifdef DEBUG
+    nntp_error ("nntp_fetch_headers()", buf);
+#endif
+    FREE (&fc.messages);
+    return -1;
+  }
+
+  /* CACHE: must be loaded xover cache here */
+  num = nntp_data->lastCached - first + 1;
+  if (option (OPTNEWSCACHE) && nntp_data->cache && num > 0)
+  {
+    nntp_cache_expand (buf, nntp_data->cache);
+    mutt_message _("Fetching headers from cache...");
+    if ((f = safe_fopen (buf, "r")))
+    {
+      int r = 0;
+
+      /* counting number of lines */
+      while (fgets (buf, sizeof (buf), f) != NULL)
+       r++;
+      rewind (f);
+      while (r > num && fgets (buf, sizeof (buf), f) != NULL)
+       r--;
+      oldmsgcount = ctx->msgcount;
+      fc.first = first;
+      fc.last = first + num - 1;
+      fc.msg = NULL;
+      while (fgets (buf, sizeof (buf), f) != NULL)
+       add_xover_line (buf, &fc);
+      fclose (f);
+      nntp_data->lastLoaded = fc.last;
+      first = fc.last + 1;
+      if (ctx->msgcount > oldmsgcount)
+       mx_update_context (ctx, ctx->msgcount - oldmsgcount);
+    }
+    else
+      nntp_delete_cache (nntp_data);
+  }
+  num = last - first + 1;
+  if (num <= 0)
+  {
+    FREE (&fc.messages);
+    return 0;
+  }
+
+  /*
+   * Without XOVER, we have to fetch each article header and parse
+   * it.  With XOVER, we ask for all of them
+   */
+  mutt_message (msg);
+  if (nntp_data->nserv->hasXOVER)
+  {
+    oldmsgcount = ctx->msgcount;
+    fc.first = first;
+    fc.last = last;
+    fc.msg = msg;
+    snprintf (buf, sizeof (buf), "XOVER %d-%d\r\n", first, last);
+    ret = mutt_nntp_fetch (nntp_data, buf, NULL, add_xover_line, &fc, 0);
+    if (ctx->msgcount > oldmsgcount)
+      mx_update_context (ctx, ctx->msgcount - oldmsgcount);
+    if (ret != 0)
+    {
+      mutt_error (_("XOVER command failed: %s"), buf);
+#ifdef DEBUG
+      nntp_error ("nntp_fetch_headers()", buf);
+#endif
+      FREE (&fc.messages);
+      return -1;
+    }
+    /* fetched OK */
+  }
+  else
+  for (current = first; current <= last; current++)
+  {
+    HEADER *h;
+
+    ret = current - first + 1;
+    mutt_message ("%s %d/%d", msg, ret, num);
+
+    if (!fc.messages[current - fc.base])
+      continue;
+
+    if (ctx->msgcount >= ctx->hdrmax)
+      mx_alloc_memory (ctx);
+    h = ctx->hdrs[ctx->msgcount] = mutt_new_header ();
+    h->index = ctx->msgcount;
+
+    ret = nntp_read_header (ctx, NULL, current);
+    if (ret == 0) /* Got article. Fetch next header */
+    {
+      nntp_get_status (ctx, h, NULL, h->article_num);
+      ctx->msgcount++;
+      mx_update_context (ctx, 1);
+    }
+    else
+      mutt_free_header (&h); /* skip it */
+    if (ret == -1)
+    {
+      FREE (&fc.messages);
+      return -1;
+    }
+
+    if (current > nntp_data->lastLoaded)
+      nntp_data->lastLoaded = current;
+  }
+  FREE (&fc.messages);
+  nntp_data->lastLoaded = last;
+  mutt_clear_error ();
+  return 0;
+}
+
+/* 
+ * currently, nntp "mailbox" is "newsgroup"
+ */
+int nntp_open_mailbox (CONTEXT *ctx)
+{
+  NNTP_DATA *nntp_data;
+  NNTP_SERVER *serv;
+  char buf[HUGE_STRING];
+  char server[LONG_STRING];
+  int count = 0;
+  unsigned int first;
+  ACCOUNT acct;
+
+  if (nntp_parse_url (ctx->path, &acct, buf, sizeof (buf)) < 0 || !*buf)
+  {
+    mutt_error (_("%s is an invalid newsgroup specification!"), ctx->path);
+    mutt_sleep (2);
+    return -1;
+  }
+
+  server[0] = '\0';
+  nntp_expand_path (server, sizeof (server), &acct);
+  if (!(serv = mutt_select_newsserver (server)) || serv->status != NNTP_OK)
+    return -1;
+
+  CurrentNewsSrv = serv;
+
+  /* create NNTP-specific state struct if nof found in list */
+  if ((nntp_data = (NNTP_DATA *) hash_find (serv->newsgroups, buf)) == NULL)
+  {
+    nntp_data = safe_calloc (1, sizeof (NNTP_DATA) + strlen (buf) + 1);
+    nntp_data->group = (char *) nntp_data + sizeof (NNTP_DATA);
+    strcpy (nntp_data->group, buf);
+    hash_insert (serv->newsgroups, nntp_data->group, nntp_data, 0);
+    nntp_add_to_list (serv, nntp_data);
+  }
+  ctx->data = nntp_data;
+  nntp_data->nserv = serv;
+
+  mutt_message (_("Selecting %s..."), nntp_data->group);
+
+  if (!nntp_data->desc)
+  {
+    nntp_get_desc (nntp_data, nntp_data->group, NULL);
+    if (nntp_data->desc)
+      nntp_save_cache_index (serv);
+  }
+
+  buf[0] = 0;
+  if (mutt_nntp_query (nntp_data, buf, sizeof(buf)) < 0)
+  {
+#ifdef DEBUG
+    nntp_error ("nntp_open_mailbox()", buf);
+#endif
+    return -1;
+  }
+
+  if (mutt_strncmp ("211", buf, 3))
+  {
+    LIST *l = serv->list;
+
+    /* GROUP command failed */
+    if (!mutt_strncmp ("411", buf, 3))
+    {
+      mutt_error (_("Newsgroup %s not found on server %s"),
+                   nntp_data->group, serv->conn->account.host);
+
+      /* CACHE: delete cache and line from .index */
+      nntp_delete_cache (nntp_data);
+      hash_delete (serv->newsgroups, nntp_data->group, NULL, nntp_delete_data);
+      while (l && l->data != (void *) nntp_data) l = l->next;
+      if (l)
+       l->data = NULL;
+
+      sleep (2);
+    }
+
+    return -1;
+  }
+
+  sscanf (buf + 4, "%d %u %u %s", &count, &nntp_data->firstMessage, 
+         &nntp_data->lastMessage, buf);
+
+  nntp_data->deleted = 0;
+
+  time (&serv->check_time);
+
+  /*
+   * Check for max adding context. If it is greater than $nntp_context,
+   * strip off extra articles
+   */
+  first = nntp_data->firstMessage;
+  if (NntpContext && nntp_data->lastMessage - first + 1 > NntpContext)
+    first = nntp_data->lastMessage - NntpContext + 1;
+  if (first)
+    nntp_data->lastLoaded = first - 1;
+  return nntp_fetch_headers (ctx, first, nntp_data->lastMessage);
+}
+
+int nntp_fetch_message (MESSAGE *msg, CONTEXT *ctx, int msgno)
+{
+  char buf[LONG_STRING];
+  char path[_POSIX_PATH_MAX];
+  NNTP_CACHE *cache;
+  char *m = _("Fetching message...");
+  int ret;
+
+  /* see if we already have the message in our cache */
+  cache = &((NNTP_DATA *) ctx->data)->acache[ctx->hdrs[msgno]->index % NNTP_CACHE_LEN];
+
+  /* if everything is fine, assign msg->fp and return */
+  if (cache->path && cache->index == ctx->hdrs[msgno]->index &&
+      (msg->fp = fopen (cache->path, "r")))
+    return 0;
+
+  /* clear the previous entry */
+  unlink (cache->path);
+  free (cache->path);
+
+  mutt_message (m);
+
+  cache->index = ctx->hdrs[msgno]->index;
+  mutt_mktemp (path);
+  cache->path = safe_strdup (path);
+  if (!(msg->fp = safe_fopen (path, "w+")))
+  {
+    FREE (&cache->path);
+    return -1;
+  }
+
+  if (ctx->hdrs[msgno]->article_num == 0)
+    snprintf (buf, sizeof (buf), "ARTICLE %s\r\n",
+         ctx->hdrs[msgno]->env->message_id);
+  else
+    snprintf (buf, sizeof (buf), "ARTICLE %d\r\n",
+         ctx->hdrs[msgno]->article_num);
+
+  ret = mutt_nntp_fetch ((NNTP_DATA *)ctx->data, buf, m, nntp_read_tempfile,
+       msg->fp, ctx->tagged);
+  if (ret == 1)
+  {
+    mutt_error (_("Article %d not found on server"), 
+         ctx->hdrs[msgno]->article_num);
+    dprint (1, (debugfile, "nntp_fetch_message: %s\n", buf));
+  }
+
+  if (ret)
+  {
+    fclose (msg->fp);
+    unlink (path);
+    FREE (&cache->path);
+    return -1;
+  }
+
+  mutt_free_envelope (&ctx->hdrs[msgno]->env);
+  ctx->hdrs[msgno]->env = mutt_read_rfc822_header (msg->fp, ctx->hdrs[msgno], 0, 0);
+  /* fix content length */
+  fseek(msg->fp, 0, SEEK_END);
+  ctx->hdrs[msgno]->content->length = ftell (msg->fp) - 
+                                        ctx->hdrs[msgno]->content->offset;
+
+  /* this is called in mutt before the open which fetches the message, 
+   * which is probably wrong, but we just call it again here to handle
+   * the problem instead of fixing it.
+   */
+  mutt_parse_mime_message (ctx, ctx->hdrs[msgno]);
+
+  /* These would normally be updated in mx_update_context(), but the 
+   * full headers aren't parsed with XOVER, so the information wasn't
+   * available then.
+   */
+#if defined(HAVE_PGP) || defined(HAVE_SMIME)
+  ctx->hdrs[msgno]->security = crypt_query (ctx->hdrs[msgno]->content);
+#endif /* HAVE_PGP || HAVE_SMIME */
+
+  mutt_clear_error();
+  rewind (msg->fp);
+
+  return 0;
+}
+
+/* Post article */
+int nntp_post (const char *msg) {
+  char buf[LONG_STRING];
+  size_t len;
+  FILE *f;
+  NNTP_DATA *nntp_data;
+
+  if (Context && Context->magic == M_NNTP)
+    nntp_data = (NNTP_DATA *)Context->data;
+  else
+  {
+    if (!(CurrentNewsSrv = mutt_select_newsserver (NewsServer)) ||
+       !CurrentNewsSrv->list || !CurrentNewsSrv->list->data)
+    {
+      mutt_error (_("Can't post article. No connection to news server."));
+      return -1;
+    }
+    nntp_data = (NNTP_DATA *)CurrentNewsSrv->list->data;
+  }
+
+  if (!(f = safe_fopen (msg, "r")))
+  {
+    mutt_error (_("Can't post article. Unable to open %s"), msg);
+    return -1;
+  }
+
+  strfcpy (buf, "POST\r\n", sizeof (buf));
+  if (mutt_nntp_query (nntp_data, buf, sizeof (buf)) < 0)
+  {
+    mutt_error (_("Can't post article. Connection to %s lost."),
+               nntp_data->nserv->conn->account.host);
+    return -1;
+  }
+  if (buf[0] != '3')
+  {
+    mutt_error (_("Can't post article: %s"), buf);
+    return -1;
+  }
+
+  buf[0] = '.';
+  buf[1] = '\0';
+  while (fgets (buf + 1, sizeof (buf) - 2, f) != NULL)
+  {
+    len = strlen (buf);
+    if (buf[len - 1] == '\n')
+    {
+      buf[len - 1] = '\r';
+      buf[len] = '\n';
+      len++;
+      buf[len] = '\0';
+    }
+    if (buf[1] == '.')
+      mutt_socket_write_d (nntp_data->nserv->conn, buf, M_SOCK_LOG_HDR);
+    else
+      mutt_socket_write_d (nntp_data->nserv->conn, buf + 1, M_SOCK_LOG_HDR);
+  }
+  fclose (f);
+
+  if (buf[strlen (buf) - 1] != '\n')
+    mutt_socket_write_d (nntp_data->nserv->conn, "\r\n", M_SOCK_LOG_HDR);
+  mutt_socket_write_d (nntp_data->nserv->conn, ".\r\n", M_SOCK_LOG_HDR);
+  if (mutt_socket_readln (buf, sizeof (buf), nntp_data->nserv->conn) < 0)
+  {
+    mutt_error (_("Can't post article. Connection to %s lost."),
+               nntp_data->nserv->conn->account.host);
+    return -1;
+  }
+  if (buf[0] != '2')
+  {
+    mutt_error (_("Can't post article: %s"), buf);
+    return -1;
+  }
+
+  return 0;
+}
+
+/* nntp_logout_all: close all open connections. */
+void nntp_logout_all (void)
+{
+  char buf[LONG_STRING];
+  CONNECTION* conn;
+  CONNECTION* tmp;
+
+  conn = mutt_socket_head ();
+
+  while (conn)
+  {
+    tmp = conn;
+
+    if (conn->account.type == M_ACCT_TYPE_NNTP)
+    {
+      mutt_message (_("Closing connection to %s..."), conn->account.host);
+      mutt_socket_write (conn, "QUIT\r\n");
+      mutt_socket_readln (buf, sizeof (buf), conn);
+      mutt_clear_error ();
+      mutt_socket_close (conn);
+
+      mutt_socket_free (tmp);
+    }
+
+    conn = conn->next;
+  }
+}
+
+static void nntp_free_acache (NNTP_DATA *data)
+{
+  int i;
+
+  for (i = 0; i < NNTP_CACHE_LEN; i++)
+  {
+    if (data->acache[i].path)
+    {
+      unlink (data->acache[i].path);
+      FREE (&data->acache[i].path);
+    }
+  }
+}
+
+void nntp_delete_data (void *p)
+{
+  NNTP_DATA *data = (NNTP_DATA *)p;
+
+  if (!p)
+    return;
+  FREE (&data->entries);
+  FREE (&data->desc);
+  FREE (&data->cache);
+  nntp_free_acache (data);
+  FREE (p);
+}
+
+int nntp_sync_mailbox (CONTEXT *ctx)
+{
+  NNTP_DATA *data = ctx->data;
+
+  /* CACHE: update cache and .index files */
+  if ((option (OPTSAVEUNSUB) || data->subscribed))
+    nntp_save_cache_group (ctx);
+  nntp_free_acache (data);
+
+  data->nserv->check_time = 0; /* next nntp_check_mailbox() will really check */
+  return 0;
+}
+
+void nntp_fastclose_mailbox (CONTEXT *ctx)
+{
+  NNTP_DATA *data = (NNTP_DATA *) ctx->data, *tmp;
+
+  if (!data)
+    return;
+  nntp_free_acache (data);
+  if (!data->nserv || !data->nserv->newsgroups || !data->group)
+    return;
+  nntp_save_cache_index (data->nserv);
+  if ((tmp = hash_find (data->nserv->newsgroups, data->group)) == NULL
+       || tmp != data)
+    nntp_delete_data (data);
+}
+
+/* commit changes and terminate connection */
+int nntp_close_mailbox (CONTEXT *ctx)
+{
+  if (!ctx)
+    return -1;
+  mutt_message _("Quitting newsgroup...");
+  if (ctx->data)
+  {
+    NNTP_DATA *data = (NNTP_DATA *) ctx->data;
+    int ret;
+
+    if (data->nserv && data->nserv->conn && ctx->unread)
+    {
+      ret = query_quadoption (OPT_CATCHUP, _("Mark all articles read?"));
+      if (ret == M_YES)
+       mutt_newsgroup_catchup (data->nserv, data->group);
+      else if (ret < 0)
+       return -1;
+    }
+  }
+  nntp_sync_mailbox (ctx);
+  if (ctx->data && ((NNTP_DATA *)ctx->data)->nserv)
+  {
+    NNTP_SERVER *news;
+
+    news = ((NNTP_DATA *)ctx->data)->nserv;
+    newsrc_gen_entries (ctx);
+    ((NNTP_DATA *)ctx->data)->unread = ctx->unread;
+    mutt_newsrc_update (news);
+  }
+  mutt_clear_error();
+  return 0;
+}
+
+/* use the GROUP command to poll for new mail */
+static int _nntp_check_mailbox (CONTEXT *ctx, NNTP_DATA *nntp_data)
+{
+  char buf[LONG_STRING];
+  int count = 0;
+
+  if (nntp_data->nserv->check_time + NewsPollTimeout > time (NULL))
+    return 0;
+
+  buf[0] = 0;
+  if (mutt_nntp_query (nntp_data, buf, sizeof (buf)) < 0)
+  {
+#ifdef DEBUG
+    nntp_error ("nntp_check_mailbox()", buf);
+#endif
+    return -1;
+  }
+  if (mutt_strncmp ("211", buf, 3))
+  {
+    buf[0] = 0;
+    if (mutt_nntp_query (nntp_data, buf, sizeof (buf)) < 0)
+    {
+#ifdef DEBUG
+      nntp_error ("nntp_check_mailbox()", buf);
+#endif
+      return -1;
+    }
+  }
+  if (!mutt_strncmp ("211", buf, 3))
+  {
+    int first;
+    int last;
+
+    sscanf (buf + 4, "%d %d %d", &count, &first, &last);
+    nntp_data->firstMessage = first;
+    nntp_data->lastMessage = last;
+    if (ctx && last > nntp_data->lastLoaded)
+    {
+      nntp_fetch_headers (ctx, nntp_data->lastLoaded + 1, last);
+      time (&nntp_data->nserv->check_time);
+      return 1;
+    }
+    if (!last || (!nntp_data->rc && !nntp_data->lastCached))
+      nntp_data->unread = count;
+    else
+      mutt_newsgroup_stat (nntp_data);
+    /* active was renumbered? */
+    if (last < nntp_data->lastLoaded)
+    {
+      if (!nntp_data->max)
+      {
+       nntp_data->entries = safe_calloc (5, sizeof (NEWSRC_ENTRY));
+       nntp_data->max = 5;
+      }
+      nntp_data->lastCached = 0;
+      nntp_data->num = 1;
+      nntp_data->entries[0].first = 1;
+      nntp_data->entries[0].last = 0;
+    }
+  }
+
+  time (&nntp_data->nserv->check_time);
+  return 0;
+}
+
+int nntp_check_mailbox (CONTEXT *ctx)
+{
+  return _nntp_check_mailbox (ctx, (NNTP_DATA *)ctx->data);
+}
+
+static int add_group (char *buf, void *serv)
+{
+#define s ((NNTP_SERVER *) serv)
+  char group[LONG_STRING], mod, desc[HUGE_STRING];
+  int first, last;
+  NNTP_DATA *nntp_data;
+  static int n = 0;
+
+  _checked = n;        /* _checked have N, where N = number of groups */
+  if (!buf)    /* at EOF must be zerouth */
+    n = 0;
+
+  if (!s || !buf)
+    return 0;
+
+  *desc = 0;
+  sscanf (buf, "%s %d %d %c %[^\n]", group, &last, &first, &mod, desc);
+  if (!group)
+    return 0;
+  if ((nntp_data = (NNTP_DATA *) hash_find (s->newsgroups, group)) == NULL)
+  {
+    n++;
+    nntp_data = safe_calloc (1, sizeof (NNTP_DATA) + strlen (group) + 1);
+    nntp_data->group = (char *) nntp_data + sizeof (NNTP_DATA);
+    strcpy (nntp_data->group, group);
+    nntp_data->nserv = s;
+    if (s->newsgroups->nelem < s->newsgroups->curnelem * 2)
+      s->newsgroups = hash_resize (s->newsgroups, s->newsgroups->nelem * 2);
+    hash_insert (s->newsgroups, nntp_data->group, nntp_data, 0);
+    nntp_add_to_list (s, nntp_data);
+  }
+  nntp_data->deleted = 0;
+  nntp_data->firstMessage = first;
+  nntp_data->lastMessage = last;
+  if (mod == 'y')
+    nntp_data->allowed = 1;
+  else
+    nntp_data->allowed = 0;
+  if (nntp_data->desc)
+    FREE (&nntp_data->desc);
+  if (*desc)
+    nntp_data->desc = safe_strdup (desc);
+  if (nntp_data->rc || nntp_data->lastCached)
+    mutt_newsgroup_stat (nntp_data);
+  else if (nntp_data->lastMessage &&
+       nntp_data->firstMessage <= nntp_data->lastMessage)
+    nntp_data->unread = nntp_data->lastMessage - nntp_data->firstMessage + 1;
+  else
+    nntp_data->unread = 0;
+
+  return 0;
+#undef s
+}
+
+int nntp_check_newgroups (NNTP_SERVER *serv, int force)
+{
+  char buf[LONG_STRING];
+  NNTP_DATA nntp_data;
+  LIST *l;
+  LIST emp;
+  time_t now;
+  struct tm *t;
+
+  if (!serv || !serv->newgroups_time)
+    return -1;
+
+  if (nntp_open_connection (serv) < 0)
+    return -1;
+
+  /* check subscribed groups for new news */
+  if (option (OPTSHOWNEWNEWS))
+  {
+    mutt_message _("Checking for new messages...");
+    for (l = serv->list; l; l = l->next)
+    {
+      serv->check_time = 0;    /* really check! */
+      if (l->data && ((NNTP_DATA *) l->data)->subscribed)
+       _nntp_check_mailbox (NULL, (NNTP_DATA *) l->data);
+    }
+  }
+  else if (!force)
+    return 0;
+
+  mutt_message _("Checking for new newsgroups...");
+  now = serv->newgroups_time;
+  time (&serv->newgroups_time);
+  t = gmtime (&now);
+  snprintf (buf, sizeof (buf), "NEWGROUPS %02d%02d%02d %02d%02d%02d GMT\r\n",
+       (t->tm_year % 100), t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min,
+       t->tm_sec);
+  nntp_data.nserv = serv;
+  if (Context && Context->magic == M_NNTP)
+    nntp_data.group = ((NNTP_DATA *)Context->data)->group;
+  else
+    nntp_data.group = NULL;
+  l = serv->tail;
+  if (mutt_nntp_fetch (&nntp_data, buf, _("Adding new newsgroups..."),
+       add_group, serv, 0) != 0)
+  {
+#ifdef DEBUG
+    nntp_error ("nntp_check_newgroups()", buf);
+#endif
+    return -1;
+  }
+
+  mutt_message _("Loading descriptions...");
+  if (l)
+    emp.next = l->next;
+  else
+    emp.next = serv->list;
+  l = &emp;
+  while (l->next)
+  {
+    l = l->next;
+    ((NNTP_DATA *) l->data)->new = 1;
+    nntp_get_desc ((NNTP_DATA *) l->data, ((NNTP_DATA *) l->data)->group, NULL);
+  }
+  if (emp.next)
+    nntp_save_cache_index (serv);
+  mutt_clear_error ();
+  return _checked;
+}
+
+/* Load list of all newsgroups from cache ALL */
+int nntp_get_cache_all (NNTP_SERVER *serv)
+{
+  char buf[HUGE_STRING];
+  FILE *f;
+
+  nntp_cache_expand (buf, serv->cache);
+  if ((f = safe_fopen (buf, "r")))
+  {
+    int i = 0;
+
+    while (fgets (buf, sizeof(buf), f) != NULL)
+    {
+      if (ReadInc && (i % ReadInc == 0))
+       mutt_message (_("Loading list from cache... %d"), i);
+      add_group (buf, serv);
+      i++;
+    }
+    add_group (NULL, NULL);
+    fclose (f);
+    mutt_clear_error ();
+    return 0;
+  }
+  else
+  {
+    FREE (&serv->cache);
+    return -1;
+  }
+}
+
+/* Load list of all newsgroups from active */
+int nntp_get_active (NNTP_SERVER *serv)
+{
+  char msg[SHORT_STRING];
+  NNTP_DATA nntp_data;
+  LIST *tmp;
+
+  if (nntp_open_connection (serv) < 0)
+    return -1;
+
+  snprintf (msg, sizeof(msg), _("Loading list of all newsgroups on server %s..."),
+               serv->conn->account.host);
+  mutt_message (msg);
+  time (&serv->newgroups_time);
+  nntp_data.nserv = serv;
+  nntp_data.group = NULL;
+
+  if (mutt_nntp_fetch (&nntp_data, "LIST\r\n", msg, add_group, serv, 0) < 0)
+  {
+#ifdef DEBUG
+    nntp_error ("nntp_get_active()", "LIST\r\n");
+#endif
+    return -1;
+  }
+
+  strfcpy (msg, _("Loading descriptions..."), sizeof (msg));
+  mutt_message (msg);
+  nntp_get_desc (&nntp_data, "*", msg);
+
+  for (tmp = serv->list; tmp; tmp = tmp->next)
+  {
+    NNTP_DATA *data = (NNTP_DATA *)tmp->data;
+
+    if (data && data->deleted && !data->rc)
+    {
+      nntp_delete_cache (data);
+      hash_delete (serv->newsgroups, data->group, NULL, nntp_delete_data);
+      tmp->data = NULL;
+    }
+  }
+  nntp_save_cache_index (serv);
+
+  mutt_clear_error ();
+  return _checked;
+}
+
+/*
+ * returns -1 if error ocurred while retrieving header,
+ * number of articles which ones exist in context on success.
+ */
+int nntp_check_msgid (CONTEXT *ctx, const char *msgid)
+{
+  int ret;
+
+  /* if msgid is already in context, don't reload them */
+  if (hash_find (ctx->id_hash, msgid))
+    return 1;
+  if (ctx->msgcount == ctx->hdrmax)
+    mx_alloc_memory (ctx);
+  ctx->hdrs[ctx->msgcount] = mutt_new_header ();
+  ctx->hdrs[ctx->msgcount]->index = ctx->msgcount;
+  
+  mutt_message (_("Fetching %s from server..."), msgid);
+  ret = nntp_read_header (ctx, msgid, 0);
+  /* since nntp_read_header() may set read flag, we must reset it */
+  ctx->hdrs[ctx->msgcount]->read = 0;
+  if (ret != 0)
+    mutt_free_header (&ctx->hdrs[ctx->msgcount]);
+  else
+  {
+    ctx->msgcount++;
+    mx_update_context (ctx, 1);
+    ctx->changed = 1;
+  }
+  return ret;
+}
+
+typedef struct
+{
+  CONTEXT *ctx;
+  unsigned int num;
+  unsigned int max;
+  unsigned int *child;
+} CHILD_CONTEXT;
+
+static int check_children (char *s, void *c)
+{
+#define cc ((CHILD_CONTEXT *) c)
+  unsigned int i, n;
+
+  if (!s || (n = atoi (s)) == 0)
+    return 0;
+  for (i = 0; i < cc->ctx->msgcount; i++)
+    if (cc->ctx->hdrs[i]->article_num == n)
+      return 0;
+  if (cc->num >= cc->max)
+    safe_realloc (&cc->child, sizeof (unsigned int) * (cc->max += 25));
+  cc->child[cc->num++] = n;
+
+  return 0;
+#undef cc
+}
+
+int nntp_check_children (CONTEXT *ctx, const char *msgid)
+{
+  NNTP_DATA *nntp_data = (NNTP_DATA *)ctx->data;
+  char buf[STRING];
+  int i, ret = 0, tmp = 0;
+  CHILD_CONTEXT cc;
+
+  if (!nntp_data || !nntp_data->nserv || !nntp_data->nserv->conn ||
+       !nntp_data->nserv->conn->account.host)
+    return -1;
+  if (nntp_data->firstMessage > nntp_data->lastLoaded)
+    return 0;
+  if (!nntp_data->nserv->hasXPAT)
+  {
+    mutt_error (_("Server %s does not support this operation!"),
+         nntp_data->nserv->conn->account.host);
+    return -1;
+  }
+
+  snprintf (buf, sizeof (buf), "XPAT References %d-%d *%s*\r\n", 
+       nntp_data->firstMessage, nntp_data->lastLoaded, msgid);
+
+  cc.ctx = ctx;
+  cc.num = 0;
+  cc.max = 25;
+  cc.child = safe_malloc (sizeof (unsigned int) * 25);
+  if (mutt_nntp_fetch (nntp_data, buf, NULL, check_children, &cc, 0))
+  {
+    FREE (&cc.child);
+    return -1;
+  }
+  /* dont try to read the xover cache. check_children() already
+   * made sure that we dont have the article, so we need to visit
+   * the server. Reading the cache at this point is also bad
+   * because it would duplicate messages */
+  if (option (OPTNEWSCACHE))
+  {
+    tmp++;
+    unset_option (OPTNEWSCACHE);
+  }
+  for (i = 0; i < cc.num; i++)
+  {
+    if ((ret = nntp_fetch_headers (ctx, cc.child[i], cc.child[i])))
+      break;
+    if (ctx->msgcount &&
+         ctx->hdrs[ctx->msgcount - 1]->article_num == cc.child[i])
+      ctx->hdrs[ctx->msgcount - 1]->read = 0;
+  }
+  if (tmp)
+    set_option (OPTNEWSCACHE);
+  FREE (&cc.child);
+  return ret;
+}
diff --git a/nntp.h b/nntp.h
new file mode 100644 (file)
index 0000000..3ad0a18
--- /dev/null
+++ b/nntp.h
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 1998 Brandon Long <blong@fiction.net>
+ * Copyright (C) 1999 Andrej Gritsenko <andrej@lucky.net>
+ * Copyright (C) 2000-2002 Vsevolod Volkov <vvv@mutt.org.ua>
+ * 
+ *     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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */ 
+
+#ifndef _NNTP_H_
+#define _NNTP_H_ 1
+
+#include "mutt_socket.h"
+#include "mailbox.h"
+
+#include <time.h>
+
+#define NNTP_PORT 119
+#define NNTP_SSL_PORT 563
+
+/* number of entries in the hash table */
+#define NNTP_CACHE_LEN 10
+
+enum
+{
+  NNTP_NONE = 0,
+  NNTP_OK,
+  NNTP_BYE
+};
+
+typedef struct
+{
+  int first;
+  int last;
+} NEWSRC_ENTRY;
+
+typedef struct
+{
+  unsigned int hasXPAT : 1;
+  unsigned int hasXGTITLE : 1;
+  unsigned int hasXOVER : 1;
+  unsigned int status : 3;
+  char *newsrc;
+  char *cache;
+  int stat;
+  off_t size;
+  time_t mtime;
+  time_t newgroups_time;
+  time_t check_time;
+  HASH *newsgroups;
+  LIST *list;  /* list of newsgroups */
+  LIST *tail;  /* last entry of list */
+  CONNECTION *conn;
+} NNTP_SERVER;
+
+typedef struct
+{
+  unsigned int index;
+  char *path;
+} NNTP_CACHE;
+
+typedef struct
+{
+  NEWSRC_ENTRY *entries;
+  unsigned int num;    /* number of used entries */
+  unsigned int max;    /* number of allocated entries */
+  unsigned int unread;
+  unsigned int firstMessage;
+  unsigned int lastMessage;
+  unsigned int lastLoaded;
+  unsigned int lastCached;
+  unsigned int subscribed : 1;
+  unsigned int rc : 1;
+  unsigned int new : 1;
+  unsigned int allowed : 1;
+  unsigned int deleted : 1;
+  char *group;
+  char *desc;
+  char *cache;
+  NNTP_SERVER *nserv;
+  NNTP_CACHE acache[NNTP_CACHE_LEN];
+} NNTP_DATA;
+
+/* internal functions */
+int nntp_get_active (NNTP_SERVER *);
+int nntp_get_cache_all (NNTP_SERVER *);
+int nntp_save_cache_index (NNTP_SERVER *);
+int nntp_check_newgroups (NNTP_SERVER *, int);
+int nntp_save_cache_group (CONTEXT *);
+int nntp_parse_url (const char *, ACCOUNT *, char *, size_t);
+void newsrc_gen_entries (CONTEXT *);
+void nntp_get_status (CONTEXT *, HEADER *, char *, int);
+void mutt_newsgroup_stat (NNTP_DATA *);
+void nntp_delete_cache (NNTP_DATA *);
+void nntp_add_to_list (NNTP_SERVER *, NNTP_DATA *);
+void nntp_cache_expand (char *, const char *);
+void nntp_delete_data (void *);
+
+/* exposed interface */
+NNTP_SERVER *mutt_select_newsserver (char *);
+NNTP_DATA *mutt_newsgroup_subscribe (NNTP_SERVER *, char *);
+NNTP_DATA *mutt_newsgroup_unsubscribe (NNTP_SERVER *, char *);
+NNTP_DATA *mutt_newsgroup_catchup (NNTP_SERVER *, char *);
+NNTP_DATA *mutt_newsgroup_uncatchup (NNTP_SERVER *, char *);
+void nntp_clear_cacheindex (NNTP_SERVER *);
+int mutt_newsrc_update (NNTP_SERVER *);
+int nntp_open_mailbox (CONTEXT *);
+int nntp_sync_mailbox (CONTEXT *);
+int nntp_check_mailbox (CONTEXT *);
+int nntp_close_mailbox (CONTEXT *);
+void nntp_fastclose_mailbox (CONTEXT *);
+int nntp_fetch_message (MESSAGE *, CONTEXT *, int);
+int nntp_post (const char *);
+int nntp_check_msgid (CONTEXT *, const char *);
+int nntp_check_children (CONTEXT *, const char *);
+void nntp_buffy (char *);
+void nntp_expand_path (char *, size_t, ACCOUNT *);
+void nntp_logout_all ();
+const char *nntp_format_str (char *, size_t, char, const char *, const char *,
+               const char *, const char *, unsigned long, format_flag);
+
+NNTP_SERVER *CurrentNewsSrv INITVAL (NULL);
+
+#endif /* _NNTP_H_ */
diff --git a/pager.c b/pager.c
new file mode 100644 (file)
index 0000000..cc852a4
--- /dev/null
+++ b/pager.c
@@ -0,0 +1,2729 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "mutt_regex.h"
+#include "keymap.h"
+#include "mutt_menu.h"
+#include "mapping.h"
+#include "sort.h"
+#include "pager.h"
+#include "attach.h"
+#include "mbyte.h"
+
+#include "mx.h"
+
+#ifdef USE_IMAP
+#include "imap_private.h"
+#endif
+
+#include "mutt_crypt.h"
+
+#include <sys/stat.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#define ISHEADER(x) ((x) == MT_COLOR_HEADER || (x) == MT_COLOR_HDEFAULT)
+
+#define IsAttach(x) (x && (x)->bdy)
+#define IsRecvAttach(x) (x && (x)->bdy && (x)->fp)
+#define IsSendAttach(x) (x && (x)->bdy && !(x)->fp)
+#define IsMsgAttach(x) (x && (x)->fp && (x)->bdy && (x)->bdy->hdr)
+#define IsHeader(x) (x && (x)->hdr && !(x)->bdy)
+
+static const char *Not_available_in_this_menu = N_("Not available in this menu.");
+static const char *Mailbox_is_read_only = N_("Mailbox is read-only.");
+static const char *Function_not_permitted_in_attach_message_mode = N_("Function not permitted in attach-message mode.");
+
+#define CHECK_MODE(x)  if (!(x)) \
+                       { \
+                               mutt_flushinp (); \
+                               mutt_error _(Not_available_in_this_menu); \
+                               break; \
+                       }
+
+#define CHECK_READONLY if (Context->readonly) \
+                       { \
+                               mutt_flushinp (); \
+                               mutt_error _(Mailbox_is_read_only);     \
+                               break; \
+                       }
+
+#define CHECK_ATTACH if(option(OPTATTACHMSG)) \
+                    {\
+                       mutt_flushinp (); \
+                       mutt_error _(Function_not_permitted_in_attach_message_mode); \
+                       break; \
+                    }
+
+#ifdef USE_IMAP 
+/* the error message returned here could be better. */
+#define CHECK_IMAP_ACL(aclbit) if (Context->magic == M_IMAP) \
+               if (mutt_bit_isset (((IMAP_DATA *)Context->data)->capabilities, ACL) \
+               && !mutt_bit_isset(((IMAP_DATA *)Context->data)->rights,aclbit)){ \
+                       mutt_flushinp(); \
+                       mutt_error ("Operation not permitted by the IMAP ACL for this mailbox"); \
+                       break; \
+               }
+#endif
+
+struct q_class_t
+{
+  int length;
+  int index;
+  int color;
+  char *prefix;
+  struct q_class_t *next, *prev;
+  struct q_class_t *down, *up;
+};
+
+struct syntax_t
+{
+  int color;
+  int first;
+  int last;
+};
+
+struct line_t
+{
+  long offset;
+  short type;
+  short continuation;
+  short chunks;
+  short search_cnt;
+  struct syntax_t *syntax;
+  struct syntax_t *search;
+  struct q_class_t *quote;
+};
+
+#define ANSI_OFF       (1<<0)
+#define ANSI_BLINK     (1<<1)
+#define ANSI_BOLD      (1<<2)
+#define ANSI_UNDERLINE (1<<3)
+#define ANSI_REVERSE   (1<<4)
+#define ANSI_COLOR     (1<<5)
+
+typedef struct _ansi_attr {
+  int attr;
+  int fg;
+  int bg;
+  int pair;
+} ansi_attr;
+
+static short InHelp = 0;
+
+#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
+static struct resize {
+  int line;
+  int SearchCompiled;
+  int SearchBack;
+} *Resize = NULL;
+#endif
+
+#define NumSigLines 4
+
+static int check_sig (const char *s, struct line_t *info, int n)
+{
+  int count = 0;
+
+  while (n > 0 && count <= NumSigLines)
+  {
+    if (info[n].type != MT_COLOR_SIGNATURE)
+      break;
+    count++;
+    n--;
+  }
+
+  if (count == 0)
+    return (-1);
+
+  if (count > NumSigLines)
+  {
+    /* check for a blank line */
+    while (*s)
+    {
+      if (!ISSPACE (*s))
+       return 0;
+      s++;
+    }
+
+    return (-1);
+  }
+
+  return (0);
+}
+
+static void
+resolve_color (struct line_t *lineInfo, int n, int cnt, int flags, int special,
+    ansi_attr *a)
+{
+  int def_color;               /* color without syntax hilight */
+  int color;                   /* final color */
+  static int last_color;       /* last color set */
+  int search = 0, i, m;
+
+  if (!cnt)
+    last_color = -1;           /* force attrset() */
+
+  if (lineInfo[n].continuation)
+  {
+    if (!cnt && option (OPTMARKERS))
+    {
+      SETCOLOR (MT_COLOR_MARKERS);
+      addch ('+');
+      last_color = ColorDefs[MT_COLOR_MARKERS];
+    }
+    m = (lineInfo[n].syntax)[0].first;
+    cnt += (lineInfo[n].syntax)[0].last;
+  }
+  else
+    m = n;
+  if (!(flags & M_SHOWCOLOR))
+    def_color = ColorDefs[MT_COLOR_NORMAL];
+  else if (lineInfo[m].type == MT_COLOR_HEADER)
+    def_color = (lineInfo[m].syntax)[0].color;
+  else
+    def_color = ColorDefs[lineInfo[m].type];
+
+  if ((flags & M_SHOWCOLOR) && lineInfo[m].type == MT_COLOR_QUOTED)
+  {
+    struct q_class_t *class = lineInfo[m].quote;
+
+    if (class)
+    {
+      def_color = class->color;
+
+      while (class && class->length > cnt)
+      {
+       def_color = class->color;
+       class = class->up;
+      }
+    }
+  }
+
+  color = def_color;
+  if (flags & M_SHOWCOLOR)
+  {
+    for (i = 0; i < lineInfo[m].chunks; i++)
+    {
+      /* we assume the chunks are sorted */
+      if (cnt > (lineInfo[m].syntax)[i].last)
+       continue;
+      if (cnt < (lineInfo[m].syntax)[i].first)
+       break;
+      if (cnt != (lineInfo[m].syntax)[i].last)
+      {
+       color = (lineInfo[m].syntax)[i].color;
+       break;
+      }
+      /* don't break here, as cnt might be 
+       * in the next chunk as well */
+    }
+  }
+
+  if (flags & M_SEARCH)
+  {
+    for (i = 0; i < lineInfo[m].search_cnt; i++)
+    {
+      if (cnt > (lineInfo[m].search)[i].last)
+       continue;
+      if (cnt < (lineInfo[m].search)[i].first)
+       break;
+      if (cnt != (lineInfo[m].search)[i].last)
+      {
+       color = ColorDefs[MT_COLOR_SEARCH];
+       search = 1;
+       break;
+      }
+    }
+  }
+
+  /* handle "special" bold & underlined characters */
+  if (special || a->attr)
+  {
+#ifdef HAVE_COLOR
+    if ((a->attr & ANSI_COLOR))
+    {
+      if (a->pair == -1)
+       a->pair = mutt_alloc_color (a->fg, a->bg);
+      color = a->pair;
+      if (a->attr & ANSI_BOLD)
+         color |= A_BOLD;
+    }
+    else
+#endif
+      if ((special & A_BOLD) || (a->attr & ANSI_BOLD))
+    {
+      if (ColorDefs[MT_COLOR_BOLD] && !search)
+       color = ColorDefs[MT_COLOR_BOLD];
+      else
+       color ^= A_BOLD;
+    }
+    if ((special & A_UNDERLINE) || (a->attr & ANSI_UNDERLINE))
+    {
+      if (ColorDefs[MT_COLOR_UNDERLINE] && !search)
+       color = ColorDefs[MT_COLOR_UNDERLINE];
+      else
+       color ^= A_UNDERLINE;
+    }
+    else if (a->attr & ANSI_REVERSE) 
+    {
+      color ^= A_REVERSE;
+    }
+    else if (a->attr & ANSI_BLINK) 
+    {
+      color ^= A_BLINK;
+    }
+    else if (a->attr & ANSI_OFF)
+    {
+      a->attr = 0;
+    }
+  }
+
+  if (color != last_color)
+  {
+    attrset (color);
+    last_color = color;
+  }
+}
+
+static void
+append_line (struct line_t *lineInfo, int n, int cnt)
+{
+  int m;
+
+  lineInfo[n+1].type = lineInfo[n].type;
+  (lineInfo[n+1].syntax)[0].color = (lineInfo[n].syntax)[0].color;
+  lineInfo[n+1].continuation = 1;
+
+  /* find the real start of the line */
+  for (m = n; m >= 0; m--)
+    if (lineInfo[m].continuation == 0) break;
+
+  (lineInfo[n+1].syntax)[0].first = m;
+  (lineInfo[n+1].syntax)[0].last = (lineInfo[n].continuation) ? 
+    cnt + (lineInfo[n].syntax)[0].last : cnt;
+}
+
+static void
+new_class_color (struct q_class_t *class, int *q_level)
+{
+  class->index = (*q_level)++;
+  class->color = ColorQuote[class->index % ColorQuoteUsed];
+}
+
+static void
+shift_class_colors (struct q_class_t *QuoteList, struct q_class_t *new_class,
+                     int index, int *q_level)
+{
+  struct q_class_t * q_list;
+
+  q_list = QuoteList;
+  new_class->index = -1;
+
+  while (q_list)
+  {
+    if (q_list->index >= index)
+    {
+      q_list->index++;
+      q_list->color = ColorQuote[q_list->index % ColorQuoteUsed];
+    }
+    if (q_list->down)
+      q_list = q_list->down;
+    else if (q_list->next)
+      q_list = q_list->next;
+    else
+    {
+      while (!q_list->next)
+      {
+       q_list = q_list->up;
+       if (q_list == NULL)
+         break;
+      }
+      if (q_list)
+       q_list = q_list->next;
+    }
+  }
+
+  new_class->index = index;
+  new_class->color = ColorQuote[index % ColorQuoteUsed];
+  (*q_level)++;
+}
+
+static void
+cleanup_quote (struct q_class_t **QuoteList)
+{
+  struct q_class_t *ptr;
+
+  while (*QuoteList)
+  {
+    if ((*QuoteList)->down)
+      cleanup_quote (&((*QuoteList)->down));
+    ptr = (*QuoteList)->next;
+    if ((*QuoteList)->prefix)
+      FREE (&(*QuoteList)->prefix);
+    FREE (QuoteList);
+    *QuoteList = ptr;
+  }
+
+  return;
+}
+
+static struct q_class_t *
+classify_quote (struct q_class_t **QuoteList, const char *qptr,
+               int length, int *force_redraw, int *q_level)
+{
+  struct q_class_t *q_list = *QuoteList;
+  struct q_class_t *class = NULL, *tmp = NULL, *ptr, *save;
+  char *tail_qptr;
+  int offset, tail_lng;
+  int index = -1;
+
+  if (ColorQuoteUsed <= 1)
+  {
+    /* not much point in classifying quotes... */
+
+    if (*QuoteList == NULL)
+    {
+      class = (struct q_class_t *) safe_calloc (1, sizeof (struct q_class_t));
+      class->color = ColorQuote[0];
+      *QuoteList = class;
+    }
+    return (*QuoteList);
+  }
+
+  /* Did I mention how much I like emulating Lisp in C? */
+
+  /* classify quoting prefix */
+  while (q_list)
+  {
+    if (length <= q_list->length)
+    {
+      /* case 1: check the top level nodes */
+
+      if (mutt_strncmp (qptr, q_list->prefix, length) == 0)
+      {
+       if (length == q_list->length)
+         return q_list;        /* same prefix: return the current class */
+
+       /* found shorter prefix */
+       if (tmp == NULL)
+       {
+         /* add a node above q_list */
+         tmp = (struct q_class_t *) safe_calloc (1, sizeof (struct q_class_t));
+         tmp->prefix = (char *) safe_calloc (1, length + 1);
+         strncpy (tmp->prefix, qptr, length);
+         tmp->length = length;
+
+         /* replace q_list by tmp in the top level list */
+         if (q_list->next)
+         {
+           tmp->next = q_list->next;
+           q_list->next->prev = tmp;
+         }
+         if (q_list->prev)
+         {
+           tmp->prev = q_list->prev;
+           q_list->prev->next = tmp;
+         }
+
+         /* make q_list a child of tmp */
+         tmp->down = q_list;
+         q_list->up = tmp;
+
+         /* q_list has no siblings for now */
+         q_list->next = NULL;
+         q_list->prev = NULL;
+
+         /* update the root if necessary */
+         if (q_list == *QuoteList)
+           *QuoteList = tmp;
+
+         index = q_list->index;
+
+         /* tmp should be the return class too */
+         class = tmp;
+
+         /* next class to test; if tmp is a shorter prefix for another
+          * node, that node can only be in the top level list, so don't
+          * go down after this point
+          */
+         q_list = tmp->next;
+       }
+       else
+       {
+         /* found another branch for which tmp is a shorter prefix */
+
+         /* save the next sibling for later */
+         save = q_list->next;
+
+         /* unlink q_list from the top level list */
+         if (q_list->next)
+           q_list->next->prev = q_list->prev;
+         if (q_list->prev)
+           q_list->prev->next = q_list->next;
+
+         /* at this point, we have a tmp->down; link q_list to it */
+         ptr = tmp->down;
+         /* sibling order is important here, q_list should be linked last */
+         while (ptr->next)
+           ptr = ptr->next;
+         ptr->next = q_list;
+         q_list->next = NULL;
+         q_list->prev = ptr;
+         q_list->up = tmp;
+
+         index = q_list->index;
+
+         /* next class to test; as above, we shouldn't go down */
+         q_list = save;
+       }
+
+       /* we found a shorter prefix, so certain quotes have changed classes */
+       *force_redraw = 1;
+       continue;
+      }
+      else
+      {
+       /* shorter, but not a substring of the current class: try next */
+       q_list = q_list->next;
+       continue;
+      }
+    }
+    else
+    {
+      /* case 2: try subclassing the current top level node */
+      
+      /* tmp != NULL means we already found a shorter prefix at case 1 */
+      if (tmp == NULL && mutt_strncmp (qptr, q_list->prefix, q_list->length) == 0)
+      {
+       /* ok, it's a subclass somewhere on this branch */
+
+       ptr = q_list;
+       offset = q_list->length;
+
+       q_list = q_list->down;
+       tail_lng = length - offset;
+       tail_qptr = (char *) qptr + offset;
+
+       while (q_list)
+       {
+         if (length <= q_list->length)
+         {
+           if (mutt_strncmp (tail_qptr, (q_list->prefix) + offset, tail_lng) == 0)
+           {
+             /* same prefix: return the current class */
+             if (length == q_list->length)
+               return q_list;
+
+             /* found shorter common prefix */
+             if (tmp == NULL)
+             {
+               /* add a node above q_list */
+               tmp = (struct q_class_t *) safe_calloc (1, 
+                                           sizeof (struct q_class_t));
+               tmp->prefix = (char *) safe_calloc (1, length + 1);
+               strncpy (tmp->prefix, qptr, length);
+               tmp->length = length;
+                       
+               /* replace q_list by tmp */
+               if (q_list->next)
+               {
+                 tmp->next = q_list->next;
+                 q_list->next->prev = tmp;
+               }
+               if (q_list->prev)
+               {
+                 tmp->prev = q_list->prev;
+                 q_list->prev->next = tmp;
+               }
+
+               /* make q_list a child of tmp */
+               tmp->down = q_list;
+               tmp->up = q_list->up;
+               q_list->up = tmp;
+               if (tmp->up->down == q_list)
+                 tmp->up->down = tmp;
+
+               /* q_list has no siblings */
+               q_list->next = NULL;
+               q_list->prev = NULL;
+                              
+               index = q_list->index;
+
+               /* tmp should be the return class too */
+               class = tmp;
+
+               /* next class to test */
+               q_list = tmp->next;
+             }
+             else
+             {
+               /* found another branch for which tmp is a shorter prefix */
+
+               /* save the next sibling for later */
+               save = q_list->next;
+
+               /* unlink q_list from the top level list */
+               if (q_list->next)
+                 q_list->next->prev = q_list->prev;
+               if (q_list->prev)
+                 q_list->prev->next = q_list->next;
+
+               /* at this point, we have a tmp->down; link q_list to it */
+               ptr = tmp->down;
+               while (ptr->next)
+                 ptr = ptr->next;
+               ptr->next = q_list;
+               q_list->next = NULL;
+               q_list->prev = ptr;
+               q_list->up = tmp;
+
+               index = q_list->index;
+
+               /* next class to test */
+               q_list = save;
+             }
+
+             /* we found a shorter prefix, so we need a redraw */
+             *force_redraw = 1;
+             continue;
+           }
+           else
+           {
+             q_list = q_list->next;
+             continue;
+           }
+         }
+         else
+         {
+           /* longer than the current prefix: try subclassing it */
+           if (tmp == NULL && mutt_strncmp (tail_qptr, (q_list->prefix) + offset,
+                         q_list->length - offset) == 0)
+           {
+             /* still a subclass: go down one level */
+             ptr = q_list;
+             offset = q_list->length;
+
+             q_list = q_list->down;
+             tail_lng = length - offset;
+             tail_qptr = (char *) qptr + offset;
+
+             continue;
+           }
+           else
+           {
+             /* nope, try the next prefix */
+             q_list = q_list->next;
+             continue;
+           }
+         }
+       }
+
+       /* still not found so far: add it as a sibling to the current node */
+       if (class == NULL)
+       {
+         tmp = (struct q_class_t *) safe_calloc (1, sizeof (struct q_class_t));
+         tmp->prefix = (char *) safe_calloc (1, length + 1);
+         strncpy (tmp->prefix, qptr, length);
+         tmp->length = length;
+
+         if (ptr->down)
+         {
+           tmp->next = ptr->down;
+           ptr->down->prev = tmp;
+         }
+         ptr->down = tmp;
+         tmp->up = ptr;
+
+         new_class_color (tmp, q_level);
+
+         return tmp;
+       }
+       else
+       {
+         if (index != -1)
+           shift_class_colors (*QuoteList, tmp, index, q_level);
+
+         return class;
+       }
+      }
+      else
+      {
+       /* nope, try the next prefix */
+       q_list = q_list->next;
+       continue;
+      }
+    }
+  }
+
+  if (class == NULL)
+  {
+    /* not found so far: add it as a top level class */
+    class = (struct q_class_t *) safe_calloc (1, sizeof (struct q_class_t));
+    class->prefix = (char *) safe_calloc (1, length + 1);
+    strncpy (class->prefix, qptr, length);
+    class->length = length;
+    new_class_color (class, q_level);
+
+    if (*QuoteList)
+    {
+      class->next = *QuoteList;
+      (*QuoteList)->prev = class;
+    }
+    *QuoteList = class;
+  }
+
+  if (index != -1)
+    shift_class_colors (*QuoteList, tmp, index, q_level);
+
+  return class;
+}
+
+static int check_attachment_marker (char *);
+
+static void
+resolve_types (char *buf, char *raw, struct line_t *lineInfo, int n, int last,
+               struct q_class_t **QuoteList, int *q_level, int *force_redraw,
+               int q_classify)
+{
+  COLOR_LINE *color_line;
+  regmatch_t pmatch[1], smatch[1];
+  int found, offset, null_rx, i;
+
+  if (n == 0 || ISHEADER (lineInfo[n-1].type))
+  {
+    if (buf[0] == '\n')
+      lineInfo[n].type = MT_COLOR_NORMAL;
+    else if (n > 0 && (buf[0] == ' ' || buf[0] == '\t'))
+    {
+      lineInfo[n].type = lineInfo[n-1].type; /* wrapped line */
+      (lineInfo[n].syntax)[0].color = (lineInfo[n-1].syntax)[0].color;
+    }
+    else
+    {
+      lineInfo[n].type = MT_COLOR_HDEFAULT;
+      color_line = ColorHdrList;
+      while (color_line)
+      {
+       if (REGEXEC (color_line->rx, buf) == 0)
+       {
+         lineInfo[n].type = MT_COLOR_HEADER;
+         lineInfo[n].syntax[0].color = color_line->pair;
+         break;
+       }
+       color_line = color_line->next;
+      }
+    }
+  }
+  else if (mutt_strncmp ("\033[0m", raw, 4) == 0)      /* a little hack... */
+    lineInfo[n].type = MT_COLOR_NORMAL;
+#if 0
+  else if (mutt_strncmp ("[-- ", buf, 4) == 0)
+    lineInfo[n].type = MT_COLOR_ATTACHMENT;
+#else
+  else if (check_attachment_marker ((char *) raw) == 0)
+    lineInfo[n].type = MT_COLOR_ATTACHMENT;
+#endif
+  else if (mutt_strcmp ("-- \n", buf) == 0 || mutt_strcmp ("-- \r\n", buf) == 0)
+  {
+    i = n + 1;
+
+    lineInfo[n].type = MT_COLOR_SIGNATURE;
+    while (i < last && check_sig (buf, lineInfo, i - 1) == 0 &&
+          (lineInfo[i].type == MT_COLOR_NORMAL ||
+           lineInfo[i].type == MT_COLOR_QUOTED ||
+           lineInfo[i].type == MT_COLOR_HEADER))
+      {
+       /* oops... */
+       if (lineInfo[i].chunks)
+       {
+         lineInfo[i].chunks = 0;
+         safe_realloc (&(lineInfo[n].syntax), 
+                       sizeof (struct syntax_t));
+       }
+       lineInfo[i++].type = MT_COLOR_SIGNATURE;
+      }
+  }
+  else if (check_sig (buf, lineInfo, n - 1) == 0)
+    lineInfo[n].type = MT_COLOR_SIGNATURE;
+  else if (regexec ((regex_t *) QuoteRegexp.rx, buf, 1, pmatch, 0) == 0)
+  {
+    if (regexec ((regex_t *) Smileys.rx, buf, 1, smatch, 0) == 0)
+    {
+      if (smatch[0].rm_so > 0)
+      {
+       char c;
+
+       /* hack to avoid making an extra copy of buf */
+       c = buf[smatch[0].rm_so];
+       buf[smatch[0].rm_so] = 0;
+
+       if (regexec ((regex_t *) QuoteRegexp.rx, buf, 1, pmatch, 0) == 0)
+       {
+         if (q_classify && lineInfo[n].quote == NULL)
+           lineInfo[n].quote = classify_quote (QuoteList,
+                                 buf + pmatch[0].rm_so,
+                                 pmatch[0].rm_eo - pmatch[0].rm_so,
+                                 force_redraw, q_level);
+         lineInfo[n].type = MT_COLOR_QUOTED;
+       }
+       else
+         lineInfo[n].type = MT_COLOR_NORMAL;
+
+       buf[smatch[0].rm_so] = c;
+      }
+      else
+       lineInfo[n].type = MT_COLOR_NORMAL;
+    }
+    else
+    {
+      if (q_classify && lineInfo[n].quote == NULL)
+       lineInfo[n].quote = classify_quote (QuoteList, buf + pmatch[0].rm_so,
+                             pmatch[0].rm_eo - pmatch[0].rm_so,
+                             force_redraw, q_level);
+      lineInfo[n].type = MT_COLOR_QUOTED;
+    }
+  }
+  else
+    lineInfo[n].type = MT_COLOR_NORMAL;
+
+  /* body patterns */
+  if (lineInfo[n].type == MT_COLOR_NORMAL || 
+      lineInfo[n].type == MT_COLOR_QUOTED)
+  {
+    i = 0;
+
+    offset = 0;
+    lineInfo[n].chunks = 0;
+    do
+    {
+      if (!buf[offset])
+       break;
+
+      found = 0;
+      null_rx = 0;
+      color_line = ColorBodyList;
+      while (color_line)
+      {
+       if (regexec (&color_line->rx, buf + offset, 1, pmatch,
+                    (offset ? REG_NOTBOL : 0)) == 0)
+       {
+         if (pmatch[0].rm_eo != pmatch[0].rm_so)
+         {
+           if (!found)
+           {
+             if (++(lineInfo[n].chunks) > 1)
+               safe_realloc (&(lineInfo[n].syntax), 
+                             (lineInfo[n].chunks) * sizeof (struct syntax_t));
+           }
+           i = lineInfo[n].chunks - 1;
+           pmatch[0].rm_so += offset;
+           pmatch[0].rm_eo += offset;
+           if (!found ||
+               pmatch[0].rm_so < (lineInfo[n].syntax)[i].first ||
+               (pmatch[0].rm_so == (lineInfo[n].syntax)[i].first &&
+                pmatch[0].rm_eo > (lineInfo[n].syntax)[i].last))
+           {
+             (lineInfo[n].syntax)[i].color = color_line->pair;
+             (lineInfo[n].syntax)[i].first = pmatch[0].rm_so;
+             (lineInfo[n].syntax)[i].last = pmatch[0].rm_eo;
+           }
+           found = 1;
+           null_rx = 0;
+         }
+         else
+           null_rx = 1; /* empty regexp; don't add it, but keep looking */
+       }
+       color_line = color_line->next;
+      }
+
+      if (null_rx)
+       offset++; /* avoid degenerate cases */
+      else
+       offset = (lineInfo[n].syntax)[i].last;
+    } while (found || null_rx);
+  }
+}
+
+static int is_ansi (unsigned char *buf)
+{
+  while (*buf && (isdigit(*buf) || *buf == ';'))
+    buf++;
+  return (*buf == 'm');
+}
+
+static int check_attachment_marker (char *p)
+{
+  char *q = AttachmentMarker;
+  
+  for (;*p == *q && *q && *p && *q != '\a' && *p != '\a'; p++, q++)
+    ;
+  return (int) (*p - *q);
+}
+
+static int grok_ansi(unsigned char *buf, int pos, ansi_attr *a)
+{
+  int x = pos;
+
+  while (isdigit(buf[x]) || buf[x] == ';')
+    x++;
+
+  /* Character Attributes */
+  if (option (OPTALLOWANSI) && a != NULL && buf[x] == 'm')
+  {
+    if (pos == x)
+    {
+#ifdef HAVE_COLOR
+      if (a->pair != -1)
+       mutt_free_color (a->fg, a->bg);
+#endif
+      a->attr = ANSI_OFF;
+      a->pair = -1;
+    }
+    while (pos < x)
+    {
+      if (buf[pos] == '1' && (pos+1 == x || buf[pos+1] == ';'))
+      {
+       a->attr |= ANSI_BOLD;
+       pos += 2;
+      } 
+      else if (buf[pos] == '4' && (pos+1 == x || buf[pos+1] == ';'))
+      {
+       a->attr |= ANSI_UNDERLINE;
+       pos += 2;
+      }
+      else if (buf[pos] == '5' && (pos+1 == x || buf[pos+1] == ';'))
+      {
+       a->attr |= ANSI_BLINK;
+       pos += 2;
+      }
+      else if (buf[pos] == '7' && (pos+1 == x || buf[pos+1] == ';'))
+      {
+       a->attr |= ANSI_REVERSE;
+       pos += 2;
+      }
+      else if (buf[pos] == '0' && (pos+1 == x || buf[pos+1] == ';'))
+      {
+#ifdef HAVE_COLOR
+       if (a->pair != -1)
+         mutt_free_color(a->fg,a->bg);
+#endif
+       a->attr = ANSI_OFF;
+       a->pair = -1;
+       pos += 2;
+      }
+      else if (buf[pos] == '3' && isdigit(buf[pos+1]))
+      {
+#ifdef HAVE_COLOR
+       if (a->pair != -1)
+         mutt_free_color(a->fg,a->bg);
+#endif
+       a->pair = -1;
+       a->attr |= ANSI_COLOR;
+       a->fg = buf[pos+1] - '0';
+       pos += 3;
+      }
+      else if (buf[pos] == '4' && isdigit(buf[pos+1]))
+      {
+#ifdef HAVE_COLOR
+       if (a->pair != -1)
+         mutt_free_color(a->fg,a->bg);
+#endif
+       a->pair = -1;
+       a->attr |= ANSI_COLOR;
+       a->bg = buf[pos+1] - '0';
+       pos += 3;
+      }
+      else 
+      {
+       while (pos < x && buf[pos] != ';') pos++;
+       pos++;
+      }
+    }
+  }
+  pos = x;
+  return pos;
+}
+
+static int
+fill_buffer (FILE *f, long *last_pos, long offset, unsigned char *buf, 
+            unsigned char *fmt, size_t blen, int *buf_ready)
+{
+  unsigned char *p;
+  static int b_read;
+
+  if (*buf_ready == 0)
+  {
+    buf[blen - 1] = 0;
+    if (offset != *last_pos)
+      fseek (f, offset, 0);
+    if (fgets ((char *) buf, blen - 1, f) == NULL)
+    {
+      fmt[0] = 0;
+      return (-1);
+    }
+    *last_pos = ftell (f);
+    b_read = (int) (*last_pos - offset);
+    *buf_ready = 1;
+
+    /* copy "buf" to "fmt", but without bold and underline controls */
+    p = buf;
+    while (*p)
+    {
+      if (*p == '\010' && (p > buf))
+      {
+       if (*(p+1) == '_')      /* underline */
+         p += 2;
+       else if (*(p+1))        /* bold or overstrike */
+       {
+         *(fmt-1) = *(p+1);
+         p += 2;
+       }
+       else                    /* ^H */
+         *fmt++ = *p++;
+      }
+      else if (*p == '\033' && *(p+1) == '[' && is_ansi (p + 2))
+      {
+       while (*p++ != 'm')     /* skip ANSI sequence */
+         ;
+      }
+      else if (*p == '\033' && *(p+1) == ']' && check_attachment_marker ((char *) p) == 0)
+      {
+       dprint (2, (debugfile, "fill_buffer: Seen attachment marker.\n"));
+       while (*p++ != '\a')    /* skip pseudo-ANSI sequence */
+         ;
+      }
+      else
+       *fmt++ = *p++;
+    }
+    *fmt = 0;
+  }
+  return b_read;
+}
+
+#ifdef USE_NNTP
+#include "mx.h"
+#include "nntp.h"
+#endif
+
+
+static int format_line (struct line_t **lineInfo, int n, unsigned char *buf,
+                       int flags, ansi_attr *pa, int cnt,
+                       int *pspace, int *pvch, int *pcol, int *pspecial)
+{
+  int space = -1; /* index of the last space or TAB */
+  int col = option (OPTMARKERS) ? (*lineInfo)[n].continuation : 0;
+  int ch, vch, k, last_special = -1, special = 0, t;
+  wchar_t wc;
+  mbstate_t mbstate;
+
+  int wrap_cols = COLS - WrapMargin;
+  
+  if (wrap_cols <= 0)
+    wrap_cols = COLS;
+  
+  /* FIXME: this should come from lineInfo */
+  memset(&mbstate, 0, sizeof(mbstate));
+
+  for (ch = 0, vch = 0; ch < cnt; ch += k, vch += k)
+  {
+    /* Handle ANSI sequences */
+    while (cnt-ch >= 2 && buf[ch] == '\033' && buf[ch+1] == '[' &&
+          is_ansi (buf+ch+2))
+      ch = grok_ansi (buf, ch+2, pa) + 1;
+
+    while (cnt-ch >= 2 && buf[ch] == '\033' && buf[ch+1] == ']' &&
+          check_attachment_marker ((char *) buf+ch) == 0)
+    {
+      while (buf[ch++] != '\a')
+       if (ch >= cnt)
+         break;
+    }
+
+    /* is anything left to do? */
+    if (ch >= cnt)
+      break;
+    
+    k = mbrtowc (&wc, (char *)buf+ch, cnt-ch, &mbstate);
+    if (k == -2 || k == -1)
+    {
+      dprint (1, (debugfile, "%s:%d: mbrtowc returned %d; errno = %d.\n",
+                 __FILE__, __LINE__, k, errno));
+      if (col + 4 > wrap_cols)
+       break;
+      col += 4;
+      if (pa)
+       printw ("\\%03o", buf[ch]);
+      k = 1;
+      continue;
+    }
+    if (k == 0)
+      k = 1;
+
+    /* Handle backspace */
+    special = 0;
+    if (IsWPrint (wc))
+    {
+      wchar_t wc1;
+      mbstate_t mbstate1;
+      int k1, k2;
+
+      while ((wc1 = 0, mbstate1 = mbstate,
+             k1 = k + mbrtowc (&wc1, (char *)buf+ch+k, cnt-ch-k, &mbstate1),
+             k1 - k > 0 && wc1 == '\b') &&
+            (wc1 = 0,
+             k2 = mbrtowc (&wc1, (char *)buf+ch+k1, cnt-ch-k1, &mbstate1),
+             k2 > 0 && IsWPrint (wc1)))
+      {
+       if (wc == wc1)
+       {
+         special |= (wc == '_' && special & A_UNDERLINE)
+           ? A_UNDERLINE : A_BOLD;
+       }
+       else if (wc == '_' || wc1 == '_')
+       {
+         special |= A_UNDERLINE;
+         wc = (wc1 == '_') ? wc : wc1;
+       }
+       else
+       {
+         /* special = 0; / * overstrike: nothing to do! */
+         wc = wc1;
+       }
+       ch += k1;
+       k = k2;
+       mbstate = mbstate1;
+      }
+    }
+
+    if (pa &&
+       ((flags & (M_SHOWCOLOR | M_SEARCH | M_PAGER_MARKER)) ||
+        special || last_special || pa->attr))
+    {
+      resolve_color (*lineInfo, n, vch, flags, special, pa);
+      last_special = special;
+    }
+
+    if (IsWPrint (wc))
+    {
+      if (wc == ' ')
+       space = ch;
+      t = wcwidth (wc);
+      if (col + t > wrap_cols)
+       break;
+      col += t;
+      if (pa)
+       mutt_addwch (wc);
+    }
+    else if (wc == '\n')
+      break;
+    else if (wc == '\t')
+    {
+      space = ch;
+      t = (col & ~7) + 8;
+      if (t > wrap_cols)
+       break;
+      if (pa)
+       for (; col < t; col++)
+         addch (' ');
+      else
+       col = t;
+    }
+    else if (wc < 0x20 || wc == 0x7f)
+    {
+      if (col + 2 > wrap_cols)
+       break;
+      col += 2;
+      if (pa)
+       printw ("^%c", ('@' + wc) & 0x7f);
+    }
+    else if (wc < 0x100)
+    {
+      if (col + 4 > wrap_cols)
+       break;
+      col += 4;
+      if (pa)
+       printw ("\\%03o", wc);
+    }
+    else
+    {
+      if (col + 1 > wrap_cols)
+       break;
+      ++col;
+      if (pa)
+       addch (replacement_char ());
+    }
+  }
+  *pspace = space;
+  *pcol = col;
+  *pvch = vch;
+  *pspecial = special;
+  return ch;
+}
+
+/*
+ * Args:
+ *     flags   M_SHOWFLAT, show characters (used for displaying help)
+ *             M_SHOWCOLOR, show characters in color
+ *                     otherwise don't show characters
+ *             M_HIDE, don't show quoted text
+ *             M_SEARCH, resolve search patterns
+ *             M_TYPES, compute line's type
+ *             M_PAGER_NSKIP, keeps leading whitespace
+ *             M_PAGER_MARKER, eventually show markers
+ *
+ * Return values:
+ *     -1      EOF was reached
+ *     0       normal exit, line was not displayed
+ *     >0      normal exit, line was displayed
+ */
+
+static int
+display_line (FILE *f, long *last_pos, struct line_t **lineInfo, int n, 
+             int *last, int *max, int flags, struct q_class_t **QuoteList,
+             int *q_level, int *force_redraw, regex_t *SearchRE)
+{
+  unsigned char buf[LONG_STRING], fmt[LONG_STRING];
+  unsigned char *buf_ptr = buf;
+  int ch, vch, col, cnt, b_read;
+  int buf_ready = 0, change_last = 0;
+  int special;
+  int offset;
+  int def_color;
+  int m;
+  ansi_attr a = {0,0,0,-1};
+  regmatch_t pmatch[1];
+
+  if (n == *last)
+  {
+    (*last)++;
+    change_last = 1;
+  }
+
+  if (*last == *max)
+  {
+    safe_realloc (lineInfo, sizeof (struct line_t) * (*max += LINES));
+    for (ch = *last; ch < *max ; ch++)
+    {
+      memset (&((*lineInfo)[ch]), 0, sizeof (struct line_t));
+      (*lineInfo)[ch].type = -1;
+      (*lineInfo)[ch].search_cnt = -1;
+      (*lineInfo)[ch].syntax = safe_malloc (sizeof (struct syntax_t));
+      ((*lineInfo)[ch].syntax)[0].first = ((*lineInfo)[ch].syntax)[0].last = -1;
+    }
+  }
+
+  /* only do color hiliting if we are viewing a message */
+  if (flags & (M_SHOWCOLOR | M_TYPES))
+  {
+    if ((*lineInfo)[n].type == -1)
+    {
+      /* determine the line class */
+      if (fill_buffer (f, last_pos, (*lineInfo)[n].offset, buf, fmt, sizeof (buf), &buf_ready) < 0)
+      {
+       if (change_last)
+         (*last)--;
+       return (-1);
+      }
+
+      resolve_types ((char *) fmt, (char *) buf, *lineInfo, n, *last,
+                     QuoteList, q_level, force_redraw, flags & M_SHOWCOLOR);
+
+      /* avoid race condition for continuation lines when scrolling up */
+      for (m = n + 1; m < *last && (*lineInfo)[m].offset && (*lineInfo)[m].continuation; m++)
+       (*lineInfo)[m].type = (*lineInfo)[n].type;
+    }
+
+    /* this also prevents searching through the hidden lines */
+    if ((flags & M_HIDE) && (*lineInfo)[n].type == MT_COLOR_QUOTED)
+      flags = 0; /* M_NOSHOW */
+  }
+
+  /* At this point, (*lineInfo[n]).quote may still be undefined. We 
+   * don't want to compute it every time M_TYPES is set, since this
+   * would slow down the "bottom" function unacceptably. A compromise
+   * solution is hence to call regexec() again, just to find out the
+   * length of the quote prefix.
+   */
+  if ((flags & M_SHOWCOLOR) && !(*lineInfo)[n].continuation &&
+      (*lineInfo)[n].type == MT_COLOR_QUOTED && (*lineInfo)[n].quote == NULL)
+  {
+    if (fill_buffer (f, last_pos, (*lineInfo)[n].offset, buf, fmt, sizeof (buf), &buf_ready) < 0)
+    {
+      if (change_last)
+       (*last)--;
+      return (-1);
+    }
+    regexec ((regex_t *) QuoteRegexp.rx, (char *) fmt, 1, pmatch, 0);
+    (*lineInfo)[n].quote = classify_quote (QuoteList,
+                           (char *) fmt + pmatch[0].rm_so,
+                           pmatch[0].rm_eo - pmatch[0].rm_so,
+                           force_redraw, q_level);
+  }
+
+  if ((flags & M_SEARCH) && !(*lineInfo)[n].continuation && (*lineInfo)[n].search_cnt == -1) 
+  {
+    if (fill_buffer (f, last_pos, (*lineInfo)[n].offset, buf, fmt, sizeof (buf), &buf_ready) < 0)
+    {
+      if (change_last)
+       (*last)--;
+      return (-1);
+    }
+
+    offset = 0;
+    (*lineInfo)[n].search_cnt = 0;
+    while (regexec (SearchRE, (char *) fmt + offset, 1, pmatch, (offset ? REG_NOTBOL : 0)) == 0)
+    {
+      if (++((*lineInfo)[n].search_cnt) > 1)
+       safe_realloc (&((*lineInfo)[n].search),
+                     ((*lineInfo)[n].search_cnt) * sizeof (struct syntax_t));
+      else
+       (*lineInfo)[n].search = safe_malloc (sizeof (struct syntax_t));
+      pmatch[0].rm_so += offset;
+      pmatch[0].rm_eo += offset;
+      ((*lineInfo)[n].search)[(*lineInfo)[n].search_cnt - 1].first = pmatch[0].rm_so;
+      ((*lineInfo)[n].search)[(*lineInfo)[n].search_cnt - 1].last = pmatch[0].rm_eo;
+
+      if (pmatch[0].rm_eo == pmatch[0].rm_so)
+       offset++; /* avoid degenerate cases */
+      else
+       offset = pmatch[0].rm_eo;
+      if (!fmt[offset])
+       break;
+    }
+  }
+
+  if (!(flags & M_SHOW) && (*lineInfo)[n+1].offset > 0)
+  {
+    /* we've already scanned this line, so just exit */
+    return (0);
+  }
+  if ((flags & M_SHOWCOLOR) && *force_redraw && (*lineInfo)[n+1].offset > 0)
+  {
+    /* no need to try to display this line... */
+    return (1); /* fake display */
+  }
+
+  if ((b_read = fill_buffer (f, last_pos, (*lineInfo)[n].offset, buf, fmt, 
+                             sizeof (buf), &buf_ready)) < 0)
+  {
+    if (change_last)
+      (*last)--;
+    return (-1);
+  }
+
+  /* now chose a good place to break the line */
+  cnt = format_line (lineInfo, n, buf, flags, 0, b_read, &ch, &vch, &col, &special);
+  buf_ptr = buf + cnt;
+
+  /* move the break point only if smart_wrap is set */
+  if (option (OPTWRAP))
+  {
+    if (cnt < b_read)
+    {
+      if (ch != -1 && buf[cnt] != ' ' && buf[cnt] != '\t' && buf[cnt] != '\n' && buf[cnt] != '\r')
+      {
+       buf_ptr = buf + ch;
+       /* skip trailing blanks */
+       while (ch && (buf[ch] == ' ' || buf[ch] == '\t' || buf[ch] == '\r'))
+         ch--;
+       cnt = ch + 1;
+      }
+      else
+       buf_ptr = buf + cnt; /* a very long word... */
+    }
+    if (!(flags & M_PAGER_NSKIP))
+      /* skip leading blanks on the next line too */
+      while (*buf_ptr == ' ' || *buf_ptr == '\t') 
+       buf_ptr++;
+  }
+
+  if (*buf_ptr == '\r')
+    buf_ptr++;
+  if (*buf_ptr == '\n')
+    buf_ptr++;
+
+  if ((int) (buf_ptr - buf) < b_read && !(*lineInfo)[n+1].continuation)
+    append_line (*lineInfo, n, (int) (buf_ptr - buf));
+  (*lineInfo)[n+1].offset = (*lineInfo)[n].offset + (long) (buf_ptr - buf);
+
+  /* if we don't need to display the line we are done */
+  if (!(flags & M_SHOW))
+    return 0;
+
+  /* display the line */
+  format_line (lineInfo, n, buf, flags, &a, cnt, &ch, &vch, &col, &special);
+
+  /* avoid a bug in ncurses... */
+#ifndef USE_SLANG_CURSES
+  if (col == 0)
+  {
+    SETCOLOR (MT_COLOR_NORMAL);
+    addch (' ');
+  }
+#endif
+
+  /* end the last color pattern (needed by S-Lang) */
+  if (special || (col != COLS && (flags & (M_SHOWCOLOR | M_SEARCH))))
+    resolve_color (*lineInfo, n, vch, flags, 0, &a);
+          
+  /*
+   * Fill the blank space at the end of the line with the prevailing color.
+   * ncurses does an implicit clrtoeol() when you do addch('\n') so we have
+   * to make sure to reset the color *after* that
+   */
+  if (flags & M_SHOWCOLOR)
+  {
+    m = ((*lineInfo)[n].continuation) ? ((*lineInfo)[n].syntax)[0].first : n;
+    if ((*lineInfo)[m].type == MT_COLOR_HEADER)
+      def_color = ((*lineInfo)[m].syntax)[0].color;
+    else
+      def_color = ColorDefs[ (*lineInfo)[m].type ];
+
+    attrset (def_color);
+#ifdef HAVE_BKGDSET
+    bkgdset (def_color | ' ');
+#endif
+  }
+
+  /* ncurses always wraps lines when you get to the right side of the
+   * screen, but S-Lang seems to only wrap if the next character is *not*
+   * a newline (grr!).
+   */
+#ifndef USE_SLANG_CURSES
+    if (col < COLS)
+#endif
+      addch ('\n');
+
+  /*
+   * reset the color back to normal.  This *must* come after the
+   * addch('\n'), otherwise the color for this line will not be
+   * filled to the right margin.
+   */
+  if (flags & M_SHOWCOLOR)
+  {
+    SETCOLOR(MT_COLOR_NORMAL);
+    BKGDSET(MT_COLOR_NORMAL);
+  }
+
+  /* build a return code */
+  if (!(flags & M_SHOW))
+    flags = 0;
+
+  return (flags);
+}
+
+static int
+upNLines (int nlines, struct line_t *info, int cur, int hiding)
+{
+  while (cur > 0 && nlines > 0)
+  {
+    cur--;
+    if (!hiding || info[cur].type != MT_COLOR_QUOTED)
+      nlines--;
+  }
+
+  return cur;
+}
+
+static struct mapping_t PagerHelp[] = {
+  { N_("Exit"),        OP_EXIT },
+  { N_("PrevPg"), OP_PREV_PAGE },
+  { N_("NextPg"), OP_NEXT_PAGE },
+  { NULL,      0 }
+};
+static struct mapping_t PagerHelpExtra[] = {
+  { N_("View Attachm."), OP_VIEW_ATTACHMENTS },
+  { N_("Del"), OP_DELETE },
+  { N_("Reply"), OP_REPLY },
+  { N_("Next"),        OP_MAIN_NEXT_UNDELETED },
+  { NULL,      0 }
+};
+
+#ifdef USE_NNTP
+static struct mapping_t PagerNewsHelpExtra[] = {
+  { N_("Post"),     OP_POST },
+  { N_("Followup"), OP_FOLLOWUP },
+  { N_("Del"),      OP_DELETE },
+  { N_("Next"),     OP_MAIN_NEXT_UNDELETED },
+  { NULL,           0 }
+};
+#endif
+
+
+
+/* This pager is actually not so simple as it once was.  It now operates in
+   two modes: one for viewing messages and the other for viewing help.  These
+   can be distinguished by whether or not ``hdr'' is NULL.  The ``hdr'' arg
+   is there so that we can do operations on the current message without the
+   need to pop back out to the main-menu.  */
+int 
+mutt_pager (const char *banner, const char *fname, int flags, pager_t *extra)
+{
+  static char searchbuf[STRING];
+  char buffer[LONG_STRING];
+  char helpstr[SHORT_STRING*2];
+  char tmphelp[SHORT_STRING*2];
+  int maxLine, lastLine = 0;
+  struct line_t *lineInfo;
+  struct q_class_t *QuoteList = NULL;
+  int i, j, ch = 0, rc = -1, hideQuoted = 0, q_level = 0, force_redraw = 0;
+  int lines = 0, curline = 0, topline = 0, oldtopline = 0, err, first = 1;
+  int r = -1;
+  int redraw = REDRAW_FULL;
+  FILE *fp = NULL;
+  long last_pos = 0, last_offset = 0;
+  int old_smart_wrap, old_markers;
+  struct stat sb;
+  regex_t SearchRE;
+  int SearchCompiled = 0, SearchFlag = 0, SearchBack = 0;
+  int has_types = (IsHeader(extra) || (flags & M_SHOWCOLOR)) ? M_TYPES : 0; /* main message or rfc822 attachment */
+
+  int bodyoffset = 1;                  /* offset of first line of real text */
+  int statusoffset = 0;                /* offset for the status bar */
+  int helpoffset = LINES - 2;          /* offset for the help bar. */
+  int bodylen = LINES - 2 - bodyoffset; /* length of displayable area */
+
+  MUTTMENU *index = NULL;              /* the Pager Index (PI) */
+  int indexoffset = 0;                 /* offset for the PI */
+  int indexlen = PagerIndexLines;      /* indexlen not always == PIL */
+  int indicator = indexlen / 3;        /* the indicator line of the PI */
+  int old_PagerIndexLines;             /* some people want to resize it
+                                        * while inside the pager... */
+
+#ifdef USE_NNTP
+  char *followup_to;
+#endif
+
+  if (!(flags & M_SHOWCOLOR))
+    flags |= M_SHOWFLAT;
+
+  if ((fp = fopen (fname, "r")) == NULL)
+  {
+    mutt_perror (fname);
+    return (-1);
+  }
+
+  if (stat (fname, &sb) != 0)
+  {
+    mutt_perror (fname);
+    fclose (fp);
+    return (-1);
+  }
+  unlink (fname);
+
+  /* Initialize variables */
+
+  if (IsHeader (extra) && !extra->hdr->read)
+  {
+    Context->msgnotreadyet = extra->hdr->msgno;
+    mutt_set_flag (Context, extra->hdr, M_READ, 1);
+  }
+
+  lineInfo = safe_malloc (sizeof (struct line_t) * (maxLine = LINES));
+  for (i = 0 ; i < maxLine ; i++)
+  {
+    memset (&lineInfo[i], 0, sizeof (struct line_t));
+    lineInfo[i].type = -1;
+    lineInfo[i].search_cnt = -1;
+    lineInfo[i].syntax = safe_malloc (sizeof (struct syntax_t));
+    (lineInfo[i].syntax)[0].first = (lineInfo[i].syntax)[0].last = -1;
+  }
+
+  mutt_compile_help (helpstr, sizeof (helpstr), MENU_PAGER, PagerHelp);
+  if (IsHeader (extra))
+  {
+    strfcpy (tmphelp, helpstr, sizeof (tmphelp));
+    mutt_compile_help (buffer, sizeof (buffer), MENU_PAGER,
+#ifdef USE_NNTP
+       (Context && (Context->magic == M_NNTP)) ? PagerNewsHelpExtra :
+#endif
+       PagerHelpExtra);
+    snprintf (helpstr, sizeof (helpstr), "%s %s", tmphelp, buffer);
+  }
+  if (!InHelp)
+  {
+    strfcpy (tmphelp, helpstr, sizeof (tmphelp));
+    mutt_make_help (buffer, sizeof (buffer), _("Help"), MENU_PAGER, OP_HELP);
+    snprintf (helpstr, sizeof (helpstr), "%s %s", tmphelp, buffer);
+  }
+
+  while (ch != -1)
+  {
+    mutt_curs_set (0);
+
+#ifdef USE_IMAP
+    imap_keepalive ();
+#endif
+    
+    if (redraw & REDRAW_FULL)
+    {
+      SETCOLOR (MT_COLOR_NORMAL);
+      /* clear() doesn't optimize screen redraws */
+      move (0, 0);
+      clrtobot ();
+
+      if (IsHeader (extra) && Context->vcount + 1 < PagerIndexLines)
+       indexlen = Context->vcount + 1;
+      else
+       indexlen = PagerIndexLines;
+
+      indicator = indexlen / 3;
+
+      if (option (OPTSTATUSONTOP))
+      {
+       indexoffset = 0;
+       statusoffset = IsHeader (extra) ? indexlen : 0;
+       bodyoffset = statusoffset + 1;
+       helpoffset = LINES - 2;
+       bodylen = helpoffset - bodyoffset;
+       if (!option (OPTHELP))
+         bodylen++;
+      }
+      else
+      {
+       helpoffset = 0;
+       indexoffset = 1;
+       statusoffset = LINES - 2;
+       if (!option (OPTHELP))
+         indexoffset = 0;
+       bodyoffset = indexoffset + (IsHeader (extra) ? indexlen : 0);
+       bodylen = statusoffset - bodyoffset;
+      }
+
+      if (option (OPTHELP))
+      {
+       SETCOLOR (MT_COLOR_STATUS);
+       move (helpoffset, 0);
+       mutt_paddstr (COLS, helpstr);
+       SETCOLOR (MT_COLOR_NORMAL);
+      }
+
+#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
+      if (Resize != NULL)
+      {
+       if ((SearchCompiled = Resize->SearchCompiled))
+       {
+         REGCOMP
+           (&SearchRE, searchbuf, REG_NEWLINE | mutt_which_case (searchbuf));
+         SearchFlag = M_SEARCH;
+         SearchBack = Resize->SearchBack;
+       }
+       lines = Resize->line;
+       redraw |= REDRAW_SIGWINCH;
+
+       FREE (&Resize);
+      }
+#endif
+
+      if (IsHeader (extra) && PagerIndexLines)
+      {
+       if (index == NULL)
+       {
+         /* only allocate the space if/when we need the index.
+            Initialise the menu as per the main index */
+         index = mutt_new_menu();
+         index->menu = MENU_MAIN;
+         index->make_entry = index_make_entry;
+         index->color = index_color;
+         index->max = Context->vcount;
+         index->current = extra->hdr->virtual;
+       }
+
+       SETCOLOR (MT_COLOR_NORMAL);
+       index->offset  = indexoffset + (option (OPTSTATUSONTOP) ? 1 : 0);
+
+       index->pagelen = indexlen - 1;
+
+       /* some fudge to work out where abouts the indicator should go */
+       if (index->current - indicator < 0)
+         index->top = 0;
+       else if (index->max - index->current < index->pagelen - indicator)
+         index->top = index->max - index->pagelen;
+       else
+         index->top = index->current - indicator;
+
+       menu_redraw_index(index);
+      }
+
+      redraw |= REDRAW_BODY | REDRAW_INDEX | REDRAW_STATUS;
+      mutt_show_error ();
+    }
+
+    if (redraw & REDRAW_SIGWINCH)
+    {
+      i = -1;
+      j = -1;
+      while (display_line (fp, &last_pos, &lineInfo, ++i, &lastLine, &maxLine,
+            has_types | SearchFlag, &QuoteList, &q_level, &force_redraw,
+            &SearchRE) == 0)
+       if (!lineInfo[i].continuation && ++j == lines)
+       {
+         topline = i;
+         if (!SearchFlag)
+           break;
+       }
+    }
+
+    if ((redraw & REDRAW_BODY) || topline != oldtopline)
+    {
+      do {
+       move (bodyoffset, 0);
+       curline = oldtopline = topline;
+       lines = 0;
+       force_redraw = 0;
+
+       while (lines < bodylen && lineInfo[curline].offset <= sb.st_size - 1)
+       {
+         if (display_line (fp, &last_pos, &lineInfo, curline, &lastLine, 
+                           &maxLine,
+                           (flags & M_DISPLAYFLAGS) | hideQuoted | SearchFlag, 
+                           &QuoteList, &q_level, &force_redraw, &SearchRE) > 0)
+           lines++;
+         curline++;
+       }
+       last_offset = lineInfo[curline].offset;
+      } while (force_redraw);
+
+      SETCOLOR (MT_COLOR_TILDE);
+      BKGDSET (MT_COLOR_TILDE);
+      while (lines < bodylen)
+      {
+       clrtoeol ();
+       if (option (OPTTILDE))
+         addch ('~');
+       addch ('\n');
+       lines++;
+      }
+      /* We are going to update the pager status bar, so it isn't
+       * necessary to reset to normal color now. */
+
+      redraw |= REDRAW_STATUS; /* need to update the % seen */
+    }
+
+    if (redraw & REDRAW_STATUS)
+    {
+      /* print out the pager status bar */
+      SETCOLOR (MT_COLOR_STATUS);
+      BKGDSET (MT_COLOR_STATUS);
+      CLEARLINE (statusoffset);
+      if (IsHeader (extra))
+      {
+       _mutt_make_string (buffer,
+                          COLS-9 < sizeof (buffer) ? COLS-9 : sizeof (buffer),
+                          NONULL (PagerFmt), Context, extra->hdr, M_FORMAT_MAKEPRINT);
+      }
+      else if (IsMsgAttach (extra))
+      {
+       _mutt_make_string (buffer,
+                          COLS - 9 < sizeof (buffer) ? COLS - 9: sizeof (buffer),
+                          NONULL (PagerFmt), Context, extra->bdy->hdr, M_FORMAT_MAKEPRINT);
+      }
+      mutt_paddstr (COLS-10, IsHeader (extra) || IsMsgAttach (extra) ?
+                   buffer : banner);
+      addstr (" -- (");
+      if (last_pos < sb.st_size - 1)
+       printw ("%d%%)", (int) (100 * last_offset / sb.st_size));
+      else
+       addstr (topline == 0 ? "all)" : "end)");
+      BKGDSET (MT_COLOR_NORMAL);
+      SETCOLOR (MT_COLOR_NORMAL);
+    }
+
+    if ((redraw & REDRAW_INDEX) && index)
+    {
+      /* redraw the pager_index indicator, because the
+       * flags for this message might have changed. */
+      menu_redraw_current (index);
+
+      /* print out the index status bar */
+      menu_status_line (buffer, sizeof (buffer), index, NONULL(Status));
+      move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)), 0);
+      SETCOLOR (MT_COLOR_STATUS);
+      mutt_paddstr (COLS, buffer);
+      SETCOLOR (MT_COLOR_NORMAL);
+    }
+
+    redraw = 0;
+
+    move (statusoffset, COLS-1);
+    mutt_refresh ();
+    ch = km_dokey (MENU_PAGER);
+    if (ch != -1)
+      mutt_clear_error ();
+    mutt_curs_set (1);
+
+    if (SigInt)
+    {
+      mutt_query_exit ();
+      continue;
+    }
+#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
+    else if (SigWinch)
+    {
+      mutt_resize_screen ();
+
+      /* Store current position. */
+      lines = -1;
+      for (i = 0; i <= topline; i++)
+       if (!lineInfo[i].continuation)
+         lines++;
+
+      if (flags & M_PAGER_RETWINCH)
+      {
+       Resize = safe_malloc (sizeof (struct resize));
+
+       Resize->line = lines;
+       Resize->SearchCompiled = SearchCompiled;
+       Resize->SearchBack = SearchBack;
+
+       ch = -1;
+       rc = OP_REFORMAT_WINCH;
+      }
+      else
+      {
+       for (i = 0; i < maxLine; i++)
+       {
+         lineInfo[i].offset = 0;
+         lineInfo[i].type = -1;
+         lineInfo[i].continuation = 0;
+         lineInfo[i].chunks = 0;
+         lineInfo[i].search_cnt = -1;
+         lineInfo[i].quote = NULL;
+
+         safe_realloc (&(lineInfo[i].syntax),
+                       sizeof (struct syntax_t));
+         if (SearchCompiled && lineInfo[i].search)
+             FREE (&(lineInfo[i].search));
+       }
+
+       lastLine = 0;
+       topline = 0;
+
+       redraw = REDRAW_FULL | REDRAW_SIGWINCH;
+       ch = 0;
+      }
+
+      SigWinch = 0;
+      clearok(stdscr,TRUE);/*force complete redraw*/
+      continue;
+    }
+#endif
+    else if (ch == -1)
+    {
+      ch = 0;
+      continue;
+    }
+
+    rc = ch;
+
+    switch (ch)
+    {
+      case OP_EXIT:
+       rc = -1;
+       ch = -1;
+       break;
+
+      case OP_NEXT_PAGE:
+       if (lineInfo[curline].offset < sb.st_size-1)
+       {
+         topline = upNLines (PagerContext, lineInfo, curline, hideQuoted);
+       }
+       else if (option (OPTPAGERSTOP))
+       {
+         /* emulate "less -q" and don't go on to the next message. */
+         mutt_error _("Bottom of message is shown.");
+       }
+       else
+       {
+         /* end of the current message, so display the next message. */
+         rc = OP_MAIN_NEXT_UNDELETED;
+         ch = -1;
+       }
+       break;
+
+      case OP_PREV_PAGE:
+       if (topline != 0)
+       {
+         topline = upNLines (bodylen-PagerContext, lineInfo, topline, hideQuoted);
+       }
+       else
+         mutt_error _("Top of message is shown.");
+       break;
+
+      case OP_NEXT_LINE:
+       if (lineInfo[curline].offset < sb.st_size-1)
+       {
+         topline++;
+         if (hideQuoted)
+         {
+           while (lineInfo[topline].type == MT_COLOR_QUOTED &&
+                  topline < lastLine)
+             topline++;
+         }
+       }
+       else
+         mutt_error _("Bottom of message is shown.");
+       break;
+
+      case OP_PREV_LINE:
+       if (topline)
+         topline = upNLines (1, lineInfo, topline, hideQuoted);
+       else
+         mutt_error _("Top of message is shown.");
+       break;
+
+      case OP_PAGER_TOP:
+        if (topline)
+         topline = 0;
+       else
+         mutt_error _("Top of message is shown.");
+       break;
+
+      case OP_HALF_UP:
+       if (topline)
+         topline = upNLines (bodylen/2, lineInfo, topline, hideQuoted);
+       else
+         mutt_error _("Top of message is shown.");
+       break;
+
+      case OP_HALF_DOWN:
+       if (lineInfo[curline].offset < sb.st_size-1)
+       {
+         topline = upNLines (bodylen/2, lineInfo, curline, hideQuoted);
+       }
+       else if (option (OPTPAGERSTOP))
+       {
+         /* emulate "less -q" and don't go on to the next message. */
+         mutt_error _("Bottom of message is shown.");
+       }
+       else
+       {
+         /* end of the current message, so display the next message. */
+         rc = OP_MAIN_NEXT_UNDELETED;
+         ch = -1;
+       }
+       break;
+
+      case OP_SEARCH_NEXT:
+      case OP_SEARCH_OPPOSITE:
+       if (SearchCompiled)
+       {
+search_next:
+         if ((!SearchBack && ch==OP_SEARCH_NEXT) ||
+             (SearchBack &&ch==OP_SEARCH_OPPOSITE))
+         {
+           /* searching forward */
+           for (i = topline + 1; i < lastLine; i++)
+           {
+             if ((!hideQuoted || lineInfo[i].type != MT_COLOR_QUOTED) && 
+                   !lineInfo[i].continuation && lineInfo[i].search_cnt > 0)
+               break;
+           }
+
+           if (i < lastLine)
+             topline = i;
+           else
+             mutt_error _("Not found.");
+         }
+         else
+         {
+           /* searching backward */
+           for (i = topline - 1; i >= 0; i--)
+           {
+             if ((!hideQuoted || (has_types && 
+                   lineInfo[i].type != MT_COLOR_QUOTED)) && 
+                   !lineInfo[i].continuation && lineInfo[i].search_cnt > 0)
+               break;
+           }
+
+           if (i >= 0)
+             topline = i;
+           else
+             mutt_error _("Not found.");
+         }
+
+         if (lineInfo[topline].search_cnt > 0)
+           SearchFlag = M_SEARCH;
+
+         break;
+       }
+       /* no previous search pattern, so fall through to search */
+
+      case OP_SEARCH:
+      case OP_SEARCH_REVERSE:
+        strfcpy (buffer, searchbuf, sizeof (buffer));
+       if (mutt_get_field ((SearchBack ? _("Reverse search: ") :
+                         _("Search: ")), buffer, sizeof (buffer),
+                         M_CLEAR) != 0)
+         break;
+
+       if (!strcmp (buffer, searchbuf))
+       {
+         if (SearchCompiled)
+         {
+           /* do an implicit search-next */
+           if (ch == OP_SEARCH)
+             ch = OP_SEARCH_NEXT;
+           else
+             ch = OP_SEARCH_OPPOSITE;
+
+           goto search_next;
+         }
+       }
+      
+        if (!buffer[0])
+         break;
+      
+       strfcpy (searchbuf, buffer, sizeof (searchbuf));
+
+       /* leave SearchBack alone if ch == OP_SEARCH_NEXT */
+       if (ch == OP_SEARCH)
+         SearchBack = 0;
+       else if (ch == OP_SEARCH_REVERSE)
+         SearchBack = 1;
+
+       if (SearchCompiled)
+       {
+         regfree (&SearchRE);
+         for (i = 0; i < lastLine; i++)
+         {
+           if (lineInfo[i].search)
+             FREE (&(lineInfo[i].search));
+           lineInfo[i].search_cnt = -1;
+         }
+       }
+
+       if ((err = REGCOMP (&SearchRE, searchbuf, REG_NEWLINE | mutt_which_case (searchbuf))) != 0)
+       {
+         regerror (err, &SearchRE, buffer, sizeof (buffer));
+         mutt_error ("%s", buffer);
+         regfree (&SearchRE);
+         for (i = 0; i < maxLine ; i++)
+         {
+           /* cleanup */
+           if (lineInfo[i].search)
+             FREE (&(lineInfo[i].search));
+           lineInfo[i].search_cnt = -1;
+         }
+         SearchFlag = 0;
+         SearchCompiled = 0;
+       }
+       else
+       {
+         SearchCompiled = 1;
+         /* update the search pointers */
+         i = 0;
+         while (display_line (fp, &last_pos, &lineInfo, i, &lastLine, 
+                               &maxLine, M_SEARCH | (flags & M_PAGER_NSKIP),
+                               &QuoteList, &q_level,
+                               &force_redraw, &SearchRE) == 0)
+           i++;
+
+         if (!SearchBack)
+         {
+           /* searching forward */
+           for (i = topline; i < lastLine; i++)
+           {
+             if ((!hideQuoted || lineInfo[i].type != MT_COLOR_QUOTED) && 
+                   !lineInfo[i].continuation && lineInfo[i].search_cnt > 0)
+               break;
+           }
+
+           if (i < lastLine) topline = i;
+         }
+         else
+         {
+           /* searching backward */
+           for (i = topline; i >= 0; i--)
+           {
+             if ((!hideQuoted || lineInfo[i].type != MT_COLOR_QUOTED) && 
+                   !lineInfo[i].continuation && lineInfo[i].search_cnt > 0)
+               break;
+           }
+
+           if (i >= 0) topline = i;
+         }
+
+         if (lineInfo[topline].search_cnt == 0)
+         {
+           SearchFlag = 0;
+           mutt_error _("Not found.");
+         }
+         else
+           SearchFlag = M_SEARCH;
+       }
+       redraw = REDRAW_BODY;
+       break;
+
+      case OP_SEARCH_TOGGLE:
+       if (SearchCompiled)
+       {
+         SearchFlag ^= M_SEARCH;
+         redraw = REDRAW_BODY;
+       }
+       break;
+
+      case OP_HELP:
+       /* don't let the user enter the help-menu from the help screen! */
+       if (! InHelp)
+       {
+         InHelp = 1;
+         mutt_help (MENU_PAGER);
+         redraw = REDRAW_FULL;
+         InHelp = 0;
+       }
+       else
+         mutt_error _("Help is currently being shown.");
+       break;
+
+      case OP_PAGER_HIDE_QUOTED:
+       if (has_types)
+       {
+         hideQuoted ^= M_HIDE;
+         if (hideQuoted && lineInfo[topline].type == MT_COLOR_QUOTED)
+           topline = upNLines (1, lineInfo, topline, hideQuoted);
+         else
+           redraw = REDRAW_BODY;
+       }
+       break;
+
+      case OP_PAGER_SKIP_QUOTED:
+       if (has_types)
+       {
+         int dretval = 0;
+         int new_topline = topline;
+
+         while ((new_topline < lastLine ||
+                 (0 == (dretval = display_line (fp, &last_pos, &lineInfo,
+                        new_topline, &lastLine, &maxLine, M_TYPES,
+                        &QuoteList, &q_level, &force_redraw, &SearchRE))))
+                && lineInfo[new_topline].type != MT_COLOR_QUOTED)
+           new_topline++;
+
+         if (dretval < 0)
+         {
+           mutt_error _("No more quoted text.");
+           break;
+         }
+
+         while ((new_topline < lastLine ||
+                 (0 == (dretval = display_line (fp, &last_pos, &lineInfo,
+                        new_topline, &lastLine, &maxLine, M_TYPES,
+                        &QuoteList, &q_level, &force_redraw, &SearchRE))))
+                && lineInfo[new_topline].type == MT_COLOR_QUOTED)
+           new_topline++;
+
+         if (dretval < 0)
+         {
+           mutt_error _("No more unquoted text after quoted text.");
+           break;        
+         }
+         topline = new_topline;
+       }
+       break;
+
+      case OP_PAGER_BOTTOM: /* move to the end of the file */
+       if (lineInfo[curline].offset < sb.st_size - 1)
+       {
+         i = curline;
+         /* make sure the types are defined to the end of file */
+         while (display_line (fp, &last_pos, &lineInfo, i, &lastLine, 
+                               &maxLine, has_types, 
+                               &QuoteList, &q_level, &force_redraw,
+                               &SearchRE) == 0)
+           i++;
+         topline = upNLines (bodylen, lineInfo, lastLine, hideQuoted);
+       }
+       else
+         mutt_error _("Bottom of message is shown.");
+       break;
+
+      case OP_REDRAW:
+       clearok (stdscr, TRUE);
+       redraw = REDRAW_FULL;
+       break;
+
+      case OP_NULL:
+       km_error_key (MENU_PAGER);
+       break;
+
+       /* --------------------------------------------------------------------
+        * The following are operations on the current message rather than
+        * adjusting the view of the message.
+        */
+
+      case OP_BOUNCE_MESSAGE:
+       CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra))
+        CHECK_ATTACH;
+        if (IsMsgAttach (extra))
+         mutt_attach_bounce (extra->fp, extra->hdr,
+                             extra->idx, extra->idxlen,
+                             extra->bdy);
+        else
+          ci_bounce_message (extra->hdr, &redraw);
+       break;
+
+      case OP_RESEND:
+        CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra))
+        CHECK_ATTACH;
+        if (IsMsgAttach (extra))
+         mutt_attach_resend (extra->fp, extra->hdr,
+                             extra->idx, extra->idxlen,
+                             extra->bdy);
+        else
+         mutt_resend_message (NULL, extra->ctx, extra->hdr);
+        redraw = REDRAW_FULL;
+        break;
+      
+      case OP_CREATE_ALIAS:
+       CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra));
+        if (IsMsgAttach (extra))
+         mutt_create_alias (extra->bdy->hdr->env, NULL);
+        else
+         mutt_create_alias (extra->hdr->env, NULL);
+       MAYBE_REDRAW (redraw);
+       break;
+
+      case OP_PURGE_MESSAGE:
+      case OP_DELETE:
+       CHECK_MODE(IsHeader (extra));
+       CHECK_READONLY;
+
+#ifdef USE_IMAP
+CHECK_IMAP_ACL(IMAP_ACL_DELETE);
+#endif
+
+       mutt_set_flag (Context, extra->hdr, M_DELETE, 1);
+       mutt_set_flag (Context, extra->hdr, M_PURGED,
+                      ch != OP_PURGE_MESSAGE ? 0 : 1);
+        if (option (OPTDELETEUNTAG))
+         mutt_set_flag (Context, extra->hdr, M_TAG, 0);
+       redraw = REDRAW_STATUS | REDRAW_INDEX;
+       if (option (OPTRESOLVE))
+       {
+         ch = -1;
+         rc = OP_MAIN_NEXT_UNDELETED;
+       }
+       break;
+
+      case OP_DELETE_THREAD:
+      case OP_DELETE_SUBTHREAD:
+       CHECK_MODE(IsHeader (extra));
+       CHECK_READONLY;
+
+#ifdef USE_IMAP
+CHECK_IMAP_ACL(IMAP_ACL_DELETE);
+#endif
+
+       r = mutt_thread_set_flag (extra->hdr, M_DELETE, 1,
+                                 ch == OP_DELETE_THREAD ? 0 : 1);
+
+       if (r != -1)
+       {
+         if (option (OPTDELETEUNTAG))
+           mutt_thread_set_flag (extra->hdr, M_TAG, 0,
+                                 ch == OP_DELETE_THREAD ? 0 : 1);
+         if (option (OPTRESOLVE))
+         {
+           rc = OP_MAIN_NEXT_UNDELETED;
+           ch = -1;
+         }
+
+         if (!option (OPTRESOLVE) && PagerIndexLines)
+           redraw = REDRAW_FULL;
+         else
+           redraw = REDRAW_STATUS | REDRAW_INDEX;
+       }
+       break;
+
+      case OP_DISPLAY_ADDRESS:
+       CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra));
+        if (IsMsgAttach (extra))
+         mutt_display_address (extra->bdy->hdr->env);
+        else
+         mutt_display_address (extra->hdr->env);
+       break;
+
+      case OP_ENTER_COMMAND:
+       old_smart_wrap = option (OPTWRAP);
+       old_markers = option (OPTMARKERS);
+       old_PagerIndexLines = PagerIndexLines;
+
+       CurrentMenu = MENU_PAGER;
+       mutt_enter_command ();
+
+       if (option (OPTNEEDRESORT))
+       {
+         unset_option (OPTNEEDRESORT);
+         CHECK_MODE(IsHeader (extra));
+         set_option (OPTNEEDRESORT);
+       }
+
+       if (old_PagerIndexLines != PagerIndexLines)
+       {
+         if (index)
+           mutt_menuDestroy (&index);
+         index = NULL;
+       }
+       
+       if (option (OPTWRAP) != old_smart_wrap || 
+           option (OPTMARKERS) != old_markers)
+       {
+         if (flags & M_PAGER_RETWINCH)
+         {
+           ch = -1;
+           rc = OP_REFORMAT_WINCH;
+           continue;
+         }
+
+         /* count the real lines above */
+         j = 0;
+         for (i = 0; i <= topline; i++)
+         {
+           if (!lineInfo[i].continuation)
+             j++;
+         }
+
+         /* we need to restart the whole thing */
+         for (i = 0; i < maxLine; i++)
+         {
+           lineInfo[i].offset = 0;
+           lineInfo[i].type = -1;
+           lineInfo[i].continuation = 0;
+           lineInfo[i].chunks = 0;
+           lineInfo[i].search_cnt = -1;
+           lineInfo[i].quote = NULL;
+
+           safe_realloc (&(lineInfo[i].syntax), sizeof (struct syntax_t));
+           if (SearchCompiled && lineInfo[i].search)
+               FREE (&(lineInfo[i].search));
+         }
+
+         if (SearchCompiled)
+         {
+           regfree (&SearchRE);
+           SearchCompiled = 0;
+         }
+         SearchFlag = 0;
+
+         /* try to keep the old position */
+         topline = 0;
+         lastLine = 0;
+         while (j > 0 && display_line (fp, &last_pos, &lineInfo, topline, 
+                                       &lastLine, &maxLine,
+                                       (has_types ? M_TYPES : 0),
+                                       &QuoteList, &q_level, &force_redraw,
+                                       &SearchRE) == 0)
+         {
+           if (! lineInfo[topline].continuation)
+             j--;
+           if (j > 0)
+             topline++;
+         }
+
+         ch = 0;
+       }
+
+       if (option (OPTFORCEREDRAWPAGER))
+         redraw = REDRAW_FULL;
+       unset_option (OPTFORCEREDRAWINDEX);
+       unset_option (OPTFORCEREDRAWPAGER);
+       break;
+
+      case OP_FLAG_MESSAGE:
+       CHECK_MODE(IsHeader (extra));
+       CHECK_READONLY;
+
+#ifdef USE_POP
+       if (Context->magic == M_POP)
+       {
+         mutt_flushinp ();
+         mutt_error _("Can't change 'important' flag on POP server.");
+         break;
+       }
+#endif
+
+#ifdef USE_IMAP
+CHECK_IMAP_ACL(IMAP_ACL_WRITE);
+#endif
+
+#ifdef USE_NNTP
+       if (Context->magic == M_NNTP)
+       {
+         mutt_flushinp ();
+         mutt_error _("Can't change 'important' flag on NNTP server.");
+         break;
+       }
+#endif
+
+       mutt_set_flag (Context, extra->hdr, M_FLAG, !extra->hdr->flagged);
+       redraw = REDRAW_STATUS | REDRAW_INDEX;
+       if (option (OPTRESOLVE))
+       {
+         ch = -1;
+         rc = OP_MAIN_NEXT_UNDELETED;
+       }
+       break;
+
+      case OP_PIPE:
+       CHECK_MODE(IsHeader (extra) || IsAttach (extra));
+       if (IsAttach (extra))
+         mutt_pipe_attachment_list (extra->fp, 0, extra->bdy, 0);
+       else
+         mutt_pipe_message (extra->hdr);
+       MAYBE_REDRAW (redraw);
+       break;
+
+      case OP_PRINT:
+       CHECK_MODE(IsHeader (extra) || IsAttach (extra));
+        if (IsAttach (extra))
+         mutt_print_attachment_list (extra->fp, 0, extra->bdy);
+        else
+         mutt_print_message (extra->hdr);
+       break;
+
+      case OP_MAIL:
+       CHECK_MODE(IsHeader (extra) && !IsAttach (extra));
+        CHECK_ATTACH;      
+       ci_send_message (0, NULL, NULL, extra->ctx, extra->hdr);
+       redraw = REDRAW_FULL;
+       break;
+
+#ifdef USE_NNTP
+      case OP_POST:
+       CHECK_MODE(IsHeader (extra) && !IsAttach (extra));
+       CHECK_ATTACH;
+       if (extra->ctx && extra->ctx->magic == M_NNTP &&
+           !((NNTP_DATA *)extra->ctx->data)->allowed &&
+           query_quadoption (OPT_TOMODERATED,_("Posting to this group not allowed, may be moderated. Continue?")) != M_YES)
+         break;
+       ci_send_message (SENDNEWS, NULL, NULL, extra->ctx, NULL);
+       redraw = REDRAW_FULL;
+       break;
+
+      case OP_FORWARD_TO_GROUP:
+       CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra));
+       CHECK_ATTACH;
+       if (extra->ctx && extra->ctx->magic == M_NNTP &&
+           !((NNTP_DATA *)extra->ctx->data)->allowed &&
+           query_quadoption (OPT_TOMODERATED,_("Posting to this group not allowed, may be moderated. Continue?")) != M_YES)
+         break;
+       if (IsMsgAttach (extra))
+         mutt_attach_forward (extra->fp, extra->hdr, extra->idx,
+                              extra->idxlen, extra->bdy, SENDNEWS);
+       else
+         ci_send_message (SENDNEWS|SENDFORWARD, NULL, NULL, extra->ctx, extra->hdr);
+       redraw = REDRAW_FULL;
+       break;
+
+      case OP_FOLLOWUP:
+       CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra));
+       CHECK_ATTACH;
+
+        if (IsMsgAttach (extra))
+         followup_to = extra->bdy->hdr->env->followup_to;
+        else
+         followup_to = extra->hdr->env->followup_to;
+
+       if (!followup_to || mutt_strcasecmp (followup_to, "poster") ||
+           query_quadoption (OPT_FOLLOWUPTOPOSTER,_("Reply by mail as poster prefers?")) != M_YES)
+       {
+         if (extra->ctx && extra->ctx->magic == M_NNTP &&
+             !((NNTP_DATA *)extra->ctx->data)->allowed &&
+             query_quadoption (OPT_TOMODERATED,_("Posting to this group not allowed, may be moderated. Continue?")) != M_YES)
+           break;
+         if (IsMsgAttach (extra))
+           mutt_attach_reply (extra->fp, extra->hdr, extra->idx,
+                              extra->idxlen, extra->bdy, SENDNEWS|SENDREPLY);
+         else
+           ci_send_message (SENDNEWS|SENDREPLY, NULL, NULL,
+                            extra->ctx, extra->hdr);
+         redraw = REDRAW_FULL;
+         break;
+       }
+#endif
+
+      case OP_REPLY:
+       CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra));
+        CHECK_ATTACH;      
+        if (IsMsgAttach (extra)) 
+         mutt_attach_reply (extra->fp, extra->hdr, extra->idx,
+                            extra->idxlen, extra->bdy,
+                            SENDREPLY);
+       else
+         ci_send_message (SENDREPLY, NULL, NULL, extra->ctx, extra->hdr);
+       redraw = REDRAW_FULL;
+       break;
+
+      case OP_RECALL_MESSAGE:
+       CHECK_MODE(IsHeader (extra));
+        CHECK_ATTACH;
+       ci_send_message (SENDPOSTPONED, NULL, NULL, extra->ctx, extra->hdr);
+       redraw = REDRAW_FULL;
+       break;
+
+      case OP_GROUP_REPLY:
+       CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra));
+        CHECK_ATTACH;
+        if (IsMsgAttach (extra))
+         mutt_attach_reply (extra->fp, extra->hdr, extra->idx,
+                            extra->idxlen, extra->bdy, SENDREPLY|SENDGROUPREPLY);
+        else
+         ci_send_message (SENDREPLY | SENDGROUPREPLY, NULL, NULL, extra->ctx, extra->hdr);
+       redraw = REDRAW_FULL;
+       break;
+
+      case OP_LIST_REPLY:
+       CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra));
+        CHECK_ATTACH;        
+        if (IsMsgAttach (extra))
+         mutt_attach_reply (extra->fp, extra->hdr, extra->idx,
+                            extra->idxlen, extra->bdy, SENDREPLY|SENDLISTREPLY);
+        else
+         ci_send_message (SENDREPLY | SENDLISTREPLY, NULL, NULL, extra->ctx, extra->hdr);
+       redraw = REDRAW_FULL;
+       break;
+
+      case OP_FORWARD_MESSAGE:
+       CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra));
+        CHECK_ATTACH;
+        if (IsMsgAttach (extra))
+         mutt_attach_forward (extra->fp, extra->hdr, extra->idx,
+                              extra->idxlen, extra->bdy, 0);
+        else
+         ci_send_message (SENDFORWARD, NULL, NULL, extra->ctx, extra->hdr);
+       redraw = REDRAW_FULL;
+       break;
+
+      case OP_DECRYPT_SAVE:
+        if (!WithCrypto)
+        {
+          ch = -1;
+          break;
+        }
+       /* fall through */
+      case OP_SAVE:
+       if (IsAttach (extra))
+       {
+         mutt_save_attachment_list (extra->fp, 0, extra->bdy, extra->hdr, NULL);
+         break;
+       }
+       /* fall through */
+      case OP_COPY_MESSAGE:
+      case OP_DECODE_SAVE:
+      case OP_DECODE_COPY:
+      case OP_DECRYPT_COPY:
+        if (!WithCrypto && ch == OP_DECRYPT_COPY)
+        {
+          ch = -1;
+          break;
+        }
+       CHECK_MODE(IsHeader (extra));
+       if (mutt_save_message (extra->hdr,
+                              (ch == OP_DECRYPT_SAVE) ||
+                              (ch == OP_SAVE) || (ch == OP_DECODE_SAVE),
+                              (ch == OP_DECODE_SAVE) || (ch == OP_DECODE_COPY),
+                              (ch == OP_DECRYPT_SAVE) || (ch == OP_DECRYPT_COPY) ||
+                              0,
+                              &redraw) == 0 && (ch == OP_SAVE || ch == OP_DECODE_SAVE
+                                                || ch == OP_DECRYPT_SAVE
+                                                ))
+       {
+         if (option (OPTRESOLVE))
+         {
+           ch = -1;
+           rc = OP_MAIN_NEXT_UNDELETED;
+         }
+         else
+           redraw |= REDRAW_STATUS | REDRAW_INDEX;
+       }
+       MAYBE_REDRAW (redraw);
+       break;
+
+      case OP_SHELL_ESCAPE:
+       mutt_shell_escape ();
+       MAYBE_REDRAW (redraw);
+       break;
+
+      case OP_TAG:
+       CHECK_MODE(IsHeader (extra));
+       mutt_set_flag (Context, extra->hdr, M_TAG, !extra->hdr->tagged);
+       redraw = REDRAW_STATUS | REDRAW_INDEX;
+       if (option (OPTRESOLVE))
+       {
+         ch = -1;
+         rc = OP_NEXT_ENTRY;
+       }
+       break;
+
+      case OP_TOGGLE_NEW:
+       CHECK_MODE(IsHeader (extra));
+       CHECK_READONLY;
+
+#ifdef USE_IMAP
+CHECK_IMAP_ACL(IMAP_ACL_SEEN);
+#endif
+
+       if (extra->hdr->read || extra->hdr->old)
+         mutt_set_flag (Context, extra->hdr, M_NEW, 1);
+       else if (!first)
+         mutt_set_flag (Context, extra->hdr, M_READ, 1);
+       first = 0;
+        Context->msgnotreadyet = -1;
+       redraw = REDRAW_STATUS | REDRAW_INDEX;
+       if (option (OPTRESOLVE))
+       {
+         ch = -1;
+         rc = OP_MAIN_NEXT_UNDELETED;
+       }
+       break;
+
+      case OP_UNDELETE:
+       CHECK_MODE(IsHeader (extra));
+       CHECK_READONLY;
+
+#ifdef USE_IMAP
+CHECK_IMAP_ACL(IMAP_ACL_DELETE);
+#endif
+
+       mutt_set_flag (Context, extra->hdr, M_DELETE, 0);
+       mutt_set_flag (Context, extra->hdr, M_PURGED, 0);
+       redraw = REDRAW_STATUS | REDRAW_INDEX;
+       if (option (OPTRESOLVE))
+       {
+         ch = -1;
+         rc = OP_NEXT_ENTRY;
+       }
+       break;
+
+      case OP_UNDELETE_THREAD:
+      case OP_UNDELETE_SUBTHREAD:
+       CHECK_MODE(IsHeader (extra));
+       CHECK_READONLY;
+
+#ifdef USE_IMAP
+CHECK_IMAP_ACL(IMAP_ACL_DELETE);
+#endif
+
+       r = mutt_thread_set_flag (extra->hdr, M_DELETE, 0,
+                                 ch == OP_UNDELETE_THREAD ? 0 : 1)
+         + mutt_thread_set_flag (extra->hdr, M_PURGED, 0,
+                                 ch == OP_UNDELETE_THREAD ? 0 : 1);
+
+       if (r > -1)
+       {
+         if (option (OPTRESOLVE))
+         {
+           rc = (ch == OP_DELETE_THREAD) ?
+                                 OP_MAIN_NEXT_THREAD : OP_MAIN_NEXT_SUBTHREAD;
+           ch = -1;
+         }
+
+         if (!option (OPTRESOLVE) && PagerIndexLines)
+           redraw = REDRAW_FULL;
+         else
+           redraw = REDRAW_STATUS | REDRAW_INDEX;
+       }
+       break;
+
+      case OP_VERSION:
+       mutt_version ();
+       break;
+
+      case OP_BUFFY_LIST:
+       mutt_buffy_list ();
+       break;
+
+      case OP_VIEW_ATTACHMENTS:
+        if (flags & M_PAGER_ATTACHMENT)
+        {
+         ch = -1;
+         rc = OP_ATTACH_COLLAPSE;
+         break;
+       }
+       CHECK_MODE(IsHeader (extra));
+       mutt_view_attachments (extra->hdr);
+       if (extra->hdr->attach_del)
+         Context->changed = 1;
+       redraw = REDRAW_FULL;
+       break;
+
+
+      case OP_MAIL_KEY:
+        if (!(WithCrypto & APPLICATION_PGP))
+        {
+          ch = -1;
+          break;
+        }
+       CHECK_MODE(IsHeader(extra));
+        CHECK_ATTACH;
+       ci_send_message (SENDKEY, NULL, NULL, extra->ctx, extra->hdr);
+       redraw = REDRAW_FULL;
+       break;
+
+
+      case OP_FORGET_PASSPHRASE:
+       crypt_forget_passphrase ();
+       break;
+
+      case OP_EXTRACT_KEYS:
+        if (!WithCrypto)
+        {
+          ch = -1;
+          break;
+        }
+        CHECK_MODE(IsHeader(extra));
+       crypt_extract_keys_from_messages(extra->hdr);
+        redraw = REDRAW_FULL;
+        break;
+
+      default:
+       ch = -1;
+       break;
+    }
+  }
+
+  fclose (fp);
+  if (IsHeader (extra))
+    Context->msgnotreadyet = -1;
+    
+  cleanup_quote (&QuoteList);
+  
+  for (i = 0; i < maxLine ; i++)
+  {
+    FREE (&(lineInfo[i].syntax));
+    if (SearchCompiled && lineInfo[i].search)
+      FREE (&(lineInfo[i].search));
+  }
+  if (SearchCompiled)
+  {
+    regfree (&SearchRE);
+    SearchCompiled = 0;
+  }
+  FREE (&lineInfo);
+  if (index)
+    mutt_menuDestroy(&index);
+  return (rc != -1 ? rc : 0);
+}
diff --git a/pager.h b/pager.h
new file mode 100644 (file)
index 0000000..762e0d3
--- /dev/null
+++ b/pager.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+/* dynamic internal flags */
+#define M_SHOWFLAT     (1<<0)
+#define M_SHOWCOLOR    (1<<1)
+#define M_HIDE         (1<<2)
+#define M_SEARCH       (1<<3)
+#define M_TYPES                (1<<4)
+#define M_SHOW         (M_SHOWCOLOR | M_SHOWFLAT)
+
+/* exported flags for mutt_(do_)?pager */
+#define M_PAGER_NSKIP          (1<<5)  /* preserve whitespace with smartwrap */
+#define M_PAGER_MARKER         (1<<6)  /* use markers if option is set */
+#define M_PAGER_RETWINCH       (1<<7)  /* need reformatting on SIGWINCH */
+#define M_PAGER_MESSAGE                (M_SHOWCOLOR | M_PAGER_MARKER)
+#define M_PAGER_ATTACHMENT     (1<<8)
+
+#define M_DISPLAYFLAGS (M_SHOW | M_PAGER_NSKIP | M_PAGER_MARKER)
+
+typedef struct
+{
+  CONTEXT *ctx;        /* current mailbox */
+  HEADER *hdr; /* current message */
+  BODY *bdy;   /* current attachment */
+  FILE *fp;    /* source stream */
+  ATTACHPTR **idx;     /* attachment information */
+  short idxlen;
+} pager_t;
+
+int mutt_do_pager (const char *, const char *, int, pager_t *);
+int mutt_pager (const char *, const char *, int, pager_t *);
diff --git a/parse.c b/parse.c
new file mode 100644 (file)
index 0000000..84adc1a
--- /dev/null
+++ b/parse.c
@@ -0,0 +1,1430 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_regex.h"
+#include "mailbox.h"
+#include "mime.h"
+#include "rfc2047.h"
+#include "rfc2231.h"
+#include "mutt_crypt.h"
+
+#include <string.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+
+/* Reads an arbitrarily long header field, and looks ahead for continuation
+ * lines.  ``line'' must point to a dynamically allocated string; it is
+ * increased if more space is required to fit the whole line.
+ */
+static char *read_rfc822_line (FILE *f, char *line, size_t *linelen)
+{
+  char *buf = line;
+  char ch;
+  size_t offset = 0;
+
+  FOREVER
+  {
+    if (fgets (buf, *linelen - offset, f) == NULL ||   /* end of file or */
+       (ISSPACE (*line) && !offset))                   /* end of headers */ 
+    {
+      *line = 0;
+      return (line);
+    }
+
+    buf += strlen (buf) - 1;
+    if (*buf == '\n')
+    {
+      /* we did get a full line. remove trailing space */
+      while (ISSPACE (*buf))
+       *buf-- = 0;     /* we cannot come beyond line's beginning because
+                        * it begins with a non-space */
+
+      /* check to see if the next line is a continuation line */
+      if ((ch = fgetc (f)) != ' ' && ch != '\t')
+      {
+       ungetc (ch, f);
+       return (line); /* next line is a separate header field or EOH */
+      }
+
+      /* eat tabs and spaces from the beginning of the continuation line */
+      while ((ch = fgetc (f)) == ' ' || ch == '\t')
+       ;
+      ungetc (ch, f);
+      *++buf = ' '; /* string is still terminated because we removed
+                      at least one whitespace char above */
+    }
+
+    buf++;
+    offset = buf - line;
+    if (*linelen < offset + STRING)
+    {
+      /* grow the buffer */
+      *linelen += STRING;
+      safe_realloc (&line, *linelen);
+      buf = line + offset;
+    }
+  }
+  /* not reached */
+}
+
+LIST *mutt_parse_references (char *s, int in_reply_to)
+{
+  LIST *t, *lst = NULL;
+  int m, n = 0;
+  char *o = NULL, *new, *at;
+
+  while ((s = strtok (s, " \t;")) != NULL)
+  {
+    /*
+     * some mail clients add other garbage besides message-ids, so do a quick
+     * check to make sure this looks like a valid message-id
+     * some idiotic clients also break their message-ids between lines, deal
+     * with that too (give up if it's more than two lines, though)
+     */
+    t = NULL;
+    new = NULL;
+
+    if (*s == '<')
+    {
+      n = strlen (s);
+      if (s[n-1] != '>')
+      {
+       o = s;
+       s = NULL;
+       continue;
+      }
+
+      new = safe_strdup (s);
+    }
+    else if (o)
+    {
+      m = strlen (s);
+      if (s[m - 1] == '>')
+      {
+       new = safe_malloc (sizeof (char) * (n + m + 1));
+       strcpy (new, o);        /* __STRCPY_CHECKED__ */
+       strcpy (new + n, s);    /* __STRCPY_CHECKED__ */
+      }
+    }
+    if (new)
+    {
+      /* make sure that this really does look like a message-id.
+       * it should have exactly one @, and if we're looking at
+       * an in-reply-to header, make sure that the part before
+       * the @ has more than eight characters or it's probably
+       * an email address
+       */
+      if (!(at = strchr (new, '@')) || strchr (at + 1, '@')
+         || (in_reply_to && at - new <= 8))
+       FREE (&new);
+      else
+      {
+       t = (LIST *) safe_malloc (sizeof (LIST));
+       t->data = new;
+       t->next = lst;
+       lst = t;
+      }
+    }
+    o = NULL;
+    s = NULL;
+  }
+
+  return (lst);
+}
+
+int mutt_check_encoding (const char *c)
+{
+  if (ascii_strncasecmp ("7bit", c, sizeof ("7bit")-1) == 0)
+    return (ENC7BIT);
+  else if (ascii_strncasecmp ("8bit", c, sizeof ("8bit")-1) == 0)
+    return (ENC8BIT);
+  else if (ascii_strncasecmp ("binary", c, sizeof ("binary")-1) == 0)
+    return (ENCBINARY);
+  else if (ascii_strncasecmp ("quoted-printable", c, sizeof ("quoted-printable")-1) == 0)
+    return (ENCQUOTEDPRINTABLE);
+  else if (ascii_strncasecmp ("base64", c, sizeof("base64")-1) == 0)
+    return (ENCBASE64);
+  else if (ascii_strncasecmp ("x-uuencode", c, sizeof("x-uuencode")-1) == 0)
+    return (ENCUUENCODED);
+#ifdef SUN_ATTACHMENT
+  else if (ascii_strncasecmp ("uuencode", c, sizeof("uuencode")-1) == 0)
+    return (ENCUUENCODED);
+#endif
+  else
+    return (ENCOTHER);
+}
+
+static PARAMETER *parse_parameters (const char *s)
+{
+  PARAMETER *head = 0, *cur = 0, *new;
+  char buffer[LONG_STRING];
+  const char *p;
+  size_t i;
+
+  dprint (2, (debugfile, "parse_parameters: `%s'\n", s));
+  
+  while (*s)
+  {
+    if ((p = strpbrk (s, "=;")) == NULL)
+    {
+      dprint(1, (debugfile, "parse_parameters: malformed parameter: %s\n", s));
+      goto bail;
+    }
+
+    /* if we hit a ; now the parameter has no value, just skip it */
+    if (*p != ';')
+    {
+      i = p - s;
+
+      new = mutt_new_parameter ();
+
+      new->attribute = safe_malloc (i + 1);
+      memcpy (new->attribute, s, i);
+      new->attribute[i] = 0;
+
+      /* remove whitespace from the end of the attribute name */
+      while (ISSPACE (new->attribute[--i]))
+       new->attribute[i] = 0;
+
+      s = p + 1; /* skip over the = */
+      SKIPWS (s);
+
+      if (*s == '"')
+      {
+       s++;
+       for (i=0; *s && *s != '"' && i < sizeof (buffer) - 1; i++, s++)
+       {
+         if (*s == '\\')
+         {
+           /* Quote the next character */
+           buffer[i] = s[1];
+           if (!*++s)
+             break;
+         }
+         else
+           buffer[i] = *s;
+       }
+       buffer[i] = 0;
+       if (*s)
+         s++; /* skip over the " */
+      }
+      else
+      {
+       for (i=0; *s && *s != ' ' && *s != ';' && i < sizeof (buffer) - 1; i++, s++)
+         buffer[i] = *s;
+       buffer[i] = 0;
+      }
+
+      new->value = safe_strdup (buffer);
+
+      dprint (2, (debugfile, "parse_parameter: `%s' = `%s'\n",
+                 new->attribute ? new->attribute : "",
+                 new->value ? new->value : ""));
+      
+      /* Add this parameter to the list */
+      if (head)
+      {
+       cur->next = new;
+       cur = cur->next;
+      }
+      else
+       head = cur = new;
+    }
+    else
+    {
+      dprint (1, (debugfile, "parse_parameters(): parameter with no value: %s\n", s));
+      s = p;
+    }
+
+    /* Find the next parameter */
+    if (*s != ';' && (s = strchr (s, ';')) == NULL)
+       break; /* no more parameters */
+
+    do
+    {
+      s++;
+
+      /* Move past any leading whitespace */
+      SKIPWS (s);
+    }
+    while (*s == ';'); /* skip empty parameters */
+  }    
+
+  bail:
+
+  rfc2231_decode_parameters (&head);
+  return (head);
+}
+
+int mutt_check_mime_type (const char *s)
+{
+  if (ascii_strcasecmp ("text", s) == 0)
+    return TYPETEXT;
+  else if (ascii_strcasecmp ("multipart", s) == 0)
+    return TYPEMULTIPART;
+#ifdef SUN_ATTACHMENT 
+  else if (ascii_strcasecmp ("x-sun-attachment", s) == 0)
+    return TYPEMULTIPART;
+#endif
+  else if (ascii_strcasecmp ("application", s) == 0)
+    return TYPEAPPLICATION;
+  else if (ascii_strcasecmp ("message", s) == 0)
+    return TYPEMESSAGE;
+  else if (ascii_strcasecmp ("image", s) == 0)
+    return TYPEIMAGE;
+  else if (ascii_strcasecmp ("audio", s) == 0)
+    return TYPEAUDIO;
+  else if (ascii_strcasecmp ("video", s) == 0)
+    return TYPEVIDEO;
+  else if (ascii_strcasecmp ("model", s) == 0)
+    return TYPEMODEL;
+  else
+    return TYPEOTHER;
+}
+
+void mutt_parse_content_type (char *s, BODY *ct)
+{
+  char *pc;
+  char *subtype;
+
+  FREE (&ct->subtype);
+  mutt_free_parameter(&ct->parameter);
+
+  /* First extract any existing parameters */
+  if ((pc = strchr(s, ';')) != NULL)
+  {
+    *pc++ = 0;
+    while (*pc && ISSPACE (*pc))
+      pc++;
+    ct->parameter = parse_parameters(pc);
+
+    /* Some pre-RFC1521 gateways still use the "name=filename" convention,
+     * but if a filename has already been set in the content-disposition,
+     * let that take precedence, and don't set it here */
+    if ((pc = mutt_get_parameter( "name", ct->parameter)) != 0 && !ct->filename)
+      ct->filename = safe_strdup(pc);
+    
+#ifdef SUN_ATTACHMENT
+    /* this is deep and utter perversion */
+    if ((pc = mutt_get_parameter ("conversions", ct->parameter)) != 0)
+      ct->encoding = mutt_check_encoding (pc);
+#endif
+    
+  }
+  
+  /* Now get the subtype */
+  if ((subtype = strchr(s, '/')))
+  {
+    *subtype++ = '\0';
+    for(pc = subtype; *pc && !ISSPACE(*pc) && *pc != ';'; pc++)
+      ;
+    *pc = '\0';
+    ct->subtype = safe_strdup (subtype);
+  }
+
+  /* Finally, get the major type */
+  ct->type = mutt_check_mime_type (s);
+
+#ifdef SUN_ATTACHMENT
+  if (ascii_strcasecmp ("x-sun-attachment", s) == 0)
+      ct->subtype = safe_strdup ("x-sun-attachment");
+#endif
+
+  if (ct->type == TYPEOTHER)
+  {
+    ct->xtype = safe_strdup (s);
+  }
+
+  if (ct->subtype == NULL)
+  {
+    /* Some older non-MIME mailers (i.e., mailtool, elm) have a content-type
+     * field, so we can attempt to convert the type to BODY here.
+     */
+    if (ct->type == TYPETEXT)
+      ct->subtype = safe_strdup ("plain");
+    else if (ct->type == TYPEAUDIO)
+      ct->subtype = safe_strdup ("basic");
+    else if (ct->type == TYPEMESSAGE)
+      ct->subtype = safe_strdup ("rfc822");
+    else if (ct->type == TYPEOTHER)
+    {
+      char buffer[SHORT_STRING];
+
+      ct->type = TYPEAPPLICATION;
+      snprintf (buffer, sizeof (buffer), "x-%s", s);
+      ct->subtype = safe_strdup (buffer);
+    }
+    else
+      ct->subtype = safe_strdup ("x-unknown");
+  }
+
+  /* Default character set for text types. */
+  if (ct->type == TYPETEXT)
+  {
+    if (!(pc = mutt_get_parameter ("charset", ct->parameter)))
+      mutt_set_parameter ("charset", "us-ascii", &ct->parameter);
+  }
+
+}
+
+static void parse_content_disposition (char *s, BODY *ct)
+{
+  PARAMETER *parms;
+
+  if (!ascii_strncasecmp ("inline", s, 6))
+    ct->disposition = DISPINLINE;
+  else if (!ascii_strncasecmp ("form-data", s, 9))
+    ct->disposition = DISPFORMDATA;
+  else
+    ct->disposition = DISPATTACH;
+
+  /* Check to see if a default filename was given */
+  if ((s = strchr (s, ';')) != NULL)
+  {
+    s++;
+    SKIPWS (s);
+    if ((s = mutt_get_parameter ("filename", (parms = parse_parameters (s)))) != 0)
+      mutt_str_replace (&ct->filename, s);
+    if ((s = mutt_get_parameter ("name", parms)) != 0)
+      ct->form_name = safe_strdup (s);
+    mutt_free_parameter (&parms);
+  }
+}
+
+/* args:
+ *     fp      stream to read from
+ *
+ *     digest  1 if reading subparts of a multipart/digest, 0
+ *             otherwise
+ */
+
+BODY *mutt_read_mime_header (FILE *fp, int digest)
+{
+  BODY *p = mutt_new_body();
+  char *c;
+  char *line = safe_malloc (LONG_STRING);
+  size_t linelen = LONG_STRING;
+  
+  p->hdr_offset  = ftell(fp);
+
+  p->encoding    = ENC7BIT; /* default from RFC1521 */
+  p->type        = digest ? TYPEMESSAGE : TYPETEXT;
+  p->disposition = DISPINLINE;
+  
+  while (*(line = read_rfc822_line (fp, line, &linelen)) != 0)
+  {
+    /* Find the value of the current header */
+    if ((c = strchr (line, ':')))
+    {
+      *c = 0;
+      c++;
+      SKIPWS (c);
+      if (!*c)
+      {
+       dprint (1, (debugfile, "mutt_read_mime_header(): skipping empty header field: %s\n", line));
+       continue;
+      }
+    }
+    else
+    {
+      dprint (1, (debugfile, "read_mime_header: bogus MIME header: %s\n", line));
+      break;
+    }
+
+    if (!ascii_strncasecmp ("content-", line, 8))
+    {
+      if (!ascii_strcasecmp ("type", line + 8))
+       mutt_parse_content_type (c, p);
+      else if (!ascii_strcasecmp ("transfer-encoding", line + 8))
+       p->encoding = mutt_check_encoding (c);
+      else if (!ascii_strcasecmp ("disposition", line + 8))
+       parse_content_disposition (c, p);
+      else if (!ascii_strcasecmp ("description", line + 8))
+      {
+       mutt_str_replace (&p->description, c);
+       rfc2047_decode (&p->description);
+      }
+    } 
+#ifdef SUN_ATTACHMENT
+    else if (!ascii_strncasecmp ("x-sun-", line, 6))
+    {
+      if (!ascii_strcasecmp ("data-type", line + 6))
+        mutt_parse_content_type (c, p);
+      else if (!ascii_strcasecmp ("encoding-info", line + 6))
+        p->encoding = mutt_check_encoding (c);
+      else if (!ascii_strcasecmp ("content-lines", line + 6))
+        mutt_set_parameter ("content-lines", c, &(p->parameter));
+      else if (!ascii_strcasecmp ("data-description", line + 6))
+      {
+       mutt_str_replace (&p->description, c);
+        rfc2047_decode (&p->description);
+      }
+    }
+#endif
+  }
+  p->offset = ftell (fp); /* Mark the start of the real data */
+  if (p->type == TYPETEXT && !p->subtype)
+    p->subtype = safe_strdup ("plain");
+  else if (p->type == TYPEMESSAGE && !p->subtype)
+    p->subtype = safe_strdup ("rfc822");
+
+  FREE (&line);
+
+  return (p);
+}
+
+void mutt_parse_part (FILE *fp, BODY *b)
+{
+  char *bound = 0;
+
+  switch (b->type)
+  {
+    case TYPEMULTIPART:
+#ifdef SUN_ATTACHMENT
+      if ( !ascii_strcasecmp (b->subtype, "x-sun-attachment") )
+          bound = "--------";
+      else
+#endif
+          bound = mutt_get_parameter ("boundary", b->parameter);
+
+      fseek (fp, b->offset, SEEK_SET);
+      b->parts =  mutt_parse_multipart (fp, bound, 
+                                       b->offset + b->length,
+                                       ascii_strcasecmp ("digest", b->subtype) == 0);
+      break;
+
+    case TYPEMESSAGE:
+      if (b->subtype)
+      {
+       fseek (fp, b->offset, SEEK_SET);
+       if (mutt_is_message_type(b->type, b->subtype))
+         b->parts = mutt_parse_messageRFC822 (fp, b);
+       else if (ascii_strcasecmp (b->subtype, "external-body") == 0)
+         b->parts = mutt_read_mime_header (fp, 0);
+       else
+         return;
+      }
+      break;
+
+    default:
+      return;
+  }
+
+  /* try to recover from parsing error */
+  if (!b->parts)
+  {
+    b->type = TYPETEXT;
+    mutt_str_replace (&b->subtype, "plain");
+  }
+}
+
+/* parse a MESSAGE/RFC822 body
+ *
+ * args:
+ *     fp              stream to read from
+ *
+ *     parent          structure which contains info about the message/rfc822
+ *                     body part
+ *
+ * NOTE: this assumes that `parent->length' has been set!
+ */
+
+BODY *mutt_parse_messageRFC822 (FILE *fp, BODY *parent)
+{
+  BODY *msg;
+
+  parent->hdr = mutt_new_header ();
+  parent->hdr->offset = ftell (fp);
+  parent->hdr->env = mutt_read_rfc822_header (fp, parent->hdr, 0, 0);
+  msg = parent->hdr->content;
+
+  /* ignore the length given in the content-length since it could be wrong
+     and we already have the info to calculate the correct length */
+  /* if (msg->length == -1) */
+  msg->length = parent->length - (msg->offset - parent->offset);
+
+  /* if body of this message is empty, we can end up with a negative length */
+  if (msg->length < 0)
+    msg->length = 0;
+
+  mutt_parse_part(fp, msg);
+  return (msg);
+}
+
+/* parse a multipart structure
+ *
+ * args:
+ *     fp              stream to read from
+ *
+ *     boundary        body separator
+ *
+ *     end_off         length of the multipart body (used when the final
+ *                     boundary is missing to avoid reading too far)
+ *
+ *     digest          1 if reading a multipart/digest, 0 otherwise
+ */
+
+BODY *mutt_parse_multipart (FILE *fp, const char *boundary, long end_off, int digest)
+{
+#ifdef SUN_ATTACHMENT
+  int lines;
+#endif
+  int blen, len, crlf = 0;
+  char buffer[LONG_STRING];
+  BODY *head = 0, *last = 0, *new = 0;
+  int i;
+  int final = 0; /* did we see the ending boundary? */
+
+  if (!boundary)
+  {
+    mutt_error _("multipart message has no boundary parameter!");
+    return (NULL);
+  }
+
+  blen = mutt_strlen (boundary);
+  while (ftell (fp) < end_off && fgets (buffer, LONG_STRING, fp) != NULL)
+  {
+    len = mutt_strlen (buffer);
+
+    crlf =  (len > 1 && buffer[len - 2] == '\r') ? 1 : 0;
+
+    if (buffer[0] == '-' && buffer[1] == '-' &&
+       mutt_strncmp (buffer + 2, boundary, blen) == 0)
+    {
+      if (last)
+      {
+       last->length = ftell (fp) - last->offset - len - 1 - crlf;
+       if (last->parts && last->parts->length == 0)
+         last->parts->length = ftell (fp) - last->parts->offset - len - 1 - crlf;
+       /* if the body is empty, we can end up with a -1 length */
+       if (last->length < 0)
+         last->length = 0;
+      }
+
+      /* Remove any trailing whitespace, up to the length of the boundary */
+      for (i = len - 1; ISSPACE (buffer[i]) && i >= blen + 2; i--)
+        buffer[i] = 0;
+
+      /* Check for the end boundary */
+      if (mutt_strcmp (buffer + blen + 2, "--") == 0)
+      {
+       final = 1;
+       break; /* done parsing */
+      }
+      else if (buffer[2 + blen] == 0)
+      {
+       new = mutt_read_mime_header (fp, digest);
+
+#ifdef SUN_ATTACHMENT
+        if (mutt_get_parameter ("content-lines", new->parameter)) {
+         for (lines = atoi(mutt_get_parameter ("content-lines", new->parameter));
+              lines; lines-- )
+            if (ftell (fp) >= end_off || fgets (buffer, LONG_STRING, fp) == NULL)
+              break;
+       }
+#endif
+       
+       /*
+        * Consistency checking - catch
+        * bad attachment end boundaries
+        */
+       
+       if(new->offset > end_off)
+       {
+         mutt_free_body(&new);
+         break;
+       }
+       if (head)
+       {
+         last->next = new;
+         last = new;
+       }
+       else
+         last = head = new;
+      }
+    }
+  }
+
+  /* in case of missing end boundary, set the length to something reasonable */
+  if (last && last->length == 0 && !final)
+    last->length = end_off - last->offset;
+
+  /* parse recursive MIME parts */
+  for(last = head; last; last = last->next)
+    mutt_parse_part(fp, last);
+  
+  return (head);
+}
+
+static const char *uncomment_timezone (char *buf, size_t buflen, const char *tz)
+{
+  char *p;
+  size_t len;
+
+  if (*tz != '(')
+    return tz; /* no need to do anything */
+  tz++;
+  SKIPWS (tz);
+  if ((p = strpbrk (tz, " )")) == NULL)
+    return tz;
+  len = p - tz;
+  if (len > buflen - 1)
+    len = buflen - 1;
+  memcpy (buf, tz, len);
+  buf[len] = 0;
+  return buf;
+}
+
+static struct tz_t
+{
+  char tzname[5];
+  unsigned char zhours;
+  unsigned char zminutes;
+  unsigned char zoccident; /* west of UTC? */
+}
+TimeZones[] =
+{
+  { "aat",   1,  0, 1 }, /* Atlantic Africa Time */
+  { "adt",   4,  0, 0 }, /* Arabia DST */
+  { "ast",   3,  0, 0 }, /* Arabia */
+/*{ "ast",   4,  0, 1 },*/ /* Atlantic */
+  { "bst",   1,  0, 0 }, /* British DST */
+  { "cat",   1,  0, 0 }, /* Central Africa */
+  { "cdt",   5,  0, 1 },
+  { "cest",  2,  0, 0 }, /* Central Europe DST */
+  { "cet",   1,  0, 0 }, /* Central Europe */
+  { "cst",   6,  0, 1 },
+/*{ "cst",   8,  0, 0 },*/ /* China */
+/*{ "cst",   9, 30, 0 },*/ /* Australian Central Standard Time */
+  { "eat",   3,  0, 0 }, /* East Africa */
+  { "edt",   4,  0, 1 },
+  { "eest",  3,  0, 0 }, /* Eastern Europe DST */
+  { "eet",   2,  0, 0 }, /* Eastern Europe */
+  { "egst",  0,  0, 0 }, /* Eastern Greenland DST */
+  { "egt",   1,  0, 1 }, /* Eastern Greenland */
+  { "est",   5,  0, 1 },
+  { "gmt",   0,  0, 0 },
+  { "gst",   4,  0, 0 }, /* Presian Gulf */
+  { "hkt",   8,  0, 0 }, /* Hong Kong */
+  { "ict",   7,  0, 0 }, /* Indochina */
+  { "idt",   3,  0, 0 }, /* Israel DST */
+  { "ist",   2,  0, 0 }, /* Israel */
+/*{ "ist",   5, 30, 0 },*/ /* India */
+  { "jst",   9,  0, 0 }, /* Japan */
+  { "kst",   9,  0, 0 }, /* Korea */
+  { "mdt",   6,  0, 1 },
+  { "met",   1,  0, 0 }, /* this is now officially CET */
+  { "msd",   4,  0, 0 }, /* Moscow DST */
+  { "msk",   3,  0, 0 }, /* Moscow */
+  { "mst",   7,  0, 1 },
+  { "nzdt", 13,  0, 0 }, /* New Zealand DST */
+  { "nzst", 12,  0, 0 }, /* New Zealand */
+  { "pdt",   7,  0, 1 },
+  { "pst",   8,  0, 1 },
+  { "sat",   2,  0, 0 }, /* South Africa */
+  { "smt",   4,  0, 0 }, /* Seychelles */
+  { "sst",  11,  0, 1 }, /* Samoa */
+/*{ "sst",   8,  0, 0 },*/ /* Singapore */
+  { "utc",   0,  0, 0 },
+  { "wat",   0,  0, 0 }, /* West Africa */
+  { "west",  1,  0, 0 }, /* Western Europe DST */
+  { "wet",   0,  0, 0 }, /* Western Europe */
+  { "wgst",  2,  0, 1 }, /* Western Greenland DST */
+  { "wgt",   3,  0, 1 }, /* Western Greenland */
+  { "wst",   8,  0, 0 }, /* Western Australia */
+};
+
+/* parses a date string in RFC822 format:
+ *
+ * Date: [ weekday , ] day-of-month month year hour:minute:second timezone
+ *
+ * This routine assumes that `h' has been initialized to 0.  the `timezone'
+ * field is optional, defaulting to +0000 if missing.
+ */
+time_t mutt_parse_date (const char *s, HEADER *h)
+{
+  int count = 0;
+  char *t;
+  int hour, min, sec;
+  struct tm tm;
+  int i;
+  int tz_offset = 0;
+  int zhours = 0;
+  int zminutes = 0;
+  int zoccident = 0;
+  const char *ptz;
+  char tzstr[SHORT_STRING];
+  char scratch[SHORT_STRING];
+
+  /* Don't modify our argument. Fixed-size buffer is ok here since
+   * the date format imposes a natural limit. 
+   */
+
+  strfcpy (scratch, s, sizeof (scratch));
+  
+  /* kill the day of the week, if it exists. */
+  if ((t = strchr (scratch, ',')))
+    t++;
+  else
+    t = scratch;
+  SKIPWS (t);
+
+  memset (&tm, 0, sizeof (tm));
+
+  while ((t = strtok (t, " \t")) != NULL)
+  {
+    switch (count)
+    {
+      case 0: /* day of the month */
+       if (!isdigit ((unsigned char) *t))
+         return (-1);
+       tm.tm_mday = atoi (t);
+       if (tm.tm_mday > 31)
+         return (-1);
+       break;
+
+      case 1: /* month of the year */
+       if ((i = mutt_check_month (t)) < 0)
+         return (-1);
+       tm.tm_mon = i;
+       break;
+
+      case 2: /* year */
+       tm.tm_year = atoi (t);
+        if (tm.tm_year < 50)
+         tm.tm_year += 100;
+        else if (tm.tm_year >= 1900)
+         tm.tm_year -= 1900;
+       break;
+
+      case 3: /* time of day */
+       if (sscanf (t, "%d:%d:%d", &hour, &min, &sec) == 3)
+         ;
+       else if (sscanf (t, "%d:%d", &hour, &min) == 2)
+         sec = 0;
+       else
+       {
+         dprint(1, (debugfile, "parse_date: could not process time format: %s\n", t));
+         return(-1);
+       }
+       tm.tm_hour = hour;
+       tm.tm_min = min;
+       tm.tm_sec = sec;
+       break;
+
+      case 4: /* timezone */
+       /* sometimes we see things like (MST) or (-0700) so attempt to
+        * compensate by uncommenting the string if non-RFC822 compliant
+        */
+       ptz = uncomment_timezone (tzstr, sizeof (tzstr), t);
+
+       if (*ptz == '+' || *ptz == '-')
+       {
+         if (ptz[1] && ptz[2] && ptz[3] && ptz[4]
+             && isdigit ((unsigned char) ptz[1]) && isdigit ((unsigned char) ptz[2])
+             && isdigit ((unsigned char) ptz[3]) && isdigit ((unsigned char) ptz[4]))
+         {
+           zhours = (ptz[1] - '0') * 10 + (ptz[2] - '0');
+           zminutes = (ptz[3] - '0') * 10 + (ptz[4] - '0');
+
+           if (ptz[0] == '-')
+             zoccident = 1;
+         }
+       }
+       else
+       {
+         struct tz_t *tz;
+
+         tz = bsearch (ptz, TimeZones, sizeof TimeZones/sizeof (struct tz_t),
+                       sizeof (struct tz_t),
+                       (int (*)(const void *, const void *)) ascii_strcasecmp
+                       /* This is safe to do: A pointer to a struct equals
+                        * a pointer to its first element*/);
+
+         if (tz)
+         {
+           zhours = tz->zhours;
+           zminutes = tz->zminutes;
+           zoccident = tz->zoccident;
+         }
+
+         /* ad hoc support for the European MET (now officially CET) TZ */
+         if (ascii_strcasecmp (t, "MET") == 0)
+         {
+           if ((t = strtok (NULL, " \t")) != NULL)
+           {
+             if (!ascii_strcasecmp (t, "DST"))
+               zhours++;
+           }
+         }
+       }
+       tz_offset = zhours * 3600 + zminutes * 60;
+       if (!zoccident)
+         tz_offset = -tz_offset;
+       break;
+    }
+    count++;
+    t = 0;
+  }
+
+  if (count < 4) /* don't check for missing timezone */
+  {
+    dprint(1,(debugfile, "parse_date(): error parsing date format, using received time\n"));
+    return (-1);
+  }
+
+  if (h)
+  {
+    h->zhours = zhours;
+    h->zminutes = zminutes;
+    h->zoccident = zoccident;
+  }
+
+  return (mutt_mktime (&tm, 0) + tz_offset);
+}
+
+/* extract the first substring that looks like a message-id */
+static char *extract_message_id (const char *s)
+{
+  const char *p;
+  char *r;
+  size_t l;
+
+  if ((s = strchr (s, '<')) == NULL || (p = strchr (s, '>')) == NULL)
+    return (NULL);
+  l = (size_t)(p - s) + 1;
+  r = safe_malloc (l + 1);
+  memcpy (r, s, l);
+  r[l] = 0;
+  return (r);
+}
+
+void mutt_parse_mime_message (CONTEXT *ctx, HEADER *cur)
+{
+  MESSAGE *msg;
+
+  if (cur->content->type != TYPEMESSAGE && cur->content->type != TYPEMULTIPART)
+    return; /* nothing to do */
+
+  if (cur->content->parts)
+    return; /* The message was parsed earlier. */
+
+  if ((msg = mx_open_message (ctx, cur->msgno)))
+  {
+    mutt_parse_part (msg->fp, cur->content);
+
+    if (WithCrypto)
+      cur->security = crypt_query (cur->content);
+
+    mx_close_message (&msg);
+  }
+}
+
+int mutt_parse_rfc822_line (ENVELOPE *e, HEADER *hdr, char *line, char *p, short user_hdrs, short weed,
+                           short do_2047, LIST **lastp)
+{
+  int matched = 0;
+  LIST *last = NULL;
+  
+  if (lastp)
+    last = *lastp;
+  
+  switch (ascii_tolower (line[0]))
+  {
+    case 'a':
+    if (ascii_strcasecmp (line+1, "pparently-to") == 0)
+    {
+      e->to = rfc822_parse_adrlist (e->to, p);
+      matched = 1;
+    }
+    else if (ascii_strcasecmp (line+1, "pparently-from") == 0)
+    {
+      e->from = rfc822_parse_adrlist (e->from, p);
+      matched = 1;
+    }
+    break;
+    
+    case 'b':
+    if (ascii_strcasecmp (line+1, "cc") == 0)
+    {
+      e->bcc = rfc822_parse_adrlist (e->bcc, p);
+      matched = 1;
+    }
+    break;
+    
+    case 'c':
+    if (ascii_strcasecmp (line+1, "c") == 0)
+    {
+      e->cc = rfc822_parse_adrlist (e->cc, p);
+      matched = 1;
+    }
+    else if (ascii_strncasecmp (line + 1, "ontent-", 7) == 0)
+    {
+      if (ascii_strcasecmp (line+8, "type") == 0)
+      {
+       if (hdr)
+         mutt_parse_content_type (p, hdr->content);
+       matched = 1;
+      }
+      else if (ascii_strcasecmp (line+8, "transfer-encoding") == 0)
+      {
+       if (hdr)
+         hdr->content->encoding = mutt_check_encoding (p);
+       matched = 1;
+      }
+      else if (ascii_strcasecmp (line+8, "length") == 0)
+      {
+       if (hdr)
+       {
+         if ((hdr->content->length = atoi (p)) < 0)
+           hdr->content->length = -1;
+       }
+       matched = 1;
+      }
+      else if (ascii_strcasecmp (line+8, "description") == 0)
+      {
+       if (hdr)
+       {
+         mutt_str_replace (&hdr->content->description, p);
+         rfc2047_decode (&hdr->content->description);
+       }
+       matched = 1;
+      }
+      else if (ascii_strcasecmp (line+8, "disposition") == 0)
+      {
+       if (hdr)
+         parse_content_disposition (p, hdr->content);
+       matched = 1;
+      }
+    }
+    break;
+    
+    case 'd':
+    if (!ascii_strcasecmp ("ate", line + 1))
+    {
+      mutt_str_replace (&e->date, p);
+      if (hdr)
+       hdr->date_sent = mutt_parse_date (p, hdr);
+      matched = 1;
+    }
+    break;
+    
+    case 'e':
+    if (!ascii_strcasecmp ("xpires", line + 1) &&
+       hdr && mutt_parse_date (p, NULL) < time (NULL))
+      hdr->expired = 1;
+    break;
+    
+    case 'f':
+    if (!ascii_strcasecmp ("rom", line + 1))
+    {
+      e->from = rfc822_parse_adrlist (e->from, p);
+      matched = 1;
+    }
+#ifdef USE_NNTP
+    else if (!mutt_strcasecmp (line+1, "ollowup-to"))
+    {
+      if (!e->followup_to)
+      {
+       mutt_remove_trailing_ws (p);
+       e->followup_to = safe_strdup (mutt_skip_whitespace (p));
+      }
+      matched = 1;
+    }
+#endif
+    break;
+    
+    case 'i':
+    if (!ascii_strcasecmp (line+1, "n-reply-to"))
+    {
+      mutt_free_list (&e->in_reply_to);
+      e->in_reply_to = mutt_parse_references (p, 1);
+      matched = 1;
+    }
+    break;
+    
+    case 'l':
+    if (!ascii_strcasecmp (line + 1, "ines"))
+    {
+      if (hdr)
+       hdr->lines = atoi (p);
+
+      /* 
+       * HACK - mutt has, for a very short time, produced negative
+       * Lines header values.  Ignore them. 
+       */
+      if (hdr->lines < 0)
+       hdr->lines = 0;
+
+      matched = 1;
+    }
+    break;
+    
+    case 'm':
+    if (!ascii_strcasecmp (line + 1, "ime-version"))
+    {
+      if (hdr)
+       hdr->mime = 1;
+      matched = 1;
+    }
+    else if (!ascii_strcasecmp (line + 1, "essage-id"))
+    {
+      /* We add a new "Message-Id:" when building a message */
+      FREE (&e->message_id);
+      e->message_id = extract_message_id (p);
+      matched = 1;
+    }
+    else if (!ascii_strncasecmp (line + 1, "ail-", 4))
+    {
+      if (!ascii_strcasecmp (line + 5, "reply-to"))
+      {
+       /* override the Reply-To: field */
+       rfc822_free_address (&e->reply_to);
+       e->reply_to = rfc822_parse_adrlist (e->reply_to, p);
+       matched = 1;
+      }
+      else if (!ascii_strcasecmp (line + 5, "followup-to"))
+      {
+       e->mail_followup_to = rfc822_parse_adrlist (e->mail_followup_to, p);
+       matched = 1;
+      }
+    }
+    break;
+    
+#ifdef USE_NNTP
+    case 'n':
+    if (!mutt_strcasecmp (line + 1, "ewsgroups"))
+    {
+      FREE (&e->newsgroups);
+      mutt_remove_trailing_ws (p);
+      e->newsgroups = safe_strdup (mutt_skip_whitespace (p));
+      matched = 1;
+    }
+    break;
+#endif
+
+    case 'o':
+    /* field `Organization:' saves only for pager! */
+    if (!mutt_strcasecmp (line + 1, "rganization"))
+    {
+      if (!e->organization && mutt_strcasecmp (p, "unknown"))
+       e->organization = safe_strdup (p);
+    }
+    break;
+
+    case 'r':
+    if (!ascii_strcasecmp (line + 1, "eferences"))
+    {
+      mutt_free_list (&e->references);
+      e->references = mutt_parse_references (p, 0);
+      matched = 1;
+    }
+    else if (!ascii_strcasecmp (line + 1, "eply-to"))
+    {
+      e->reply_to = rfc822_parse_adrlist (e->reply_to, p);
+      matched = 1;
+    }
+    else if (!ascii_strcasecmp (line + 1, "eturn-path"))
+    {
+      e->return_path = rfc822_parse_adrlist (e->return_path, p);
+      matched = 1;
+    }
+    else if (!ascii_strcasecmp (line + 1, "eceived"))
+    {
+      if (hdr && !hdr->received)
+      {
+       char *d = strchr (p, ';');
+       
+       if (d)
+         hdr->received = mutt_parse_date (d + 1, NULL);
+      }
+    }
+    break;
+    
+    case 's':
+    if (!ascii_strcasecmp (line + 1, "ubject"))
+    {
+      if (!e->subject)
+       e->subject = safe_strdup (p);
+      matched = 1;
+    }
+    else if (!ascii_strcasecmp (line + 1, "ender"))
+    {
+      e->sender = rfc822_parse_adrlist (e->sender, p);
+      matched = 1;
+    }
+    else if (!ascii_strcasecmp (line + 1, "tatus"))
+    {
+      if (hdr)
+      {
+       while (*p)
+       {
+         switch(*p)
+         {
+           case 'r':
+           hdr->replied = 1;
+           break;
+           case 'O':
+             hdr->old = 1;
+           break;
+           case 'R':
+           hdr->read = 1;
+           break;
+         }
+         p++;
+       }
+      }
+      matched = 1;
+    }
+    else if ((!ascii_strcasecmp ("upersedes", line + 1) ||
+             !ascii_strcasecmp ("upercedes", line + 1)) && hdr)
+      e->supersedes = safe_strdup (p);
+    break;
+    
+    case 't':
+    if (ascii_strcasecmp (line+1, "o") == 0)
+    {
+      e->to = rfc822_parse_adrlist (e->to, p);
+      matched = 1;
+    }
+    break;
+    
+    case 'x':
+    if (ascii_strcasecmp (line+1, "-status") == 0)
+    {
+      if (hdr)
+      {
+       while (*p)
+       {
+         switch (*p)
+         {
+           case 'A':
+           hdr->replied = 1;
+           break;
+           case 'D':
+           hdr->deleted = 1;
+           break;
+           case 'F':
+           hdr->flagged = 1;
+           break;
+           default:
+           break;
+         }
+         p++;
+       }
+      }
+      matched = 1;
+    }
+    else if (ascii_strcasecmp (line+1, "-label") == 0)
+    {
+      e->x_label = safe_strdup(p);
+      matched = 1;
+    }
+#ifdef USE_NNTP
+    else if (!mutt_strcasecmp (line + 1, "-comment-to"))
+    {
+      if (!e->x_comment_to)
+       e->x_comment_to = safe_strdup (p);
+      matched = 1;
+    }
+    else if (!mutt_strcasecmp (line + 1, "ref"))
+    {
+      if (!e->xref)
+       e->xref = safe_strdup (p);
+      matched = 1;
+    }
+#endif
+    
+    default:
+    break;
+  }
+  
+  /* Keep track of the user-defined headers */
+  if (!matched && user_hdrs)
+  {
+    /* restore the original line */
+    line[strlen (line)] = ':';
+    
+    if (weed && option (OPTWEED) && mutt_matches_ignore (line, Ignore)
+       && !mutt_matches_ignore (line, UnIgnore))
+      goto done;
+
+    if (last)
+    {
+      last->next = mutt_new_list ();
+      last = last->next;
+    }
+    else
+      last = e->userhdrs = mutt_new_list ();
+    last->data = safe_strdup (line);
+    if (do_2047)
+      rfc2047_decode (&last->data);
+  }
+
+  done:
+  
+  *lastp = last;
+  return matched;
+}
+  
+  
+/* mutt_read_rfc822_header() -- parses a RFC822 header
+ *
+ * Args:
+ *
+ * f           stream to read from
+ *
+ * hdr         header structure of current message (optional).
+ * 
+ * user_hdrs   If set, store user headers.  Used for recall-message and
+ *             postpone modes.
+ * 
+ * weed                If this parameter is set and the user has activated the
+ *             $weed option, honor the header weed list for user headers.
+ *             Used for recall-message.
+ * 
+ * Returns:     newly allocated envelope structure.  You should free it by
+ *              mutt_free_envelope() when envelope stay unneeded.
+ */
+ENVELOPE *mutt_read_rfc822_header (FILE *f, HEADER *hdr, short user_hdrs,
+                                  short weed)
+{
+  ENVELOPE *e = mutt_new_envelope();
+  LIST *last = NULL;
+  char *line = safe_malloc (LONG_STRING);
+  char *p;
+  long loc;
+  int matched;
+  size_t linelen = LONG_STRING;
+
+  if (hdr)
+  {
+    if (hdr->content == NULL)
+    {
+      hdr->content = mutt_new_body ();
+
+      /* set the defaults from RFC1521 */
+      hdr->content->type        = TYPETEXT;
+      hdr->content->subtype     = safe_strdup ("plain");
+      hdr->content->encoding    = ENC7BIT;
+      hdr->content->length      = -1;
+
+      /* RFC 2183 says this is arbitrary */
+      hdr->content->disposition = DISPINLINE;
+    }
+  }
+
+  while ((loc = ftell (f)),
+         *(line = read_rfc822_line (f, line, &linelen)) != 0)
+  {
+    matched = 0;
+
+    if ((p = strpbrk (line, ": \t")) == NULL || *p != ':')
+    {
+      char return_path[LONG_STRING];
+      time_t t;
+
+      /* some bogus MTAs will quote the original "From " line */
+      if (mutt_strncmp (">From ", line, 6) == 0)
+       continue; /* just ignore */
+      else if (is_from (line, return_path, sizeof (return_path), &t))
+      {
+       /* MH somtimes has the From_ line in the middle of the header! */
+       if (hdr && !hdr->received)
+         hdr->received = t - mutt_local_tz (t);
+       continue;
+      }
+
+      fseek (f, loc, 0);
+      break; /* end of header */
+    }
+
+    *p = 0;
+    p++;
+    SKIPWS (p);
+    if (!*p)
+      continue; /* skip empty header fields */
+
+    matched = mutt_parse_rfc822_line (e, hdr, line, p, user_hdrs, weed, 1, &last);
+    
+  }
+
+  FREE (&line);
+
+  if (hdr)
+  {
+    hdr->content->hdr_offset = hdr->offset;
+    hdr->content->offset = ftell (f);
+
+    /* do RFC2047 decoding */
+    rfc2047_decode_adrlist (e->from);
+    rfc2047_decode_adrlist (e->to);
+    rfc2047_decode_adrlist (e->cc);
+    rfc2047_decode_adrlist (e->reply_to);
+    rfc2047_decode_adrlist (e->mail_followup_to);
+    rfc2047_decode_adrlist (e->return_path);
+    rfc2047_decode_adrlist (e->sender);
+
+    if (e->subject)
+    {
+      regmatch_t pmatch[1];
+
+      rfc2047_decode (&e->subject);
+
+      if (regexec (ReplyRegexp.rx, e->subject, 1, pmatch, 0) == 0)
+       e->real_subj = e->subject + pmatch[0].rm_eo;
+      else
+       e->real_subj = e->subject;
+    }
+
+    /* check for missing or invalid date */
+    if (hdr->date_sent <= 0)
+    {
+      dprint(1,(debugfile,"read_rfc822_header(): no date found, using received time from msg separator\n"));
+      hdr->date_sent = hdr->received;
+    }
+  }
+
+  return (e);
+}
+
+ADDRESS *mutt_parse_adrlist (ADDRESS *p, const char *s)
+{
+  const char *q;
+
+  /* check for a simple whitespace separated list of addresses */
+  if ((q = strpbrk (s, "\"<>():;,\\")) == NULL)
+  {
+    char tmp[HUGE_STRING];
+    char *r;
+
+    strfcpy (tmp, s, sizeof (tmp));
+    r = tmp;
+    while ((r = strtok (r, " \t")) != NULL)
+    {
+      p = rfc822_parse_adrlist (p, r);
+      r = NULL;
+    }
+  }
+  else
+    p = rfc822_parse_adrlist (p, s);
+  
+  return p;
+}
diff --git a/patchlist.sh b/patchlist.sh
new file mode 100755 (executable)
index 0000000..9cefc14
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/sh --
+
+cat <<EOF
+/* this is an autogenerated file.  do not edit. */
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "mutt.h"
+
+void mutt_print_patchlist (void)
+{
+EOF
+
+while read patch ; do
+       echo "  puts (\"${patch}\");"
+done
+
+echo "}"
diff --git a/pattern.c b/pattern.c
new file mode 100644 (file)
index 0000000..f9c0e11
--- /dev/null
+++ b/pattern.c
@@ -0,0 +1,1342 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>, and others
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mapping.h"
+#include "keymap.h"
+#include "mailbox.h"
+#include "copy.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <stdarg.h>
+
+#include "mutt_crypt.h"
+
+static int eat_regexp (pattern_t *pat, BUFFER *, BUFFER *);
+static int eat_date (pattern_t *pat, BUFFER *, BUFFER *);
+static int eat_range (pattern_t *pat, BUFFER *, BUFFER *);
+
+struct pattern_flags
+{
+  int tag;     /* character used to represent this op */
+  int op;      /* operation to perform */
+  int class;
+  int (*eat_arg) (pattern_t *, BUFFER *, BUFFER *);
+}
+Flags[] =
+{
+  { 'A', M_ALL,                        0,              NULL },
+  { 'b', M_BODY,               M_FULL_MSG,     eat_regexp },
+  { 'B', M_WHOLE_MSG,          M_FULL_MSG,     eat_regexp },
+  { 'c', M_CC,                 0,              eat_regexp },
+  { 'C', M_RECIPIENT,          0,              eat_regexp },
+  { 'd', M_DATE,               0,              eat_date },
+  { 'D', M_DELETED,            0,              NULL },
+  { 'e', M_SENDER,             0,              eat_regexp },
+  { 'E', M_EXPIRED,            0,              NULL },
+  { 'f', M_FROM,               0,              eat_regexp },
+  { 'F', M_FLAG,               0,              NULL },
+  { 'g', M_CRYPT_SIGN,                 0,              NULL },
+  { 'G', M_CRYPT_ENCRYPT,      0,              NULL },
+  { 'h', M_HEADER,             M_FULL_MSG,     eat_regexp },
+  { 'i', M_ID,                 0,              eat_regexp },
+  { 'k', M_PGP_KEY,            0,              NULL },
+  { 'L', M_ADDRESS,            0,              eat_regexp },
+  { 'l', M_LIST,               0,              NULL },
+  { 'm', M_MESSAGE,            0,              eat_range },
+  { 'n', M_SCORE,              0,              eat_range },
+  { 'N', M_NEW,                        0,              NULL },
+  { 'O', M_OLD,                        0,              NULL },
+  { 'p', M_PERSONAL_RECIP,     0,              NULL },
+  { 'P', M_PERSONAL_FROM,      0,              NULL },
+  { 'Q', M_REPLIED,            0,              NULL },
+  { 'R', M_READ,               0,              NULL },
+  { 'r', M_DATE_RECEIVED,      0,              eat_date },
+  { 's', M_SUBJECT,            0,              eat_regexp },
+  { 'S', M_SUPERSEDED,         0,              NULL },
+  { 'T', M_TAG,                        0,              NULL },
+  { 't', M_TO,                 0,              eat_regexp },
+  { 'U', M_UNREAD,             0,              NULL },
+  { 'v', M_COLLAPSED,          0,              NULL },
+  { 'V', M_CRYPT_VERIFIED,      0,              NULL },
+#ifdef USE_NNTP
+  { 'w', M_NEWSGROUPS,         0,              eat_regexp },
+#endif
+  { 'x', M_REFERENCE,          0,              eat_regexp },
+  { 'y', M_XLABEL,             0,              eat_regexp },
+  { 'z', M_SIZE,               0,              eat_range },
+  { '=', M_DUPLICATED,         0,              NULL },
+  { 0 }
+};
+
+static pattern_t *SearchPattern = NULL; /* current search pattern */
+static char LastSearch[STRING] = { 0 };        /* last pattern searched for */
+static char LastSearchExpn[LONG_STRING] = { 0 }; /* expanded version of
+                                                   LastSearch */
+
+#define M_MAXRANGE -1
+
+/* constants for parse_date_range() */
+#define M_PDR_NONE     0x0000
+#define M_PDR_MINUS    0x0001
+#define M_PDR_PLUS     0x0002
+#define M_PDR_WINDOW   0x0004
+#define M_PDR_ABSOLUTE 0x0008
+#define M_PDR_DONE     0x0010
+#define M_PDR_ERROR    0x0100
+#define M_PDR_ERRORDONE        (M_PDR_ERROR | M_PDR_DONE)
+
+
+int mutt_getvaluebychar (char ch, struct mapping_t *table)
+{
+  int i;
+
+  for (i = 0; table[i].name; i++)
+  {
+    if (ch == table[i].name[0])
+      return table[i].value;
+  }
+
+  return (-1);
+}
+
+/* if no uppercase letters are given, do a case-insensitive search */
+int mutt_which_case (const char *s)
+{
+  while (*s)
+  {
+    if (isalpha ((unsigned char) *s) && isupper ((unsigned char) *s))
+      return 0; /* case-sensitive */
+    s++;
+  }
+  return REG_ICASE; /* case-insensitive */
+}
+
+static int
+msg_search (CONTEXT *ctx, regex_t *rx, char *buf, size_t blen, int op, int msgno)
+{
+  char tempfile[_POSIX_PATH_MAX];
+  MESSAGE *msg = NULL;
+  STATE s;
+  struct stat st;
+  FILE *fp = NULL;
+  long lng = 0;
+  int match = 0;
+  HEADER *h = ctx->hdrs[msgno];
+
+  if ((msg = mx_open_message (ctx, msgno)) != NULL)
+  {
+    if (option (OPTTHOROUGHSRC))
+    {
+      /* decode the header / body */
+      memset (&s, 0, sizeof (s));
+      s.fpin = msg->fp;
+      s.flags = M_CHARCONV;
+      mutt_mktemp (tempfile);
+      if ((s.fpout = safe_fopen (tempfile, "w+")) == NULL)
+      {
+       mutt_perror (tempfile);
+       return (0);
+      }
+
+      if (op != M_BODY)
+       mutt_copy_header (msg->fp, h, s.fpout, CH_FROM | CH_DECODE, NULL);
+
+      if (op != M_HEADER)
+      {
+       mutt_parse_mime_message (ctx, h);
+
+       if (WithCrypto && (h->security & ENCRYPT)
+            && !crypt_valid_passphrase(h->security))
+       {
+         mx_close_message (&msg);
+         if (fp)
+         {
+           fclose (fp);
+           unlink (tempfile);
+         }
+         return (0);
+       }
+
+       fseek (msg->fp, h->offset, 0);
+       mutt_body_handler (h->content, &s);
+      }
+
+      fp = s.fpout;
+      fflush (fp);
+      fseek (fp, 0, 0);
+      fstat (fileno (fp), &st);
+      lng = (long) st.st_size;
+    }
+    else
+    {
+      /* raw header / body */
+      fp = msg->fp;
+      if (op != M_BODY)
+      {
+       fseek (fp, h->offset, 0);
+       lng = h->content->offset - h->offset;
+      }
+      if (op != M_HEADER)
+      {
+       if (op == M_BODY)
+         fseek (fp, h->content->offset, 0);
+       lng += h->content->length;
+      }
+    }
+
+    /* search the file "fp" */
+    while (lng > 0)
+    {
+      if (fgets (buf, blen - 1, fp) == NULL)
+       break; /* don't loop forever */
+      if (regexec (rx, buf, 0, NULL, 0) == 0)
+      {
+       match = 1;
+       break;
+      }
+      lng -= mutt_strlen (buf);
+    }
+    
+    mx_close_message (&msg);
+
+    if (option (OPTTHOROUGHSRC))
+    {
+      fclose (fp);
+      unlink (tempfile);
+    }
+  }
+
+  return match;
+}
+
+int eat_regexp (pattern_t *pat, BUFFER *s, BUFFER *err)
+{
+  BUFFER buf;
+  int r;
+
+  memset (&buf, 0, sizeof (buf));
+  if (mutt_extract_token (&buf, s, M_TOKEN_PATTERN | M_TOKEN_COMMENT) != 0 ||
+      !buf.data)
+  {
+    snprintf (err->data, err->dsize, _("Error in expression: %s"), s->dptr);
+    return (-1);
+  }
+  pat->rx = safe_malloc (sizeof (regex_t));
+  r = REGCOMP (pat->rx, buf.data, REG_NEWLINE | REG_NOSUB | mutt_which_case (buf.data));
+  FREE (&buf.data);
+  if (r)
+  {
+    regerror (r, pat->rx, err->data, err->dsize);
+    regfree (pat->rx);
+    FREE (&pat->rx);
+    return (-1);
+  }
+  return 0;
+}
+
+int eat_range (pattern_t *pat, BUFFER *s, BUFFER *err)
+{
+  char *tmp;
+  int do_exclusive = 0;
+  int skip_quote = 0;
+  
+  /*
+   * If simple_search is set to "~m %s", the range will have double quotes 
+   * around it...
+   */
+  if (*s->dptr == '"')
+  {
+    s->dptr++;
+    skip_quote = 1;
+  }
+  if (*s->dptr == '<')
+    do_exclusive = 1;
+  if ((*s->dptr != '-') && (*s->dptr != '<'))
+  {
+    /* range minimum */
+    if (*s->dptr == '>')
+    {
+      pat->max = M_MAXRANGE;
+      pat->min = strtol (s->dptr + 1, &tmp, 0) + 1; /* exclusive range */
+    }
+    else
+      pat->min = strtol (s->dptr, &tmp, 0);
+    if (toupper ((unsigned char) *tmp) == 'K') /* is there a prefix? */
+    {
+      pat->min *= 1024;
+      tmp++;
+    }
+    else if (toupper ((unsigned char) *tmp) == 'M')
+    {
+      pat->min *= 1048576;
+      tmp++;
+    }
+    if (*s->dptr == '>')
+    {
+      s->dptr = tmp;
+      return 0;
+    }
+    if (*tmp != '-')
+    {
+      /* exact value */
+      pat->max = pat->min;
+      s->dptr = tmp;
+      return 0;
+    }
+    tmp++;
+  }
+  else
+  {
+    s->dptr++;
+    tmp = s->dptr;
+  }
+  
+  if (isdigit ((unsigned char) *tmp))
+  {
+    /* range maximum */
+    pat->max = strtol (tmp, &tmp, 0);
+    if (toupper ((unsigned char) *tmp) == 'K')
+    {
+      pat->max *= 1024;
+      tmp++;
+    }
+    else if (toupper ((unsigned char) *tmp) == 'M')
+    {
+      pat->max *= 1048576;
+      tmp++;
+    }
+    if (do_exclusive)
+      (pat->max)--;
+  }
+  else
+    pat->max = M_MAXRANGE;
+
+  if (skip_quote && *tmp == '"')
+    tmp++;
+
+  SKIPWS (tmp);
+  s->dptr = tmp;
+  return 0;
+}
+
+static const char *getDate (const char *s, struct tm *t, BUFFER *err)
+{
+  char *p;
+  time_t now = time (NULL);
+  struct tm *tm = localtime (&now);
+
+  t->tm_mday = strtol (s, &p, 10);
+  if (t->tm_mday < 1 || t->tm_mday > 31)
+  {
+    snprintf (err->data, err->dsize, _("Invalid day of month: %s"), s);
+    return NULL;
+  }
+  if (*p != '/')
+  {
+    /* fill in today's month and year */
+    t->tm_mon = tm->tm_mon;
+    t->tm_year = tm->tm_year;
+    return p;
+  }
+  p++;
+  t->tm_mon = strtol (p, &p, 10) - 1;
+  if (t->tm_mon < 0 || t->tm_mon > 11)
+  {
+    snprintf (err->data, err->dsize, _("Invalid month: %s"), p);
+    return NULL;
+  }
+  if (*p != '/')
+  {
+    t->tm_year = tm->tm_year;
+    return p;
+  }
+  p++;
+  t->tm_year = strtol (p, &p, 10);
+  if (t->tm_year < 70) /* year 2000+ */
+    t->tm_year += 100;
+  else if (t->tm_year > 1900)
+    t->tm_year -= 1900;
+  return p;
+}
+
+/* Ny  years
+   Nm  months
+   Nw  weeks
+   Nd  days */
+static const char *get_offset (struct tm *tm, const char *s, int sign)
+{
+  char *ps;
+  int offset = strtol (s, &ps, 0);
+  if ((sign < 0 && offset > 0) || (sign > 0 && offset < 0))
+    offset = -offset;
+
+  switch (*ps)
+  {
+    case 'y':
+      tm->tm_year += offset;
+      break;
+    case 'm':
+      tm->tm_mon += offset;
+      break;
+    case 'w':
+      tm->tm_mday += 7 * offset;
+      break;
+    case 'd':
+      tm->tm_mday += offset;
+      break;
+    default:
+      return s;
+  }
+  mutt_normalize_time (tm);
+  return (ps + 1);
+}
+
+static void adjust_date_range (struct tm *min, struct tm *max)
+{
+  if (min->tm_year > max->tm_year
+      || (min->tm_year == max->tm_year && min->tm_mon > max->tm_mon)
+      || (min->tm_year == max->tm_year && min->tm_mon == max->tm_mon
+       && min->tm_mday > max->tm_mday))
+  {
+    int tmp;
+    
+    tmp = min->tm_year;
+    min->tm_year = max->tm_year;
+    max->tm_year = tmp;
+      
+    tmp = min->tm_mon;
+    min->tm_mon = max->tm_mon;
+    max->tm_mon = tmp;
+      
+    tmp = min->tm_mday;
+    min->tm_mday = max->tm_mday;
+    max->tm_mday = tmp;
+    
+    min->tm_hour = min->tm_min = min->tm_sec = 0;
+    max->tm_hour = 23;
+    max->tm_min = max->tm_sec = 59;
+  }
+}
+
+static const char * parse_date_range (const char* pc, struct tm *min,
+    struct tm *max, int haveMin, struct tm *baseMin, BUFFER *err)
+{
+  int flag = M_PDR_NONE;       
+  while (*pc && ((flag & M_PDR_DONE) == 0))
+  {
+    const char *pt;
+    char ch = *pc++;
+    SKIPWS (pc);
+    switch (ch)
+    {
+      case '-':
+      {
+       /* try a range of absolute date minus offset of Ndwmy */
+       pt = get_offset (min, pc, -1);
+       if (pc == pt)
+       {
+         if (flag == M_PDR_NONE)
+         { /* nothing yet and no offset parsed => absolute date? */
+           if (!getDate (pc, max, err))
+             flag |= (M_PDR_ABSOLUTE | M_PDR_ERRORDONE);  /* done bad */
+           else
+           {
+             /* reestablish initial base minimum if not specified */
+             if (!haveMin)
+               memcpy (min, baseMin, sizeof(struct tm));
+             flag |= (M_PDR_ABSOLUTE | M_PDR_DONE);  /* done good */
+           }
+         }
+         else
+           flag |= M_PDR_ERRORDONE;
+       }
+       else
+       {
+         pc = pt;
+         if (flag == M_PDR_NONE && !haveMin)
+         { /* the very first "-3d" without a previous absolute date */
+           max->tm_year = min->tm_year;
+           max->tm_mon = min->tm_mon;
+           max->tm_mday = min->tm_mday;
+         }
+         flag |= M_PDR_MINUS;
+       }
+      }
+      break;
+      case '+':
+      { /* enlarge plusRange */
+       pt = get_offset (max, pc, 1);
+       if (pc == pt)
+         flag |= M_PDR_ERRORDONE;
+       else
+       {
+         pc = pt;
+         flag |= M_PDR_PLUS;
+       }
+      }
+      break;
+      case '*':
+      { /* enlarge window in both directions */
+       pt = get_offset (min, pc, -1);
+       if (pc == pt)
+         flag |= M_PDR_ERRORDONE;
+       else
+       {
+         pc = get_offset (max, pc, 1);
+         flag |= M_PDR_WINDOW;
+       }
+      }
+      break;
+      default:
+       flag |= M_PDR_ERRORDONE;
+    }
+    SKIPWS (pc);
+  }
+  if ((flag & M_PDR_ERROR) && !(flag & M_PDR_ABSOLUTE))
+  { /* getDate has its own error message, don't overwrite it here */
+    snprintf (err->data, err->dsize, _("Invalid relative date: %s"), pc-1);
+  }
+  return ((flag & M_PDR_ERROR) ? NULL : pc);
+}
+
+static int eat_date (pattern_t *pat, BUFFER *s, BUFFER *err)
+{
+  BUFFER buffer;
+  struct tm min, max;
+
+  memset (&buffer, 0, sizeof (buffer));
+  if (mutt_extract_token (&buffer, s, M_TOKEN_COMMENT | M_TOKEN_PATTERN) != 0
+      || !buffer.data)
+  {
+    strfcpy (err->data, _("error in expression"), err->dsize);
+    return (-1);
+  }
+
+  memset (&min, 0, sizeof (min));
+  /* the `0' time is Jan 1, 1970 UTC, so in order to prevent a negative time
+     when doing timezone conversion, we use Jan 2, 1970 UTC as the base
+     here */
+  min.tm_mday = 2;
+  min.tm_year = 70;
+
+  memset (&max, 0, sizeof (max));
+
+  /* Arbitrary year in the future.  Don't set this too high
+     or mutt_mktime() returns something larger than will
+     fit in a time_t on some systems */
+  max.tm_year = 130;
+  max.tm_mon = 11;
+  max.tm_mday = 31;
+  max.tm_hour = 23;
+  max.tm_min = 59;
+  max.tm_sec = 59;
+
+  if (strchr ("<>=", buffer.data[0]))
+  {
+    /* offset from current time
+       <3d     less than three days ago
+       >3d     more than three days ago
+       =3d     exactly three days ago */
+    time_t now = time (NULL);
+    struct tm *tm = localtime (&now);
+    int exact = 0;
+
+    if (buffer.data[0] == '<')
+    {
+      memcpy (&min, tm, sizeof (min));
+      tm = &min;
+    }
+    else
+    {
+      memcpy (&max, tm, sizeof (max));
+      tm = &max;
+
+      if (buffer.data[0] == '=')
+       exact++;
+    }
+    tm->tm_hour = 23;
+    tm->tm_min = tm->tm_sec = 59;
+
+    /* force negative offset */
+    get_offset (tm, buffer.data + 1, -1);
+
+    if (exact)
+    {
+      /* start at the beginning of the day in question */
+      memcpy (&min, &max, sizeof (max));
+      min.tm_hour = min.tm_sec = min.tm_min = 0;
+    }
+  }
+  else
+  {
+    const char *pc = buffer.data;
+
+    int haveMin = FALSE;
+    int untilNow = FALSE;
+    if (isdigit ((unsigned char)*pc))
+    {
+      /* mininum date specified */
+      if ((pc = getDate (pc, &min, err)) == NULL)
+      {
+       FREE (&buffer.data);
+       return (-1);
+      }
+      haveMin = TRUE;
+      SKIPWS (pc);
+      if (*pc == '-')
+      {
+        const char *pt = pc + 1;
+       SKIPWS (pt);
+       untilNow = (*pt == '\0');
+      }
+    }
+
+    if (!untilNow)
+    { /* max date or relative range/window */
+
+      struct tm baseMin;
+
+      if (!haveMin)
+      { /* save base minimum and set current date, e.g. for "-3d+1d" */
+       time_t now = time (NULL);
+       struct tm *tm = localtime (&now);
+       memcpy (&baseMin, &min, sizeof(baseMin));
+       memcpy (&min, tm, sizeof (min));
+       min.tm_hour = min.tm_sec = min.tm_min = 0;
+      }
+      
+      /* preset max date for relative offsets,
+        if nothing follows we search for messages on a specific day */
+      max.tm_year = min.tm_year;
+      max.tm_mon = min.tm_mon;
+      max.tm_mday = min.tm_mday;
+
+      if (!parse_date_range (pc, &min, &max, haveMin, &baseMin, err))
+      { /* bail out on any parsing error */
+       FREE (&buffer.data);
+       return (-1);
+      }
+    }
+  }
+
+  /* Since we allow two dates to be specified we'll have to adjust that. */
+  adjust_date_range (&min, &max);
+
+  pat->min = mutt_mktime (&min, 1);
+  pat->max = mutt_mktime (&max, 1);
+
+  FREE (&buffer.data);
+
+  return 0;
+}
+
+static struct pattern_flags *lookup_tag (char tag)
+{
+  int i;
+
+  for (i = 0; Flags[i].tag; i++)
+    if (Flags[i].tag == tag)
+      return (&Flags[i]);
+  return NULL;
+}
+
+static /* const */ char *find_matching_paren (/* const */ char *s)
+{
+  int level = 1;
+
+  for (; *s; s++)
+  {
+    if (*s == '(')
+      level++;
+    else if (*s == ')')
+    {
+      level--;
+      if (!level)
+       break;
+    }
+  }
+  return s;
+}
+
+void mutt_pattern_free (pattern_t **pat)
+{
+  pattern_t *tmp;
+
+  while (*pat)
+  {
+    tmp = *pat;
+    *pat = (*pat)->next;
+
+    if (tmp->rx)
+    {
+      regfree (tmp->rx);
+      FREE (&tmp->rx);
+    }
+    if (tmp->child)
+      mutt_pattern_free (&tmp->child);
+    FREE (&tmp);
+  }
+}
+
+pattern_t *mutt_pattern_comp (/* const */ char *s, int flags, BUFFER *err)
+{
+  pattern_t *curlist = NULL;
+  pattern_t *tmp;
+  pattern_t *last = NULL;
+  int not = 0;
+  int alladdr = 0;
+  int or = 0;
+  int implicit = 1;    /* used to detect logical AND operator */
+  struct pattern_flags *entry;
+  char *p;
+  char *buf;
+  BUFFER ps;
+
+  memset (&ps, 0, sizeof (ps));
+  ps.dptr = s;
+  ps.dsize = mutt_strlen (s);
+
+  while (*ps.dptr)
+  {
+    SKIPWS (ps.dptr);
+    switch (*ps.dptr)
+    {
+      case '^':
+       ps.dptr++;
+       alladdr = !alladdr;
+       break;
+      case '!':
+       ps.dptr++;
+       not = !not;
+       break;
+      case '|':
+       if (!or)
+       {
+         if (!curlist)
+         {
+           snprintf (err->data, err->dsize, _("error in pattern at: %s"), ps.dptr);
+           return NULL;
+         }
+         if (curlist->next)
+         {
+           /* A & B | C == (A & B) | C */
+           tmp = new_pattern ();
+           tmp->op = M_AND;
+           tmp->child = curlist;
+
+           curlist = tmp;
+           last = curlist;
+         }
+
+         or = 1;
+       }
+       ps.dptr++;
+       implicit = 0;
+       not = 0;
+       alladdr = 0;
+       break;
+      case '~':
+       if (implicit && or)
+       {
+         /* A | B & C == (A | B) & C */
+         tmp = new_pattern ();
+         tmp->op = M_OR;
+         tmp->child = curlist;
+         curlist = tmp;
+         last = tmp;
+         or = 0;
+       }
+
+       tmp = new_pattern ();
+       tmp->not = not;
+       tmp->alladdr = alladdr;
+       not = 0;
+       alladdr=0;
+
+       if (last)
+         last->next = tmp;
+       else
+         curlist = tmp;
+       last = tmp;
+
+       ps.dptr++; /* move past the ~ */
+       if ((entry = lookup_tag (*ps.dptr)) == NULL)
+       {
+         snprintf (err->data, err->dsize, _("%c: invalid command"), *ps.dptr);
+         mutt_pattern_free (&curlist);
+         return NULL;
+       }
+       if (entry->class && (flags & entry->class) == 0)
+       {
+         snprintf (err->data, err->dsize, _("%c: not supported in this mode"), *ps.dptr);
+         mutt_pattern_free (&curlist);
+         return NULL;
+       }
+       tmp->op = entry->op;
+
+       ps.dptr++; /* eat the operator and any optional whitespace */
+       SKIPWS (ps.dptr);
+
+       if (entry->eat_arg)
+       {
+         if (!*ps.dptr)
+         {
+           snprintf (err->data, err->dsize, _("missing parameter"));
+           mutt_pattern_free (&curlist);
+           return NULL;
+         }
+         if (entry->eat_arg (tmp, &ps, err) == -1)
+         {
+           mutt_pattern_free (&curlist);
+           return NULL;
+         }
+       }
+       implicit = 1;
+       break;
+      case '(':
+       p = find_matching_paren (ps.dptr + 1);
+       if (*p != ')')
+       {
+         snprintf (err->data, err->dsize, _("mismatched parenthesis: %s"), ps.dptr);
+         mutt_pattern_free (&curlist);
+         return NULL;
+       }
+       /* compile the sub-expression */
+       buf = mutt_substrdup (ps.dptr + 1, p);
+       if ((tmp = mutt_pattern_comp (buf, flags, err)) == NULL)
+       {
+         FREE (&buf);
+         mutt_pattern_free (&curlist);
+         return NULL;
+       }
+       FREE (&buf);
+       if (last)
+         last->next = tmp;
+       else
+         curlist = tmp;
+       last = tmp;
+       tmp->not ^= not;
+       tmp->alladdr |= alladdr;
+       not = 0;
+       alladdr = 0;
+       ps.dptr = p + 1; /* restore location */
+       break;
+      default:
+       snprintf (err->data, err->dsize, _("error in pattern at: %s"), ps.dptr);
+       mutt_pattern_free (&curlist);
+       return NULL;
+    }
+  }
+  if (!curlist)
+  {
+    strfcpy (err->data, _("empty pattern"), err->dsize);
+    return NULL;
+  }
+  if (curlist->next)
+  {
+    tmp = new_pattern ();
+    tmp->op = or ? M_OR : M_AND;
+    tmp->child = curlist;
+    curlist = tmp;
+  }
+  return (curlist);
+}
+
+static int
+perform_and (pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, HEADER *hdr)
+{
+  for (; pat; pat = pat->next)
+    if (mutt_pattern_exec (pat, flags, ctx, hdr) <= 0)
+      return 0;
+  return 1;
+}
+
+static int
+perform_or (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, HEADER *hdr)
+{
+  for (; pat; pat = pat->next)
+    if (mutt_pattern_exec (pat, flags, ctx, hdr) > 0)
+      return 1;
+  return 0;
+}
+
+static int match_adrlist (regex_t *rx, int match_personal, int alladdr,
+                         int n, ...)
+{
+  va_list ap;
+  ADDRESS *a;
+
+  va_start (ap, n);
+  for ( ; n ; n --)
+  {
+    for (a = va_arg (ap, ADDRESS *) ; a ; a = a->next)
+    {
+      if (alladdr^
+         ((a->mailbox && regexec (rx, a->mailbox, 0, NULL, 0) == 0) ||
+          (match_personal && a->personal &&
+           regexec (rx, a->personal, 0, NULL, 0) == 0)))
+      {
+       va_end (ap);
+       return (! alladdr); /* Found match, or non-match if alladdr */
+      }
+    }
+  }
+  va_end (ap);
+  return alladdr; /* No matches, or all matches if alladdr */
+}
+
+static int match_reference (regex_t *rx, LIST *refs)
+{
+  for (; refs; refs = refs->next)
+    if (regexec (rx, refs->data, 0, NULL, 0) == 0)
+      return 1;
+  return 0;
+}
+
+int mutt_is_list_recipient (int alladdr, ADDRESS *a1, ADDRESS *a2)
+{
+  for (; a1 ; a1 = a1->next)
+    if (alladdr ^ mutt_is_subscribed_list (a1))
+      return (! alladdr);
+  for (; a2 ; a2 = a2->next)
+    if (alladdr ^ mutt_is_subscribed_list (a2))
+      return (! alladdr);
+  return alladdr;
+}
+
+int mutt_is_list_cc (int alladdr, ADDRESS *a1, ADDRESS *a2)
+{
+  for (; a1 ; a1 = a1->next)
+    if (alladdr ^ mutt_is_mail_list (a1))
+      return (! alladdr);
+  for (; a2 ; a2 = a2->next)
+    if (alladdr ^ mutt_is_mail_list (a2))
+      return (! alladdr);
+  return alladdr;
+}
+
+static int match_user (int alladdr, ADDRESS *a1, ADDRESS *a2)
+{
+  for (; a1 ; a1 = a1->next)
+    if (alladdr ^ mutt_addr_is_user (a1))
+      return (! alladdr);
+  for (; a2 ; a2 = a2->next)
+    if (alladdr ^ mutt_addr_is_user (a2))
+      return (! alladdr);
+  return alladdr;
+}
+
+/* flags
+       M_MATCH_FULL_ADDRESS    match both personal and machine address */
+int
+mutt_pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, HEADER *h)
+{
+  char buf[STRING];
+
+  switch (pat->op)
+  {
+    case M_AND:
+      return (pat->not ^ (perform_and (pat->child, flags, ctx, h) > 0));
+    case M_OR:
+      return (pat->not ^ (perform_or (pat->child, flags, ctx, h) > 0));
+    case M_ALL:
+      return (!pat->not);
+    case M_EXPIRED:
+      return (pat->not ^ h->expired);
+    case M_SUPERSEDED:
+      return (pat->not ^ h->superseded);
+    case M_FLAG:
+      return (pat->not ^ h->flagged);
+    case M_TAG:
+      return (pat->not ^ h->tagged);
+    case M_NEW:
+      return (pat->not ? h->old || h->read : !(h->old || h->read));
+    case M_UNREAD:
+      return (pat->not ? h->read : !h->read);
+    case M_REPLIED:
+      return (pat->not ^ h->replied);
+    case M_OLD:
+      return (pat->not ? (!h->old || h->read) : (h->old && !h->read));
+    case M_READ:
+      return (pat->not ^ h->read);
+    case M_DELETED:
+      return (pat->not ^ h->deleted);
+    case M_MESSAGE:
+      return (pat->not ^ (h->msgno >= pat->min - 1 && (pat->max == M_MAXRANGE ||
+                                                  h->msgno <= pat->max - 1)));
+    case M_DATE:
+      return (pat->not ^ (h->date_sent >= pat->min && h->date_sent <= pat->max));
+    case M_DATE_RECEIVED:
+      return (pat->not ^ (h->received >= pat->min && h->received <= pat->max));
+    case M_BODY:
+    case M_HEADER:
+    case M_WHOLE_MSG:
+      return (pat->not ^ msg_search (ctx, pat->rx, buf, sizeof (buf), pat->op, h->msgno));
+    case M_SENDER:
+      return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS,
+                                       pat->alladdr, 1, h->env->sender));
+    case M_FROM:
+      return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS,
+                                       pat->alladdr, 1, h->env->from));
+    case M_TO:
+      return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS,
+                                       pat->alladdr, 1, h->env->to));
+    case M_CC:
+      return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS,
+                                       pat->alladdr, 1, h->env->cc));
+    case M_SUBJECT:
+      return (pat->not ^ (h->env->subject && regexec (pat->rx, h->env->subject, 0, NULL, 0) == 0));
+    case M_ID:
+      return (pat->not ^ (h->env->message_id && regexec (pat->rx, h->env->message_id, 0, NULL, 0) == 0));
+    case M_SCORE:
+      return (pat->not ^ (h->score >= pat->min && (pat->max == M_MAXRANGE ||
+                                                  h->score <= pat->max)));
+    case M_SIZE:
+      return (pat->not ^ (h->content->length >= pat->min && (pat->max == M_MAXRANGE || h->content->length <= pat->max)));
+    case M_REFERENCE:
+      return (pat->not ^ match_reference (pat->rx, h->env->references));
+    case M_ADDRESS:
+      return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS,
+                                       pat->alladdr, 4, h->env->from,
+                                       h->env->sender, h->env->to, h->env->cc));
+    case M_RECIPIENT:
+           return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS,
+                                       pat->alladdr, 2, h->env->to, h->env->cc));
+    case M_LIST:
+      return (pat->not ^ mutt_is_list_recipient (pat->alladdr, h->env->to, h->env->cc));
+    case M_PERSONAL_RECIP:
+      return (pat->not ^ match_user (pat->alladdr, h->env->to, h->env->cc));
+    case M_PERSONAL_FROM:
+      return (pat->not ^ match_user (pat->alladdr, h->env->from, NULL));
+    case M_COLLAPSED:
+      return (pat->not ^ (h->collapsed && h->num_hidden > 1));
+   case M_CRYPT_SIGN:
+     if (!WithCrypto)
+       break;
+     return (pat->not ^ ((h->security & SIGN) ? 1 : 0));
+   case M_CRYPT_VERIFIED:
+     if (!WithCrypto)
+       break;
+     return (pat->not ^ ((h->security & GOODSIGN) ? 1 : 0));
+   case M_CRYPT_ENCRYPT:
+     if (!WithCrypto)
+       break;
+     return (pat->not ^ ((h->security & ENCRYPT) ? 1 : 0));
+   case M_PGP_KEY:
+     if (!(WithCrypto & APPLICATION_PGP))
+       break;
+     return (pat->not ^ ((h->security & APPLICATION_PGP) && (h->security & PGPKEY)));
+    case M_XLABEL:
+      return (pat->not ^ (h->env->x_label && regexec (pat->rx, h->env->x_label, 0, NULL, 0) == 0));
+    case M_DUPLICATED:
+      return (pat->not ^ (h->thread && h->thread->duplicate_thread));
+#ifdef USE_NNTP
+    case M_NEWSGROUPS:
+      return (pat->not ^ (h->env->newsgroups && regexec (pat->rx, h->env->newsgroups, 0, NULL, 0) == 0));
+#endif
+  }
+  mutt_error (_("error: unknown op %d (report this error)."), pat->op);
+  return (-1);
+}
+
+static void quote_simple(char *tmp, size_t len, const char *p)
+{
+  int i = 0;
+  
+  tmp[i++] = '"';
+  while (*p && i < len - 3)
+  {
+    if (*p == '\\' || *p == '"')
+      tmp[i++] = '\\';
+    tmp[i++] = *p++;
+  }
+  tmp[i++] = '"';
+  tmp[i] = 0;
+}
+  
+/* convert a simple search into a real request */
+void mutt_check_simple (char *s, size_t len, const char *simple)
+{
+  char tmp[LONG_STRING];
+
+  /* XXX - is ascii_strcasecmp() right here, or should we use locale's
+   * equivalences?
+   */
+  
+  if (!strchr (s, '~')) /* yup, so spoof a real request */
+  {
+    /* convert old tokens into the new format */
+    if (ascii_strcasecmp ("all", s) == 0 ||
+       !mutt_strcmp ("^", s) || !mutt_strcmp (".", s)) /* ~A is more efficient */
+      strfcpy (s, "~A", len);
+    else if (ascii_strcasecmp ("del", s) == 0)
+      strfcpy (s, "~D", len);
+    else if (ascii_strcasecmp ("flag", s) == 0)
+      strfcpy (s, "~F", len);
+    else if (ascii_strcasecmp ("new", s) == 0)
+      strfcpy (s, "~N", len);
+    else if (ascii_strcasecmp ("old", s) == 0)
+      strfcpy (s, "~O", len);
+    else if (ascii_strcasecmp ("repl", s) == 0)
+      strfcpy (s, "~Q", len);
+    else if (ascii_strcasecmp ("read", s) == 0)
+      strfcpy (s, "~R", len);
+    else if (ascii_strcasecmp ("tag", s) == 0)
+      strfcpy (s, "~T", len);
+    else if (ascii_strcasecmp ("unread", s) == 0)
+      strfcpy (s, "~U", len);
+    else
+    {
+      quote_simple (tmp, sizeof(tmp), s);
+      mutt_expand_fmt (s, len, simple, tmp);
+    }
+  }
+}
+
+int mutt_pattern_func (int op, char *prompt)
+{
+  pattern_t *pat;
+  char buf[LONG_STRING] = "", *simple, error[STRING];
+  BUFFER err;
+  int i;
+
+  strfcpy (buf, NONULL (Context->pattern), sizeof (buf));
+  if (prompt || op != M_LIMIT)
+  if (mutt_get_field (prompt, buf, sizeof (buf), M_PATTERN | M_CLEAR) != 0 || !buf[0])
+    return (-1);
+
+  mutt_message _("Compiling search pattern...");
+  
+  simple = safe_strdup (buf);
+  mutt_check_simple (buf, sizeof (buf), NONULL (SimpleSearch));
+
+  err.data = error;
+  err.dsize = sizeof (error);
+  if ((pat = mutt_pattern_comp (buf, M_FULL_MSG, &err)) == NULL)
+  {
+    FREE (&simple);
+    mutt_error ("%s", err.data);
+    return (-1);
+  }
+
+  mutt_message _("Executing command on matching messages...");
+
+#define THIS_BODY Context->hdrs[i]->content
+
+  if (op == M_LIMIT)
+  {
+    Context->vcount    = 0;
+    Context->vsize     = 0;
+    Context->collapsed = 0;
+
+    for (i = 0; i < Context->msgcount; i++)
+    {
+      /* new limit pattern implicitly uncollapses all threads */
+      Context->hdrs[i]->virtual = -1;
+      Context->hdrs[i]->limited = 0;
+      Context->hdrs[i]->collapsed = 0;
+      Context->hdrs[i]->num_hidden = 0;
+      if (mutt_pattern_exec (pat, M_MATCH_FULL_ADDRESS, Context, Context->hdrs[i]))
+      {
+       Context->hdrs[i]->virtual = Context->vcount;
+       Context->hdrs[i]->limited = 1;
+       Context->v2r[Context->vcount] = i;
+       Context->vcount++;
+       Context->vsize+=THIS_BODY->length + THIS_BODY->offset -
+         THIS_BODY->hdr_offset;
+      }
+    }
+  }
+  else
+  {
+    for (i = 0; i < Context->vcount; i++)
+    {
+      if (mutt_pattern_exec (pat, M_MATCH_FULL_ADDRESS, Context, Context->hdrs[Context->v2r[i]]))
+      {
+       switch (op)
+       {
+         case M_UNDELETE:
+           mutt_set_flag (Context, Context->hdrs[Context->v2r[i]], M_PURGED,
+                          0);
+         case M_DELETE:
+           mutt_set_flag (Context, Context->hdrs[Context->v2r[i]], M_DELETE, 
+                         (op == M_DELETE));
+           break;
+         case M_TAG:
+         case M_UNTAG:
+           mutt_set_flag (Context, Context->hdrs[Context->v2r[i]], M_TAG, 
+                          (op == M_TAG));
+           break;
+       }
+      }
+    }
+  }
+
+#undef THIS_BODY
+
+  mutt_clear_error ();
+
+  if (op == M_LIMIT)
+  {
+    FREE (&Context->pattern);
+    if (Context->limit_pattern) 
+      mutt_pattern_free (&Context->limit_pattern);
+    if (!Context->vcount)
+    {
+      mutt_error _("No messages matched criteria.");
+#if 0
+      Context->vcount = Context->msgcount;
+      /* restore full display */
+      for (i = 0; i < Context->msgcount; i++)
+      {
+       Context->hdrs[i]->virtual = i;
+       Context->v2r[i] = i;
+      }
+#endif
+    }
+    else if (mutt_strncmp (buf, "~A", 2) != 0)
+    {
+      Context->pattern = simple;
+      simple = NULL; /* don't clobber it */
+      Context->limit_pattern = mutt_pattern_comp (buf, M_FULL_MSG, &err);
+    }
+  }
+  FREE (&simple);
+  mutt_pattern_free (&pat);
+  return 0;
+}
+
+int mutt_search_command (int cur, int op)
+{
+  int i, j;
+  char buf[STRING];
+  char temp[LONG_STRING];
+  char error[STRING];
+  BUFFER err;
+  int incr;
+  HEADER *h;
+  
+  if (op != OP_SEARCH_NEXT && op != OP_SEARCH_OPPOSITE)
+  {
+    strfcpy (buf, LastSearch, sizeof (buf));
+    if (mutt_get_field ((op == OP_SEARCH) ? _("Search for: ") :
+                     _("Reverse search for: "), buf, sizeof (buf),
+                     M_CLEAR | M_PATTERN) != 0 || !buf[0])
+      return (-1);
+
+    if (op == OP_SEARCH)
+      unset_option (OPTSEARCHREVERSE);
+    else
+      set_option (OPTSEARCHREVERSE);
+
+    /* compare the *expanded* version of the search pattern in case 
+       $simple_search has changed while we were searching */
+    strfcpy (temp, buf, sizeof (temp));
+    mutt_check_simple (temp, sizeof (temp), NONULL (SimpleSearch));
+
+    if (!SearchPattern || mutt_strcmp (temp, LastSearchExpn))
+    {
+      set_option (OPTSEARCHINVALID);
+      strfcpy (LastSearch, buf, sizeof (LastSearch));
+      mutt_message _("Compiling search pattern...");
+      mutt_pattern_free (&SearchPattern);
+      err.data = error;
+      err.dsize = sizeof (error);
+      if ((SearchPattern = mutt_pattern_comp (temp, M_FULL_MSG, &err)) == NULL)
+      {
+       mutt_error ("%s", error);
+       return (-1);
+      }
+      mutt_clear_error ();
+    }
+  }
+  else if (!SearchPattern)
+  {
+    mutt_error _("No search pattern.");
+    return (-1);
+  }
+
+  if (option (OPTSEARCHINVALID))
+  {
+    for (i = 0; i < Context->msgcount; i++)
+      Context->hdrs[i]->searched = 0;
+    unset_option (OPTSEARCHINVALID);
+  }
+
+  incr = (option (OPTSEARCHREVERSE)) ? -1 : 1;
+  if (op == OP_SEARCH_OPPOSITE)
+    incr = -incr;
+
+  for (i = cur + incr, j = 0 ; j != Context->vcount; j++)
+  {
+    if (i > Context->vcount - 1)
+    {
+      i = 0;
+      if (option (OPTWRAPSEARCH))
+        mutt_message _("Search wrapped to top.");
+      else 
+      {
+        mutt_message _("Search hit bottom without finding match");
+       return (-1);
+      }
+    }
+    else if (i < 0)
+    {
+      i = Context->vcount - 1;
+      if (option (OPTWRAPSEARCH))
+        mutt_message _("Search wrapped to bottom.");
+      else 
+      {
+        mutt_message _("Search hit top without finding match");
+       return (-1);
+      }
+    }
+
+    h = Context->hdrs[Context->v2r[i]];
+    if (h->searched)
+    {
+      /* if we've already evaulated this message, use the cached value */
+      if (h->matched)
+       return i;
+    }
+    else
+    {
+      /* remember that we've already searched this message */
+      h->searched = 1;
+      if ((h->matched = (mutt_pattern_exec (SearchPattern, M_MATCH_FULL_ADDRESS, Context, h) > 0)))
+       return i;
+    }
+
+    if (SigInt)
+    {
+      mutt_error _("Search interrupted.");
+      SigInt = 0;
+      return (-1);
+    }
+
+    i += incr;
+  }
+
+  mutt_error _("Not found.");
+  return (-1);
+}
diff --git a/pgp.c b/pgp.c
new file mode 100644 (file)
index 0000000..1a4a2ec
--- /dev/null
+++ b/pgp.c
@@ -0,0 +1,1432 @@
+/*
+ * Copyright (C) 1996,1997 Michael R. Elkins <me@mutt.org>
+ * Copyright (c) 1998,1999 Thomas Roessler <roessler@does-not-exist.org>
+ *
+ *     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.
+ */ 
+
+/*
+ * This file contains all of the PGP routines necessary to sign, encrypt,
+ * verify and decrypt PGP messages in either the new PGP/MIME format, or
+ * in the older Application/Pgp format.  It also contains some code to
+ * cache the user's passphrase for repeat use when decrypting or signing
+ * a message.
+ */
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "pgp.h"
+#include "mime.h"
+#include "copy.h"
+
+#include <sys/wait.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <ctype.h>
+
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
+
+#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
+
+#ifdef HAVE_SYS_RESOURCE_H
+# include <sys/resource.h>
+#endif
+
+#ifdef CRYPT_BACKEND_CLASSIC_PGP
+
+#include "mutt_crypt.h"
+
+
+
+char PgpPass[STRING];
+time_t PgpExptime = 0; /* when does the cached passphrase expire? */
+
+void pgp_void_passphrase (void)
+{
+  memset (PgpPass, 0, sizeof (PgpPass));
+  PgpExptime = 0;
+}
+
+
+void pgp_forget_passphrase (void)
+{
+  pgp_void_passphrase ();
+  mutt_message _("PGP passphrase forgotten.");
+}
+
+int pgp_use_gpg_agent (void)
+{
+  return option (OPTUSEGPGAGENT) && getenv ("GPG_TTY") && getenv ("GPG_AGENT_INFO");
+}
+
+char *pgp_keyid(pgp_key_t k)
+{
+  if((k->flags & KEYFLAG_SUBKEY) && k->parent && option(OPTPGPIGNORESUB))
+    k = k->parent;
+
+  return _pgp_keyid(k);
+}
+
+char *_pgp_keyid(pgp_key_t k)
+{
+  if(option(OPTPGPLONGIDS))
+    return k->keyid;
+  else
+    return (k->keyid + 8);
+}
+
+/* ----------------------------------------------------------------------------
+ * Routines for handing PGP input.
+ */
+
+
+
+/* Copy PGP output messages and look for signs of a good signature */
+
+static int pgp_copy_checksig (FILE *fpin, FILE *fpout)
+{
+  int rv = -1;
+
+  if (PgpGoodSign.pattern)
+  {
+    char *line = NULL;
+    int lineno = 0;
+    size_t linelen;
+    
+    while ((line = mutt_read_line (line, &linelen, fpin, &lineno)) != NULL)
+    {
+      if (regexec (PgpGoodSign.rx, line, 0, NULL, 0) == 0)
+      {
+       dprint (2, (debugfile, "pgp_copy_checksig: \"%s\" matches regexp.\n",
+                   line));
+       rv = 0;
+      }
+      else
+       dprint (2, (debugfile, "pgp_copy_checksig: \"%s\" doesn't match regexp.\n",
+                   line));
+      
+      fputs (line, fpout);
+      fputc ('\n', fpout);
+    }
+    FREE (&line);
+  }
+  else
+  {
+    dprint (2, (debugfile, "pgp_copy_checksig: No pattern.\n"));
+    mutt_copy_stream (fpin, fpout);
+    rv = 1;
+  }
+
+  return rv;
+}
+
+/* 
+ * Copy a clearsigned message, and strip the signature and PGP's
+ * dash-escaping.
+ * 
+ * XXX - charset handling: We assume that it is safe to do
+ * character set decoding first, dash decoding second here, while
+ * we do it the other way around in the main handler.
+ * 
+ * (Note that we aren't worse than Outlook &c in this, and also
+ * note that we can successfully handle anything produced by any
+ * existing versions of mutt.) 
+ */
+
+static void pgp_copy_clearsigned (FILE *fpin, STATE *s, char *charset)
+{
+  char buf[HUGE_STRING];
+  short complete, armor_header;
+  
+  FGETCONV *fc;
+  
+  rewind (fpin);
+  
+  fc = fgetconv_open (fpin, charset, Charset, M_ICONV_HOOK_FROM);
+  
+  for (complete = 1, armor_header = 1;
+       fgetconvs (buf, sizeof (buf), fc) != NULL;
+       complete = strchr (buf, '\n') != NULL)
+  {
+    if (!complete)
+    {
+      if (!armor_header)
+       state_puts (buf, s);
+      continue;
+    }
+
+    if (mutt_strcmp (buf, "-----BEGIN PGP SIGNATURE-----\n") == 0)
+      break;
+    
+    if (armor_header)
+    {
+      if (buf[0] == '\n') 
+       armor_header = 0;
+      continue;
+    }
+    
+    if (s->prefix) 
+      state_puts (s->prefix, s);
+    
+    if (buf[0] == '-' && buf[1] == ' ')
+      state_puts (buf + 2, s);
+    else
+      state_puts (buf, s);
+  }
+  
+  fgetconv_close (&fc);
+}
+
+
+/* Support for the Application/PGP Content Type. */
+
+void pgp_application_pgp_handler (BODY *m, STATE *s)
+{
+  int needpass = -1, pgp_keyblock = 0;
+  int clearsign = 0, rv, rc;
+  long start_pos = 0;
+  long bytes, last_pos, offset;
+  char buf[HUGE_STRING];
+  char outfile[_POSIX_PATH_MAX];
+  char tmpfname[_POSIX_PATH_MAX];
+  FILE *pgpout = NULL, *pgpin = NULL, *pgperr = NULL;
+  FILE *tmpfp;
+  pid_t thepid;
+
+  short maybe_goodsig = 1;
+  short have_any_sigs = 0;
+
+  char body_charset[STRING];
+  mutt_get_body_charset (body_charset, sizeof (body_charset), m);
+  
+  fseek (s->fpin, m->offset, 0);
+  last_pos = m->offset;
+  
+  for (bytes = m->length; bytes > 0;)
+  {
+    if (fgets (buf, sizeof (buf), s->fpin) == NULL)
+      break;
+    
+    offset = ftell (s->fpin);
+    bytes -= (offset - last_pos); /* don't rely on mutt_strlen(buf) */
+    last_pos = offset;
+    
+    if (mutt_strncmp ("-----BEGIN PGP ", buf, 15) == 0)
+    {
+      clearsign = 0;
+      start_pos = last_pos;
+
+      if (mutt_strcmp ("MESSAGE-----\n", buf + 15) == 0)
+        needpass = 1;
+      else if (mutt_strcmp ("SIGNED MESSAGE-----\n", buf + 15) == 0)
+      {
+       clearsign = 1;
+        needpass = 0;
+      }
+      else if (!option (OPTDONTHANDLEPGPKEYS) &&
+              mutt_strcmp ("PUBLIC KEY BLOCK-----\n", buf + 15) == 0)
+      {
+        needpass = 0;
+        pgp_keyblock =1;
+      } 
+      else
+      {
+       /* XXX - we may wish to recode here */
+       if (s->prefix)
+         state_puts (s->prefix, s);
+       state_puts (buf, s);
+       continue;
+      }
+
+      have_any_sigs = have_any_sigs || (clearsign && (s->flags & M_VERIFY));
+
+      /* Copy PGP material to temporary file */
+      mutt_mktemp (tmpfname);
+      if ((tmpfp = safe_fopen (tmpfname, "w+")) == NULL)
+      {
+       mutt_perror (tmpfname);
+       return;
+      }
+      
+      fputs (buf, tmpfp);
+      while (bytes > 0 && fgets (buf, sizeof (buf) - 1, s->fpin) != NULL)
+      {
+       offset = ftell (s->fpin);
+       bytes -= (offset - last_pos); /* don't rely on mutt_strlen(buf) */
+       last_pos = offset;
+       
+       fputs (buf, tmpfp);
+
+       if ((needpass && mutt_strcmp ("-----END PGP MESSAGE-----\n", buf) == 0) ||
+           (!needpass 
+             && (mutt_strcmp ("-----END PGP SIGNATURE-----\n", buf) == 0
+                 || mutt_strcmp ("-----END PGP PUBLIC KEY BLOCK-----\n",buf) == 0)))
+         break;
+      }
+
+      /* leave tmpfp open in case we still need it - but flush it! */
+      fflush (tmpfp);
+      
+      
+      /* Invoke PGP if needed */
+      if (!clearsign || (s->flags & M_VERIFY))
+      {
+       mutt_mktemp (outfile);
+       if ((pgpout = safe_fopen (outfile, "w+")) == NULL)
+       {
+         mutt_perror (tmpfname);
+         return;
+       }
+       
+       if ((thepid = pgp_invoke_decode (&pgpin, NULL, &pgperr, -1,
+                                        fileno (pgpout), -1, tmpfname,
+                                        needpass)) == -1)
+       {
+         safe_fclose (&pgpout);
+         maybe_goodsig = 0;
+         pgpin = NULL;
+         pgperr = NULL;
+         state_attach_puts (_("[-- Error: unable to create PGP subprocess! --]\n"), s);
+       }
+       else /* PGP started successfully */
+       {
+         if (needpass)
+         {
+           if (!pgp_valid_passphrase ()) pgp_void_passphrase();
+            if (pgp_use_gpg_agent())
+              *PgpPass = 0;
+           fprintf (pgpin, "%s\n", PgpPass);
+         }
+         
+         safe_fclose (&pgpin);
+
+         if (s->flags & M_DISPLAY)
+         {
+           crypt_current_time (s, "PGP");
+           rc = pgp_copy_checksig (pgperr, s->fpout);
+         }
+         
+         safe_fclose (&pgperr);
+         rv = mutt_wait_filter (thepid);
+         
+         if (s->flags & M_DISPLAY)
+         {
+           if (rc == 0) have_any_sigs = 1;
+           if (rc || rv) maybe_goodsig = 0;
+
+           state_putc ('\n', s);
+           state_attach_puts (_("[-- End of PGP output --]\n\n"), s);
+         }
+       }
+      }
+      
+
+      /*
+       * Now, copy cleartext to the screen.  NOTE - we expect that PGP
+       * outputs utf-8 cleartext.  This may not always be true, but it 
+       * seems to be a reasonable guess.
+       */
+
+      if(s->flags & M_DISPLAY)
+      {
+       if (needpass)
+         state_attach_puts (_("[-- BEGIN PGP MESSAGE --]\n\n"), s);
+       else if (pgp_keyblock)
+         state_attach_puts (_("[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"), s);
+       else
+         state_attach_puts (_("[-- BEGIN PGP SIGNED MESSAGE --]\n\n"), s);
+      }
+
+      if (clearsign)
+      {
+       rewind (tmpfp);
+       if (tmpfp) 
+         pgp_copy_clearsigned (tmpfp, s, body_charset);
+      }
+      else if (pgpout)
+      {
+       FGETCONV *fc;
+       int c;
+       rewind (pgpout);
+       state_set_prefix (s);
+       fc = fgetconv_open (pgpout, "utf-8", Charset, 0);
+       while ((c = fgetconv (fc)) != EOF)
+         state_prefix_putc (c, s);
+       fgetconv_close (&fc);
+      }
+
+      if (s->flags & M_DISPLAY)
+      {
+       state_putc ('\n', s);
+       if (needpass)
+         state_attach_puts (_("[-- END PGP MESSAGE --]\n"), s);
+       else if (pgp_keyblock)
+         state_attach_puts (_("[-- END PGP PUBLIC KEY BLOCK --]\n"), s);
+       else
+         state_attach_puts (_("[-- END PGP SIGNED MESSAGE --]\n"), s);
+      }
+
+      if (tmpfp)
+      {
+       safe_fclose (&tmpfp);
+       mutt_unlink (tmpfname);
+      }
+      if (pgpout)
+      {
+       safe_fclose (&pgpout);
+       mutt_unlink (outfile);
+      }
+    }
+    else
+    {
+      /* XXX - we may wish to recode here */
+      if (s->prefix)
+       state_puts (s->prefix, s);
+      state_puts (buf, s);
+    }
+  }
+
+  m->goodsig = (maybe_goodsig && have_any_sigs);
+
+  if (needpass == -1)
+  {
+    state_attach_puts (_("[-- Error: could not find beginning of PGP message! --]\n\n"), s);
+    return;
+  }
+}
+
+static int pgp_check_traditional_one_body (FILE *fp, BODY *b, int tagged_only)
+{
+  char tempfile[_POSIX_PATH_MAX];
+  char buf[HUGE_STRING];
+  FILE *tfp;
+  
+  short sgn = 0;
+  short enc = 0;
+  short key = 0;
+  
+  if (b->type != TYPETEXT)
+    return 0;
+
+  if (tagged_only && !b->tagged)
+    return 0;
+
+  mutt_mktemp (tempfile);
+  if (mutt_decode_save_attachment (fp, b, tempfile, 0, 0) != 0)
+  {
+    unlink (tempfile);
+    return 0;
+  }
+  
+  if ((tfp = fopen (tempfile, "r")) == NULL)
+  {
+    unlink (tempfile);
+    return 0;
+  }
+  
+  while (fgets (buf, sizeof (buf), tfp))
+  {
+    if (mutt_strncmp ("-----BEGIN PGP ", buf, 15) == 0)
+    {
+      if (mutt_strcmp ("MESSAGE-----\n", buf + 15) == 0)
+       enc = 1;
+      else if (mutt_strcmp ("SIGNED MESSAGE-----\n", buf + 15) == 0)
+       sgn = 1;
+      else if (mutt_strcmp ("PUBLIC KEY BLOCK-----\n", buf + 15) == 0)
+       key = 1;
+    }
+  }
+  safe_fclose (&tfp);
+  unlink (tempfile);
+
+  if (!enc && !sgn && !key)
+    return 0;
+
+  /* fix the content type */
+  
+  mutt_set_parameter ("format", "fixed", &b->parameter);
+  if (enc)
+    mutt_set_parameter ("x-action", "pgp-encrypted", &b->parameter);
+  else if (sgn)
+    mutt_set_parameter ("x-action", "pgp-signed", &b->parameter);
+  else if (key)
+    mutt_set_parameter ("x-action", "pgp-keys", &b->parameter);
+  
+  return 1;
+}
+
+int pgp_check_traditional (FILE *fp, BODY *b, int tagged_only)
+{
+  int rv = 0;
+  int r;
+  for (; b; b = b->next)
+  {
+    if (is_multipart (b))
+      rv = pgp_check_traditional (fp, b->parts, tagged_only) || rv;
+    else if (b->type == TYPETEXT)
+    {
+      if ((r = mutt_is_application_pgp (b)))
+       rv = rv || r;
+      else
+       rv = pgp_check_traditional_one_body (fp, b, tagged_only) || rv;
+    }
+  }
+
+  return rv;
+}
+
+     
+
+
+
+int pgp_verify_one (BODY *sigbdy, STATE *s, const char *tempfile)
+{
+  char sigfile[_POSIX_PATH_MAX], pgperrfile[_POSIX_PATH_MAX];
+  FILE *fp, *pgpout, *pgperr;
+  pid_t thepid;
+  int badsig = -1;
+  int rv;
+  
+  snprintf (sigfile, sizeof (sigfile), "%s.asc", tempfile);
+  
+  if(!(fp = safe_fopen (sigfile, "w")))
+  {
+    mutt_perror(sigfile);
+    return -1;
+  }
+       
+  fseek (s->fpin, sigbdy->offset, 0);
+  mutt_copy_bytes (s->fpin, fp, sigbdy->length);
+  fclose (fp);
+  
+  mutt_mktemp(pgperrfile);
+  if(!(pgperr = safe_fopen(pgperrfile, "w+")))
+  {
+    mutt_perror(pgperrfile);
+    unlink(sigfile);
+    return -1;
+  }
+  
+  crypt_current_time (s, "PGP");
+  
+  if((thepid = pgp_invoke_verify (NULL, &pgpout, NULL, 
+                                  -1, -1, fileno(pgperr),
+                                  tempfile, sigfile)) != -1)
+  {
+    if (pgp_copy_checksig (pgpout, s->fpout) >= 0)
+      badsig = 0;
+    
+    
+    safe_fclose (&pgpout);
+    fflush (pgperr);
+    rewind (pgperr);
+    
+    if (pgp_copy_checksig  (pgperr, s->fpout) >= 0)
+      badsig = 0;
+
+    if ((rv = mutt_wait_filter (thepid)))
+      badsig = -1;
+    
+     dprint (1, (debugfile, "pgp_verify_one: mutt_wait_filter returned %d.\n", rv));
+  }
+
+  safe_fclose (&pgperr);
+
+  state_attach_puts (_("[-- End of PGP output --]\n\n"), s);
+
+  mutt_unlink (sigfile);
+  mutt_unlink (pgperrfile);
+
+  dprint (1, (debugfile, "pgp_verify_one: returning %d.\n", badsig));
+  
+  return badsig;
+}
+
+
+/* Extract pgp public keys from messages or attachments */
+
+void pgp_extract_keys_from_messages (HEADER *h)
+{
+  int i;
+  char tempfname[_POSIX_PATH_MAX];
+  FILE *fpout;
+
+  if (h)
+  {
+    mutt_parse_mime_message (Context, h);
+    if(h->security & PGPENCRYPT && !pgp_valid_passphrase ())
+      return;
+  }
+
+  mutt_mktemp (tempfname);
+  if (!(fpout = safe_fopen (tempfname, "w")))
+  {
+    mutt_perror (tempfname);
+    return;
+  }
+
+  set_option (OPTDONTHANDLEPGPKEYS);
+  
+  if (!h)
+  {
+    for (i = 0; i < Context->vcount; i++)
+    {
+      if (Context->hdrs[Context->v2r[i]]->tagged)
+      {
+       mutt_parse_mime_message (Context, Context->hdrs[Context->v2r[i]]);
+       if (Context->hdrs[Context->v2r[i]]->security & PGPENCRYPT
+          && !pgp_valid_passphrase())
+       {
+         fclose (fpout);
+         goto bailout;
+       }
+       mutt_copy_message (fpout, Context, Context->hdrs[Context->v2r[i]], 
+                          M_CM_DECODE|M_CM_CHARCONV, 0);
+      }
+    }
+  } 
+  else
+  {
+    mutt_parse_mime_message (Context, h);
+    if (h->security & PGPENCRYPT && !pgp_valid_passphrase())
+    {
+      fclose (fpout);
+      goto bailout;
+    }
+    mutt_copy_message (fpout, Context, h, M_CM_DECODE|M_CM_CHARCONV, 0);
+  }
+      
+  fclose (fpout);
+  mutt_endwin (NULL);
+  pgp_invoke_import (tempfname);
+  mutt_any_key_to_continue (NULL);
+
+  bailout:
+  
+  mutt_unlink (tempfname);
+  unset_option (OPTDONTHANDLEPGPKEYS);
+  
+}
+
+static void pgp_extract_keys_from_attachment (FILE *fp, BODY *top)
+{
+  STATE s;
+  FILE *tempfp;
+  char tempfname[_POSIX_PATH_MAX];
+
+  mutt_mktemp (tempfname);
+  if (!(tempfp = safe_fopen (tempfname, "w")))
+  {
+    mutt_perror (tempfname);
+    return;
+  }
+
+  memset (&s, 0, sizeof (STATE));
+  
+  s.fpin = fp;
+  s.fpout = tempfp;
+  
+  mutt_body_handler (top, &s);
+
+  fclose (tempfp);
+
+  pgp_invoke_import (tempfname);
+  mutt_any_key_to_continue (NULL);
+
+  mutt_unlink (tempfname);
+}
+
+void pgp_extract_keys_from_attachment_list (FILE *fp, int tag, BODY *top)
+{
+  if(!fp)
+  {
+    mutt_error _("Internal error. Inform <roessler@does-not-exist.org>.");
+    return;
+  }
+
+  mutt_endwin (NULL);
+  set_option(OPTDONTHANDLEPGPKEYS);
+  
+  for(; top; top = top->next)
+  {
+    if(!tag || top->tagged)
+      pgp_extract_keys_from_attachment (fp, top);
+    
+    if(!tag)
+      break;
+  }
+  
+  unset_option(OPTDONTHANDLEPGPKEYS);
+}
+
+BODY *pgp_decrypt_part (BODY *a, STATE *s, FILE *fpout, BODY *p)
+{
+  char buf[LONG_STRING];
+  FILE *pgpin, *pgpout, *pgperr, *pgptmp;
+  struct stat info;
+  BODY *tattach;
+  int len;
+  char pgperrfile[_POSIX_PATH_MAX];
+  char pgptmpfile[_POSIX_PATH_MAX];
+  pid_t thepid;
+  
+  mutt_mktemp (pgperrfile);
+  if ((pgperr = safe_fopen (pgperrfile, "w+")) == NULL)
+  {
+    mutt_perror (pgperrfile);
+    return NULL;
+  }
+  unlink (pgperrfile);
+
+  mutt_mktemp (pgptmpfile);
+  if((pgptmp = safe_fopen (pgptmpfile, "w")) == NULL)
+  {
+    mutt_perror (pgptmpfile);
+    fclose(pgperr);
+    return NULL;
+  }
+
+  /* Position the stream at the beginning of the body, and send the data to
+   * the temporary file.
+   */
+
+  fseek (s->fpin, a->offset, 0);
+  mutt_copy_bytes (s->fpin, pgptmp, a->length);
+  fclose (pgptmp);
+
+  if ((thepid = pgp_invoke_decrypt (&pgpin, &pgpout, NULL, -1, -1,
+                                   fileno (pgperr), pgptmpfile)) == -1)
+  {
+    fclose (pgperr);
+    unlink (pgptmpfile);
+    if (s->flags & M_DISPLAY)
+      state_attach_puts (_("[-- Error: could not create a PGP subprocess! --]\n\n"), s);
+    return (NULL);
+  }
+
+  /* send the PGP passphrase to the subprocess.  Never do this if the
+     agent is active, because this might lead to a passphrase send as
+     the message. */
+  if (!pgp_use_gpg_agent())
+    fputs (PgpPass, pgpin);
+  fputc ('\n', pgpin);
+  fclose(pgpin);
+  
+  /* Read the output from PGP, and make sure to change CRLF to LF, otherwise
+   * read_mime_header has a hard time parsing the message.
+   */
+  while (fgets (buf, sizeof (buf) - 1, pgpout) != NULL)
+  {
+    len = mutt_strlen (buf);
+    if (len > 1 && buf[len - 2] == '\r')
+      strcpy (buf + len - 2, "\n");    /* __STRCPY_CHECKED__ */
+    fputs (buf, fpout);
+  }
+
+  fclose (pgpout);
+  mutt_wait_filter (thepid);
+  mutt_unlink(pgptmpfile);
+  
+  if (s->flags & M_DISPLAY)
+  {
+    fflush (pgperr);
+    rewind (pgperr);
+    if (pgp_copy_checksig (pgperr, s->fpout) == 0 && p)
+      p->goodsig = 1;
+    state_attach_puts (_("[-- End of PGP output --]\n\n"), s);
+  }
+  fclose (pgperr);
+
+  fflush (fpout);
+  rewind (fpout);
+  if ((tattach = mutt_read_mime_header (fpout, 0)) != NULL)
+  {
+    /*
+     * Need to set the length of this body part.
+     */
+    fstat (fileno (fpout), &info);
+    tattach->length = info.st_size - tattach->offset;
+
+    /* See if we need to recurse on this MIME part.  */
+
+    mutt_parse_part (fpout, tattach);
+  }
+
+  return (tattach);
+}
+
+int pgp_decrypt_mime (FILE *fpin, FILE **fpout, BODY *b, BODY **cur)
+{
+  char tempfile[_POSIX_PATH_MAX];
+  STATE s;
+  BODY *p = b;
+  
+  if(!mutt_is_multipart_encrypted(b))
+    return -1;
+
+  if(!b->parts || !b->parts->next)
+    return -1;
+  
+  b = b->parts->next;
+  
+  memset (&s, 0, sizeof (s));
+  s.fpin = fpin;
+  mutt_mktemp (tempfile);
+  if ((*fpout = safe_fopen (tempfile, "w+")) == NULL)
+  {
+    mutt_perror (tempfile);
+    return (-1);
+  }
+  unlink (tempfile);
+
+  *cur = pgp_decrypt_part (b, &s, *fpout, p);
+
+  rewind (*fpout);
+  return (0);
+}
+
+void pgp_encrypted_handler (BODY *a, STATE *s)
+{
+  char tempfile[_POSIX_PATH_MAX];
+  FILE *fpout, *fpin;
+  BODY *tattach;
+  BODY *p = a;
+  
+  a = a->parts;
+  if (!a || a->type != TYPEAPPLICATION || !a->subtype || 
+      ascii_strcasecmp ("pgp-encrypted", a->subtype) != 0 ||
+      !a->next || a->next->type != TYPEAPPLICATION || !a->next->subtype ||
+      ascii_strcasecmp ("octet-stream", a->next->subtype) != 0)
+  {
+    if (s->flags & M_DISPLAY)
+      state_attach_puts (_("[-- Error: malformed PGP/MIME message! --]\n\n"), s);
+    return;
+  }
+
+  /*
+   * Move forward to the application/pgp-encrypted body.
+   */
+  a = a->next;
+
+  mutt_mktemp (tempfile);
+  if ((fpout = safe_fopen (tempfile, "w+")) == NULL)
+  {
+    if (s->flags & M_DISPLAY)
+      state_attach_puts (_("[-- Error: could not create temporary file! --]\n"), s);
+    return;
+  }
+
+  if (s->flags & M_DISPLAY) crypt_current_time (s, "PGP");
+
+  if ((tattach = pgp_decrypt_part (a, s, fpout, p)) != NULL)
+  {
+    if (s->flags & M_DISPLAY)
+      state_attach_puts (_("[-- The following data is PGP/MIME encrypted --]\n\n"), s);
+
+    fpin = s->fpin;
+    s->fpin = fpout;
+    mutt_body_handler (tattach, s);
+    s->fpin = fpin;
+
+    /* 
+     * if a multipart/signed is the _only_ sub-part of a
+     * multipart/encrypted, cache signature verification
+     * status.
+     *
+     */
+    
+    if (mutt_is_multipart_signed (tattach) && !tattach->next)
+      p->goodsig |= tattach->goodsig;
+    
+    if (s->flags & M_DISPLAY)
+    {
+      state_puts ("\n", s);
+      state_attach_puts (_("[-- End of PGP/MIME encrypted data --]\n"), s);
+    }
+
+    mutt_free_body (&tattach);
+  }
+
+  fclose (fpout);
+  mutt_unlink(tempfile);
+}
+
+/* ----------------------------------------------------------------------------
+ * Routines for sending PGP/MIME messages.
+ */
+
+
+BODY *pgp_sign_message (BODY *a)
+{
+  BODY *t;
+  char buffer[LONG_STRING];
+  char sigfile[_POSIX_PATH_MAX], signedfile[_POSIX_PATH_MAX];
+  FILE *pgpin, *pgpout, *pgperr, *fp, *sfp;
+  int err = 0;
+  int empty = 1;
+  pid_t thepid;
+  
+  convert_to_7bit (a); /* Signed data _must_ be in 7-bit format. */
+
+  mutt_mktemp (sigfile);
+  if ((fp = safe_fopen (sigfile, "w")) == NULL)
+  {
+    return (NULL);
+  }
+
+  mutt_mktemp (signedfile);
+  if ((sfp = safe_fopen(signedfile, "w")) == NULL)
+  {
+    mutt_perror(signedfile);
+    fclose(fp);
+    unlink(sigfile);
+    return NULL;
+  }
+  
+  mutt_write_mime_header (a, sfp);
+  fputc ('\n', sfp);
+  mutt_write_mime_body (a, sfp);
+  fclose(sfp);
+  
+  if ((thepid = pgp_invoke_sign (&pgpin, &pgpout, &pgperr,
+                                -1, -1, -1, signedfile)) == -1)
+  {
+    mutt_perror _("Can't open PGP subprocess!");
+    fclose(fp);
+    unlink(sigfile);
+    unlink(signedfile);
+    return NULL;
+  }
+  
+  if (!pgp_use_gpg_agent())
+     fputs(PgpPass, pgpin);
+  fputc('\n', pgpin);
+  fclose(pgpin);
+  
+  /*
+   * Read back the PGP signature.  Also, change MESSAGE=>SIGNATURE as
+   * recommended for future releases of PGP.
+   */
+  while (fgets (buffer, sizeof (buffer) - 1, pgpout) != NULL)
+  {
+    if (mutt_strcmp ("-----BEGIN PGP MESSAGE-----\n", buffer) == 0)
+      fputs ("-----BEGIN PGP SIGNATURE-----\n", fp);
+    else if (mutt_strcmp("-----END PGP MESSAGE-----\n", buffer) == 0)
+      fputs ("-----END PGP SIGNATURE-----\n", fp);
+    else
+      fputs (buffer, fp);
+    empty = 0; /* got some output, so we're ok */
+  }
+
+  /* check for errors from PGP */
+  err = 0;
+  while (fgets (buffer, sizeof (buffer) - 1, pgperr) != NULL)
+  {
+    err = 1;
+    fputs (buffer, stdout);
+  }
+
+  if(mutt_wait_filter (thepid) && option(OPTPGPCHECKEXIT))
+    empty=1;
+
+  fclose (pgperr);
+  fclose (pgpout);
+  unlink (signedfile);
+  
+  if (fclose (fp) != 0)
+  {
+    mutt_perror ("fclose");
+    unlink (sigfile);
+    return (NULL);
+  }
+
+  if (err)
+  {
+    pgp_void_passphrase();
+    mutt_any_key_to_continue (NULL);
+  }
+
+  if (empty)
+  {
+    unlink (sigfile);
+    return (NULL); /* fatal error while signing */
+  }
+
+  t = mutt_new_body ();
+  t->type = TYPEMULTIPART;
+  t->subtype = safe_strdup ("signed");
+  t->encoding = ENC7BIT;
+  t->use_disp = 0;
+  t->disposition = DISPINLINE;
+
+  mutt_generate_boundary (&t->parameter);
+  mutt_set_parameter ("protocol", "application/pgp-signature", &t->parameter);
+  mutt_set_parameter ("micalg", pgp_micalg (sigfile), &t->parameter);
+
+  t->parts = a;
+  a = t;
+
+  t->parts->next = mutt_new_body ();
+  t = t->parts->next;
+  t->type = TYPEAPPLICATION;
+  t->subtype = safe_strdup ("pgp-signature");
+  t->filename = safe_strdup (sigfile);
+  t->use_disp = 0;
+  t->disposition = DISPINLINE;
+  t->encoding = ENC7BIT;
+  t->unlink = 1; /* ok to remove this file after sending. */
+
+  return (a);
+}
+
+static short is_numerical_keyid (const char *s)
+{
+  /* or should we require the "0x"? */
+  if (strncmp (s, "0x", 2) == 0)
+    s += 2;
+  if (strlen (s) % 8)
+    return 0;
+  while (*s)
+    if (strchr ("0123456789ABCDEFabcdef", *s++) == NULL)
+      return 0;
+  
+  return 1;
+}
+
+/* This routine attempts to find the keyids of the recipients of a message.
+ * It returns NULL if any of the keys can not be found.
+ */
+char *pgp_findKeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
+{
+  char *keyID, *keylist = NULL, *t;
+  size_t keylist_size = 0;
+  size_t keylist_used = 0;
+  ADDRESS *tmp = NULL, *addr = NULL;
+  ADDRESS **last = &tmp;
+  ADDRESS *p, *q;
+  int i;
+  pgp_key_t k_info = NULL, key = NULL;
+
+  const char *fqdn = mutt_fqdn (1);
+  
+  for (i = 0; i < 3; i++) 
+  {
+    switch (i)
+    {
+      case 0: p = to; break;
+      case 1: p = cc; break;
+      case 2: p = bcc; break;
+      default: abort ();
+    }
+    
+    *last = rfc822_cpy_adr (p);
+    while (*last)
+      last = &((*last)->next);
+  }
+
+  if (fqdn)
+    rfc822_qualify (tmp, fqdn);
+
+  tmp = mutt_remove_duplicates (tmp);
+  
+  for (p = tmp; p ; p = p->next)
+  {
+    char buf[LONG_STRING];
+
+    q = p;
+    k_info = NULL;
+
+    if ((keyID = mutt_crypt_hook (p)) != NULL)
+    {
+      int r;
+      snprintf (buf, sizeof (buf), _("Use keyID = \"%s\" for %s?"), keyID, p->mailbox);
+      if ((r = mutt_yesorno (buf, M_YES)) == M_YES)
+      {
+       if (is_numerical_keyid (keyID))
+       {
+         if (strncmp (keyID, "0x", 2) == 0)
+           keyID += 2;
+         goto bypass_selection;                /* you don't see this. */
+       }
+       
+       /* check for e-mail address */
+       if ((t = strchr (keyID, '@')) && 
+           (addr = rfc822_parse_adrlist (NULL, keyID)))
+       {
+         if (fqdn) rfc822_qualify (addr, fqdn);
+         q = addr;
+       }
+       else
+         k_info = pgp_getkeybystr (keyID, KEYFLAG_CANENCRYPT, PGP_PUBRING);
+      }
+      else if (r == -1)
+      {
+       FREE (&keylist);
+       rfc822_free_address (&tmp);
+       rfc822_free_address (&addr);
+       return NULL;
+      }
+    }
+
+    if (k_info == NULL)
+      pgp_invoke_getkeys (q);
+
+    if (k_info == NULL && (k_info = pgp_getkeybyaddr (q, KEYFLAG_CANENCRYPT, PGP_PUBRING)) == NULL)
+    {
+      snprintf (buf, sizeof (buf), _("Enter keyID for %s: "), q->mailbox);
+
+      if ((key = pgp_ask_for_key (buf, q->mailbox,
+                                 KEYFLAG_CANENCRYPT, PGP_PUBRING)) == NULL)
+      {
+       FREE (&keylist);
+       rfc822_free_address (&tmp);
+       rfc822_free_address (&addr);
+       return NULL;
+      }
+    }
+    else
+      key = k_info;
+
+    keyID = pgp_keyid (key);
+    
+  bypass_selection:
+    keylist_size += mutt_strlen (keyID) + 4;
+    safe_realloc (&keylist, keylist_size);
+    sprintf (keylist + keylist_used, "%s0x%s", keylist_used ? " " : "",        /* __SPRINTF_CHECKED__ */
+            keyID);
+    keylist_used = mutt_strlen (keylist);
+
+    pgp_free_key (&key);
+    rfc822_free_address (&addr);
+
+  }
+  rfc822_free_address (&tmp);
+  return (keylist);
+}
+
+/* Warning: "a" is no longer freed in this routine, you need
+ * to free it later.  This is necessary for $fcc_attach. */
+
+BODY *pgp_encrypt_message (BODY *a, char *keylist, int sign)
+{
+  char buf[LONG_STRING];
+  char tempfile[_POSIX_PATH_MAX], pgperrfile[_POSIX_PATH_MAX];
+  char pgpinfile[_POSIX_PATH_MAX];
+  FILE *pgpin, *pgperr, *fpout, *fptmp;
+  BODY *t;
+  int err = 0;
+  int empty = 0;
+  pid_t thepid;
+  
+  mutt_mktemp (tempfile);
+  if ((fpout = safe_fopen (tempfile, "w+")) == NULL)
+  {
+    mutt_perror (tempfile);
+    return (NULL);
+  }
+
+  mutt_mktemp (pgperrfile);
+  if ((pgperr = safe_fopen (pgperrfile, "w+")) == NULL)
+  {
+    mutt_perror (pgperrfile);
+    unlink(tempfile);
+    fclose(fpout);
+    return NULL;
+  }
+  unlink (pgperrfile);
+
+  mutt_mktemp(pgpinfile);
+  if((fptmp = safe_fopen(pgpinfile, "w")) == NULL)
+  {
+    mutt_perror(pgpinfile);
+    unlink(tempfile);
+    fclose(fpout);
+    fclose(pgperr);
+    return NULL;
+  }
+  
+  if (sign)
+    convert_to_7bit (a);
+  
+  mutt_write_mime_header (a, fptmp);
+  fputc ('\n', fptmp);
+  mutt_write_mime_body (a, fptmp);
+  fclose(fptmp);
+  
+  if ((thepid = pgp_invoke_encrypt (&pgpin, NULL, NULL, -1, 
+                                   fileno (fpout), fileno (pgperr),
+                                   pgpinfile, keylist, sign)) == -1)
+  {
+    fclose (pgperr);
+    unlink(pgpinfile);
+    return (NULL);
+  }
+
+  if (sign)
+  {
+    if (!pgp_use_gpg_agent())
+       fputs (PgpPass, pgpin);
+    fputc ('\n', pgpin);
+  }
+  fclose(pgpin);
+  
+  if(mutt_wait_filter (thepid) && option(OPTPGPCHECKEXIT))
+    empty=1;
+
+  unlink(pgpinfile);
+  
+  fflush (fpout);
+  rewind (fpout);
+  if(!empty)
+    empty = (fgetc (fpout) == EOF);
+  fclose (fpout);
+
+  fflush (pgperr);
+  rewind (pgperr);
+  while (fgets (buf, sizeof (buf) - 1, pgperr) != NULL)
+  {
+    err = 1;
+    fputs (buf, stdout);
+  }
+  fclose (pgperr);
+
+  /* pause if there is any error output from PGP */
+  if (err)
+    mutt_any_key_to_continue (NULL);
+
+  if (empty)
+  {
+    /* fatal error while trying to encrypt message */
+    unlink (tempfile);
+    return (NULL);
+  }
+
+  t = mutt_new_body ();
+  t->type = TYPEMULTIPART;
+  t->subtype = safe_strdup ("encrypted");
+  t->encoding = ENC7BIT;
+  t->use_disp = 0;
+  t->disposition = DISPINLINE;
+
+  mutt_generate_boundary(&t->parameter);
+  mutt_set_parameter("protocol", "application/pgp-encrypted", &t->parameter);
+  
+  t->parts = mutt_new_body ();
+  t->parts->type = TYPEAPPLICATION;
+  t->parts->subtype = safe_strdup ("pgp-encrypted");
+  t->parts->encoding = ENC7BIT;
+
+  t->parts->next = mutt_new_body ();
+  t->parts->next->type = TYPEAPPLICATION;
+  t->parts->next->subtype = safe_strdup ("octet-stream");
+  t->parts->next->encoding = ENC7BIT;
+  t->parts->next->filename = safe_strdup (tempfile);
+  t->parts->next->use_disp = 1;
+  t->parts->next->disposition = DISPINLINE;
+  t->parts->next->unlink = 1; /* delete after sending the message */
+  t->parts->next->d_filename = safe_strdup ("msg.asc"); /* non pgp/mime can save */
+
+  return (t);
+}
+
+BODY *pgp_traditional_encryptsign (BODY *a, int flags, char *keylist)
+{
+  BODY *b;
+
+  char pgpoutfile[_POSIX_PATH_MAX];
+  char pgperrfile[_POSIX_PATH_MAX];
+  char pgpinfile[_POSIX_PATH_MAX];
+  
+  char body_charset[STRING];
+  char *from_charset;
+  const char *send_charset;
+  
+  FILE *pgpout = NULL, *pgperr = NULL, *pgpin = NULL;
+  FILE *fp;
+
+  int empty = 0;
+  int err;
+
+  char buff[STRING];
+
+  pid_t thepid;
+
+  if (a->type != TYPETEXT)
+    return NULL;
+  if (ascii_strcasecmp (a->subtype, "plain"))
+    return NULL;
+  
+  if ((fp = fopen (a->filename, "r")) == NULL)
+  {
+    mutt_perror (a->filename);
+    return NULL;
+  }
+  
+  mutt_mktemp (pgpinfile);
+  if ((pgpin = safe_fopen (pgpinfile, "w")) == NULL)
+  {
+    mutt_perror (pgpinfile);
+    fclose (fp);
+    return NULL;
+  }
+
+  /* The following code is really correct:  If noconv is set,
+   * a's charset parameter contains the on-disk character set, and
+   * we have to convert from that to utf-8.  If noconv is not set,
+   * we have to convert from $charset to utf-8.
+   */
+  
+  mutt_get_body_charset (body_charset, sizeof (body_charset), a);
+  if (a->noconv)
+    from_charset = body_charset;
+  else 
+    from_charset = Charset;
+    
+  if (!mutt_is_us_ascii (body_charset))
+  {
+    int c;
+    FGETCONV *fc;
+    
+    if (flags & ENCRYPT)
+      send_charset = "us-ascii";
+    else
+      send_charset = "utf-8";
+    
+    fc = fgetconv_open (fp, from_charset, "utf-8", M_ICONV_HOOK_FROM);
+    while ((c = fgetconv (fc)) != EOF)
+      fputc (c, pgpin);
+    
+    fgetconv_close (&fc);
+  }
+  else
+  {
+    send_charset = "us-ascii";
+    mutt_copy_stream (fp, pgpin);
+  }
+  safe_fclose (&fp);
+  fclose (pgpin);
+
+  mutt_mktemp (pgpoutfile);
+  mutt_mktemp (pgperrfile);
+  if ((pgpout = safe_fopen (pgpoutfile, "w+")) == NULL ||
+      (pgperr = safe_fopen (pgperrfile, "w+")) == NULL)
+  {
+    mutt_perror (pgpout ? pgperrfile : pgpoutfile);
+    unlink (pgpinfile);
+    if (pgpout) 
+    {
+      fclose (pgpout);
+      unlink (pgpoutfile);
+    }
+    return NULL;
+  }
+  
+  unlink (pgperrfile);
+
+  if ((thepid = pgp_invoke_traditional (&pgpin, NULL, NULL, 
+                                       -1, fileno (pgpout), fileno (pgperr),
+                                       pgpinfile, keylist, flags)) == -1)
+  {
+    mutt_perror _("Can't invoke PGP");
+    fclose (pgpout);
+    fclose (pgperr);
+    mutt_unlink (pgpinfile);
+    unlink (pgpoutfile);
+    return NULL;
+  }
+
+  if (pgp_use_gpg_agent())
+    *PgpPass = 0;
+  if (flags & SIGN)
+    fprintf (pgpin, "%s\n", PgpPass);
+  fclose (pgpin);
+
+  if(mutt_wait_filter (thepid) && option(OPTPGPCHECKEXIT))
+    empty=1;
+
+  mutt_unlink (pgpinfile);
+
+  fflush (pgpout);
+  fflush (pgperr);
+
+  rewind (pgpout);
+  rewind (pgperr);
+  
+  if(!empty)
+    empty = (fgetc (pgpout) == EOF);
+  fclose (pgpout);
+  
+  err = 0;
+  
+  while (fgets (buff, sizeof (buff), pgperr))
+  {
+    err = 1;
+    fputs (buff, stdout);
+  }
+  
+  fclose (pgperr);
+  
+  if (err)
+    mutt_any_key_to_continue (NULL);
+  
+  if (empty)
+  {
+    unlink (pgpoutfile);
+    return NULL;
+  }
+    
+  b = mutt_new_body ();
+  
+  b->encoding = ENC7BIT;
+
+  b->type = TYPETEXT;
+  b->subtype = safe_strdup ("plain");
+  
+  mutt_set_parameter ("x-action", flags & ENCRYPT ? "pgp-encrypted" : "pgp-signed",
+                     &b->parameter);
+  mutt_set_parameter ("charset", send_charset, &b->parameter);
+  
+  b->filename = safe_strdup (pgpoutfile);
+  
+#if 0
+  /* The following is intended to give a clue to some completely brain-dead 
+   * "mail environments" which are typically used by large corporations.
+   */
+
+  b->d_filename = safe_strdup ("msg.pgp");
+  b->use_disp = 1;
+
+#endif
+
+  b->disposition = DISPINLINE;
+  b->unlink   = 1;
+
+  b->noconv = 1;
+  b->use_disp = 0;
+  
+  if (!(flags & ENCRYPT))
+    b->encoding = a->encoding;
+  
+  return b;
+}
+
+#endif /* CRYPT_BACKEND_CLASSIC_PGP */
diff --git a/pgp.h b/pgp.h
new file mode 100644 (file)
index 0000000..5c69665
--- /dev/null
+++ b/pgp.h
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 1996,1997 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ *
+ *     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.
+ */
+
+#ifdef CRYPT_BACKEND_CLASSIC_PGP
+
+#include "mutt_crypt.h"
+#include "pgplib.h"
+
+
+/* prototypes */
+
+int pgp_use_gpg_agent(void);
+
+int pgp_check_traditional (FILE *, BODY *, int);
+BODY *pgp_decrypt_part (BODY *, STATE *, FILE *, BODY *);
+BODY *pgp_make_key_attachment (char *);
+const char *pgp_micalg (const char *fname);
+
+char *_pgp_keyid (pgp_key_t);
+char *pgp_keyid (pgp_key_t);
+
+
+int mutt_check_pgp (HEADER * h);
+
+int pgp_decrypt_mime (FILE *, FILE **, BODY *, BODY **);
+
+/* int pgp_string_matches_hint (const char *s, LIST * hints); */
+
+#define pgp_valid_passphrase() crypt_valid_passphrase(APPLICATION_PGP)
+
+/* pgp_key_t gpg_get_candidates (struct pgp_vinfo *, pgp_ring_t, LIST *); */
+pgp_key_t pgp_ask_for_key (char *, char *, short, pgp_ring_t);
+pgp_key_t pgp_get_candidates (pgp_ring_t, LIST *);
+pgp_key_t pgp_getkeybyaddr (ADDRESS *, short, pgp_ring_t);
+pgp_key_t pgp_getkeybystr (char *, short, pgp_ring_t);
+
+char *pgp_findKeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc);
+
+void pgp_forget_passphrase (void);
+void pgp_application_pgp_handler (BODY *, STATE *);
+void pgp_encrypted_handler (BODY *, STATE *);
+void pgp_extract_keys_from_attachment_list (FILE * fp, int tag, BODY * top);
+void pgp_void_passphrase (void);
+
+
+
+
+/* The PGP invocation interface - not really beautiful. */
+
+pid_t pgp_invoke_decode (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                        int pgpinfd, int pgpoutfd, int pgperrfd, 
+                        const char *fname, short need_passphrase);
+pid_t pgp_invoke_verify (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                        int pgpinfd, int pgpoutfd, int pgperrfd, 
+                        const char *fname, const char *sig_fname);
+pid_t pgp_invoke_decrypt (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                         int pgpinfd, int pgpoutfd, int pgperrfd, 
+                         const char *fname);
+pid_t pgp_invoke_sign (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                      int pgpinfd, int pgpoutfd, int pgperrfd, 
+                      const char *fname);
+pid_t pgp_invoke_encrypt (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                         int pgpinfd, int pgpoutfd, int pgperrfd,
+                         const char *fname, const char *uids, int sign);
+pid_t pgp_invoke_export (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                        int pgpinfd, int pgpoutfd, int pgperrfd, 
+                        const char *uids);
+pid_t pgp_invoke_verify_key (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                            int pgpinfd, int pgpoutfd, int pgperrfd, 
+                            const char *uids);
+pid_t pgp_invoke_list_keys (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                           int pgpinfd, int pgpoutfd, int pgperrfd, 
+                           pgp_ring_t keyring, LIST *hints);
+pid_t pgp_invoke_traditional (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                         int pgpinfd, int pgpoutfd, int pgperrfd,
+                         const char *fname, const char *uids, int flags);
+
+
+void pgp_invoke_import (const char *fname);
+void pgp_invoke_getkeys (ADDRESS *);
+
+
+/* private ? */
+int pgp_verify_one (BODY *, STATE *, const char *);
+BODY *pgp_traditional_encryptsign (BODY *, int, char *);
+BODY *pgp_encrypt_message (BODY *, char *, int);
+BODY *pgp_sign_message (BODY *);
+
+
+#endif /* CRYPT_BACKEND_CLASSIC_PGP */
diff --git a/pgpewrap.c b/pgpewrap.c
new file mode 100644 (file)
index 0000000..d889483
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * C version by Wessel Dankers <wsl@fruit.eu.org>
+ *
+ * This code is in the public domain.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+int main(int argc, char **argv) {
+       char **opts, **opt, *pfx;
+       int i;
+
+       opts = malloc((2 * argc + 1) * sizeof (* opts));        /* __MEM_CHECKED__ */
+       if(!opts) {
+               perror(argv[0]);
+               exit(2);
+       }
+
+       if (argc < 2)
+       {
+         fprintf (stderr,
+                  "Command line usage: %s [flags] -- prefix [recipients]\n",
+                  argv[0]);
+         return 1;
+       }
+
+       opt = opts;
+       *opt++ = argv[1];
+       pfx = NULL;
+
+       for(i = 2; i < argc; ) {
+               if(!strcmp(argv[i], "--")) {
+                       i += 2;
+                       if(i > argc) {
+                               fprintf(stderr, "Command line usage: %s [flags] -- prefix [recipients]\n", argv[0]);
+                               return 1;
+                       }
+                       pfx = argv[i-1];
+               }
+               if(pfx)
+                       *opt++ = pfx;
+               *opt++ = argv[i++];
+       }
+       *opt = NULL;
+
+       execvp(opts[0], opts);
+       perror(argv[0]);
+       return 2;
+}
diff --git a/pgpinvoke.c b/pgpinvoke.c
new file mode 100644 (file)
index 0000000..8bbc4f7
--- /dev/null
@@ -0,0 +1,351 @@
+/*
+ * Copyright (C) 1997-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+/* This file contains the new pgp invocation code.  Note that this
+ * is almost entirely format based.
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <time.h>
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "mutt_idna.h"
+#include "pgp.h"
+#include "rfc822.h"
+
+/*
+ * The actual command line formatter.
+ */
+
+struct pgp_command_context {
+  short need_passphrase;       /* %p */
+  const char *fname;           /* %f */
+  const char *sig_fname;       /* %s */
+  const char *signas;          /* %a */
+  const char *ids;             /* %r */
+};
+
+
+const char *_mutt_fmt_pgp_command (char *dest,
+                                  size_t destlen,
+                                  char op,
+                                  const char *src,
+                                  const char *prefix,
+                                  const char *ifstring,
+                                  const char *elsestring,
+                                  unsigned long data,
+                                  format_flag flags)
+{
+  char fmt[16];
+  struct pgp_command_context *cctx = (struct pgp_command_context *) data;
+  int optional = (flags & M_FORMAT_OPTIONAL);
+  
+  switch (op)
+  {
+    case 'r':
+    {
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, NONULL (cctx->ids));
+      }
+      else if (!cctx->ids)
+       optional = 0;
+      break;
+    }
+    
+    case 'a':
+    {
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, NONULL (cctx->signas));
+      }
+      else if (!cctx->signas)
+       optional = 0;
+      break;
+    }
+    
+    case 's':
+    {
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, NONULL (cctx->sig_fname));
+      }
+      else if (!cctx->sig_fname)
+       optional = 0;
+      break;
+    }
+    
+    case 'f':
+    {
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, NONULL (cctx->fname));
+      }
+      else if (!cctx->fname)
+       optional = 0;
+      break;
+    }
+    
+    case 'p':
+    {
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, cctx->need_passphrase ? "PGPPASSFD=0" : "");
+      }
+      else if (!cctx->need_passphrase)
+       optional = 0;
+      break;
+    }
+    default:
+    {
+      *dest = '\0';
+      break;
+    }
+  }
+
+  if (optional)
+    mutt_FormatString (dest, destlen, ifstring, _mutt_fmt_pgp_command, data, 0);
+  else if (flags & M_FORMAT_OPTIONAL)
+    mutt_FormatString (dest, destlen, elsestring, _mutt_fmt_pgp_command, data, 0);
+
+  return (src);
+}
+
+void mutt_pgp_command (char *d, size_t dlen, struct pgp_command_context *cctx, const char *fmt)
+{
+  mutt_FormatString (d, dlen, NONULL (fmt), _mutt_fmt_pgp_command, (unsigned long) cctx, 0);
+  dprint (2, (debugfile, "mutt_pgp_command: %s\n", d));
+}
+
+/*
+ * Glue.
+ */
+
+
+static pid_t pgp_invoke (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                        int pgpinfd, int pgpoutfd, int pgperrfd,
+                        short need_passphrase,
+                        const char *fname,
+                        const char *sig_fname,
+                        const char *signas,
+                        const char *ids,
+                        const char *format)
+{
+  struct pgp_command_context cctx;
+  char cmd[HUGE_STRING];
+  
+  memset (&cctx, 0, sizeof (cctx));
+
+  if (!format || !*format)
+    return (pid_t) -1;
+  
+  cctx.need_passphrase = need_passphrase;
+  cctx.fname          = fname;
+  cctx.sig_fname       = sig_fname;
+  cctx.signas         = signas;
+  cctx.ids            = ids;
+  
+  mutt_pgp_command (cmd, sizeof (cmd), &cctx, format);
+  
+  return mutt_create_filter_fd (cmd, pgpin, pgpout, pgperr,
+                              pgpinfd, pgpoutfd, pgperrfd);
+}
+
+
+/*
+ * The exported interface.
+ * 
+ * This is historic and may be removed at some point.
+ *
+ */
+
+
+pid_t pgp_invoke_decode (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                        int pgpinfd, int pgpoutfd, int pgperrfd, 
+                        const char *fname, short need_passphrase)
+{
+  return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd,
+                    need_passphrase, fname, NULL, NULL, NULL, 
+                    PgpDecodeCommand);
+}
+
+pid_t pgp_invoke_verify (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                        int pgpinfd, int pgpoutfd, int pgperrfd, 
+                        const char *fname, const char *sig_fname)
+{
+  return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd,
+                    0, fname, sig_fname, NULL, NULL, PgpVerifyCommand);
+}
+
+pid_t pgp_invoke_decrypt (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                         int pgpinfd, int pgpoutfd, int pgperrfd, 
+                         const char *fname)
+{
+  return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd,
+                    1, fname, NULL, NULL, NULL, PgpDecryptCommand);
+}
+
+pid_t pgp_invoke_sign (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                      int pgpinfd, int pgpoutfd, int pgperrfd, 
+                      const char *fname)
+{
+  return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd,
+                    1, fname, NULL, PgpSignAs, NULL, PgpSignCommand);
+}
+
+
+pid_t pgp_invoke_encrypt (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                         int pgpinfd, int pgpoutfd, int pgperrfd,
+                         const char *fname, const char *uids, int sign)
+{
+  if (sign)
+    return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd,
+                      1, fname, NULL, PgpSignAs, uids, 
+                      PgpEncryptSignCommand);
+  else
+    return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd,
+                      0, fname, NULL, NULL, uids, 
+                      PgpEncryptOnlyCommand);
+}
+
+pid_t pgp_invoke_traditional (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                             int pgpinfd, int pgpoutfd, int pgperrfd,
+                             const char *fname, const char *uids, int flags)
+{
+  if (flags & ENCRYPT)
+    return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd,
+                      flags & SIGN ? 1 : 0, fname, NULL, PgpSignAs, uids, 
+                      flags & SIGN ? PgpEncryptSignCommand : PgpEncryptOnlyCommand);
+  else
+    return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd,
+                      1, fname, NULL, PgpSignAs, NULL,
+                      PgpClearSignCommand);
+}
+
+
+void pgp_invoke_import (const char *fname)
+{
+  char _fname[_POSIX_PATH_MAX + SHORT_STRING];
+  char cmd[HUGE_STRING];
+  struct pgp_command_context cctx;
+  
+  memset (&cctx, 0, sizeof (cctx));
+  
+  mutt_quote_filename (_fname, sizeof (_fname), fname);
+  cctx.fname = _fname;
+  
+  mutt_pgp_command (cmd, sizeof (cmd), &cctx, PgpImportCommand);
+  mutt_system (cmd);
+}
+
+void pgp_invoke_getkeys (ADDRESS *addr)
+{
+  char buff[LONG_STRING];
+  char tmp[LONG_STRING];
+  char cmd[HUGE_STRING];
+  int devnull;
+
+  char *personal;
+  
+  struct pgp_command_context cctx;
+
+  if (!PgpGetkeysCommand) return;
+  
+  memset (&cctx, 0, sizeof (cctx));
+
+  personal = addr->personal;
+  addr->personal = NULL;
+  
+  *tmp = '\0';
+  mutt_addrlist_to_local (addr);
+  rfc822_write_address_single (tmp, sizeof (tmp), addr, 0);
+  mutt_quote_filename (buff, sizeof (buff), tmp);
+
+  addr->personal = personal;
+  
+  cctx.ids = buff;
+  
+  mutt_pgp_command (cmd, sizeof (cmd), &cctx, PgpGetkeysCommand);
+
+  devnull = open ("/dev/null", O_RDWR);
+
+  if (!isendwin ()) mutt_message  _("Fetching PGP key...");
+
+  mutt_system (cmd);
+
+  if (!isendwin ()) mutt_clear_error ();
+
+  close (devnull);
+}
+
+pid_t pgp_invoke_export (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                        int pgpinfd, int pgpoutfd, int pgperrfd, 
+                        const char *uids)
+{
+  return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd,
+                    0, NULL, NULL, NULL, uids,
+                    PgpExportCommand);
+}
+
+pid_t pgp_invoke_verify_key (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                            int pgpinfd, int pgpoutfd, int pgperrfd, 
+                            const char *uids)
+{
+  return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd,
+                    0, NULL, NULL, NULL, uids,
+                    PgpVerifyKeyCommand);
+}
+
+pid_t pgp_invoke_list_keys (FILE **pgpin, FILE **pgpout, FILE **pgperr,
+                           int pgpinfd, int pgpoutfd, int pgperrfd, 
+                           pgp_ring_t keyring, LIST *hints)
+{
+  char uids[HUGE_STRING];
+  char tmpuids[HUGE_STRING];
+  char quoted[HUGE_STRING];
+  
+  *uids = '\0';
+  
+  for (; hints; hints = hints->next)
+  {
+    mutt_quote_filename (quoted, sizeof (quoted), (char *) hints->data);
+    snprintf (tmpuids, sizeof (tmpuids), "%s %s", uids, quoted);
+    strcpy (uids, tmpuids);    /* __STRCPY_CHECKED__ */
+  }
+
+  return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd,
+                    0, NULL, NULL, NULL, uids,
+                    keyring == PGP_SECRING ? PgpListSecringCommand :
+                    PgpListPubringCommand);
+}
diff --git a/pgpkey.c b/pgpkey.c
new file mode 100644 (file)
index 0000000..77ec11e
--- /dev/null
+++ b/pgpkey.c
@@ -0,0 +1,1009 @@
+/*
+ * Copyright (C) 1996,1997 Michael R. Elkins <me@mutt.org>
+ * Copyright (c) 1998,1999 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "mutt_menu.h"
+#include "mime.h"
+#include "pgp.h"
+#include "pager.h"
+#include "sort.h"
+
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+
+#include <locale.h>
+
+#ifdef CRYPT_BACKEND_CLASSIC_PGP
+
+struct pgp_cache
+{
+  char *what;
+  char *dflt;
+  struct pgp_cache *next;
+};
+
+static struct pgp_cache *id_defaults = NULL;
+
+static char trust_flags[] = "?- +";
+
+static char *pgp_key_abilities (int flags)
+{
+  static char buff[3];
+
+  if (!(flags & KEYFLAG_CANENCRYPT))
+    buff[0] = '-';
+  else if (flags & KEYFLAG_PREFER_SIGNING)
+    buff[0] = '.';
+  else
+    buff[0] = 'e';
+
+  if (!(flags & KEYFLAG_CANSIGN))
+    buff[1] = '-';
+  else if (flags & KEYFLAG_PREFER_ENCRYPTION)
+    buff[1] = '.';
+  else
+    buff[1] = 's';
+
+  buff[2] = '\0';
+
+  return buff;
+}
+
+static char pgp_flags (int flags)
+{
+  if (flags & KEYFLAG_REVOKED)
+    return 'R';
+  else if (flags & KEYFLAG_EXPIRED)
+    return 'X';
+  else if (flags & KEYFLAG_DISABLED)
+    return 'd';
+  else if (flags & KEYFLAG_CRITICAL)
+    return 'c';
+  else 
+    return ' ';
+}
+
+static pgp_key_t pgp_principal_key (pgp_key_t key)
+{
+  if (key->flags & KEYFLAG_SUBKEY && key->parent)
+    return key->parent;
+  else
+    return key;
+}
+
+/*
+ * Format an entry on the PGP key selection menu.
+ * 
+ * %n  number
+ * %k  key id          %K      key id of the principal key
+ * %u  user id
+ * %a  algorithm       %A      algorithm of the princ. key
+ * %l  length          %L      length of the princ. key
+ * %f  flags           %F      flags of the princ. key
+ * %c  capabilities    %C      capabilities of the princ. key
+ * %t  trust/validity of the key-uid association
+ * %[...] date of key using strftime(3)
+ */
+
+typedef struct pgp_entry
+{
+  size_t num;
+  pgp_uid_t *uid;
+} pgp_entry_t;
+
+static const char *pgp_entry_fmt (char *dest,
+                                 size_t destlen,
+                                 char op,
+                                 const char *src,
+                                 const char *prefix,
+                                 const char *ifstring,
+                                 const char *elsestring,
+                                 unsigned long data,
+                                 format_flag flags)
+{
+  char fmt[16];
+  pgp_entry_t *entry;
+  pgp_uid_t *uid;
+  pgp_key_t key, pkey;
+  int kflags = 0;
+  int optional = (flags & M_FORMAT_OPTIONAL);
+
+  entry = (pgp_entry_t *) data;
+  uid   = entry->uid;
+  key   = uid->parent;
+  pkey  = pgp_principal_key (key);
+
+  if (isupper ((unsigned char) op))
+    key = pkey;
+
+  kflags = key->flags | (pkey->flags & KEYFLAG_RESTRICTIONS)
+    | uid->flags;
+  
+  switch (ascii_tolower (op))
+  {
+    case '[':
+
+      {
+       const char *cp;
+       char buf2[SHORT_STRING], *p;
+       int do_locales;
+       struct tm *tm;
+       size_t len;
+
+       p = dest;
+
+       cp = src;
+       if (*cp == '!')
+       {
+         do_locales = 0;
+         cp++;
+       }
+       else
+         do_locales = 1;
+
+       len = destlen - 1;
+       while (len > 0 && *cp != ']')
+       {
+         if (*cp == '%')
+         {
+           cp++;
+           if (len >= 2)
+           {
+             *p++ = '%';
+             *p++ = *cp;
+             len -= 2;
+           }
+           else
+             break; /* not enough space */
+           cp++;
+         }
+         else
+         {
+           *p++ = *cp++;
+           len--;
+         }
+       }
+       *p = 0;
+
+       if (do_locales && Locale)
+         setlocale (LC_TIME, Locale);
+
+       tm = localtime (&key->gen_time);
+
+       strftime (buf2, sizeof (buf2), dest, tm);
+
+       if (do_locales)
+         setlocale (LC_TIME, "C");
+
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, buf2);
+       if (len > 0)
+         src = cp + 1;
+      }
+      break;
+    case 'n':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (dest, destlen, fmt, entry->num);
+      }
+      break;
+    case 'k':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, _pgp_keyid (key));
+      }
+      break;
+    case 'u':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, uid->addr);
+      }
+      break;
+    case 'a':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, key->algorithm);
+      }
+      break;
+    case 'l':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (dest, destlen, fmt, key->keylen);
+      }
+      break;
+    case 'f':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sc", prefix);
+       snprintf (dest, destlen, fmt, pgp_flags (kflags));
+      }
+      else if (!(kflags & (KEYFLAG_RESTRICTIONS)))
+        optional = 0;
+      break;
+    case 'c':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, pgp_key_abilities (kflags));
+      }
+      else if (!(kflags & (KEYFLAG_ABILITIES)))
+        optional = 0;
+      break;
+    case 't':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sc", prefix);
+       snprintf (dest, destlen, fmt, trust_flags[uid->trust & 0x03]);
+      }
+      else if (!(uid->trust & 0x03))
+        /* undefined trust */
+        optional = 0;
+      break;
+    default:
+      *dest = '\0';
+  }
+
+  if (optional)
+    mutt_FormatString (dest, destlen, ifstring, mutt_attach_fmt, data, 0);
+  else if (flags & M_FORMAT_OPTIONAL)
+    mutt_FormatString (dest, destlen, elsestring, mutt_attach_fmt, data, 0);
+  return (src);
+}
+      
+static void pgp_entry (char *s, size_t l, MUTTMENU * menu, int num)
+{
+  pgp_uid_t **KeyTable = (pgp_uid_t **) menu->data;
+  pgp_entry_t entry;
+  
+  entry.uid = KeyTable[num];
+  entry.num = num + 1;
+
+  mutt_FormatString (s, l, NONULL (PgpEntryFormat), pgp_entry_fmt, 
+                    (unsigned long) &entry, M_FORMAT_ARROWCURSOR);
+}
+
+static int _pgp_compare_address (const void *a, const void *b)
+{
+  int r;
+
+  pgp_uid_t **s = (pgp_uid_t **) a;
+  pgp_uid_t **t = (pgp_uid_t **) b;
+
+  if ((r = mutt_strcasecmp ((*s)->addr, (*t)->addr)))
+    return r > 0;
+  else
+    return (mutt_strcasecmp (_pgp_keyid ((*s)->parent),
+                            _pgp_keyid ((*t)->parent)) > 0);
+}
+
+static int pgp_compare_address (const void *a, const void *b)
+{
+  return ((PgpSortKeys & SORT_REVERSE) ? !_pgp_compare_address (a, b)
+                                      : _pgp_compare_address (a, b));
+}
+
+
+
+static int _pgp_compare_keyid (const void *a, const void *b)
+{
+  int r;
+
+  pgp_uid_t **s = (pgp_uid_t **) a;
+  pgp_uid_t **t = (pgp_uid_t **) b;
+
+  if ((r = mutt_strcasecmp (_pgp_keyid ((*s)->parent), 
+                           _pgp_keyid ((*t)->parent))))
+    return r > 0;
+  else
+    return (mutt_strcasecmp ((*s)->addr, (*t)->addr)) > 0;
+}
+
+static int pgp_compare_keyid (const void *a, const void *b)
+{
+  return ((PgpSortKeys & SORT_REVERSE) ? !_pgp_compare_keyid (a, b)
+                                      : _pgp_compare_keyid (a, b));
+}
+
+static int _pgp_compare_date (const void *a, const void *b)
+{
+  int r;
+  pgp_uid_t **s = (pgp_uid_t **) a;
+  pgp_uid_t **t = (pgp_uid_t **) b;
+
+  if ((r = ((*s)->parent->gen_time - (*t)->parent->gen_time)))
+    return r > 0;
+  return (mutt_strcasecmp ((*s)->addr, (*t)->addr)) > 0;
+}
+
+static int pgp_compare_date (const void *a, const void *b)
+{
+  return ((PgpSortKeys & SORT_REVERSE) ? !_pgp_compare_date (a, b)
+                                      : _pgp_compare_date (a, b));
+}
+
+static int _pgp_compare_trust (const void *a, const void *b)
+{
+  int r;
+
+  pgp_uid_t **s = (pgp_uid_t **) a;
+  pgp_uid_t **t = (pgp_uid_t **) b;
+
+  if ((r = (((*s)->parent->flags & (KEYFLAG_RESTRICTIONS))
+           - ((*t)->parent->flags & (KEYFLAG_RESTRICTIONS)))))
+    return r > 0;
+  if ((r = ((*s)->trust - (*t)->trust)))
+    return r < 0;
+  if ((r = ((*s)->parent->keylen - (*t)->parent->keylen)))
+    return r < 0;
+  if ((r = ((*s)->parent->gen_time - (*t)->parent->gen_time)))
+    return r < 0;
+  if ((r = mutt_strcasecmp ((*s)->addr, (*t)->addr)))
+    return r > 0;
+  return (mutt_strcasecmp (_pgp_keyid ((*s)->parent), 
+                          _pgp_keyid ((*t)->parent))) > 0;
+}
+
+static int pgp_compare_trust (const void *a, const void *b)
+{
+  return ((PgpSortKeys & SORT_REVERSE) ? !_pgp_compare_trust (a, b)
+                                      : _pgp_compare_trust (a, b));
+}
+
+static int pgp_key_is_valid (pgp_key_t k)
+{
+  pgp_key_t pk = pgp_principal_key (k);
+  if (k->flags & KEYFLAG_CANTUSE)
+    return 0;
+  if (pk->flags & KEYFLAG_CANTUSE)
+    return 0;
+  
+  return 1;
+}
+
+static int pgp_id_is_strong (pgp_uid_t *uid)
+{
+  if ((uid->trust & 3) < 3)
+    return 0;
+  /* else */
+  return 1;
+}
+
+static int pgp_id_is_valid (pgp_uid_t *uid)
+{
+  if (!pgp_key_is_valid (uid->parent))
+    return 0;
+  if (uid->flags & KEYFLAG_CANTUSE)
+    return 0;
+  /* else */
+  return 1;
+}
+
+#define PGP_KV_VALID   1
+#define PGP_KV_ADDR    2
+#define PGP_KV_STRING  4
+#define PGP_KV_STRONGID 8
+
+#define PGP_KV_MATCH (PGP_KV_ADDR|PGP_KV_STRING)
+
+static int pgp_id_matches_addr (ADDRESS *addr, ADDRESS *u_addr, pgp_uid_t *uid)
+{
+  int rv = 0;
+  
+  if (pgp_id_is_valid (uid))
+    rv |= PGP_KV_VALID;
+
+  if (pgp_id_is_strong (uid))
+    rv |= PGP_KV_STRONGID;
+  
+  if (addr->mailbox && u_addr->mailbox
+      && mutt_strcasecmp (addr->mailbox, u_addr->mailbox) == 0)
+    rv |= PGP_KV_ADDR;
+    
+  if (addr->personal && u_addr->personal
+      && mutt_strcasecmp (addr->personal, u_addr->personal) == 0)
+    rv |= PGP_KV_STRING;
+  
+  return rv;
+}
+
+static pgp_key_t pgp_select_key (pgp_key_t keys,
+                                 ADDRESS * p, const char *s)
+{
+  int keymax;
+  pgp_uid_t **KeyTable;
+  MUTTMENU *menu;
+  int i, done = 0;
+  char helpstr[SHORT_STRING], buf[LONG_STRING], tmpbuf[STRING];
+  char cmd[LONG_STRING], tempfile[_POSIX_PATH_MAX];
+  FILE *fp, *devnull;
+  pid_t thepid;
+  pgp_key_t kp;
+  pgp_uid_t *a;
+  int (*f) (const void *, const void *);
+
+  int unusable = 0;
+
+  keymax = 0;
+  KeyTable = NULL;
+
+  for (i = 0, kp = keys; kp; kp = kp->next)
+  {
+    if (!option (OPTPGPSHOWUNUSABLE) && (kp->flags & KEYFLAG_CANTUSE))
+    {
+      unusable = 1;
+      continue;
+    }
+
+    for (a = kp->address; a; a = a->next)
+    {
+      if (!option (OPTPGPSHOWUNUSABLE) && (a->flags & KEYFLAG_CANTUSE))
+      {
+       unusable = 1;
+       continue;
+      }
+      
+      if (i == keymax)
+      {
+       keymax += 5;
+       safe_realloc (&KeyTable, sizeof (pgp_uid_t *) * keymax);
+      }
+      
+      KeyTable[i++] = a;
+    }
+  }
+
+  if (!i && unusable)
+  {
+    mutt_error _("All matching keys are expired, revoked, or disabled.");
+    mutt_sleep (1);
+    return NULL;
+  }
+
+  switch (PgpSortKeys & SORT_MASK)
+  {
+    case SORT_DATE:
+      f = pgp_compare_date;
+      break;
+    case SORT_KEYID:
+      f = pgp_compare_keyid;
+      break;
+    case SORT_ADDRESS:
+      f = pgp_compare_address;
+      break;
+    case SORT_TRUST:
+    default:
+      f = pgp_compare_trust;
+      break;
+  }
+  qsort (KeyTable, i, sizeof (pgp_uid_t *), f);
+
+  helpstr[0] = 0;
+  mutt_make_help (buf, sizeof (buf), _("Exit  "), MENU_PGP, OP_EXIT);
+  strcat (helpstr, buf);       /* __STRCAT_CHECKED__ */
+  mutt_make_help (buf, sizeof (buf), _("Select  "), MENU_PGP,
+                 OP_GENERIC_SELECT_ENTRY);
+  strcat (helpstr, buf);       /* __STRCAT_CHECKED__ */
+  mutt_make_help (buf, sizeof (buf), _("Check key  "), MENU_PGP, OP_VERIFY_KEY);
+  strcat (helpstr, buf);       /* __STRCAT_CHECKED__ */
+  mutt_make_help (buf, sizeof (buf), _("Help"), MENU_PGP, OP_HELP);
+  strcat (helpstr, buf);       /* __STRCAT_CHECKED__ */
+
+  menu = mutt_new_menu ();
+  menu->max = i;
+  menu->make_entry = pgp_entry;
+  menu->menu = MENU_PGP;
+  menu->help = helpstr;
+  menu->data = KeyTable;
+
+  if (p)
+    snprintf (buf, sizeof (buf), _("PGP keys matching <%s>."), p->mailbox);
+  else
+    snprintf (buf, sizeof (buf), _("PGP keys matching \"%s\"."), s);
+    
+  
+  menu->title = buf;
+
+  kp = NULL;
+
+  mutt_clear_error ();
+  
+  while (!done)
+  {
+    switch (mutt_menuLoop (menu))
+    {
+
+    case OP_VERIFY_KEY:
+
+      mutt_mktemp (tempfile);
+      if ((devnull = fopen ("/dev/null", "w")) == NULL)        /* __FOPEN_CHECKED__ */
+      {
+       mutt_perror _("Can't open /dev/null");
+       break;
+      }
+      if ((fp = safe_fopen (tempfile, "w")) == NULL)
+      {
+       fclose (devnull);
+       mutt_perror _("Can't create temporary file");
+       break;
+      }
+
+      mutt_message _("Invoking PGP...");
+
+      snprintf (tmpbuf, sizeof (tmpbuf), "0x%s", pgp_keyid (pgp_principal_key (KeyTable[menu->current]->parent)));
+
+      if ((thepid = pgp_invoke_verify_key (NULL, NULL, NULL, -1,
+                   fileno (fp), fileno (devnull), tmpbuf)) == -1)
+      {
+       mutt_perror _("Can't create filter");
+       unlink (tempfile);
+       fclose (fp);
+       fclose (devnull);
+      }
+
+      mutt_wait_filter (thepid);
+      fclose (fp);
+      fclose (devnull);
+      mutt_clear_error ();
+      snprintf (cmd, sizeof (cmd), _("Key ID: 0x%s"), 
+               pgp_keyid (pgp_principal_key (KeyTable[menu->current]->parent)));
+      mutt_do_pager (cmd, tempfile, 0, NULL);
+      menu->redraw = REDRAW_FULL;
+
+      break;
+
+    case OP_VIEW_ID:
+
+      mutt_message ("%s", KeyTable[menu->current]->addr);
+      break;
+
+    case OP_GENERIC_SELECT_ENTRY:
+
+
+      /* XXX make error reporting more verbose */
+      
+      if (option (OPTPGPCHECKTRUST))
+       if (!pgp_key_is_valid (KeyTable[menu->current]->parent))
+       {
+         mutt_error _("This key can't be used: expired/disabled/revoked.");
+         break;
+       }
+      
+      if (option (OPTPGPCHECKTRUST) &&
+         (!pgp_id_is_valid (KeyTable[menu->current])
+          || !pgp_id_is_strong (KeyTable[menu->current])))
+      {
+       char *s = "";
+       char buff[LONG_STRING];
+       
+       if (KeyTable[menu->current]->flags & KEYFLAG_CANTUSE)
+         s = N_("ID is expired/disabled/revoked.");
+       else switch (KeyTable[menu->current]->trust & 0x03)
+       {
+         case 0:
+           s = N_("ID has undefined validity.");
+           break;
+         case 1:
+           s = N_("ID is not valid.");
+           break;
+         case 2:
+           s = N_("ID is only marginally valid.");
+           break;
+       }
+
+       snprintf (buff, sizeof (buff), _("%s Do you really want to use the key?"),
+                 _(s));
+
+       if (mutt_yesorno (buff, M_NO) != M_YES)
+       {
+         mutt_clear_error ();
+         break;
+       }
+      }
+
+# if 0
+      kp = pgp_principal_key (KeyTable[menu->current]->parent);
+# else
+      kp = KeyTable[menu->current]->parent;
+# endif
+      done = 1;
+      break;
+
+    case OP_EXIT:
+
+      kp = NULL;
+      done = 1;
+      break;
+    }
+  }
+
+  mutt_menuDestroy (&menu);
+  FREE (&KeyTable);
+
+  set_option (OPTNEEDREDRAW);
+  
+  return (kp);
+}
+
+pgp_key_t pgp_ask_for_key (char *tag, char *whatfor,
+                           short abilities, pgp_ring_t keyring)
+{
+  pgp_key_t key;
+  char resp[SHORT_STRING];
+  struct pgp_cache *l = NULL;
+
+  mutt_clear_error ();
+  
+  resp[0] = 0;
+  if (whatfor)
+  {
+
+    for (l = id_defaults; l; l = l->next)
+      if (!mutt_strcasecmp (whatfor, l->what))
+      {
+       strfcpy (resp, NONULL (l->dflt), sizeof (resp));
+       break;
+      }
+  }
+
+
+  FOREVER
+  {
+    resp[0] = 0;
+    if (mutt_get_field (tag, resp, sizeof (resp), M_CLEAR) != 0)
+      return NULL;
+
+    if (whatfor)
+    {
+      if (l)
+       mutt_str_replace (&l->dflt, resp);
+      else
+      {
+       l = safe_malloc (sizeof (struct pgp_cache));
+       l->next = id_defaults;
+       id_defaults = l;
+       l->what = safe_strdup (whatfor);
+       l->dflt = safe_strdup (resp);
+      }
+    }
+
+    if ((key = pgp_getkeybystr (resp, abilities, keyring)))
+      return key;
+
+    BEEP ();
+  }
+  /* not reached */
+}
+
+/* generate a public key attachment */
+
+BODY *pgp_make_key_attachment (char *tempf)
+{
+  BODY *att;
+  char buff[LONG_STRING];
+  char tempfb[_POSIX_PATH_MAX], tmp[STRING];
+  FILE *tempfp;
+  FILE *devnull;
+  struct stat sb;
+  pid_t thepid;
+  pgp_key_t key;
+  unset_option (OPTPGPCHECKTRUST);
+
+  key = pgp_ask_for_key (_("Please enter the key ID: "), NULL, 0, PGP_PUBRING);
+
+  if (!key)    return NULL;
+
+  snprintf (tmp, sizeof (tmp), "0x%s", pgp_keyid (pgp_principal_key (key)));
+  pgp_free_key (&key);
+  
+  if (!tempf)
+  {
+    mutt_mktemp (tempfb);
+    tempf = tempfb;
+  }
+
+  if ((tempfp = safe_fopen (tempf, tempf == tempfb ? "w" : "a")) == NULL)
+  {
+    mutt_perror _("Can't create temporary file");
+    return NULL;
+  }
+
+  if ((devnull = fopen ("/dev/null", "w")) == NULL)    /* __FOPEN_CHECKED__ */
+  {
+    mutt_perror _("Can't open /dev/null");
+    fclose (tempfp);
+    if (tempf == tempfb)
+      unlink (tempf);
+    return NULL;
+  }
+
+  mutt_message _("Invoking pgp...");
+
+  
+  if ((thepid = 
+       pgp_invoke_export (NULL, NULL, NULL, -1,
+                          fileno (tempfp), fileno (devnull), tmp)) == -1)
+  {
+    mutt_perror _("Can't create filter");
+    unlink (tempf);
+    fclose (tempfp);
+    fclose (devnull);
+    return NULL;
+  }
+
+  mutt_wait_filter (thepid);
+
+  fclose (tempfp);
+  fclose (devnull);
+
+  att = mutt_new_body ();
+  att->filename = safe_strdup (tempf);
+  att->unlink = 1;
+  att->use_disp = 0;
+  att->type = TYPEAPPLICATION;
+  att->subtype = safe_strdup ("pgp-keys");
+  snprintf (buff, sizeof (buff), _("PGP Key %s."), tmp);
+  att->description = safe_strdup (buff);
+  mutt_update_encoding (att);
+
+  stat (tempf, &sb);
+  att->length = sb.st_size;
+
+  return att;
+}
+
+static LIST *pgp_add_string_to_hints (LIST *hints, const char *str)
+{
+  char *scratch;
+  char *t;
+
+  if ((scratch = safe_strdup (str)) == NULL)
+    return hints;
+
+  for (t = strtok (scratch, " ,.:\"()<>\n"); t;
+                       t = strtok (NULL, " ,.:\"()<>\n"))
+  {
+    if (strlen (t) > 3)
+      hints = mutt_add_list (hints, t);
+  }
+
+  FREE (&scratch);
+  return hints;
+}
+
+static pgp_key_t *pgp_get_lastp (pgp_key_t p)
+{
+  for (; p; p = p->next)
+    if (!p->next)
+      return &p->next;
+
+  return NULL;
+}
+
+pgp_key_t pgp_getkeybyaddr (ADDRESS * a, short abilities, pgp_ring_t keyring)
+{
+  ADDRESS *r, *p;
+  LIST *hints = NULL;
+
+  int weak    = 0;
+  int invalid = 0;
+  int multi   = 0;
+  int this_key_has_strong;
+  int this_key_has_weak;
+  int this_key_has_invalid;
+  int match;
+
+  pgp_key_t keys, k, kn;
+  pgp_key_t the_valid_key = NULL;
+  pgp_key_t matches = NULL;
+  pgp_key_t *last = &matches;
+  pgp_uid_t *q;
+  
+  if (a && a->mailbox)
+    hints = pgp_add_string_to_hints (hints, a->mailbox);
+  if (a && a->personal)
+    hints = pgp_add_string_to_hints (hints, a->personal);
+
+  mutt_message (_("Looking for keys matching \"%s\"..."), a->mailbox);
+  keys = pgp_get_candidates (keyring, hints);
+
+  mutt_free_list (&hints);
+  
+  if (!keys)
+    return NULL;
+  
+  dprint (5, (debugfile, "pgp_getkeybyaddr: looking for %s <%s>.",
+             a->personal, a->mailbox));
+
+
+  for (k = keys; k; k = kn)
+  {
+    kn = k->next;
+
+    dprint (5, (debugfile, "  looking at key: %s\n",
+               pgp_keyid (k)));
+
+    if (abilities && !(k->flags & abilities))
+    {
+      dprint (5, (debugfile, "  insufficient abilities: Has %x, want %x\n",
+                 k->flags, abilities));
+      continue;
+    }
+
+    this_key_has_weak    = 0;  /* weak but valid match   */
+    this_key_has_invalid = 0;   /* invalid match          */
+    this_key_has_strong  = 0;  /* strong and valid match */
+    match                = 0;   /* any match             */
+
+    for (q = k->address; q; q = q->next)
+    {
+      r = rfc822_parse_adrlist (NULL, q->addr);
+
+      for (p = r; p; p = p->next)
+      {
+       int validity = pgp_id_matches_addr (a, p, q);
+
+       if (validity & PGP_KV_MATCH)    /* something matches */
+         match = 1;
+
+       /* is this key a strong candidate? */
+       if ((validity & PGP_KV_VALID) && (validity & PGP_KV_STRONGID) 
+           && (validity & PGP_KV_ADDR))
+       {
+         if (the_valid_key && the_valid_key != k)
+           multi             = 1;
+         the_valid_key       = k;
+         this_key_has_strong = 1;
+       }
+       else if ((validity & PGP_KV_MATCH) && !(validity & PGP_KV_VALID))
+         this_key_has_invalid = 1;
+       else if ((validity & PGP_KV_MATCH) 
+                && (!(validity & PGP_KV_STRONGID) || !(validity & PGP_KV_ADDR)))
+         this_key_has_weak    = 1;
+      }
+
+      rfc822_free_address (&r);
+    }
+
+    if (match && !this_key_has_strong && this_key_has_invalid)
+      invalid = 1;
+    if (match && !this_key_has_strong && this_key_has_weak)
+      weak = 1;
+    
+    if (match)
+    {
+      *last  = pgp_principal_key (k);
+      kn     = pgp_remove_key (&keys, *last);
+      last   = pgp_get_lastp (k);
+    }
+  }
+
+  pgp_free_key (&keys);
+  
+  if (matches)
+  {
+    if (the_valid_key && !multi /* && !weak 
+       && !(invalid && option (OPTPGPSHOWUNUSABLE)) */)
+    {
+      /*
+       * There was precisely one strong match on a valid ID.
+       * 
+       * Proceed without asking the user.
+       */
+      pgp_remove_key (&matches, the_valid_key);
+      pgp_free_key (&matches);
+      k = the_valid_key;
+    }
+    else 
+    {
+      /* 
+       * Else: Ask the user.
+       */
+      if ((k = pgp_select_key (matches, a, NULL)))
+       pgp_remove_key (&matches, k);
+      pgp_free_key (&matches);
+    }
+
+    return k;
+  }
+
+  return NULL;
+}
+
+pgp_key_t pgp_getkeybystr (char *p, short abilities, pgp_ring_t keyring)
+{
+  LIST *hints = NULL;
+  pgp_key_t keys;
+  pgp_key_t matches = NULL;
+  pgp_key_t *last = &matches;
+  pgp_key_t k, kn;
+  pgp_uid_t *a;
+  short match;
+
+  mutt_message (_("Looking for keys matching \"%s\"..."), p);
+  
+  hints = pgp_add_string_to_hints (hints, p);
+  keys = pgp_get_candidates (keyring, hints);
+  mutt_free_list (&hints);
+
+  if (!keys)
+    return NULL;
+  
+  
+  for (k = keys; k; k = kn)
+  {
+    kn = k->next;
+    if (abilities && !(k->flags & abilities))
+      continue;
+
+    match = 0;
+    
+    for (a = k->address; a; a = a->next)
+    {
+      dprint (5, (debugfile, "pgp_getkeybystr: matching \"%s\" against key %s, \"%s\": ",
+                 p, pgp_keyid (k), a->addr));
+      if (!*p || mutt_strcasecmp (p, pgp_keyid (k)) == 0 ||
+         (!mutt_strncasecmp (p, "0x", 2) && !mutt_strcasecmp (p + 2, pgp_keyid (k))) ||
+         (option (OPTPGPLONGIDS) && !mutt_strncasecmp (p, "0x", 2) &&
+          !mutt_strcasecmp (p + 2, k->keyid + 8)) ||
+         mutt_stristr (a->addr, p))
+      {
+       dprint (5, (debugfile, "match.\n"));
+       match = 1;
+       break;
+      }
+    }
+    
+    if (match)
+    {
+      *last = pgp_principal_key (k);
+      kn    = pgp_remove_key (&keys, *last);
+      last  = pgp_get_lastp (k);
+    }
+  }
+
+  pgp_free_key (&keys);
+
+  if (matches)
+  {
+    if ((k = pgp_select_key (matches, NULL, p)))
+      pgp_remove_key (&matches, k);
+    
+    pgp_free_key (&matches);
+    return k;
+  }
+
+  return NULL;
+}
+
+
+
+#endif /* CRYPT_BACKEND_CLASSIC_PGP */
diff --git a/pgplib.c b/pgplib.c
new file mode 100644 (file)
index 0000000..a271881
--- /dev/null
+++ b/pgplib.c
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 1997-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */
+
+/* Generally useful, pgp-related functions. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <time.h>
+
+#include "mutt.h"
+#include "lib.h"
+#include "pgplib.h"
+
+const char *pgp_pkalgbytype (unsigned char type)
+{
+  switch (type)
+  {
+  case 1:
+    return "RSA";
+  case 2:
+    return "RSA";
+  case 3:
+    return "RSA";
+  case 16:
+    return "ElG";
+  case 17:
+    return "DSA";
+  case 20:
+    return "ElG";
+  default:
+    return "unk";
+  }
+}
+
+
+
+/* unused */
+
+#if 0
+
+static const char *hashalgbytype (unsigned char type)
+{
+  switch (type)
+  {
+  case 1:
+    return "MD5";
+  case 2:
+    return "SHA1";
+  case 3:
+    return "RIPE-MD/160";
+  case 4:
+    return "HAVAL";
+  default:
+    return "unknown";
+  }
+}
+
+#endif
+
+short pgp_canencrypt (unsigned char type)
+{
+  switch (type)
+  {
+  case 1:
+  case 2:
+  case 16:
+  case 20:
+    return 1;
+  default:
+    return 0;
+  }
+}
+
+short pgp_cansign (unsigned char type)
+{
+  switch (type)
+  {
+  case 1:
+  case 3:
+  case 17:
+  case 20:
+    return 1;
+  default:
+    return 0;
+  }
+}
+
+/* return values: 
+
+ * 1 = sign only
+ * 2 = encrypt only
+ * 3 = both
+ */
+
+short pgp_get_abilities (unsigned char type)
+{
+  return (pgp_canencrypt (type) << 1) | pgp_cansign (type);
+}
+
+void pgp_free_sig (pgp_sig_t **sigp)
+{
+  pgp_sig_t *sp, *q;
+  
+  if (!sigp || !*sigp)
+    return;
+  
+  for (sp = *sigp; sp; sp = q)
+  {
+    q = sp->next;
+    FREE (&sp);
+  }
+  
+  *sigp = NULL;
+}
+
+void pgp_free_uid (pgp_uid_t ** upp)
+{
+  pgp_uid_t *up, *q;
+
+  if (!upp || !*upp)
+    return;
+  for (up = *upp; up; up = q)
+  {
+    q = up->next;
+    pgp_free_sig (&up->sigs);
+    FREE (&up->addr);
+    FREE (&up);
+  }
+
+  *upp = NULL;
+}
+
+pgp_uid_t *pgp_copy_uids (pgp_uid_t *up, pgp_key_t parent)
+{
+  pgp_uid_t *l = NULL;
+  pgp_uid_t **lp = &l;
+
+  for (; up; up = up->next)
+  {
+    *lp = safe_calloc (1, sizeof (pgp_uid_t));
+    (*lp)->trust  = up->trust;
+    (*lp)->flags  = up->flags;
+    (*lp)->addr   = safe_strdup (up->addr);
+    (*lp)->parent = parent;
+    lp = &(*lp)->next;
+  }
+
+  return l;
+}
+
+static void _pgp_free_key (pgp_key_t *kpp)
+{
+  pgp_key_t kp;
+
+  if (!kpp || !*kpp)
+    return;
+
+  kp = *kpp;
+
+  pgp_free_uid (&kp->address);
+  FREE (&kp->keyid);
+  FREE (kpp);
+}
+
+pgp_key_t pgp_remove_key (pgp_key_t *klist, pgp_key_t key)
+{
+  pgp_key_t *last;
+  pgp_key_t p, q, r;
+
+  if (!klist || !*klist || !key)
+    return NULL;
+
+  if (key->parent && key->parent != key)
+    key = key->parent;
+
+  last = klist;
+  for (p = *klist; p && p != key; p = p->next)
+    last = &p->next;
+
+  if (!p)
+    return NULL;
+
+  for (q = p->next, r = p; q && q->parent == p; q = q->next)
+    r = q;
+
+  if (r)
+    r->next = NULL;
+
+  *last = q;
+  return q;
+}
+
+void pgp_free_key (pgp_key_t *kpp)
+{
+  pgp_key_t p, q, r;
+
+  if (!kpp || !*kpp)
+    return;
+
+  if ((*kpp)->parent && (*kpp)->parent != *kpp)
+    *kpp = (*kpp)->parent;
+  
+  /* Order is important here:
+   *
+   * - First free all children.
+   * - If we are an orphan (i.e., our parent was not in the key list),
+   *   free our parent.
+   * - free ourselves.
+   */
+
+  for (p = *kpp; p; p = q)
+  {
+    for (q = p->next; q && q->parent == p; q = r)
+    {
+      r = q->next;
+      _pgp_free_key (&q);
+    }
+    if (p->parent)
+      _pgp_free_key (&p->parent);
+
+    _pgp_free_key (&p);
+  }
+
+  *kpp = NULL;
+}
+
diff --git a/pgplib.h b/pgplib.h
new file mode 100644 (file)
index 0000000..9b2b5d5
--- /dev/null
+++ b/pgplib.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 1996,1997 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ *
+ *     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.
+ */
+
+#ifdef CRYPT_BACKEND_CLASSIC_PGP
+
+#include "mutt_crypt.h"
+
+
+typedef struct pgp_signature
+{
+  struct pgp_signature *next;
+  unsigned char sigtype;
+  unsigned long sid1;
+  unsigned long sid2;
+}
+pgp_sig_t;
+
+struct pgp_keyinfo
+{
+  char *keyid;
+  struct pgp_uid *address;
+  int flags;
+  short keylen;
+  time_t gen_time;
+  int numalg;
+  const char *algorithm;
+  struct pgp_keyinfo *parent;
+  struct pgp_signature *sigs;
+  struct pgp_keyinfo *next;
+
+  short fp_len;                          /* length of fingerprint.
+                                  * 20 for sha-1, 16 for md5.
+                                  */
+  unsigned char fingerprint[20];  /* large enough to hold SHA-1 and RIPEMD160
+                                     hashes (20 bytes), MD5 hashes just use the
+                                     first 16 bytes */
+};
+/* Note, that pgp_key_t is now pointer and declared in crypt.h */
+
+typedef struct pgp_uid
+{
+  char *addr;
+  short trust;
+  int flags;
+  struct pgp_keyinfo *parent;
+  struct pgp_uid *next;
+  struct pgp_signature *sigs;
+}
+pgp_uid_t;
+
+enum pgp_version
+{
+  PGP_V2,
+  PGP_V3,
+  PGP_GPG,
+  PGP_UNKNOWN
+};
+
+/* prototypes */
+
+const char *pgp_pkalgbytype (unsigned char);
+
+pgp_key_t pgp_remove_key (pgp_key_t *, pgp_key_t );
+pgp_uid_t *pgp_copy_uids (pgp_uid_t *, pgp_key_t );
+
+short pgp_canencrypt (unsigned char);
+short pgp_cansign (unsigned char);
+short pgp_get_abilities (unsigned char);
+
+void pgp_free_key (pgp_key_t *kpp);
+
+#define pgp_new_keyinfo() safe_calloc (sizeof *((pgp_key_t)0), 1)
+
+#endif /* CRYPT_BACKEND_CLASSIC_PGP */
diff --git a/pgpmicalg.c b/pgpmicalg.c
new file mode 100644 (file)
index 0000000..5835e7d
--- /dev/null
@@ -0,0 +1,207 @@
+/*
+ * Copyright (C) 2001 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ * 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.
+ */
+
+/* This module peeks at a PGP signature and figures out the hash
+ * algorithm.
+ */
+
+#include "mutt.h"
+#include "pgp.h"
+#include "pgppacket.h"
+#include "mime.h"
+#include "charset.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+static struct 
+{
+  short id;
+  const char *name;
+} 
+HashAlgorithms[] = 
+{
+  { 1,         "pgp-md5"               },
+  { 2,         "pgp-sha1"              },
+  { 3,         "pgp-ripemd160"         },
+  { 5,         "pgp-md2"               },
+  { 6,         "pgp-tiger192"          },
+  { 7,         "pgp-haval-5-160"       },
+  { 8,         "pgp-sha256"            },
+  { 9,         "pgp-sha384"            },
+  { 10,                "pgp-sha512"            },
+  { -1,        NULL }
+};
+
+static const char *pgp_hash_to_micalg (short id)
+{
+  int i;
+  
+  for (i = 0; HashAlgorithms[i].id >= 0; i++)
+    if (HashAlgorithms[i].id == id)
+      return HashAlgorithms[i].name;
+  return "x-unknown";
+}
+
+static void pgp_dearmor (FILE *in, FILE *out)
+{
+  char line[HUGE_STRING];
+  long start;
+  long end;
+  char *r;
+
+  STATE state;
+  
+  memset (&state, 0, sizeof (STATE));
+  state.fpin = in;
+  state.fpout = out;
+  
+  /* find the beginning of ASCII armor */
+  
+  while ((r = fgets (line, sizeof (line), in)) != NULL)
+  {
+    if (!strncmp (line, "-----BEGIN", 10))
+      break;
+  }
+  if (r == NULL)
+  {
+    dprint (1, (debugfile, "pgp_dearmor: Can't find begin of ASCII armor.\n"));
+    return;
+  }
+
+  /* skip the armor header */
+  
+  while ((r = fgets (line, sizeof (line), in)) != NULL)
+  {
+    SKIPWS (r);
+    if (!*r) break;
+  }
+  if (r == NULL)
+  {
+    dprint (1, (debugfile, "pgp_dearmor: Armor header doesn't end.\n"));
+    return;
+  }
+  
+  /* actual data starts here */
+  start = ftell (in);
+  
+  /* find the checksum */
+  
+  while ((r = fgets (line, sizeof (line), in)) != NULL)
+  {
+    if (*line == '=' || !strncmp (line, "-----END", 8))
+      break;
+  }
+  if (r == NULL)
+  {
+    dprint (1, (debugfile, "pgp_dearmor: Can't find end of ASCII armor.\n"));
+    return;
+  }
+  
+  if ((end = ftell (in) - strlen (line)) < start)
+  {
+    dprint (1, (debugfile, "pgp_dearmor: end < start???\n"));
+    return;
+  }
+  
+  if (fseek (in, start, SEEK_SET) == -1)
+  {
+    dprint (1, (debugfile, "pgp_dearmor: Can't seekto start.\n"));
+    return;
+  }
+
+  mutt_decode_base64 (&state, end - start, 0, (iconv_t) -1);
+}
+
+static short pgp_mic_from_packet (unsigned char *p, size_t len)
+{
+  /* is signature? */
+  if ((p[0] & 0x3f) != PT_SIG)
+  {
+    dprint (1, (debugfile, "pgp_mic_from_packet: tag = %d, want %d.\n",
+               p[0]&0x3f, PT_SIG));
+    return -1;
+  }
+  
+  if (len >= 18 && p[1] == 3)
+    /* version 3 signature */
+    return (short) p[17];
+  else if (len >= 5 && p[1] == 4)
+    /* version 4 signature */
+    return (short) p[4];
+  else
+  {
+    dprint (1, (debugfile, "pgp_mic_from_packet: Bad signature packet.\n"));
+    return -1;
+  }
+}
+
+static short pgp_find_hash (const char *fname)
+{
+  FILE *in = NULL;
+  FILE *out = NULL;
+  
+  char tempfile[_POSIX_PATH_MAX];
+  
+  unsigned char *p;
+  size_t l;
+  
+  short rv = -1;
+  
+  mutt_mktemp (tempfile);
+  if ((out = safe_fopen (tempfile, "w+")) == NULL)
+  {
+    mutt_perror (tempfile);
+    goto bye;
+  }
+  unlink (tempfile);
+  
+  if ((in = fopen (fname, "r")) == NULL)
+  {
+    mutt_perror (fname);
+    goto bye;
+  }
+  
+  pgp_dearmor (in, out);
+  rewind (out);
+
+  if ((p = pgp_read_packet (out, &l)) != NULL)
+  {
+    rv = pgp_mic_from_packet (p, l);
+  }
+  else
+  {
+    dprint (1, (debugfile, "pgp_find_hash: No packet.\n"));
+  }
+  
+  bye:
+  
+  safe_fclose (&in);
+  safe_fclose (&out);
+  pgp_release_packet ();
+  return rv;
+}
+
+const char *pgp_micalg (const char *fname)
+{
+  return pgp_hash_to_micalg (pgp_find_hash (fname));
+}
+
diff --git a/pgppacket.c b/pgppacket.c
new file mode 100644 (file)
index 0000000..f6c64a5
--- /dev/null
@@ -0,0 +1,225 @@
+/*
+ * Copyright (C) 2001 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ * 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.
+ */
+
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <time.h>
+
+#include "sha1.h"
+#include "lib.h"
+#include "pgplib.h"
+#include "pgppacket.h"
+
+#define CHUNKSIZE 1024
+
+static unsigned char *pbuf = NULL;
+static size_t plen = 0;
+
+static int read_material (size_t material, size_t * used, FILE * fp)
+{
+  if (*used + material >= plen)
+  {
+    unsigned char *p;
+    size_t nplen;
+
+    nplen = *used + material + CHUNKSIZE;
+
+    if (!(p = realloc (pbuf, nplen)))  /* __MEM_CHECKED__ */
+    {
+      perror ("realloc");
+      return -1;
+    }
+    plen = nplen;
+    pbuf = p;
+  }
+
+  if (fread (pbuf + *used, 1, material, fp) < material)
+  {
+    perror ("fread");
+    return -1;
+  }
+
+  *used += material;
+  return 0;
+}
+
+unsigned char *pgp_read_packet (FILE * fp, size_t * len)
+{
+  size_t used = 0;
+  long startpos;
+  unsigned char ctb;
+  unsigned char b;
+  size_t material;
+
+  startpos = ftell (fp);
+
+  if (!plen)
+  {
+    plen = CHUNKSIZE;
+    pbuf = safe_malloc (plen);
+  }
+
+  if (fread (&ctb, 1, 1, fp) < 1)
+  {
+    if (!feof (fp))
+      perror ("fread");
+    goto bail;
+  }
+
+  if (!(ctb & 0x80))
+  {
+    goto bail;
+  }
+
+  if (ctb & 0x40)              /* handle PGP 5.0 packets. */
+  {
+    int partial = 0;
+    pbuf[0] = ctb;
+    used++;
+
+    do
+    {
+      if (fread (&b, 1, 1, fp) < 1)
+      {
+       perror ("fread");
+       goto bail;
+      }
+
+      if (b < 192)
+      {
+       material = b;
+       partial = 0;
+       /* material -= 1; */
+      }
+      else if (192 <= b && b <= 223)
+      {
+       material = (b - 192) * 256;
+       if (fread (&b, 1, 1, fp) < 1)
+       {
+         perror ("fread");
+         goto bail;
+       }
+       material += b + 192;
+       partial = 0;
+       /* material -= 2; */
+      }
+      else if (b < 255)
+      {
+       material = 1 << (b & 0x1f);
+       partial = 1;
+       /* material -= 1; */
+      }
+      else
+       /* b == 255 */
+      {
+       unsigned char buf[4];
+       if (fread (buf, 4, 1, fp) < 1)
+       {
+         perror ("fread");
+         goto bail;
+       }
+       /*assert( sizeof(material) >= 4 ); */
+       material = buf[0] << 24;
+       material |= buf[1] << 16;
+       material |= buf[2] << 8;
+       material |= buf[3];
+       partial = 0;
+       /* material -= 5; */
+      }
+
+      if (read_material (material, &used, fp) == -1)
+       goto bail;
+
+    }
+    while (partial);
+  }
+  else
+    /* Old-Style PGP */
+  {
+    int bytes = 0;
+    pbuf[0] = 0x80 | ((ctb >> 2) & 0x0f);
+    used++;
+
+    switch (ctb & 0x03)
+    {
+      case 0:
+      {
+       if (fread (&b, 1, 1, fp) < 1)
+       {
+         perror ("fread");
+         goto bail;
+       }
+
+       material = b;
+       break;
+      }
+
+      case 1:
+      bytes = 2;
+
+      case 2:
+      {
+       int i;
+
+       if (!bytes)
+         bytes = 4;
+
+       material = 0;
+
+       for (i = 0; i < bytes; i++)
+       {
+         if (fread (&b, 1, 1, fp) < 1)
+         {
+           perror ("fread");
+           goto bail;
+         }
+
+         material = (material << 8) + b;
+       }
+       break;
+      }
+
+      default:
+      goto bail;
+    }
+
+    if (read_material (material, &used, fp) == -1)
+      goto bail;
+  }
+
+  if (len)
+    *len = used;
+
+  return pbuf;
+
+bail:
+
+  fseek (fp, startpos, SEEK_SET);
+  return NULL;
+}
+
+void pgp_release_packet (void)
+{
+  plen = 0;
+  FREE (&pbuf);
+}
+
diff --git a/pgppacket.h b/pgppacket.h
new file mode 100644 (file)
index 0000000..4b7fd64
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2001 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ * 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.
+ */
+
+/* 
+ * Definitions for a rudimentary PGP packet parser which is shared
+ * by mutt proper and the PGP public key ring lister.
+ */
+
+#ifndef _PGPPACKET_H
+# define _PGPPACKET_H
+
+enum packet_tags
+{
+  PT_RES0 = 0,                 /* reserved */
+  PT_ESK,                      /* Encrypted Session Key */
+  PT_SIG,                      /* Signature Packet */
+  PT_CESK,                     /* Conventionally Encrypted Session Key Packet */
+  PT_OPS,                      /* One-Pass Signature Packet */
+  PT_SECKEY,                   /* Secret Key Packet */
+  PT_PUBKEY,                   /* Public Key Packet */
+  PT_SUBSECKEY,                        /* Secret Subkey Packet */
+  PT_COMPRESSED,               /* Compressed Data Packet */
+  PT_SKE,                      /* Symmetrically Encrypted Data Packet */
+  PT_MARKER,                   /* Marker Packet */
+  PT_LITERAL,                  /* Literal Data Packet */
+  PT_TRUST,                    /* Trust Packet */
+  PT_NAME,                     /* Name Packet */
+  PT_SUBKEY,                   /* Subkey Packet */
+  PT_RES15,                    /* Reserved */
+  PT_COMMENT                   /* Comment Packet */
+};
+
+unsigned char *pgp_read_packet (FILE * fp, size_t * len);
+void pgp_release_packet (void);
+
+#endif
diff --git a/pgppubring.c b/pgppubring.c
new file mode 100644 (file)
index 0000000..878b10a
--- /dev/null
@@ -0,0 +1,959 @@
+/*
+ * Copyright (C) 1997-2001 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */
+
+/*
+ * This is a "simple" PGP key ring dumper.
+ * 
+ * The output format is supposed to be compatible to the one GnuPG
+ * emits and Mutt expects.
+ * 
+ * Note that the code of this program could be considerably less
+ * complex, but most of it was taken from mutt's second generation
+ * key ring parser.
+ * 
+ * You can actually use this to put together some fairly general
+ * PGP key management applications.
+ *
+ */
+
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <time.h>
+#ifdef HAVE_GETOPT_H
+# include <getopt.h>
+#endif
+#include <errno.h>
+
+extern char *optarg;
+extern int optind;
+
+#include "sha1.h"
+#include "md5.h"
+#include "lib.h"
+#include "pgplib.h"
+#include "pgppacket.h"
+
+#define MD5_DIGEST_LENGTH  16
+
+#ifdef HAVE_FGETPOS
+#define FGETPOS(fp,pos) fgetpos((fp),&(pos))
+#define FSETPOS(fp,pos) fsetpos((fp),&(pos))
+#else
+#define FGETPOS(fp,pos) pos=ftell((fp));
+#define FSETPOS(fp,pos) fseek((fp),(pos),SEEK_SET)
+#endif
+
+
+static short dump_signatures = 0;
+static short dump_fingerprints = 0;
+
+
+static void pgpring_find_candidates (char *ringfile, const char *hints[], int nhints);
+static void pgpring_dump_keyblock (pgp_key_t p);
+
+int main (int argc, char * const argv[])
+{
+  int c;
+  
+  short version = 2;
+  short secring = 0;
+  
+  const char *_kring = NULL;
+  char *env_pgppath, *env_home;
+
+  char pgppath[_POSIX_PATH_MAX];
+  char kring[_POSIX_PATH_MAX];
+
+  while ((c = getopt (argc, argv, "f25sk:S")) != EOF)
+  {
+    switch (c)
+    {
+      case 'S':
+      {
+       dump_signatures = 1;
+       break;
+      }
+
+      case 'f':
+      {
+       dump_fingerprints = 1;
+       break;
+      }
+
+      case 'k':
+      {
+       _kring = optarg;
+       break;
+      }
+      
+      case '2': case '5':
+      {
+       version = c - '0';
+       break;
+      }
+      
+      case 's':
+      {
+       secring = 1;
+       break;
+      }
+    
+      default:
+      {
+       fprintf (stderr, "usage: %s [-k <key ring> | [-2 | -5] [ -s] [-S] [-f]] [hints]\n",
+                argv[0]);
+       exit (1);
+      }
+    }
+  }
+
+  if (_kring)
+    strfcpy (kring, _kring, sizeof (kring));
+  else
+  {
+    if ((env_pgppath = getenv ("PGPPATH")))
+      strfcpy (pgppath, env_pgppath, sizeof (pgppath));
+    else if ((env_home = getenv ("HOME")))
+      snprintf (pgppath, sizeof (pgppath), "%s/.pgp", env_home);
+    else
+    {
+      fprintf (stderr, "%s: Can't determine your PGPPATH.\n", argv[0]);
+      exit (1);
+    }
+    
+    if (secring)
+      snprintf (kring, sizeof (kring), "%s/secring.%s", pgppath, version == 2 ? "pgp" : "skr");
+    else
+      snprintf (kring, sizeof (kring), "%s/pubring.%s", pgppath, version == 2 ? "pgp" : "pkr");
+  }
+  
+  pgpring_find_candidates (kring, (const char**) argv + optind, argc - optind);
+    
+  return 0;
+}
+
+
+/* The actual key ring parser */
+
+static void pgp_make_pgp2_fingerprint (unsigned char *buff,
+                                       unsigned char *digest)
+{
+
+  MD5_CTX context;
+  unsigned int size = 0;
+
+
+  MD5Init (&context);
+
+  size = (buff[0] << 8) + buff[1];
+  size = ((size + 7) / 8);
+  buff = &buff[2];
+
+  MD5Update (&context, buff, size);
+  buff = &buff[size];
+
+  size = (buff[0] << 8) + buff[1];
+  size = ((size + 7) / 8);
+  buff = &buff[2];
+
+  MD5Update (&context, buff, size);
+
+  MD5Final (digest, &context);
+
+} /* pgp_make_pgp2_fingerprint() */
+
+static pgp_key_t pgp_parse_pgp2_key (unsigned char *buff, size_t l)
+{
+  pgp_key_t p;
+  unsigned char alg;
+  unsigned char digest[MD5_DIGEST_LENGTH];
+  size_t expl;
+  unsigned long id;
+  time_t gen_time = 0;
+  unsigned short exp_days = 0;
+  size_t j;
+  int i, k;
+  unsigned char scratch[LONG_STRING];
+
+  if (l < 12)
+    return NULL;
+
+  p = pgp_new_keyinfo();
+
+  for (i = 0, j = 2; i < 4; i++)
+    gen_time = (gen_time << 8) + buff[j++];
+
+  p->gen_time = gen_time;
+
+  for (i = 0; i < 2; i++)
+    exp_days = (exp_days << 8) + buff[j++];
+
+  if (exp_days && time (NULL) > gen_time + exp_days * 24 * 3600)
+    p->flags |= KEYFLAG_EXPIRED;
+
+  alg = buff[j++];
+
+  p->numalg = alg;
+  p->algorithm = pgp_pkalgbytype (alg);
+  p->flags |= pgp_get_abilities (alg);
+
+  if (dump_fingerprints)
+  {
+    /* j now points to the key material, which we need for the fingerprint */
+    p->fp_len = MD5_DIGEST_LENGTH;
+    pgp_make_pgp2_fingerprint (&buff[j], digest);
+    memcpy (p->fingerprint, digest, MD5_DIGEST_LENGTH);
+  }
+  else /* just to be usre */
+    memset (p->fingerprint, 0, MD5_DIGEST_LENGTH);
+    
+  expl = 0;
+  for (i = 0; i < 2; i++)
+    expl = (expl << 8) + buff[j++];
+
+  p->keylen = expl;
+
+  expl = (expl + 7) / 8;
+  if (expl < 4)
+    goto bailout;
+
+
+  j += expl - 8;
+
+  for (k = 0; k < 2; k++)
+  {
+    for (id = 0, i = 0; i < 4; i++)
+      id = (id << 8) + buff[j++];
+
+    snprintf ((char *) scratch + k * 8, sizeof (scratch) - k * 8,
+             "%08lX", id);
+  }
+
+  p->keyid = safe_strdup ((char *) scratch);
+
+  return p;
+
+bailout:
+
+  FREE (&p);
+  return NULL;
+}
+
+static void pgp_make_pgp3_fingerprint (unsigned char *buff, size_t l,
+                                      unsigned char *digest)
+{
+  unsigned char dummy;
+  SHA1_CTX context;
+
+  SHA1_Init (&context);
+
+  dummy = buff[0] & 0x3f;
+
+  if (dummy == PT_SUBSECKEY || dummy == PT_SUBKEY || dummy == PT_SECKEY)
+    dummy = PT_PUBKEY;
+
+  dummy = (dummy << 2) | 0x81;
+  SHA1_Update (&context, &dummy, 1);
+  dummy = ((l - 1) >> 8) & 0xff;
+  SHA1_Update (&context, &dummy, 1);
+  dummy = (l - 1) & 0xff;
+  SHA1_Update (&context, &dummy, 1);
+  SHA1_Update (&context, buff + 1, l - 1);
+  SHA1_Final (digest, &context);
+
+}
+
+static void skip_bignum (unsigned char *buff, size_t l, size_t j,
+                        size_t * toff, size_t n)
+{
+  size_t len;
+
+  do
+  {
+    len = (buff[j] << 8) + buff[j + 1];
+    j += (len + 7) / 8 + 2;
+  }
+  while (j <= l && --n > 0);
+
+  if (toff)
+    *toff = j;
+}
+
+
+static pgp_key_t pgp_parse_pgp3_key (unsigned char *buff, size_t l)
+{
+  pgp_key_t p;
+  unsigned char alg;
+  unsigned char digest[SHA_DIGEST_LENGTH];
+  unsigned char scratch[LONG_STRING];
+  time_t gen_time = 0;
+  unsigned long id;
+  int i, k;
+  short len;
+  size_t j;
+
+  p = pgp_new_keyinfo ();
+  j = 2;
+
+  for (i = 0; i < 4; i++)
+    gen_time = (gen_time << 8) + buff[j++];
+
+  p->gen_time = gen_time;
+
+  alg = buff[j++];
+
+  p->numalg = alg;
+  p->algorithm = pgp_pkalgbytype (alg);
+  p->flags |= pgp_get_abilities (alg);
+
+  if (alg == 17)
+    skip_bignum (buff, l, j, &j, 3);
+  else if (alg == 16 || alg == 20)
+    skip_bignum (buff, l, j, &j, 2);
+
+  len = (buff[j] << 8) + buff[j + 1];
+  p->keylen = len;
+
+
+  if (alg >= 1 && alg <= 3)
+    skip_bignum (buff, l, j, &j, 2);
+  else if (alg == 17 || alg == 16 || alg == 20)
+    skip_bignum (buff, l, j, &j, 1);
+
+  pgp_make_pgp3_fingerprint (buff, j, digest);
+  p->fp_len = SHA_DIGEST_LENGTH;
+  
+  for (k = 0; k < 2; k++)
+  {
+    for (id = 0, i = SHA_DIGEST_LENGTH - 8 + k * 4;
+        i < SHA_DIGEST_LENGTH + (k - 1) * 4; i++)
+      id = (id << 8) + digest[i];
+
+    snprintf ((char *) scratch + k * 8, sizeof (scratch) - k * 8, "%08lX", id);
+  }
+
+  p->keyid = safe_strdup ((char *) scratch);
+
+  return p;
+}
+
+static pgp_key_t pgp_parse_keyinfo (unsigned char *buff, size_t l)
+{
+  if (!buff || l < 2)
+    return NULL;
+
+  switch (buff[1])
+  {
+  case 2:
+  case 3:
+    return pgp_parse_pgp2_key (buff, l);
+  case 4:
+    return pgp_parse_pgp3_key (buff, l);
+  default:
+    return NULL;
+  }
+}
+
+static int pgp_parse_pgp2_sig (unsigned char *buff, size_t l,
+                               pgp_key_t p, pgp_sig_t *s)
+{
+  unsigned char sigtype;
+  time_t sig_gen_time;
+  unsigned long signerid1;
+  unsigned long signerid2;
+  size_t j;
+  int i;
+
+  if (l < 22)
+    return -1;
+
+  j = 3;
+  sigtype = buff[j++];
+
+  sig_gen_time = 0;
+  for (i = 0; i < 4; i++)
+    sig_gen_time = (sig_gen_time << 8) + buff[j++];
+
+  signerid1 = signerid2 = 0;
+  for (i = 0; i < 4; i++)
+    signerid1 = (signerid1 << 8) + buff[j++];
+
+  for (i = 0; i < 4; i++)
+    signerid2 = (signerid2 << 8) + buff[j++];
+
+  
+  if (sigtype == 0x20 || sigtype == 0x28)
+    p->flags |= KEYFLAG_REVOKED;
+
+  if (s)
+  {
+    s->sigtype = sigtype;
+    s->sid1    = signerid1;
+    s->sid2    = signerid2;
+  }
+  
+  return 0;
+}
+
+static int pgp_parse_pgp3_sig (unsigned char *buff, size_t l,
+                               pgp_key_t p, pgp_sig_t *s)
+{
+  unsigned char sigtype;
+  unsigned char pkalg;
+  unsigned char hashalg;
+  unsigned char skt;
+  time_t sig_gen_time = -1;
+  long validity = -1;
+  long key_validity = -1;
+  unsigned long signerid1 = 0;
+  unsigned long signerid2 = 0;
+  size_t ml;
+  size_t j;
+  int i;
+  short ii;
+  short have_critical_spks = 0;
+
+  if (l < 7)
+    return -1;
+
+  j = 2;
+
+  sigtype = buff[j++];
+  pkalg = buff[j++];
+  hashalg = buff[j++];
+
+  for (ii = 0; ii < 2; ii++)
+  {
+    size_t skl;
+    size_t nextone;
+
+    ml = (buff[j] << 8) + buff[j + 1];
+    j += 2;
+
+    if (j + ml > l)
+      break;
+
+    nextone = j;
+    while (ml)
+    {
+      j = nextone;
+      skl = buff[j++];
+      if (!--ml)
+       break;
+
+      if (skl >= 192)
+      {
+       skl = (skl - 192) * 256 + buff[j++] + 192;
+       if (!--ml)
+         break;
+      }
+
+      if ((int) ml - (int) skl < 0)
+       break;
+      ml -= skl;
+
+      nextone = j + skl;
+      skt = buff[j++];
+
+      switch (skt & 0x7f)
+      {
+       case 2:                 /* creation time */
+       {
+         if (skl < 4)
+           break;
+         sig_gen_time = 0;
+         for (i = 0; i < 4; i++)
+           sig_gen_time = (sig_gen_time << 8) + buff[j++];
+
+         break;
+       }
+       case 3:                 /* expiration time */
+       {
+         if (skl < 4)
+           break;
+         validity = 0;
+         for (i = 0; i < 4; i++)
+           validity = (validity << 8) + buff[j++];
+         break;
+       }
+       case 9:                 /* key expiration time */
+       {
+         if (skl < 4)
+           break;
+         key_validity = 0;
+         for (i = 0; i < 4; i++)
+           key_validity = (key_validity << 8) + buff[j++];
+         break;
+       }
+       case 16:                        /* issuer key ID */
+       {
+         if (skl < 8)
+           break;
+         signerid2 = signerid1 = 0;
+         for (i = 0; i < 4; i++)
+           signerid1 = (signerid1 << 8) + buff[j++];
+         for (i = 0; i < 4; i++)
+           signerid2 = (signerid2 << 8) + buff[j++];
+         
+         break;
+       }
+       case 10:                        /* CMR key */
+       break;
+       case 4:                         /* exportable */
+       case 5:                         /* trust */
+       case 6:                         /* regexp */
+       case 7:                         /* revocable */
+       case 11:                        /* Pref. symm. alg. */
+       case 12:                        /* revocation key */
+       case 20:                        /* notation data */
+       case 21:                        /* pref. hash */
+       case 22:                        /* pref. comp.alg. */
+       case 23:                        /* key server prefs. */
+       case 24:                        /* pref. key server */
+       default:
+       {
+         if (skt & 0x80)
+           have_critical_spks = 1;
+       }
+      }
+    }
+    j = nextone;
+  }
+
+  if (sigtype == 0x20 || sigtype == 0x28)
+    p->flags |= KEYFLAG_REVOKED;
+  if (key_validity != -1 && time (NULL) > p->gen_time + key_validity)
+    p->flags |= KEYFLAG_EXPIRED;
+  if (have_critical_spks)
+    p->flags |= KEYFLAG_CRITICAL;
+
+  if (s)
+  {
+    s->sigtype = sigtype;
+    s->sid1    = signerid1;
+    s->sid2    = signerid2;
+  }
+
+  
+  return 0;
+
+}
+
+
+static int pgp_parse_sig (unsigned char *buff, size_t l,
+                          pgp_key_t p, pgp_sig_t *sig)
+{
+  if (!buff || l < 2 || !p)
+    return -1;
+
+  switch (buff[1])
+  {
+  case 2:
+  case 3:
+    return pgp_parse_pgp2_sig (buff, l, p, sig);      
+  case 4:
+    return pgp_parse_pgp3_sig (buff, l, p, sig);
+  default:
+    return -1;
+  }
+}
+
+/* parse one key block, including all subkeys. */
+
+static pgp_key_t pgp_parse_keyblock (FILE * fp)
+{
+  unsigned char *buff;
+  unsigned char pt = 0;
+  unsigned char last_pt;
+  size_t l;
+  short err = 0;
+
+#ifdef HAVE_FGETPOS
+  fpos_t pos;
+#else
+  long pos;
+#endif
+
+  pgp_key_t root = NULL;
+  pgp_key_t *last = &root;
+  pgp_key_t p = NULL;
+  pgp_uid_t *uid = NULL;
+  pgp_uid_t **addr = NULL;
+  pgp_sig_t **lsig = NULL;
+
+  FGETPOS(fp,pos);
+  
+  while (!err && (buff = pgp_read_packet (fp, &l)) != NULL)
+  {
+    last_pt = pt;
+    pt = buff[0] & 0x3f;
+
+    /* check if we have read the complete key block. */
+    
+    if ((pt == PT_SECKEY || pt == PT_PUBKEY) && root)
+    {
+      FSETPOS(fp, pos);
+      return root;
+    }
+    
+    switch (pt)
+    {
+      case PT_SECKEY:
+      case PT_PUBKEY:
+      case PT_SUBKEY:
+      case PT_SUBSECKEY:
+      {
+       if (!(*last = p = pgp_parse_keyinfo (buff, l)))
+       {
+         err = 1;
+         break;
+       }
+
+       last = &p->next;
+       addr = &p->address;
+       lsig = &p->sigs;
+       
+       if (pt == PT_SUBKEY || pt == PT_SUBSECKEY)
+       {
+         p->flags |= KEYFLAG_SUBKEY;
+         if (p != root)
+         {
+           p->parent  = root;
+           p->address = pgp_copy_uids (root->address, p);
+           while (*addr) addr = &(*addr)->next;
+         }
+       }
+       
+       if (pt == PT_SECKEY || pt == PT_SUBSECKEY)
+         p->flags |= KEYFLAG_SECRET;
+
+       break;
+      }
+
+      case PT_SIG:
+      {
+       if (lsig)
+       {
+         pgp_sig_t *signature = safe_calloc (sizeof (pgp_sig_t), 1);
+         *lsig = signature;
+         lsig = &signature->next;
+         
+         pgp_parse_sig (buff, l, p, signature);
+       }
+       break;
+      }
+
+      case PT_TRUST:
+      {
+       if (p && (last_pt == PT_SECKEY || last_pt == PT_PUBKEY ||
+                 last_pt == PT_SUBKEY || last_pt == PT_SUBSECKEY))
+       {
+         if (buff[1] & 0x20)
+         {
+           p->flags |= KEYFLAG_DISABLED;
+         }
+       }
+       else if (last_pt == PT_NAME && uid)
+       {
+         uid->trust = buff[1];
+       }
+       break;
+      }
+      case PT_NAME:
+      {
+       char *chr;
+
+
+       if (!addr)
+         break;
+
+       chr = safe_malloc (l);
+       memcpy (chr, buff + 1, l - 1);
+       chr[l - 1] = '\0';
+
+
+       *addr = uid = safe_calloc (1, sizeof (pgp_uid_t)); /* XXX */
+       uid->addr = chr;
+       uid->parent = p;
+       uid->trust = 0;
+       addr = &uid->next;
+       lsig = &uid->sigs;
+       
+       /* the following tags are generated by
+        * pgp 2.6.3in.
+        */
+
+       if (strstr (chr, "ENCR"))
+         p->flags |= KEYFLAG_PREFER_ENCRYPTION;
+       if (strstr (chr, "SIGN"))
+         p->flags |= KEYFLAG_PREFER_SIGNING;
+
+       break;
+      }
+    }
+
+    FGETPOS(fp,pos);
+  }
+
+  if (err)
+    pgp_free_key (&root);
+  
+  return root;  
+}
+
+static int pgpring_string_matches_hint (const char *s, const char *hints[], int nhints)
+{
+  int i;
+
+  if (!hints || !nhints)
+    return 1;
+
+  for (i = 0; i < nhints; i++)
+  {
+    if (mutt_stristr (s, hints[i]) != NULL)
+      return 1;
+  }
+
+  return 0;
+}
+
+/* 
+ * Go through the key ring file and look for keys with
+ * matching IDs.
+ */
+
+static void pgpring_find_candidates (char *ringfile, const char *hints[], int nhints)
+{
+  FILE *rfp;
+#ifdef HAVE_FGETPOS
+  fpos_t pos, keypos;
+#else
+  long pos, keypos;
+#endif
+
+  unsigned char *buff = NULL;
+  unsigned char pt = 0;
+  size_t l = 0;
+
+  short err = 0;
+  
+  if ((rfp = fopen (ringfile, "r")) == NULL)
+  {
+    char *error_buf;
+    size_t error_buf_len;
+
+    error_buf_len = sizeof ("fopen: ") - 1 + strlen (ringfile) + 1;
+    error_buf = safe_malloc (error_buf_len);
+    snprintf (error_buf, error_buf_len, "fopen: %s", ringfile);
+    perror (error_buf);
+    FREE (&error_buf);
+    return;
+  }
+
+  FGETPOS(rfp,pos);
+  FGETPOS(rfp,keypos);
+
+  while (!err && (buff = pgp_read_packet (rfp, &l)) != NULL)
+  {
+    pt = buff[0] & 0x3f;
+    
+    if (l < 1)
+      continue;
+    
+    if ((pt == PT_SECKEY) || (pt == PT_PUBKEY))
+    {
+      keypos = pos;
+    }
+    else if (pt == PT_NAME)
+    {
+      char *tmp = safe_malloc (l);
+
+      memcpy (tmp, buff + 1, l - 1);
+      tmp[l - 1] = '\0';
+
+      /* mutt_decode_utf8_string (tmp, chs); */
+
+      if (pgpring_string_matches_hint (tmp, hints, nhints))
+      {
+       pgp_key_t p;
+
+       FSETPOS(rfp, keypos);
+
+       /* Not bailing out here would lead us into an endless loop. */
+
+       if ((p = pgp_parse_keyblock (rfp)) == NULL)
+         err = 1;
+       
+       pgpring_dump_keyblock (p);
+       pgp_free_key (&p);
+      }
+
+      FREE (&tmp);
+    }
+
+    FGETPOS(rfp,pos);
+  }
+
+  fclose (rfp);
+
+}
+
+static void print_userid (const char *id)
+{
+  for (; id && *id; id++)
+  {
+    if (*id >= ' ' && *id <= 'z' && *id != ':')
+      putchar (*id);
+    else
+      printf ("\\x%02x", (*id) & 0xff);
+  }
+}
+
+static void print_fingerprint (pgp_key_t p) 
+{
+  int i = 0;
+
+  printf ("fpr:::::::::");
+  for (i = 0; i < p->fp_len; i++)
+    printf ("%02X", p->fingerprint[i]);
+  printf (":\n");
+
+} /* print_fingerprint() */
+
+
+static void pgpring_dump_signatures (pgp_sig_t *sig)
+{
+  for (; sig; sig = sig->next)
+  {
+    if (sig->sigtype == 0x10 || sig->sigtype == 0x11 ||
+       sig->sigtype == 0x12 || sig->sigtype == 0x13)
+      printf ("sig::::%08lX%08lX::::::%X:\n",
+             sig->sid1, sig->sid2, sig->sigtype);
+    else if (sig->sigtype == 0x20)
+      printf ("rev::::%08lX%08lX::::::%X:\n",
+             sig->sid1, sig->sid2, sig->sigtype);
+  }
+}
+
+
+static char gnupg_trustletter (int t)
+{
+  switch (t)
+  {
+    case 1: return 'n';
+    case 2: return 'm';
+    case 3: return 'f';
+  }
+  return 'q';
+}
+
+static void pgpring_dump_keyblock (pgp_key_t p)
+{
+  pgp_uid_t *uid;
+  short first;
+  struct tm *tp;
+  time_t t;
+  
+  for (; p; p = p->next)
+  {
+    first = 1;
+
+    if (p->flags & KEYFLAG_SECRET)
+    {
+      if (p->flags & KEYFLAG_SUBKEY)
+       printf ("ssb:");
+      else
+       printf ("sec:");
+    }
+    else 
+    {
+      if (p->flags & KEYFLAG_SUBKEY)
+       printf ("sub:");
+      else
+       printf ("pub:");
+    }
+    
+    if (p->flags & KEYFLAG_REVOKED)
+      putchar ('r');
+    if (p->flags & KEYFLAG_EXPIRED)
+      putchar ('e');
+    if (p->flags & KEYFLAG_DISABLED)
+      putchar ('d');
+
+    for (uid = p->address; uid; uid = uid->next, first = 0)
+    {
+      if (!first)
+      {
+       printf ("uid:%c::::::::", gnupg_trustletter (uid->trust));
+       print_userid (uid->addr);
+       printf (":\n");
+      }
+      else
+      {
+       if (p->flags & KEYFLAG_SECRET)
+         putchar ('u');
+       else
+         putchar (gnupg_trustletter (uid->trust));
+
+       t = p->gen_time;
+       tp = gmtime (&t);
+
+       printf (":%d:%d:%s:%04d-%02d-%02d::::", p->keylen, p->numalg, p->keyid,
+               1900 + tp->tm_year, tp->tm_mon + 1, tp->tm_mday);
+       
+       print_userid (uid->addr);
+       printf ("::");
+
+       if(pgp_canencrypt(p->numalg))
+         putchar ('e');
+       if(pgp_cansign(p->numalg))
+         putchar ('s');
+       if (p->flags & KEYFLAG_DISABLED)
+         putchar ('D');
+       printf (":\n");
+
+       if (dump_fingerprints) 
+          print_fingerprint (p);
+      }
+      
+      if (dump_signatures)
+      {
+       if (first) pgpring_dump_signatures (p->sigs);
+       pgpring_dump_signatures (uid->sigs);
+      }
+    }
+  }
+}
+
+/*
+ * The mutt_gettext () defined in gettext.c requires iconv,
+ * so we do without charset conversion here.
+ */
+
+char *mutt_gettext (const char *message)
+{
+  return (char *)message;
+}
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644 (file)
index 0000000..517e9c0
--- /dev/null
@@ -0,0 +1,200 @@
+# Makefile for program source directory in GNU NLS utilities package.
+# Copyright (C) 1995-1997, 2000, 2001 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file file be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public License
+# but which still want to provide support for the GNU gettext functionality.
+# Please note that the actual code is *not* freely available.
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = @datadir@
+localedir = $(datadir)/locale
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
+
+CC = @CC@
+GMSGFMT = @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = @XGETTEXT@
+MSGMERGE = msgmerge
+
+DEFS = @DEFS@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+
+INCLUDES = -I.. -I$(top_srcdir)/intl
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+DISTFILES = Makefile.in.in POTFILES.in $(PACKAGE).pot \
+$(POFILES) $(GMOFILES)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+.SUFFIXES:
+.SUFFIXES: .c .o .po .pox .gmo .mo
+
+.c.o:
+       $(COMPILE) $<
+
+.po.pox:
+       $(MAKE) $(PACKAGE).pot
+       $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox
+
+.po.mo:
+       $(MSGFMT) -o $@ $<
+
+.po.gmo:
+       file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
+         && rm -f $$file && $(GMSGFMT) --statistics -o $$file $<
+
+
+all: all-@USE_NLS@
+
+all-yes: $(CATALOGS)
+all-no:
+
+.PHONY: ../keymap_alldefs.h
+../keymap_alldefs.h:
+       cd .. && $(MAKE) keymap_alldefs.h
+
+# Note: Target 'all' must not depend on target '$(srcdir)/$(PACKAGE).pot',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+$(srcdir)/$(PACKAGE).pot: $(POTFILES) $(srcdir)/POTFILES.in
+       $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
+         --add-comments --keyword=_ --keyword=N_ \
+         --files-from=$(srcdir)/POTFILES.in \
+       && test ! -f $(PACKAGE).po \
+          || ( rm -f $(srcdir)/$(PACKAGE).pot \
+               && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot )
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+       if test "$(PACKAGE)" = "gettext"; then \
+         $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+         $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
+                         $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
+       else \
+         : ; \
+       fi
+install-data-no: all
+install-data-yes: all
+       $(mkinstalldirs) $(DESTDIR)$(datadir)
+       @catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         lang=`echo $$cat | sed 's/\.gmo$$//'`; \
+         dir=$(localedir)/$$lang/LC_MESSAGES; \
+         $(mkinstalldirs) $(DESTDIR)$$dir; \
+         if test -r $$cat; then \
+           $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
+           echo "installing $$cat as $(DESTDIR)$$dir/$(PACKAGE).mo"; \
+         else \
+           $(INSTALL_DATA) $(srcdir)/$$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
+           echo "installing $(srcdir)/$$cat as" \
+                "$(DESTDIR)$$dir/$(PACKAGE).mo"; \
+         fi; \
+       done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+       catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         lang=`echo $$cat | sed 's/\.gmo$$//'`; \
+         rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \
+       done
+       if test "$(PACKAGE)" = "gettext"; then \
+         rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
+       else \
+         : ; \
+       fi
+
+check: all
+
+dvi info tags TAGS ID:
+
+mostlyclean:
+       rm -f core core.* *.pox $(PACKAGE).po *.new.po
+       rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+       rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+       rm -f $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+       $(MAKE) update-po
+       @$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: $(DISTFILES)
+       dists="$(DISTFILES)"; \
+       for file in $$dists; do \
+         if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
+         cp -p $$dir/$$file $(distdir); \
+       done
+
+update-po: Makefile
+       $(MAKE) $(PACKAGE).pot
+       if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; fi; \
+       cd $(srcdir); \
+       catalogs='$(GMOFILES)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         lang=`echo $$cat | sed 's/\.gmo$$//'`; \
+         echo "$$lang:"; \
+         if $(MSGMERGE) $$lang.po $(PACKAGE).pot -o $$lang.new.po; then \
+           mv -f $$lang.new.po $$lang.po; \
+         else \
+           echo "msgmerge for $$cat failed!"; \
+           rm -f $$lang.new.po; \
+         fi; \
+       done
+       $(MAKE) update-gmo
+
+update-gmo: Makefile $(GMOFILES)
+       @:
+
+Makefile: Makefile.in.in $(top_builddir)/config.status POTFILES.in
+       cd $(top_builddir) \
+         && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
+              $(SHELL) ./config.status
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644 (file)
index 0000000..0a570ee
--- /dev/null
@@ -0,0 +1,68 @@
+account.c
+addrbook.c
+alias.c
+attach.c
+browser.c
+buffy.c
+charset.c
+color.c
+commands.c
+compose.c
+crypt.c
+curs_lib.c
+curs_main.c
+edit.c
+editmsg.c
+flags.c
+handler.c
+headers.c
+help.c
+hook.c
+imap/auth.c
+imap/auth_anon.c
+imap/auth_cram.c
+imap/auth_gss.c
+imap/auth_login.c
+imap/auth_sasl.c
+imap/browse.c
+imap/command.c
+imap/imap.c
+imap/message.c
+imap/util.c
+init.c
+keymap.c
+keymap_alldefs.h
+lib.c
+main.c
+mbox.c
+menu.c
+mh.c
+muttlib.c
+mutt_socket.c
+mutt_ssl.c
+mx.c
+newsrc.c
+nntp.c
+pager.c
+parse.c
+pattern.c
+pgp.c
+pgpinvoke.c
+pgpkey.c
+pop.c
+pop_auth.c
+pop_lib.c
+postpone.c
+query.c
+recvattach.c
+recvcmd.c
+remailer.c
+rfc1524.c
+score.c
+send.c
+sendlib.c
+signal.c
+smime.c
+sort.c
+status.c
+thread.c
diff --git a/po/bg.gmo b/po/bg.gmo
new file mode 100644 (file)
index 0000000..2df565e
Binary files /dev/null and b/po/bg.gmo differ
diff --git a/po/bg.po b/po/bg.po
new file mode 100644 (file)
index 0000000..5fb37c2
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,4202 @@
+# This file was translated by Velko Hristov
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# Velko Hristov <hristov@informatik.hu-berlin.de>, 2003.
+#
+# todo: remailer, debugging, pipe, mailing list, clear & continue, subparts, captitalize,
+# todo: overflow, certfile
+# todo: matching - "ñúâïàäàùè" èëè "îòãîâàðÿùè íà"?
+msgid ""
+msgstr ""
+"Project-Id-Version: Mutt 1.5.5.1\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CP1251\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "Ïîòðåáèòåëñêî èìå íà %s: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "Ïàðîëà çà %s@%s: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Èçõîä"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Èçòð."
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Âúçñò."
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Èçáîð"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Ïîìîù"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr " àäðåñíàòà êíèãà íÿìà çàïèñè!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Ïñåâäîíèìè"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Ïñåâäîíèì çà àäðåñíàòà êíèãà:"
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "Âå÷å èìà çàïèñ çà òîçè ïñåâäîíèì!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr ""
+"Ïðåäóïðåæäåíèå: Òîçè ïñåâäîíèì ìîæå äà íå ðàáîòè. Æåëàåòå ëè äà ãî ïîïðàâèòå?"
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Àäðåñ:"
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr "Ãðåøêà: '%s' å íåâàëèäåí IDN."
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Èìå:"
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] Çàïèñ?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Çàïèñ âúâ ôàéë:"
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Ïñåâäîíèìúò å äîáàâåí."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Íÿìà øàáëîí ñ òîâà èìå. Æåëàåòå ëè äà ïðîäúëæèòå?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "Çàïèñúò \"compose\" â mailcap èçèñêâà %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "Ãðåøêà ïðè èçïúëíåíèåòî íà \"%s\"!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Ãðåøêà ïðè îòâàðÿíå íà ôàéëà çà ïðî÷èò íà çàãëàâíàòà èíôîðìàöèÿ."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Ãðåøêà ïðè îòâàðÿíå íà ôàéëà çà èçòðèâàíå íà çàãëàâíà èíôîðìàöèÿ."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr " mailcap ëèïñâà çàïèñ \"compose\" çà %s. Ñúçäàâàíå íà ïðàçåí ôàéë."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "Çàïèñúò \"edit\" â mailcap èçèñêâà %%s"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr " mailcap ëèïñâà çàïèñ \"edit\" çà %s"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr ""
+"Íå å íàìåðåíî ïîäõîäÿùî mailcap âïèñâàíå. Ïðèëîæåíèåòî å ïîêàçàíî êàòî òåêñò."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "Íåäåôèíèðàí MIME òèï. Ïðèëîæåíèåòî íå ìîæå äà áúäå ïîêàçàíî."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Ôèëòúðúò íå ìîæå äà áúäå ñúçäàäåí"
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Ãðåøêà ïðè ñúçäàâàíåòî íà ôèëòúð"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "Ãðåøêà ïðè çàïèñ!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Íåâúçìîæíî îòïå÷àòâàíå!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Äèðåêòîðèÿ"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Ìàñêà"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s íå å äèðåêòîðèÿ."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Ïîùåíñêè êóòèè [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Àáîíèðàí [%s], Ôàéëîâà ìàñêà: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Äèðåêòîðèÿ [%s], Ôàéëîâà ìàñêà: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Íå ìîæå äà ïðèëàãàòå äèðåêòîðèÿ!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Íÿìà ôàéëîâå, îòãîâàðÿùè íà ìàñêàòà"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Ñàìî IMAP ïîùåíñêè êóòèè ìîãàò äà áúäàò ñúçäàâàíè"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Ñàìî IMAP ïîùåíñêè êóòèè ìîãàò äà áúäàò èçòðèâàíè"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Äåéñòâèòåëíî ëè æåëàåòå äà èçòðèåòå ïîùåíñêàòà êóòèÿ \"%s\"?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "Ïîùåíñêàòà êóòèÿ å èçòðèòà."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "Ïîùåíñêàòà êóòèÿ íå å èçòðèòà."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Ñìÿíà íà äèðåêòîðèÿòà: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Ãðåøêà ïðè ÷åòåíå íà äèðåêòîðèÿòà."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Ôàéëîâà ìàñêà: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr ""
+"Îáðàòíî ïîäðåæäàíå ïî äàòà(d), àçáó÷åí ðåä(a), ðàçìåð(z) èëè áåç ïîäðåæäàíå"
+"(n)?"
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr ""
+"Ïîäðåæäàíå ïî äàòà(d), àçáó÷åí ðåä(a), ðàçìåð(z) èëè áåç ïîäðåæäàíå(n)?"
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "dazn"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Íîâî èìå çà ôàéëà: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Äèðåêòîðèÿòà íå ìîæå äà áúäå ïîêàçàíà"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Ãðåøêà ïðè ïîêàçâàíåòî íà ôàéëà"
+
+#: buffy.c:442
+msgid "New mail in "
+msgstr "Íîâè ïèñìà â "
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: òåðìèíàëúò íå ïîääúðæà öâåòîâå"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: íÿìà òàêúâ öâÿò"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: íÿìà òàêúâ îáåêò"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: êîìàíäàòà å âàëèäíà ñàìî çà èíäåêñåí îáåêò"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: íåäîñòàòú÷íî àðãóìåíòè"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Ëèïñâàùè àðãóìåíòè."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: íåäîñòàòú÷íî àðãóìåíòè"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: íåäîñòàòú÷íî àðãóìåíòè"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: íÿìà òàêúâ àòðèáóò"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "íåäîñòàòú÷íî àðãóìåíòè"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "òâúðäå ìíîãî àðãóìåíòè"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "ñòàíäàðòíèòå öâåòîâå íå ñå ïîääúðæàò"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "Æåëàåòå ëè äà ïîòâúðäèòå èñòèííîñòòà íà PGP-ïîäïèñà?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Íåâúçìîæíî ñúçäàâàíåòî íà âðåìåíåí ôàéë!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Ôèëòúðúò íå ìîæå äà áúäå ñúçäàäåí"
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "Ïèñìîòî íå ìîæå äà áúäå êîïèðàíî."
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr "S/MIME-ïîäïèñúò å ïîòâúðäåí óñïåøíî."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr "Ïðèòåæàòåëÿò íà S/MIME ñåðòèôèêàòà íå ñúâïàäà ñ ïîäàòåëÿ íà ïèñìîòî."
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr "S/MIME-ïîäïèñúò ÍÅ å ïîòâúðäåí óñïåøíî."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "PGP-ïîäïèñúò å ïîòâúðäåí óñïåøíî."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "PGP-ïîäïèñúò ÍÅ å ïîòâúðäåí óñïåøíî."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Êîìàíäà: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Ïðåïðàùàíå íà ïèñìîòî êúì: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Ïðåïðàùàíå íà ìàðêèðàíèòå ïèñìà êúì: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "Ãðåøêà ïðè ðàç÷èòàíå íà àäðåñúò!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr "Ëîø IDN: '%s'"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Ïðåïðàùàíå íà ïèñìîòî êúì %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Ïðåïðàùàíå íà ïèñìîòî êúì %s"
+
+#: commands.c:294 recvcmd.c:192
+msgid "Message not bounced."
+msgstr "Ïèñìîòî íå å ïðåïðàòåíî."
+
+#: commands.c:294 recvcmd.c:192
+msgid "Messages not bounced."
+msgstr "Ïèñìàòà íå ñà ïðåïðàòåíè."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Ïèñìîòî å ïðåïðàòåíî."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Ïèñìàòà ñà ïðåïðàòåíè."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "Ãðåøêà ïðè ñúçäàâàíåòî íà ôèëòúð"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Èçïðàùàíå êúì êîìàíäà (pipe): "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "Íå å äåôèíèðàíà êîìàíäà çà îòïå÷àòâàíå"
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "Æåëàåòå ëè äà îòïå÷àòàòå ïèñìîòî?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Æåëàåòå ëè äà îòïå÷àòàòå ìàðêèðàíèòå ïèñìà?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "Ïèñìîòî å îòïå÷àòàíî"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Ïèñìàòà ñà îòïå÷àòàíè"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "Ïèñìîòî íå å îòïå÷àòàíî"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "Ïèñìàòà íå ñà îòïå÷àòàíè"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Îáðàòíî ïîäðåæäàíå ïî: äàòà íà èçïðàùàíå(d)/îò(f)/äàòà íà ïîëó÷àâàíå(r)/òåìà"
+"(s)/ïîëó÷àòåë(o)/íèøêà(t)/áåç ïîäðåæäàíå(u)/ðàçìåð(z)/âàæíîñò(c)?: "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Ïîäðåæäàíå ïî: äàòà íà èçïðàùàíå(d)/îò(f)/äàòà íà ïîëó÷àâàíå(r)/òåìà(s)/"
+"ïîëó÷àòåë(o)/íèøêà(t)/áåç ïîäðåæäàíå(u)/ðàçìåð(z)/âàæíîñò(c)?: "
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dfrsotuzc"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Øåë êîìàíäà: "
+
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "Äåêîäèðàíå è çàïèñ íà%s â ïîùåíñêà êóòèÿ"
+
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "Äåêîäèðàíå è êîïèðàíå íà%s â ïîùåíñêà êóòèÿ"
+
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "Äåøèôðèðàíå è çàïèñ íà%s â ïîùåíñêà êóòèÿ"
+
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "Äåøèôðèðàíå è çàïèñ íà%s â ïîùåíñêà êóòèÿ"
+
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "Çàïèñ íà%s â ïîùåíñêà êóòèÿ"
+
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "Êîïèðàíå íà%s â ïîùåíñêà êóòèÿ"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " ìàðêèðàí"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Ñúçäàâàíå íà êîïèå â %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "Æåëàåòå ëè äà ãî êîíâåðòèðàòå äî %s ïðè èçïðàùàíå?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Content-Type å ïðîìåíåí íà %s."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "Êîäîâàòà òàáëèöà å ïðîìåíåíà íà %s; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "íå å êîíâåðòèðàíî"
+
+#: commands.c:914
+msgid "converting"
+msgstr "êîíâåðòèðàíî"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Íÿìà ïðèëîæåíèÿ."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Èçïðàùàíå"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Îòêàç"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Ïðèëàãàíå íà ôàéë"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Îïèñàíèå"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Ïîäïèñ, Øèôðîâàíå"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Øèôðîâàíå"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Ïîäïèñ"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Îáèêíîâåí òåêñò"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " ïîäïèñ êàòî: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<ïî ïîäðàçáèðàíå>"
+
+#: compose.c:149
+msgid "Encrypt with: "
+msgstr "Øèôðîâàíå c: "
+
+#: compose.c:165
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"PGP øèôðîâàíå(e), ïîäïèñ(s), ïîäïèñ êàòî(a), è äâåòå(b) èëè áåç òÿõ(f)?"
+
+#: compose.c:166
+msgid "esabf"
+msgstr "esabf"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Ïîäïèñ êàòî: "
+
+#: compose.c:227
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"S/MIME øèôðîâàíå(e), ïîäïèñ(s), øèôðîâàíå ñ(w), ïîäïèñ êàòî(a), è äâåòå(b) "
+"èëè áåç òÿõ(f)?"
+
+#: compose.c:228
+msgid "eswabf"
+msgstr "eswabf"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, èëè îòêàç(f)? "
+
+#: compose.c:238
+msgid "12345f"
+msgstr "12345f"
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] âå÷å íå ñúùåñòâóâà!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] å ïðîìåíåíî. Æåëàåòå ëè äà îïðåñíèòå êîäèðàíåòî?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Ïðèëîæåíèÿ"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr "Ïðåäóïðåæäåíèå: '%s' å íåâàëèäåí IDN."
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Íå ìîæå äà èçòðèåòå åäèíñòâåíàòà ÷àñò íà ïèñìîòî."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr "Ëîø IDN â \"%s\": '%s'"
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "Ïðèëàãàíå íà èçáðàíèòå ôàéëîâå..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "Ïðèëàãàíåòî íà %s å íåâúçìîæíî!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Îòâàðÿíå íà ïîùåíñêà êóòèÿ, îò êîÿòî äà áúäå ïðèëîæåíî ïèñìî"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr " òàçè êóòèÿ íÿìà ïèñìà."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Ìàðêèðàéòå ïèñìàòà, êîèòî èñêàòå äà ïðèëîæèòå!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Ïðèëàãàíåòî å íåâúçìîæíî!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "Ïðîìÿíàòà íà êîäèðàíåòî çàñÿãà ñàìî òåêñòîâèòå ïðèëîæåíèÿ."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "Òîâà ïðèëîæåíèå íÿìà äà áúäå ïðåêîäèðàíî."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "Òîâà ïðèëîæåíèå ùå áúäå ïðåêîäèðàíî."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Èçáðàíî å íåâàëèäíî êîäèðàíå."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Æåëàåòå ëè äà çàïàçèòå êîïèå îò òîâà ïèñìî?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Ïðåèìåíóâàíå â: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "Ãðåøêà ïðè îòâàðÿíå íà %s: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Íîâ ôàéë: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Ïîëåòî Content-Type èìà ôîðìàòà áàçîâ-òèï/ïîäòèï"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Íåïîçíàò Content-Type %s"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Ãðåøêà ïðè ñúçäàâàíå íà ôàéëà %s"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "Ãðåøêà ïðè ñúçäàâàíå íà ïðèëîæåíèåòî"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Æåëàåòå ëè äà çàïèøåòå ÷åðíîâàòà?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Çàïèñ íà ïèñìîòî â ïîùåíñêà êóòèÿ"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Çàïèñâàíå íà ïèñìîòî â %s ..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "Ïèñìîòî å çàïèñàíî."
+
+#: compose.c:1317
+#, fuzzy
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr "S/MIME-øèôðîâàíå âå÷å å èçáðàíî. Clear & continue? "
+
+#: compose.c:1342
+#, fuzzy
+msgid "PGP already selected. Clear & continue ? "
+msgstr "PGP-øèôðîâàíå âå÷å å èçáðàíî. Clear & continue? "
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr " (òåêóùî âðåìå: %c)"
+
+#: crypt.c:71
+#, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- ñëåäâà ðåçóëòàòúò%s) --]\n"
+
+#: crypt.c:86
+msgid "Passphrase(s) forgotten."
+msgstr "Ïàðîëèòå ñà çàáðàâåíè."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Âúâåæäàíå íà PGP ïàðîëà:"
+
+#: crypt.c:147
+msgid "Enter SMIME passphrase:"
+msgstr "Âúâåæäàíå íà SMIME ïàðîëà:"
+
+#: crypt.c:192
+msgid "Create a traditional (inline) PGP message?"
+msgstr ""
+"Æåëàåòå ëè äà ñúçäàäåòå òðàäèöèîííî PGP ïèñìî? (PGP ÷àñòòà å âìúêíàòà, à íå "
+"ïðèëîæåíà)"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "Ñòàðòèðàíå íà PGP..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr "S/MIME ïèñìà áåç óêàçàíèå çà ñúäúðæàíèåòî èì íå ñå ïîääúðæàò."
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr "Îïèò çà èçâëè÷àíå íà PGP êëþ÷îâå...\n"
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr "Îïèò çà èçâëè÷àíå íà S/MIME ñåðòèôèêàòè...\n"
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- Ãðåøêà: Ïðîòèâîðå÷èâà multipart/signed ñòðóêòóðà! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- Ãðåøêà: Íåïîçíàò multipart/signed ïðîòîêîë %s! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Ïðåäóïðåæäåíèå: %s/%s-ïîäïèñè íå ìîãàò äà áúäàò ïðîâåðÿâàíè. --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- Ñëåäíèòå äàííè ñà ïîäïèñàíè --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Ïðåäóïðåæäåíèå: íå ìîãàò äà áúäàò íàìåðåíè ïîäïèñè. --]\n"
+"\n"
+
+#: crypt.c:924
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Êðàé íà ïîäïèñàíèòå äàííè --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "yes"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "no"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Æåëàåòå ëè äà íàïóñíåòå mutt?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "íåïîçíàòà ãðåøêà"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Íàòèñíåòå íÿêîé êëàâèø..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " (èçïîëçâàéòå'?' çà èçáîð îò ñïèñúê): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Íÿìà îòâîðåíà ïîùåíñêà êóòèÿ."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Íÿìà ïèñìà."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "Òàçè ïîùåíñêà êóòèÿ å ñàìî çà ÷åòåíå."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "Òàçè ôóíêöèÿ íå ìîæå äà ñå èçïúëíè ïðè ïðèëàãàíå íà ïèñìà."
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "Íÿìà âèäèìè ïèñìà."
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr ""
+"Ðåæèìúò íà çàùèòåíàòà îò çàïèñ ïîùåíñêà êóòèÿ íå ìîæå äà áúäå ïðîìåíåí!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "Ïðîìåíèòå â òàçè ïîùåíñêà êóòèÿ ùå áúäàò çàïèñàíè ïðè íàïóñêàíåòî é."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Ïðîìåíèòå â òàçè ïîùåíñêà êóòèÿ íÿìà äà áúäàò çàïèñàíè."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Èçõîä"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Çàïèñ"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Íîâî"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Îòãîâîð"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Ãðóï. îòã."
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr ""
+"Ïîùåíñêàòà êóòèÿ å ïðîìåíåíà îò äðóãà ïðîãðàìà. Ìàðêèðîâêèòå ìîæå äà ñà "
+"îñòàðåëè."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Íîâè ïèñìà â òàçè ïîùåíñêà êóòèÿ."
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "Ïîùåíñêàòà êóòèÿ å ïðîìåíåíà îò äðóãà ïðîãðàìà."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Íÿìà ìàðêèðàíè ïèñìà."
+
+#: curs_main.c:653 menu.c:896
+msgid "Nothing to do."
+msgstr "Íÿìà êàêâî äà ñå ïðàâè."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Ñêîê êúì ïèñìî íîìåð: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "Àðãóìåíòúò òðÿáâà äà áúäå íîìåð íà ïèñìî."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Òîâà ïèñìî íå å âèäèìî."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Ãðåøåí íîìåð íà ïèñìî."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Èçòðèâàíå íà ïèñìà ïî øàáëîí: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "Íÿìà àêòèâåí îãðàíè÷èòåëåí øàáëîí."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Îãðàíè÷àâàíå: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Îãðàíè÷àâàíå äî ïèñìàòà, îòãîâàðÿùè íà: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Æåëàåòå ëè äà íàïóñíåòå mutt?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Ìàðêèðàíå íà ïèñìàòà, îòãîâàðÿùè íà: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Âúçñòàíîâÿâàíå íà ïèñìàòà, îòãîâàðÿùè íà: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Ïðåìàõâàíå íà ìàðêèðîâêàòà îò ïèñìàòà, îòãîâàðÿùè íà: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Îòâàðÿíå íà ïîùåíñêàòà êóòèÿ ñàìî çà ÷åòåíå"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Îòâàðÿíå íà ïîùåíñêà êóòèÿ"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s íå å ïîùåíñêà êóòèÿ."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Æåëàåòå ëè äà íàïóñíåòå Mutt áåç äà çàïèøåòå ïðîìåíèòå?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Òîâà å ïîñëåäíîòî ïèñìî."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Íÿìà âúçñòàíîâåíè ïèñìà."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Òîâà å ïúðâîòî ïèñìî."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "Òúðñåíåòî å çàïî÷íàòî îòãîðå."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "Òúðñåíåòî å çàïî÷íàòî îòäîëó."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Íÿìà íîâè ïèñìà."
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Íÿìà íåïðî÷åòåíè ïèñìà"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " â òîçè îãðàíè÷åí èçãëåä"
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "Íå ìîæå äà áúäå ïðîìåíÿíà ìàðêèðîâêàòà 'important' íà POP ñúðâúð."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Íÿìà ïîâå÷å íèøêè."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Òîâà å ïúðâàòà íèøêà."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "Ïîêàçâàíåòî íà íèøêè íå å âêëþ÷åíî."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "Íèøêàòà ñúäúðæà íåïðî÷åòåíè ïèñìà."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "Ðåäàêòèðàíåòî íà ïèñìî íà POP ñúðâúð íå å âúçìîæíî."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tâìúêâàíå íà ðåä, çàïî÷âàù ñ åäèí ~\n"
+"~b àäðåñ\täîáàâÿíå íà ïîëó÷àòåëè íà êîïèå (Cc) îò ïèñìîòî:\n"
+"~c àäðåñè\täîáàâÿíå íà ïîëó÷àòåëè íà ñëÿïî êîïèå (Bcc) îò ïèñìîòî:\n"
+"~f ïèñìà\tâêëþ÷âàíå íà ïèñìà\n"
+"~F ïèñìà\tñúùîòî êàòî ~f, ñ èçêëþ÷åíèå íà òîâà, ÷å ñà âêëþ÷åíè è çàãëàâíèòå "
+"÷àñòè\n"
+"~h\t\tðåäàêòèðàíå íà çàãëàâíàòà ÷àñò\n"
+"~m ïèñìà\tâêëþ÷âàíå è öèòèðàíå íà ïèñìà\n"
+"~M ïèñìà\tñúùîòî êàòî ~m, ñ èçêëþ÷åíèå íà òîâà, ÷å ñà âêëþ÷åíè è çàãëàâíèòå "
+"÷àñòè\n"
+"~p\t\tîòïå÷àòâàíå íà ïèñìîòî\n"
+"~q\t\tçàïèñ íà ôàéëà è çàòâàðÿíå íà ðåäàêòîðà\n"
+"~r ôàéë\t\tîòâàðÿíå íà ôàéëà â ðåäàêòîðà\n"
+"~t àäðåñè\täîáàâÿíå íà àäðåñè êúì ïîëåòî To:\n"
+"~u\t\tïîâòîðíî ðåäàêòèðàíå íà ïîñëåäíèÿ ðåä\n"
+"~v\t\tðåäàêòèðàíå íà ïèñìîòî ñ ðåäàêòîðà $visual\n"
+"~w ôàéë\t\tçàïèñ íà ïèñìîòî âúâ ôàéë\n"
+"~x\t\tîòõâúðëÿíå íà ïðîìåíèòå è èçõîä îò ðåäàêòîðà\n"
+"~?\t\tòîâà ïèñìî\n"
+".\t\tñàìà íà ðåä îçíà÷àâà êðàé íà ïèñìîòî\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: íåâàëèäåí íîìåð íà ïèñìî.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Çà êðàé íà ïèñìîòî âúâåäåòå . êàòî åäèíñòâåí ñèìâîë íà ðåäà)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "Íÿìà ïîùåíñêà êóòèÿ.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Ïèñìîòî ñúäúðæà:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(ïî-íàòàòúê)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "ëèïñâà èìå íà ôàéë.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr " ïèñìîòî íÿìà ðåäîâå.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr "Ëîø IDN â %s: '%s'\n"
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: íåïîçíàòà êîìàíäà íà ðåäàêòîðà  (èçïîëçâàéòå~? çà ïîìîù)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "ãðåøêà ïðè ñúçäàâàíå íà âðåìåííà ïîùåíñêà êóòèÿ: %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "ãðåøêà ïðè çàïèñ âúâ âðåìåííàòà ïîùåíñêà êóòèÿ: %s"
+
+#: editmsg.c:101
+#, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "ãðåøêà ïðè ñúêðàùàâàíåòî íà âðåìåííàòà ïîùåíñêà êóòèÿ: %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "Ôàéëúò ñ ïèñìîòî å ïðàçåí!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "Ïèñìîòî å íåïðîìåíåíî!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "Ãðåøêà ïðè îòâàðÿíå íà ôàéëà: %s"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Ãðåøêà ïðè äîáàâÿíåòî íà ïèñìî êúì ïîùåíñêàòà êóòèÿ: %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Ãðåøêà. Çàïàçâàíå íà âðåìåííèÿ ôàéë: %s"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Ïîñòàâÿíå íà ìàðêèðîâêà"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Èçòðèâàíå íà ìàðêèðîâêà"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[-- Ãðåøêà: Íåâúçìîæíî å ïîêàçâàíåòî íà êîÿòî è äà å îò àëòåðíàòèâíèòå ÷àñòè "
+"íà ïèñìîòî --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Ïðèëîæåíèå: #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Òèï: %s/%s, Êîäèðàíå: %s, Ðàçìåð: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Àâòîìàòè÷íî ïîêàçâàíå ïîñðåäñòâîì %s --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Àâòîìàòè÷íî ïîêàçâàíå ïîñðåäñòâîì: %s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- Ãðåøêà ïðè ñòàðòèðàíå íà %s. --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Ãðåøêè îò %s --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- Ãðåøêà: message/external-body íÿìà ïàðàìåòðè çà ìåòîä íà äîñòúï --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Òîâà %s/%s ïðèëîæåíèå "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(ðàçìåð %s áàéòà) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "áå èçòðèòî --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- íà %s --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- èìå: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Òîâà %s/%s ïðèëîæåíèå íå å âêëþ÷åíî â ïèñìîòî, --]\n"
+
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr "[-- à ôàéëúò, îïðåäåëåí çà ïðèêà÷âàíå âå÷å íå ñúùåñòâóâà. --]\n"
+
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr "[-- à óêàçàíèÿò ìåòîä íà äîñòúï %s íå ñå ïîäúðæà. --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Ãðåøêà: multipart/signed áåç protocol ïàðàìåòúð."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Ãðåøêà: multipart/encrypted áåç protocol ïàðàìåòúð."
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Ãðåøêà ïðè îòâàðÿíå íà âðåìåííèÿ ôàéë!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s íå ñå ïîääúðæà"
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr " (èçïîëçâàéòå'%s' çà äà âèäèòå òàçè ÷àñò)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "('view-attachments' íÿìà êëàâèøíà êîìáèíàöèÿ!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: ãðåøêà ïðè ïðèëàãàíåòî íà ôàéë"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "ÃÐÅØÊÀ: ìîëÿ, ñúîáùåòå íè çà òàçè ãðåøêà"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<ÍÅÈÇÂÅÑÒÍÀ>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Îáùè êëàâèøíè êîìáèíàöèè:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Ôóíêöèè, áåç êëàâèøíà êîìáèíàöèÿ:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Ïîìîù çà %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: Íå ìîæå äà èçâúðøèòå unhook * îò hook."
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: íåïîçíàò hook òèï: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: Íå ìîæå äà èçòðèåòå %s îò %s."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "Íÿìà íàëè÷íè èäåíòèôèêàòîðè."
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Èäåíòèôèêàöèÿ (àíîíèìía)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "Íåóñïåøíà àíîíèìíà èäåíòèôèêàöèÿ."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Èäåíòèôèêàöèÿ (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "Íåóñïåøíà CRAM-MD5 èäåíòèôèêàöèÿ."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Èäåíòèôèöèðàíå (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "Íåóñïåøíà GSSAPI èäåíòèôèêàöèÿ."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "LOGIN å èçêëþ÷åí íà òîçè ñúðâúð."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Âêëþ÷âàíå..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "Íåóñïåøíî âêëþ÷âàíå."
+
+#: imap/auth_sasl.c:112
+#, c-format
+msgid "Authenticating (%s)..."
+msgstr "Èäåíòèôèöèðàíå (%s)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "Íåóñïåøíà SASL èäåíòèôèêàöèÿ."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "%s íå å âàëèäíà IMAP ïúòåêà"
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "Çàïèòâàíå çà namespaces..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Çàïèòâàíå çà ñïèñúêà îò ïîùåíñêè êóòèè..."
+
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "Íÿìà òàêàâà ïàïêà"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Ñúçäàâàíå íà ïîùåíñêà êóòèÿ: "
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "Ïîùåíñêàòà êóòèÿ òðÿáâà äà èìà èìå."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Ïîùåíñêàòà êóòèÿ å ñúçäàäåíà."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "Ïîùåíñêàòà êóòèÿ å çàòâîðåíà."
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Íåïîïðàâèìà ãðåøêà. Ðàçëè÷åí áðîé íà ñúîáùåíèÿòà!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "Çàòâàðÿíå íà âðúçêàòà êúì %s..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Òîçè IMAP-ñúðâúð å îñòàðÿë. Mutt íÿìà äà ðàáîòè ñ íåãî."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr "Ñúðâúðúò èçïðàòè íåî÷àêâàí îòãîâîð: %s"
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "Æåëàåòå ëè äà óñòàíîâèòå ñèãóðíà âðúçêà ñ TLS?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "Íå ìîæå äà áúäå óñòàíîâåíà TSL âðúçêà"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "Èçáèðàíå íà %s..."
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "Ãðåøêà ïðè îòâàðÿíå íà ïîùåíñêàòà êóòèÿ!"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Ãðåøêà ïðè äîáàâÿíåòî êúì IMAP ïîùåíñêèòå êóòèè íà òîçè ñúðâúð"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "Æåëàåòå ëè äà ñúçäàäåòå %s?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Çàòâàðÿíå íà âðúçêàòà êúì IMAP ñúðâúð..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "Ìàðêèðàíå íà %d ñúîáùåíèÿ çà èçòðèâàíå..."
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "Íåóñïåøíî ïðåìàõâàíå"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Çàïèñ íà ìàðêèðîâêèòå íà ïèñìîòî... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Ïðåìàõâàíå íà ñúîáùåíèÿòà îò ñúðâúðà..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbo: íåóñïåøåí EXPUNGE"
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "Íåóñïåøåí CLOSE"
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "Íåâàëèäíî èìå íà ïîùåíñêàòà êóòèÿ"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "Àáîíèðàíå çà %s..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "Îòïèñâàíå îò %s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr ""
+"Ãðåøêà ïðè ïîëó÷àâàíå íà çàãëàâíèòå ÷àñòè îò òàçè âåðñèÿ íà IMAP-ñúðâúðà."
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "Íåâúçìîæíî ñúçäàâàíåòî íà âðåìåíåí ôàéë %s"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Èçòåãëÿíå íà çàãëàâíèòå ÷àñòè... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Èçòåãëÿíå íà ïèñìî..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr ""
+"Íåâàëèäåí èíäåêñ íà ïèñìî. Îïèòàéòå äà îòâîðèòå îòíîâî ïîùåíñêàòà êóòèÿ."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Çàðåæäàíå íà ïèñìî íà ñúðâúðà ..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "Êîïèðàíå íà %d ñúîáùåíèÿ â %s..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "Êîïèðàíå íà %d-òî ñúîáùåíèå â %s..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "Æåëàåòå ëè äà ïðîäúëæèòå?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "alias: íÿìà àäðåñ"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr "Ïðåäóïðåæäåíèå: Ëîø IDN '%s' â ïñåâäîíèìà '%s'.\n"
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "íåâàëèäíî çàãëàâíî ïîëå"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: íåïîçíàò ìåòîä çà ñîðòèðàíå"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): ãðåøêà â ðåãóëÿðíèÿ èçðàç: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: íåïîçíàòà ïðîìåíëèâà"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "òîçè ïðåôèêñ íå å âàëèäåí ñ \"reset\""
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "òàçè ñòîéíîñò íå å âàëèäíà ñ \"reset\""
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s å âêëþ÷åí"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s å èçêëþ÷åí"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: íåâàëèäåí òèï íà ïîùåíñêàòà êóòèÿ"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: íåâàëèäíà ñòîéíîñò"
+
+#: init.c:1312
+#, c-format
+msgid "%s: Unknown type."
+msgstr "%s: Íåïîçíàò òèï."
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: íåïîçíàò òèï"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Ãðåøêà ïðè îòâàðÿíå íà %s: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s íå å îáèêíîâåí ôàéë."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Ãðåøêà â %s, ðåä %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: ãðåøêè â %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: âìúêâàíåòî å ïðåêúñíàòî ïîðàäè òâúðäå ìíîãî ãðåøêè â %s"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: ãðåøêà ïðè %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: òâúðäå ìíîãî àðãóìåíòè"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: íåïîçíàòà êîìàíäà"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Ãðåøêà â êîìàíäíèÿ ðåä: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "ëè÷íàòà Âè äèðåêòîðèÿ íå ìîæå äà áúäå íàìåðåíà"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "ïîòðåáèòåëñêîòî Âè èìå íå ìîæå äà áúäå óñòàíîâåíî"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Îòêðèò å öèêúë îò ìàêðîñè."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Íåäåôèíèðàíà êëàâèøíà êîìáèíàöèÿ."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Íåäåôèíèðàíà êëàâèøíà êîìáèíàöèÿ. Èçïîëçâàéòå '%s' çà ïîìîù."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: òâúðäå ìíîãî àðãóìåíòè"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s:  íÿìà òàêîâà ìåíþ"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "ïðàçíà ïîñëåäîâàòåëíîñò îò êëàâèøè"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: òâúðäå ìíîãî àðãóìåíòè"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: íåïîçíàòà ôóíêöèÿ"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: ïðàçíà ïîñëåäîâàòåëíîñò îò êëàâèøè"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: òâúðäå ìíîãî àðãóìåíòè"
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: ëèïñâàò àðãóìåíòè"
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s: íÿìà òàêàâà ôóíêöèÿ"
+
+#: keymap.c:912
+msgid "Enter keys (^G to abort): "
+msgstr "Âúâåäåòå êëþ÷îâå (^G çà ïðåêúñâàíå): "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr "Ñèìâîë = %s, Îñìè÷íî = %o, Äåñåòè÷íî = %d"
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "ïðàçíà ôóíêöèÿ"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr "êðàé íà óñëîâíîòî èçïúëíåíèå (noop)"
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "ïîêàçâà ïðèíóäèòåëíî ïðèëîæåíèåòî ñëåä òúðñåíå â mailcap"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "ïîêàçâà ïðèëîæåíèåòî êàòî òåêñò"
+
+#: keymap_alldefs.h:9
+#, fuzzy
+msgid "Toggle display of subparts"
+msgstr "ïîêàçâà/ñêðèâà ïîä÷àñòè"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "ïðèäâèæâàíå äî êðàÿ íà ñòðàíèöàòà"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "ïðåïðàùà ïèñìîòî íà äðóã àäðåñ"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "èçáîð íà íîâ ôàéë â òàçè äèðåêòîðèÿ"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "ðàçãëåæäàíå íà ôàéë"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "ïîêàçâà èìåòî íà òåêóùî ìàðêèðàíèÿ ôàéë"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "àáîíèðà òåêóùî èçáðàíàòà ïîùåíñêà êóòèÿ (ñàìî IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "îòïèñâà àáîíàìåíòà íà òåêóùî èçáðàíàòà ïîùåíñêà êóòèÿ (ñàìî IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "ïîêàçâà âñè÷êè èëè ñàìî àáîíèðàíèòå ïîùåíñêè êóòèè (ñàìî IMAP)"
+
+#: keymap_alldefs.h:18
+msgid "list mailboxes with new mail"
+msgstr "ïîêàçâà ïîùåíñêèòå êóòèè, ñúäúðæàùè íîâè ïèñìà."
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "ïðîìÿíà íà äèðåêòîðèèòå"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "ïðîâåðÿâà ïîùåíñêèòå êóòèè çà íîâè ïèñìà"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "ïðèëàãà ôàéë(îâå) êúì ïèñìîòî"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "ïðèëàãà ïèñìî êúì òîâà ïèñìî"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "ïðîìåíÿ ñïèñúêà íà ïîëó÷àòåëèòå íà ñëÿïî êîïèå îò ïèñìîòî (BCC)"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "ïðîìåíÿ ñïèñúêà íà ïîëó÷àòåëèòå íà êîïèå îò ïèñìîòî (CC)"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "ïðîìåíÿ îïèñàíèåòî íà ïðèëîæåíèåòî"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "ïðîìåíÿ êîäèðàíåòî íà ïðèëîæåíèåòî"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "èçáîð íà ôàéë, â êîéòî äà áúäå çàïèñàíî êîïèå îò òîâà ïèñìî"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "èçáîð íà ôàéë, êîéòî äà áúäå ïðèëîæåí"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "ïðîìåíÿ èçïðàùà÷à (From)"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "ðåäàêòèðà ïèñìî è çàãëàâíèòå ìó ïîëåòà"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "ðåäàêòèðà ïèñìî"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "ðåäàêòèðà ïðèëîæåíèå, ïîñðåäñòâîì âïèñâàíå â mailcap"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "ðåäàêòèðà ïîëó÷àòåëÿ íà îòãîâîð îò ïèñìîòî (Reply-To)"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "ðåäàêòèðà òåìàòà íà ïèñìî"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "ðåäàêòèðà ñïèñúêà íà ïîëó÷àòåëèòå"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "ñúçäàâà íîâà ïîùåíñêà êóòèÿ (ñàìî IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "ðåäàêòèðà òèïà íà ïðèëîæåíèåòî"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "ñúçäàâà âðåìåííî êîïèå íà ïðèëîæåíèåòî"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "èçâúðøâà ïðàâîïèñíà ïðîâåðêà íà ïèñìîòî ñ ispell"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "ñúçäàâà íà íîâî ïðèëîæåíèå, ñ èçïîëçâàíå íà âïèñâàíå â mailcap"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "âêëþ÷âà/èçêëþ÷âà ïðåêîäèðàíåòî íà òîâà ïðèëîæåíèå"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "çàïèñâà ïèñìîòî êàòî ÷åðíîâà çà ïî-êúñíî èçïðàùàíå"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "ïðîìåíÿ èìåòî èëè ïðåìåñòâàíå íà ïðèëîæåíèå"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "èçïðàùà ïèñìîòî"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "ïðåâêëþ÷âà ìåæäó âìúêíàò â ïèñìîòî èëè ïðèëîæåí ôàéë"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr ""
+"ïðåâêëþ÷âà ìåæäó ðåæèì íà èçòðèâàíå èëè çàïàçâàíå íà ôàéëà ñëåä èçïðàùàíå"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "àêòóàëèçèðà èíôîðìàöèÿòà çà êîäèðàíå íà ïðèëîæåíèåòî"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "çàïèñâà ïèñìîòî â ïîùåíñêà êóòèÿ"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "êîïèðà ïèñìî âúâ ôàéë/ïîùåíñêà êóòèÿ"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "âïèñâà ïîäàòåëÿ íà ïèñìîòî â àäðåñíàòà êíèãà"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "ïðåìåñòâà çàïèñà êúì äîëíèÿ êðàé íà åêðàíà"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "ïðåìåñòâà çàïèñà êúì ñðåäàòà íà åêðàíà"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "ïðåìåñòâà çàïèña êúì ãîðíèÿ êðàé íà åêðàíà"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "ñúçäàâà äåêîäèðàíî (text/plain) êîïèå"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "ñúçäàâàíå íà äåêîäèðàíî (text/plain) êîïèå íà ïèñìîòî è èçòðèâàíå"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "èçòðèâà èçáðàíèÿ çàïèñ"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "èçòðèâà òåêóùàòà ïîùåíñêà êóòèÿ (ñàìî IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "èçòðèâà âñè÷êè ïèñìà â ïîäíèøêàòà"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "èçòðèâà âñè÷êè ïèñìà â íèøêàòà"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "ïîêàçâà ïúëíèÿ àäðåñ íà ïîäàòåëÿ íà ïèñìîòî"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "ïîêàçâà ïèñìî è âêëþ÷âà/èçêëþ÷âà ïîêàçâàíåòî íà çàãëàâíèòå ÷àñòè"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "ïîêàçâà ïèñìî"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "ðåäàêòèðà íåîáðàáîòåíîòî ïèñìî"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "èçòðèâà ñèìâîëà ïðåä êóðñîðà"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "ïðåìåñòâà êóðñîðà ñ åäèí ñèìâîë íàëÿâî"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "ïðåìåñòâà êóðñîðà êúì íà÷àëîòî íà äóìàòà"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "ñêîê êúì íà÷àëîòî íà ðåäà"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "öèêëè÷íî ïðåâúðòàíå ìåæäó âõîäíèòå ïîùåíñêè êóòèè"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "äîïúëâà èìåòî íà ôàéë èëè íà ïñåâäîíèì"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "äîïúëâà àäðåñ ÷ðåç çàïèòâàíå"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "èçòðèâà ñèìâîëà ïîä êóðñîðà"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "ñêîê êúì êðàÿ íà ðåäà"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "ïðåìåñòâà êóðñîðà ñ åäèí ñèìâîë íàäÿñíî"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "ïðåìåñòâà êóðñîðà êúì êðàÿ íà äóìàòà"
+
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr "ïðåâúðòà íàäîëó â ñïèñúêà ñ èñòîðèÿòà"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "ïðåâúðòà íàãîðå â ñïèñúêà ñ èñòîðèÿòà"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "èçòðèâà ñèìâîëèòå îò êóðñîðà äî êðàÿ íà ðåäà"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "èçòðèâà ñèìâîëèòå îò êóðñîðà äî êðàÿ íà äóìàòà"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "èçòðèâà âñè÷êè ñèìâîëè íà ðåäà"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "èçòðèâà äóìàòà ïðåäè êóðñîðà"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "áóêâàëíî ïðèåìàíå íà ñëåäâàùèÿ êëàâèø"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "ðàçìåíÿ òåêóùèÿ ñèìâîë ñ ïðåäèøíèÿ"
+
+#: keymap_alldefs.h:83
+#, fuzzy
+msgid "capitalize the word"
+msgstr "capitalize the word"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "êîíâåðòèðàíå íà äóìàòà äî áóêâè îò äîëåí ðåãèñòúð"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "êîíâåðòèðàíå íà äóìàòà äî áóêâè îò ãîðåí ðåãèñòúð"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "âúâåæäàíå ía muttrc êîìàíäà"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "âúâåæäàíå íà ôàéëîâà ìàñêà"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "íàïóñêà òîâà ìåíþ"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "ôèëòðèðà ïðèëîæåíèåòî ïðåç êîìàíäà íà êîìàíäíèÿ èíòåðïðåòàòîð"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "ïðåìåñòâàíå êúì ïúðâèÿò çàïèñ"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "âêëþ÷âà/èçêëþ÷âà ìàðêèðîâêàòà çà âàæíîñò íà ïèñìîòî"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "ïðåïðàùà ïèñìî ñ êîìåíòàð"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "èçáèðà òåêóùèÿò çàïèñ"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "îòãîâîð íà âñè÷êè ïîëó÷àòåëè"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "ïðåâúðòà åêðàíà íàäîëó ñ 1/2 ñòðàíèöà"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "ïðåâúðòà åêðàíà íàãîðå ñ 1/2 ñòðàíèöà"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "òîçè åêðàí"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "ñêîê êúì èíäåêñåí íîìåð"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "ïðåìåñòâàíå êúì ïîñëåäíèÿò çàïèñ"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "îòãîâîð íà óêàçàíèÿ mailing list"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "èçïúëíÿâà ìàêðîñ"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "ñúçäàâà íîâî ïèñìî"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "îòâàðÿ äðóãà ïîùåíñêà êóòèÿ"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "îòâàðÿ äðóãà ïîùåíñêà êóòèÿ ñàìî çà ÷åòåíå"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "îòñòðàíÿâà ìàðêèðîâêàòà çà ñòàòóñ îò ïèñìî"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "èçòðèâà ïèñìà, îòãîâàðÿùè íà øàáëîí"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "èçòåãëÿ ïðèíóäèòåëíî ïèñìà îò IMAP ñúðâúð"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "èçòåãëÿ ïèñìà îò POP ñúðâúð"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "ïðåìåñòâàíå êúì ïúðâîòî ïèñìî"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "ïðåìåñòâàíå êúì ïîñëåäíîòî ïèñìî"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "ïîêàçâà ñàìî ïèñìà, îòãîâàðÿùè íà øàáëîí"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "ñêîê êúì ñëåäâàùîòî íîâî ïèñìî"
+
+#: keymap_alldefs.h:113
+msgid "jump to the next new or unread message"
+msgstr "ñêîê êúì ñëåäâàùîòî íîâî èëè íåïðî÷åòåíî ïèñìî"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "ñêîê êúì ñëåäâàùàòà ïîäíèøêà"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "ñêîê êúì ñëåäâàùàòà íèøêà"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "ïðåìåñòâàíå êúì ñëåäâàùîòî âúçñòàíîâåíî ïèñìî"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "ñêîê êúì ñëåäâàùîòî íåïðî÷åòåíî ïèñìî"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "ñêîê êúì ðîäèòåëñêîòî ïèñìî â íèøêàòà"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "ñêîê êúì ïðåäèøíàòà íèøêà"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "ñêîê êúì ïðåäèøíàòà ïîäíèøêà"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "ïðåìåñòâàíå êúì ïðåäèøíîòî âúçñòàíîâåíî ïèñìî"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "ñêîê êúì ïðåäèøíîòî íîâî ïèñìî"
+
+#: keymap_alldefs.h:123
+msgid "jump to the previous new or unread message"
+msgstr "ñêîê êúì ïðåäèøíîòî íîâî èëè íåïðî÷åòåíî ïèñìî"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "ñêîê êúì ïðåäèøíîòî íåïðî÷åòåíî ïèñìî"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "ìàðêèðà òåêóùàòà íèøêà êàòî ïðî÷åòåíà"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "ìàðêèðà òåêóùàòà ïîäíèøêà êàòî ïðî÷åòåíà"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "ïîñòàâÿ ìàðêèðîâêàòà çà ñòàòóñ íà ïèñìî"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "çàïèñâà ïðîìåíèòå â ïîùåíñêàòà êóòèÿ"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "ìàðêèðà ïèñìà, îòãîâàðÿùè íà øàáëîí"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "âúçñòàíîâÿâà ïèñìà, îòãîâàðÿùè íà øàáëîí"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "ïðåìàõâà ìàðêèðîâêàòà îò ïèñìà, îòãîâàðÿùè íà øàáëîí"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "ïðåìåñòâàíå êúì ñðåäàòà íà ñòðàíèöàòà"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "ïðåìåñòâàíå êúì ñëåäâàùèÿ çàïèñ"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "ïðåâúðòà íàäîëó ñ åäèí ðåä"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "ïðåìåñòâàíå êúì ñëåäâàùàòà ñòðàíèöà"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "ñêîê êúì êðàÿ íà ïèñìîòî"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "ïîêàçâà/ñêðèâà öèòèðàí òåêñò"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "ïðåñêà÷à öèòèðàíèÿ òåêñò"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "ñêîê êúì íà÷àëîòî íà ïèñìîòî"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "èçïðàùà ïèñìî èëè ïðèëîæåíèå êúì êîìàíäà íà êîìàíäíèÿ èíòåðïðåòàòîð"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "ïðåìåñòâàíå êúì ïðåäèøíèÿ çàïèñ"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "ïðåâúðòàíå íàãîðå ñ åäèí ðåä"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "ïðåìåñòâàíå êúì ïðåäèøíàòà ñòðàíèöà"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "îòïå÷àòâà òåêóùîòî ïèñìî"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "èçïðàùà çàïèòâàíå êúì âúíøíà ïðîãðàìà çà àäðåñ"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "äîáàâÿ ðåçóëòàòèòå îò çàïèòâàíåòî êúì äîñåãàøíèòå"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "çàïèñâà ïðîìåíèòå â ïîùåíñêàòà êóòèÿ è íàïóñêà ïðîãðàìàòà"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "ðåäàêòèðà ÷åðíîâà"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "èçòðèâà è ïðåðèñóâà åêðàíà"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{âúòðåøíî}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "îòãîâîð íà ïèñìî"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "èçïîëçâà òåêóùîòî ïèñìî êàòî øàáëîí çà íîâî"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "çàïèñâà ïèñìî èëè ïðèëîæåíèå âúâ ôàéë"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "òúðñåíå íà ðåãóëÿðåí èçðàç"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "òúðñåíå íà ðåãóëÿðåí èçðàç â îáðàòíàòà ïîñîêà"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "òúðñè ñëåäâàùîòî ïîïàäåíèå"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "òúðñè ñëåäâàùîòî ïîïàäåíèå â îáðàòíàòà ïîñîêà"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "âêëþ÷âà/èçêëþ÷âà îöâåòÿâàíåòî ïðè òúðñåíå"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "èçïúëíÿâà êîìàíäà â êîìàíäíèÿ èíòåðïðåòàòîð"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "ïîäðåæäà ïèñìàòà"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "ïîäðåæäà ïèñìàòà â îáðàòåí ðåä"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "ìàðêèðà òåêóùèÿò çàïèñ"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "ïðèëàãà ñëåäâàùàòà ôóíêöèÿ âúðõó ìàðêèðàíèòå ïèñìà"
+
+#: keymap_alldefs.h:164
+msgid "apply next function ONLY to tagged messages"
+msgstr "ïðèëàãà ñëåäâàùàòà ôóíêöèÿ ÑÀÌΠâúðõó ìàðêèðàíèòå ïèñìà"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "ìàðêèðà òåêóùàòà ïîäíèøêà"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "ìàðêèðà òåêóùàòà íèøêà"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "âêëþ÷âà/èçêëþ÷âà èíäèêàòîðà, äàëè ïèñìîòî å íîâî"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "âêëþ÷âà/èçêëþ÷âà ïðåçàïèñúò íà ïîùåíñêàòà êóòèÿ"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "ïðåâêëþ÷âà òúðñåíåòî ìåæäó ïîùåíñêè êóòèè èëè âñè÷êè ôàéëîâå"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "ïðåìåñòâàíå êúì íà÷àëîòî íà ñòðàíèöàòà"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "âúçñòàíîâÿâà òåêóùîòî ïèñìî"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "âúçñòàíîâÿâà âñè÷êè ïèñìà â íèøêàòà"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "âúçñòàíîâÿâà âñè÷êè ïèñìà â ïîäíèøêàòà"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "ïîêàçâà âåðñèÿòà íà mutt"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "ïîêàçâà ïðèëîæåíèå, èçïîëçâàéêè mailcap"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "ïîêàçâà MIME ïðèëîæåíèÿ"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr "ïîêàçâà êîäà íà íàòèñíàò êëàâèø"
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "ïîêàçâà àêòèâíèÿ îãðàíè÷èòåëåí øàáëîí"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "ñâèâà/ðàçòâàðÿ òåêóùàòà íèøêà"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "ñâèâà/ðàçòâàðÿ âñè÷êè íèøêè"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "ïðèëàãà PGP ïóáëè÷åí êëþ÷"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "ïîêàçâà PGP íàñòðîéêèòå"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "èçïðàùà PGP ïóáëè÷åí êëþ÷"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "ïîòâúðæäàâà PGP ïóáëè÷åí êëþ÷"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "ïîêàçâà ïîòðåáèòåëñêèÿ íîìåð êúì êëþ÷"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "ïðîâåðÿâà çà êëàñè÷åñêè pgp"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "îäîáðÿâà êîíñòðóèðàíàòà âåðèãà"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "äîáàâÿ remailer êúì âåðèãàòà"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "âìúêâà remailer âúâ âåðèãàòà"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "èçòðèâà remailer îò âåðèãàòà"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "èçáèðà ïðåäèøíèÿ åëåìåíò îò âåðèãàòà"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "èçáèðà ñëåäâàùèÿ åëåìåíò îò âåðèãàòà"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "èçïðàùà ïèñìîòî ïðåç mixmaster remailer âåðèãà"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "ñúçäàâà äåøèôðèðàíî êîïèå è èçòðèâà"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "ñúçäàâà äåøèôðèðàíî êîïèå"
+
+#: keymap_alldefs.h:196
+msgid "wipe passphrase(s) from memory"
+msgstr "îòñòðàíÿâà ïàðîëèòå îò ïàìåòòà"
+
+#: keymap_alldefs.h:197
+msgid "extract supported public keys"
+msgstr "èçâëè÷à ïîääúðæàíèòå ïóáëè÷íè êëþ÷îâå"
+
+#: keymap_alldefs.h:198
+msgid "show S/MIME options"
+msgstr "ïîêàçâà S/MIME íàñòðîéêèòå"
+
+#: lib.c:60
+#, fuzzy
+msgid "Integer overflow -- can't allocate memory!"
+msgstr "Integer overflow -- çàäåëÿíåòî íà ïàìåò å íåâúçìîæíî!"
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Íåäîñòàòú÷íî ïàìåò!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"Çà êîíòàêò ñ ïðîãðàìèñòèòå, ìîëÿ èçïðàòåòå ïèñìî äî <mutt-dev@mutt.org>.\n"
+"Çà äà ñúîáùèòå çà ãðåøêà, ìîëÿ èçïîëçâàéòå ñêðèïòà flea(1).\n"
+
+#: main.c:50
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Àâòîðñêî ïðàâî (C) 1996-2002 Michael R. Elkins è äðóãè.\n"
+"Mutt íÿìà ÀÁÑÎËÞÒÍΠÍÈÊÀÊÂÀ ÃÀÐÀÍÖÈß; çà ïîäðîáíîñòè íàïèøåòå `mutt -vv'.\n"
+"Mutt å ñâîáîäåí ñîôòóåð è ìîæå äà áúäå ðàçïðîñòðàíÿâàí\n"
+"ïðè îïðåäåëåíè óñëîâèÿ; íàïèøåòå `mutt -vv' çà ïîâå÷å ïîäðîáíîñòè.\n"
+
+#: main.c:56
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Àâòîðñêî ïðàâî (C) 1996-2002 Michael R. Elkins <me@cs.hmc.edu>\n"
+"Àâòîðñêî ïðàâî (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Àâòîðñêî ïðàâî (C) 1997-2002 Thomas Roessler <roessler@guug.de>\n"
+"Àâòîðñêî ïðàâî (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Àâòîðñêî ïðàâî (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Àâòîðñêî ïðàâî (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Àâòîðñêî ïðàâî (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"Ìíîçèíà, íåñïîìåíàòè òóê, ñúäåéñòâàõà ñ ìíîãî êîä, ïîïðàâêè è ïðåäëîæåíèÿ\n"
+"\n"
+"    Òàçè ïðîãðàìà å ñâîáîäåí ñîôòóåð; ìîæåòå äà ÿ ðàçïðîñòðàíÿâàòå è/èëè\n"
+"    ïðîìåíÿòå ñúîáðàçíî ïðàâèëàòà íà GNU General Public License, "
+"ïóáëèêóâàíè\n"
+"    îò Ôîíäàöèÿòà çà ñâîáîäåí ñîôòóåð, èçïîëçâàéêè âåðñèÿ 2 íà ëèöåíçà èëè\n"
+"    (ïî Âàøå æåëàíèå) ïî-êúñíà âåðñèÿ.\n"
+"\n"
+"    Òàçè ïðîãðàìà ñå ðàçïðîñòðàíÿâà ñ íàäåæäàòà äà áúäå ïîëåçíà,\n"
+"    íî ÁÅÇ ÊÀÊÂÀÒΠȠÄÀ ÁÈËΠÃÀÐÀÍÖÈß; áåç äîðè ïîäðàçáèðàùàòà ñå ãàðàíöèÿ\n"
+"    ïðè ÏÎÊÓÏÊÎ-ÏÐÎÄÀÆÁÀ èëè ÏÐÈÃÎÄÍÎÑÒ ÇÀ ÊÀÊÂÎÒΠȠÄÀ ÁÈËΠÏÐÈËÎÆÅÍÈÅ.\n"
+"    Âèæòå GNU General Public License çà ïîâå÷å ïîäðîáíîñòè.\n"
+"\n"
+"    Áè òðÿáâàëî äà ñòå ïîëó÷èëè êîïèå îò GNU General Public License\n"
+"    çàåäíî ñ òàçè ïðîãðàìà; àêî òîâà íå å òàêà, ìîëÿ ïèøåòå íà Free "
+"Software\n"
+"    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\n"
+
+#: main.c:94
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"Ñòàðòèðàíå: mutt [ -nRyzZ ] [ -e <êîìàíäà> ] [ -F <ôàéë> ] [ -m <òèï> ] [ -f "
+"<ôàéë> ]\n"
+"       mutt [ -nR ] [ -e <êîìàíäà> ] [ -F <ôàéë> ] -Q <çàïèòâàíå> [ -Q "
+"<çàïèòâàíå> ] [...]\n"
+"       mutt [ -nR ] [ -e <êîìàíäà> ] [ -F <ôàéë> ] -A <ïñåâäîíèì> [ -A "
+"<ïñåâäîíèì> ] [...]\n"
+"       mutt [ -nx ] [ -e <êîìàíäà> ] [ -a <ôàéë> ] [ -F <ôàéë> ] [ -H "
+"<ôàéë> ] [ -i <ôàéë> ] [ -s <òåìà> ] [ -b <àäðåñ> ] [ -c <àäðåñ> ] <àäðåñ> "
+"[ ... ]\n"
+"       mutt [ -n ] [ -e <êîìàíäà> ] [ -F <ôàéë> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"Ïàðàìåòðè:\n"
+"  -A <ïñåâäîíèì>\tðàçãðúùà óêàçàíèÿ ïñåâäîíèì\n"
+"  -a <èìå íà ôàéë>\tïðèëàãà ôàéë êúì ïèñìîòî\n"
+"  -b <àäðåñ>\tèçïðàùà ñëÿïî êîïèå (BCC) êúì òîçè àäðåñ\n"
+"  -c <àäðåñ>\tèçïðàùà êîïèå (CC) êúì òîçè àäðåñ\n"
+"  -e <êîìàíäà>\têîìàíäà, êîÿòî äà áúäå èçïúëíåíà ñëåä èíèöèàëèçàöèÿ\n"
+"  -f <èìå íà ôàéë>\tïîùåíñêà êóòèÿ, êîÿòî äà áúäå çàðåäåíà\n"
+"  -F <èìå íà ôàéë>\tàëòåðíàòèâåí muttrc ôàéë\n"
+"  -H <èìå íà ôàéë>\tôàéë ñúñ çàãëàâíà èíôîðìàöèÿ\n"
+"  -i <èìå íà ôàéë>\tôàéë, êîéòî äà áúäå âêëþ÷åí â îòãîâîðà\n"
+"  -m <òèï>\tòèï íà ïîùåíñêàòà êóòèÿ ïî ïîäðàçáèðàíå\n"
+"  -n\t\tèãíîðèðà ñèñòåìíèÿ Muttrc\n"
+"  -p\t\tðåäàêòèðà ÷åðíîâà\n"
+"  -Q <variable>\tçàïèòâàíå çà êîíôèãóðàöèîííà ïðîìåíëèâà\n"
+"  -R\t\tîòâàðÿ ïîùåíñêàòà êóòèÿ ñàìî çà ÷åòåíå\n"
+"  -s <òåìà>\tòåìà íà ïèñìîòî (òðÿáâà äà å â êàâè÷êè, àêî ñúäúðæà èíòåðâàëè)\n"
+"  -v\t\tïîêàçâà âåðñèÿòà è äåôèíèöèèòå, èçïîëçâàíè ïðè êîìïèëàöèÿ\n"
+"  -x\t\tñèìóëèðà mailx èçïðàùàíå\n"
+"  -y\t\tèçáîð íà ôàéë îò ëèñòà `mailboxes'\n"
+"  -z\t\tíåçàáàâåí èçõîä îò ïðîãðàìàòà, àêî â ïîùåíñêàòà êóòèÿ íÿìà ïèñìà\n"
+"  -Z\t\tîòâàðÿíå íà ïúðâàòà ïîùåíñêà êóòèÿ ñ íîâè ïèñìà èëè íåçàáàâåí èçõîä "
+"îò ïðîãðàìàòà àêî íÿìà òàêàâà\n"
+"  -h\t\tïîêàçâà òîçè òåêñò"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Îïöèè ïðè êîìïèëàöèÿ:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Ãðåøêà ïðè èíèöèàëèçàöèÿ íà òåðìèíàëà."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Debugging íà íèâî %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "Îïöèÿòà DEBUG íå å å äåôèíèðàíà ïðè êîìïèëàöèÿ è å èãíîðèðàíà.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s íå ñúùåñòâóâà. Äà áúäå ëè ñúçäàäåí?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "Ãðåøêà ïðè ñúçäàâàíå íà %s: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Íå ñà óêàçàíè ïîëó÷àòåëè.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: ãðåøêà ïðè ïðèëàãàíå íà ôàéëà.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Íÿìà ïîùåíñêà êóòèÿ ñ íîâè ïèñìà."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Íå ñà äåôèíèðàíè âõîäíè ïîùåíñêè êóòèè."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "Ïîùåíñêàòà êóòèÿ å ïðàçíà."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Çàðåæäàíå íà %s... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "Ïîùåíñêàòà êóòèÿ å ïîâðåäåíà!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "Ïîùåíñêàòà êóòèÿ å ïîâðåäåíà!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr ""
+"Íåïîïðàâèìà ãðåøêà! Ãðåøêà ïðè ïîâòîðíîòî îòâàðÿíå íà ïîùåíñêàòà êóòèÿ!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Ãðåøêà ïðè çàêëþ÷âàíå íà ïîùåíñêàòà êóòèÿ!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+"sync: ïîùåíñêàòà êóòèÿ å ïðîìåíåíà, íî íÿìà ïðîìåíåíè ïèñìà! (ìîëÿ, ñúîáùåòå "
+"çà òàçè ãðåøêà)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Çàïèñâàíå íà ïèñìàòà... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "Ñúõðàíÿâàíå íà ïðîìåíèòå..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Ãðåøêà ïðè çàïèñ! Ïîùåíñêàòà êóòèÿ å çàïèñàíà ÷àñòè÷íî â %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "Ãðåøêà ïðè ïîâòîðíîòî îòâàðÿíå íà ïîùåíñêàòà êóòèÿ!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Ïîâòîðíî îòâàðÿíå íà ïîùåíñêàòà êóòèÿ..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Ñêîê êúì: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Íåâàëèäåí íîìåð íà èíäåêñ."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Íÿìà âïèñâàíèÿ."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Íå ìîæå äà ïðåâúðòàòå íàäîëó ïîâå÷å."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Íå ìîæå äà ïðåâúðòàòå íàãîðå ïîâå÷å."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Òîâà å ïîñëåäíàòà ñòðàíèöà."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Òîâà å ïúðâàòà ñòðàíèöà."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "Ïúðâèÿò çàïèñ å ïîêàçàí."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "Ïîñëåäíèÿò çàïèñ å ïîêàçàí."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Òîâà å ïîñëåäíèÿò çàïèñ."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Òîâà å ïúðâèÿò çàïèñ."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Òúðñåíå: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Îáðàòíî òúðñåíå: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Íå å äåôèíèðàí øàáëîí çà òúðñåíå."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Íÿìà ðåçóëòàòè îò òúðñåíåòî."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "Íÿìà ìàðêèðàíè çàïèñè."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "Çà òîâà ìåíþ íå å èìïëåìåíòèðàíî òúðñåíå."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "Ñêîêîâåòå íå ñà èìïëåìåíòèðàíè çà äèàëîçè."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Ìàðêèðàíåòî íå ñå ïîääúðæà."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "Çàðåæäàíå íà %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr ""
+"maildir_commit_message(): ãðåøêà ïðè ïîñòàâÿíåòî íà ìàðêà çà âðåìå íà ôàéëà"
+
+#: muttlib.c:835
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr ""
+"Ôàéëúò å äèðåêòîðèÿ. Æåëàåòå ëè äà çàïèøåòå â íåÿ? [(y) äà, (n) íå, (a) "
+"âñè÷êè]"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr "yna"
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "Ôàéëúò å äèðåêòîðèÿ. Æåëàåòå ëè äà çàïèøåòå â íåÿ?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Ôàéë â òàçè äèðåêòîðèÿ: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "Ôàéëúò ñúùåñòâóâà. Ïðåçàïèñ(o), äîáàâÿíå(a) èëè îòêàç(c)?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "oac"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "Çàïèñ íà ïèñìî íà POP ñúðâúð íå å âúçìîæíî."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s íå å ïîùåíñêà êóòèÿ!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Æåëàåòå ëè äà äîáàâèòå ïèñìàòà êúì %s?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "Âðúçêàòà ñ %s å çàòâîðåíà"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL íå å íà ðàçïîëîæåíèå."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "Ãðåøêà ïðè èçïúëíåíèå íà êîìàíäàòà \"preconnect\""
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Ãðåøêà â êîìóíèêàöèÿòà ñ %s (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr "Ëîø IDN \"%s\"."
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "Òúðñåíå íà %s..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Õîñòúò \"%s\" íå ìîæå äà áúäå íàìåðåí."
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Ñâúðçâàíå ñ %s..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "Ãðåøêà ïðè ñâúðçâàíå ñ %s (%s)"
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "Íåäîñòàòú÷íî åíòðîïèÿ â ñèñòåìàòà"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "Ñúáèðàíå íà åíòðîïèÿ çà ãåíåðàòîðà íà ñëó÷àéíè ñúáèòèÿ: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s èìà íåñèãóðíè ïðàâà çà äîñòúï!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "SSL å èçêëþ÷åí ïîðàäè ëèïñà íà äîñòàòú÷íî åíòðîïèÿ"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "âõîäíî-èçõîäíà ãðåøêà"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "ãðåøêà â ïðîòîêîëà"
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "Íåóñïåøåí SSL: %s"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "Îò ñúðâúðà íå ìîæå äà áúäå ïîëó÷åí ñåðòèôèêàò"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "SSL âðúçêà, èçïîëçâàùà %s (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "íåèçâåñòíî"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[ãðåøêà ïðè ïðåñìÿòàíå]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[íåâàëèäíà äàòà]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "Ñåðòèôèêàòúò íà ñúðâúðà âñå îùå íå å âàëèäåí"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "Ñåðòèôèêàòúò íà ñúðâúðà å èçòåêúë"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Òîçè ñåðòèôèêàò ïðèíàäëåæè íà:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Òîçè ñåðòèôèêàò å èçäàäåí îò:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Òîçè ñåðòèôèêàò å âàëèäåí"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   îò %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "    äî %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Ïðúñòîâ îòïå÷àòúê: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "Ïðîâåðêà íà SSL ñåðòèôèêàò"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "îòõâúðëÿíå(r), åäíîêðàòíî ïðèåìàíå(o), ïðèåìàíå âèíàãè(a)"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "roa"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "îòõâúðëÿíå(r), åäíîêðàòíî ïðèåìàíå(o)"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "ro"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Èçõîä"
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Ïðåäóïðåæäåíèå: Ñåðòèôèêàòúò íå ìîæå äà áúäå çàïàçåí"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "Ñåðòèôèêàòúò å çàïèñàí"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr ""
+"Ïðåìèíàò å äîïóñòèìèÿò áðîé çàêëþ÷âàíèÿ. Æåëàåòå ëè äà ïðåìàõíåòå "
+"çàêëþ÷âàíåòî çà %s?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "Íåâúçìîæíî dot-çàêëþ÷âàíå çà %s.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "fcntl çàêëþ÷âàíå íå å ïîëó÷åíî â îïðåäåëåíîòî âðåìå (timeout)!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "×àêàíå çà fcntl çàêëþ÷âàíå... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "flock çàêëþ÷âàíå íå å ïîëó÷åíî â îïðåäåëåíîòî âðåìå (timeout)!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "×àêàíå çà flock çàêëþ÷âàíå... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "Íåâúçìîæíî çàêëþ÷âàíå íà %s\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "Çàðåæäàíå íà %s..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "Çàïèñ íà %s..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "Ãðåøêà ïðè ñèíõðîíèçàöèÿòà íà %s!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Æåëàåòå ëè äà ïðåìåñòèòå ïðî÷åòåíèòå ïèñìà â %s?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Æåëàåòå ëè äà èçòðèåòå %d-òî îòáåëÿçàíî çà èçòðèâàíå ïèñìî?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Æåëàåòå ëè äà èçòðèåòå  %d îòáåëÿçàíè çà èçòðèâàíå ïèñìà?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Ïðåìåñòâàíå íà ïðî÷åòåíèòå ïèñìà â %s..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "Ïîùåíñêàòà êóòèÿ å íåïðîìåíåíà."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "çàïàçåíè: %d; ïðåìåñòåíè: %d; èçòðèòè: %d"
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "çàïàçåíè: %d; èçòðèòè: %d"
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr "Íàòèñíåòå '%s' çà âêëþ÷âàíå/èçêëþ÷âàíå íà ðåæèìà çà çàïèñ"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "Èçïîëçâàéòå 'toggle-write' çà ðåàêòèâèðàíå íà ðåæèìà çà çàïèñ!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "Ïîùåíñêàòà êóòèÿ å ñàìî çà ÷åòåíå. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "Ïîùåíñêàòà êóòèÿ å îòáåëÿçàíà."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Íåâúçìîæåí çàïèñ íà ïèñìî"
+
+#: mx.c:1535
+#, fuzzy
+msgid "Integer overflow -- can't allocate memory."
+msgstr "Integer overflow -- çàäåëÿíåòî íà ïàìåò å íåâúçìîæíî."
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "Ôóíêöèÿòà íå å äîñòúïíà îò òîâà ìåíþ."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "Ïðåä. ñòð."
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "Ñëåäâ. ñòð."
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Ïðèëîæåíèÿ"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Ñëåäâàùî"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "Òîâà å êðàÿò íà ïèñìîòî."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "Òîâà å íà÷àëîòî íà ïèñìîòî."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Îáðàòíî òúðñåíå: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Òúðñåíå: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "Ïîìîùòà âå÷å å ïîêàçàíà."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "Íÿìà ïîâå÷å öèòèðàí òåêñò."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "Íÿìà ïîâå÷å íåöèòèðàí òåêñò ñëåä öèòèðàíèÿ."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "ñúñòàâíîòî ïèñìî íÿìà \"boundary\" ïàðàìåòúð!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Ãðåøêà â èçðàçà: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Íåâàëèäåí äåí îò ìåñåöà: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Íåâàëèäåí ìåñåö: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "Íåâàëèäíà äàòà: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "ãðåøêà â èçðàçà"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "ãðåøêà â øàáëîíà ïðè: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: íåâàëèäíà êîìàíäà"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: íå ñå ïîääúðæà â òîçè ðåæèì"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "ëèïñâà ïàðàìåòúð"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "íåïîäõîäÿùî ïîñòàâåíè ñêîáè: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "ïðàçåí øàáëîí"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "ãðåøêà: íåïîçíàò îïåðàòîð %d (ìîëÿ, ñúîáùåòå çà òàçè ãðåøêà)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Êîìïèëèðàíå íà øàáëîíà çà òúðñåíå..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Èçïúëíÿâàíå íà êîìàíäà âúðõó ïèñìàòà..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "Íÿìà ïèñìà, îòãîâàðÿùè íà òîçè êðèòåðèé."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "Òúðñåíåòî äîñòèãíà äî êðàÿ, áåç äà áúäå íàìåðåíî ñúâïàäåíèå"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "Òúðñåíåòî äîñòèãíà äî íà÷àëîòî, áåç äà áúäå íàìåðåíî ñúâïàäåíèå"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Òúðñåíåòî å ïðåêúñíàòî."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "PGP ïàðîëàòà å çàáðàâåíà."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Ãðåøêà: íå ìîæå äà áúäå ñòàðòèðàí äúùåðåí PGP ïðîöåñ! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- Êðàé íà PGP-ðåçóëòàòà --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- ÍÀ×ÀËΠÍÀ PGP-ÏÈÑÌΠ--]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- ÍÀ×ÀËΠÍÀ ÁËÎÊ Ñ ÏÓÁËÈ×ÅÍ PGP-ÊËÞ× --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- ÍÀ×ÀËΠÍÀ PGP-ÏÎÄÏÈÑÀÍΠÏÈÑÌΠ--]\n"
+"\n"
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- ÊÐÀÉ ÍÀ PGP-ÏÈÑÌÎÒΠ--]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- ÊÐÀÉ ÍÀ ÁËÎÊÀ Ñ ÏÓÁËÈ×ÍÈß PGP-ÊËÞ× --]\n"
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- ÊÐÀÉ ÍÀ PGP-ÏÎÄÏÈÑÀÍÎÒΠÏÈÑÌΠ--]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Ãðåøêà: íà÷àëîòî íà PGP-ïèñìîòî íå ìîæå äà áúäå íàìåðåíî! --]\n"
+"\n"
+
+#: pgp.c:662
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Âúòðåøíà ãðåøêà. Ìîëÿ, èíôîðìèðàéòå <roessler@does-not-exist.org>"
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Ãðåøêà: íå ìîæå äà áúäå ñòàðòèðàí äúùåðåí PGP ïðîöåñ! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Ãðåøêà: íåïðàâèëíî ïîñòðîåíî PGP/MIME ñúîáùåíèå! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Ãðåøêà: íå ìîæå äà áúäå ñúçäàäåí âðåìåíåí ôàéë! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- Ñëåäíèòå äàííè ñà øèôðîâàíè ñ PGP/MIME --]\n"
+"\n"
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- Êðàé íà øèôðîâàíèòå ñ PGP/MIME äàííè --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "Íå ìîæå äà áúäå ñòàðòèðàí äúùåðåí PGP ïðîöåñ!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "Æåëàåòå ëè èçïîëçâàòå êëþ÷îâèÿ èäåíòèôèêàòîð \"%s\" çà %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "Âúâåäåòå êëþ÷îâ èäåíòèôèêàòîð çà %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "PGP íå ìîæå äà áúäå ñòàðòèðàí"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "Ïîëó÷àâàíå íà PGP êëþ÷..."
+
+#: pgpkey.c:486
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "Âñè÷êè ïîäõîäÿùè êëþ÷îâå ñà îñòàðåëè, àíóëèðàíè èëè äåàêòèâèðàíè."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Èçáîð "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Ïðîâåðêà íà êëþ÷  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "PGP êëþ÷îâå, ñúâïàäàùè ñ <%s>."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "PGP êëþ÷îâå, ñúâïàäàùè ñ \"%s\"."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "Ãðåøêà ïðè îòâàðÿíå íà /dev/null"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Ãðåøêà ïðè ñúçäàâàíå íà âðåìåíåí ôàéë"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "Êëþ÷îâ èäåíòèôèêàòîð: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr ""
+"Òîçè êëþ÷ íå ìîæå äà áúäå èçïîëçâàí, çàùîòî å îñòàðÿë, äåàêòèâèðàí èëè "
+"àíóëèðàí."
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "Òîçè èäåíòèôèêàòîð å îñòàðÿë, äåàêòèâèðàí èëè àíóëèðàí."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "Òîçè èäåíòèôèêàòîð å ñ íåäåôèíèðàíà âàëèäíîñò."
+
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "Òîçè èäåíòèôèêàòîð íå íå å âàëèäåí."
+
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "Òîçè èäåíòèôèêàòîð å ñ îãðàíè÷åíà âàëèäíîñò."
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s Äåéñòâèòåëíî ëè èñêàòå äà èçïîëçâàòå òîçè êëþ÷?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Ìîëÿ, âúâåäåòå êëþ÷îâèÿ èäåíòèôèêàòîð: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "Ñòàðòèðàíå íà pgp..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "PGP êëþ÷ %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Òúðñåíå íà êëþ÷îâå, îòãîâàðÿùè íà \"%s\"..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "Ñúðâúðúò íå ïîääúðæà êîìàíäàòà TOP."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "Ãðåøêà ïðè çàïèñ íà çàãëàâíàòà ÷àñò íà ïèñìîòî âúâ âðåìåíåí ôàéë"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "Ñúðâúðúò íå ïîääúðæà êîìàíäàòà UIDL."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "%s íå å âàëèäíà POP ïúòåêà"
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "Èçòåãëÿíå íà ñïèñúê ñ ïèñìàòà..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "Ãðåøêà ïðè çàïèñ íà ïèñìîòî âúâ âðåìåíåí ôàéë"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "Ïðîâåðêà çà íîâè ïèñìà..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "POP õîñòúò íå å äåôèíèðàí."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "Íÿìà íîâè ïèñìà â òàçè POP ïîùåíñêà êóòèÿ."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "Æåëàåòå ëè äà èçòðèåòå ïèñìàòà íà ñúðâúðà?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Çàðåæäàíå íà íîâèòå ïèñìà (%d áàéòà)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "Ãðåøêà ïðè çàïèñâàíå íà ïîùåíñêàòà êóòèÿ!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d îò %d ïèñìà ñà ïðî÷åòåíè]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "Ñúðâúðúò çàòâîðè âðúçêàòà!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Èäåíòèôèöèðàíå (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Èäåíòèôèöèðàíå (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "Íåóñïåøíà APOP èäåíòèôèêàöèÿ."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "Ñúðâúðúò íå ïîääúðæà êîìàíäàòà USER."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "Îñòàâÿíåòî íà ïèñìàòà íà ñúðâúðà å íåâúçìîæíî."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "Ãðåøêà ïðè ñâúðçâàíå ñúñ ñúðâúðà: %s"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "Çàòâàðÿíå íà âðúçêàòà êúì POP ñúðâúð..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Ïîòâúðæäàâàíå èíäåêñèòå íà ïèñìàòà..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Âðúçêàòà ïðîïàäíà. Æåëàåòå ëè äà ñå âêëþ÷èòå îòíîâî êúì POP ñúðâúðà?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "×åðíîâè"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "Íÿìà çàïàçåíè ÷åðíîâè."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "Íåâàëèäíà PGP çàãëàâíà ÷àñò"
+
+#: postpone.c:479
+msgid "Illegal S/MIME header"
+msgstr "Íåâàëèäíà S/MIME çàãëàâíà ÷àñò"
+
+#: postpone.c:554
+msgid "Decryption failed."
+msgstr "Íåóñïåøíî ðàçøèôðîâàíå."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Íîâî çàïèòâàíå"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Ñúçäàâàíå íà ïñåâäîíèì"
+
+#: query.c:48
+msgid "Search"
+msgstr "Òúðñåíå"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "×àêàíå íà îòãîâîð..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Êîìàíäà çà çàïèòâàíå íå å äåôèíèðàíà."
+
+#: query.c:286
+msgid "Query"
+msgstr "Çàïèòâàíå"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Çàïèòâàíå: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Çàïèòâàíå '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Pipe"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Îòïå÷àòâàíå"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Çàïèñâàíå..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Ïðèëîæåíèåòî å çàïèñàíî íà äèñêà."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "ÏÐÅÄÓÏÐÅÆÄÅÍÈÅ! Íà ïúò ñòå äà ïðåçàïèøåòå %s, íàèñòèíà ëè?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Ïðèëîæåíèåòî å ôèëòðèðàíî."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Ôèëòðèðàíå ïðåç: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Ïðåäàâàíå íà (pipe): "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "Íå å äåôèíèðàíà êîìàíäà çà îòïå÷àòâàíå íà %s ïðèëîæåíèÿ!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Æåëàåòå ëè äà îòïå÷àòàòå ìàðêèðàíèòå ïðèëîæåíèÿ?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Æåëàåòå ëè äà îòïå÷àòàòå ïðèëîæåíèåòî?"
+
+#: recvattach.c:938
+msgid "Can't decrypt encrypted message!"
+msgstr "Ãðåøêà ïðè äåøèôðèðàíåòî íà øèôðîâàíî ïèñìî!"
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Ïðèëîæåíèÿ"
+
+#: recvattach.c:987
+#, fuzzy
+msgid "There are no subparts to show!"
+msgstr "Íÿìà ïîä÷àñòè, êîèòî äà áúäàò ïîêàçàíè!."
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "Ãðåøêà ïðè èçòðèâàíåòî íà ïðèëîæåíèå îò POP ñúðâúðà."
+
+#: recvattach.c:1056
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "Èçòðèâàíåòî íà ïðèëîæåíèÿ îò øèôðîâàíè ïèñìà íå ñå ïîääúðæà."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Ïîääúðæà ñå ñàìî èçòðèâàíå íà ïðèëîæåíèÿ îò ñúñòàâíè ïèñìà."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Ìîæå äà èçïðàùàòå îòíîâî ñàìî message/rfc822 ÷àñòè."
+
+#: recvcmd.c:213
+msgid "Error bouncing message!"
+msgstr "Ãðåøêà ïðè ïðåïðàùàíå íà ïèñìîòî!"
+
+#: recvcmd.c:213
+msgid "Error bouncing messages!"
+msgstr "Ãðåøêà ïðè ïðåïðàùàíå íà ïèñìàòà!"
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Ãðåøêà ïðè îòâàðÿíå íà âðåìåííèÿ ôàéë %s."
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "Æåëàåòå ëè äà ãè ïðåïðàòèòå êàòî ïðèëîæåíèÿ?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+"Äåêîäèðàíåòî íà âñè÷êè ìàðêèðàíè ïðèëîæåíèÿ å íåâúçìîæíî. Æåëàåòå ëè äà "
+"ïðåïðàòèòå ñ MIME îñòàíàëèòå?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Æåëàåòå ëè äà êàïñóëèðàòå ñ MIME ïðåäè ïðåïðàùàíå?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "Ãðåøêà ïðè ñúçäàâàíå íà %s."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Íÿìà ìàðêèðàíè ïèñìà."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "Íÿìà mailing list-îâå!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+"Äåêîäèðàíåòî íà âñè÷êè ìàðêèðàíè ïðèëîæåíèÿ å íåâúçìîæíî. Æåëàåòå ëè äà "
+"êàïñóëèðàòå ñ MIME îñòàíàëèòå?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Äîáàâÿíå"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Âìúêâàíå"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Èçòðèâàíå"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "ÎÊ"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "Íåâúçìîæíî ïîëó÷àâàíåòî íà mixmaster \"type2.list\"!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Èçáîð íà remailer âåðèãà."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "Ãðåøêà: %s íå ìîæå äà ñå èçïîëçâà êàòî ïîñëåäåí remailer âúâ âåðèãàòà."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "mixmaster âåðèãèòå ñà îãðàíè÷åíè äî %d åëåìåíòà."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "remailer âåðèãàòà âå÷å å ïðàçíà."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "Ïúðâèÿò åëåìåíò îò âåðèãàòà å âå÷å èçáðàí."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "Ïîñëåäíèÿò åëåìåíò îò âåðèãàòà å âå÷å èçáðàí."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "mixmaster íå ïðèåìà Cc èëè Bcc çàãëàâíè ïîëåòà."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr ""
+"Ìîëÿ, ïîñòàâåòå âàëèäíà ñòîéíîñò â ïðîìåíëèâàòà \"hostname\" êîãàòî "
+"èçïîëçâàòå mixmaster!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Ãðåøêà (%d) ïðè èçïðàùàíå íà ïèñìîòî.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Ãðåøêà ïðè èçïðàùàíå íà ïèñìîòî."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "Íåâàëèäíî ôîðìàòèðàíî âïèñâàíå çà òèïà %s â \"%s\" íà ðåä %d"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Íå å óêàçàí ïúòÿ êúì mailcap"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "íå å íàìåðåíî mailcap-âïèñâàíå çà òèïà %s"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: íåäîñòàòú÷íî àðãóìåíòè"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: òâúðäå ìíîãî àðãóìåíòè"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Ïèñìîòî íÿìà òåìà, æåëàåòå ëè äà ïðåêúñíåòå èçïðàùàíåòî?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Ïðåêúñâàíå ïîðàäè ëèïñà íà òåìà."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Æåëàåòå ëè äà îòãîâîðèòå íà %s%s?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "Æåëàåòå ëè äà ïðîñëåäèòå äî %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "Íèêîå îò ìàðêèðàíèòå ïèñìà íå å âèäèìî!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Æåëàåòå ëè äà ïðèêà÷èòå ïèñìîòî êúì îòãîâîðà?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Ïðèêà÷âàíå íà öèòèðàíî ïèñìî..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "Íå âñè÷êè ïîèñêàíè ïèñìà ìîãàò äà áúäàò ïðèêà÷åíè!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "Æåëàåòå ëè äà ãî ïðåïðàòèòå êàòî ïðèëîæåíèå?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Ïîäãîòîâêà çà ïðåïðàùàíå..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Æåëàåòå ëè äà ðåäàêòèðàòå ÷åðíîâà?"
+
+#: send.c:1336
+msgid "Edit forwarded message?"
+msgstr "Æåëàåòå ëè äà ðåäàêòèðàòå ïèñìîòî ïðåäè ïðåïðàùàíå?"
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Æåëàåòå ëè äà èçòðèåòå íåïðîìåíåíîòî ïèñìî?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Íåïðîìåíåíîòî ïèñìî å èçòðèòî."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "Ïèñìîòî íå å èçïðàòåíî."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Ïèñìîòî å çàïèñàíî êàòî ÷åðíîâà."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Íå ñà óêàçàíè ïîëó÷àòåëè!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Íå ñà óêàçàíè ïîëó÷àòåëè."
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Ëèïñâà òåìà íà ïèñìîòî. Æåëàåòå ëè äà ïðåêúñíåòå èçïðàùàíåòî?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Ëèïñâà òåìà."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Èçïðàùàíå íà ïèñìîòî..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Ïèñìîòî íå ìîæå äà áúäå èçïðàòåíî."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Ïèñìîòî å èçïðàòåío."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Èçïðàùàíå íà çàäåí ôîí."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "Íå å íàìåðåí \"boundary\" ïàðàìåòúð! [ìîëÿ, ñúîáùåòå çà òàçè ãðåøêà]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s âå÷å íå ñúùåñòâóâà!"
+
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "%s íå å îáèêíîâåí ôàéë."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "Ãðåøêà ïðè îòâàðÿíå íà %s"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Ãðåøêà %d (%s) ïðè èçïðàùàíå íà ïèñìîòî."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Èçïðàùàù ïðîöåñ:"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr "Ëîø IDN %s äîêàòî ôîðìàòà çà ïîâòîðíî èçïðàùàíå áåøå ïîäãîòâÿíà."
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s... Èçõîä îò ïðîãðàìàòà.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "Ïîëó÷åí ñèãíàë %s... Èçõîä îò ïðîãðàìàòà.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Ïîëó÷åí ñèãíàë %d... Èçõîä îò ïðîãðàìàòà.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr "Ïîëçâàù ñå ñ äîâåðèå   "
+
+#: smime.c:303
+msgid "Verified  "
+msgstr "Ïðîâåðåí   "
+
+#: smime.c:306
+msgid "Unverified"
+msgstr "Íåïðîâåðåí"
+
+#: smime.c:309
+msgid "Expired   "
+msgstr "Èçòåêúë   "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr "Àíóëèðàí   "
+
+#: smime.c:315
+msgid "Invalid   "
+msgstr "Íåâàëèäåí   "
+
+#: smime.c:318
+msgid "Unknown   "
+msgstr "Íåèçâåñòåí   "
+
+#: smime.c:347
+msgid "Enter keyID: "
+msgstr "Âúâåäåòå êëþ÷îâ èäåíòèôèêàòîð: "
+
+#: smime.c:370
+#, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "S/MIME ñåðòèôèêàòè, ñúâïàäàùè ñ \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr "Èäåíòèôèêàòîðúò %s íå å ïðîâåðåí. Æåëàåòå ëè äà ãî èçïîëçâàòå çà %s ?"
+
+#: smime.c:523 smime.c:592
+#, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr ""
+"Æåëàåòå ëè èçïîëçâàòå (íåïîëçâàùèÿ ñå ñ äîâåðèå!) èäåíòèôèêàòîð \"%s\" çà %s?"
+
+#: smime.c:526 smime.c:595
+#, c-format
+msgid "Use ID %s for %s ?"
+msgstr "Æåëàåòå ëè èçïîëçâàòå èäåíòèôèêàòîðà \"%s\" çà %s?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+"Ïðåäóïðåæäåíèå: Èäåíòèôèêàòîðúò %s âñå îùå íå ñå ïîëçâà ñ äîâåðèåòî Âè. "
+"(Íàòèñíåòå êëàâèø çà äà ïðîäúëæèòå)"
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr "Íå å íàìåðåí (âàëèäåí) ñåðòèôèêàò çà %s."
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "Ãðåøêà: íå ìîæå äà áúäå ñòàðòèðàí äúùåðåí OpenSSL ïðîöåñ!"
+
+#: smime.c:1197
+#, fuzzy
+msgid "no certfile"
+msgstr "no certfile"
+
+#: smime.c:1200
+msgid "no mbox"
+msgstr "íÿìà ïîùåíñêà êóòèÿ"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr "Íÿìà ðåçóëòàò îò äúùåðíèÿ OpenSSL ïðîöåñ.."
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr "Ïðåäóïðåæäåíèå: Íå ìîæå äà áúäå íàìåðåí ìåæäèíåí ñåðòèôèêàò."
+
+#: smime.c:1426
+msgid "Can't open OpenSSL subprocess!"
+msgstr "Íå ìîæå äà áúäå ñòàðòèðàí äúùåðåí OpenSSL ïðîöåñ!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr "Íÿìà ðåçóëòàò îò äúùåðíèÿ OpenSSL ïðîöåñ..."
+
+#: smime.c:1629 smime.c:1751
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- Êðàé íà OpenSSL-ðåçóëòàòà --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Ãðåøêà: íå ìîæå äà áúäå ñòàðòèðàí äúùåðåí OpenSSL ïðîöåñ! --]\n"
+
+#: smime.c:1755
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr "[-- Ñëåäíèòå äàííè ñà øèôðîâàíè ñúñ S/MIME --]\n"
+
+#: smime.c:1758
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr "[-- Ñëåäíèòå äàííè ñà ïîäïèñàíè ñúñ S/MIME --]\n"
+
+#: smime.c:1822
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- Êðàé íà øèôðîâàíèòå ñúñ S/MIME äàííè --]\n"
+
+#: smime.c:1824
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- Êðàé íà ïîäïèñàíèòå ñúñ S/MIME äàííè --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Ïîäðåæäàíå íà ïîùåíñêàòà êóòèÿ..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr ""
+"Íå ìîæå äà áúäå íàìåðåíà ôóíêöèÿ çà ïîäðåæäàíå! (Ìîëÿ, ñúîáùåòå çà òàçè "
+"ãðåøêà)"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(íÿìà ïîùåíñêà êóòèÿ)"
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "Ðîäèòåëñêîòî ïèñìî íå å âèäèìî â òîçè îãðàíè÷åí èçãëåä"
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "Ðîäèòåëñêîòî ïèñìî íå å íàëè÷íî."
+
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "Ñòàðòèðàíå íà OpenSSL..."
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "Æåëàåòå ëè äà èçïðàòèòå ïîâòîðíî ïèñìîòî êúì %s...?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "Æåëàåòå ëè äà èçïðàòèòå ïîâòîðíî ïèñìàòà êúì %s...?"
+
+#~ msgid "ewsabf"
+#~ msgstr "ewsabf"
diff --git a/po/ca.gmo b/po/ca.gmo
new file mode 100644 (file)
index 0000000..da5cec0
Binary files /dev/null and b/po/ca.gmo differ
diff --git a/po/ca.po b/po/ca.po
new file mode 100644 (file)
index 0000000..328121d
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,4344 @@
+# Catalan messages for mutt.
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Ivan Vilata i Balaguer <ivan@selidor.net>, 2001, 2002, 2003.
+#
+# ivb (2001/12/08)
+# ivb  Ací cal ajustar-se a voltes a ~80 columnes.  Les traduccions que
+# ivb  han hagut de ser «compactades» estan marcades amb «ABREUJAT!»,
+# ivb  i s'hi indica la traducció completa.
+#
+# IDN = Internationalized Domain Name
+msgid ""
+msgstr ""
+"Project-Id-Version: mutt 1.5.4i\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2003-04-01 21:40+0200\n"
+"Last-Translator: Ivan Vilata i Balaguer <ivan@selidor.net>\n"
+"Language-Team: Catalan <ca@dodds.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "Nom d'usuari en «%s»: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "Contrasenya per %s@%s: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Ix"
+
+# ivb (2001/12/08)
+# ivb  Menú superpoblat: mantenir _molt_ curt!
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Esbrr"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Recupera"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Selecciona"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Ajuda"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "No teniu cap àlies!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Àlies"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Nou àlies: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "Ja heu definit un àlies amb aquest nom!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr "Avís: Aquest àlies podria no funcionar. Voleu reparar-lo?"
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Adreça: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr "Error: «%s» no és un IDN vàlid."
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Nom personal: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] Voleu acceptar?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Guarda en el fitxer: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "S'ha afegit l'àlies."
+
+# ivb (2001/12/08)
+# ivb  ABREUJAT!
+# ivb  El nom de fitxer no concorda amb cap «nametemplate»; voleu continuar?
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "El nom de fitxer no concorda amb cap «nametemplate»; continuar?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "Cal que l'entrada «compose» de «mailcap» continga «%%s»."
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "Error en executar «%s»!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "No s'ha pogut obrir el fitxer per interpretar-ne les capçaleres."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "No s'ha pogut obrir el fitxer per eliminar-ne les capçaleres."
+
+# ivb (2001/12/08)
+# ivb  ABREUJAT!
+# ivb  No hi ha cap entrada «compose» de «%s» en «mailcap»: es crea un fitxer buit.
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "«%s» no té entrada «compose» en «mailcap»: cree fitxer buit."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "Cal que l'entrada «edit» de «mailcap» continga «%%s»."
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "No hi ha cap entrada «edit» de «%s» en «mailcap»."
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "No hi ha cap entrada adequada en «mailcap». Es visualitza com a text."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "No s'ha definit el tipus MIME. No es pot veure el fitxer adjunt."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "No s'ha pogut crear el filtre."
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "No s'ha pogut crear el filtre."
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "Error d'escriptura!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "No sé com imprimir això!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Canvia directori"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Màscara"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "«%s» no és un directori."
+
+# ivb (2001/12/07)
+# ivb  Es refereix a les definides en «mailboxes».
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Bústies d'entrada [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Subscrites [%s], màscara de fitxers: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Directori [%s], màscara de fitxers: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "No es pot adjuntar un directori!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "No hi ha cap fitxer que concorde amb la màscara de fitxers."
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Només es poden crear bústies IMAP."
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Només es poden esborrar bústies IMAP."
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Voleu realment esborrar la bústia «%s»?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "S'ha esborrat la bústia."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "No s'ha esborrat la bústia."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Canvia al directori: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Error en llegir el directori."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Màscara de fitxers: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Ordena inversament per (d)ata, (a)lfabet, (t)amany, o (n)o ordenar? "
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Ordena per (d)ata, (a)lfabet, (t)amany, o (n)o ordenar? "
+
+# ivb (2001/11/18)
+# ivb  (d)ata, (a)lfabet, (t)amany, (n)o
+#: browser.c:1049
+msgid "dazn"
+msgstr "datn"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Nom del nou fitxer: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "No es pot veure un directori."
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Error en intentar veure el fitxer."
+
+# Vaja, no hi ha com posar-li cometes...  ivb
+#: buffy.c:442
+msgid "New mail in "
+msgstr "Hi ha correu nou en "
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: El terminal no suporta aquest color."
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: El color no existeix."
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: L'objecte no existeix."
+
+# ivb (2001/11/18)
+# ivb  «index» és una paraula clau.
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: L'ordre només és vàlida per un objecte «index»."
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: Manquen arguments."
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Manquen arguments."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: Manquen arguments."
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: Manquen arguments."
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: L'atribut no existeix."
+
+# ivb (2001/12/08)
+# ivb  També apareix com a error aïllat.
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "Manquen arguments."
+
+# ivb (2001/12/08)
+# ivb  També apareix com a error aïllat.
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "Sobren arguments."
+
+# ivb (2001/12/08)
+# ivb  També apareix com a error aïllat.
+#: color.c:721
+msgid "default colors not supported"
+msgstr "Els colors per defecte no estan suportats."
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "Voleu verificar la signatura PGP?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "No s'ha pogut crear un fitxer temporal!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "No s'ha pogut crear el filtre de visualització."
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "No s'ha pogut copiar el missatge."
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr "S'ha pogut verificar amb èxit la signatura S/MIME."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr "El propietari del certificat S/MIME no concorda amb el o la remitent."
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr "NO s'ha pogut verificar la signatura S/MIME."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "S'ha pogut verificar amb èxit la signatura PGP."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "NO s'ha pogut verificar la signatura PGP."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Ordre: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Redirigeix el missatge a: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Redirigeix els missatges marcats a: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "Error en interpretar l'adreça!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr "L'IDN no és vàlid: «%s»"
+
+# ivb (2001/12/02)
+# ivb  El programa posa l'interrogant.
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Voleu redirigir el missatge a %s"
+
+# ivb (2001/12/02)
+# ivb  El programa posa l'interrogant.
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Voleu redirigir els missatges a %s"
+
+#: commands.c:294 recvcmd.c:192
+msgid "Message not bounced."
+msgstr "No s'ha redirigit el missatge."
+
+#: commands.c:294 recvcmd.c:192
+msgid "Messages not bounced."
+msgstr "No s'han redirigit els missatges."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "S'ha redirigit el missatge."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "S'han redirigit els missatges."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "No s'ha pogut crear el procés filtre."
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Redirigeix a l'ordre: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "No s'ha definit cap ordre d'impressió."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "Voleu imprimir el missatge?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Voleu imprimir els misatges marcats?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "S'ha imprés el missatge."
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "S'han imprés els missatges."
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "No s'ha pogut imprimir el missatge."
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "No s'han pogut imprimir els missatges."
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Ordre inv (d)ata/(o)rig/(r)ebut/(t)ema/de(s)t/(f)il/(c)ap/taman(y)/(p)unt?: "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Ordre (d)ata/(o)rig/(r)ebut/(t)ema/de(s)t/(f)il/(c)ap/taman(y)/(p)unt?: "
+
+# ivb (2001/11/18)
+# ivb  (d)ata/(o)rig/(r)ebut/(t)ema/de(s)t/(f)il/(c)ap/taman(y)/(p)unt
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dortsfcyp"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Ordre per l'intèrpret: "
+
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "Descodifica i desa%s en la bústia"
+
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "Descodifica i còpia%s en la bústia"
+
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "Desxifra i desa%s en la bústia"
+
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "Desxifra i còpia%s en la bústia"
+
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "Desa%s en la bústia"
+
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "Còpia%s en la bústia"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " els marcats"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "S'està copiant en «%s»..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "Voleu convertir en «%s» en enviar?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "S'ha canviat «Content-Type» a «%s»."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "S'ha canviat el joc de caràcters a «%s»; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "es farà conversió"
+
+#: commands.c:914
+msgid "converting"
+msgstr "no es farà conversió"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "No hi ha cap fitxer adjunt."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Envia"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Avorta"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Ajunta fitxer"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Descriu"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Signa i xifra"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Xifra"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Signa"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "En clar"
+
+# ivb (2001/11/19)
+# ivb  L'espai de principi és per alinear, però no hi ha res a fer...
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr "  signa com a: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<per defecte>"
+
+#: compose.c:149
+msgid "Encrypt with: "
+msgstr "Xifra amb: "
+
+#: compose.c:165
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "PGP: (x)ifra, (s)igna, si(g)na com a, (a)mbdós, o en (c)lar? "
+
+# ivb (2003/03/26)
+# ivb  (x)ifra, (s)igna, si(g)na com a, (a)mbdós, (c)lar
+#: compose.c:166
+msgid "esabf"
+msgstr "xsgac"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Signa com a: "
+
+#: compose.c:227
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"S/MIME: (x)ifra, (s)igna, xi(f)ra amb, si(g)na com a, (a)mbdós, o en (c)lar? "
+
+# ivb (2003/03/26)
+# ivb  (x)ifra, (s)igna, xi(f)ra amb, si(g)na com a, (a)mbdós, o en (c)lar
+#: compose.c:228
+msgid "eswabf"
+msgstr "xsfgac"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+"1: DES, 2: DES triple, 3: RC2-40, 4: RC2-64, 5: RC2-128, o per (d)efecte? "
+
+# 1: DES, 2: DES triple, 3: RC2-40, 4: RC2-64, 5: RC2-128, o per (d)efecte  ivb
+#: compose.c:238
+msgid "12345f"
+msgstr "12345d"
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "«%s» [#%d] ja no existeix!"
+
+# ivb (2001/11/19)
+# ivb  ABREUJAR!
+# S'ha modificat «%s» [#%d].  Voleu actualitzar-ne la codificació?
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "Modificat «%s» [#%d]. Actualitzar codificació?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Fitxers adjunts"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr "Avís: «%s» no és un IDN vàlid."
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "No es pot esborrar l'únic fitxer adjunt."
+
+# El primer camp és una capçalera de correu.  ivb
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr "L'IDN de «%s» no és vàlid: «%s»"
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "S'estan adjuntant els fitxers seleccionats..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "No s'ha pogut adjuntar «%s»!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Bústia a obrir per adjuntar-ne missatges"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "La carpeta no conté missatges."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Marqueu els missatges que voleu adjuntar!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "No s'ha pogut adjuntar!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "La recodificació només afecta els fitxers adjunts de tipus text."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "No es convertirà el fitxer adjunt actual."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "Es convertirà el fitxer adjunt actual."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "La codificació no és vàlida."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Voleu guardar una còpia d'aquest missatge?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Reanomena a: "
+
+# ivb (2001/11/19)
+# ivb  Cuidadín: en «compose» la cadena és el nom de fitxer i en
+# ivb  «editmsg» i «sendlib» és la cadena d'error.
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "Ha fallat stat() sobre «%s»: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Nou fitxer: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "«Content-Type» ha de tenir la forma «base/sub»."
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "El valor de «Content-Type» «%s» no és conegut."
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "No s'ha pogut crear el fitxer «%s»."
+
+# ivb (2001/11/20)
+# ivb  Curiosa forma d'emetre un error...
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "El que ocorre ací és que no s'ha pogut adjuntar un fitxer."
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Voleu posposar aquest missatge?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Escriu el missatge en la bústia"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "S'està escrivint el missatge en «%s»..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "S'ha escrit el missatge."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr "El missatge ja usa S/MIME. Voleu posar-lo en clar i continuar? "
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr "El missatge ja usa PGP. Voleu posar-lo en clar i continuar? "
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr " (data actual: %c)"
+
+# La primera: «OpenSSL» o «PGP» (meec, apòstrof); la segona l'enterior.  ivb
+#: crypt.c:71
+#, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- Aquesta és l'eixida de %s%s --]\n"
+
+#: crypt.c:86
+msgid "Passphrase(s) forgotten."
+msgstr "S'han esborrat de la memòria la o les frases clau."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Entreu la frase clau de PGP:"
+
+#: crypt.c:147
+msgid "Enter SMIME passphrase:"
+msgstr "Entreu la frase clau d'S/MIME:"
+
+#: crypt.c:192
+msgid "Create a traditional (inline) PGP message?"
+msgstr "Voleu crear un missatge PGP tradicional (inserit)?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "S'està invocant PGP..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr "No es suporten els misatges S/MIME sense pistes sobre el contingut."
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr "S'està provant a extreure les claus PGP...\n"
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr "S'està provant a extreure els certificats S/MIME...\n"
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- Error: L'estructura «multipart/signed» no és consistent! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- Error: El protocol «%s» de «multipart/signed» --]\n"
+"[-- no és conegut! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Avís: No es poden verificar les signatures «%s/%s». --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- Les dades següents es troben signades: --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Avís: No s'ha trobat cap signatura. --]\n"
+"\n"
+
+#: crypt.c:924
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Final de les dades signades. --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "sí"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "no"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Voleu abandonar Mutt?"
+
+# ivb (2001/12/08)
+# ivb  Apareix amb més coses al darrere (curs_lib) o entre parèntesis
+# ivb  (mutt_socket) -> sense punt.
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "Error desconegut"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Premeu qualsevol tecla per continuar..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " («?» llista): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "No hi ha cap bústia oberta."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "No hi ha cap missatge."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "La bústia és de només lectura."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "No es permet aquesta funció en el mode d'adjuntar missatges."
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "No hi ha cap missatge visible."
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "No es pot establir si una bústia de només lectura pot ser modificada."
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "S'escriuran els canvis a la carpeta en abandonar-la."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "No s'escriuran els canvis a la carpeta."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Ix"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Desa"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Nou correu"
+
+# ivb (2001/12/08)
+# ivb  Menú superpoblat: mantenir _molt_ curt!
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Respon"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Grup"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr ""
+"S'ha modificat la bústia des de fora. Els senyaladors poden ser incorrectes."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Hi ha correu nou en aquesta bústia."
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "S'ha modificat la bústia des de fora."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "No hi ha cap missatge marcat."
+
+#: curs_main.c:653 menu.c:896
+#, fuzzy
+msgid "Nothing to do."
+msgstr "S'està connectant amb «%s»..."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Salta al missatge: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "L'argument ha de ser un número de missatge."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Aqueix missatge no és visible."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "El número de missatge no és vàlid."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Esborra els missatges que concorden amb: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "No hi ha cap patró limitant en efecte."
+
+# ivb (2001/12/08)
+# ivb  Nooop!  Només mostra el límit actual.
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Límit: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Limita als missatges que concorden amb: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Voleu abandonar Mutt?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Marca els missatges que concorden amb: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Restaura els missatges que concorden amb: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Desmarca els missatges que concorden amb: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Obri en mode de només lectura la bústia"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Obri la bústia"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "«%s» no és una bústia."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Voleu abandonar Mutt sense desar els canvis?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Vos trobeu sobre l'últim missatge."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "No hi ha cap missatge no esborrat."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Vos trobeu sobre el primer missatge."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "La recerca ha tornat al principi."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "La recerca ha tornat al final."
+
+# ivb (2001/12/08)
+# ivb  Ací no hi ha forma de posar el punt final de segur :(
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "No hi ha cap missatge nou"
+
+# ivb (2001/12/08)
+# ivb  Ací no hi ha forma de posar el punt final de segur :(
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "No hi ha cap missatge no llegit"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " en aquesta vista limitada."
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "No es pot canviar el senyalador «important» en un servidor POP."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "No hi ha més fils."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Vos trobeu en el primer fil."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "No s'ha habilitat l'ús de fils."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "El fil conté missatges no llegits."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "No es pot editar un missatge en un servidor POP."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tinsereix una línia que comença amb un sol ~\n"
+"~b usuaris\tafig els usuaris al camp Bcc:\n"
+"~c usuaris\tafig els usuaris al camp Cc:\n"
+"~f missatges\tinclou els missatges\n"
+"~F missatges\tel mateix que ~f, però incloent també les capçaleres\n"
+"~h\t\tedita la capçalera del missatge\n"
+"~m missatges\tinclou i cita els missatges\n"
+"~M missatges\tel mateix que ~m, però incloent també les capçaleres\n"
+"~p\t\timprimeix el missatge\n"
+"~q\t\tescriu el fitxer i abandona l'editor\n"
+"~r fitxer\tllig un fitxer en l'editor\n"
+"~t usuaris\tafig els usuaris al camp To:\n"
+"~u\t\tretorna a la línia anterior\n"
+"~v\t\tedita el missatge amb l'editor $visual\n"
+"~w fitxer\tescriu el missatge en el fitxer\n"
+"~x\t\tavorta els canvis i abandona l'editor\n"
+"~?\t\tmostra aquest missatge\n"
+".\t\ta soles en una línia termina l'entrada\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: El número de missatge no és vàlid.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Termineu el missatge amb . a soles en una línia)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "No hi ha cap bústia activa.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Contingut del missatge:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(continuar)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "Manca un nom de fitxer.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "El missatge no conté cap línia.\n"
+
+# El primer camp és una capçalera de correu.  ivb
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr "L'IDN de «%s» no és vàlid: «%s»\n"
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: L'ordre de l'editor no és coneguda (~? per ajuda).\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "No s'ha pogut crear una carpeta temporal: %s."
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "No s'ha pogut escriure en una carpeta temporal: %s."
+
+#: editmsg.c:101
+#, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "No s'ha pogut truncar una carpeta temporal: %s."
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "El fitxer missatge és buit!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "El missatge no ha estat modificat!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "No s'ha pogut obrir el fitxer missatge: %s."
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "No s'ha pogut afegir a la carpeta: %s."
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Error.  Es manté el fitxer temporal: %s"
+
+# ivb (2001/12/08)
+# ivb  Així queda més clar.  El programa posa l'interrogant.
+#: flags.c:332
+msgid "Set flag"
+msgstr "Quin senyalador voleu activar"
+
+# ivb (2001/12/08)
+# ivb  Així queda més clar.  El programa posa l'interrogant.
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Quin senyalador voleu desactivar"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[-- Error: No s'ha pogut mostrar cap part del «multipart/alternative»! --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Fitxer adjunt #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Tipus: %s/%s, Codificació: %s, Tamany: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr ""
+"[-- Eixida de l'ordre de visualització automàtica --]\n"
+"[-- «%s» --]\n"
+
+# ivb (2001/12/08)
+# ivb  ABREUJAT!
+# ivb  S'està invocant l'ordre de visualització automàtica: %s
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Ordre de visualització automàtica: %s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- No s'ha pogut executar «%s». --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr ""
+"[-- Errors de l'ordre de visualització automàtica --]\n"
+"[-- «%s» --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- Error: La part «message/external-body» --]\n"
+"[-- no té paràmetre «access-type». --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr ""
+"[-- Aquest fitxer adjunt de tipus «%s/%s» --]\n"
+"[-- "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(amb tamany %s octets) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "ha estat esborrat --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- amb data %s --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- nom: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Aquest fitxer adjunt de tipus «%s/%s» no s'inclou, --]\n"
+
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr "[-- i la font externa indicada ha expirat. --]\n"
+
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr ""
+"[-- i el valor indicat d'«access-type» «%s» --]\n"
+"[-- no es suporta. --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Error: La part «multipart/signed» no té paràmetre «protocol»!"
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Error: La part «multipart/encrypted» no té paràmetre «protocol»!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "No s'ha pogut obrir el fitxer temporal!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- No es suporta «%s/%s». "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(useu «%s» per veure aquesta part)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "(vinculeu «view-attachents» a una tecla!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: No s'ha pogut adjuntar el fitxer."
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "ERROR: Per favor, informeu d'aquest error."
+
+# ivb (2001/12/07)
+# ivb  Es refereix a un menú -> masculí.
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<DESCONEGUT>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Vincles genèrics:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Funcions no vinculades:\n"
+"\n"
+
+# ivb (2001/12/08)
+# ivb  El noms dels menús no estan traduïts.
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Ajuda de «%s»"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: No es pot fer «unhook *» des d'un «hook»."
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: El tipus de «hook» no és conegut: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: No es pot esborrar un «%s» des d'un «%s»."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "No hi ha cap autenticador disponible."
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "S'està autenticant (anònimament)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "L'autenticació anònima ha fallat."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "S'està autenticant (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "L'autenticació CRAM-MD5 ha fallat."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "S'està autenticant (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "L'autenticació GSSAPI ha fallat."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "L'ordre LOGIN no es troba habilitada en aquest servidor."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "S'està entrant..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "L'entrada ha fallat."
+
+#: imap/auth_sasl.c:112
+#, fuzzy, c-format
+msgid "Authenticating (%s)..."
+msgstr "S'està autenticant (APOP)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "L'autenticació SASL ha fallat."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "«%s» no és un camí IMAP vàlid."
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "S'estan obtenint els espais de noms..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "S'està obtenint la llista de carpetes..."
+
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "La carpeta no existeix."
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Crea la bústia: "
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "La bústia ha de tenir un nom."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "S'ha creat la bústia."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "S'ha tancat la bústia."
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Error fatal. El recompte de missatges no es troba sincronitzat!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "S'està tancant la connexió amb «%s»..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Aquest servidor IMAP és antic. Mutt no pot funcionar amb ell."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "Voleu protegir la connexió usant TLS?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "No s'ha pogut negociar la connexió TLS."
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "S'està seleccionant la bústia «%s»..."
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "Error en obrir la bústia."
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Aquest servidor no permet afegir a les bústies IMAP."
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "Voleu crear «%s»?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "S'està tancant la connexió amb el servidor IMAP..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "S'estan marcant %d missatges com a esborrats..."
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "No s'han pogut eliminar els missatges."
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "S'estan guardant els senyaladors d'estat dels missatges... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "S'estan eliminant missatges del servidor..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbox: Ha fallat «EXPUNGE»."
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "Ha fallat «CLOSE»."
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "El nom de la bústia no és correcte."
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "S'està subscrivint a «%s»..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "S'està dessubscrivint de «%s»..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr ""
+"No s'han pogut recollir les capçaleres d'aquesta versió de servidor IMAP."
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "No s'ha pogut crear el fitxer temporal «%s»."
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "S'estan recollint les capçaleres dels missatges... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "S'està recollint el missatge..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "L'índex del missatge no és correcte. Proveu de reobrir la bústia."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "S'està penjant el missatge..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "S'estan copiant %d missatges en «%s»..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "S'està copiant el missatge %d en «%s»..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "Voleu continuar?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "alias: No s'ha especificat cap adreça."
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr "Avís: L'IDN «%s» de l'àlies «%s» no és vàlid.\n"
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "El camp de capçalera no és vàlid."
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: El mètode d'ordenació no és conegut."
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): Error en l'expressió regular: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: La variable no és coneguda."
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "El prefix usat en «reset» no és permés."
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "El valor usat en «reset» no és permés."
+
+# ivb (2001/11/24)
+# ivb  Es refereix a una variable lògica.
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "«%s» està activada."
+
+# ivb (2001/11/24)
+# ivb  Es refereix a una variable lògica.
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "«%s» no està activada."
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: El tipus de bústia no és vàlid."
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: El valor no és vàlid."
+
+#: init.c:1312
+#, fuzzy, c-format
+msgid "%s: Unknown type."
+msgstr "%s: El tipus no és conegut."
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: El tipus no és conegut."
+
+# ivb (2001/11/19)
+# ivb  Cuidadín: en «compose» la cadena és el nom de fitxer i en
+# ivb  «editmsg» i «sendlib» és la cadena d'error.
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Ha fallat stat() sobre «%s»: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "«%s» no és un fitxer ordinari."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Error en «%s», línia %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: Hi ha errors en «%s»."
+
+# ivb (2001/12/08)
+# ivb  ABREUJAT!
+# ivb  source: S'avorta la lectura de «%s» perquè conté massa errors.
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: «%s» conté massa errors: s'avorta la lectura."
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: Error en «%s»."
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: Sobren arguments."
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: L'ordre no és coneguda."
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Error en la línia d'ordres: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "No s'ha pogut determinar el directori de l'usuari."
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "No s'ha pogut determinar el nom de l'usuari."
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "S'ha detectat un bucle entre macros."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "La tecla no està vinculada."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "La tecla no està vinculada. Premeu «%s» per obtenir ajuda."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: Sobren arguments."
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: El menú no existeix."
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "La seqüència de tecles és nul·la."
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: Sobren arguments."
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: La funció no es troba en el mapa."
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: La seqüència de tecles és buida."
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: Sobren arguments."
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: Manquen arguments."
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s: La funció no existeix."
+
+#: keymap.c:912
+msgid "Enter keys (^G to abort): "
+msgstr "Premeu les tecles (^G avorta): "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr "Caràcter = %s, Octal = %o, Decimal = %d"
+
+# ivb (2001/11/24)
+# ivb  Totes aquestes cadenes són missatges d'ajuda.  No sembla haver
+# ivb  restriccions de longitud.
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "l'operació nul·la"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "força la visualització d'un fitxer adjunt usant «mailcap»"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "mostra un fitxer adjunt com a text"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "activa o desactiva la visualització de les subparts"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "va al final de la pàgina"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "redirigeix un missatge a un altre destinatari"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "selecciona un nou fitxer d'aquest directori"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "mostra un fitxer"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "mostra el nom del fitxer seleccionat actualment"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "es subscriu a la bústia actual (només en IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "es dessubscriu de la bústia actual (només en IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr ""
+"canvia entre veure totes les bústies o només aquelles subscrites (només en "
+"IMAP)"
+
+#: keymap_alldefs.h:18
+msgid "list mailboxes with new mail"
+msgstr "llista les bústies amb correu nou"
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "canvia de directori"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "comprova si hi ha correu nou en les bústies"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "adjunta fitxers a aquest missatge"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "adjunta missatges a aquest missatge"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "edita la llista de còpia cega (Bcc)"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "edita la llista de còpia (Cc)"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "edita la descripció d'un fitxer adjunt"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "edita la codificació de la transferència d'un fitxer adjunt"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "demana un fitxer on desar una còpia d'aquest missatge"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "edita un fitxer adjunt"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "edita el camp de remitent (From)"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "edita el missatge amb capçaleres"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "edita el missatge"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "edita el fitxer adjunt usant l'entrada de «mailcap»"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "edita el camp de resposta (Reply-To)"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "edita l'assumpte del missatge (Subject)"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "edita la llista de destinataris (To)"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "crea una nova bústia (només en IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "edita el tipus de contingut d'un fitxer adjunt"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "crea una còpia temporal d'un fitxer adjunt"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "executa «ispell» (comprovació ortogràfica) sobre el missatge"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "crea un nou fitxer adjunt usant l'entrada de «mailcap»"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "estableix si un fitxer adjunt serà recodificat"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "desa aquest missatge per enviar-lo més endavant"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "reanomena (o mou) un fitxer adjunt"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "envia el missatge"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "canvia la disposició entre en línia o adjunt"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "estableix si cal esborrar un fitxer una volta enviat"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "edita la informació de codificació d'un missatge"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "escriu el missatge en una carpeta"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "còpia un missatge en un fitxer o bústia"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "crea un àlies partint del remitent d'un missatge"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "mou l'indicador al final de la pantalla"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "mou l'indicador al centre de la pantalla"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "mou l'indicador al començament de la pantalla"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "crea una còpia descodificada (text/plain) del missatge"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "crea una còpia descodificada (text/plain) del missatge i l'esborra"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "esborra l'entrada actual"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "esborra la bústia actual (només en IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "esborra tots els missatges d'un subfil"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "esborra tots els missatges d'un fil"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "mostra l'adreça completa del remitent"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "mostra un missatge i oculta o mostra certs camps de la capçalera"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "mostra un missatge"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "edita un missatge en brut"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "esborra el caràcter anterior al cursor"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "mou el cursor un caràcter a l'esquerra"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "mou el cursor al començament de la paraula"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "salta al començament de la línia"
+
+# ivb (2001/12/07)
+# ivb  Es refereix a les definides en «mailboxes».
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "canvia entre les bústies d'entrada"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "completa el nom de fitxer o l'àlies"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "completa una adreça fent una consulta"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "esborra el caràcter sota el cursor"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "salta al final de la línia"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "mou el cursor un caràcter a la dreta"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "mou el cursor al final de la paraula"
+
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr "es desplaça cap avall en la llista d'historial"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "es desplaça cap amunt en la llista d'historial"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "esborra els caràcters des del cursor fins el final de la línia"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "esborra els caràcters des del cursor fins el final de la paraula"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "esborra tots els caràcters de la línia"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "esborra la paraula a l'esquerra del cursor"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "escriu tal qual la tecla premuda a continuació"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "transposa el caràcter sota el cursor i l'anterior"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "posa la primera lletra de la paraula en majúscula"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "converteix la paraula a minúscules"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "converteix la paraula a majúscules"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "executa una ordre de «muttrc»"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "estableix una màscara de fitxers"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "abandona aquest menú"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "filtra un fitxer adjunt amb una ordre de l'intèrpret"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "va a la primera entrada"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "canvia el senyalador «important» d'un missatge"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "reenvia un missatge amb comentaris"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "selecciona l'entrada actual"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "respon a tots els destinataris"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "avança mitja pàgina"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "endarrereix mitja pàgina"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "mostra aquesta pantalla"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "salta a un número d'índex"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "va a l'última entrada"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "respon a la llista de correu especificada"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "executa una macro"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "redacta un nou missatge de correu"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "obri una carpeta diferent"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "obri una carpeta diferent en mode de només lectura"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "elimina un senyalador d'estat d'un missatge"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "esborra els missatges que concorden amb un patró"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "força l'obtenció del correu d'un servidor IMAP"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "obté el correu d'un servidor POP"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "va al primer missatge"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "va a l'últim missatge"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "mostra només els missatges que concorden amb un patró"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "salta al següent missatge nou"
+
+#: keymap_alldefs.h:113
+msgid "jump to the next new or unread message"
+msgstr "salta al següent missatge nou o no llegit"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "salta al subfil següent"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "salta al fil següent"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "va al següent missatge no esborrat"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "salta al següent missatge no llegit"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "salta al missatge pare del fil"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "salta al fil anterior"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "salta al subfil anterior"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "va a l'anterior missatge no llegit"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "salta a l'anterior missatge nou"
+
+#: keymap_alldefs.h:123
+msgid "jump to the previous new or unread message"
+msgstr "salta a l'anterior missatge nou o no llegit"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "salta a l'anterior missatge no llegit"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "marca el fil actual com a llegit"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "marca el subfil actual com a llegit"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "estableix un senyalador d'estat d'un missatge"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "desa els canvis realitzats a la bústia"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "marca els missatges que concorden amb un patró"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "restaura els missatges que concorden amb un patró"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "desmarca els missatges que concorden amb un patró"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "va al centre de la pàgina"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "va a l'entrada següent"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "avança una línia"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "va a la pàgina següent"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "salta al final del missatge"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "oculta o mostra el text citat"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "avança fins el final del text citat"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "salta a l'inici del missatge"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "redirigeix un missatge o fitxer adjunt a una ordre de l'intèrpret"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "va a l'entrada anterior"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "endarrereix una línia"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "va a la pàgina anterior"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "imprimeix l'entrada actual"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "pregunta a un programa extern per una adreça"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "afig els resultats d'una consulta nova als resultats actuals"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "desa els canvis realitzats a la bústia i ix"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "recupera un missatge posposat"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "neteja i redibuixa la pantalla"
+
+# ivb (2001/11/26)
+# ivb  Es refereix a una funció -> femení.
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{interna}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "respon a un missatge"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "usa el missatge actual com a plantilla per un de nou"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "guarda un missatge o fitxer adjunt en un fitxer"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "cerca una expressió regular"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "cerca cap enrere una expressió regular"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "cerca la concordança següent"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "cerca la concordança anterior"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "estableix si cal resaltar les concordances trobades"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "invoca una ordre en un subintèrpret"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "ordena els missatges"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "ordena inversament els missatges"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "marca l'entrada actual"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "aplica la funció següent als missatges marcats"
+
+#: keymap_alldefs.h:164
+#, fuzzy
+msgid "apply next function ONLY to tagged messages"
+msgstr "aplica la funció següent als missatges marcats"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "marca el subfil actual"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "marca el fil actual"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "canvia el senyalador «nou» d'un missatge"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "estableix si s'escriuran els canvis a la bústia"
+
+# ivb (2001/12/07)
+# ivb  Es refereix a les definides en «mailboxes».
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr ""
+"estableix si es navegarà només per les bústies d'entrada o per tots els "
+"fitxers"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "va a l'inici de la pàgina"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "restaura l'entrada actual"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "restaura tots els missatges d'un fil"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "restaura tots els missatges d'un subfil"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "mostra el número de versió i la data de Mutt"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "mostra un fitxer adjunt usant l'entrada de «mailcap» si és necessari"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "mostra els fitxers adjunts MIME"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr "mostra el codi d'una tecla premuda"
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "mostra el patró limitant actiu"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "plega o desplega el fil actual"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "plega o desplega tots els fils"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "adjunta una clau pública PGP"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "mostra les opcions de PGP"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "envia una clau pública PGP"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "verifica una clau pública PGP"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "mostra l'identificador d'usuari d'una clau"
+
+# ivb (2001/12/02)
+# ivb  Es refereix al format del missatge.
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "comprova si s'ha usat el PGP clàssic"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "accepta la cadena construïda"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "afig un redistribuïdor a la cadena"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "inserta un redistribuïdor en la cadena"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "esborra un redistribuïdor de la cadena"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "selecciona l'element anterior de la cadena"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "selecciona l'element següent de la cadena"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "envia el missatge per una cadena de redistribuïdors Mixmaster"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "fa una còpia desxifrada del missatge i esborra aquest"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "fa una còpia desxifrada del missatge"
+
+#: keymap_alldefs.h:196
+msgid "wipe passphrase(s) from memory"
+msgstr "esborra de la memòria la o les frases clau"
+
+#: keymap_alldefs.h:197
+msgid "extract supported public keys"
+msgstr "extreu les claus públiques suportades"
+
+#: keymap_alldefs.h:198
+msgid "show S/MIME options"
+msgstr "mostra les opcions d'S/MIME"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "No resta memòria!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"Per contactar amb els desenvolupadors, per favor envieu un correu\n"
+"a <mutt-dev@mutt.org>.  Per informar d'un error, per favor useu\n"
+"la utilitat flea(1).\n"
+
+#: main.c:50
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins i d'altres.\n"
+"Mutt s'ofereix SENSE CAP GARANTIA; useu «mutt -vv» per obtenir-ne més\n"
+"detalls.  Mutt és programari lliure i podeu, si voleu, redistribuir-lo\n"
+"sota certes condicions; useu «mutt -vv» per obtenir-ne més detalls.\n"
+
+#: main.c:56
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"Moltes altres persones que no s'hi mencionen han contribuït amb gran\n"
+"quantitat de codi, solucions i suggeriments.\n"
+"\n"
+"    Aquest és programari lliure; podeu redistribuir-lo i/o modificar-lo\n"
+"    sota els termes de la Llicència Pública General GNU tal i com ha estat\n"
+"    publicada per la Free Software Foundation; bé sota la versió 2 de la\n"
+"    Llicència o bé (si ho preferiu) sota qualsevol versió posterior.\n"
+"\n"
+"    Aquest programa es distribueix amb l'expectativa de que serà útil,\n"
+"    però SENSE CAP GARANTIA; ni tan sols la garantia implícita de\n"
+"    COMERCIABILITAT o ADEQUACIÓ PER UN PROPÒSIT PARTICULAR.  Vegeu la\n"
+"    Llicència Pública General GNU per obtenir-ne més detalls.\n"
+"\n"
+"    Hauríeu d'haver rebut una còpia de la Llicència Pública General GNU\n"
+"    juntament amb aquest programa; en cas contrari, escriviu a la Free\n"
+"    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,\n"
+"    MA  02111, USA.\n"
+
+#: main.c:94
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"Forma d'ús: mutt [-nRyzZ] [-e <ord>] [-F <fitx>] [-m <tipus>] [-f <fitx>]\n"
+"            mutt [-nR] [-e <ord>] [-F <fitx>] -Q <var> [-Q <var>] [...]\n"
+"            mutt [-nR] [-e <ord>] [-F <fitx>] -A <àlies> [-A <àlies>] [...]\n"
+"            mutt [-nx] [-e <ord>] [-a <fitx>] [-F <fitx>] [-H <fitx>]\n"
+"                 [-i <fitx>] [-s <assmpt>] [-b <adr>] [-c <adr>] <adr> "
+"[...]\n"
+"            mutt [-n] [-e <ord>] [-F <fitx>] -p\n"
+"            mutt -v[v]\n"
+"\n"
+"Opcions:\n"
+"  -A <alias>           Expandeix l'àlies indicat.\n"
+"  -a <fitxer>          Adjunta un fitxer al missatge.\n"
+"  -b <adreça>          Indica una adreça per la còpia cega (BCC).\n"
+"  -c <adreça>          Indica una adreça per la còpia (CC).\n"
+"  -e <ordre>           Indica una ordre a executar abans de la "
+"inicialització.\n"
+"  -f <fitxer>          Indica quina bústia llegir.\n"
+"  -F <fitxer>          Indica un fitxer «muttrc» alternatiu.\n"
+"  -H <fitxer>          Indica un fitxer esborrany d'on llegir la capçalera.\n"
+"  -i <fitxer>          Indica un fitxer que Mutt inclourà en la resposta.\n"
+"  -m <tipus>           Indica un tipus de bústia per defecte.\n"
+"  -n                   Fa que Mutt no llija el fitxer «Muttrc» del sistema.\n"
+"  -p                   Recupera un missatge posposat.\n"
+"  -Q <variable>        Consulta el valor d'una variable de configuració.\n"
+"  -R                   Obri la bústia en mode de només lectura.\n"
+"  -s <assumpte>        Indica l'assumpte (entre cometes si porta espais).\n"
+"  -v                   Mostra la versió i les definicions de compil·lació.\n"
+"  -x                   Simula el mode d'enviament de «mailx».\n"
+"  -y                   Selecciona una bústia de la vostra llista "
+"«mailboxes».\n"
+"  -z                   Ix immediatament si no hi ha missatges en la bústia.\n"
+"  -Z                   Obri la primera bústia amb missatges nous, i ix\n"
+"                       immediatament si no n'hi ha cap.\n"
+"  -h                   Mostra aquest missatge d'ajuda."
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Opcions de compil·lació:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Error en inicialitzar el terminal."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "S'activa la depuració a nivell %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "No es va definir «DEBUG» en la compil·lació. Es descarta l'opció.\n"
+
+# ivb (2001/11/27)
+# ivb  Es refereix al directori «Maildir» -> masculí.
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "«%s» no existeix. Voleu crear-lo?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "No s'ha pogut crear «%s»: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "No s'ha especificat cap dstinatari.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: No s'ha pogut adjuntar el fitxer.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "No hi ha cap bústia amb correu nou."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "No s'ha definit cap bústia d'entrada."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "La bústia és buida."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "S'està llegint «%s»... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "La bústia és corrupta!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "La bústia ha estat corrompuda!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Error fatal!  No s'ha pogut reobrir la bústia!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "No s'ha pogut blocar la bústia!"
+
+# ivb (2001/11/27)
+# ivb  Cal mantenir el missatge curt.
+# ivb  ABREUJAT!
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+"sync: La bústia és modificada però els missatges no! (informeu de l'error)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "S'estan escrivint els missatges... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "S'estan realitzant els canvis..."
+
+# ivb (2001/12/08)
+# ivb  ABREUJAT!
+# ivb  L'escriptura ha fallat!  S'ha desat la bústia parcial en «%s».
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "L'escriptura fallà!  Es desa la bústia parcial en «%s»."
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "No s'ha pogut reobrir la bústia!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "S'està reobrint la bústia..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Salta a: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "El número d'índex no és vàlid."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "No hi ha cap entrada."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "No podeu baixar més."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "No podeu pujar més."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Vos trobeu en l'última pàgina."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Vos trobeu en la primera pàgina."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "La primera entrada ja és visible."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "L'última entrada ja és visible."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Vos trobeu en l'última entrada."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Vos trobeu en la primera entrada."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Cerca: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Cerca cap enrere: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "No s'ha especificat cap patró de recerca."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "No s'ha trobat."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "No hi ha cap entrada marcada."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "No es pot cercar en aquest menú."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "No es pot saltar en un diàleg."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "No es pot marcar."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "S'està llegint «%s»... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr "maildir_commit_message(): No s'ha pogut canviar la data del fitxer."
+
+#: muttlib.c:835
+#, fuzzy
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "El fitxer és un directori; voleu desar-hi a sota?"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "El fitxer és un directori; voleu desar-hi a sota?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Fitxer a sota del directori: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "El fitxer ja existeix; (s)obreescriu, (a)fig o (c)ancel·la?"
+
+# ivb (2001/11/27)
+# ivb  (s)obreescriu, (a)fig, (c)ancel·la
+#: muttlib.c:869
+msgid "oac"
+msgstr "sac"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "No es poden desar missatges en bústies POP."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "«%s» no és una bústia!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Voleu afegir els missatges a «%s»?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "S'ha tancat la connexió amb «%s»."
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL no es troba disponible."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "L'ordre de preconnexió (preconnect) ha fallat."
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Error en parlar amb «%s» (%s)."
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr "L'IDN no és vàlid: «%s»"
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "S'està cercant «%s»..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "No s'ha pogut trobar l'estació «%s»."
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "S'està connectant amb «%s»..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "No s'ha pogut connectar amb «%s» (%s)."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "No s'ha pogut extraure l'entropia suficient del vostre sistema."
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "S'està plenant la piscina d'entropia «%s»...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "«%s» no té uns permissos segurs!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "S'ha inhabilitat l'SSL per manca d'entropia."
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "Error d'E/S"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "Error no especificat del protocol"
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "La negociació d'SSL ha fallat: %s."
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "No s'ha pogut obtenir el certificat del servidor."
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "La connexió SSL usa «%s» (%s)."
+
+# ivb (2001/12/02)
+# ivb  Es pot referir a nom, correu, organització, unitat organitzativa,
+# ivb  localitat, estat, país -> ni masculí ni femení, sinò tot el contrari.
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "Desconegut/da"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[no s'ha pogut calcular]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[la data no és vàlida]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "El certificat del servidor encara no és vàlid."
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "El certificat del servidor ha expirat."
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Aquest certificat pertany a:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Aquest certificat ha estat lliurat per:"
+
+# ivb (2001/12/08)
+# ivb  A continuació ve el rang de validesa.
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Aquest certificat té validesa"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   des de %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "     fins %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Empremta digital: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "Comprovació del certificat SSL"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(r)ebutja, accepta (u)na sola volta, accepta (s)empre"
+
+# ivb (2001/11/27)
+# ivb  (r)ebutja, accepta (u)na sola volta, accepta (s)empre
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "rus"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(r)ebutja, accepta (u)na sola volta"
+
+# ivb (2001/11/27)
+# ivb  (r)ebutja, accepta (u)na sola volta
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "ru"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Ix  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Avís: No s'ha pogut desar el certificat."
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "S'ha desat el certificat."
+
+# ivb (2001/12/08)
+# ivb  ABREUJAT!
+# ivb  Hi ha massa forrellats; voleu eliminar-ne un de «%s»?
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Voleu eliminar un forrellat sobrant de «%s»?"
+
+# ivb (2001/11/27)
+# ivb  «dotlock» és el programa usat per blocar.
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "No s'ha pogut blocar «%s» amb «dotlock».\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "S'ha excedit el temps d'espera en intentar blocar amb fcntl()!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "S'està esperant el blocatge amb fcntl()... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "S'ha excedit el temps d'espera en intentar blocar amb flock()!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "S'està esperant el blocatge amb flock()... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "No s'ha pogut blocar «%s».\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "S'està llegint «%s»..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "S'està escrivint «%s»..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "No s'ha pogut sincronitzar la bústia «%s»!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Voleu moure els missatges a «%s»?"
+
+# ivb (2001/12/08)
+# ivb  Ací «%d» sempre és 1.
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Voleu eliminar %d missatge esborrat?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Voleu eliminar %d missatges esborrats?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "S'estan movent els missatges llegits a «%s»..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "No s'ha modificat la bústia."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d mantinguts, %d moguts, %d esborrats."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d mantinguts, %d esborrats."
+
+# ivb (2001/12/08)
+# ivb  Pot anar darrere de la següent de la següent.
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr "Premeu «%s» per habilitar l'escriptura."
+
+# ivb (2001/12/08)
+# ivb  Pot anar darrere de la següent.
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "Habiliteu l'escriptura amb «toggle-write»!"
+
+# ivb (2001/12/08)
+# ivb  Pot precedir alguna de les anteriors.  Mantenir breu.
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "Bústia en estat de només lectura. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "S'ha establert un punt de control en la bústia."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "No s'ha pogut escriure el missatge."
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "No es troba disponible en aquest menú."
+
+# ivb (2001/12/08)
+# ivb  Menú superpoblat: mantenir _molt_ curt!
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "RePàg"
+
+# ivb (2001/12/08)
+# ivb  Menú superpoblat: mantenir _molt_ curt!
+#: pager.c:1447
+msgid "NextPg"
+msgstr "AvPàg"
+
+# ivb (2001/12/08)
+# ivb  Menú superpoblat: mantenir _molt_ curt!
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "VeuAdjnt"
+
+# ivb (2001/12/08)
+# ivb  Menú superpoblat: mantenir _molt_ curt!
+#: pager.c:1454
+msgid "Next"
+msgstr "Segnt"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "El final del missatge ja és visible."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "L'inici del missatge ja és visible."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Cerca cap enrere: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Cerca: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "Ja s'està mostrant l'ajuda."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "No hi ha més text citat."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "No hi ha més text sense citar després del text citat."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "El missatge «multipart» no té paràmetre «boundary»!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Error en l'expressió: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "El dia del mes no és vàlid: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "El mes no és vàlid: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "La data relativa no és vàlida: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "Error en l'expressió."
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "Error en el patró en: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: L'ordre no és vàlida."
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: No es suporta en aquest mode."
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "Manca un paràmetre."
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "Els parèntesis no estan aparellats: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "El patró és buit."
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "error: L'operació %d és desconeguda. (informeu d'aquest error)"
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "S'està compil·lant el patró de recerca..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "S'està executant l'ordre sobre els missatges concordants..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "No hi ha cap missatge que concorde amb el criteri."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "La recerca ha arribat al final sense trobar cap concordança."
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "La recerca ha arribat a l'inici sense trobar cap concordança."
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "S'ha interromput la recerca."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "S'ha esborrat de la memòria la frase clau de PGP."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Error: No s'ha pogut crear el subprocés PGP! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- Final de l'eixida de PGP. --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- COMENÇA EL MISSATGE PGP --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- COMENÇA EL BLOC DE CLAU PÚBLICA PGP --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- COMENÇA EL MISSATGE PGP SIGNAT --]\n"
+"\n"
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- TERMINA EL MISSATGE PGP --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- TERMINA EL BLOC DE CLAU PÚBLICA PGP --]\n"
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- TERMINA EL MISSATGE PGP SIGNAT --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Error: No s'ha trobat l'inici del missatge PGP! --]\n"
+"\n"
+
+#: pgp.c:662
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Error intern. Informeu <roessler@does-not-exist.org>."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Error: No s'ha pogut crear el subprocés PGP! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Error: El missatge PGP/MIME és malmés! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Error: No s'ha pogut crear un fitxer temporal! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- Les dades següents es troben xifrades amb PGP/MIME: --]\n"
+"\n"
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- Final de les dades xifrades amb PGP/MIME. --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "No s'ha pogut obrir el subprocés PGP!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "Voleu usar l'ID de clau «%s» per %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "Entreu l'ID de clau per %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "No s'ha pogut invocar PGP."
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "S'està recollint la clau PGP..."
+
+#: pgpkey.c:486
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr ""
+"Totes les claus concordants han expirat o estan revocades o inhabilitades."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Selecciona  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Comprova clau  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "Claus PGP que concorden amb <%s>."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "Claus PGP que concordem amb «%s»."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "No s'ha pogut obrir «/dev/null»."
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "No s'ha pogut crear un fitxer temporal."
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "ID de la clau: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr ""
+"No es pot usar aquesta clau: es troba expirada, inhabilitada o revocada."
+
+# ivb (2001/12/08)
+# ivb  ABREUJAT!
+# ivb  Aquest ID es troba expirat, inhabilitat o revocat.
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "ID expirat/inhabilitat/revocat."
+
+# ivb (2002/02/02)
+# ivb  ABREUJAT! (Hei!  Hui és 2/2/2!)
+# ivb  Aquest ID té una validesa indefinida.
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "L'ID té una validesa indefinida."
+
+# ivb (2001/12/08)
+# ivb  ABREUJAT!
+# ivb  Aquest ID no és vàlid.
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "L'ID no és vàlid."
+
+# ivb (2001/12/08)
+# ivb  ABREUJAT!
+# ivb  Aquest ID només és lleugerament vàlid.
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "L'ID és lleugerament vàlid."
+
+# ivb (2001/12/08)
+# ivb  Davant d'açò pot anar una de les quatre anteriors.
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s  Voleu realment usar la clau?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Per favor, entreu l'ID de la clau: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "S'està invocant «pgp»..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "Clau PGP %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "S'estan cercant les claus que concorden amb «%s»..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "El servidor no suporta l'ordre «TOP»."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "No s'ha pogut escriure la capçalera en un fitxer temporal!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "El servidor no suporta l'ordre «UIDL»."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "«%s» no és un camí POP vàlid."
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "S'està recollint la llista de missatges..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "No s'ha pogut escriure el missatge en un fitxer temporal!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "S'està comprovant si hi ha missatges nous..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "No s'ha definit el servidor POP (pop_host)."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "No hi ha correu nou en la bústia POP."
+
+# ivb (2001/11/30)
+# ivb  Use «eliminar» pq en portar els missatges s'eliminen completament
+# ivb  del servidor POP.
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "Voleu eliminar els missatges del servidor?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "S'estan llegint els missatges nous (%d octets)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "Error en escriure en la bústia!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [llegits %d de %d missatges]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "El servidor ha tancat la connexió!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "S'està autenticant (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "S'està autenticant (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "L'autenticació APOP ha fallat."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "El servidor no suporta l'ordre «USER»."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "No s'han pogut deixar els missatges en el servidor."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "Error en connectar amb el servidor: %s"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "S'està tancant la connexió amb el servidor POP..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "S'estan verificant els índexs dels missatges..."
+
+# ivb (2001/12/08)
+# ivb  ABREUJAT!
+# ivb  S'ha perdut la connexió.  Voleu reconnectar amb el servidor POP?
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "S'ha perdut la connexió. Reconnectar amb el servidor POP?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Missatges posposats"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "No hi ha cap missatge posposat."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "La capçalera PGP no és permesa."
+
+#: postpone.c:479
+msgid "Illegal S/MIME header"
+msgstr "La capçalera S/MIME no és permesa."
+
+#: postpone.c:554
+msgid "Decryption failed."
+msgstr "El desxifratge ha fallat."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Nova consulta"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Crea àlies"
+
+#: query.c:48
+msgid "Search"
+msgstr "Cerca"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "S'està esperant una resposta..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "No s'ha definit cap ordre de consulta."
+
+#: query.c:286
+msgid "Query"
+msgstr "Consulta"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Consulta: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Consulta de «%s»"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Redirigeix"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Imprimeix"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "S'està desant..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "S'ha desat el fitxer adjunt."
+
+# ivb (2001/12/08)
+# ivb  ABREUJAT!
+# ivb  AVÍS!  Esteu a punt de sobreescriure «%s»; voleu continuar?
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "AVÍS!  Aneu a sobreescriure «%s»; voleu continuar?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "S'ha filtrat el fitxer adjunt."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Filtra amb: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Redirigeix a: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "No sé com imprimir els fitxers adjunts de tipus «%s»!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Voleu imprimir els fitxers adjunts seleccionats?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Voleu imprimir el fitxer adjunt?"
+
+#: recvattach.c:938
+msgid "Can't decrypt encrypted message!"
+msgstr "No s'ha pogut desxifrar el missatge xifrat!"
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Fitxers adjunts"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "No hi ha cap subpart a mostrar!"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "No es poden esborrar els fitxers adjunts en un servidor POP."
+
+#: recvattach.c:1056
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "No es poden esborrar els fitxers adjunts en un missatge xifrat."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr ""
+"Només es poden esborrar els fitxers adjunts dels missatges «multipart»."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Només es poden redirigir parts de tipus «message/rfc822»."
+
+#: recvcmd.c:213
+msgid "Error bouncing message!"
+msgstr "Error en redirigir el missatge!"
+
+#: recvcmd.c:213
+msgid "Error bouncing messages!"
+msgstr "Error en redirigir els missatges!"
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "No s'ha pogut obrir el fitxer temporal «%s»."
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "Voleu reenviar com a fitxers adjunts?"
+
+# ivb (2001/12/08)
+# ivb  ABREUJAT!
+# ivb  No s'han pogut descodificar tots els fitxers adjunts marcats.  Voleu reenviar els altres usant MIME?
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr "Reenviar amb MIME fitxers adjunts marcats no descodificables?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Voleu reenviar amb encapsulament MIME?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "No s'ha pogut crear «%s»."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "No s'ha trobat cap missatge marcat."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "No s'ha trobat cap llista de correu!"
+
+# ivb (2001/12/08)
+# ivb  ABREUJAT!
+# ivb  No s'han pogut descodificar tots els fitxers adjunts marcats.  Voleu encapsular la resta usant MIME?
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr "Encapsular amb MIME fitxers adjunts marcats no descodificables?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Afig"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Insereix"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Esborra"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "Accepta"
+
+# ivb (2001/12/07)
+# ivb  En aquest cas «mixmaster» és un programa.
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "No s'ha pogut obtenir «type2.list» de «mixmaster»!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Seleccioneu una cadena de redistribuïdors."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "Error: No es pot usar «%s» com a redistribuïdor final d'una cadena."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Les cadenes de Mixmaster estan limitades a %d elements."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "La cadena de redistribuïdors ja és buida."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "Vos trobeu en el primer element de la cadena."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "Vos trobeu en l'últim element de la cadena."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "No es poden usar les capçaleres «Cc» i «Bcc» amb Mixmaster."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr ""
+"Per favor, establiu un valor adequat per «hostname» quan useu Mixmaster!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Error en enviar el missatge, el procés fill ha eixit amb codi %d.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Error en enviar el missatge."
+
+# ivb (2001/12/08)
+# ivb  ABREUJAT!
+# ivb  L'entrada del tipus «%s» en «%s», línia %d, no té un format vàlid.
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "Entrada de tipus «%s» en «%s», línia %d: format no vàlid."
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "No s'ha especificat cap camí a «mailcap»."
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "No s'ha trobat cap entrada pel tipus «%s» en «mailcap»"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: Manquen arguments."
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: Sobren arguments."
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "No hi ha assumpte; voleu avortar el missatge?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "S'avorta el missatge sense assumpte."
+
+# ivb (2001/12/07)
+# ivb  El primer «%s» és una adreça de correu i el segon potser «,...».
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Voleu escriure una resposta a %s%s?"
+
+# ivb (2001/12/07)
+# ivb  El primer «%s» és una adreça de correu i el segon potser «,...».
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "Voleu escriure un seguiment a %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "Cap dels missatges marcats és visible!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Voleu incloure el missatge en la resposta?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "S'està incloent el missatge citat..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "No s'han pogut incloure tots els missatges sol·licitats!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "Voleu reenviar com a fitxer adjunt?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "S'està preparant el missatge a reenviar..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Voleu recuperar un missatge posposat?"
+
+#: send.c:1336
+msgid "Edit forwarded message?"
+msgstr "Voleu editar el missatge a reenviar?"
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Voleu avortar el missatge no modificat?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "S'avorta el missatge no modificat."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "No s'ha enviat el missatge."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "S'ha posposat el missatge."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "No s'ha especificat cap destinatari."
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "No s'ha especificat cap destinatari."
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "No hi ha assumpte; voleu avortar l'enviament?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "No s'ha especificat l'assumpte."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "S'està enviant el missatge..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "No s'ha pogut enviar el missatge."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "S'ha enviat el missatge."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "S'està enviant en segon pla."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "No s'ha trobat el paràmetre «boundary»! (informeu d'aquest error)"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "«%s» ja no existeix!"
+
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "«%s» no és un fitxer ordinari."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "No s'ha pogut obrir «%s»."
+
+# ivb (2001/12/08)
+# ivb  ABREUJAT!
+# ivb  Error en enviar el missatge, el procés fill ha exit amb codi %d (%s).
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Error en enviament, el fill isqué amb codi %d (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Eixida del procés de repartiment"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr "L'IDN «%s» no és vàlid, en preparar «Resent-From»."
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s... Eixint.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "S'ha rebut «%s»... Eixint.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "S'ha rebut el senyal %d... Eixint.\n"
+
+# Es refereixen a un certificat -> masculí, singular.  ivb
+# La longitud crec que no és fonamental, si totes són iguals.  ivb
+#: smime.c:300
+msgid "Trusted   "
+msgstr "Confiat     "
+
+#: smime.c:303
+msgid "Verified  "
+msgstr "Verficat    "
+
+#: smime.c:306
+msgid "Unverified"
+msgstr "No verificat"
+
+#: smime.c:309
+msgid "Expired   "
+msgstr "Expirat     "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr "Revocat     "
+
+#: smime.c:315
+msgid "Invalid   "
+msgstr "No vàlid    "
+
+#: smime.c:318
+msgid "Unknown   "
+msgstr "Desconegut  "
+
+#: smime.c:347
+msgid "Enter keyID: "
+msgstr "Entreu l'ID de clau: "
+
+#: smime.c:370
+#, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "Certificats S/MIME que concordem amb «%s»."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr "L'ID «%s» no ha estat verificat. Voleu usar-lo per %s?"
+
+#: smime.c:523 smime.c:592
+#, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "Voleu usar l'ID (no verificat!) «%s» per %s?"
+
+#: smime.c:526 smime.c:595
+#, c-format
+msgid "Use ID %s for %s ?"
+msgstr "Voleu usar l'ID «%s» per %s?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr "Avís: Encara no heu decidit confiar en l'ID «%s». (Premeu una tecla.)"
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr "No s'ha trobat cap certificat (vàlid) per %s."
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "Error: No s'ha pogut crear el subprocés OpenSSL!"
+
+# Hau!  ivb
+#: smime.c:1197
+msgid "no certfile"
+msgstr "No hi ha fitxer de certificat."
+
+# Hau!  ivb
+#: smime.c:1200
+msgid "no mbox"
+msgstr "No hi ha bústia."
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr "OpenSSL no ha produit cap eixida..."
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr "Avís: No s'ha trobat el certificat intermig."
+
+#: smime.c:1426
+msgid "Can't open OpenSSL subprocess!"
+msgstr "No s'ha pogut obrir el subprocés OpenSSL!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr "OpenSSL no ha produit cap eixida..."
+
+#: smime.c:1629 smime.c:1751
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- Final de l'eixida d'OpenSSL. --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Error: No s'ha pogut crear el subprocés OpenSSL! --]\n"
+
+#: smime.c:1755
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr "[-- Les dades següents es troben xifrades amb S/MIME: --]\n"
+
+#: smime.c:1758
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr "[-- Les dades següents es troben signades amb S/MIME: --]\n"
+
+#: smime.c:1822
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- Final de les dades xifrades amb S/MIME. --]\n"
+
+#: smime.c:1824
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- Final de les dades signades amb S/MIME. --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "S'està ordenant la bústia."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "No s'ha pogut trobar la funció d'ordenació! (informeu d'aquest error)"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(cap bústia)"
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "El missatge pare no és visible en aquesta vista limitada."
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "El missatge pare no es troba disponible."
diff --git a/po/cs.gmo b/po/cs.gmo
new file mode 100644 (file)
index 0000000..e92a366
Binary files /dev/null and b/po/cs.gmo differ
diff --git a/po/cs.po b/po/cs.po
new file mode 100644 (file)
index 0000000..124474b
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,4985 @@
+# translation of cs.po to Czech
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Dan Ohnesorg <dan@ohnesorg.cz>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: cs\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2004-01-31 11:53+0100\n"
+"Last-Translator: Dan Ohnesorg <dan@ohnesorg.cz>\n"
+"Language-Team: Czech <cs@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0.2\n"
+
+#
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "U¾ivatelské jméno na %s: "
+
+#
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "Heslo pro %s@%s: "
+
+#
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Konec"
+
+#
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Smazat"
+
+#
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Obnovit"
+
+#
+#: addrbook.c:36
+msgid "Select"
+msgstr "Volba"
+
+#
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Nápovìda"
+
+#
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "Nejsou definovány ¾ádné pøezdívky!"
+
+#
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Pøezdívky"
+
+#
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Pøezdívat jako: "
+
+#
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "Pro toto jméno je ji¾ pøezdívka definována!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr "Pozor: :Takto pojmenovaný alias nemusí fungovat, mám to napravit?"
+
+#
+#: alias.c:279
+msgid "Address: "
+msgstr "Adresa: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr "Chyba: '%s' není platné IDN."
+
+#
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Vlastní jméno: "
+
+#
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] Pøijmout?"
+
+#
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Ulo¾it jako: "
+
+#
+#: alias.c:342
+msgid "Alias added."
+msgstr "Pøezdívka zavedena."
+
+#
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Shodu pro jmenný vzor nelze nalézt, pokraèovat?"
+
+#
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "Polo¾ka mailcapu 'compose' vy¾aduje %%s."
+
+#
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "Chyba pøi bìhu programu \"%s\"!"
+
+#
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Soubor nutný pro zpracování hlavièek se nepodaøilo otevøít."
+
+#
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Soubor nutný pro odstranìní hlavièek se nepodaøilo otevøít."
+
+#
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "Pro %s neexistuje polo¾ka mailcapu 'compose', vytváøím prázdný soubor."
+
+#
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "Polo¾ka mailcapu 'edit' vy¾aduje %%s."
+
+#
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "Pro %s neexistuje polo¾ka mailcapu 'edit'."
+
+#
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "Odpovídající polo¾ka v mailcapu nebyla nalezena. Zobrazuji jako text."
+
+#
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "MIME typ není definován, nelze zobrazit pøílohu."
+
+#
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Nelze vytvoøit filtr"
+
+#
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Filtr nelze vytvoøit"
+
+#
+#: attach.c:824
+msgid "Write fault!"
+msgstr "Chyba pøi zápisu!"
+
+#
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Nevím, jak mám toto vytisknout!"
+
+#
+#: browser.c:41
+msgid "Chdir"
+msgstr "Zmìnit adresáø"
+
+#
+#: browser.c:42
+msgid "Mask"
+msgstr "Maska"
+
+#
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s není adresáøem."
+
+#
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Schránky [%d]"
+
+#
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Pøihlá¹ená schránka [%s], Souborová maska: %s"
+
+#
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Adresáø [%s], Souborová maska: %s"
+
+#
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Adresáø nelze pøipojit!"
+
+#
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Souborové masce nevyhovuje ¾ádný soubor."
+
+#
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Vytváøení funguje pouze u IMAP schránek."
+
+#
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Mazání funguje pouze u IMAP schránek."
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Skuteènì chcete smazat schránku \"%s\"?"
+
+#
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "Schránka byla smazána."
+
+#
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "Schránka nebyla smazána."
+
+#
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Nastavit pracovní adresáø na: "
+
+#
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Chyba pøi naèítání adresáøe."
+
+#
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Souborová maska: "
+
+#
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Obrácené øazení dle (d)ata, (p)ísmena, (v)elikosti èi (n)eøadit?"
+
+#
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Øadit dle (d)ata, (p)ísmena, (v)elikosti èi (n)eøadit?"
+
+#
+#: browser.c:1049
+msgid "dazn"
+msgstr "dpvn"
+
+#
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Nové jméno souboru: "
+
+#
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Adresáø nelze zobrazit"
+
+#
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Chyba pøi zobrazování souboru"
+
+#
+#: buffy.c:442
+msgid "New mail in "
+msgstr "Nová po¹ta.ve slo¾ce "
+
+#
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "Barvu %s terminál nepodporuje."
+
+#
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "Barva %s není definována."
+
+#
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "Objekt %s není definován"
+
+#
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "Pøíkaz %s je definován pouze pro objekt typu index."
+
+#
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "pøíli¹ málo argumentù pro %s"
+
+#
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Chybí argumenty."
+
+#
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: pøíli¹ málo argumentù"
+
+#
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: pøíli¹ málo argumentù"
+
+#
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "Atribut %s není definován."
+
+#
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "pøíli¹ málo argumentù"
+
+#
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "pøíli¹ mnoho argumentù"
+
+#
+#: color.c:721
+msgid "default colors not supported"
+msgstr "implicitní barvy nejsou podporovány"
+
+#
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "Ovìøit PGP podpis?"
+
+#
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Doèasný soubor nelze vytvoøit!"
+
+#
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Nelze vytvoøit zobrazovací filtr"
+
+#
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "Nelze kopírovat zprávu."
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr "S/MIME podpis byl úspì¹nì ovìøen."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr "Vlastník S/MIME certifikátu není toto¾ný s odesílatelem zprávy."
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr "S/MIME podpis NELZE ovìøit."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "PGP podpis byl úspì¹nì ovìøen."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "PGP podpis NELZE ovìøit."
+
+#
+#: commands.c:223
+msgid "Command: "
+msgstr "Pøíkaz: "
+
+#
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Zaslat kopii zprávy na: "
+
+#
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Zaslat kopii oznaèených zpráv na: "
+
+#
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "Chyba pøi zpracování adresy!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr "Chybné IDN: '%s'"
+
+#
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Zaslat kopii zprávy na %s"
+
+#
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Zaslat kopii zpráv na %s"
+
+#
+#: commands.c:294 recvcmd.c:192
+msgid "Message not bounced."
+msgstr "Kopie zprávy nebyla odeslána."
+
+#
+#: commands.c:294 recvcmd.c:192
+msgid "Messages not bounced."
+msgstr "Kopie zpráv nebyly odeslány."
+
+#
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Kopie zprávy byla odeslána."
+
+#
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Kopie zpráv byly odeslány."
+
+#
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "Filtrovací proces nelze vytvoøit"
+
+#
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Poslat rourou do pøíkazu: "
+
+#
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "Není definován ¾ádný pøíkaz pro tisk."
+
+#
+#: commands.c:483
+msgid "Print message?"
+msgstr "Vytisknout zprávu?"
+
+#
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Vytisknout oznaèené zprávy?"
+
+#
+#: commands.c:492
+msgid "Message printed"
+msgstr "Zpráva byla vytisknuta"
+
+#
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Zprávy byly vytisknuty"
+
+#
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "Zprávu nelze vytisknout"
+
+#
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "Zprávy nelze vytisknout"
+
+#
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Øadit opaènì (d)at/(o)d/pøí(j)/(v)ìc/(p)ro/v(l)ákno/(n)eseø/veli(k)/(s)"
+"kóre?: "
+
+#
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Øadit (d)at/(o)d/pøí(j)/(v)ìc/(p)ro/v(l)ákno/(n)eseø/veli(k)/(s)kóre?: "
+
+#
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dojvplnks"
+
+#
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Pøíkaz pro shell: "
+
+#
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "Dekódovat - ulo¾it %s do schránky"
+
+#
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "Dekódovat - zkopírovat %s do schránky"
+
+#
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "De¹ifrovat - ulo¾it %s do schránky"
+
+#
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "De¹ifrovat - zkopírovat %s do schránky"
+
+#
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "Ulo¾it %s do schránky"
+
+#
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "Zkopírovat %s do schránky"
+
+#
+#: commands.c:706
+msgid " tagged"
+msgstr " oznaèené"
+
+#
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Kopíruji do %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "Pøevést pøi odesílání na %s?"
+
+#
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Polo¾ka Content-Type zmìnìna na %s."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "Znaková sada zmìnìna na %s; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "nepøevádím"
+
+#: commands.c:914
+msgid "converting"
+msgstr "pøevádím"
+
+#
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Nejsou ¾ádné pøílohy."
+
+#
+#: compose.c:84
+msgid "Send"
+msgstr "Odeslat"
+
+#
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Zru¹it"
+
+#
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Pøilo¾it soubor"
+
+#
+#: compose.c:90
+msgid "Descrip"
+msgstr "Popis"
+
+#
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Podepsat, za¹ifrovat"
+
+#
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Za¹ifrovat"
+
+#
+#: compose.c:131
+msgid "Sign"
+msgstr "Podepsat"
+
+#
+#: compose.c:133
+msgid "Clear"
+msgstr "Smazat"
+
+#
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " podepsat jako: "
+
+#
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<implicitní>"
+
+#
+#: compose.c:149
+msgid "Encrypt with: "
+msgstr "Za¹ifrovat pomocí:"
+
+#
+#: compose.c:165
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "PGP - (¹)ifrovat, (p)odepsat, podepsat (j)ako, (o)bojí, èi (n)ic?"
+
+#
+#: compose.c:166
+msgid "esabf"
+msgstr "¹pjon"
+
+#
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Podepsat jako: "
+
+#
+#: compose.c:227
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "S/MIME - (s)ifrovat, (p)odepsat, podepsat (j)ako, (o)bojí, èi (n)ic?"
+
+#
+#: compose.c:228
+msgid "eswabf"
+msgstr "spzjon"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr "1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, nebo (n)ic? "
+
+#: compose.c:238
+msgid "12345f"
+msgstr "12345n"
+
+#
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] ji¾ neexistuje!"
+
+#
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "Zmìna v %s [#%d]. Zmìnit kódování?"
+
+#
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Pøílohy"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr "Pozor: '%s' není platné IDN."
+
+#
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Nemù¾ete smazat jedinou pøílohu."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr "Neplatné IDN v \"%s\": '%s'"
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "Pøipojuji zvolené soubory..."
+
+#
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "%s nelze pøipojit!"
+
+#
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Otevøít schránku, z ní¾ se pøipojí zpráva"
+
+#
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "V této slo¾ce nejsou ¾ádné zprávy."
+
+#
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Oznaète zprávy, které chcete pøipojit!"
+
+#
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Nelze pøipojit!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "Pøekódování se týká pouze textových pøíloh."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "Aktuální pøíloha nebude pøevedena."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "Aktuální pøíloha bude pøevedena."
+
+#
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Nesprávné kódování."
+
+#
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Ulo¾it kopii této zprávy?"
+
+#
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Pøejmenovat na: "
+
+#
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "Chyba pøi volání funkce stat pro %s: %s"
+
+#
+#: compose.c:1141
+msgid "New file: "
+msgstr "Nový soubor: "
+
+#
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Polo¾ka 'Content-Type' je tvaru tøída/podtøída"
+
+#
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Hodnota %s polo¾ky 'Content-Type' je neznámá."
+
+#
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Soubor %s nelze vytvoøit."
+
+#
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "Vytvoøení pøílohy se nezdaøilo."
+
+#
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Odlo¾it tuto zprávu?"
+
+#
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Ulo¾it zprávu do schránky"
+
+#
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Ukládám zprávu do %s ..."
+
+#
+#: compose.c:1305
+msgid "Message written."
+msgstr "Zpráva ulo¾ena."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr "Je aktivní S/MIME, zru¹it jej a pokraèovat?"
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr "Je aktivní PGP, zru¹it jej a pokraèovat?"
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr " (aktuální èas: %c)"
+
+#
+#: crypt.c:71
+#, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- následuje výstup %s %s --]\n"
+
+#
+#: crypt.c:86
+msgid "Passphrase(s) forgotten."
+msgstr "©ifrovací heslo(a) zapomenuto(a)."
+
+#
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Zadejte PGP heslo:"
+
+#
+#: crypt.c:147
+msgid "Enter SMIME passphrase:"
+msgstr "Zadejte S/MIME heslo:"
+
+#
+#: crypt.c:192
+msgid "Create a traditional (inline) PGP message?"
+msgstr "Vytvoøit tradièní vlo¾enou (inline) PGP zprávu?"
+
+#
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "Spou¹tím PGP..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr "S/MIME zprávy, které neobsahují hints on content nejsou podporovány."
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr "Zkou¹ím extrahovat PGP klíèe...\n"
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr "Zkou¹ím extrahovat S/MIME certifikáty...\n"
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- Chyba: Chybná struktura zprávy typu multipart/signed! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- Chyba: 'multipart/signed' protokol %s není znám! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Varování: Podpisy typu %s/%s nelze ovìøit. --]\n"
+"\n"
+
+#
+#. Now display the signed body
+#: crypt.c:912
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- Následují podepsaná data --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Varování: Nemohu nalézt ¾ádný podpis. --]\n"
+"\n"
+
+#
+#: crypt.c:924
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Konec podepsaných dat --]\n"
+
+#
+#: curs_lib.c:157
+msgid "yes"
+msgstr "ano"
+
+#
+#: curs_lib.c:158
+msgid "no"
+msgstr "ne"
+
+#
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Ukonèit Mutt?"
+
+#
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "neznámá chyba"
+
+#
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Stisknìte libovolnou klávesu..."
+
+#
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " ('?' pro seznam): "
+
+#
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "®ádná schránka není otevøena."
+
+#
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Nejsou ¾ádné zprávy."
+
+#
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "Ze schránky je mo¾né pouze èíst."
+
+#
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "V re¾imu pøikládání zpráv není tato funkce povolena."
+
+#
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "®ádné viditelné zprávy"
+
+#
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "Schránka je urèena pouze pro ètení, zápis nelze zapnout!"
+
+#
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "Zmìny obsahu slo¾ky budou ulo¾eny po jejím uzavøení."
+
+#
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Zmìny obsahu slo¾ky nebudou ulo¾eny."
+
+#
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Konec"
+
+#
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Ulo¾it"
+
+#
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Psát"
+
+#
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Odepsat"
+
+#
+#: curs_main.c:403
+msgid "Group"
+msgstr "Skupinì"
+
+#
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "Obsah schránky byl zmìnìn zvenèí. Atributy mohou být nesprávné."
+
+#
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "V této schránce je nová po¹ta."
+
+#
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "Obsah schránky byl zmìnìn zvenèí."
+
+#
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "®ádné zprávy nejsou oznaèeny."
+
+#
+#: curs_main.c:653 menu.c:896
+msgid "Nothing to do."
+msgstr "Není co dìlat"
+
+#
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Pøejít na zprávu: "
+
+#
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "Argumentem musí být èíslo zprávy."
+
+#
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Tato zpráva není viditelná."
+
+#
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Èíslo zprávy není správné."
+
+#
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Smazat zprávy shodující se s: "
+
+#
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "®ádné omezení není zavedeno."
+
+#
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Omezení: %s"
+
+#
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Omezit na zprávy shodující se s: "
+
+#
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Ukonèit Mutt?"
+
+#
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Oznaèit zprávy shodující se s: "
+
+#
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Obnovit zprávy shodující se s: "
+
+#
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Odznaèit zprávy shodující se s: "
+
+#
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Otevøít schránku pouze pro ètení"
+
+#
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Otevøít schránku"
+
+#
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s není schránkou."
+
+#
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Ukonèit Mutt bez ulo¾ení zmìn?"
+
+#
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Jste na poslední zprávì."
+
+#
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Nejsou ¾ádné obnovené zprávy."
+
+#
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Jste na první zprávì."
+
+#
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "Hledání pokraèuje od zaèátku."
+
+#
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "Hledání pokraèuje od konce."
+
+#
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Nejsou ¾ádné nové zprávy"
+
+#
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Nejsou ¾ádné nepøeètené zprávy"
+
+#
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " v tomto omezeném zobrazení"
+
+#
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "U zpráv ulo¾ených na POP serveru nelze nastavit pøíznak 'Dùle¾ité'."
+
+#
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Nejsou dal¹í vlákna."
+
+#
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Jste na prvním vláknu."
+
+#
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "Vlákna nejsou podporována."
+
+#
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "Vlákno obsahuje nepøeètené zprávy."
+
+#
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "Na POP serveru nelze zprávy editovat."
+
+#
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tvlo¾í øádku zaèínající znakem ~\n"
+"~b u¾ivatelé\tpøidá u¾ivatele do polo¾ky Bcc:\n"
+"~c u¾ivatelé\tpøidá u¾ivatele do polo¾ky Cc:\n"
+"~f zprávy\tvlo¾í zprávy\n"
+"~F zprávy\tstejné jako ~f a navíc vlo¾í i hlavièky zpráv\n"
+"~h\t\teditace hlavièky zprávy\n"
+"~m zprávy\tvlo¾í zprávy a uzavøe je do uvozovek\n"
+"~M zprávy\tstejné jako ~m a navíc vlo¾í i hlavièky zpráv\n"
+"~p\t\tvytiskne zprávu\n"
+"~q\t\tulo¾í soubor a ukonèí editor\n"
+"~t u¾ivatelé\tpøidá u¾ivatele do polo¾ky To:\n"
+"~u\t\teditace pøedchozí øádky\n"
+"~v\t\teditace zprávy $visual editorem\n"
+"~w soubor\t\tzapí¹e zprávu do souboru\n"
+"~x\t\tukonèí editaci bez ulo¾ení jakýchkoli zmìn\n"
+"~?\t\tvypí¹e tuto nápovìdu\n"
+".\t\tpokud je tento znak na øádce samotný, znamená ukonèení vstupu\n"
+
+#
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "Èíslo zprávy (%d) není správné.\n"
+
+#
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Zprávu ukonèíte zapsáním samotného znaku '.' na novou øádku)\n"
+
+#
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "®ádná schránka.\n"
+
+#
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Zpráva obsahuje:\n"
+
+#
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(pokraèovat)\n"
+
+#
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "Chybí jméno souboru.\n"
+
+#
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Zpráva neobsahuje ¾ádné øádky.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr "Neplatné IDN v %s: '%s'\n"
+
+#
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "Pøíkaz %s je neznámý (~? pro nápovìdu)\n"
+
+#
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "Doèasnou slo¾ku nelze vytvoøit: %s"
+
+#
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "Doèasnou po¹tovní slo¾ku nelze vytvoøit: %s"
+
+#
+#: editmsg.c:101
+#, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "nemohu zkrátit doèasnou po¹tovní slo¾ku: %s"
+
+#
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "Soubor se zprávou je prázdný!"
+
+#
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "Zpráva nebyla zmìnìna!"
+
+#
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "Soubor se zprávou nelze otevøít: %s"
+
+#
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Ke slo¾ce nelze pøipojit: %s"
+
+#
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Chyba. Zachovávám doèasný soubor %s."
+
+#
+#: flags.c:332
+msgid "Set flag"
+msgstr "Nastavit pøíznak"
+
+#
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Vypnout pøíznak"
+
+#
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[-- Chyba: ®ádnou z èástí 'Multipart/Alternative' nelze zobrazit! --]\n"
+
+#
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Pøíloha #%d"
+
+#
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Typ: %s/%s, Kódování: %s, Velikost: %s --]\n"
+
+#
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Zobrazuji automaticky pomocí %s --]\n"
+
+#
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Vyvolávám pøíkaz %s pro automatické zobrazování"
+
+#
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- %s nelze spustit --]\n"
+
+#
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Automaticky zobrazuji standardní chybový výstup %s --]\n"
+
+#
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- Chyba: typ 'message/external-body' nemá parametr 'access-type' --]\n"
+
+#
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Tato pøíloha typu '%s/%s' "
+
+#
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(o velikosti v bajtech: %s) "
+
+#
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "byla smazána --]\n"
+
+#
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- %s --]\n"
+
+#
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- jméno: %s --]\n"
+
+#
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Tato pøíloha typu '%s/%s' není pøítomna, --]\n"
+
+#
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr "[-- a udaný externí zdroj ji¾ není platný --]\n"
+
+#
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr ""
+"[-- a udaná hodnota parametru 'access-type %s' --]\n"
+"[-- není podporována --]\n"
+
+#
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Chyba: typ 'multipart/signed' bez informace o protokolu"
+
+#
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Chyba: typ 'multipart/encrypted' bez informace o protokolu"
+
+#
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Doèasný soubor nelze otevøít!"
+
+#
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- typ '%s/%s' není podporován "
+
+#
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(pro zobrazení této èásti pou¾ijte '%s')"
+
+#
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "(je tøeba svázat funkci 'view-attachments' s nìjakou klávesou!)"
+
+#
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "soubor %s nelze pøipojit"
+
+#
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "CHYBA: ohlaste, prosím, tuto chybu"
+
+#
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<NEZNÁMÝ>"
+
+#
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Obecnì platné:\n"
+"\n"
+
+#
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Nesvázané funkce:\n"
+"\n"
+
+#
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Nápovìda pro %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: unhook * nelze z jiného hooku provést"
+
+#
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: hook %s není znám"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: %s nelze z %s smazat"
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "Nejsou k dispozici ¾ádné autentikaèní metody"
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Ovìøuji (anonymnì)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "Anonymní ovìøení se nezdaøilo."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Ovìøuji (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "CRAM-MD5 ovìøení se nezdaøilo."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Ovìøuji (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "GSSAPI ovìøení se nezdaøilo."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "LOGIN autentizace je na tomto serveru zakázána"
+
+#
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Probíhá pøihla¹ování..."
+
+#
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "Pøihlá¹ení se nezdaøilo."
+
+#: imap/auth_sasl.c:112
+#, c-format
+msgid "Authenticating (%s)..."
+msgstr "Pøihla¹uji (%s)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "SASL ovìøení se nezdaøilo."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "%s není platná IMAP cesta"
+
+#
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "Stahuji jmenný prostor..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Stahuji seznam schránek..."
+
+#
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "Slo¾ka nenalezena"
+
+#
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Vytvoøit schránku: "
+
+#
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "Schránka musí mít jméno."
+
+#
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Schránka vytvoøena."
+
+#
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "Schránka uzavøena."
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Osudová chyba. Aktuální poèet zpráv nesouhlasí s pøedchozím údajem!"
+
+#
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "Konèím spojení s %s..."
+
+#
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Tento IMAP server je zastaralý. Mutt s ním nebude fungovat."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr "Neoèekávaná odpovìï od serveru: %s"
+
+#
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "Bezpeèné spojení pøes TLS?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "Nelze navázat TLS spojení"
+
+#
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "Volím %s..."
+
+#
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "Chyba pøi otevírání schránky"
+
+#
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Ke schránkám na tomto IMAP serveru nelze pøipojovat."
+
+#
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "Vytvoøit %s?"
+
+#
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Konèím spojení s IMAP serverem..."
+
+#
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "Ma¾u zprávy (poèet: %d)..."
+
+#
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "Pøíkaz EXPUNGE se nezdaøil."
+
+#
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Ukládám pøíznaky stavu zprávy... [%d/%d]"
+
+#
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Odstraòuji zprávy ze serveru..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "pøi volání imap_sync_mailbox: EXPUNGE selhalo"
+
+#
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "Pøíkaz CLOSE se nezdaøil."
+
+#
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "Chybný název schránky"
+
+#
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "Pøihla¹uji %s..."
+
+#
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "Odhla¹uji %s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "Z IMAP serveru této verze hlavièky nelze stahovat."
+
+#
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "Doèasný soubor %s nelze vytvoøit"
+
+#
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Stahuji hlavièky zpráv... [%d/%d]"
+
+#
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Stahuji zprávu..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "Index zpráv je chybný. Zkuste schránku znovu otevøít."
+
+#
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Posílám zprávu..."
+
+#
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "Kopíruji zprávy (%d) do %s..."
+
+#
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "Kopíruji zprávu %d do %s..."
+
+#
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "Pokraèovat?"
+
+#
+#: init.c:611
+msgid "alias: no address"
+msgstr "pøezdívka: ¾ádná adresa"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr "Pozor: Neplatné IDN '%s' v pøezdívce '%s'.\n"
+
+#
+#: init.c:714
+msgid "invalid header field"
+msgstr "neplatná hlavièka"
+
+#
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "metoda %s pro øazení není známa"
+
+#
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): chybný regulární výraz %s\n"
+
+#
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "Promìnná %s není známa."
+
+#
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "Prefix není s 'reset' povolen."
+
+#
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "Hodnota není s 'reset' povolena."
+
+#
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s je nastaveno"
+
+#
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s není nastaveno"
+
+#
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s je nesprávný typ schránky."
+
+#
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "Hodnota %s je nesprávná."
+
+#
+#: init.c:1312
+#, c-format
+msgid "%s: Unknown type."
+msgstr "neznámý typ %s"
+
+#
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "neznámý typ %s"
+
+#
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Chyba pøi volání funkce stat pro %s: %s"
+
+#
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s není øádným souborem."
+
+#
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Chyba v %s na øádku %d: %s"
+
+#
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: chyby v %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: ètení pøeru¹eno kvùli velikému mno¾ství chyb v %s"
+
+#
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: chyba na %s"
+
+#
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: pøíli¹ mnoho argumentù"
+
+#
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "Pøíkaz %s není znám."
+
+#
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Chyba %s na pøíkazovém øádku\n"
+
+#
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "domovský adresáø nelze urèit"
+
+#
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "u¾ivatelské jméno nelze urèit"
+
+#
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Detekována smyèka v makru."
+
+#
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Klávesa není svázána s ¾ádnou funkcí."
+
+#
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Klávesa není svázána. Stisknìte '%s' pro nápovìdu."
+
+#
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: pøíli¹ mnoho argumentù"
+
+#
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "menu %s neexistuje"
+
+#
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "prázdný sled kláves"
+
+#
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: pøíli¹ mnoho argumentù"
+
+#
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "funkce %s není v mapì"
+
+#
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: sled kláves je prázdný"
+
+#
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: pøíli¹ mnoho argumentù"
+
+#
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: ¾ádné argumenty"
+
+#
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "funkce %s není známa"
+
+#
+#: keymap.c:912
+msgid "Enter keys (^G to abort): "
+msgstr "Vyberte klíè (nebo stisknìte ^G pro zru¹ení): "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr "Char = %s, Octal = %o, Decimal = %d"
+
+#
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "nulová operace"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr "konec podmínìného spu¹tìní (noop)"
+
+#
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "pro zobrazení pøíloh vynucenì pou¾ít mailcap"
+
+#
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "zobrazit pøílohu jako text"
+
+#
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "pøepnout zobrazování podèástí"
+
+#
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "pøeskoèit na zaèátek stránky"
+
+#
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "zaslat kopii zprávy jinému u¾ivateli"
+
+#
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "zvolit jiný soubor v tomto adresáøi"
+
+#
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "zobrazit soubor"
+
+#
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "zobrazit jméno zvoleného souboru"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "pøihlásit aktuální schránku (pouze IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "odhlásit aktuální schránku (pouze IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "pøepnout zda zobrazovat v¹echny/pøihlá¹ené schránky (IMAP)"
+
+#
+#: keymap_alldefs.h:18
+msgid "list mailboxes with new mail"
+msgstr "zobraz schránky, které obsahují novou po¹tu"
+
+#
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "zmìnit adresáøe"
+
+#
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "zjistit zda schránky obsahují novou po¹tu"
+
+#
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "pøipojit pøílohy k této zprávì"
+
+#
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "pøipojit zprávy k této zprávì"
+
+#
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "editovat BCC seznam"
+
+#
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "editovat CC seznam"
+
+#
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "editovat popis pøílohy"
+
+#
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "editovat polo¾ku 'transfer-encoding' pøílohy"
+
+#
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "zmìnit soubor pro ulo¾ení kopie této zprávy"
+
+#
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "editovat soubor, který bude pøipojen"
+
+#
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "editovat polo¾ku 'from'"
+
+#
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "editovat zprávu i s hlavièkami"
+
+#
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "editovat zprávu"
+
+#
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "editovat pøílohu za pou¾ití polo¾ky mailcap"
+
+#
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "editovat polo¾ku 'Reply-To'"
+
+#
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "editovat vìc této zprávy"
+
+#
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "editovat seznam 'TO'"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "vytvoøit novou schránku (pouze IMAP)"
+
+#
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "editovat typ pøílohy"
+
+#
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "pracovat s doèasnou kopií pøílohy"
+
+#
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "zkontrolovat pravopis zprávy programem ispell"
+
+#
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "sestavit novou pøílohu dle polo¾ky mailcapu"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "pøepnout automatické ukládání této pøílohy"
+
+#
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "odlo¾it zprávu pro pozdìj¹í pou¾ití"
+
+#
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "pøejmenovat/pøesunout pøilo¾ený soubor"
+
+#
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "odeslat zprávu"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "pøepnout formát na pøímý/pøílohu"
+
+#
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "pøepnout, zda má být soubor po odeslání smazán"
+
+#
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "upravit informaci o kódování pøílohy"
+
+#
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "ulo¾it zprávu do slo¾ky"
+
+#
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "ulo¾it kopii zprávy do souboru/schránky"
+
+#
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "vytvoøit pøezdívku z odesílatele dopisu"
+
+#
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "pøesunout polo¾ku na konec obrazovky"
+
+#
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "pøesunout polo¾ku do støedu obrazovky"
+
+#
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "pøesunout polo¾ku na zaèátek obrazovky"
+
+#
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "vytvoøit kopii ve formátu 'text/plain'"
+
+#
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "vytvoøit kopii ve formátu 'text/plain' a smazat"
+
+#
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "smazat aktuální polo¾ku"
+
+#
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "smazat aktuální schránku (pouze IMAP)"
+
+#
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "smazat v¹echny zprávy v podvláknu"
+
+#
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "smazat v¹echny zprávy ve vláknu"
+
+#
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "zobrazit úplnou adresu odesílatele"
+
+#
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "zobrazit zprávu a pøepnout odstraòování hlavièek"
+
+#
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "zobrazit zprávu"
+
+#
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "editovat pøímo tìlo zprávy"
+
+#
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "smazat znak pøed kurzorem"
+
+#
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "posunout kurzor o jeden znak vlevo"
+
+#
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "posunout kurzor na zaèátek slova"
+
+#
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "pøeskoèit na zaèátek øádku"
+
+#
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "procházet schránkami, pøijímajícími novou po¹tu"
+
+#
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "doplnit jméno souboru nebo pøezdívku"
+
+#
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "doplnit adresu výsledkem dotazu"
+
+#
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "smazat znak pod kurzorem"
+
+#
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "pøeskoèit na konec øádku"
+
+#
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "posunout kurzor o jeden znak vpravo"
+
+#
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "posunout kurzor na konec slova"
+
+#
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr "rolovat dolù seznamem provedených pøíkazù"
+
+#
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "rolovat nahoru seznamem provedených pøíkazù"
+
+#
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "smazat znaky od kurzoru do konce øádku"
+
+#
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "smazat znaky od kurzoru do konce slova"
+
+#
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "smazat v¹echny znaky na øádku"
+
+#
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "smazat slovo pøed kurzorem"
+
+#
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "pøí¹tí napsaný znak uzavøít do uvozovek"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "pøehodit znak pod kurzorem s pøedchozím"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "pøevést v¹echna písmena slova na velká"
+
+#
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "pøevést v¹echna písmena slova na malá"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "pøevést v¹echna písmena slova na velká"
+
+#
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "zadat muttrc pøíkaz"
+
+#
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "zmìnit souborovou masku"
+
+#
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "odejít z tohoto menu"
+
+#
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "filtrovat pøílohu pøíkazem shellu"
+
+#
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "pøeskoèit na první polo¾ku"
+
+#
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "pøepnout zprávì pøíznak dùle¾itosti"
+
+#
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "pøeposlat zprávu jinému u¾ivateli s komentáøem"
+
+#
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "zvolit aktuální polo¾ku"
+
+#
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "odepsat v¹em pøíjemcùm"
+
+#
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "rolovat dolù o 1/2 stránky"
+
+#
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "rolovat nahoru o 1/2 stránky"
+
+#
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "tato obrazovka"
+
+#
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "pøeskoèit na indexové èíslo"
+
+#
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "pøeskoèit na poslední polo¾ku"
+
+#
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "odepsat do specifikovaných po¹tovních konferencí"
+
+#
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "spustit makro"
+
+#
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "sestavit novou zprávu"
+
+#
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "otevøít jinou slo¾ku"
+
+#
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "otevøít jinou slo¾ku pouze pro ètení"
+
+#
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "odstranit zprávì pøíznak stavu"
+
+#
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "smazat zprávy shodující se se vzorem"
+
+#
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "vynutit sta¾ení po¹ty z IMAP serveru"
+
+#
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "stáhnout po¹tu z POP serveru"
+
+#
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "pøeskoèit na první zprávu"
+
+#
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "pøeskoèit na poslední zprávu"
+
+#
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "zobrazovat pouze zprávy shodující se se vzorem"
+
+#
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "pøeskoèit na následující novou zprávu"
+
+#
+#: keymap_alldefs.h:113
+msgid "jump to the next new or unread message"
+msgstr "pøeskoèit na následující novou nebo nepøeètenou zprávu"
+
+#
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "pøeskoèit na následující podvlákno"
+
+#
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "pøeskoèit na následující vlákno"
+
+#
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "pøeskoèit na následující obnovenou zprávu"
+
+#
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "pøeskoèit na následující nepøeètenou zprávu"
+
+#
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "pøeskoèit na pøedchozí zprávu ve vláknu"
+
+#
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "pøeskoèit na pøedchozí vlákno"
+
+#
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "pøeskoèit na pøedchozí podvlákno"
+
+#
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "pøeskoèit na pøedchozí obnovenou zprávu"
+
+#
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "pøeskoèit na pøedchozí novou zprávu"
+
+#
+#: keymap_alldefs.h:123
+msgid "jump to the previous new or unread message"
+msgstr "pøeskoèit na pøedchozí novou nebo nepøeètenou zprávu"
+
+#
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "pøeskoèit na pøedchozí nepøeètenou zprávu"
+
+#
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "oznaèit toto vlákno jako pøeètené"
+
+#
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "oznaèit toto podvlákno jako pøeètené"
+
+#
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "nastavit zprávì pøíznak stavu"
+
+#
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "ulo¾it zmìny do schránky"
+
+#
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "oznaèit zprávy shodující se se vzorem"
+
+#
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "obnovit zprávy shodující se se vzorem"
+
+#
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "odznaèit zprávy shodující se se vzorem"
+
+#
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "pøeskoèit do støedu stránky"
+
+#
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "pøeskoèit na dal¹í polo¾ku"
+
+#
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "rolovat o øádek dolù"
+
+#
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "pøeskoèit na dal¹í stránku"
+
+#
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "pøeskoèit na konec zprávy"
+
+#
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "pøepnout zobrazování citovaného textu"
+
+#
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "pøeskoèit za citovaný text"
+
+#
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "pøeskoèit na zaèátek zprávy"
+
+#
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "poslat zprávu/pøílohu rourou do pøíkazu shellu"
+
+#
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "pøeskoèit na pøedchozí polo¾ku"
+
+#
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "rolovat o øádek nahoru"
+
+#
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "pøeskoèit na pøedchozí stránku"
+
+#
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "vytisknout aktuální polo¾ku"
+
+#
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "dotázat se externího programu na adresy"
+
+#
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "pøidat výsledky nového dotazu k ji¾ existujícím"
+
+#
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "ulo¾it zmìny do schránky a skonèit"
+
+#
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "vrátit se k odlo¾ené zprávì"
+
+#
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "smazat a pøekreslit obrazovku"
+
+#
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "<vnitøní>"
+
+#
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "odepsat na zprávu"
+
+#
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "pou¾ít aktuální zprávu jako ¹ablonu pro novou"
+
+#
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "ulo¾it zprávu/pøílohu do souboru"
+
+#
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "vyhledat regulární výraz"
+
+#
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "vyhledat regulární výraz opaèným smìrem"
+
+#
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "vyhledat následující shodu"
+
+#
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "vyhledat následující shodu opaèným smìrem"
+
+#
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "pøepnout obarvování hledaných vzorù"
+
+#
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "spustit pøíkaz v podshellu"
+
+#
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "seøadit zprávy"
+
+#
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "seøadit zprávy v opaèném poøadí"
+
+#
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "oznaèit aktuální polo¾ku"
+
+#
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "prefix funkce, která má být pou¾ita pouze pro oznaèené zprávy"
+
+#
+#: keymap_alldefs.h:164
+msgid "apply next function ONLY to tagged messages"
+msgstr "následující funkci pou¾ij POUZE pro oznaèené zprávy"
+
+#
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "oznaèit toto podvlákno"
+
+#
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "oznaèit toto vlákno"
+
+#
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "pøepnout zprávì pøíznak 'nová'"
+
+#
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "pøepnout, zda bude schránka pøepsána"
+
+#
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "pøepnout, zda procházet schránky nebo v¹echny soubory"
+
+#
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "pøeskoèit na zaèátek stránky"
+
+#
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "obnovit aktuální polo¾ku"
+
+#
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "obnovit v¹echny zprávy ve vláknu"
+
+#
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "obnovit v¹echny zprávy v podvláknu"
+
+#
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "Vypí¹e oznaèení verze a datum"
+
+#
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "pokud je to nezbytné, zobrazit pøílohy pomocí mailcapu"
+
+#
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "zobrazit MIME pøílohy"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr "zobraz kód stisknuté klávesy"
+
+#
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "zobrazit aktivní omezující vzor"
+
+#
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "zavinout/rozvinout toto vlákno"
+
+#
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "zavinout/rozvinout v¹echna vlákna"
+
+#
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "pøipojit veøejný PGP klíè"
+
+#
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "zobrazit menu PGP"
+
+#
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "odeslat veøejný klíè PGP"
+
+#
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "ovìøit veøejný klíè PGP"
+
+#
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "zobrazit u¾ivatelské ID klíèe"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "hledat klasické pgp"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "Akceptovat øetìz."
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "Pøipojit k øetìzu remailer"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "Vlo¾it do øetìzu remailer"
+
+#
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "Odstranit remailer z øetìzu"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "Vybrat pøedchozí èlánek øetìzu"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "Vybrat dal¹í èlánek øetìzu"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "odeslat zprávu pomocí øetìzu remailerù typu mixmaster"
+
+#
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "vytvoøit de¹ifrovanou kopii a smazat"
+
+#
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "vytvoøit de¹ifrovanou kopii"
+
+#
+#: keymap_alldefs.h:196
+msgid "wipe passphrase(s) from memory"
+msgstr "odstranit v¹echna hesla z pamìti"
+
+#
+#: keymap_alldefs.h:197
+msgid "extract supported public keys"
+msgstr "extrahovat v¹echny podporované veøejné klíèe"
+
+#
+#: keymap_alldefs.h:198
+msgid "show S/MIME options"
+msgstr "zobrazit menu S/MIME"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr "Integer overflow -- can't allocate memory!"
+
+#
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Pamì» vyèerpána!"
+
+#
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"Vývojáøe programu mù¾ete kontaktovat na adrese <mutt-dev@mutt.org> "
+"(anglicky).\n"
+"Chyby v programu oznamujte pomocí utility flea(1).\n"
+"Pøipomínky k pøekladu zasílejte na adresu <cs@li.org> (èesky).\n"
+
+#
+#: main.c:50
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-2003 Michael R. Elkins a dal¹í.\n"
+"Mutt je roz¹iøován BEZ JAKÉKOLI ZÁRUKY; podrobnosti získáte pøíkazem\n"
+"`mutt -vv'.\n"
+"Mutt je volné programové vybavení. Roz¹iøování tohoto programu je vítáno,\n"
+"musíte ov¹em dodr¾et urèitá pravidla; dal¹í informace získáte pøíkazem\n"
+"`mutt -vv'.\n"
+
+#
+#: main.c:56
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-2003 Michael R. Elkins <me@cs.hmc.edu>\n"
+"Copyright (C) 1996-2003 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2003 Thomas Roessler <roessler@guug.de>\n"
+"Copyright (C) 1998-2003 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2003 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2003 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2003 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"Mnoho dal¹ích lidí, kteøí zde nejsou zmínìni, pøispìlo zdrojovým kódem,\n"
+"opravami a pøipomínkami.\n"
+"\n"
+"  Tento program je volné programové vybavení; mù¾ete jej ¹íøit a "
+"modifikovat\n"
+"podle ustanovení Obecné veøejné licence GNU, vydávané Free Software "
+"Foundation;\n"
+"a to buï verze 2 této licence anebo (podle va¹eho uvá¾ení), kterékoli "
+"pozdìj¹í\n"
+"verze.\n"
+"\n"
+"  Tento program je roz¹iøován v nadìji, ¾e bude u¾iteèný, av¹ak BEZ "
+"JAKÉKOLI\n"
+"ZÁRUKY; neposkytují se ani odvozené záruky PRODEJNOSTI anebo VHODNOSTI PRO\n"
+"NÌJAKÝ KONKRÉTNÍ ÚÈEL. Dal¹í podrobnosti najdete v Obecné veøejné licenci "
+"GNU.\n"
+"\n"
+"  Kopie Obecné veøejné licence GNU mìla být dodána spolu s tímto programem;\n"
+"pokud se tak nestalo, napi¹te o ni Free Software Foundation, Inc.,\n"
+"59 Temple Place - Suite 330, Boston, MA  02111, USA.\n"
+"\n"
+
+#
+#: main.c:94
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"Pou¾ití: mutt [ -nRyzZ ] [ -e <pøíkaz> ] [ -F <soubor> ] [ -m <typ> ] [ -f "
+"<soubor> ]\n"
+"       mutt [ -nR ] [ -e <pøíkaz> ] [ -F <soubor> ] -Q <dotaz> [ -Q "
+"<dotaz> ] [...]\n"
+"       mutt [ -nR ] [ -e <pøíkaz> ] [ -F <soubor> ] -A <alias> [ -A "
+"<alias> ] [...]\n"
+"       mutt [ -nx ] [ -e <pøíkaz> ] [ -a <soubor> ] [ -F <soubor> ] [ -H "
+"<soubor> ][ -i <soubor> ] [ -s <vìc> ] [ -b <adr> ] [ -c <adr> ]  <adr>  \n"
+"[ ... ]\n"
+"       mutt [ -n ] [ -e <pøíkaz> ] [ -F <soubor> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"pøepínaèe:\n"
+"  -A <alias>\texpanduje zadaný alias\n"
+"  -a <soubor>\tpøipojí soubor ke zprávì\n"
+"  -b <adresa>\tspecifikuje adresu pro utajenou kopii (BCC)\n"
+"  -c <adresa>\tspecifikuje adresu pro kopii (CC)\n"
+"  -e <pøíkaz>\tpøíkaz bude vykonán po inicializaci\n"
+"  -f <soubor>\tète z této schránky\n"
+"  -F <soubor>\talternativní soubor muttrc\n"
+"  -H <soubor>\tz tohoto souboru budou naèteny vzory hlavièek\n"
+"  -i <soubor>\ttento soubor Mutt vlo¾í do odpovìdi\n"
+"  -m <typ>\timplicitní typ schránky\n"
+"  -n\t\tMutt nebude èíst systémový soubor Muttrc\n"
+"  -p\t\tvrátí se k odlo¾ené zprávì\n"
+"  -Q <promìná>\tdotá¾e se na konfiguraèní promìnnou\n"
+"  -R\t\totevøe schránku pouze pro ètení\n"
+"  -s <vìc>\tspecifikuje vìc (pokud obsahuje mezery,\n"
+"              \ttak musí být v uvozovkách)\n"
+"  -v\t\tzobrazí oznaèení verze a parametry zadané pøi pøekladu\n"
+"  -x\t\tnapodobí odesílací re¾im programu mailx\n"
+"  -y\t\tzvolí schránku uvedenou v seznamu `mailboxes'\n"
+"  -z\t\tpokud ve schránce není po¹ta, pak okam¾itì skonèí\n"
+"  -Z\t\totevøe první slo¾ku s novou po¹tou; pokud není ¾ádná nová po¹ta,\n"
+"    \t\ttak okam¾itì skonèí\n"
+"  -h\t\tvypí¹e tuto nápovìdu"
+
+#
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Pøelo¾eno s volbami:"
+
+#
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Chyba pøi inicializaci terminálu."
+
+#
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Úroveò ladìní je %d.\n"
+
+#
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "pøi pøekladu programu nebylo 'DEBUG' definováno. Ignoruji.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s neexistuje. Mám ho vytvoøit?"
+
+#
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "%s nelze vytvoøit: %s"
+
+#
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Nejsou specifikováni ¾ádní pøíjemci.\n"
+
+#
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "Soubor %s nelze pøipojit.\n"
+
+#
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "V ¾ádné schránce není nová po¹ta."
+
+#
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Není definována ¾ádná schránka pøijímající novou po¹tu."
+
+#
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "Schránka je prázdná."
+
+#
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Ètu %s... %d (%d%%)"
+
+#
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "Schránka je po¹kozena!"
+
+#
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "Schránka byla po¹kozena!"
+
+#
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Kritická chyba! Schránku nelze znovu otevøít!"
+
+#
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Schránku nelze zamknout!"
+
+#
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+"sync: mbox byl zmìnìn, ale nebyly zmìnìny ¾ádné zprávy! (ohlaste tuto chybu)"
+
+#
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Zapisuji zprávy... %d (%d%%)"
+
+#
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "Provádím zmìny..."
+
+#
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Ulo¾ení se nezdaøilo! Èást schránky byla ulo¾ena do %s"
+
+#
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "Schránku nelze znovu otevøít!"
+
+#
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Otevírám schránku znovu..."
+
+#
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Pøeskoèit na: "
+
+#
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Nesprávné indexové èíslo."
+
+#
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "®ádné polo¾ky."
+
+#
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Dolù ji¾ rolovat nemù¾ete."
+
+#
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Nahoru ji¾ rolovat nemù¾ete."
+
+#
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Jste na poslední stránce."
+
+#
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Jste na první stránce."
+
+#
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "První polo¾ka je zobrazena."
+
+#
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "Poslední polo¾ka je zobrazena."
+
+#
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Jste na poslední polo¾ce."
+
+#
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Jste na první polo¾ce."
+
+#
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Vyhledat: "
+
+#
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Vyhledat obráceným smìrem: "
+
+#
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Není ¾ádný vzor k vyhledání."
+
+#
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Nenalezeno."
+
+#
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "®ádné polo¾ky nejsou oznaèeny."
+
+#
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "V tomto menu není hledání pøístupné."
+
+#
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "V dialozích není pøeskakování implementováno."
+
+#
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Oznaèování není podporováno."
+
+#
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "Ètu %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr ""
+"pøi volání maildir_commit_message(): nemohu nastavit datum a èas u souboru"
+
+#: muttlib.c:835
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "Soubor je adresáøem. Ulo¾it do nìj? [(a)no, (n)e, (v)¹echny]"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr "anv"
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "Soubor je adresáøem. Ulo¾it do nìj?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Zadejte jméno souboru: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "Soubor ji¾ existuje: (p)øepsat, pø(i)pojit èi (z)ru¹it?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "piz"
+
+#
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "Do POP schránek nelze ukládat zprávy."
+
+#
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s není schránkou!"
+
+#
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Pøipojit zprávy do %s?"
+
+#
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "Spojení s %s uzavøeno"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL není dostupné"
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "pøíkaz pøed spojením selhal"
+
+#
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Chyba pøi komunikaci s %s (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr "Chybné IDN \"%s\"."
+
+#
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "Vyhledávám %s..."
+
+#
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Poèítaè \"%s\" nelze nalézt."
+
+#
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Pøipojuji se k %s..."
+
+#
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "Spojení s %s nelze navázat (%s)."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "Nemohu získat dostatek náhodných dat"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "Pøipravuji zdroj náhodných dat: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s má pøíli¹ volná pøístupová práva!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "SSL vypnuto kvùli nedostatku náhodných dat"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "I/O chyba"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "nespecifikovaná chyba v protokolu"
+
+#
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "Chyba SSL: %s"
+
+#
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "Certifikát od serveru nelze získat"
+
+#
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "SSL spojení pomocí %s (%s)"
+
+#
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "Neznámý"
+
+#
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[nelze spoèítat]"
+
+#
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[chybné datum]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "Certifikát serveru není zatím platný."
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "Platnost certifikátu serveru vypr¹ela."
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Tento certifikát patøí:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Tento certifikát vydal:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Tento certifikát je platný."
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   od %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "     pro %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Otisk klíèe: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "Kontrola SSL certifikátu"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(o)dmítnout, akceptovat pouze (t)eï, akceptovat (v)¾dy "
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "otv"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(o)dmítnout, akceptovat pouze (t)eï "
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "ot"
+
+#
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Ukonèit  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Varování: Certifikát nelze ulo¾it"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "Certifikát ulo¾en"
+
+#
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Zámek stále existuje, odemknout %s?"
+
+#
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "%s nelze zamknout.\n"
+
+#
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "Vypr¹el èas pro pokus o zamknutí pomocí funkce fcntl!"
+
+#
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Èekám na zamknutí pomocí funkce fcntl... %d"
+
+#
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "Èas pro zamknutí pomocí funkce flock vypr¹el!"
+
+#
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Èekám na pokus o zamknutí pomocí funkce flock... %d"
+
+#
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "%s nelze zamknout.\n"
+
+#
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "Ètu %s..."
+
+#
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "Ukládám %s..."
+
+#
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "Schránku %s nelze synchronizovat!"
+
+#
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Pøesunout pøeètené zprávy do %s?"
+
+#
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Zahodit smazané zprávy (%d)?"
+
+#
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Zahodit smazané zprávy (%d)?"
+
+#
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Pøesunuji pøeètené zprávy do %s..."
+
+#
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "Obsah schránky nebyl zmìnìn."
+
+#
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "ponecháno: %d, pøesunuto: %d, smazáno: %d"
+
+#
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "ponecháno: %d, smazáno: %d"
+
+#
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr " Stisknìte `%s' pro zapnutí zápisu"
+
+#
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "Pou¾ijte 'toggle-write' pro zapnutí zápisu!"
+
+#
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "Schránka má vypnut zápis. %s"
+
+#
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "Do schránky byla vlo¾ena kontrolní znaèka."
+
+#
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Zprávu nelze ulo¾it"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr "Integer overflow -- can't allocate memory."
+
+#
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "V tomto menu není tato funkce dostupná."
+
+#
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "Pøstr"
+
+#
+#: pager.c:1447
+msgid "NextPg"
+msgstr "Dlstr"
+
+#
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Pøílohy"
+
+#
+#: pager.c:1454
+msgid "Next"
+msgstr "Dal¹í"
+
+#
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "Konec zprávy je zobrazen."
+
+#
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "Zaèátek zprávy je zobrazen."
+
+#
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Hledat opaèným smìrem: "
+
+#
+#: pager.c:1955
+msgid "Search: "
+msgstr "Hledat: "
+
+#
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "Nápovìda je právì zobrazena."
+
+#
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "®ádný dal¹í citovaný text."
+
+#
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "Za citovaným textem ji¾ nenásleduje ¾ádný bì¾ný text."
+
+#
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "Zpráva o více èástech nemá urèeny hranice!"
+
+#
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Výraz %s je chybný."
+
+#
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Nesprávné datum dne (%s)."
+
+#
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Mìsíc %s není správný."
+
+#
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "Chybné relativní datum: %s"
+
+#
+#: pattern.c:528
+msgid "error in expression"
+msgstr "chyba ve výrazu"
+
+#
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "chyba ve vzoru na: %s"
+
+#
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "pøíkaz %c je nesprávný"
+
+#
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "V tomto re¾imu není %c podporováno."
+
+#
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "chybí parametr"
+
+#
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "neshodují se závorky: %s"
+
+#
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "prázdný vzor"
+
+#
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "chyba: neznámý operand %d (ohlaste tuto chybu)."
+
+#
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Pøekládám vzor k vyhledání..."
+
+#
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Spou¹tím pøíkaz pro shodující se zprávy... "
+
+#
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "®ádná ze zpráv nesplòuje daná kritéria."
+
+#
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "Pøi vyhledávání bylo dosa¾eno konce bez nalezení shody."
+
+#
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "Pøi vyhledávání bylo dosa¾eno zaèátku bez nalezení shody."
+
+#
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Hledání bylo pøeru¹eno."
+
+#
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "PGP heslo zapomenuto"
+
+#
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Chyba: nelze spustit PGP proces! --]\n"
+
+#
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- Konec výstupu PGP --]\n"
+"\n"
+
+#
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- ZAÈÁTEK PGP ZPRÁVY --]\n"
+"\n"
+
+#
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[--ZAÈÁTEK VEØEJNÉHO KLÍÈE PGP --]\n"
+
+#
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- ZAÈÁTEK PODEPSANÉ PGP ZPRÁVY --]\n"
+"\n"
+
+#
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- KONEC PGP ZPRÁVY --]\n"
+
+#
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- KONEC VEØEJNÉHO KLÍÈE PGP --]\n"
+
+#
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- KONEC PODEPSANÉ PGP ZPRÁVY --]\n"
+
+#
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Chyba: nelze najít zaèátek PGP zprávy! --]\n"
+"\n"
+
+#
+#: pgp.c:662
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Vnitøní chyba. Informujte <roessler@does-not-exist.org>."
+
+#
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Chyba: nelze spustit PGP! --]\n"
+"\n"
+
+#
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Chyba: zpráva ve formátu PGP/MIME je poru¹ena! --]\n"
+"\n"
+
+#
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Chyba: doèasný soubor nelze vytvoøit! --]\n"
+
+#
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- Následující data jsou za¹ifrována ve formátu PGP/MIME --]\n"
+"\n"
+
+#
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- Konec dat za¹ifrovaných ve formátu PGP/MIME --]\n"
+
+#
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "PGP proces nelze spustit!"
+
+#
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "Pou¾ít ID klíèe = \"%s\" pro %s?"
+
+#
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "Zadejte ID klíèe pro %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "PGP nelze spustit."
+
+#
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "Získávám PGP klíè..."
+
+#: pgpkey.c:486
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr ""
+"V¹em vyhovujícím klíèùm vypr¹ela platnost, byly zneplatnìny nebo zakázány."
+
+#
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Zvolit "
+
+#
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Kontrolovat klíè  "
+
+#
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "klíèe PGP vyhovující <%s>."
+
+#
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "klíèe PGP vyhovující \"%s\"."
+
+#
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "Nelze otevøít /dev/null"
+
+#
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Doèasný soubor nelze vytvoøit."
+
+#
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "ID klíèe: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "Klíè nelze pou¾ít: vypr¹ela jeho platnost, nebo byl zakázán èi sta¾en."
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "Tomuto ID vypr¹ela platnost, nebo bylo zakázáno èi sta¾eno."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "ID nemá definovanou dùvìryhodnost"
+
+#
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "Toto ID není dùvìryhodné."
+
+#
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "Dùvìryhodnost tohoto ID je pouze èásteèná."
+
+#
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s Opravdu chcete tento klíè pou¾ít?"
+
+#
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Zadejte ID klíèe: "
+
+#
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "Spou¹tím PGP..."
+
+#
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "Klíè PGP %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Hledám klíèe vyhovující \"%s\"..."
+
+#
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "Server nepodporuje pøíkaz TOP."
+
+#
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "Nelze zapsat hlavièku do doèasného souboru!"
+
+#
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "Server nepodporuje pøíkaz UIDL."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "%s není platná POP cesta"
+
+#
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "Stahuji zprávu seznam zpráv..."
+
+#
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "Nelze zapsat zprávu do doèasného souboru!"
+
+#
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "Hledám nové zprávy..."
+
+#
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "POP server není definován."
+
+#
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "Ve schránce na POP serveru nejsou nové zprávy."
+
+#
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "Odstranit zprávy ze serveru..."
+
+#
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Naèítám nové zprávy (poèet bajtù: %d)..."
+
+#
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "Chyba pøi zápisu do schránky!"
+
+#
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [poèet pøeètených zpráv: %d/%d]"
+
+#
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "Server uzavøel spojení!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Ovìøuji (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Ovìøuji (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "APOP ovìøení se nezdaøilo."
+
+#
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "Server nepodporuje pøíkaz USER."
+
+#
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "Nelze ponechat zprávy na serveru."
+
+#
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "Chyba pøi pøipojováno k serveru: %s"
+
+#
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "Konèím spojení s POP serverem..."
+
+#
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Ukládám indexy zpráv..."
+
+#
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Spojení ztraceno. Navázat znovu spojení s POP serverem."
+
+#
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "¾ádné odlo¾ené zprávy"
+
+#
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "®ádné zprávy nejsou odlo¾eny."
+
+#
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "Nekorektní PGP hlavièka"
+
+#
+#: postpone.c:479
+msgid "Illegal S/MIME header"
+msgstr "Nekorektní S/MIME hlavièka"
+
+#
+#: postpone.c:554
+msgid "Decryption failed."
+msgstr "De¹ifrování se nezdaøilo."
+
+#
+#: query.c:46
+msgid "New Query"
+msgstr "Nový dotaz"
+
+#
+#: query.c:47
+msgid "Make Alias"
+msgstr "Vytvoøit pøezdívku"
+
+#
+#: query.c:48
+msgid "Search"
+msgstr "Hledat"
+
+#
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Èekám na odpovìï..."
+
+#
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Pøíkaz pro dotazy není definován."
+
+#
+#: query.c:286
+msgid "Query"
+msgstr "Dotaz"
+
+#
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Dotázat se na: "
+
+#
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Dotaz na `%s'"
+
+#
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Poslat rourou"
+
+#
+#: recvattach.c:53
+msgid "Print"
+msgstr "Tisk"
+
+#
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Ukládám..."
+
+#
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Pøíloha ulo¾ena."
+
+#
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "VAROVÁNÍ! Takto pøepí¹ete %s. Pokraèovat?"
+
+#
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Pøíloha byla filtrována."
+
+#
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Filtrovat pøes: "
+
+#
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Poslat rourou do: "
+
+#
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "Nevím, jak vytisknout pøílohy typu %s!."
+
+#
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Vytisknout oznaèené pøílohy?"
+
+#
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Vytisknout pøílohu?"
+
+#
+#: recvattach.c:938
+msgid "Can't decrypt encrypted message!"
+msgstr "Nemohu de¹ifrovat za¹ifrovanou zprávu!"
+
+#
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Pøílohy"
+
+#
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "Nejsou ¾ádné podèásti pro zobrazení!"
+
+#
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "Z POP serveru nelze mazat pøílohy."
+
+#
+#: recvattach.c:1056
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "Mazání pøíloh ze za¹ifrovaných zpráv není podporováno."
+
+#
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Podporováno je pouze mazání pøíloh o více èástech."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Lze posílat pouze kopie èástí typu 'message/rfc822'."
+
+#
+#: recvcmd.c:213
+msgid "Error bouncing message!"
+msgstr "Chyba pøi pøeposílání zprávy."
+
+#
+#: recvcmd.c:213
+msgid "Error bouncing messages!"
+msgstr "Chyba pøi pøeposílání zpráv."
+
+#
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Doèasný soubor %s nelze otevøít."
+
+#
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "Pøeposlat jako pøílohy?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr "V¹echny oznaèené pøílohy nelze dekódovat. Pøeposlat je v MIME formátu?"
+
+#
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Pøeposlat zprávu zapouzdøenou do MIME formátu?"
+
+#
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "Soubor %s nelze vytvoøit."
+
+#
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "®ádná zpráva není oznaèena."
+
+#
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "®ádné po¹tovní konference nebyly nalezeny!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+"V¹echny oznaèené pøílohy nelze dekódovat. Zapouzdøit je do MIME formátu?"
+
+#
+#: remailer.c:480
+msgid "Append"
+msgstr "Pøipojit"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Vlo¾it"
+
+#
+#: remailer.c:482
+msgid "Delete"
+msgstr "Smazat"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "OK"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "'type2.list' pro mixmaster nelze získat."
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Vyberte øetìz remailerù"
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "Chyba: %s nelze pou¾ít jako poslední èlánek øetìzu remailerù."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Maximální poèet èlánkù øetìzu remailerù typu mixmaster je %d."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "Øetìz remailerù je ji¾ prázdný."
+
+#
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "První èlánek øetìzu jste ji¾ vybral."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "Poslední èlánek øetìzu jste ji¾ vybral."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Mixmaster nepovoluje Cc a Bcc hlavièky."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr ""
+"Pokud pou¾íváte mixmaster, je tøeba správnì nastavit promìnnou \"hostname\"."
+
+#
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Chyba pøi zasílání zprávy, potomek ukonèen %d.\n"
+
+#
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Chyba pøi zasílání zprávy."
+
+#
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "Nesprávný formát polo¾ky pro typ %s v \"%s\" na øádku %d"
+
+#
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Cesta k mailcapu není zadána."
+
+#
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "pro typ %s nebyla nalezena polo¾ka v mailcapu"
+
+#
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "skóre: pøíli¹ málo argumentù"
+
+#
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "skóre: pøíli¹ mnoho argumentù"
+
+#
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Vìc není specifikována, zru¹it?"
+
+#
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Vìc není specifikována, zru¹eno."
+
+#
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Odepsat %s%s?"
+
+#
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "Odepsat %s%s?"
+
+#
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "®ádná oznaèená zpráva není viditelná!"
+
+#
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Vlo¾it zprávu do odpovìdi?"
+
+#
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Vkládám zakomentovanou zprávu..."
+
+#
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "V¹echny po¾adované zprávy nelze vlo¾it!"
+
+#
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "Pøeposlat jako pøílohu?"
+
+#
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Pøipravuji pøeposílanou zprávu..."
+
+#
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Vrátit se k odlo¾eným zprávám?"
+
+#
+#: send.c:1336
+msgid "Edit forwarded message?"
+msgstr "Upravit pøeposílanou zprávu?"
+
+#
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Zahodit nezmìnìnou zprávu?"
+
+#
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Nezmìnìná zpráva byla zahozena."
+
+#
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "Zpráva nebyla odeslána."
+
+#
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Zpráva byla odlo¾ena."
+
+#
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Nejsou zadáni pøíjemci!"
+
+#
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Nebyli zadání pøíjemci."
+
+#
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "®ádná vìc, zru¹it odeslání?"
+
+#
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Vìc nebyla zadána."
+
+#
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Posílám zprávu..."
+
+#
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Zprávu nelze odeslat."
+
+#
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Zpráva odeslána."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Zasílám na pozadí."
+
+#
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "Nebyl nalezen 'boundary' parametr! [ohlaste tuto chybu]"
+
+#
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s ji¾ neexistuje!"
+
+#
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "%s není øádným souborem."
+
+#
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "%s nelze otevøít"
+
+#
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Chyba pøi zasílání zprávy, potomek ukonèen %d (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Výstup doruèovacího programu"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr "Chybné IDN %s pøi generování resent-from."
+
+#
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s... Konèím.\n"
+
+#
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "Zachycen %s... Konèím.\n"
+
+#
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Zachycen signál %d... Konèím.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr "Dùvìryhodný   "
+
+#: smime.c:303
+msgid "Verified  "
+msgstr "Ovìøený   "
+
+#: smime.c:306
+msgid "Unverified"
+msgstr "Neovìøený   "
+
+#
+#: smime.c:309
+msgid "Expired   "
+msgstr "Platnost vypr¹ela   "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr "Odvolaný   "
+
+#
+#: smime.c:315
+msgid "Invalid   "
+msgstr "Není platný   "
+
+#
+#: smime.c:318
+msgid "Unknown   "
+msgstr "Neznámý   "
+
+#
+#: smime.c:347
+msgid "Enter keyID: "
+msgstr "Zadejte ID klíèe: "
+
+#
+#: smime.c:370
+#, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "S/MIME klíèe vyhovující \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr "ID %s není verifikováno, chcete jej pou¾ít pro %s?"
+
+#
+#: smime.c:523 smime.c:592
+#, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "Pou¾ít nedùvìryhodný klíè s  ID %s pro %s?"
+
+#
+#: smime.c:526 smime.c:595
+#, c-format
+msgid "Use ID %s for %s ?"
+msgstr "Pou¾ít klíè s ID %s pro %s?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+"Pozor: Zatím jste se nerozhodli, jestli dùvìøujete klíèi s ID %s (pokraèujte "
+"stiskem jakékoliv klávesy)"
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr "Nebyl nalezen ¾ádný (platný) certifikát pro %s."
+
+#
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "Chyba: nelze spustit OpenSSL jako podproces!"
+
+#
+#: smime.c:1197
+msgid "no certfile"
+msgstr "chybí soubor s certifikáty"
+
+#
+#: smime.c:1200
+msgid "no mbox"
+msgstr "¾ádná schránka"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr "OpenSSL nevygenerovalo ¾ádný výstup..."
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr "Varování: Nebyl nalezen intermediate certifikát."
+
+#
+#: smime.c:1426
+msgid "Can't open OpenSSL subprocess!"
+msgstr "OpenSSL podproces nelze spustit!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr "OpenSSL nevygenerovalo ¾ádný výstup..."
+
+#
+#: smime.c:1629 smime.c:1751
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- Konec OpenSSL výstupu --]\n"
+"\n"
+
+#
+#: smime.c:1712 smime.c:1722
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Chyba: nelze spustit OpenSSL podproces! --]\n"
+
+#
+#: smime.c:1755
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr "[-- Následující data jsou za¹ifrována pomocí S/MIME --]\n"
+
+#
+#: smime.c:1758
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr "[-- Následují data podepsaná pomocí S/MIME --]\n"
+
+#
+#: smime.c:1822
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- Konec dat za¹ifrovaných ve formátu S/MIME --]\n"
+
+#
+#: smime.c:1824
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- Konec dat podepsaných pomocí S/MIME --]\n"
+
+#
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Øadím schránku..."
+
+#
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "Øadící funkci nelze nalézt! [ohlaste tuto chybu]"
+
+#
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(¾ádná schránka)"
+
+#
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "Rodièovská zpráva není v omezeném zobrazení viditelná.."
+
+#
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "Rodièovská zpráva není dostupná."
+
+#
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "Spou¹tím OpenSSL..."
+
+#
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "Zaslat kopii zprávy na %s...?"
+
+#
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "Zaslat kopii zpráv na %s...?"
+
+#
+#~ msgid "ewsabf"
+#~ msgstr "¹pzjon"
+
+#~ msgid "Certificate *NOT* added."
+#~ msgstr "Certifikát *NEBYL* pøidán."
+
+#
+#~ msgid "This ID's validity level is undefined."
+#~ msgstr "Míra dùvìryhodnosti tohoto ID není definována."
+
+#
+#~ msgid "Decode-save"
+#~ msgstr "Dekódovat-ulo¾it"
+
+#
+#~ msgid "Decode-copy"
+#~ msgstr "Dekódovat-kopírovat"
+
+#
+#~ msgid "Decrypt-save"
+#~ msgstr "De¹ifrovat-ulo¾it"
+
+#
+#~ msgid "Decrypt-copy"
+#~ msgstr "De¹ifrovat-kopírovat"
+
+#
+#~ msgid "Copy"
+#~ msgstr "Kopírovat"
+
+#~ msgid "%s [%s]\n"
+#~ msgstr "%s [%s]\n"
+
+#
+#~ msgid ""
+#~ "\n"
+#~ "[-- End of PGP output --]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "[-- Konec výstupu PGP --]\n"
+#~ "\n"
+
+#
+#~ msgid "Can't stat %s."
+#~ msgstr "Chyba pøi volání funkce stat pro %s"
+
+#
+#~ msgid "%s: no such command"
+#~ msgstr "pøíkaz %s neexistuje"
+
+#~ msgid "Authentication method is unknown."
+#~ msgstr "Neznámá autentikaèní metoda"
diff --git a/po/da.gmo b/po/da.gmo
new file mode 100644 (file)
index 0000000..3b4efea
Binary files /dev/null and b/po/da.gmo differ
diff --git a/po/da.po b/po/da.po
new file mode 100644 (file)
index 0000000..1716441
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,4193 @@
+# This Danish translation of Mutt was made by people on the 
+# sslug-locale mailing list in the month of March 2000. The 
+# mailing list is archived at http://www.sslug.dk/emailarkiv/locale/
+# 
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Mutt-1.3.27\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2002-01-23 16:07+0100\n"
+"Last-Translator: Byrial Jensen <byrial@image.dk>, Morten Bo Johansen "
+"<mojo@image.dk>\n"
+"Language-Team: Danish <dansk@klid.dk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "Brugernavn på %s: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "Adgangskode for %s@%s: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Tilbage"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Slet"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Behold"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Vælg"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Hjælp"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "Adressebogen er tom!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Adressebog"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Vælg et alias: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "Der er allerede et alias med det navn!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr ""
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Adresse: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr ""
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Navn: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] O.k.?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Gem i fil: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Adresse tilføjet."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Kan ikke matche navneskabelon, fortsæt?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "Brug af \"compose\" i mailcap-fil kræver %%s."
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "Fejl ved kørsel af \"%s\"!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Kan ikke åbne fil for at analysere brevhovedet."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Kan ikke åbne fil for at fjerne brevhovedet."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "Ingen \"compose\"-regel for %s i mailcap-fil, opretter en tom fil."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "Brug af \"edit\" i mailcap-fil kræver %%s."
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "Ingen \"edit\"-regel for %s i mailcap-fil."
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "Ingen passende mailcap-regler fundet. Viser som tekst."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "MIME-typen er ikke defineret. Kan ikke vise bilag."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Kan ikke oprette filter."
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Kan ikke oprette filter"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "Skrivefejl!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Jeg ved ikke hvordan man udskriver dette!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Skift filkatalog"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Maske"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s er ikke et filkatalog."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Indbakker [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Abonnementer [%s], filmaske: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Filkatalog [%s], filmaske: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Kan ikke vedlægge et filkatalog!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Ingen filer passer til filmasken."
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Oprettelse er kun understøttet for IMAP-brevbakker"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Sletning er kun understøttet for IMAP-brevbakker"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Virkelig slette brevbakke \"%s\"?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "Brevbakke slettet."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "Brevbakke ikke slettet."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Skift til filkatalog: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Fejl ved indlæsning af filkatalog."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Filmaske: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Omvendt sortering efter (d)ato, (a)lfabetisk, (s)tr. eller (i)ngen?"
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Sortering efter (d)ato, (a)lfabetisk, (s)tr. eller (i)ngen?"
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "dasi"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Nyt filnavn: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Filkataloger kan ikke vises."
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Fejl ved visning af fil."
+
+#: buffy.c:442
+#, fuzzy
+msgid "New mail in "
+msgstr "Ny post i %s."
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: farve er ikke understøttet af terminal."
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: ukendt farve."
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: ukendt objekt."
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: kommandoen kan kun bruges på et indeks-objekt."
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: for få parametre."
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Manglende parameter."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: for få parametre."
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: for få parametre."
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: ukendt attribut"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "for få parametre."
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "for mange parametre."
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "standard-farver er ikke understøttet."
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "Kontrollér PGP-underskrift?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Kunne ikke oprette midlertidig fil!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Kan ikke oprette fremvisningsfilter."
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "Kunne ikke kopiere brevet."
+
+#: commands.c:182
+#, fuzzy
+msgid "S/MIME signature successfully verified."
+msgstr "PGP-underskrift er i orden."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr ""
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+#, fuzzy
+msgid "S/MIME signature could NOT be verified."
+msgstr "PGP-underskrift er IKKE i orden."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "PGP-underskrift er i orden."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "PGP-underskrift er IKKE i orden."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Kommando: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Gensend brev til: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Gensend udvalgte breve til: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "Ugyldig adresse!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr ""
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Gensend brev til %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Gensend breve til %s"
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Message not bounced."
+msgstr "Brevet er gensendt."
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Messages not bounced."
+msgstr "Brevene er gensendt."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Brevet er gensendt."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Brevene er gensendt."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "Kan ikke oprette filterproces"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Overfør til kommando: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "Ingen udskrivningskommando er defineret"
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "Udskriv brev?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Udskriv udvalgte breve?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "Brevet er udskrevet"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Brevene er udskrevet"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "Brevet kunne ikke udskrives"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "Brevene kunne ikke udskrives"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Omvendt-sort (d)ato/(f)ra/(a)nk./(e)mne/t(i)l/(t)råd/(u)sort/(s)tr./s(c)"
+"ore?: "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Sortér (d)ato/(f)ra/(a)nk./(e)mne/t(i)l/(t)råd/(u)sort/(s)tr./s(c)ore?: "
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dfaeitusc"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Skalkommando: "
+
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "Afkod-gem%s i brevbakke"
+
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "Afkod-kopiér%s til brevbakke"
+
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "Dekryptér-gem%s i brevbakke"
+
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "Dekryptér-kopiér%s til brevbakke"
+
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "Gem%s i brevbakke"
+
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "Kopiér%s til brevbakke"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " udvalgte"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Kopierer til %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "Omdan til %s ved afsendelse?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "\"Content-Type\" ændret til %s."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "Tegnsæt ændret til %s; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "omdanner ikke"
+
+#: commands.c:914
+msgid "converting"
+msgstr "omdanner"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Der er ingen bilag."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Send"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Afbryd"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Vedlæg fil"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Beskr."
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Underskriv og kryptér"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Kryptér"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Underskriv"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Klartekst"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " underskriv som: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<forvalgt>"
+
+#: compose.c:149
+#, fuzzy
+msgid "Encrypt with: "
+msgstr "Kryptér"
+
+#: compose.c:165
+#, fuzzy
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "(k)ryptér, (u)nderskriv, underskriv (s)om, (b)egge, (i)ngen PGP"
+
+#: compose.c:166
+msgid "esabf"
+msgstr "kusbi"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Underskriv som: "
+
+#: compose.c:227
+#, fuzzy
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "(k)ryptér, (u)nderskriv, underskriv (s)om, (b)egge, (i)ngen PGP"
+
+#: compose.c:228
+#, fuzzy
+msgid "eswabf"
+msgstr "kusbi"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+
+#: compose.c:238
+msgid "12345f"
+msgstr ""
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] findes ikke mere!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] blev ændret. Opdatér indkodning?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- MIME-dele"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr ""
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Brevets eneste del kan ikke slettes."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr ""
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "Vedlægger valgte filer ..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "Kan ikke vedlægge %s!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Åbn brevbakken med brevet som skal vedlægges"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "Ingen breve i den brevbakke."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Udvælg de breve som du vil vedlægge!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Kan ikke vedlægge!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "Omkodning berører kun tekstdele"
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "Den aktuelle del vil ikke blive konverteret"
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "Den aktuelle del vil blive konverteret"
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Ugyldig indkodning."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Gem en kopi af dette brev?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Omdøb til: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "Kan ikke finde filen %s: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Ny fil: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "\"Content-Type\" er på formen grundtype/undertype."
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Ukendt \"Content-Type\" %s."
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Kan ikke oprette filen %s."
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "Det er ikke muligt at lave et bilag."
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Udsæt afsendelse af dette brev?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Skriv brevet til brevbakke"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Skriver brevet til %s ..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "Brevet skrevet."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr ""
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr ""
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr ""
+
+#: crypt.c:71
+#, fuzzy, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- PGP-uddata følger (aktuelt tidspunkt: %c) --]\n"
+
+#: crypt.c:86
+#, fuzzy
+msgid "Passphrase(s) forgotten."
+msgstr "Har glemt PGP-løsen."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Anfør PGP-løsen:"
+
+#: crypt.c:147
+#, fuzzy
+msgid "Enter SMIME passphrase:"
+msgstr "Anfør PGP-løsen:"
+
+#: crypt.c:192
+#, fuzzy
+msgid "Create a traditional (inline) PGP message?"
+msgstr "Lav et \"application/pgp\"-brev?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "Starter PGP ..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr ""
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr ""
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr ""
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- Fejl: Inkonsistent \"multipart/signed\" struktur! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- Fejl: Ukendt \"multipart/signed\" protokol %s! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr "[-- Advarsel: %s/%s underskrifter kan ikke kontrolleres. --]\n"
+
+#. Now display the signed body
+#: crypt.c:912
+#, fuzzy
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr "[-- Følgende data er underskrevet --]\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr "[-- Advarsel: Kan ikke finde nogen underskrifter. --]\n"
+
+#: crypt.c:924
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr "[-- Slut på underskrevne data --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "ja"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "nej"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Afslut Mutt øjeblikkeligt?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "ukendt fejl"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Tryk på en tast for at fortsætte."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " ('?' for en liste): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Ingen brevbakke er åben."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Der er ingen breve."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "Brevbakken er skrivebeskyttet."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "Funktionen er ikke tilladt ved vedlægning af bilag."
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "Ingen synlige breve."
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "Kan ikke skrive til en skrivebeskyttet brevbakke!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "Ændringer i brevbakken vil blive skrevet til disk, når den forlades."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Ændringer i brevbakken vil ikke blive skrevet til disk."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Afslut"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Gem"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Send"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Svar"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Gruppe"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "Brevbakke ændret udefra. Status-indikatorer kan være forkerte."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Ny(e) brev(e) i denne brevbakke."
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "Brevbakke ændret udefra."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Ingen breve er udvalgt."
+
+#: curs_main.c:653 menu.c:896
+#, fuzzy
+msgid "Nothing to do."
+msgstr "Forbinder til %s..."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Hop til brev: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "Parameter skal være nummeret på et brev."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Brevet er ikke synligt."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Ugyldigt brevnummer."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Slet breve efter mønster: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "Intet afgrænsnings-mønster er i brug."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Afgrænsning: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Afgræns til breve efter mønster: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Afslut Mutt?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Udvælg breve efter mønster: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Behold breve efter mønster: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Fjern valg efter mønster: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Åbn brevbakke i skrivebeskyttet tilstand"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Åbn brevbakke"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s er ikke en brevbakke."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Afslut Mutt uden at gemme?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Du er ved sidste brev."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Alle breve har slette-markering."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Du er ved første brev."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "Søgning fortsat fra top."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "Søgning fortsat fra bund."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Ingen nye breve"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Ingen ulæste breve"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " i dette afgrænsede billede"
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "Kan ikke ændre 'vigtig'-markering for breve på POP-server."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Ikke flere tråde."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Du er ved den første tråd."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "Trådning er ikke i brug."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "Tråden indeholder ulæste breve."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "Kan ikke redigere brev på POP-server."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tindsæt en linje som begynder med en enkelt ~.\n"
+"~b adresser\tføj adresser til Bcc-feltet.\n"
+"~c adresser\tføj adresser til Cc-feltet.\n"
+"~f [brevnummer]\tindføj brev.\n"
+"~F [brevnummer]\tsamme som ~f, men inkl. brevhoved.\n"
+"~h\t\tret i brevhoved.\n"
+"~m [brevnummer]\tcitér brev.\n"
+"~M [brevnummer]\tsamme som ~m, men inkl. brevhoved.\n"
+"~p\t\tudskriv brev.\n"
+"~q\t\tgem fil og afslut editor.\n"
+"~r fil\tindlæs fil i editor.\n"
+"~t adresser\tføj Adresser til To-feltet.\n"
+"~u\t\tgenindlæs den forrige linje.\n"
+"~v\t\tredigér brev med den visuelle editor ($visual).\n"
+"~w fil\tskriv brev til fil.\n"
+"~x\t\tforkast rettelser og forlad editor.\n"
+"~?\t\tdenne meddelelse.\n"
+".\t\tpå en linje for sig selv afslutter input.\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: ugyldigt brevnummer.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Afslut brevet med et '.' på en linje for sig selv).\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "Ingen brevbakke.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Brevet indeholder:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(fortsæt)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "manglende filnavn.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Ingen linjer i brevet.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr ""
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: ukendt editor-kommando (~? for hjælp)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "kunne ikke oprette midlertidig brevbakke: %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "Kunne ikke skrive til midlertidig brevbakke: %s"
+
+#: editmsg.c:101
+#, fuzzy, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "Kunne ikke skrive til midlertidig brevbakke: %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "Brevfilen er tom!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "Brevet er uændret!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "Kan ikke åbne brev: %s."
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Kan ikke føje til brevbakke: %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Fejl. Bevarer midlertidig fil: %s"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Sæt status-indikator"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Fjern status-indikator"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[-- Fejl: Kunne ikke vise nogen del af \"Multipart/Alternative\"! --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Brevdel #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Type: %s/%s, indkodning: %s, størrelse: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Autovisning ved brug af %s --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Starter autovisning kommando: %s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- Kan ikke køre %s --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Fejl fra autovisning af %s --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- Fejl: \"message/external-body\" har ingen \"access-type\"-parameter --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Denne %s/%s-del "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(på %s bytes) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "er blevet slettet --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- den %s --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- navn %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Denne %s/%s-del er ikke medtaget, --]\n"
+
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr "[-- og den angivne eksterne kilde findes ikke mere. --]\n"
+
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr "[-- og den angivne \"access-type\" %s er ikke understøttet --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Fejl: \"multipart/signed\" har ingen \"protocol\"-parameter."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Fejl: \"multipart/encrypted\" har ingen \"protocol\"-parameter!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Kan ikke åbne midlertidig fil!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s er ikke understøttet "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(brug '%s' for vise denne brevdel)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "('view-attachments' må tildeles en tast!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: kunne ikke vedlægge fil."
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "FEJL: vær venlig at rapportere denne fejl"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<UKENDT>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Almene taste-bindinger:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Funktioner uden tastetildelinger:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Hjælp for %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: Kan ikke foretage unhook * inde fra en hook."
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: ukendt hooktype: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: Kan ikke slette en %s inde fra en %s."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "Ingen godkendelsesmetode kan bruges."
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Godkender (anonym)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "Anonym godkendelse slog fejl."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Godkender (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "CRAM-MD5-godkendelse slog fejl."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Godkender (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "GSSAPI-godkendelse slog fejl."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "Der er spærret for indlogning på denne server."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Logger ind..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "Login slog fejl."
+
+#: imap/auth_sasl.c:112
+#, fuzzy, c-format
+msgid "Authenticating (%s)..."
+msgstr "Godkender (APOP)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "SASL-godkendelse slog fejl."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "%s er en ugyldig IMAP-sti"
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "Henter navnerum..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Henter liste over brevbakker"
+
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "Brevbakken findes ikke"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Opret brevbakke: "
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "Brevbakken skal have et navn."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Brevbakke oprettet."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "Brevbakke lukket"
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Kritisk fejl. Antal breve er ikke som forventet!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "Lukker forbindelsen til %s..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Forældet IMAP-server. Mutt kan ikke bruge den."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "Sikker forbindelse med TLS?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "Kunne ikke opnå TLS-forbindelse"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "Vælger %s ..."
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "Fejl ved åbning af brevbakke"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Kunne ikke føje til IMAP-brevbakker på denne server."
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "Opret %s?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Lukker forbindelsen til IMAP-serveren ..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "Markerer %d breve slettet"
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "Sletning slog fejl"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Gemmer brevstatus-indikatorer ... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Sletter breve på server ..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbox: EXPUNGE slog fejl"
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "CLOSE slog fejl"
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "Ugyldigt navn på brevbakke"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "Abonnerer på %s..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "Afmelder abonnement på %s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "Kan ikke hente brevhoveder fra denne version IMAP-server."
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "Kunne ikke oprette midlertidig fil %s"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Henter brevhoveder ... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Henter brev ..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "Brevindekset er forkert. Prøv at genåbne brevbakken."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Uploader brev ..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "Kopierer %d breve til %s..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "Kopierer brev %d til %s..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "Fortsæt?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "alias: Ingen adresse"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr ""
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "ugyldig linje i brevhoved"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: ukendt sorteringsmetode"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): Fejl i regulært udtryk: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: ukendt variabel."
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "præfiks er ikke tilladt med reset"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "værdi er ikke tilladt med reset"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s er sat."
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s er ikke sat."
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: ugyldig type brevbakke"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: Ugyldig værdi"
+
+#: init.c:1312
+#, fuzzy, c-format
+msgid "%s: Unknown type."
+msgstr "%s: ukendt type"
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: ukendt type"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Kan ikke finde filen %s: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s er ikke en almindelig fil."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Fejl i %s, linje %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: Fejl i %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: læsning afbrudt pga. for mange fejl i %s"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: Fejl ved %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: For mange parametre"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: Ukendt kommando"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Fejl i kommandolinje: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "Kan ikke bestemme hjemmekatalog."
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "kan ikke bestemme brugernavn."
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Macro-sløjfe opdaget!"
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Tasten er ikke tillagt en funktion."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Tasten er ikke tillagt en funktion. Tast '%s' for hjælp."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: For mange parametre"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: ukendt menu."
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "tom tastesekvens"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: for mange parametre"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: ukendt funktion"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: tom tastesekvens"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: for mange parametre"
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: ingen parametre."
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s: ukendt funktion"
+
+#: keymap.c:912
+#, fuzzy
+msgid "Enter keys (^G to abort): "
+msgstr "Anfør nøgle-id for %s: "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr ""
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "tom funktion"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "fremtving visning af denne del ved brug af mailcap"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "vis denne del som tekst"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "Slå visning af underdele fra eller til"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "gå til bunden af siden"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "videresend et brev til en anden modtager"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "Vælg en ny fil i dette filkatalog"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "vis fil"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "vis navnet på den aktuelt valgte fil"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "abonnér på aktuelle brevbakke (kun IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "afmeld abonnement på aktuelle brevbakke (kun IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "skift mellem visning af alle/abonnerede postbakker (kun IMAP)"
+
+#: keymap_alldefs.h:18
+#, fuzzy
+msgid "list mailboxes with new mail"
+msgstr "Ingen brevbakke med nye breve."
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "skift filkatalog"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "undersøg brevbakker for nye breve"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "vedlæg fil(er) til dette brev"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "vedlæg brev(e) til dette brev"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "ret i Bcc-listen"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "ret i Cc-listen"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "ret brevdelens beskrivelse"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "ret brevdelens indkodning"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "kopiér dette brev til fil"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "redigér i den fil der skal vedlægges"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "ret afsender (from:)"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "redigér brev (med brevhoved)"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "redigér brev"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "redigér brevdel efter mailcap-regel"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "ret Reply-To-feltet"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "ret dette brevs emne (Subject:)"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "ret listen over modtagere (To:)"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "opret en ny brevbakke (kun IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "ret brevdelens \"content-type\""
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "lav en midlertidig kopi af en brevdel"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "stavekontrollér brevet"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "lav en ny brevdel efter mailcap-regel"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "slå omkodning af denne brevdel til/fra"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "gem dette brev til senere forsendelse"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "omdøb/flyt en vedlagt fil"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "send brevet"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "skift status mellem integreret og bilagt"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "vælg om filen skal slettes efter afsendelse"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "opdatér data om brevdelens indkodning"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "læg brevet i en brevbakke"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "kopiér brev til en fil/brevbakke"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "opret et alias fra afsenderadresse"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "flyt til nederste listning"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "flyt til midterste listning"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "flyt til øverste listning"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "lav en afkodet kopi (text/plain)"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "lav en afkodet kopi (text/plain) og slet"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "slet den aktuelle listning"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "slet den aktuelle brevbakke (kun IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "slet alle breve i deltråd"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "slet alle breve i tråd"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "vis fuld afsenderadresse"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "fremvis brev med helt eller beskåret brevhoved"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "fremvis et brev"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "redigér det \"rå\" brev"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "slet tegnet foran markøren"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "flyt markøren et tegn til venstre"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "flyt markøren til begyndelse af ord"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "gå til begyndelsen af linje"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "Gennemløb indbakker"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "færdiggør filnavn eller alias"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "færdiggør adresse ved forespørgsel"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "slet tegnet under markøren"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "gå til linjeslut"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "flyt markøren et tegn til højre"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "flyt markøren til slutning af ord"
+
+#: keymap_alldefs.h:75
+#, fuzzy
+msgid "scroll down through the history list"
+msgstr "gå op igennem historik-listen"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "gå op igennem historik-listen"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "slet alle tegn til linjeafslutning"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "slet resten af ord fra markørens position"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "slet linje"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "slet ord foran markør"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "citér den næste tast"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "udskift tegn under markøren med forrige"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "skriv ord med stort begyndelsesbogstav"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "skriv ord med små bogstaver"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "skriv ord med store bogstaver"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "skriv en muttrc-kommando"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "skriv en filmaske"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "forlad denne menu"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "filtrér brevdel gennem en skalkommando"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "gå til den første listning"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "markér brev som vigtig/fjern markering"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "videresend et brev med kommentarer"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "vælg den aktuelle listning"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "svar til alle modtagere"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "gå ½ side ned"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "gå ½ side op"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "dette skærmbillede"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "gå til et indeksnummer"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "gå til den sidste listning"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "svar til en angivet postliste"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "udfør makro"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "skriv et nyt brev"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "åbn en anden brevbakke"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "åbn en anden brevbakke som skrivebeskyttet"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "fjern status-indikator fra brev"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "slet breve efter mønster"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "hent post fra IMAP-server nu"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "hent post fra POP-server"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "gå til det første brev"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "gå til det sidste brev"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "vis kun breve, der matcher et mønster"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "hop til det næste nye brev"
+
+#: keymap_alldefs.h:113
+#, fuzzy
+msgid "jump to the next new or unread message"
+msgstr "hop til næste ulæste brev"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "hop til næste deltråd"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "hop til næste tråd"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "hop til næste ikke-slettede brev"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "hop til næste ulæste brev"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "hop til forrige brev i tråden"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "hop til forrige tråd"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "hop til forrige deltråd"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "hop til forrige ikke-slettede brev"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "hop til forrige nye brev"
+
+#: keymap_alldefs.h:123
+#, fuzzy
+msgid "jump to the previous new or unread message"
+msgstr "hop til forrige ulæste brev"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "hop til forrige ulæste brev"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "markér den aktuelle tråd som læst"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "markér den aktuelle deltråd som læst"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "sæt en status-indikator på et brev"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "gem ændringer i brevbakke"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "udvælg breve efter et mønster"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "fjern slet-markering efter mønster"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "fjern valg efter mønster"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "gå til midten af siden"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "gå til næste listning"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "flyt en linje ned"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "gå til næste side"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "gå til bunden af brevet"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "vælg om citeret tekst skal vises"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "gå forbi citeret tekst"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "gå til toppen af brevet"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "overfør brev/brevdel til en skalkommando"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "gå til forrige listning"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "flyt en linje op"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "gå til den forrige side"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "udskriv den aktuelle listning"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "send adresse-forespørgsel til hjælpeprogram"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "føj nye resultater af forespørgsel til de aktuelle resultater"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "gem ændringer i brevbakke og afslut"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "genindlæs et tilbageholdt brev"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "ryd og opfrisk skærmen"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{intern}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "svar på et brev"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "brug det aktuelle brev som forlæg for et nyt"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "gem brev/brevdel i en fil"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "søg efter et regulært udtryk"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "søg baglæns efter et regulært udtryk"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "søg efter næste resultat"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "søg efter næste resultat i modsat retning"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "vælg om fundne søgningsmønstre skal farves"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "kør en kommando i en under-skal"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "sortér breve"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "sortér breve i omvendt rækkefølge"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "udvælg den aktuelle listning"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "anvend næste funktion på de udvalgte breve"
+
+#: keymap_alldefs.h:164
+#, fuzzy
+msgid "apply next function ONLY to tagged messages"
+msgstr "anvend næste funktion på de udvalgte breve"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "markér den aktuelle deltråd"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "markér den aktuelle tråd"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "sæt/fjern et brevs \"ny\"-indikator"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "slå genskrivning af brevbakke til/fra"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "skift mellem visning af brevbakker eller alle filer"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "gå til toppen af siden"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "fjern slet-markering fra den aktuelle listning"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "fjern slet-markering fra alle breve i tråd"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "fjern slet-markering fra alle breve i deltråd"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "vis Mutts versionsnummer og dato"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "vis brevdel, om nødvendigt ved brug af mailcap"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "vis MIME-dele"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr ""
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "vis det aktive afgrænsningsmønster"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "sammen-/udfold den aktuelle tråd"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "sammen-/udfold alle tråde"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "vedlæg en offentlig PGP-nøgle (public key)"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "vis tilvalg for PGP"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "send en offentlig PGP-nøgle"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "Kontrollér en offentlig PGP-nøgle"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "vis nøglens bruger-id"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "Tjek for klassisk pgp"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "Brug den opbyggede kæde"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "Føj en genposter til kæden"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "indsæt en genposter i kæden"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "Slet en genposter fra kæden"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "Vælg kædens forrige led"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "Vælg kædens næste led"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "send brevet gennem en mixmaster-genposterkæde"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "opret dekrypteret kopi og slet"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "opret dekrypteret kopi"
+
+#: keymap_alldefs.h:196
+#, fuzzy
+msgid "wipe passphrase(s) from memory"
+msgstr "fjern PGP-løsen fra hukommelse"
+
+#: keymap_alldefs.h:197
+#, fuzzy
+msgid "extract supported public keys"
+msgstr "udtræk offentlige PGP-nøgler"
+
+#: keymap_alldefs.h:198
+#, fuzzy
+msgid "show S/MIME options"
+msgstr "vis tilvalg for PGP"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Ikke mere hukommelse!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"For at kontakte Mutts udviklere, skriv venligst til <mutt-dev@mutt.org>.\n"
+"Brug venligst flea(1)-værktøjet, hvis du vil rapportere en bug.\n"
+
+#: main.c:50
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-2001 Michael R. Elkins m.fl.\n"
+"Der følger ABSOLUT INGEN GARANTI med Mutt; tast `mutt -vv` for detaljer.\n"
+"Mutt er et frit program, og du er velkommen til at redistribuere det\n"
+"under visse betingelser; tast `mutt -vv` for detaljer.\n"
+
+#: main.c:56
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-2001 Michael R. Elkins <me@cs.hmc.edu>\n"
+"Copyright (C) 1996-2001 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2001 Thomas Roessler <roessler@guug.de>\n"
+"Copyright (C) 1998-2001 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2001 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2001 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"Masser af andre, der ikke er nævnt her, har bidraget med masser af kode,\n"
+"rettelser og forslag.\n"
+"\n"
+"    Dette program er et frit; du kan videredistribuere og/eller ændre\n"
+"    det under betingelserne i GNU General Public License som offentliggjort\n"
+"    af The Free Software Foundation, enten i dennes version 2 eller \n"
+"    (efter dit valg) en hvilken som helst senere version.\n"
+"\n"
+"    Dette program distribueres i håbet om at det vil være brugbart,\n"
+"    men UDEN NOGEN SOM HELST GARANTI, herunder sågar uden nogen \n"
+"    underforstået garanti om SALGBARHED eller EGNETHED TIL NOGET BESTEMT\n"
+"    FORMÅL. Se GNU General Public License for yderligere detaljer\n"
+"\n"
+"    Du skulle have modtaget en kopi af GNU General Public License\n"
+"    sammen med dette program; hvis ikke, så skriv til The Free Software\n"
+"    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\n"
+
+#: main.c:94
+#, fuzzy
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"anvendelse: mutt [ -nRzZ ] [ -e <kmd> ] [ -F <fil> ] [ -m <type> ] [ -f "
+"<fil> ]\n"
+"       mutt [ -nx ] [ -e <kmd> ] [ -a <fil> ] [ -F <fil> ] [ -H <fil> ] [ -i "
+"<fil> ] [ -s <emne> ] [ -b <adr> ] [ -c <adr> ] <adr> [ ... ]\n"
+"       mutt [ -n ] [ -e <kmd> ] [ -F <fil> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"tilvalg:\n"
+"  -a <fil>\tvedlæg fil ved brevet\n"
+"  -b <adresse>\tanfør en blind carbon-copy (BCC)-adresse\n"
+"  -c <adresse>\tanfør en carbon-copy (CC)-adresse\n"
+"  -e <kommando>\tanfør en Mutt-kommando til udførelse efter opstart\n"
+"  -f <fil>\tanfør hvilken brevbakke der skal indlæses\n"
+"  -F <fil>\tanfør en alternativ muttrc-fil\n"
+"  -H <fil>\tanfør en kladdefil hvorfra brevhovedet skal indlæses\n"
+"  -i <fil>\tanfør en fil som Mutt skal medtage i svaret\n"
+"  -m <type>\tanfør standardtype af brevbakke\n"
+"  -n\t\tgør at Mutt ikke læser systemets Muttrc\n"
+"  -p\t\tgenindlæs et tilbageholdt brev\n"
+"  -R\t\tåbn en brevbakke i skrivebeskyttet tilstand\n"
+"  -s <emne>\tanfør et emne (sættes i citationstegn, hvis der er blanktegn)\n"
+"  -v\t\tvis version og oversættelsesparametre\n"
+"  -x\t\tefterlign mailx' afsendelsesmåde\n"
+"  -y\t\tvælg en indbakke\n"
+"  -z\t\tafslut øjeblikkeligt, hvis brevbakken er tom\n"
+"  -Z\t\tåbn første brevbakke med nye breve, afslut straks hvis tom\n"
+"  -h\t\tdenne hjælpeskærm"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Tilvalg ved oversættelsen:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Kan ikke klargøre terminal."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Afluser på niveau %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "DEBUG blev ikke defineret ved oversættelsen. Ignoreret.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s findes ikke. Opret?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "Kan ikke oprette %s: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Ingen angivelse af modtagere.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: kan ikke vedlægge fil.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Ingen brevbakke med nye breve."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Ingen indbakker er defineret"
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "Brevbakken er tom."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Læser %s ... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "Brevbakken er ødelagt!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "Brevbakken blev ødelagt!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Kritisk fejl! Kunne ikke genåbne brevbakke!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Kan ikke låse brevbakke!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr "sync: mbox ændret, men ingen ændrede breve! (rapportér denne bug)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Skriver breve ... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "Udfører ændringer..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Kunne ikke skrive! Gemte en del af brevbakken i %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "Kunne ikke genåbne brevbakke!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Genåbner brevbakke ..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Hop til: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Ugyldigt indeksnummer."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Ingen listninger"
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Du kan ikke komme længere ned."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Du kan ikke komme længere op."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Du er på den sidste side."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Du er på den første side."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "Første listning vises."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "Sidste listning vises."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Du er på sidste listning."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Du er på første listning."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Søg efter: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Søg baglæns efter: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Intet søgemønster."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Ikke fundet."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "Der er ingen udvalgte listninger."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "Søgning kan ikke bruges i denne menu."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "Man kan ikke springe rundt i dialogerne"
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Udvælgelse er ikke understøttet."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "Læser %s ... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr ""
+
+#: muttlib.c:835
+#, fuzzy
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "Filen er et filkatalog, gem i det?"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "Filen er et filkatalog, gem i det?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Fil i dette filkatalog: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "Filen eksisterer , (o)verskriv, (t)ilføj, (a)nnulér?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "ota"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "Kan ikke gemme brev i POP-brevbakke."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s er ingen brevbakke"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Føj breve til %s?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "Forbindelse til %s er lukket."
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL er ikke tilgængelig."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "\"preconnect\"-kommando slog fejl"
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Kommunikationsfejl med server %s (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr ""
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "Opsøger %s..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Kunne ikke finde værten \"%s\""
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Forbinder til %s..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "Kunne ikke forbinde til %s (%s)."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "Kunne ikke finde nok entropi på dit system"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "Fylder entropipuljen: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s har usikre tilladelser!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "SSL sat ud af funktion pga. mangel på entropi"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "I/O-fejl"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "uspecificeret fejl i protokol"
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "SSL slog fejl: %s"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "Ude af stand til at hente certifikat fra server"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "SSL-forbindelse bruger %s (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "Ukendt"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[kan ikke beregne]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[ugyldig dato]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "Server-certifikat er endnu ikke gyldigt"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "Server-certifikat er udløbet"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Dette certifikat tilhører:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Dette certifikat er udstedt af:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Dette certifikat er gyldigt"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   fra %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "     til %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Fingeraftryk: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "Tjek af SSL-certifikat"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(a)fvis, (g)odkend denne gang, (v)arig godkendelse"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "agv"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(a)fvis, (g)odkend denne gang"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "ag"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Afslut "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Advarsel: Kunne ikke gemme certifikat"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "Certifikat gemt"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Fil blokeret af gammel lås. Fjern låsen på  %s?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "Kan ikke låse %s.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "Timeout overskredet under forsøg på at bruge fcntl-lås!."
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Venter på fcntl-lås ... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "Timeout overskredet ved forsøg på brug af flock-lås!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Venter på flock-lås ... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "Kunne ikke låse %s.\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "Læser %s ..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "Skriver %s ..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "Kan ikke synkronisere brevbakke %s!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Flyt læste breve til %s?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Fjern %d slettet brev?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Fjern %d slettede breve?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Flytter læste breve til %s..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "Brevbakken er uændret."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d beholdt, %d flyttet, %d slettet."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d beholdt, %d slettet."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr "Tast '%s' for at skifte til/fra skrivebeskyttet tilstand"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "Brug 'toggle-write' for at muliggøre skrivning"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "Brevbakken er skrivebeskyttet. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "Brevbakke opdateret."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Kan ikke skrive brev"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "Funktion er ikke tilgængelig i denne menu."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "Side op"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "Side ned"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Vis brevdel"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Næste"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "Bunden af brevet vises."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "Toppen af brevet vises."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Søg baglæns: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Søg: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "Hjælpeskærm vises nu."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "Ikke mere citeret tekst."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "Ikke mere uciteret tekst efter citeret tekst."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "brev med flere dele har ingen \"boundary\"-parameter!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Fejl i udtryk: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Ugyldig dag: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Ugyldig måned: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "Ugyldig relativ dato: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "Fejl i udtryk."
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "fejl i mønster ved: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: Ugyldig Kommando"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: er ikke understøttet i denne tilstand."
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "manglende parameter"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "parenteser matcher ikke: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "tomt mønster"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "fejl: ukendt op %d (rapportér denne fejl)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Klargør søgemønster..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Udfører kommando på matchende breve ..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "Ingen breve opfylder kriterierne."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "Søgning er nået til bunden uden resultat."
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "Søgning nåede toppen uden resultat."
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Søgning afbrudt."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "Har glemt PGP-løsen."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Fejl: kan ikke skabe en PGP-delproces! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- Slut på PGP-uddata --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- END PGP MESSAGE --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- END PGP PUBLIC KEY BLOCK --]\n"
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- END PGP SIGNED MESSAGE --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Fejl: kunne ikke finde begyndelse på PGP-meddelelsen! --]\n"
+"\n"
+
+#: pgp.c:662
+#, fuzzy
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Intern fejl. Rapportér dette til <roessler@guug.de>."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Fejl: Kunne ikke skabe en PGP-delproces! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Fejl: forkert udformet PGP/MIME-meddelelse! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Fejl: Kunne ikke oprette en midlertidig fil! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- Følgende data er PGP/MIME-krypteret --]\n"
+"\n"
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- Slut på PGP/MIME-krypteret data --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "Kan ikke åbne PGP-delproces!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "Anvend nøgle-id = \"%s\" for %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "Anfør nøgle-id for %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "Kan ikke starte PGP"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "Henter PGP-nøgle..."
+
+#: pgpkey.c:486
+#, fuzzy
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "Alle matchende nøgler er markeret udløbet/tilbagekaldt."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Udvælg  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Undersøg nøgle  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "PGP-nøgler som matcher <%s>."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "PGP-nøgler som matcher \"%s\"."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "Kan ikke åbne /dev/null"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Kan ikke oprette midlertidig fil"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "Nøgle-id: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "Denne nøgle kan ikke bruges: udløbet/sat ud af kraft/tilbagekaldt."
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "Id er udløbet/ugyldig/ophævet."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "Ægthed af id er ubestemt."
+
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "Id er ikke bevist ægte."
+
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "Id er kun bevist marginalt ægte."
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s Vil du virkelig anvende nøglen?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Anfør venligst nøgle-id: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "Starter pgp ..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "PGP-nøgle %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Leder efter nøgler, der matcher \"%s\"..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "Kommandoen TOP understøttes ikke af server."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "Kan ikke skrive brevhoved til midlertidig fil!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "Kommandoen UIDL er ikke understøttet af server."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "%s er en ugyldig POP-sti"
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "Henter liste over breve..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "Kan ikke skrive brev til midlertidig fil!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "Kigger efter nye breve..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "Ingen POP-server er defineret."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "Ingen nye breve på POP-serveren."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "Slet breve på server?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Indlæser nye breve (%d bytes)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "Fejl ved skrivning til brevbakke!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d af %d breve læst]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "Serveren afbrød forbindelsen!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Godkender (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Godkender (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "APOP-godkendelse slog fejl."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "Kommandoen USER er ikke understøttet af server."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "Kunne ikke efterlade breve på server."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "Fejl under forbindelse til server: %s"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "Lukker forbindelsen til POP-server ..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Efterkontrollerer brevfortegnelser..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Mistede forbindelsen. Opret ny forbindelse til POP-server?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Tilbageholdte breve"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "Ingen tilbageholdte breve."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "Ugyldig PGP-header"
+
+#: postpone.c:479
+#, fuzzy
+msgid "Illegal S/MIME header"
+msgstr "Ugyldig PGP-header"
+
+#: postpone.c:554
+#, fuzzy
+msgid "Decryption failed."
+msgstr "Login slog fejl."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Ny forespørgsel"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Opret alias"
+
+#: query.c:48
+msgid "Search"
+msgstr "Søg"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Venter på svar ..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Ingen forespørgsels-kommando defineret."
+
+#: query.c:286
+msgid "Query"
+msgstr "Forespørgsel"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Forespørgsel: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Forespørgsel: '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Overfør til program"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Udskriv"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Gemmer..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Bilag gemt."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "ADVARSEL! Fil %s findes, overskriv?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Brevdel filtreret."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Filtrér gennem: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Overfør til kommando (pipe): "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "Kan ikke udskrive %s-brevdele."
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Udskriv udvalgte brevdele"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Udskriv brevdel?"
+
+#: recvattach.c:938
+#, fuzzy
+msgid "Can't decrypt encrypted message!"
+msgstr "Kan ikke finde nogen udvalgte breve."
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Brevdele"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "Der er ingen underdele at vise!"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "Kan ikke slette bilag fra POP-server."
+
+#: recvattach.c:1056
+#, fuzzy
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "Sletning af brevdele fra PGP-breve er ikke understøttet."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Sletning af brevdele fra udelte breve er ikke understøttet."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Du kan kun gensende message/rfc822-brevdele."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing message!"
+msgstr "Fejl ved afsendelse af brev."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing messages!"
+msgstr "Fejl ved afsendelse af brev."
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Kan ikke åbne midlertidig fil %s"
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "Videresend som bilag?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr "Kan ikke afkode alle udvalgte brevdele. MIME-videresend de øvrige?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Videresend MIME-indkapslet?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "Kan ikke oprette %s."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Kan ikke finde nogen udvalgte breve."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "Ingen postlister fundet!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr "Kan ikke afkode alle udvalgte brevdele. MIME-indkapsl de øvrige?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Tilføj"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Indsæt"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Slet"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "O.k."
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "Kan ikke hente mixmasters type2.liste!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Vælg en genposterkæde"
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "Fejl: %s kan ikke være sidste led i kæden."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Kæden må højst have %d led."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "Genposterkæden er allerede tom."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "Du har allerede valgt kædens første led."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "Du har allerede valgt kædens sidste led."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Breve sendt med Mixmaster må ikke have Cc- eller Bcc-felter."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr "Sæt hostname-variablen til en passende værdi ved brug af mixmaster!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Fejl ved afsendelse af brev, afslutningskode fra barneproces: %d.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Fejl ved afsendelse af brev."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "Ugyldig angivelse for type %s i \"%s\" linje %d"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Ingen mailcap-sti er defineret."
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "Ingen mailcap-angivelse for type %s."
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: for få parametre."
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: for mange parametre."
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Intet emne, afbryd?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Intet emne, afbryder."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Svar til %s%s?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "Opfølg til %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "Ingen udvalgte breve er synlige!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Citér brevet i svar?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Inkluderer citeret brev ..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "Kunne ikke citere alle ønskede breve!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "Videresend som bilag?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Forbereder brev til videresendelse ..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Genindlæs tilbageholdt brev?"
+
+#: send.c:1336
+#, fuzzy
+msgid "Edit forwarded message?"
+msgstr "Forbereder brev til videresendelse ..."
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Annullér uændret brev?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Annullerede uændret brev."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "Brev ikke sendt."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Brev tilbageholdt."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Ingen modtagere er anført!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Ingen modtagere blev anført."
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Intet emne, undlad at sende?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Intet emne er angivet."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Sender brev ..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Kunne ikke sende brevet."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Brev sendt."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Sender i baggrunden."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "Fandt ingen \"boundary\"-parameter! [rapportér denne fejl]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s eksisterer ikke mere!"
+
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "%s er ikke en almindelig fil."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "Kunne ikke åbne %s."
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Fejl %d under afsendelse af brev (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Uddata fra leveringsprocessen"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr ""
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s... Afslutter.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "Signal %s ... Afslutter.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Modtog signal %d... Afslutter.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr ""
+
+#: smime.c:303
+msgid "Verified  "
+msgstr ""
+
+#: smime.c:306
+msgid "Unverified"
+msgstr ""
+
+#: smime.c:309
+#, fuzzy
+msgid "Expired   "
+msgstr "Afslut "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr ""
+
+#: smime.c:315
+#, fuzzy
+msgid "Invalid   "
+msgstr "Ugyldig måned: %s"
+
+#: smime.c:318
+#, fuzzy
+msgid "Unknown   "
+msgstr "Ukendt"
+
+#: smime.c:347
+#, fuzzy
+msgid "Enter keyID: "
+msgstr "Anfør nøgle-id for %s: "
+
+#: smime.c:370
+#, fuzzy, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "PGP-nøgler som matcher \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr ""
+
+#: smime.c:523 smime.c:592
+#, fuzzy, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "Anvend nøgle-id = \"%s\" for %s?"
+
+#: smime.c:526 smime.c:595
+#, fuzzy, c-format
+msgid "Use ID %s for %s ?"
+msgstr "Anvend nøgle-id = \"%s\" for %s?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr ""
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+#, fuzzy
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "[-- Fejl: kan ikke skabe en PGP-delproces! --]\n"
+
+#: smime.c:1197
+#, fuzzy
+msgid "no certfile"
+msgstr "Kan ikke oprette filter."
+
+#: smime.c:1200
+#, fuzzy
+msgid "no mbox"
+msgstr "(ingen brevbakke)"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr ""
+
+#: smime.c:1381
+#, fuzzy
+msgid "Warning: Intermediate certificate not found."
+msgstr "Advarsel: Kunne ikke gemme certifikat"
+
+#: smime.c:1426
+#, fuzzy
+msgid "Can't open OpenSSL subprocess!"
+msgstr "Kan ikke åbne PGP-delproces!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr ""
+
+#: smime.c:1629 smime.c:1751
+#, fuzzy
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- Slut på PGP-uddata --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+#, fuzzy
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Fejl: kan ikke skabe en PGP-delproces! --]\n"
+
+#: smime.c:1755
+#, fuzzy
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr ""
+"[-- Følgende data er PGP/MIME-krypteret --]\n"
+"\n"
+
+#: smime.c:1758
+#, fuzzy
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr "[-- Følgende data er underskrevet --]\n"
+
+#: smime.c:1822
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr "[-- Slut på PGP/MIME-krypteret data --]\n"
+
+#: smime.c:1824
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr "[-- Slut på underskrevne data --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Sorterer brevbakke ..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "Kunne ikke finde sorteringsfunktion! [rapportér denne fejl]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(ingen brevbakke)"
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "Forrige brev i tråden er ikke synligt i afgrænset visning"
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "Forrige brev i tråden er ikke tilgængeligt."
+
+#, fuzzy
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "Starter pgp ..."
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "Gensend brev til %s ...?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "Gensend breve til %s ...?"
+
+#, fuzzy
+#~ msgid "ewsabf"
+#~ msgstr "kusbi"
+
+#, fuzzy
+#~ msgid "Certificate *NOT* added."
+#~ msgstr "Certifikat gemt"
diff --git a/po/de.gmo b/po/de.gmo
new file mode 100644 (file)
index 0000000..73efab5
Binary files /dev/null and b/po/de.gmo differ
diff --git a/po/de.po b/po/de.po
new file mode 100644 (file)
index 0000000..5cd3c80
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,4220 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: 1.5.5.1\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2003-11-15 14:12+0100\n"
+"Last-Translator: Roland Rosenfeld <roland@spinnaker.de>\n"
+"Language-Team: German <mutt-po@mutt.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "Username bei %s: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "Paßwort für %s@%s: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Verlassen"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Lösch."
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Behalten"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Auswählen"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Hilfe"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "Keine Einträge im Adreßbuch!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Adreßbuch"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Kurzname für Adreßbuch: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr ""
+"Sie haben bereits einen Adreßbucheintrag mit diesem Kurznamen definiert."
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr "Warnung: Dieser Alias-Name könnte Probleme bereiten. Korrigieren?"
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Adresse: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr "Fehler: '%s' ist eine fehlerhafte IDN."
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Name: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] Eintragen?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Speichern in Datei: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Adresse eingetragen."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Namensschema kann nicht erfüllt werden, fortfahren?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "\"compose\"-Eintrag in der Mailcap-Datei erfordert %%s."
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "Fehler beim Ausführen von \"%s\"!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Kann Datei nicht öffnen, um Nachrichtenkopf zu untersuchen."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Kann Datei nicht öffnen, um Nachrichtenkopf zu entfernen."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr ""
+"Kein \"compose\"-Eintrag für %s in der Mailcap-Datei, erzeuge leere Datei."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "\"edit\"-Eintrag in Mailcap erfordert %%s."
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "Kein \"edit\"-Eintrag für %s in Mailcap."
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "Es gibt keinen passenden Mailcap-Eintrag. Anzeige als Text."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "Undefinierter MIME-Typ. Kann Anhang nicht anzeigen."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Kann Filter nicht erzeugen."
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Kann Filter nicht erzeugen"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "Schreibfehler!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Ich weiß nicht, wie man dies druckt!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Verzeichnis"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Maske"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s ist kein Verzeichnis."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Mailbox-Dateien [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Abonniert [%s], Dateimaske: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Verzeichnis [%s], Dateimaske: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Verzeichnisse können nicht angehängt werden!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Es gibt keine zur Maske passenden Dateien"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Es können nur IMAP Mailboxen erzeugt werden"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Es können nur IMAP Mailboxen gelöscht werden"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Mailbox \"%s\" wirklich löschen?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "Mailbox gelöscht."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "Mailbox nicht gelöscht."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Verzeichnis wechseln nach: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Fehler beim Einlesen des Verzeichnisses."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Dateimaske: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr ""
+"Sortiere umgekehrt nach (D)atum, (a)lphabetisch, (G)röße, oder (n)icht? "
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Sortiere nach (D)atum, (a)lphabetisch, (G)röße oder (n)icht?"
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "dagn"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Neuer Dateiname: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Verzeichnisse können nicht angezeigt werden."
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Fehler bei der Anzeige einer Datei"
+
+#: buffy.c:442
+msgid "New mail in "
+msgstr "Neue Nachrichten in "
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: color wird nicht vom Terminal unterstützt."
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: Farbe unbekannt."
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: Objekt unbekannt."
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: Kommando ist nur für Index-Objekt gültig."
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: Zu wenige Parameter."
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Fehlende Parameter."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: Zu wenige Parameter."
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: Zu wenige Parameter."
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: Attribut unbekannt."
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "Zu wenige Parameter."
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "Zu viele Parameter."
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "Standard-Farben werden nicht unterstützt."
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "PGP-Signatur überprüfen?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Konnte keine Temporärdatei erzeugen!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Kann Filter zum Anzeigen nicht erzeugen."
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "Konnte Nachricht nicht kopieren."
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr "S/MIME Unterschrift erfolgreich überprüft."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr "S/MIME Zertifikat-Inhaber stimmt nicht mit Absender überein."
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr "S/MIME Unterschrift konnte NICHT überprüft werden."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "PGP Unterschrift erfolgreich überprüft."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "PGP Unterschrift konnte NICHT überprüft werden."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Kommando: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Nachricht weiterleiten an: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Markierte Nachrichten weiterleiten an: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "Unverständliche Adresse!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr "Ungültige IDN: '%s'"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Nachricht an %s weiterleiten"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Nachrichten an %s weiterleiten"
+
+#: commands.c:294 recvcmd.c:192
+msgid "Message not bounced."
+msgstr "Nachricht nicht weitergeleitet."
+
+#: commands.c:294 recvcmd.c:192
+msgid "Messages not bounced."
+msgstr "Nachrichten nicht weitergeleitet."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Nachricht weitergeleitet."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Nachrichten weitergeleitet."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "Kann Filterprozeß nicht erzeugen"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "In Kommando einspeisen: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "Kein Druck-Kommando definiert."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "Nachricht drucken?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Ausgewählte Nachrichten drucken?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "Nachricht gedruckt"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Nachrichten gedruckt"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "Nachricht konnte nicht gedruckt werden"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "Nachrichten konnten nicht gedruckt werden"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Umgekehrt (D)at/(A)bs/Ei(n)g/(B)etr/(E)mpf/(F)aden/(u)nsort/(G)röße/Be(w)"
+"ert?: "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Sortieren (D)at/(A)bs/Ei(n)g/(B)etr/(E)mpf/(F)aden/(u)nsort/(G)röße/Be(w)"
+"ert?: "
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "danbefugw"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Shell-Kommando: "
+
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "Speichere%s dekodiert in Mailbox"
+
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "Kopiere%s dekodiert in Mailbox"
+
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "Speichere%s entschlüsselt in Mailbox"
+
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "Kopiere%s entschlüsselt in Mailbox"
+
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "Speichere%s in Mailbox"
+
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "Kopiere%s in Mailbox"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " ausgewählte"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Kopiere nach %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "Konvertiere beim Senden nach %s?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Content-Type in %s abgeändert."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "Zeichensatz in %s abgeändert; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "nicht konvertiert"
+
+#: commands.c:914
+msgid "converting"
+msgstr "konvertiert"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Es sind keine Anhänge vorhanden."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Absenden"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Verwerfen"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Datei anhängen"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Beschr."
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Signieren, Verschlüsseln"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Verschlüsseln"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Signieren"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Klartext"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " signiere als: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<Voreinstellung>"
+
+#: compose.c:149
+msgid "Encrypt with: "
+msgstr "Verschlüsseln mit: "
+
+#: compose.c:165
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "PGP (v)erschl., (s)ign., sign. (a)ls, (b)eides, (k)ein PGP? "
+
+#: compose.c:166
+msgid "esabf"
+msgstr "vsabk"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Signiere als: "
+
+#: compose.c:227
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"S/MIME (v)erschl., (s)ign., verschl. (m)it, sign. (a)ls, (b)eides, (k)eins? "
+
+#: compose.c:228
+msgid "eswabf"
+msgstr "vsmabk"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, oder (k)ein S/MIME? "
+
+#: compose.c:238
+msgid "12345f"
+msgstr "12345k"
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] existiert nicht mehr!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] wurde verändert. Kodierung neu bestimmen?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Anhänge"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr "Warnung: '%s' ist eine ungültige IDN."
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Der einzige Nachrichtenteil kann nicht gelöscht werden."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr "Ungültige IDN in \"%s\": '%s'"
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "Hänge ausgewählte Dateien an..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "Kann %s nicht anhängen!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Mailbox, aus der angehängt werden soll"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "Keine Nachrichten in diesem Ordner."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Bitte markieren Sie die Nachrichten, die Sie anhängen wollen!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Kann nicht anhängen!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "Ändern der Kodierung betrifft nur Textanhänge."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "Der aktuelle Anhang wird nicht konvertiert werden."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "Der aktuelle Anhang wird konvertiert werden."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Ungültige Kodierung."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Soll eine Kopie dieser Nachricht gespeichert werden?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Umbenennen in: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "Kann Verzeichniseintrag für Datei %s nicht lesen: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Neue Datei: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Content-Type ist von der Form Basis/Untertyp."
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Unbekannter Content-Type %s."
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Kann Datei %s nicht anlegen."
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "Anhang kann nicht erzeugt werden."
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Nachricht zurückstellen?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Schreibe Nachricht in Mailbox"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Schreibe Nachricht nach %s ..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "Nachricht geschrieben."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr "S/MIME bereits ausgewählt. Löschen und weiter?"
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr "PGP bereits ausgewählt. Löschen und weiter?"
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr " (aktuelle Zeit: %c)"
+
+#: crypt.c:71
+#, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- %s Ausgabe folgt%s --]\n"
+
+#: crypt.c:86
+msgid "Passphrase(s) forgotten."
+msgstr "Mantra(s) vergessen."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "PGP-Mantra eingeben:"
+
+#: crypt.c:147
+msgid "Enter SMIME passphrase:"
+msgstr "S/MIME-Mantra eingeben:"
+
+#: crypt.c:192
+msgid "Create a traditional (inline) PGP message?"
+msgstr "Erzeuge eine veraltete (inline) PGP Nachricht?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "Rufe PGP auf..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr ""
+"S/MIME Nachrichten ohne Hinweis auf den Inhalt werden nicht unterstützt."
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr "Versuche PGP Keys zu extrahieren...\n"
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr "Versuche S/MIME Zertifikate zu extrahieren...\n"
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- Fehler: Inkonsistente multipart/signed Struktur! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- Fehler: Unbekanntes multipart/signed Protokoll %s! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Warnung: %s/%s Unterschriften können nicht geprüft werden. --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- Die folgenden Daten sind signiert --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Warnung: Kann keine Unterschriften finden. --]\n"
+"\n"
+
+#: crypt.c:924
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Ende der signierten Daten --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "ja"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "nein"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Mutt verlassen?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "unbekannter Fehler"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Bitte drücken Sie eine Taste..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " (für eine Liste '?' eingeben): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Keine Mailbox ist geöffnet."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Es sind keine Nachrichten vorhanden."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "Mailbox kann nur gelesen, nicht geschrieben werden."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "Funktion steht beim Anhängen von Nachrichten nicht zur Verfügung."
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "Keine sichtbaren Nachrichten."
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "Kann Mailbox im Nur-Lese-Modus nicht schreibbar machen!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "Änderungen an dieser Mailbox werden beim Verlassen geschrieben."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Änderungen an dieser Mailbox werden nicht geschrieben."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Ende"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Speichern"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Senden"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Antw."
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Antw.alle"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "Mailbox wurde verändert. Markierungen können veraltet sein."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Neue Nachrichten in dieser Mailbox."
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "Mailbox wurde von außen verändert."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Keine markierten Nachrichten."
+
+#: curs_main.c:653 menu.c:896
+msgid "Nothing to do."
+msgstr "Nichts zu erledigen."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Springe zu Nachricht: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "Argument muß eine Nachrichtennummer sein."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Diese Nachricht ist nicht sichtbar."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Ungültige Nachrichtennummer."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Lösche Nachrichten nach Muster: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "Zur Zeit ist kein Muster aktiv."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Begrenze: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Begrenze auf Nachrichten nach Muster: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Mutt beenden?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Markiere Nachrichten nach Muster: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Entferne Löschmarkierung nach Muster: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Entferne Markierung nach Muster: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Öffne Mailbox im nur-Lesen-Modus"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Öffne Mailbox"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s ist keine Mailbox."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Mutt verlassen, ohne Änderungen zu speichern?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Sie sind bereits auf der letzten Nachricht."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Alle Nachrichten gelöscht."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Sie sind bereits auf der ersten Nachricht."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "Suche von vorne begonnen."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "Suche von hinten begonnen."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Keine neuen Nachrichten"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Keine ungelesenen Nachrichten"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " in dieser begrenzten Ansicht."
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "Kann 'Wichtig'-Markierung auf dem POP-Server nicht ändern."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Keine weiteren Diskussionsfäden."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Sie haben bereits den ersten Diskussionsfaden ausgewählt."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "Darstellung von Diskussionsfäden ist nicht eingeschaltet."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "Diskussionsfaden enthält ungelesene Nachrichten."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "Kann Nachricht auf dem POP-Server nicht ändern."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tFüge Zeile hinzu, die mit einer Tilde beginnt.\n"
+"~b Adressen\tFüge Adressen zum Bcc-Feld hinzu.\n"
+"~c Adressen\tFüge Adressen zum Cc-Feld hinzu.\n"
+"~f Nachricht\tNachricht einfügen.\n"
+"~F Nachrichten\tWie ~f, mit Nachrichtenkopf.\n"
+"~h\t\tEditiere Nachrichtenkopf.\n"
+"~m Nachrichten\tNachrichten zitieren.\n"
+"~M Nachrichten\tWie ~t, mit Nachrichtenkopf.\n"
+"~p\t\tNachricht ausdrucken.\n"
+"~q\t\tDatei speichern und Editor verlassen.\n"
+"~r Datei\tDatei in Editor einlesen.\n"
+"~t Adressen\tFüge Adressen zum To-Feld hinzu.\n"
+"~u\t\tEditiere die letzte Zeile erneut.\n"
+"~v\t\tEditiere Nachricht mit Editor $visual.\n"
+"~w Datei\tSchreibe Nachricht in Datei.\n"
+"~x\t\tVerwerfe Änderungen und verlasse Editor.\n"
+"~?\t\tDiese Nachricht.\n"
+".\t\tin einer Zeile alleine beendet die Eingabe.\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: Ungültige Nachrichtennummer.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr ""
+"(Beenden Sie die Nachricht mit einen Punkt ('.') allein in einer Zeile)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "Keine Mailbox.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Nachricht enthält:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(weiter)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "Dateiname fehlt.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Keine Zeilen in der Nachricht.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr "Ungültige IDN in %s: '%s'\n"
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: Unbekanntes Editor-Kommando (~? für Hilfestellung)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "Konnte temporäre Mailbox nicht erzeugen: %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "Konnte nicht in temporäre Mailbox schreiben: %s"
+
+#: editmsg.c:101
+#, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "Konnte temporäre Mailbox nicht sutzen: %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "Nachricht ist leer!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "Nachricht nicht verändert!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "Kann Nachrichten-Datei nicht öffnen: %s"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Kann an Mailbox nicht anhängen: %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Fehler. Speichere temporäre Datei als %s ab."
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Setze Indikator"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Entferne Indikator"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[-- Fehler: Konnte keinen der multipart/alternative-Teile anzeigen! --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Anhang #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Typ: %s/%s, Kodierung: %s, Größe: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Automatische Anzeige mittels %s --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Automatische Anzeige mittels: %s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- Kann %s nicht ausführen. --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Fehlerausgabe von %s --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- Fehler: message/external-body hat keinen access-type Parameter --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Dieser %s/%s-Anhang "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(Größe %s Byte) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "wurde gelöscht --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- am %s --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- Name: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Dieser %s/%s-Anhang ist nicht in der Nachricht enthalten, --]\n"
+
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+"[-- und die zugehörige externe Quelle --]\n"
+"[-- existiert nicht mehr. --]\n"
+
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr "[-- und die angegebene Zugangsmethode %s wird nicht unterstützt --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Fehler: multipart/signed ohne \"protocol\"-Parameter."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Fehler: multipart/encrypted ohne \"protocol\"-Parameter!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Konnte temporäre Datei nicht öffnen!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s wird nicht unterstützt "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(benutzen Sie '%s', um diesen Teil anzuzeigen)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "(Tastaturbindung für 'view-attachments' benötigt!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: Kann Datei nicht anhängen."
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "ERROR: Bitte melden sie diesen Fehler"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<unbekannt>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Allgemeine Tastenbelegungen:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Funktionen ohne Bindung an Taste:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Hilfe für %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: Innerhalb eines hook kann kein unhook * aufgerufen werden."
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: Unbekannter hook-Typ: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: Kann kein %s innerhalb von %s löschen."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "Keine Authentifizierung verfügbar"
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Authentifiziere (anonymous)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "Anonyme Authentifizierung fehlgeschlagen."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Authentifiziere (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "CRAM-MD5 Authentifizierung fehlgeschlagen."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Authentifiziere (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "GSSAPI Authentifizierung fehlgeschlagen."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "LOGIN ist auf diesem Server abgeschaltet."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Anmeldung..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "Anmeldung gescheitert..."
+
+#: imap/auth_sasl.c:112
+#, c-format
+msgid "Authenticating (%s)..."
+msgstr "Authentifiziere (%s)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "SASL Authentifizierung fehlgeschlagen."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "%s ist ein ungültiger IMAP Pfad"
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "Hole Namensräume..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Hole Liste der Ordner..."
+
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "Ordner existiert nicht"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Erzeuge Mailbox: "
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "Mailbox muß einen Namen haben."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Mailbox erzeugt."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "Mailbox geschlossen"
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Kritischer Fehler.  Nachrichtenzähler weicht ab!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "Beende Verbindung zu %s..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Dieser IMAP-Server ist veraltet und wird nicht von Mutt unterstützt."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr "Unerwartete Antwort vom Server empfangen: %s"
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "Sichere Verbindung mittels TLS?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "Konnte keine TLS-Verbindung realisieren"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "Wähle %s aus..."
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "Fehler beim Öffnen der Mailbox"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Kann auf diesem IMAP-Server zu Mailboxen nichts hinzufügen."
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "%s erstellen?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Beende Verbindung zum IMAP-Server..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "Markiere %d Nachrichten zum Löschen..."
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "Löschen fehlgeschlagen"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Speichere Nachrichten-Status-Indikatoren... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Lösche Nachrichten auf dem Server..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbox: EXPUNGE fehlgeschlagen"
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "CLOSE fehlgeschlagen"
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "Unzulässiger Mailbox Name"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "Abonniere %s..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "Beende Abonnement von %s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr ""
+"Kann von dieser Version des IMAP-Servers keine Nachrichtenköpfe erhalten."
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "Konnte Temporärdatei %s nicht erzeugen"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Hole Nachrichten-Köpfe... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Hole Nachricht..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr ""
+"Der Nachrichtenindex ist fehlerhaft. Versuche die Mailbox neu zu öffnen."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Lade Nachrichten auf den Server..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "Kopiere %d Nachrichten nach %s..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "Kopiere Nachricht %d nach %s..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "Weiter?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "alias: Keine Adresse"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr "Warnung: Ungültige IDN '%s' in Alias '%s'.\n"
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "my_hdr: Ungültiges Kopf-Feld"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: Unbekannte Sortiermethode"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): Fehler in regulärem Ausdruck: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: Unbekannte Variable."
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "Präfix ist bei \"reset\" nicht zulässig."
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "Wertzuweisung ist bei \"reset\" nicht zulässig."
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s ist gesetzt."
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s ist nicht gesetzt."
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: Ungültiger Mailbox-Typ"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: Ungültiger Wert"
+
+#: init.c:1312
+#, c-format
+msgid "%s: Unknown type."
+msgstr "%s: Unbekannter Typ."
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: Unbekannter Typ"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Kann Verzeichniseintrag für Datei %s nicht lesen: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s ist keine normale Datei."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Fehler in %s, Zeile %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: Fehler in %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: Lesevorgang abgebrochen, zu viele Fehler in %s"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: Fehler bei %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: Zu viele Argumente"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: Unbekanntes Kommando"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Fehler in Kommandozeile: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "Kann Home-Verzeichnis nicht bestimmen."
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "Kann Nutzernamen nicht bestimmen."
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Makro-Schleife!"
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Taste ist nicht belegt."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Taste ist nicht belegt. Drücken Sie '%s' für Hilfe."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: Zu viele Argumente"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "Menü \"%s\" existiert nicht"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "Leere Tastenfolge"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: Zu viele Argumente"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: Funktion unbekannt"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: Leere Tastenfolge"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: Zu viele Parameter"
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: Keine Parameter"
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s: Funktion unbekannt"
+
+#: keymap.c:912
+msgid "Enter keys (^G to abort): "
+msgstr "Schlüssel eingeben (^G zum Abbrechen): "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr "Char = %s, Oktal = %o, Dezimal = %d"
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "Leere Funktion"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr "Ende der beedingten Ausführung (noop)"
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "Erzwinge Ansicht des Anhangs mittels mailcap"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "Zeige Anhang als Text an"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "Schalte Anzeige von Teilen ein/aus"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "Gehe zum Ende der Seite"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "Versende Nachricht erneut an anderen Empfänger"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "Wähle eine neue Datei in diesem Verzeichnis aus"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "Zeige Datei an"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "Zeige den Namen der derzeit ausgewählten Datei"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "Abonniere aktuelle Mailbox (nur für IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "Kündige Abonnement der aktuellen Mailbox (nur für IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "Umschalter: Ansicht aller/der abonnierten Mailboxen (nur für IMAP)"
+
+#: keymap_alldefs.h:18
+msgid "list mailboxes with new mail"
+msgstr "Liste Mailboxen mit neuen Nachrichten"
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "Wechsle Verzeichnisse"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "Überprüfe Mailboxen auf neue Nachrichten"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "Hänge Datei(en) an diese Nachricht an"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "Hänge Nachricht(en) an diese Nachricht an"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "Editiere die BCC-Liste"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "Editiere die CC-Liste"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "Editiere Beschreibung des Anhangs"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "Editiere Kodierung des Anhangs"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "Wähle Datei, in die die Nachricht kopiert werden soll"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "Editiere die anzuhängende Datei"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "Editiere das From-Feld"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "Editiere Nachricht (einschließlich Kopf)"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "Editiere Nachricht"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "Editiere Anhang mittels mailcap"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "Editiere Reply-To-Feld"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "Editiere Betreff dieser Nachricht (Subject)"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "Editiere Empfängerliste (To)"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "Erzeuge eine neue Mailbox (nur für IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "Editiere Typ des Anhangs"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "Erzeuge temporäre Kopie dieses Anhangs"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "Rechtschreibprüfung via ispell"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "Erzeuge neues Attachment via mailcap"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "Schalte Kodierung dieses Anhangs um"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "Stelle Nachricht zum späteren Versand zurück"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "Benenne angehängte Datei um"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "Verschicke Nachricht"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "Schalte Verwendbarkeit um: Inline/Anhang"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "Wähle, ob Datei nach Versand gelöscht wird"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "Aktualisiere Kodierungsinformation eines Anhangs"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "Schreibe Nachricht in Mailbox"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "Kopiere Nachricht in Datei/Mailbox"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "Erzeuge Adreßbucheintrag für Absender"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "Bewege Eintrag zum unteren Ende des Bildschirms"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "Bewege Eintrag zur Bildschirmmitte"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "Bewege Eintrag zum Bildschirmanfang"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "Erzeuge decodierte Kopie (text/plain)"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "Erzeuge decodierte Kopie (text/plain) und lösche"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "Lösche aktuellen Eintrag"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "Lösche die aktuelle Mailbox (nur für IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "Lösche alle Nachrichten im Diskussionsfadenteil"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "Lösche alle Nachrichten im Diskussionsfaden"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "Zeige komplette Absenderadresse"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "Zeige Nachricht an und schalte zwischen allen/wichtigen Headern um"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "Zeige Nachricht an"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "Editiere \"rohe\" Nachricht"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "Lösche Zeichen vor dem Cursor"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "Bewege Cursor ein Zeichen nach links"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "Springe zum Anfang des Wortes"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "Springe zum Zeilenanfang"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "Rotiere unter den Eingangs-Mailboxen"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "Vervollständige Dateinamen oder Kurznamen"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "Vervollständige Adresse mittels Abfrage (query)"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "Lösche das Zeichen unter dem Cursor"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "Springe zum Zeilenende"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "Bewege den Cursor ein Zeichen nach rechts"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "Springe zum Ende des Wortes"
+
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr "Gehe in der Liste früherer Eingaben nach unten"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "Gehe in der Liste früherer Eingaben nach oben"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "Lösche bis Ende der Zeile"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "Lösche vom Cursor bis zum Ende des Wortes"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "Lösche Zeile"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "Lösche Wort vor Cursor"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "Übernehme nächste Taste unverändert"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "Ersetze Zeichen unter dem Cursor mit vorhergehendem"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "kapitalisiere das Wort (Anfang groß, Rest klein)"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "konvertiere Wort in Kleinbuchstaben"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "konvertiere Wort in Großbuchstaben"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "Gib ein muttrc-Kommando ein"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "Gib Dateimaske ein"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "Menü verlassen"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "Filtere Anhang durch Shell-Kommando"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "Gehe zum ersten Eintrag"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "Schalte 'Wichtig'-Markierung der Nachricht um"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "Leite Nachricht mit Kommentar weiter"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "Wähle den aktuellen Eintrag aus"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "Antworte an alle Empfänger"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "Gehe 1/2 Seite nach unten"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "Gehe 1/2 Seite nach oben"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "Dieser Bildschirm"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "Springe zu einer Index-Nummer"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "Springe zum letzten Eintrag"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "Antworte an Mailing-Listen"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "Führe Makro aus"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "Erzeuge neue Nachricht"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "Öffne eine andere Mailbox"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "Öffne eine andere Mailbox im Nur-Lesen-Modus"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "Entferne einen Status-Indikator"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "Lösche Nachrichten nach Muster"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "Hole Nachrichten vom IMAP-Server"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "Hole Nachrichten vom POP-Server"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "Springe zu erster Nachricht"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "Springe zu letzter Nachricht"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "Wähle anzuzeigende Nachrichten mit Muster aus"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "Springe zur nächsten neuen Nachricht"
+
+#: keymap_alldefs.h:113
+msgid "jump to the next new or unread message"
+msgstr "Springe zur nächsten neuen oder ungelesenen Nachricht"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "Springe zum nächsten Diskussionsfadenteil"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "Springe zum nächsten Diskussionsfaden"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "Springe zur nächsten ungelöschten Nachricht"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "Springe zur nächsten ungelesenen Nachricht"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "Springe zur Bezugsnachricht im Diskussionsfaden"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "Springe zum vorigen Diskussionsfaden"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "Springe zum vorigen Diskussionsfadenteil"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "Springe zur vorigen ungelöschten Nachricht"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "Springe zur vorigen neuen Nachricht"
+
+#: keymap_alldefs.h:123
+msgid "jump to the previous new or unread message"
+msgstr "Springe zur vorigen neuen oder ungelesenen Nachricht"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "Springe zur vorigen ungelesenen Nachricht"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "Markiere den aktuellen Diskussionsfaden als gelesen"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "Markiere den aktuellen Diskussionsfadenteil als gelesen"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "Setze Statusindikator einer Nachricht"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "Speichere Änderungen in Mailbox"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "Markiere Nachrichten nach Muster"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "entferne Löschmarkierung nach Muster"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "Entferne Markierung nach Muster"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "Gehe zur Seitenmitte"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "Gehe zum nächsten Eintrag"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "Gehe eine Zeile nach unten"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "Gehe zur nächsten Seite"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "Springe zum Ende der Nachricht"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "Schalte Anzeige von zitiertem Text ein/aus"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "Übergehe zitierten Text"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "Springe zum Nachrichtenanfang"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "Bearbeite (pipe) Nachricht/Anhang mit Shell-Kommando"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "Gehe zum vorigen Eintrag"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "Gehe eine Zeile nach oben"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "Gehe zur vorigen Seite"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "Drucke aktuellen Eintrag"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "Externe Adressenabfrage"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "Hänge neue Abfrageergebnisse an"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "Speichere Änderungen in Mailbox und beende das Programm"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "Bearbeite eine zurückgestellte Nachricht"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "Erzeuge Bildschirmanzeige neu"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{intern}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "Beantworte Nachricht"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "Verwende aktuelle Nachricht als Vorlage für neue Nachricht"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "Speichere Nachricht/Anhang in Datei"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "Suche nach regulärem Ausdruck"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "Suche rückwärts nach regulärem Ausdruck"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "Suche nächsten Treffer"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "Suche nächsten Treffer in umgekehrter Richtung"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "Schalte Suchtreffer-Hervorhebung ein/aus"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "Rufe Kommando in Shell auf"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "Sortiere Nachrichten"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "Sortiere Nachrichten in umgekehrter Reihenfolge"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "Markiere aktuellen Eintrag"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "Wende nächste Funktion auf markierte Nachrichten an"
+
+#: keymap_alldefs.h:164
+msgid "apply next function ONLY to tagged messages"
+msgstr "Wende nächste Funktion NUR auf markierte Nachrichten an"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "Markiere aktuellen Diskussionsfadenteil"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "Markiere aktuellen Diskussionsfaden"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "Setze/entferne den \"neu\"-Indikator einer Nachricht"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "Schalte Sichern von Änderungen ein/aus"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "Schalte zwischen Mailboxen und allen Dateien um"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "Springe zum Anfang der Seite"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "Entferne Löschmarkierung vom aktuellen Eintrag"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "Entferne Löschmarkierung von allen Nachrichten im Diskussionsfaden"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "Entferne Löschmarkierung von allen Nachrichten im Diskussionsfadenteil"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "Zeige Versionsnummer an"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "Zeige Anhang, wenn nötig via Mailcap"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "Zeige MIME-Anhänge"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr "Zeige Tastatur-Code einer Taste"
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "Zeige derzeit aktives Begrenzungsmuster"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "Kollabiere/expandiere aktuellen Diskussionsfaden"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "Kollabiere/expandiere alle Diskussionsfäden"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "Hänge öffentlichen PGP-Schlüssel an"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "Zeige PGP-Optionen"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "Verschicke öffentlichen PGP-Schlüssel"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "Prüfe öffentlichen PGP-Schlüssel"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "Zeige Nutzer-ID zu Schlüssel an"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "Suche nach klassischem PGP"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "Akzeptiere die erstellte Kette"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "Hänge einen Remailer an die Kette an"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "Füge einen Remailer in die Kette ein"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "Lösche einen Remailer aus der Kette"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "Wähle das vorhergehende Element der Kette aus"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "Wähle das nächste Element der Kette aus"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "Verschicke die Nachricht über eine Mixmaster Remailer Kette"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "Erzeuge dechiffrierte Kopie und lösche"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "Erzeuge dechiffrierte Kopie"
+
+#: keymap_alldefs.h:196
+msgid "wipe passphrase(s) from memory"
+msgstr "Entferne Mantra(s) aus Speicher"
+
+#: keymap_alldefs.h:197
+msgid "extract supported public keys"
+msgstr "Extrahiere unterstützte öffentliche Schlüssel"
+
+#: keymap_alldefs.h:198
+msgid "show S/MIME options"
+msgstr "Zeige S/MIME Optionen"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr "Integer Überlauf -- Kann keinen Speicher belegen!"
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Kein Speicher verfügbar!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"Um die Entwickler zu kontaktieren, schicken Sie bitte\n"
+"eine Nachricht (in englisch) an <mutt-dev@mutt.org>.\n"
+"Um einen Bug zu melden, verwenden Sie bitte das Programm flea(1).\n"
+
+#: main.c:50
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins und andere.\n"
+"Mutt übernimmt KEINERLEI GEWÄHRLEISTUNG. Starten Sie `mutt -vv', um\n"
+"weitere Details darüber zu erfahren. Mutt ist freie Software. \n"
+"Sie können es unter bestimmten Bedingungen weitergeben; starten Sie\n"
+"`mutt -vv' für weitere Details.\n"
+
+#: main.c:56
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2001 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"Viele andere, die hier nicht erwähnt sind, haben viel Code, viele\n"
+"Bugfixes und viele Ideen beigesteuert.\n"
+"\n"
+"    Dieses Programm ist freie Software. Sie dürfen es weitergeben\n"
+"    und/oder es unter den Bedingungen der GNU General Public License,\n"
+"    wie von der Free Software Foundation veröffentlicht, verändern;\n"
+"    entweder unter Version 2 dieser Lizenz oder, wenn Sie es wünschen,\n"
+"    jeder späteren Version.\n"
+"\n"
+"    Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß\n"
+"    es Ihnen von Nutzen sein wird, aber OHNE JEGLICHE GEWÄHRLEISTUNG,\n"
+"    sogar ohne die Garantie der MARKTREIFE oder EIGNUNG FÜR EINEN\n"
+"    BESTIMMTEN ZWECK. Lesen Sie die GNU General Public License, um\n"
+"    mehr Details zu erfahren.\n"
+"\n"
+"    Sie sollten eine Kopie der GNU General Public License zusammen mit\n"
+"    diesem Programm erhalten haben; falls nicht, schreiben sie an Free\n"
+"    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  "
+"02111, USA.\n"
+
+#: main.c:94
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\tExpandiere den angegebenen Alias\n"
+"  -a <file>\tHängt Datei an die Message an\n"
+"  -b <address>\tEmpfänger einer unsichtbaren Kopie (Bcc:)\n"
+"  -c <address>\tEmpfänger einer Kopie (Cc:)\n"
+"  -e <command>\tMutt-Kommando, nach der Initialisierung ausführen\n"
+"  -f <file>\tMailbox, die eingelesen werden soll\n"
+"  -F <file>\tAlternatives muttrc File.\n"
+"  -H <file>\tFile, aus dem der Header der Mail gelesen werdenn soll\n"
+"  -i <file>\tFile, das in den Body der Message eingebunden werden soll\n"
+"  -m <type>\tDefault-Mailbox Typ\n"
+"  -n\t\tDas Muttrc des Systems ignorieren\n"
+"  -p\t\tEine zurückgestellte Nachricht zurückholen\n"
+"  -Q <variable>\tFrage die Variable aus der Konfiguration ab\n"
+"  -R\t\tMailbox nur zum Lesen öffnen\n"
+"  -s <subj>\tSubject der Mail (Leerzeichen in Anführungsstrichen)\n"
+"  -v\t\tVersion und Einstellungen beim Compilieren anzeigen\n"
+"  -x\t\tSimuliert mailx beim Verschicken von Mails\n"
+"  -y\t\tStarte Mutt mit einer Mailbox aus der `mailboxes' Liste\n"
+"  -z\t\tNur starten, wenn neue Nachrichten in der Mailbox liegen\n"
+"  -Z\t\tÖffne erste Mailbox mit neuen Nachrichten oder beenden\n"
+"  -h\t\tDiese Hilfe"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Einstellungen bei der Compilierung:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Kann Terminal nicht initialisieren."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Debugging auf Ebene %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "DEBUG war beim Kompilieren nicht definiert.  Ignoriert.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s existiert nicht. Neu anlegen?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "Kann %s nicht anlegen: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Keine Empfänger angegeben.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: Kann Datei nicht anhängen.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Keine Mailbox mit neuen Nachrichten."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Keine Eingangs-Mailboxen definiert."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "Mailbox ist leer."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Lese %s... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "Mailbox fehlerhaft!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "Mailbox wurde zerstört!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Fataler Fehler, konnte Mailbox nicht erneut öffnen!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Kann Mailbox nicht für exklusiven Zugriff sperren!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+"sync: Mailbox verändert, aber Nachrichten unverändert! (bitte Bug melden)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Schreibe Nachrichten... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "Speichere Änderungen..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Konnte nicht schreiben! Speichere Teil-Mailbox in %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "Konnte Mailbox nicht erneut öffnen!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Öffne Mailbox erneut..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Springe zu: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Ungültige Indexnummer."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Keine Einträge"
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Sie können nicht weiter nach unten gehen."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Sie können nicht weiter nach oben gehen."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Sie sind auf der letzten Seite."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Sie sind auf der ersten Seite."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "Der erste Eintrag wird angezeigt."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "Der letzte Eintrag wird angezeigt."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Sie sind auf dem letzten Eintrag."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Sie sind auf dem ersten Eintrag"
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Suche nach: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Suche rückwärts nach: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Kein Suchmuster."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Nicht gefunden."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "Keine markierten Einträge."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "In diesem Menü kann nicht gesucht werden."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "Springen in Dialogen ist nicht möglich."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Markieren wird nicht unterstützt."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "Lese %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr "maildir_commit_message(): kann Zeitstempel der Datei nicht setzen"
+
+#: muttlib.c:835
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "Datei ist ein Verzeichnis, darin abspeichern? [(j)a, (n)ein, (a)lle]"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr "jna"
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "Datei ist ein Verzeichnis, darin abspeichern?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Datei in diesem Verzeichnis: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "Datei existiert, (u)eberschreiben, (a)nhängen, a(b)brechen?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "uab"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "Kann Nachricht nicht in POP Mailbox schreiben."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s ist keine Mailbox!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Nachricht an %s anhängen?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "Verbindung zu %s beendet"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL ist nicht verfügbar."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "\"Preconnect\" Kommando fehlgeschlagen."
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Fehler bei Verbindung mit %s (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr "Ungültige IDN \"%s\"."
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "Schlage %s nach..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Kann Host \"%s\" nicht finden"
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Verbinde zu %s..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "Kann keine Verbindung zu %s aufbauen (%s)."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "Nicht genügend Entropie auf diesem System gefunden"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "Sammle Entropie für Zufallsgenerator: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s hat unsichere Zugriffsrechte!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "SSL deaktiviert, weil nicht genügend Entropie zur Verfügung steht"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "Ein-/Ausgabe Fehler"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "Nicht spezifizierter Protokollfehler"
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "SSL fehlgeschlagen: %s"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "Kann kein Zertifikat vom Server erhalten"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "SSL Verbindung unter Verwendung von %s (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "unbekannt"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[kann nicht berechnet werden]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[ungültiges Datum]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "Zertifikat des Servers ist noch nicht gültig"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "Zertifikat des Servers ist abgelaufen"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Dieses Zertifikat gehört zu:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Dieses Zertifikat wurde ausgegeben von:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Dieses Zertifikat ist gültig"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "    von %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "     an %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Fingerabdruck: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "SSL Zertifikat Überprüfung"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(z)urückweisen, (e)inmal akzeptieren, (i)mmer akzeptieren"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "zei"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(z)urückweisen, (e)inmal akzeptieren"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "ze"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Ende  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Warnung: Konnte Zertifikat nicht speichern"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "Zertifikat gespeichert"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Lock-Datei für %s entfernen?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "Kann %s nicht (dot-)locken.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "Konnte fcntl-Lock nicht innerhalb akzeptabler Zeit erhalten."
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Warte auf fcntl-Lock... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "Konnte flock-Lock nicht innerhalb akzeptabler Zeit erhalten."
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Warte auf flock-Versuch... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "Kann %s nicht locken.\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "Lese %s..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "Schreibe %s..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "Kann Mailbox %s nicht synchronisieren!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Verschiebe gelesene Nachrichten nach %s?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Entferne %d als gelöscht markierte Nachrichten?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Entferne %d als gelöscht markierte Nachrichten?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Verschiebe gelesene Nachrichten nach %s..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "Mailbox unverändert."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d behalten, %d verschoben, %d gelöscht."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d behalten, %d gelöscht."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr " Drücken Sie '%s', um Schreib-Modus ein-/auszuschalten"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "Benutzen Sie 'toggle-write', um Schreib-Modus zu reaktivieren"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "Mailbox ist als unschreibbar markiert. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "Checkpoint in der Mailbox gesetzt."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Kann Nachricht nicht schreiben"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr "Integer Überlauf -- kann keinen Speicher belegen."
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "Funktion ist in diesem Menü nicht verfügbar."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "S.zurück"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "S.vor"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Anhänge betr."
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Nächste Nachr."
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "Das Ende der Nachricht wird angezeigt."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "Der Beginn der Nachricht wird angezeigt."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Suche rückwärts: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Suche: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "Hilfe wird bereits angezeigt."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "Kein weiterer zitierter Text."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "Kein weiterer eigener Text nach zitiertem Text."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "Mehrteilige Nachricht hat keinen \"boundary\"-Parameter!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Fehler in Ausdruck: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Ungültiger Tag: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Ungültiger Monat: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "Ungültiges relatives Datum: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "Fehler in Ausdruck."
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "Fehler in Muster bei: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: Ungültiges Kommando"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: Wird in diesem Modus nicht unterstützt."
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "Fehlender Parameter"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "Unpassende Klammern: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "Leeres Muster"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "Fehler: Unbekannter Muster-Operator %d (Bitte Bug melden)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Compiliere Suchmuster..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Führe Kommando aus..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "Keine Nachrichten haben Kriterium erfüllt."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "Suche hat Ende erreicht, ohne Treffer zu erzielen."
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "Suche hat Anfang erreicht, ohne Treffer zu erzielen."
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Suche unterbrochen."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "PGP-Mantra vergessen."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Fehler: Kann keinen PGP-Prozeß erzeugen! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- Ende der PGP-Ausgabe --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- END PGP MESSAGE --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- END PGP PUBLIC KEY BLOCK --]\n"
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- END PGP SIGNED MESSAGE --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Fehler: Konnte Anfang der PGP-Nachricht nicht finden! --]\n"
+"\n"
+
+#: pgp.c:662
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Interner Fehler. Bitte <roessler@does-not-exist.org> informieren."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Fehler: Konnte PGP-Subprozeß nicht erzeugen! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Fehler: Fehlerhafte PGP/MIME-Nachricht! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Fehler: Konnte Temporärdatei nicht anlegen! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- Die folgenden Daten sind PGP/MIME-verschlüsselt --]\n"
+"\n"
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- Ende der PGP/MIME-verschlüsselten Daten --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "Kann PGP-Subprozeß nicht erzeugen!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "Benutze KeyID = \"%s\" für %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "KeyID für %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "Kann PGP nicht aufrufen"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "Hole PGP Schlüssel..."
+
+#: pgpkey.c:486
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr ""
+"Alles passenden Schlüssel sind veraltet, zurückgezogen oder deaktiviert."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Auswahl  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Schlüssel prüfen  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "PGP-Schlüssel, die zu <%s> passen."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "PGP-Schlüssel, die zu \"%s\" passen."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "Kann /dev/null nicht öffnen"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Kann temporäre Datei nicht erzeugen"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "Schlüssel ID: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr ""
+"Dieser Schlüssel ist nicht verwendbar: veraltet/deaktiviert/zurückgezogen."
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "Diese ID ist veraltet/deaktiviert/zurückgezogen."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "Die Gültigkeit dieser ID ist undefiniert."
+
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "Diese ID ist ungültig."
+
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "Diese Gültigkeit dieser ID ist begrenzt."
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s Wollen Sie den Schlüssel wirklich benutzen?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Bitte Schlüsselidentifikation eingeben: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "Rufe PGP auf..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "PGP Schlüssel %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Suche nach Schlüsseln, die auf \"%s\" passen..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "Das Kommando TOP wird vom Server nicht unterstützt."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "Kann Header nicht in temporäre Datei schreiben!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "Kommando UIDL wird vom Server nicht unterstützt."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "%s ist ein ungültiger POP Pfad"
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "Hole Liste der Nachrichten..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "Kann Nachricht nicht in temporäre Datei schreiben!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "Prüfe auf neue Nachrichten..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "Es wurde kein POP-Server definiert."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "Keine neuen Nachrichten auf dem POP-Server."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "Lösche Nachrichten auf dem Server?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Lese neue Nachrichten (%d Bytes)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "Fehler beim Versuch, die Mailbox zu schreiben!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d von %d Nachrichten gelesen]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "Server hat Verbindung beendet!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Authentifiziere (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Authentifiziere (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "APOP Authentifizierung fehlgeschlagen."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "Kommando USER wird vom Server nicht unterstützt."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "Kann Nachrichten nicht auf dem Server belassen."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "Fehler beim Verbinden mit dem Server: %s"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "Beende Verbindung zum POP-Server..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Überprüfe Nachrichten-Indexe..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Verbindung unterbrochen. Verbindung zum POP-Server wiederherstellen?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Zurückgestelle Nachrichten"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "Keine zurückgestellten Nachrichten."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "Unzulässiger PGP-Header"
+
+#: postpone.c:479
+msgid "Illegal S/MIME header"
+msgstr "Unzulässiger S/MIME Header"
+
+#: postpone.c:554
+msgid "Decryption failed."
+msgstr "Entschlüsselung gescheitert."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Neue Abfrage"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Kurznamen erzeugen"
+
+#: query.c:48
+msgid "Search"
+msgstr "Suchen"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Warte auf Antwort..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Kein Abfragekommando definiert."
+
+#: query.c:286
+msgid "Query"
+msgstr "Abfrage"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Abfrage: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Abfrage: '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Filtern"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Drucke"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Speichere..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Anhang gespeichert."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "WARNUNG!  Datei %s existiert, überschreiben?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Anhang gefiltert."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Filtere durch: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Übergebe an (pipe): "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "Kann %s Anhänge nicht drucken!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Drucke markierte Anhänge?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Drucke Anhang?"
+
+#: recvattach.c:938
+msgid "Can't decrypt encrypted message!"
+msgstr "Kann verschlüsselte Nachricht nicht entschlüsseln!"
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Anhänge"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "Es sind keine Teile zur Anzeige vorhanden!"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "Kann Dateianhang nicht vom POP-Server löschen."
+
+#: recvattach.c:1056
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "Kann Anhänge aus verschlüsselten Nachrichten nicht löschen."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Kann nur aus mehrteiligen Anhängen löschen."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Sie können nur message/rfc822-Anhänge erneut versenden."
+
+#: recvcmd.c:213
+msgid "Error bouncing message!"
+msgstr "Fehler beim Weiterleiten der Nachricht!"
+
+#: recvcmd.c:213
+msgid "Error bouncing messages!"
+msgstr "Fehler beim Weiterleiten der Nachrichten!"
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Kann temporäre Datei %s nicht öffnen."
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "Als Anhänge weiterleiten?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+"Nicht alle markierten Anhänge dekodierbar. MIME für den Rest verwenden? "
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Zum Weiterleiten in MIME-Anhang einpacken?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "Kann %s nicht anlegen."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Es sind keine Nachrichten markiert."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "Keine Mailing-Listen gefunden!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+"Nicht alle markierten Anhänge dekodierbar. MIME für den Rest verwenden?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Anhängen"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Einfügen"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Löschen"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "OK"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "Kann die \"type2.list\" für Mixmaster nicht holen!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Wähle eine Remailer Kette aus."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr ""
+"Fehler: %s kann nicht als letzter Remailer einer Kette verwendet werden."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Eine Mixmaster-Kette kann maximal %d Elemente enthalten."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "Die Remailer-Kette ist bereits leer."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "Sie haben bereits das erste Element der Kette ausgewählt."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "Sie haben bereits das letzte Element der Kette ausgewählt."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Mixmaster unterstützt weder Cc: noch Bcc:"
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr ""
+"Setzen sie die Variable \"hostname\" richtig, wenn Sie Mixmaster verwenden!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Fehler %d beim Versand der Nachricht.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Fehler beim Versand der Nachricht."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "Ungültiger Eintrag für Typ %s in \"%s\", Zeile %d."
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Kein Mailcap-Pfad definiert."
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "Kann keinen Mailcap-Eintrag für %s finden."
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: Zu wenige Parameter."
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: Zu viele Parameter."
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Kein Betreff, abbrechen?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Kein Betreff, breche ab."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Antworte an %s%s?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "Antworte an %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "Keine markierten Nachrichten sichtbar!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Nachricht in Antwort zitieren?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Binde zitierte Nachricht ein..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "Konnte nicht alle gewünschten Nachrichten zitieren!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "Als Anhang weiterleiten?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Bereite Nachricht zum Weiterleiten vor..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Zurückgestellte Nachricht weiterbearbeiten?"
+
+#: send.c:1336
+msgid "Edit forwarded message?"
+msgstr "Weitergeleitete Nachricht editieren?"
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Unveränderte Nachricht verwerfen?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Unveränderte Nachricht verworfen."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "Nachricht nicht verschickt."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Nachricht zurückgestellt."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Es wurden keine Empfänger angegeben!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Es wurden keine Empfänger angegeben!"
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Kein Betreff, Versand abbrechen?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Kein Betreff."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Verschicke Nachricht..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Konnte Nachricht nicht verschicken."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Nachricht verschickt."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Verschicke im Hintergrund."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "Kein boundary-Parameter gefunden! (bitte Bug melden)"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s existiert nicht mehr!"
+
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "%s ist keine normale Datei."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "Konnte %s nicht öffnen."
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Fehler %d beim Versand der Nachricht (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Ausgabe des Auslieferungs-Prozesses"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr "Ungültige IDN %s bei der Vorbereitung von Resent-From."
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s... Abbruch.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "Signal %s... Abbruch.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Signal %d... Abbruch.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr "Vertr.würd"
+
+#: smime.c:303
+msgid "Verified  "
+msgstr "Geprüft   "
+
+#: smime.c:306
+msgid "Unverified"
+msgstr "Ungeprüft "
+
+#: smime.c:309
+msgid "Expired   "
+msgstr "Veraltet  "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr "Zurückgez."
+
+#: smime.c:315
+msgid "Invalid   "
+msgstr "Ungültig  "
+
+#: smime.c:318
+msgid "Unknown   "
+msgstr "Unbekannt "
+
+#: smime.c:347
+msgid "Enter keyID: "
+msgstr "KeyID eingeben: "
+
+#: smime.c:370
+#, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "S/MIME Zertifikate, die zu \"%s\" passen."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr "ID %s ist ungeprüft. Möchten Sie sie für %s verwenden?"
+
+#: smime.c:523 smime.c:592
+#, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "Benutze (nicht vertrauenswürdige!) ID %s für %s?"
+
+#: smime.c:526 smime.c:595
+#, c-format
+msgid "Use ID %s for %s ?"
+msgstr "Benutze ID = %s für %s?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr "Warnung: Sie vertrauen ID %s noch nicht. (Taste drücken für weiter)"
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr "Kein (gültiges) Zertifikat für %s gefunden."
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "Fehler: Kann keinen OpenSSL Prozeß erzeugen!"
+
+#: smime.c:1197
+msgid "no certfile"
+msgstr "keine Zertifikat-Datei"
+
+#: smime.c:1200
+msgid "no mbox"
+msgstr "keine Mailbox"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr "Keine Ausgabe von OpenSSL.."
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr "Warnung: Zwischenzertifikat nicht gefunden."
+
+#: smime.c:1426
+msgid "Can't open OpenSSL subprocess!"
+msgstr "Kann OpenSSL-Unterprozeß nicht erzeugen!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr "Keine Ausgabe von OpenSSL..."
+
+#: smime.c:1629 smime.c:1751
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- Ende der OpenSSL-Ausgabe --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Fehler: Kann keinen OpenSSL-Unterprozeß erzeugen! --]\n"
+
+#: smime.c:1755
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr "[-- Die folgenden Daten sind S/MIME-verschlüsselt --]\n"
+
+#: smime.c:1758
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr "[-- Die folgenden Daten sind S/MIME signiert --]\n"
+
+#: smime.c:1822
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- Ende der S/MIME-verschlüsselten Daten --]\n"
+
+#: smime.c:1824
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- Ende der S/MIME signierten Daten --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Sortiere Mailbox..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "Sortierfunktion nicht gefunden! (bitte Bug melden)"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(keine Mailbox)"
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "Bezugsnachricht ist in dieser begrenzten Sicht nicht sichtbar."
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "Bezugsnachricht ist nicht verfügbar."
+
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "Rufe OpenSSL auf..."
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "Nachricht an %s... erneut versenden?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "Nachrichten an %s... erneut versenden?"
+
+#~ msgid "ewsabf"
+#~ msgstr "emsabk"
+
+#~ msgid "This ID's validity level is undefined."
+#~ msgstr "Die Gültigkeit dieser ID ist undefiniert."
+
+#~ msgid "[-- expired. --]\n"
+#~ msgstr "[-- existiert nicht mehr. --]\n"
+
+#~ msgid "Decode-save"
+#~ msgstr "Decodiert speichern"
+
+#~ msgid "Decode-copy"
+#~ msgstr "Decodiert kopieren"
+
+#~ msgid "Decrypt-save"
+#~ msgstr "Entschlüsselt speichern"
+
+#~ msgid "Decrypt-copy"
+#~ msgstr "Entschlüsselt kopieren"
+
+#~ msgid "Copy"
+#~ msgstr "Kopieren"
+
+#~ msgid ""
+#~ "[-- This %s/%s attachment is not included, --]\n"
+#~ "[-- and the indicated external source has --]\n"
+#~ "[-- expired. --]\n"
+#~ msgstr ""
+#~ "[-- Dieser %s/%s-Anhang ist nicht in der Nachricht --]\n"
+#~ "[-- enthalten und die angegebene externe Quelle existiert nicht mehr. "
+#~ "--]\n"
+
+#~ msgid "%s [%s]\n"
+#~ msgstr "%s [%s]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "[-- End of PGP output --]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "[-- Ende der PGP-Ausgabe --]\n"
+#~ "\n"
+
+#~ msgid "Can't stat %s."
+#~ msgstr "Kann Verzeichniseintrag für Datei %s nicht lesen."
+
+#~ msgid "%s: no such command"
+#~ msgstr "%s: Kommando unbekannt"
+
+#~ msgid "Authentication method is unknown."
+#~ msgstr "Authentifizierungsmethode unbekannt."
diff --git a/po/el.gmo b/po/el.gmo
new file mode 100644 (file)
index 0000000..bcfcefa
Binary files /dev/null and b/po/el.gmo differ
diff --git a/po/el.po b/po/el.po
new file mode 100644 (file)
index 0000000..cae338e
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,5039 @@
+# Hellenic support for mutt by
+#
+# Copyright (C) 1999-2002 Fanis Dokianakis <madf@hellug.gr>
+# Corrections from
+# Nikos Mayrogiannopoulos <nmav@hellug.gr>
+# Simos Xenitellis <S.Xenitellis@rhbnc.ac.uk>
+# kromJx <kromJx@crosswinds.net>
+# ta_panta_rei <ta_panta_rei@flashmail.com>
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Mutt-1.5.2i\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2002-12-09 00:01GMT+2\n"
+"Last-Translator: Dokianakis Fanis <madf@hellug.gr>\n"
+"Language-Team: Greek <EL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-7\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "¼íïìá ÷ñÞóôç óôï %s: "
+
+#
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "Óõíèçìáôéêü ãéá ôï %s@%s: "
+
+#
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "¸îïäïò"
+
+#
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "ÄéáãñáöÞ"
+
+#
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "ÅðáíáöïñÜ"
+
+#
+#: addrbook.c:36
+msgid "Select"
+msgstr "ÅðéëÝîôå"
+
+#
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "ÂïÞèåéá"
+
+#
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "Äåí Ý÷åôå êáíÝíá øåõäþíõìï!"
+
+#
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Øåõäþíõìá"
+
+#
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Øåõäþíõìï ùò: "
+
+#
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "¸÷åôå Þäç Ýíá øåõäþíõìï ìå áõôü ôï üíïìá!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: áõôü ôï øåõäüíõìï ßóùò íá ìçí äïõëåýåé. Äéüñèùóç;"
+
+#
+#: alias.c:279
+msgid "Address: "
+msgstr "Äéåýèõíóç: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr ""
+
+#
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Ðñïóùðéêü ¼íïìá: "
+
+#
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] ÄÝ÷åóôå;"
+
+#
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "ÁðïèÞêåõóç óôï áñ÷åßï: "
+
+#
+#: alias.c:342
+msgid "Alias added."
+msgstr "Ôï øåõäþíõìï ðñïóôÝèçêå."
+
+#
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Áäõíáìßá ôáéñéÜóìáôïò ôïõ nametemplate, óõíÝ÷åéá;"
+
+#
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "Ç êáôá÷þñçóç óôïé÷åßùí ôïõ mailcap ÷ñåéÜæåôáé ôï %%s"
+
+#
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "ÓöÜëìá êáôÜ ôçí åêôÝëåóç ôïõ \"%s\"!"
+
+#
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Áðïôõ÷ßá êáôÜ ôï Üíïéãìá áñ÷åßïõ ãéá ôçí áíÜëõóç ôùí åðéêåöáëßäùí."
+
+#
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Áðïôõ÷ßá êáôÜ ôï Üíïéãìá áñ÷åßïõ ãéá ôçí áðïãýìíùóç ôùí åðéêåöáëßäùí"
+
+#
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "Êáììßá êáôá÷þñçóç mailcap ãéá ôï %s, äçìéïõñãßá êåíïý áñ÷åßïõ."
+
+#
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "Ç êáôá÷þñçóç mailcap Edit ÷ñåéÜæåôáé ôï %%s"
+
+#
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "Äåí õðÜñ÷åé êáôá÷þñçóç mailcap ãéá åðåîåñãáóßá êåéìÝíïõ ãéá ôï %s"
+
+#
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "Äåí âñÝèçêå üìïéá êáôá÷þñçóç Mailcap. Áðåéêüíéóç ùò êåßìåíï."
+
+#
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "Ï ôýðïò MIME äåí Ý÷åé ïñéóôåß. Áäõíáìßá åìöÜíéóçò ðñïóáñôÞóåùò."
+
+#
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Áäõíáìßá äçìéïõñãßáò ößëôñïõ"
+
+#
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Áäõíáìßá äçìéïõñãßáò ößëôñïõ"
+
+#
+#: attach.c:824
+msgid "Write fault!"
+msgstr "ÓöÜëìá åããñáöÞò!"
+
+#
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Äåí ãíùñßæù ðþò íá ôï ôõðþóù áõôü!"
+
+#
+#: browser.c:41
+msgid "Chdir"
+msgstr "ÁëëáãÞ êáôáëüãïõ"
+
+#
+#: browser.c:42
+msgid "Mask"
+msgstr "ÌÜóêá"
+
+#
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "Ôï %s äåí åßíáé êáôÜëïãïò."
+
+#
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Ãñáììáôïêéâþôéá [%d]"
+
+#
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "ÅããåãñáììÝíá [%s], ÌÜóêá áñ÷åßïõ: %s"
+
+#
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "ÊáôÜëïãïò [%s], ÌÜóêá áñ÷åßïõ: %s"
+
+#
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Áäõíáìßá ðñïóÜñôçóçò åíüò êáôÜëïãïõ"
+
+#
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "ÊáíÝíá áñ÷åßï äåí ôáéñéÜæåé ìå ôç ìÜóêá áñ÷åßïõ"
+
+#
+# recvattach.c:1065
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Ç äçìéïõñãßá õðïóôçñßæåôáé ìüíï ãéá ôá ãñáììáôïêéâþôéá IMAP"
+
+#
+# recvattach.c:1065
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Ç äéáãñáöÞ õðïóôçñßæåôáé ìüíï ãéá ôá ãñáììáôïêéâþôéá IMAP"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "ÄéáãñáöÞ ôïõ ãñáììáôïêéâùôßïõ \"%s\";"
+
+#
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "Ôï ãñáììáôïêéâþôéï äéáãñÜöçêå."
+
+#
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "Ôï ãñáììáôïêéâþôéï äåí äéáãñÜöçêå."
+
+#
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "ÁëëáãÞ êáôáëüãïõ óå:"
+
+#
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "ÓöÜëìá êáôÜ ôç äéåñåýíçóç ôïõ êáôáëüãïõ."
+
+#
+#: browser.c:975
+msgid "File Mask: "
+msgstr "ÌÜóêá áñ÷åßïõ: "
+
+#
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr ""
+"ÁíÜóôñïöç ôáîéíüìçóç êáôÜ (d)çìåñïìçíßá, (a)áëöáâçôéêÜ, (z)ìÝãåèïò Þ (n)"
+"Üêõñï;"
+
+#
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Ôáîéíüìçóç êáôÜ (d)çìåñïìçíßá, (a)áëöáâçôéêÜ, (z)ìÝãåèïò Þ (n)Üêõñï;"
+
+#
+#: browser.c:1049
+msgid "dazn"
+msgstr "dazn"
+
+#
+#: browser.c:1115
+msgid "New file name: "
+msgstr "ÍÝï üíïìá áñ÷åßïõ: "
+
+#
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Áäõíáìßá áíÜãíùóçò åíüò êáôÜëïãïõ"
+
+#
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "ÓöÜëìá êáôÜ ôçí åìöÜíéóç áñ÷åßïõ"
+
+#
+#: buffy.c:442
+msgid "New mail in "
+msgstr "ÍÝá áëëçëïãñáößá óôï "
+
+#
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: ôï ôåñìáôéêü äåí õðïóôçñßæåé ÷ñþìá"
+
+#
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: äåí õðÜñ÷åé ôÝôïéï ÷ñþìá"
+
+#
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: äåí õðÜñ÷åé ôÝôïéï áíôéêåßìåíï"
+
+#
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: ç åíôïëÞ éó÷ýåé ìüíï ãéá ôï ÷áñáêôçñéóôéêü áíôéêåßìåíï"
+
+#
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: ðïëý ëßãá ïñßóìáôá"
+
+#
+#: color.c:563
+msgid "Missing arguments."
+msgstr "ÅëëéðÞ ïñßóìáôá."
+
+#
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "÷ñþìá: ðïëý ëßãá ïñßóìáôá"
+
+#
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "ìïíü÷ñùìá: ëßãá ïñßóìáôá"
+
+#
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: äåí õðÜñ÷åé ôÝôïéá éäéüôçôá"
+
+#
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "ðïëý ëßãá ïñßóìáôá"
+
+#
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "ðÜñá ðïëëÜ ïñßóìáôá"
+
+#
+#: color.c:721
+msgid "default colors not supported"
+msgstr "äåí õðïóôçñßæïíôáé ôá åî'ïñéóìïý ÷ñþìáôá"
+
+#
+# commands.c:92
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "Åðéâåâáßùóç ôçò PGP øçöéáêÞò õðïãñáöÞò;"
+
+#
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Áäõíáìßá äçìéïõñãßáò ðñïóùñéíïý áñ÷åßïõ!"
+
+#
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Áäõíáìßá äçìéïõñãßáò ößëôñïõ áðåéêüíéóçò"
+
+#
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "Áäõíáìßá áíôéãñáöÞò ôïõ ìçíýìáôïò."
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr "Ç õðïãñáöÞ S/MIME åðáëçèåýôçêå åðéôõ÷þò."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr "Ï éäéïêôÞôçò ôïõ ðéóôïðïéçôéêïý S/MIME äåí ôáéñéÜæåé ìå ôïí áðïóôïëÝá."
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr "Ç õðïãñáöÞ S/MIME ÄÅÍ åðáëçèåýôçêå."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "Ç õðïãñáöÞ PGP åðáëçèåýôçêå åðéôõ÷þò."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "Ç õðïãñáöÞ PGP ÄÅÍ åðáëçèåýôçêå."
+
+#
+#: commands.c:223
+msgid "Command: "
+msgstr "ÅíôïëÞ: "
+
+#
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Äéáâßâáóç ìçíýìáôïò óôïí: "
+
+#
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Äéáâßâáóç óçìåéùìÝíùí ìçíõìÜôùí óôïí: "
+
+#
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "ÓöÜëìá êáôÜ ôçí áíÜëõóç ôçò äéåýèõíóçò!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr ""
+
+#
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Äéáâßâáóç ìçíýìáôïò óôïí %s"
+
+#
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Äéáâßâáóç ìçíõìÜôùí óôïí %s"
+
+#
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Message not bounced."
+msgstr "Ôï ìÞíõìá äéáâéâÜóôçêå."
+
+#
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Messages not bounced."
+msgstr "Ôá ìçíýìáôá äéáâéâÜóôçêáí."
+
+#
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Ôï ìÞíõìá äéáâéâÜóôçêå."
+
+#
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Ôá ìçíýìáôá äéáâéâÜóôçêáí."
+
+#
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "Áäõíáìßá äçìéïõñãßáò äéåñãáóßáò ößëôñïõ"
+
+#
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Äéï÷Ýôåõóç óôçí åíôïëÞ: "
+
+#
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "Äåí Ý÷åé ïñéóôåß åíôïëÞ åêôõðþóåùò."
+
+#
+#: commands.c:483
+msgid "Print message?"
+msgstr "Åêôýðùóç ìçíýìáôïò;"
+
+#
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Åêôýðùóç ôùí óçìåéùìÝíùí ìçíõìÜôùí;"
+
+#
+#: commands.c:492
+msgid "Message printed"
+msgstr "Ôï ìÞíõìá åêôõðþèçêå"
+
+#
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Ôá ìçíýìáôá åêôõðþèçêáí"
+
+#
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "Áäõíáìßá åêôýðùóçò ìçíýìáôïò"
+
+#
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "Áäõíáìßá åêôýðùóçò ìçíõìÜôùí"
+
+#
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+
+#
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+
+#
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dfrsotuzc"
+
+#
+#: commands.c:559
+msgid "Shell command: "
+msgstr "ÅíôïëÞ öëïéïý: "
+
+#
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "Áðïêùäéêïðïßçóç-áðïèÞêåõóç%s óôï ãñáììáôïêéâþôéï"
+
+#
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "Áðïêùäéêïðïßçóç-áíôéãñáöÞ%s óôï ãñáììáôïêéâþôéï"
+
+#
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "ÁðïêñõðôïãñÜöçóç-áðïèÞêåõóç%s óôï ãñáììáôïêéâþôéï"
+
+#
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "ÁðïêñõðôïãñÜöçóç-áíôéãñáöÞ%s óôï ãñáììáôïêéâþôéï"
+
+#
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "ÁðïèÞêåõóç%s óôï ãñáììáôïêéâþôéï"
+
+#
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "ÁíôéãñáöÞ%s óôï ãñáììáôïêéâþôéï"
+
+#
+#: commands.c:706
+msgid " tagged"
+msgstr " óçìåéùìÝíï"
+
+#
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "ÁíôéãñáöÞ óôï %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "ÌåôáôñïðÞ óå %s êáôÜ ôç ìåôáöïñÜ;"
+
+#
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Ôï Content-Type Üëëáîå óå %s."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "Ôï óåô ÷áñáêôÞñùí Üëëáîå óå %s; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "ü÷é ìåôáôñïðÞ"
+
+#: commands.c:914
+msgid "converting"
+msgstr "ìåôáôñïðÞ"
+
+#
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Äåí õðÜñ÷ïõí ðñïóáñôÞóåéò."
+
+#
+#: compose.c:84
+msgid "Send"
+msgstr "ÁðïóôïëÞ"
+
+#
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Áêýñùóç"
+
+#
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "ÐñïóáñôÞóôå áñ÷åßï"
+
+#
+#: compose.c:90
+msgid "Descrip"
+msgstr "ÐåñéãñáöÞ"
+
+#
+# compose.c:103
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "ÕðïãñáöÞ, êñõðôïãñÜöçóç"
+
+#
+# compose.c:105
+#: compose.c:129
+msgid "Encrypt"
+msgstr "ÊñõðôïãñÜöçóç"
+
+#
+# compose.c:107
+#: compose.c:131
+msgid "Sign"
+msgstr "ÕðïãñáöÞ"
+
+#
+#: compose.c:133
+msgid "Clear"
+msgstr "ÁðåíåñãïðïéçìÝíï"
+
+#
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " õðïãñáöÞ ùò: "
+
+#
+# compose.c:116
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<åî'ïñéóìïý>"
+
+#
+# compose.c:105
+#: compose.c:149
+msgid "Encrypt with: "
+msgstr "ÊñõðôïãñÜöçóç ìå: "
+
+#
+# compose.c:132
+#: compose.c:165
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, Þ (f)orget it? "
+
+#
+# compose.c:133
+#: compose.c:166
+msgid "esabf"
+msgstr "esabf"
+
+#
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "ÕðïãñáöÞ ùò: "
+
+#
+# compose.c:132
+#: compose.c:227
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, Þ (f)orget it? "
+
+#
+# compose.c:133
+#: compose.c:228
+#, fuzzy
+msgid "eswabf"
+msgstr "esabf"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, Þ (f)orget it? "
+
+#: compose.c:238
+msgid "12345f"
+msgstr "12345f"
+
+#
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "Ôï %s [#%d] äåí õðÜñ÷åé ðéá!"
+
+#
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "Ôï %s [#%d] ìåôáâëÞèçêå. ÅíçìÝñùóç ôçò êùäéêïðïßçóçò;"
+
+#
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- ÐñïóáñôÞóåéò"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr ""
+
+#
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Äåí ìðïñåßôå íá äéáãñÜøåôå ôç ìïíáäéêÞ ðñïóÜñôçóç."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr ""
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "ÐñïóÜñôçóç åðéëåãìÝíùí áñ÷åßùí..."
+
+#
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "Áäõíáìßá ðñïóÜñôçóçò ôïõ %s!"
+
+#
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "¶íïéãìá ãñáììáôïêéâùôßïõ ãéá ôçí ðñïóÜñôçóç ìçíýìáôïò áðü"
+
+#
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "Äåí õðÜñ÷ïõí ìçíýìáôá óå áõôü ôï öÜêåëï."
+
+#
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Óçìåéþóôå ôá ìçíýìáôá ðïõ èÝëåôå íá ðñïóáñôÞóåôå!"
+
+#
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Áäõíáìßá ðñïóÜñôçóçò!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "Ç åðáíáêùäéêïðïßçóç åðçñåÜæåé ìüíï ôçò ðñïóáñôÞóåéò êåéìÝíïõ."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "Ç ôñÝ÷ïõóá ðñïóÜñôçóç äåí èá ìåôáôñáðåß."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "Ç ôñÝ÷ïõóá ðñïóÜñôçóç èá ìåôáôñáðåß."
+
+#
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Ìç Ýãêõñç êùäéêïðïßçóç."
+
+#
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "ÁðïèÞêåõóç áíôéãñÜöïõ ôïõ ìçíýìáôïò;"
+
+#
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Ìåôïíïìáóßá óå: "
+
+#
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "Áäõíáìßá ëÞøçò ôçò êáôÜóôáóçò ôïõ %s: %s"
+
+#
+#: compose.c:1141
+msgid "New file: "
+msgstr "ÍÝï áñ÷åßï: "
+
+#
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Ôï Content-Type åßíáé ôçò ìïñöÞò base/sub"
+
+#
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "¶ãíùóôï Content-Type %s"
+
+#
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Áäõíáìßá äçìéïõñãßáò áñ÷åßïõ %s"
+
+#
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "Áðïôõ÷ßá êáôÜ ôçí äçìéïõñãßá ðñïóÜñôçóçò"
+
+#
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Íá áíáâëçèåß ç ôá÷õäñüìçóç áõôïý ôïõ ìçíýìáôïò;"
+
+#
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "ÅããñáöÞ ôïõò ìçíýìáôïò óôï ãñáììáôïêéâþôéï"
+
+#
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "ÅããñáöÞ ìçíýìáôïò óôï %s ..."
+
+#
+#: compose.c:1305
+msgid "Message written."
+msgstr "Ôï ìÞíõìá ãñÜöôçêå."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr "Ôï S/MIME åß÷å Þäç åðéëåãåß. Êáèáñéóìüò Þ óõíÝ÷åéá ; "
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr "Ôï PGP åß÷å Þäç åðéëåãåß. Êáèáñéóìüò Þ óõíÝ÷åéá ; "
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr "(ôñÝ÷ïõóá þñá: %c)"
+
+#
+# pgp.c:207
+#: crypt.c:71
+#, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- %s áêïëïõèåß Ýîïäïò%s --]\n"
+
+#
+# pgp.c:146
+#: crypt.c:86
+msgid "Passphrase(s) forgotten."
+msgstr "Ç öñÜóç(-åéò)-êëåéäß Ý÷åé îå÷áóôåß."
+
+#
+# pgp.c:130
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "ÅéóÜãåôå ôçí öñÜóç-êëåéäß PGP:"
+
+#
+# pgp.c:130
+#: crypt.c:147
+msgid "Enter SMIME passphrase:"
+msgstr "ÅéóÜãåôå ôçí öñÜóç-êëåéäß SMIME:"
+
+#
+#: crypt.c:192
+#, fuzzy
+msgid "Create a traditional (inline) PGP message?"
+msgstr "Äçìéïõñãßá åíüò åóùôåñéêïý ìçíýìáôïò PGP;"
+
+#
+# commands.c:87 commands.c:95 pgp.c:1373 pgpkey.c:220
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "ÊëÞóç ôïõ PGP..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr "Äåí õðïóôçñßæïíôå ìçíýìáôá S/MIME ÷ùñßò ðëçñïöïñßåò óôçí åðéêåöáëßäá."
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr "ÐñïóðÜèåéá åîáãùãÞò êëåéäéþí PGP...\n"
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr "ÐñïóðÜèåéá åîáãùãÞò ðéóôïðïéçôéêþí S/MIME...\n"
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- ÓöÜëìá: ÁóõíåðÞò ðïëõìåñÞò/õðïãåãñáììÝíç äïìÞ! --]\n"
+"\n"
+
+#
+# handler.c:1378
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- ÓöÜëìá: ¶ãíùóôï ðïëõìåñÝò/õðïãåãñáììÝíï ðñùôüêïëëï %s! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Ðñïåéäïðïßçóç: áäõíáìßá åðéâåâáßùóçò %s%s õðïãñáöþí --]\n"
+"\n"
+
+#
+# pgp.c:676
+#. Now display the signed body
+#: crypt.c:912
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- Ôá åðüìåíá äåäïìÝíá åßíáé õðïãåãñáììÝíá --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Ðñïåéäïðïßçóç: Áäõíáìßá åýñåóçò õðïãñáöþí. --]\n"
+"\n"
+
+#
+# pgp.c:682
+#: crypt.c:924
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- ÔÝëïò õðïãåãñáììÝíùí äåäïìÝíùí --]\n"
+
+#
+#: curs_lib.c:157
+msgid "yes"
+msgstr "y(íáé)"
+
+#
+#: curs_lib.c:158
+msgid "no"
+msgstr "n(ü÷é)"
+
+#
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "¸îïäïò áðü ôï Mutt;"
+
+#
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "Üãíùóôï óöÜëìá"
+
+#
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "ÐáôÞóôå Ýíá ðëÞêôñï ãéá íá óõíå÷ßóåôå..."
+
+#
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr "('?' ãéá ëßóôá): "
+
+#
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Äåí õðÜñ÷ïõí áíïé÷ôÜ ãñáììáôïêéâþôéá."
+
+#
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Äåí õðÜñ÷ïõí ìçíýìáôá."
+
+#
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "Ôï ãñáììáôïêéâþôéï åßíáé ìüíï ãéá áíÜãíùóç."
+
+#
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "Ç ëåéôïõñãßá áðáãïñåýåôáé óôçí êáôÜóôáóç ðñïóÜñôçóç-ìçíýìáôïò."
+
+#
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "Äåí õðÜñ÷ïõí ïñáôÜ ìçíýìáôá."
+
+#
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr ""
+"Áäõíáìßá áëëáãÞò óå êáôÜóôáóç åããñáöÞò óå ãñáììáôïêéâþôéï ìüíï ãéá áíÜãíùóç!"
+
+#
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "Ïé áëëáãÝò óôï öÜêåëï èá ãñáöïýí êáôÜ ôç Ýîïäï áðü ôï öÜêåëï."
+
+#
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Ïé áëëáãÝò óôï öÜêåëï äåí èá ãñáöïýí."
+
+#
+#: curs_main.c:397
+msgid "Quit"
+msgstr "¸îïäïò"
+
+#
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "ÁðïèÞê"
+
+#
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Ôá÷õäñ"
+
+#
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "ÁðÜíô"
+
+#
+#: curs_main.c:403
+msgid "Group"
+msgstr "ÏìÜäá"
+
+#
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr ""
+"Ôï ãñáììáôïêéâþôéï ôñïðïðïéÞèçêå åîùôåñéêÜ. Ïé óçìáßåò ìðïñåß íá åßíáé ëÜèïò"
+
+#
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "ÍÝá áëëçëïãñáößá óå áõôü ôï ãñáììáôïêéâþôéï."
+
+#
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "Ôï ãñáììáôïêéâþôéï ôñïðïðïéÞèçêå åîùôåñéêÜ."
+
+#
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Äåí õðÜñ÷ïõí óçìåéùìÝíá ìçíýìáôá."
+
+#
+#: curs_main.c:653 menu.c:896
+#, fuzzy
+msgid "Nothing to do."
+msgstr "Óýíäåóç óôï %s..."
+
+#
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "ÌåôÜâáóç óôï ìÞíõìá: "
+
+#
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "Ç ðáñÜìåôñïò ðñÝðåé íá åßíáé áñéèìüò ìçíýìáôïò."
+
+#
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Áõôü ôï ìÞíõìá äåí åßíáé ïñáôü."
+
+#
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Ìç Ýãêõñïò áñéèìüò ìçíýìáôïò."
+
+#
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "ÄéáãñáöÞ ðáñüìïéùí ìçíõìÜôùí: "
+
+#
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "ÊáíÝíá õðüäåéãìá ïñßùí óå ëåéôïõñãßá."
+
+#
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "¼ñéï: %s"
+
+#
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Ðåñéïñéóìüò óôá ðáñüìïéá ìçíýìáôá: "
+
+#
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "¸îïäïò áðü ôï Mutt;"
+
+#
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Óçìåéþóôå ìçíýìáôá ðïõ ôáéñéÜæïõí óå: "
+
+#
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "ÅðáíáöïñÜ ôá ìçíýìáôá ðïõ ôáéñéÜæïõí óå: "
+
+#
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Áöáßñåóç ôçò óçìåßùóçò óôá ìçíýìáôá ðïõ ôáéñéÜæïõí óå: "
+
+#
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Áíïßîôå ôï ãñáììáôïêéâþôéï óå êáôÜóôáóç ìüíï ãéá åããñáöÞ"
+
+#
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Áíïßîôå ôï ãñáììáôïêéâþôéï"
+
+#
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "Ôï %s äåí åßíáé ãñáììáôïêéâþôéï."
+
+#
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "¸îïäïò áðü ôï Mutt ÷ùñßò áðïèÞêåõóç;"
+
+#
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Åßóôå óôï ôåëåõôáßï ìÞíõìá."
+
+#
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Äåí õðÜñ÷ïõí áðïêáôáóôçìÝíá ìçíýìáôá."
+
+#
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Åßóôå óôï ðñþôï ìÞíõìá."
+
+#
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "ÁíáæÞôçóç óõíå÷ßóôçêå áðü ôçí êïñõöÞ."
+
+#
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "ÁíáæÞôçóç óõíå÷ßóôçêå óôç âÜóç."
+
+#
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Äåí õðÜñ÷ïõí íÝá ìçíýìáôá"
+
+#
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Äåí õðÜñ÷ïõí ìç áíáãíùóìÝíá ìçíýìáôá"
+
+#
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr "óå áõôÞ ôçí ðåñéïñéóìÝíç üøç"
+
+#
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "Áäõíáìßá áëëáãÞò ôçò óçìáßáò 'important' óôï äéáêïìéóôÞ POP."
+
+#
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Äåí õðÜñ÷ïõí Üëëåò óõæçôÞóåéò."
+
+#
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Åßóôå óôçí ðñþôç óõæÞôçóç."
+
+#
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "Ç ÷ñÞóç óõæçôÞóåùí äåí Ý÷åé åíåñãïðïéçèåß."
+
+#
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "Ç óõæÞôçóç ðåñéÝ÷åé ìç áíáãíùóìÝíá ìçíýìáôá."
+
+#
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "Áäõíáìßá åðåîåñãáóßáò ìçíýìáôïò óôï äéáêïìéóôÞ POP."
+
+#
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\t åéóÜãåôå ìéá ãñáììÞ îåêéíþíôáò ìå Ýíá ~\n"
+"~b ÷ñÞóôåò\tðñïóèÝóôå ÷ñÞóôåò óôï ðåäßï Bcc: \n"
+"~c ÷ñÞóôåò\tðñïóèÝóôå ÷ñÞóôåò óôï ðåäßï Cc: \n"
+"~f ìçíýìáôá\tóõìðåñéëÜâåôå ôá ìçíýìáôá\n"
+"~F ìçíýìáôá\tôï ßäéï üðùò ôï ~f, áëëÜ êáé ìå ôéò åðéêåöáëßäåò\n"
+"~h\t\tåðåîåñãáóôåßôå ôçí åðéêåöáëßäá\n"
+"~m ìçíýìáôá\tóõìðåñéëÜâåôå êáé ðáñáèÝóôå ôá ìçíýìáôá\n"
+"~M ìçíýìáôá\tôï ßäéï ìå ôï ~m, áëëÜ êáé ìå ôéò åðéêåöáëßäåò\n"
+"~p\t\tåêôõðþóôå ôï ìÞíõìá\n"
+"~q\t\tåããñáöÞ ôïõ áñ÷åßï êáé Ýîïäïò áðü ôïí êåéìåíïãñÜöï\n"
+"~r áñ÷åßï\t\täéáâÜóôå Ýíá áñ÷åßï óôïí êåéìåíïãñÜöï\n"
+"~t ÷ñÞóôåò\tðñïóèÝóôå ÷ñÞóôåò óôï ðåäßï To: \n"
+"~u\t\táíáêáëÝóôå ôçí ðñïçãïýìåíç ãñáììÞ\n"
+"~v\t\tåðåîåñãáóôåßôå ôï ìÞíõìá ìå ôï $visual editor\n"
+"~w áñ÷åßï\t\tãñÜøôå ôï ìÞíõìá óôï áñ÷åßï\n"
+"~x\t\táêõñþóôå ôéò áëëáãÝò êáé âãåßôå áðü ôïí êåéìåíïãñÜöï\n"
+"~?\t\táõôü ôï ìÞíõìá\n"
+".\t\tìüíç ôçò óå ìéá ãñáììÞ ôåñìáôßæåé ôçí åßóïäï\n"
+
+#
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: ìç Ýãêõñïò áñéèìüò ìçíýìáôïò.\n"
+
+#
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Ôåëåéþóôå ôï ìÞíõìá ìå . ìüíç ôçò óå ìéá ãñáììÞ)\n"
+
+#
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "ÊáíÝíá ãñáììáôïêéâþôéï.\n"
+
+#
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Ôï ìÞíõìá ðåñéÝ÷åé:\n"
+
+#
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(óõíå÷ßóôå)\n"
+
+#
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "ëåßðåé ôï üíïìá ôïõ áñ÷åßïõ.\n"
+
+#
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Äåí õðÜñ÷ïõí ãñáììÝò óôï ìÞíõìá.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr ""
+
+#
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: Üãíùóôç åíôïëÞ êåéìåíïãñÜöïõ (~? ãéá âïÞèåéá)\n"
+
+#
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "áäõíáìßá äçìéïõñãßáò ðñïóùñéíïý öáêÝëïõ: %s"
+
+#
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "áäõíáìßá åããñáöÞò ðñïóùñéíïý öáêÝëïõ áëëçëïãñáößáò: %s"
+
+#
+#: editmsg.c:101
+#, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "áäõíáìßá ðåñéêïðÞ ðñïóùñéíïý öáêÝëïõ áëëçëïãñáößáò: %s"
+
+#
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "Ôï áñ÷åßï ìçíõìÜôùí åßíáé Üäåéï!"
+
+#
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "Ôï ìÞíõìá äåí ôñïðïðïéÞèçêå!"
+
+#
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "Áäõíáìßá ðñüóâáóçò óôï áñ÷åßï ìçíõìÜôùí: %s"
+
+#
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Áäõíáìßá ðñüóèåóçò óôï öÜêåëï: %s"
+
+#
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "ÓöÜëìá. ÄéáôÞñçóç ðñïóùñéíïý áñ÷åßïõ: %s"
+
+#
+#: flags.c:332
+msgid "Set flag"
+msgstr "Ïñßóôå óçìáßá"
+
+#
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Êáèáñßóôå óçìáßá"
+
+#
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[-- ÓöÜëìá: Áäõíáìßá áðåéêüíéóçò óå üëá ôá ìÝñç ôïõ Multipart/Alternative! "
+"--]\n"
+
+#
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- ÐñïóÜñôçóç #%d"
+
+#
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Ôýðïò: %s/%s, Êùäéêïðïßçóç: %s, ÌÝãåèïò: %s --]\n"
+
+#
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Autoview ÷ñçóéìïðïéþíôáò ôï %s --]\n"
+
+#
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "ÊëÞóç ôçò åíôïëÞò autoview: %s"
+
+#
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- Áäõíáìßá åêôÝëåóçò óôéò %s --]\n"
+
+#
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Autoview êáíïíéêÞ Ýîïäïò ôïõ %s --]\n"
+
+#
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- ÓöÜëìá: ôï ìÞíõìá/åîùôåñéêü-óþìá äåí Ý÷åé ðáñÜìåôñï access-type --]\n"
+
+#
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- ÁõôÞ ç %s/%s ðñïóÜñôçóç "
+
+#
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(ìÝãåèïò %s bytes) "
+
+#
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "Ý÷åé äéáãñáöåß --]\n"
+
+#
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- óôéò %s --]\n"
+
+#
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- üíïìá: %s --]\n"
+
+#
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- ÁõôÞ ç %s/%s ðñïóÜñôçóç äåí ðåñéëáìâÜíåôå, --]\n"
+
+#
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+"[-- êáé ç åíäåäåéãìÝíç åîùôåñéêÞ ðçãÞ Ý÷åé --]\n"
+"[-- ëÞîåé. --]\n"
+
+#
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr "[-- êáé ôï åíäåäåéãìÝíï access-type %s äåí õðïóôçñßæåôáé --]\n"
+
+#
+# handler.c:1378
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "ÓöÜëìá: ôï ðïëõìåñÝò/õðïãåãñáììÝíï äåí Ý÷åé ðñùôüêïëëï"
+
+#
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "ÓöÜëìá: ôï ðïëõìåñÝò/êñõðôïãñáöçìÝíï äåí Ý÷åé ðáñÜìåôñï ðñùôïêüëëïõ!"
+
+#
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Áäõíáìßá áíïßãìáôïò ðñïóùñéíïý áñ÷åßïõ!"
+
+#
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- Ôï %s/%s äåí õðïóôçñßæåôáé "
+
+#
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(÷ñçóéìïðïéÞóôå ôï '%s' ãéá íá äåßôå áõôü ôï ìÝñïò)"
+
+#
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "(áðáéôåßôáé ôï 'view-attachments' íá åßíáé óõíäåäåìÝíï ìå ðëÞêôñï!"
+
+#
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: áäõíáìßá óôçí ðñïóÜñôçóç ôïõ áñ÷åßïõ"
+
+#
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "ÓÖÁËÌÁ: ðáñáêáëþ áíáöÝñáôå áõôü ôï óöÜëìá ðñïãñÜììáôïò"
+
+#
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<ÁÃÍÙÓÔÏ>"
+
+#
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"ÃåíéêÝò óõíäÝóåéò:\n"
+"\n"
+
+#
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Ìç óõíäåäåìÝíåò ëåéôïõñãßåò:\n"
+"\n"
+
+#
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "ÂïÞèåéá ãéá ôï %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: Áäõíáìßá unhook * ìÝóá áðü Ýíá hook."
+
+#
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: Üãíùóôïò ôýðïò hook: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: Áäõíáìßá äéáãñáöÞò åíüò %s ìÝóá áðü Ýíá %s."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "Äåí õðÜñ÷åé äéáèÝóéìç áõèåíôéêïðïßçóç."
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Áõèåíôéêïðïßçóç (áíþíõìç)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "Ç áíþíõìç áõèåíôéêïðïßçóç áðÝôõ÷å."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Áõèåíôéêïðïßçóç (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "Áõèåíôéêïðïßçóç CRAM-MD5 áðÝôõ÷å."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Áõèåíôéêïðïßçóç (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "Áõèåíôéêïðïßçóç GSSAPI áðÝôõ÷å."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "Ôï LOGIN áðåíåñãïðïéÞèçêå óå áõôü ôïí äéáêïìéóôÞ."
+
+#
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Åßóïäïò óôï óýóôçìá..."
+
+#
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "ÁðÝôõ÷å ç åßóïäïò óôï óýóôçìá."
+
+#: imap/auth_sasl.c:112
+#, fuzzy, c-format
+msgid "Authenticating (%s)..."
+msgstr "Áõèåíôéêïðïßçóç (APOP)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "Áõèåíôéêïðïßçóç SASL áðÝôõ÷å."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "%s åßíáé ìç Ýãêõñç äéáäñïìÞ IMAP"
+
+#
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "ËÞøç namespaces..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "ËÞøç ëßóôáò öáêÝëùí..."
+
+#
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "Äåí õðÜñ÷åé ôÝôïéïò öÜêåëïò"
+
+#
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Äçìéïõñãßá ãñáììáôïêéâùôßïõ: "
+
+#
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "Ôï ãñáììáôïêéâþôéï ðñÝðåé íá Ý÷åé üíïìá."
+
+#
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Ôï ãñáììáôïêéâþôéï äçìéïõñãÞèçêå."
+
+#
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "Ôï ãñáììáôïêéâþôéï Ýêëåéóå"
+
+#
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Ìïéñáßï óöÜëìá. Ï áñéèìüò ôùí ìçíõìÜôùí äåí åßíáé óå óõìöùíßá!"
+
+#
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "Êëåßóéìï óýíäåóçò óôï óôï %s..."
+
+#
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr ""
+"Áõôüò ï åîõðçñåôçôÞò IMAP åßíáé áñ÷áßïò. Ôï Mutt äåí åßíáé óõìâáôü ìå áõôüí."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "ÁóöáëÞò óýíäåóç ìå TLS;"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "Áäõíáìßá äéáðñáãìÜôåõóçò óýíäåóçò TLS"
+
+#
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "ÅðéëïãÞ %s..."
+
+#
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "ÓöÜëìá êáôÜ  ôï Üíïéãìá ôïõ ãñáììáôïêéâùôßïõ"
+
+#
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Áäõíáìßá óôçí ðñïóèÞêç óôá ãñáìì/ôéá IMAP óå áõôüí ôïí åîõðçñåôçôÞ"
+
+#
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "Äçìéïõñãßá ôïõ %s;"
+
+#
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Êëåßóéìï óýíäåóçò óôïí åîõðçñåôçôÞ IMAP..."
+
+#
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "Óçìåßùóç %d äéáãñáöÝíôùí ìçíõìÜôùí..."
+
+#
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "ÄéáãñáöÞ áðÝôõ÷å"
+
+#
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "ÁðïèÞêåõóç óçìáéþí êáôÜóôáóçò ìçíýìáôïò... [%d/%d]"
+
+#
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "ÄéáãñáöÞ ìçíõìÜôùí áðü ôïí åîõðçñåôçôÞ..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbox: EXPUNGE áðÝôõ÷å"
+
+#
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "CLOSE áðÝôõ÷å"
+
+#
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "Êáêü üíïìá ãñáììáôïêéâùôßïõ"
+
+#
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "ÅããñáöÞ óôï %s..."
+
+#
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "ÄéáãñáöÞ óôï %s..."
+
+#
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "Áäõíáìßá ëÞøçò åðéêåöáëßäùí áðü áõôÞ ôçí Ýêäïóç ôïõ åîõðçñåôçôÞ IMAP."
+
+#
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "Áäõíáìßá äçìéïõñãßáò ðñïóùñéíïý áñ÷åßïõ %s"
+
+#
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "ËÞøç åðéêåöáëßäùí áðü ôá ìçíýìáôá... [%d/%d]"
+
+#
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "ËÞøç ìçíýìáôïò..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "Ï äåßêôçò ôïõ ìçíýìáôïò åßíáé Üêõñïò. Îáíáíïßîôå ôï ãñáììáôïêéâþôéï."
+
+#
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "ÁíÝâáóìá ìçíýìáôïò ..."
+
+#
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "ÁíôéãñáöÞ %d ìçíõìÜôùí óôï %s..."
+
+#
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "ÁíôéãñáöÞ ìçíýìáôïò %d óôï %s ..."
+
+#
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "ÓõíÝ÷åéá;"
+
+#
+#: init.c:611
+msgid "alias: no address"
+msgstr "øåõäþíõìï: êáììßá äéåýèõíóç"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr ""
+
+#
+#: init.c:714
+msgid "invalid header field"
+msgstr "ìç Ýãêõñï ðåäßï åðéêåöáëßäáò"
+
+#
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: Üãíùóôç ìÝèïäïò ôáîéíüìçóçò"
+
+#
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): ëÜèïò óôï regexp: %s\n"
+
+#
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: Üãíùóôç ìåôáâëçôÞ"
+
+#
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "ôï ðñüèåìá åßíáé Üêõñï ìå ôçí åðáíáöïñÜ"
+
+#
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "ç ôéìÞ åßíáé Üêõñç ìå ôçí åðáíáöïñÜ"
+
+#
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "Ôï %s Ý÷åé ôåèåß"
+
+#
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "Ôï %s äåí Ý÷åé ôåèåß"
+
+#
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: ìç Ýãêõñïò ôýðïò ãñáììáôïêéâùôßïõ"
+
+#
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: ìç Ýãêõñç ôéìÞ"
+
+#
+#: init.c:1312
+#, fuzzy, c-format
+msgid "%s: Unknown type."
+msgstr "%s: Üãíùóôïò ôýðïò"
+
+#
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: Üãíùóôïò ôýðïò"
+
+#
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Áäõíáìßá ëÞøçò ôçò êáôÜóôáóçò ôïõ %s: %s"
+
+#
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "Ôï %s äåí åßíáé êáíïíéêü áñ÷åßï."
+
+#
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "ÓöÜëìá óôï %s, ãñáììÞ %d: %s"
+
+#
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: ëÜèç óôï %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "ðçãÞ: áðüññéøç áíÜãíùóçò ëüãù ðïëëþí óöáëìÜôùí óôï %s"
+
+#
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: ëÜèïò óôï %s"
+
+#
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: ðÜñá ðïëëÜ ïñßóìáôá"
+
+#
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: Üãíùóôç åíôïëÞ"
+
+#
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "ËÜèïò óôç ãñáììÞ åíôïëþí: %s\n"
+
+#
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "áäõíáìßá óôïí åíôïðéóìü ôïõ êáôáëüãïõ ÷ñÞóôç (home directory)"
+
+#
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "áäõíáìßá óôïí åíôïðéóìü ôïõ ïíüìáôïò ÷ñÞóôç"
+
+#
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Åíôïðßóôçêå âñüã÷ïò ìáêñïåíôïëÞò."
+
+#
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Ôï ðëÞêôñï äåí åßíáé óõíäåäåìÝíï."
+
+#
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Ôï ðëÞêôñï äåí åßíáé óõíäåäåìÝíï. ÐáôÞóôå '%s' ãéá âïÞèåéá."
+
+#
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: ðÜñá ðïëëÜ ïñßóìáôá"
+
+#
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: äåí õðÜñ÷åé ôÝôïéï ìåíïý"
+
+#
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "êåíÞ áêïëïõèßá ðëÞêôñùí"
+
+#
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: ðÜñá ðïëëÜ ïñßóìáôá"
+
+#
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: äåí Ý÷åé êáèïñéóôåß ôÝôïéá ëåéôïõñãßá"
+
+#
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: Üäåéá áêïëïõèßá ðëÞêôñùí"
+
+#
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: ðÜñá ðïëëÝò ðáñÜìåôñïé"
+
+#
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: êáèüëïõ ïñßóìáôá"
+
+#
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s: äåí õðÜñ÷åé ôÝôïéá ëåéôïõñãßá"
+
+#
+# pgp.c:1200
+#: keymap.c:912
+#, fuzzy
+msgid "Enter keys (^G to abort): "
+msgstr "ÅéóÜãåôå keyID ãéá ôï %s: "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr ""
+
+#
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "êåíÞ ëåéôïõñãßá"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "áíáãêÜæåé ôçí åìöÜíéóç ôçò ðñïóÜñôçóçò ÷ñçóéìïðïéþíôáò ôï mailcap"
+
+#
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "ðáñïõóßáóç ôçò ðñïóÜñôçóçò ùò êåßìåíï"
+
+#
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "ÁëëáãÞ ôçò åìöÜíéóçò ôùí åðéìÝñïõò ôìçìÜôùí"
+
+#
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "ìåôáêßíçóç óôç âÜóç ôçò óåëßäáò"
+
+#
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "ÁðïóôïëÞ îáíÜ åíüò ìçíýìáôïò óå Ýíá Üëëï ÷ñÞóôç"
+
+#
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "åðéëÝîôå Ýíá íÝï áñ÷åßï óå áõôü ôïí êáôÜëïãï"
+
+#
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "áíÜãíùóç ôï áñ÷åßï"
+
+#
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "áðåéêüíéóç ôïõ ïíüìáôïò ôïõ ôñÝ÷ïíôïò åðéëåãìÝíïõ áñ÷åßïõ"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "åããñáöÞ óôï ôñÝ÷ïí ãñáììáôïêéâþôéï (IMAP ìüíï)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "äéáãñáöÞ áðü ôï ôñÝ÷ïí ãñáììáôïêéâþôéï (IMAP ìüíï)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "áëëáãÞ üøçò üëá/åããåãñáììÝíá ãñáììáôïêéâþôéá  (IMAP ìüíï)"
+
+#
+#: keymap_alldefs.h:18
+msgid "list mailboxes with new mail"
+msgstr "áðåéêüíéóç ãñáììáôïêéâùôßùí ìå íÝá áëëçëïãñáößá"
+
+#
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "áëëáãÞ êáôáëüãùí"
+
+#
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "åîÝôáóç ãñáììá/ôßùí ãéá íÝá áëëçëïãñáößá"
+
+#
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "ðñïóÜñôçóç áñ÷åßïõ/ùí óå áõôü ôï ìÞíõìá"
+
+#
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "ðñïóÜñôçóç ìçíýìáôïò/ôùí óå áõôü ôï ìÞíõìá"
+
+#
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "åðåîåñãáóßá ôçò ëßóôáò BCC"
+
+#
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "åðåîåñãáóßá ôçò ëßóôáò CC"
+
+#
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "åðåîåñãáóßá ôçò ðåñéãñáöÞò ôçò ðñïóÜñôçóçò"
+
+#
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "åðåîåñãáóßá ôçò êùäéêïðïßçóçò-ìåôáöïñÜò ôçò ðñïóÜñôçóçò"
+
+#
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "ïñéóìüò áñ÷åßïõ ãéá áðïèÞêåõóç áíôéãñÜöïõ áõôïý ôïõ ìçíýìáôïò "
+
+#
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "åðåîåñãáóßá ôïõ öáêÝëïõ ðïõ èá ðñïóáñôçèåß"
+
+#
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "åðåîåñãáóßá ôïõ ðåäßïõ from"
+
+#
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "åðåîåñãáóßá ôïõ ìçíýìáôïò ìå åðéêåöáëßäåò"
+
+#
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "åðåîåñãáóßá ôïõ ìçíýìáôïò"
+
+#
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "åðåîåñãáóßá ôçò ðñïóÜñôçóçò ÷ñçóéìïðïéþíôáò êáôá÷þñçóç mailcap"
+
+#
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "åðåîåñãáóßá ôïõ ðåäßïõ Reply-To"
+
+#
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "åðåîåñãáóßá ôïõ èÝìáôïò áõôïý ôïõ ìçíýìáôïò"
+
+#
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "åðåîåñãáóßá ôçò ëßóôáò TO"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "äçìéïõñãßá åíüò íÝïõ ãñáììáôïêéâùôßïõ (IMAP ìüíï)"
+
+#
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "åðåîåñãáóßá ôïõ ôýðïõ ôïõ ðåñéå÷ïìÝíïõ ôçò ðñïóÜñôçóçò"
+
+#
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "áðüäïóç åíüò ðñïóùñéíïý áíôéãñÜöïõ ôçò ðñïóÜñôçóçò"
+
+#
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "Ýëåã÷ïò ôïõ ìçíýìáôïò ìå ôï  ispell"
+
+#
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "óýíèåóç íÝáò ðñïóÜñôçóçò ÷ñçóéìïðïéþíôáò êáôá÷þñçóç mailcap"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "áëëáãÞ åðáíáêùäéêïðïßçóçò áõôÞò ôçò ðñïóÜñôçóçò"
+
+#
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "áðïèÞêåõóç áõôïý ôïõ ìçíýìáôïò ãéá ìåôÝðåéôá áðïóôïëÞ"
+
+#
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "ìåôïíïìáóßá/ìåôáêßíçóç åíüò áñ÷åßïõ ðñïóÜñôçóçò"
+
+#
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "áðïóôïëÞ ôïõ ìçíýìáôïò"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "åðéëïãÞ ÷áñáêôÞñá áíÜìåóá áðü åóùôåñéêü êåßìåíï/ðñïóÜñôçóç"
+
+#
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "åðéëïãÞ ôçò äéáãñáöÞò ôïõ áñ÷åßïõ ìåôÜ ôçí áðïóôïëÞ, Þ ü÷é"
+
+#
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "áíáíÝùóç ôùí ðëçñïöïñéþí êùäéêïðïßçóçò ôçò ðñïóÜñôçóçò"
+
+#
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "åããñáöÞ ôïõ ìçíýìáôïò óå Ýíá öÜêåëï"
+
+#
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "áíôéãñáöÞ åíüò ìçíýìáôïò óå Ýíá áñ÷åßï/ãñáììá/ôéï"
+
+#
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "äçìéïõñãßá åíüò øåõäùíýìïõ áðü Ýíá áðïóôïëÝá ìçíýìáôïò"
+
+#
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "ìåôáêßíçóç ôçò êáôá÷þñçóçò óôçí âÜóç ôçò ïèüíçò"
+
+#
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "ìåôáêßíçóç ôçò êáôá÷þñçóçò óôçí ìÝóç ôçò ïèüíçò"
+
+#
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "ìåôáêßíçóç ôçò êáôá÷þñçóçò óôçí êïñõöÞ ôçò ïèüíçò"
+
+#
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "äçìéïõñãßá áðïêùäéêïðïéçìÝíïõ (text/plain) áíôéãñÜöïõ"
+
+#
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "äçìéïõñãßá áðïêùäéêïðïéçìÝíïõ (text/plain) áíôéãñÜöïõ êáé äéáãñáöÞ"
+
+#
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "äéáãñáöÞ ôçò ôñÝ÷ïõóáò êáôá÷þñçóçò"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "åããñáöÞ óôï ôñÝ÷ïí ãñáììáôïêéâþôéï (IMAP ìüíï)"
+
+#
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "äéáãñáöÞ üëùí ôùí ìçíõìÜôùí óôç äåõôåñåýïõóá óõæÞôçóç"
+
+#
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "äéáãñáöÞ üëùí ôùí ìçíõìÜôùí óôç óõæÞôçóç"
+
+#
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "áðåéêüíéóç ôçò ðëÞñçò äéåýèõíóçò ôïõ áðïóôïëÝá"
+
+#
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "áðåéêüíéóç ôïõ ìçíýìáôïò êáé åðéëïãÞ êáèáñéóìïý åðéêåöáëßäáò"
+
+#
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "áðåéêüíéóç ôïõ ìçíýìáôïò"
+
+#
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "åðåîåñãáóßá ôïõ <<ùìïý>> ìçíýìáôïò"
+
+#
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "äéáãñáöÞ ôïõ ÷áñáêôÞñá ìðñïóôÜ áðü ôïí êÝñóïñá"
+
+#
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "ìåôáêßíçóç ôïõ äñïìÝá Ýíá ÷áñáêôÞñá ðñïò ôá áñéóôåñÜ"
+
+#
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "ìåôáêßíçóç ôïõ äñïìÝá óôçí áñ÷Þ ôçò ëÝîçò"
+
+#
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "ìåôÜâáóç óôçí áñ÷Þ ôçò ãñáììÞò"
+
+#
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "ìåôáêßíçóç ìåôáîý ôùí ãñáììáôïêéâùôßùí"
+
+#
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "ïëüêëçñï üíïìá áñ÷åßïõ Þ øåõäþíõìï"
+
+#
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "ïëüêëçñç äéåýèõíóç ìå åñþôçóç"
+
+#
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "äéáãñáöÞ ôïõ ÷áñáêôÞñá êÜôù áðü ôï äñïìÝá"
+
+#
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "ìåôáêßíçóç óôï ôÝëïò ôçò ãñáììÞò"
+
+#
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "ìåôáêßíçóç ôïõ äñïìÝá Ýíá ÷áñáêôÞñá ðñïò ôá äåîéÜ"
+
+#
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "ìåôáêßíçóç ôïõ äñïìÝá óôï ôÝëïò ôçò ëÝîçò"
+
+#
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr "ìåôáêßíçóç ðñïò êÜôù óôçí ëßóôá éóôïñßáò"
+
+#
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "ìåôáêßíçóç ðñïò ðÜíù óôçí ëßóôá éóôïñßáò"
+
+#
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "äéáãñáöÞ ôùí ÷áñáêôÞñùí áðü ôïí êÝñóïñá ùò ôï ôÝëïò ôçò ãñáììÞò"
+
+#
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "äéáãñáöÞ ôùí ÷áñáêôÞñùí áðü ôïí êÝñóïñá ùò ôï ôÝëïò ôçò ëÝîçò"
+
+#
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "äéáãñáöÞ üëùí ôùí ÷áñáêôÞñùí óôç ãñáììÞ"
+
+#
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "äéáãñáöÞ ôçò ëÝîçò ìðñïóôÜ áðü óôïí êÝñóïñá"
+
+#
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "ðáñÜèåóç ôïõ åðüìåíïõ ðëÞêôñïõ"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "ìåôáôüðéóç ôïõ ÷áñáêôÞñá êÜôù áðü ôïí äñïìÝá ìå ôïí ðñïçãïýìåíï"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "ìåôáôñïðÞ ëÝîçò óå êåöáëáßá"
+
+#
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "ìåôáôñïðÞ ëÝîçò óå ðåæÜ"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "ìåôáôñïðÞ ëÝîçò óå êåöáëáßá"
+
+#
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "êáôá÷þñçóç ìéáò åíôïëÞò muttrc"
+
+#
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "êáôá÷þñçóç ìéáò ìÜóêáò áñ÷åßùí"
+
+#
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "Ýîïäïò áðü áõôü ôï ìåíïý"
+
+#
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "öéëôñÜñéóìá ôçò ðñïóÜñôçóçò ìÝóù ìéáò åíôïëÞò öëïéïý"
+
+#
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "ìåôáêßíçóç óôçí ðñþôç êáôá÷þñçóç"
+
+#
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "áëëáãÞ ôçò óçìáßáò 'óçìáíôéêü' ôïõ ìçíýìáôïò"
+
+#
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "ðñïþèçóç åíüò ìçíýìáôïò ìå ó÷üëéá"
+
+#
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "åðéëïãÞ ôçò ôñÝ÷ïõóáò êáôá÷þñçóçò"
+
+#
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "áðÜíôçóç óå üëïõò ôïõò ðáñáëÞðôåò"
+
+#
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "ìåôáêßíçóç 1/2 óåëßäáò ðñïò ôá êÜôù"
+
+#
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "ìåôáêßíçóç 1/2 óåëßäáò ðñïò ôá ðÜíù"
+
+#
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "áõôÞ ç ïèüíç"
+
+#
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "ìåôÜâáóç óå Ýíáí áñéèìü äåßêôç "
+
+#
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "ìåôáêßíçóç óôçí ôåëåõôáßá êáôá÷þñçóç"
+
+#
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "áðÜíôçóç óôçí êáèïñéóìÝíç ëßóôá áëëçëïãñáößáò"
+
+#
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "åêôÝëåóç ìéáò ìáêñïåíôïëÞò"
+
+#
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "óýíèåóç åíüò íÝïõ ìçíýìáôïò"
+
+#
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "Üíïéãìá åíüò äéáöïñåôéêïý öáêÝëïõ"
+
+#
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "Üíïéãìá åíüò äéáöïñåôéêïý öáêÝëïõ óå êáôÜóôáóç ìüíï-áíÜãíùóçò"
+
+#
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "êáèáñéóìüò ôçò óçìáßáò êáôÜóôáóçò áðü ôï ìÞíõìá"
+
+#
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "äéáãñáöÞ ôùí ìçíõìÜôùí ðïõ ôáéñéÜæïõí óå Ýíá ìïíôÝëï/ìïñöÞ"
+
+#
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "åîáíáãêáóìÝíç ðáñáëáâÞ áëëçëïãñáößáò áðü ôï åîõðçñåôçôÞ IMAP"
+
+#
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "ðáñáëáâÞ áëëçëïãñáößáò áðü ôï åîõðçñåôçôÞ POP"
+
+#
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "ìåôáêßíçóç óôï ðñþôï ìÞíõìá"
+
+#
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "ìåôáêßíçóç óôï ôåëåõôáßï ìÞíõìá"
+
+#
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "åìöÜíéóç ìüíï ôùí ìçíõìÜôùí ðïõ ôáéñéÜæïõí óå Ýíá ìïíôÝëï/ìïñöÞ"
+
+#
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "ìåôÜâáóç óôï åðüìåíï íÝï ìÞíõìá"
+
+#
+#: keymap_alldefs.h:113
+#, fuzzy
+msgid "jump to the next new or unread message"
+msgstr "ìåôÜâáóç óôï åðüìåíï ìç áíáãíùóìÝíï ìÞíõìá"
+
+#
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "ìåôÜâáóç óôï åðüìåíï èÝìá ôçò äåõôåñåýïõóáò óõæÞôçóçò"
+
+#
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "ìåôÜâáóç óôçí åðüìåíç óõæÞôçóç"
+
+#
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "ìåôáêßíçóç óôï åðüìåíï áðïêáôáóôçìÝíï ìÞíõìá"
+
+#
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "ìåôÜâáóç óôï åðüìåíï ìç áíáãíùóìÝíï ìÞíõìá"
+
+#
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "ìåôÜâáóç óôï ôñÝ÷ïí ìÞíõìá ôçò óõæÞôçóçò"
+
+#
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "ìåôÜâáóç óôçí ðñïçãïýìåíç óõæÞôçóç"
+
+#
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "ìåôÜâáóç óôçí ðñïçãïýìåíç äåõôåñåýïõóá óõæÞôçóç"
+
+#
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "ìåôáêßíçóç óôï ðñïçãïýìåíï áðïêáôáóôçìÝíï ìÞíõìá"
+
+#
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "ìåôÜâáóç óôï ðñïçãïýìåíï íÝï ìÞíõìá"
+
+#
+#: keymap_alldefs.h:123
+#, fuzzy
+msgid "jump to the previous new or unread message"
+msgstr "ìåôÜâáóç óôï ðñïçãïýìåíï ìç áíáãíùóìÝíï ìÞíõìá"
+
+#
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "ìåôÜâáóç óôï ðñïçãïýìåíï ìç áíáãíùóìÝíï ìÞíõìá"
+
+#
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "óçìåßùóç ôçò ôñÝ÷ïõóáò óõæÞôçóçò ùò áíáãíùóìÝíç"
+
+#
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "óçìåßùóç ôçò ôñÝ÷ïõóáò õðïóõæÞôçóçò ùò áíáãíùóìÝíç"
+
+#
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "ïñéóìüò ôçò óçìáßáò êáôÜóôáóçò óå Ýíá ìÞíõìá"
+
+#
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "áðïèÞêåõóç ôùí áëëáãþí óôï ãñáììáôïêéâþôéï"
+
+#
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "óçìåßùóç ôùí ìçíõìÜôùí ðïõ ôáéñéÜæïõí ìå ìéá ìïñöÞ/ìïíôÝëï"
+
+#
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr ""
+"áðïêáôÜóôáóç (undelete) ôùí ìçíõìÜôùí ðïõ ôáéñéÜæïõí ìå ìßá ìïñöÞ/ìïíôÝëï"
+
+#
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr ""
+"áöáßñåóç ôçò óçìåßùóçò áðü ôá ìçíýìáôá ðïõ ôáéñéÜæïõí ìå ìßá ìïñöÞ/ìïíôÝëï"
+
+#
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "ìåôáêßíçóç óôï ìÝóï ôçò óåëßäáò"
+
+#
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "ìåôáêßíçóç óôçí åðüìåíç êáôá÷þñçóç"
+
+#
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "ìåôáêßíçóç ìéá ãñáììÞ ðñïò ôá êÜôù"
+
+#
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "ìåôáêßíçóç óôçí åðüìåíç óåëßäá"
+
+#
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "ìåôÜâáóç óôç âÜóç ôïõ ìçíýìáôïò"
+
+#
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "åðéëïãÞ ôçò åìöÜíéóçò ôïõ quoted êåéìÝíïõ"
+
+#
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "ðñïóðÝñáóç ðÝñá áðü ôï quoted êåßìåíï"
+
+#
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "ìåôÜâáóç óôçí áñ÷Þ ôïõ ìçíýìáôïò"
+
+#
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "äéï÷Ýôåõóç ôïõ ìçíýìáôïò/ðñïóÜñôçóçò óå ìéá åíôïëÞ öëïéïý"
+
+#
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "ìåôáêßíçóç óôçí ðñïçãïýìåíç êáôá÷þñçóç"
+
+#
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "ìåôáêßíçóç ìéá ãñáììÞ ðñïò ôá ðÜíù"
+
+#
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "ìåôáêßíçóç óôçí ðñïçãïýìåíç óåëßäá"
+
+#
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "åêôýðùóç ôçò ôñÝ÷ïõóáò êáôá÷þñçóçò"
+
+#
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "åñþôçóç åíüò åîùôåñéêïý ðñïãñÜììáôïò ãéá äéåõèýíóåéò"
+
+#
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "ðñüóèåóç ôùí íÝùí áðïôåëåóìÜôùí ôçò åñþôçóçò óôá ôñÝ÷ïíôá"
+
+#
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "áðïèÞêåõóç ôùí áëëáãþí óôï ãñáììáôïêéâþôéï êáé åãêáôÜëåéøç"
+
+#
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "åðáíÜêëçóç åíüò áíáâëçèÝíôïò ìçíýìáôïò"
+
+#
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "êáèáñéóìüò êáé áíáíÝùóç ôçò ïèüíçò"
+
+#
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{åóùôåñéêü}"
+
+#
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "áðÜíôçóç óå Ýíá ìÞíõìá"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "÷ñçóéìïðïßçóç ôïõ ôñÝ÷ïíôïò ìçíýìáôïò ùò ó÷åäßïõ ãéá Ýíá íÝï"
+
+#
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "áðïèÞêåõóç ìçíýìáôïò/ðñïóÜñôçóçò óå Ýíá áñ÷åßï"
+
+#
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "áíáæÞôçóç ìéáò êáíïíéêÞò Ýêöñáóçò"
+
+#
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "áíáæÞôçóç ìéáò êáíïíéêÞò Ýêöñáóçò ðñïò ôá ðßóù"
+
+#
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "áíáæÞôçóç ãéá åðüìåíï ôáßñéáóìá"
+
+#
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "áíáæÞôçóç ôïõ åðüìåíïõ ôáéñéÜóìáôïò ðñïò ôçí áíôßèåôç êáôåýèõíóç"
+
+#
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "åðéëïãÞ ôïõ ÷ñùìáôéóìïý ôùí áðïôåëåóìÜôùí áíáæÞôçóçò"
+
+#
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "êëÞóç ìéáò åíôïëÞò óå Ýíá äåõôåñåýùí öëïéü"
+
+#
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "ôáîéíüìçóç ôùí ìçíõìÜôùí"
+
+#
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "ôáîéíüìçóç ôùí ìçíõìÜôùí óå áíÜóôñïöç óåéñÜ"
+
+#
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "óçìåßùóç ôçò ôñÝ÷ïõóáò êáôá÷þñçóçò"
+
+#
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "åöáñìïãÞ ôçò åðüìåíçò ëåéôïõñãßáò óôá óçìåéùìÝíá ìçíýìáôá"
+
+#
+#: keymap_alldefs.h:164
+#, fuzzy
+msgid "apply next function ONLY to tagged messages"
+msgstr "åöáñìïãÞ ôçò åðüìåíçò ëåéôïõñãßáò óôá óçìåéùìÝíá ìçíýìáôá"
+
+#
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "óçìåßùóç ôçò ôñÝ÷ïõóáò äåõôåñåýïõóáò óõæÞôçóçò"
+
+#
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "óçìåßùóç ôçò ôñÝ÷ïõóáò óõæÞôçóçò"
+
+#
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "åðéëïãÞ ôçò 'íÝáò' óçìáßáò ìçíýìáôïò"
+
+#
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "åðéëïãÞ åÜí ôï ãñáììáôïêéâþôéï èá îáíáãñáöåß"
+
+#
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "åðéëïãÞ ãéá ðåñéÞãçóç óôá ãñáììáôïêéâþôéá Þ óå üëá ôá áñ÷åßá"
+
+#
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "ìåôáêßíçóç óôçí áñ÷Þ ôçò óåëßäáò"
+
+#
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "áðïêáôÜóôáóç ôçò ôñÝ÷ïõóáò êáôá÷þñçóçò"
+
+#
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "áðïêáôÜóôáóç üëùí ôùí ìçíõìÜôùí óôç óõæÞôçóç"
+
+#
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "áðïêáôÜóôáóç üëùí ôùí ìçíõìÜôùí óôç äåõôåñåýïõóá óõæÞôçóç"
+
+#
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "åìöÜíéóç ôïõ áñéèìïý Ýêäïóçò ôïõ Mutt êáé ôçí çìåñïìçíßá"
+
+#
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr ""
+"åìöÜíéóç ðñïóÜñôçóçò ÷ñçóéìïðïéþíôáò åÜí ÷ñåéÜæåôáé ôçí êáôá÷þñçóç mailcap"
+
+#
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "åìöÜíéóç ôùí ðñïóáñôÞóåùí MIME"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr ""
+
+#
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "åìöÜíéóç ôçò åíåñãÞò ìïñöÞò ôùí ïñßùí"
+
+#
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "ìÜæåìá/Üðëùìá ôçò ôñÝ÷ïõóáò óõæÞôçóçò"
+
+#
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "ìÜæåìá/Üðëùìá üëùí ôùí óõæçôÞóåùí"
+
+#
+# keymap_defs.h:158
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "ðñïóÜñôçóç ôïõ äçìüóéïõ êëåéäéïý PGP"
+
+#
+# keymap_defs.h:159
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "åìöÜíéóç ôùí åðéëïãþí PGP"
+
+#
+# keymap_defs.h:162
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "ôá÷õäñüìçóç äçìüóéïõ êëåéäéïý PGP"
+
+#
+# keymap_defs.h:163
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "åðéâåâáßùóç åíüò äçìüóéïõ êëåéäéïý PGP"
+
+#
+# keymap_defs.h:164
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "åìöÜíéóç ôïõ éäéïêôÞôç ôïõ êëåéäéïý"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "Ýëåã÷ïò ãéá ôï êëáóóéêü pgp"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "Áðïäï÷Þ ôçò êáôáóêåõáóìÝíçò áëõóßäáò"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "ÐñïóÜñôçóç åíüò åðáíáðïóôïëÝá óôçí áëõóßäá"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "ÐñïóèÞêç åíüò åðáíáðïóôïëÝá óôçí áëõóßäá"
+
+#
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "ÄéáãñáöÞ åíüò åðáíáðïóôïëÝá áðü ôçí áëõóßäá"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "ÅðéëïãÞ ôïõ ðñïçãïýìåíïõ óôïé÷åßïõ ôçò áëõóßäáò"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "ÅðéëïãÞ ôïõ åðüìåíïõ óôïé÷åßïõ ôçò áëõóßäáò"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "áðïóôïëÞ ôïõ ìçíýìáôïò ìÝóù ìéáò áëõóßäáò åðáíáðïóôïëÝùí Mixmaster"
+
+#
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "äçìéïõñãßá áðïêñõðôïãñáöçìÝíïõ áíôéãñÜöïõ êáé äéáãñáöÞ"
+
+#
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "äçìéïõñãßá áðïêñõðôïãñáöçìÝíïõ áíôéãñÜöïõ"
+
+#
+# keymap_defs.h:161
+#: keymap_alldefs.h:196
+msgid "wipe passphrase(s) from memory"
+msgstr "åîáöÜíéóç ôçò öñÜóçò(-åùí) êëåéäß áðü ôç ìíÞìç"
+
+#
+# keymap_defs.h:160
+#: keymap_alldefs.h:197
+msgid "extract supported public keys"
+msgstr "åîáãùãÞ ôùí äçìüóéùí êëåéäéþí ðïõ õðïóôçñßæïíôå"
+
+#
+# keymap_defs.h:159
+#: keymap_alldefs.h:198
+msgid "show S/MIME options"
+msgstr "åìöÜíéóç ôùí åðéëïãþí S/MIME"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Ç ìíÞìç åîáíôëÞèçêå!"
+
+#
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"Ãéá íá åðéêïéíùíÞóåôå ìå ôïõò developers, óôåßëôå mail óôï <mutt-dev@mutt."
+"org>.\n"
+"Ãéá íá áíáöÝñåôå Ýíá ðñüâëçìá ÷ñçóéìïðïéÞóåôå ôï åñãáëåßï flea(1).\n"
+
+#
+#: main.c:50
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins êáé Üëëïé.\n"
+"Ôï Mutt Ýñ÷åôáé ÁÐÏÊËÅÉÓÔÉÊÁ ×ÙÑÉÓ ÅÃÃÕÇÓÇ; ãéá ëåðôïìÝñåéåò ðáôÞóôå `mutt -"
+"vv'.\n"
+"Ôï Mutt åßíáé åëåýèåñï ëïãéóìéêü, êáé åõ÷áñßóôùò ìðïñåßôå íá ôï "
+"åðáíáäéáíÝìåôå\n"
+"õðü ïñéóìÝíïõò üñïõò; ãñÜøôå `mutt -vv' ãéá ëåðôïìÝñåéåò.\n"
+
+#
+#: main.c:56
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@cs.hmc.edu>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@guug.de>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"Ðïëëïß Üëëïé ðïõ äåí áíáöÝñïíôáé åäþ Ý÷ïõí óõíåéóöÝñåé êþäéêá,\n"
+"äéïñèþóåéò, êáé ðñïôÜóåéò.\n"
+"\n"
+"Áõôü ôï ðñüãñáììá åßíáé åëåýèåñï ëïãéóìéêü. Ìðïñåßôå íá ôï áíáäéáíÝìåôå\n"
+"êáé/Þ íá ôï áëëÜîåôå óýìöùíá ìå ôïõò êáíüíåò ôçò GNU ÃåíéêÞò Äçìüóéáò "
+"¶äåéáò\n"
+"üðùò äçìïóéïðïéÞèçêå áðü ôï ºäñõìá Åëåýèåñïõ Ëïãéóìéêïý (Free Software\n"
+"Foundation), åßôå ôçí äåýôåñç Ýêäïóç ôçò Üäåéáò, åßôå (êáô'åðéëïãÞ óáò)\n"
+"êÜèå ìåôÝðåéôá Ýêäïóç.\n"
+"\n"
+"Áõôü ôï ðñüãñáììá äéáíÝìåôáé ìå ôçí åëðßäá üôé èá åßíáé ÷ñÞóéìï,\n"
+"áëëÜ ×ÙÑÉÓ ÊÁÌÉÁ ÅÃÃÕÇÓÇ. Ïýôå áêüìá ãéá ôçí õðïíïïýìåíç åããýçóç ôçò\n"
+"ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ Þ ÊÁÔÁËËÇËÏÔÇÔÁ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏ ÓÊÏÐÏ. Äåßôå ôçí\n"
+"GNU ÃåíéêÞ Äçìüóéá ¶äåéá ãéá ðåñéóóüôåñåò ëåðôïìÝñåéåò.\n"
+"\n"
+"Èá Ýðñåðå íá Ý÷åôå ëÜâåé Ýíá áíôßãñáöï ôçò GNU ÃåíéêÞò Äçìüóéáò ¶äåéáò\n"
+"ìå áõôü ôï ðñüãñáììá. ÅÜí ü÷é, ãñÜøôå óôï Free Software \n"
+"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\n"
+"\n"
+
+#
+#: main.c:94
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"÷ñÞóç: mutt [ -nRyzZ ] [ -e <åíôïëÞ> ] [ -F <áñ÷åßï> ] [ -m <ôýðïò> ] [ -f "
+"<áñ÷åßï>]\n"
+"       mutt [ -nR ] [ -e <åíôïëÞ> ] [ -F <áñ÷åßï> ] -Q <åñþôçóç>[ -Q "
+"<åñþôçóç> ] [...]\n"
+"       mutt [ -nx ] [ -e <åíôïëÞ> ] [ -a <áñ÷åßï> ] [ -F <áñ÷åßï> ] [ -H "
+"<áñ÷åßï> ] [ -i <áñ÷åßï> ] [ -s <èÝìá> ] [ -b <äéåõè> ] [ -c <äéåõè> ] "
+"<äéåõè> [ ... ]\n"
+"       mutt [ -n ] [ -e <åíôïëÞ> ] [ -F <áñ÷åßï> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"åðéëïãÝò:\n"
+"  -A <alias>\táðåéêüíéóç ôïõ óõãêåêñéìÝíïõ øåõäüíõìïõ\n"
+"  -a <áñ÷åßï>\tðñïóáñôÞóôå Ýíá áñ÷åßï óå áõôü ôï ìÞíõìá\n"
+"  -b <äéåõè>\têáèïñßóôå ìéá äéåýèõíóç ôõöëïý-ðéóôïý-áíôéãñÜöïõ (BCC)\n"
+"  -c <äéåõè>\têáèïñßóôå ìéá äéåýèõíóç ðéóôïý-áíôéãñÜöïõ (CC)\n"
+"  -e <åíôïëÞ>\têáèïñßóôå ìéá åíôïëÞ ãéá íá åêôåëåóôåß ìåôÜ ôçí åêêßíçóç\n"
+"  -f <áñ÷åßï>\têáèïñßóôå ðïéï ãñáììáôïêéâþôéï íá áíáãíùóôåß\n"
+"  -F <áñ÷åßï>\têáèïñßóôå Ýíá åíáëëáêôéêü áñ÷åßï muttrc\n"
+"  -H <áñ÷åßï>\têáèïñßóôå Ýíá ðñïó÷Ýäéï áðü ôï ïðïßï èá äéáâáóôåß ç "
+"åðéêåöáëßäá\n"
+"  -i <áñ÷åßï>\têáèïñßóôå Ýíá áñ÷åßï ðïõ ôï Mutt èá óõìðåñéëáìâÜíåé êáôÜ "
+"ôçí \n"
+"áðÜíôçóç\n"
+"  -m <ôýðïò>\têáèïñßóôå Ýíá ôýðï ðñïêáèïñéóìÝíïõ ãñáììáôïêéâùôßïõ\n"
+"  -n\t\têÜíåôå ôï Mutt íá ìçí äéáâÜóåé ôï Muttrc ôïõ óõóôÞìáôïò\n"
+"  -p\t\tåðáíáöÝñåôå Ýíá áíáâëçèÝí ìÞíõìá\n"
+"  -Q <ìåôáâëçôÞ>\tåñþôçóç(åìöÜíéóç ôéìÞò) ìéáò ìåôáâëçôÞò ôùí ñõèìßóåùí\n"
+"  -R\t\táíïßîôå ôï ãñáììáôïêéâþôéï óå êáôÜóôáóç ìüíï-áíÜãíùóçò\n"
+"  -s <èÝìá>\têáèïñßóôå Ýíá èÝìá (óå åéóáãùãéêÜ åÜí Ý÷åé êåíÜ)\n"
+"  -v\t\täåßîôå ôçí Ýêäïóç êáé ôïõò ïñéóìïýò êáôÜ ôç ìåôáãëþôôéóç\n"
+"  -x\t\tåîïìïéþóôå ôçí êáôÜóôáóç áðïóôïëÞò mailx\n"
+"  -y\t\täéáëÝîôå Ýíá ãñáììáôïêéâþôéï áðü ôçí ëßóôá `ãñáììáôïêéâùôßùí'\n"
+"  -z\t\tåãêáôÜëåéøç áìÝóùò åÜí äåí õðÜñ÷ïõí ìçíýìáôá óôï ãñáììáôïêéâþôéï\n"
+"  -Z\t\táíïßîôå ôïí ðñþôï öÜêåëï ìå íÝï ìÞíõìá, âãåßôå åÜí äåí õðÜñ÷ïõí\n"
+"  -h\t\táõôü ôï ìÞíõìá âïÞèåéáò"
+
+#
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"ÐáñÜìåôñïé ìåôáãëþôôéóçò:"
+
+#
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "ËÜèïò êáôÜ ôçí áñ÷éêïðïßçóç ôïõ ôåñìáôéêïý."
+
+#
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "ÁðïóöáëìÜôùóç óôï åðßðåäï %d.\n"
+
+#
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "Ôï DEBUG äåí ïñßóôçêå êáôÜ ôçí äéÜñêåéá ôïõ compile. ÁãíïÞèçêå.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "Ôï %s äåí õðÜñ÷åé. Äçìéïõñãßá;"
+
+#
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "Áäõíáìßá äçìéïõñãßáò ôïõ %s: %s."
+
+#
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Äåí Ý÷ïõí ïñéóôåß ðáñáëÞðôåò.\n"
+
+#
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: áäõíáìßá ðñïóÜñôçóçò ôïõ áñ÷åßïõ.\n"
+
+#
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Äåí õðÜñ÷åé íÝá áëëçëïãñáößá óå êáíÝíá ãñáììáôïêéâþôéï."
+
+#
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Äåí Ý÷åé ïñéóôåß ãñáììáôïêéâþôéï åéóåñ÷ïìÝíùí."
+
+#
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "Ôï ãñáììáôïêéâþôéï åßíáé Üäåéï."
+
+#
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "ÁíÜãíùóç %s... %d (%d%%)"
+
+#
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "Ôï ãñáììáôïêéâþôéï Ý÷åé áëëïéùèåß!"
+
+#
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "Ôï ãñáììáôïêéâþôéï åß÷å áëëïéùèåß!"
+
+#
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Ìïéñáßï ëÜèïò! Áäõíáìßá åðáíáðñüóâáóçò ôïõ ãñáììáôïêéâùôßïõ!"
+
+#
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Áäõíáìßá êëåéäþìáôïò ôïõ ãñáììáôïêéâùôßïõ!"
+
+#
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+"sync: ôï mbox Ý÷åé ôñïðïðïéçèåß, äåí õðÜñ÷ïõí ôñïðïðïéçìÝíá ìçíýìáôá!\n"
+"(áíáöÝñáôå áõôü ôï óöÜëìá)"
+
+#
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "ÅããñáöÞ ìçíõìÜôùí... %d (%d%%)"
+
+#
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "ÅöáñìïãÞ ôùí áëëáãþí..."
+
+#
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Ç åããñáöÞ áðÝôõ÷å! ÌÝñïò ôïõ ãñáììáôïêéâùôßïõ áðïèçêåýôçêå óôï %s"
+
+#
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "Áäõíáìßá åðáíáðñüóâáóçò ôïõ ãñáììáôïêéâùôßïõ!"
+
+#
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Åðáíáðñüóâáóç óôï ãñáììáôïêéâþôéï..."
+
+#
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Ìåôáêßíçóç óôï: "
+
+#
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Ìç Ýãêõñïò áñéèìüò äåßêôç"
+
+#
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Êáììßá êáôá÷þñçóç"
+
+#
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Äåí ìðïñåßôå íá ìåôáêéíçèåßôå ðáñáêÜôù."
+
+#
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Äåí ìðïñåßôå íá ìåôáêéíçèåßôå ðáñáðÜíù."
+
+#
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Åßóôå óôçí ôåëåõôáßá óåëßäá."
+
+#
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Åßóôå óôçí ðñþôç óåëßäá."
+
+#
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "Ç ðñþôç êáôá÷þñçóç åìöáíßæåôáé."
+
+#
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "Ç ôåëåõôáßá êáôá÷þñçóç åìöáíßæåôáé."
+
+#
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Åßóôå óôçí ôåëåõôáßá êáôá÷þñçóç."
+
+#
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Åßóôå óôçí ðñþôç êáôá÷þñçóç."
+
+#
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "ÁíáæÞôçóç ãéá: "
+
+#
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "ÁíÜóôñïöç áíáæÞôçóç ãéá: "
+
+#
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "ÊáíÝíá ó÷Ýäéï áíáæÞôçóçò."
+
+#
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Äå âñÝèçêå."
+
+#
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "Êáììßá óçìåéùìÝíç åßóïäïò."
+
+#
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "Äåí Ý÷åé åöáñìïóôåß áíáæÞôçóç ãéá áõôü ôï ìåíïý."
+
+#
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "Äåí Ý÷åé åöáñìïóôåß ìåôáêßíçóç ãéá ôïõò äéáëüãïõò."
+
+#
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Óçìåéþóåéò äåí õðïóôçñßæïíôáé."
+
+#
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "ÁíÜãíùóç %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr "maildir_commit_message(): áäõíáìßá ïñéóìïý ÷ñüíïõ óôï áñ÷åßï"
+
+#: muttlib.c:835
+#, fuzzy
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "Ôï áñ÷åßï åßíáé öÜêåëïò, áðïèÞêåõóç õðü áõôïý;"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "Ôï áñ÷åßï åßíáé öÜêåëïò, áðïèÞêåõóç õðü áõôïý;"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Áñ÷åßï õðü öÜêåëï:"
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "Ôï áñ÷åßï õðÜñ÷åé, (o)äéáãñáöÞ ôïõ õðÜñ÷ïíôïò, (a)ðñüóèåóç, (c)Üêõñï;"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "oac"
+
+#
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "Áäõíáìßá åããñáöÞò ôïõ ìçíýìáôïò óôï POP ãñáììáôïêéâþôéï."
+
+#
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "Ôï %s äåí åßíáé ãñáììáôïêéâþôéï!"
+
+#
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Ðñüóèåóç ìçíõìÜôùí óôï %s;"
+
+#
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "¸êëåéóå ç óýíäåóç óôï %s"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "Ôï SSL äåí åßíáé äéáèÝóéìï."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "Áðïôõ÷ßá åíôïëÞò ðñïóýíäåóçò"
+
+#
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "ÓöÜëìá óôç óõíïìéëßá ìå ôï %s (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr ""
+
+#
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "ÁíáæÞôçóç ôïõ %s..."
+
+#
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Áäõíáìßá åýñåóçò ôïõ äéáêïìéóôÞ \"%s\""
+
+#
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Óýíäåóç óôï %s..."
+
+#
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "Áäõíáìßá óýíäåóçò óôï %s (%s)."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "Áðïôõ÷ßá óôçí åýñåóç áñêåôÞò åíôñïðßáò óôï óýóôçìá óáò"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "ÁðïèÞêåõóç åíôñïðßáò: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "Ôï %s Ý÷åé áíáóöáëÞ äéêáéþìáôá!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "Ôï SSL áðåíåñãïðïéÞèçêå ëüãù ëÞøçò åíôñïðßáò"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "I/O óöÜëìá"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "ìç êáèïñéóìÝíï óöÜëìá ðñùôïêüëëïõ"
+
+#
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "SSL áðÝôõ÷å: %s"
+
+#
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "Áäõíáìßá óôç ëÞøç ðéóôïðïéçôéêïý áðü ôï ôáßñé"
+
+#
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "Óýíäåóç SSL ÷ñçóéìïðïéþíôáò ôï %s (%s)"
+
+#
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "¶ãíùóôï"
+
+#
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[áäõíáìßá õðïëïãéóìïý]"
+
+#
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[ìç Ýãêõñç çìåñïìçíßá]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "Ç ðéóôïðïßçóç ôïõ äéáêïìéóôÞ äåí åßíáé áêüìá Ýãêõñç"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "Ôï ðéóôïðïéçôéêü ôïõ äéáêïìéóôÞ Ýëçîå"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Áõôü ôï ðéóôïðïéçôéêü áíÞêåé óôï:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Áõôü ôï ðéóôïðïéçôéêü åêäüèçêå áðü ôï:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Áõôü ôï ðéóôïðïéçôéêü åßíáé Ýãêõñï"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   áðü  %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "    ðñïò %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Áðïôýðùìá: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "¸ëåã÷ïò Ðéóôïðïéçôéêïý SSL"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(r)áðüññéøç, (o)áðïäï÷Þ ìéá öïñÜ, (a)áðïäï÷Þ ðÜíôá"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "roa"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(r)áðüññéøç, (o)áðïäï÷Þ ìéá öïñÜ"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "ro"
+
+#
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "¸îïäïò "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Ðñïåéäïðïßçóç: Áäõíáìßá áðïèÞêåõóçò ðéóôïðïéçôéêïý"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "Ôï ðéóôïðïéçôéêü áðïèçêåýôçêå"
+
+#
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Ï áñéèìüò êëåéäùìÜôùí îåðåñÜóôçêå, îåêëåßäùìá ôïõ %s;"
+
+#
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "Áäõíáìßá dotlock ôïõ %s.\n"
+
+#
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "Ôï üñéï ÷ñüíïõ îåðåñÜóôçêå êáôÜ ôçí ðñïóðÜèåéá êëåéäþìáôïò ìå fcntl!"
+
+#
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "ÁíáìïíÞ ãéá ôï êëåßäùìá fcntl... %d"
+
+#
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "Ôï üñéï ÷ñüíïõ îåðåñÜóôçêå êáôÜ ôçí ðñïóðÜèåéá êëåéäþìáôïò flock!"
+
+#
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "ÁíáìïíÞ ãéá ðñïóðÜèåéá flock... %d"
+
+#
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "Áäõíáìßá êëåéäþìáôïò ôïõ %s\n"
+
+#
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "ÁíÜãíùóç %s..."
+
+#
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "ÅããñáöÞ %s..."
+
+#
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "Áäõíáìßá óõã÷ñïíéóìïý ôïõ ãñáììáôïêéâùôßïõ %s!"
+
+#
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Ìåôáêßíçóç áíáãíùóìÝíùí ìçíõìÜôùí óôï %s;"
+
+#
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Êáèáñéóìüò %d äéåãñáììÝíïõ ìçíýìáôïò;"
+
+#
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Êáèáñéóìüò %d äéåãñáììÝíùí ìçíõìÜôùí;"
+
+#
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Ìåôáêßíçóç áíáãíùóìÝíùí ìçíõìÜôùí óôï %s..."
+
+#
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "Äåí Ýãéíå áëëáãÞ óôï ãñáììáôïêéâþôéï "
+
+#
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d êñáôÞèçêáí, %d ìåôáêéíÞèçêáí, %d äéáãñÜöçêáí."
+
+#
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d êñáôÞèçêáí, %d äéáãñÜöçêáí."
+
+#
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr "ÐáôÞóôå '%s' ãéá íá åíåñãïðïéÞóåôå ôçí åããñáöÞ!"
+
+#
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "×ñçóéìïðïéÞóôå ôï 'toggle-write' ãéá íá åíåñãïðïéÞóåôå ôçí åããñáöÞ!"
+
+#
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "Ôï ãñáììáôïêéâþôéï åßíáé óçìåéùìÝíï ìç åããñÜøéìï. %s"
+
+#
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "Ôï ãñáììáôïêéâþôéï óçìåéþèçêå."
+
+#
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Áäõíáìßá åããñáöÞò ôïõ ìçíýìáôïò"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "Äåí åßíáé äéáèÝóéìï óå áõôü ôï ìåíïý."
+
+#
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "ÐñïçãÓåë"
+
+#
+#: pager.c:1447
+msgid "NextPg"
+msgstr "ÅðüìÓåë"
+
+#
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "¼øçÐñïóÜñô"
+
+#
+#: pager.c:1454
+msgid "Next"
+msgstr "Åðüìåíï"
+
+#
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "Åìöáíßæåôáé ç âÜóç ôïõ ìçíýìáôïò."
+
+#
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "Åìöáíßæåôáé ç áñ÷Þ ôïõ ìçíýìáôïò."
+
+#
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "ÁíÜóôñïöç áíáæÞôçóç: "
+
+#
+#: pager.c:1955
+msgid "Search: "
+msgstr "ÁíáæÞôçóç:"
+
+#
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "Ç âïÞèåéá Þäç åìöáíßæåôáé."
+
+#
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "¼÷é Üëëï êáèïñéóìÝíï êåßìåíï."
+
+#
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "¼÷é Üëëï ìç êáèïñéóìÝíï êåßìåíï ìåôÜ áðü êáèïñéóìÝíï."
+
+#
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "ôï ðïëõìåñÝò ìÞíõìá äåí Ý÷åé ïñéïèÝôïõóá ðáñÜìåôñï!"
+
+#
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "ËÜèïò óôçí Ýêöñáóç: %s"
+
+#
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Ìç Ýãêõñç ìÝñá ôïõ ìÞíá: %s"
+
+#
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Ìç Ýãêõñïò ìÞíáò: %s"
+
+#
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "Ìç Ýãêõñïò áíáöïñéêþò ìÞíáò: %s"
+
+#
+#: pattern.c:528
+msgid "error in expression"
+msgstr "óöÜëìá óôçí Ýêöñáóç"
+
+#
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "óöÜëìá óôï ìïíôÝëï óôï: %s"
+
+#
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: ìç Ýãêõñç åíôïëÞ"
+
+#
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "Ôï %c: äåí õðïóôçñßæåôáé óå áõôÞ ôçí êáôÜóôáóç"
+
+#
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "Ýëëåéøç ðáñáìÝôñïõ"
+
+#
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "áôáßñéáóôç ðáñÝíèåóç/åéò: %s"
+
+#
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "Üäåéï ìïíôÝëï/ìïñöÞ"
+
+#
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "ëÜèïò: Üãíùóôç äéåñãáóßá %d (áíÝöåñå áõôü ôï óöÜëìá)."
+
+#
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Óýíôáîç ìïíôÝëïõ áíáæÞôçóçò..."
+
+#
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "ÅêôÝëåóç åíôïëÞò óôá ðáñüìïéá ìçíýìáôá..."
+
+#
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "ÊáíÝíá ìÞíõìá äåí ôáéñéÜæåé óôá êñéôÞñéá."
+
+#
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "Ç áíáæÞôçóç Ýöèáóå óôï ôÝëïò ÷ùñßò íá âñåé üìïéï"
+
+#
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "Ç áíáæÞôçóç Ýöèáóå óôçí áñ÷Þ ÷ùñßò íá âñåé üìïéï"
+
+#
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Ç áíáæÞôçóç äéáêüðçêå."
+
+#
+# pgp.c:146
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "Ç öñÜóç-êëåéäß PGP Ý÷åé îå÷áóôåß."
+
+#
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- ÓöÜëìá: áäõíáìßá óôç äçìéïõñãßá õðïäéåñãáóßáò PGP! --]\n"
+
+#
+# pgp.c:669 pgp.c:894
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- ÔÝëïò ôçò åîüäïõ PGP --]\n"
+"\n"
+
+#
+# pgp.c:353
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- ÅÍÁÑÎÇ ÌÇÍÕÌÁÔÏÓ PGP --]\n"
+"\n"
+
+#
+# pgp.c:355
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- ÅÍÁÑÎÇ ÏÌÁÄÁÓ ÄÇÌÏÓÉÙÍ ÊËÅÉÄÉÙÍ PGP --]\n"
+
+#
+# pgp.c:357
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- ÅÍÁÑÎÇ ÕÐÏÃÅÃÑÁÌÌÅÍÏÕ PGP ÌÇÍÕÌÁÔÏÓ --]\n"
+"\n"
+
+#
+# pgp.c:459
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- ÔÅËÏÓ ÌÇÍÕÌÁÔÏÓ PGP --]\n"
+
+#
+# pgp.c:461
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- ÔÅËÏÓ ÏÌÁÄÁÓ ÄÇÌÏÓÉÙÍ ÊËÅÉÄÉÙÍ PGP --]\n"
+
+#
+# pgp.c:463
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- ÔÅËÏÓ ÕÐÏÃÅÃÑÁÌÌÅÍÏÕ PGP ÌÇÍÕÌÁÔÏÓ --]\n"
+
+#
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- ÓöÜëìá: äå ìðüñåóå íá âñåèåß ç áñ÷Þ ôïõ ìçíýìáôïò PGP! --]\n"
+"\n"
+
+#
+# pgp.c:801
+#: pgp.c:662
+#, fuzzy
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Åóùôåñéêü óöÜëìá. ÐëçñïöïñÞóôå <roessler@guug.de>."
+
+#
+# pgp.c:865
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- ÓöÜëìá: áäõíáìßá óôç äçìéïõñãßá õðïäéåñãáóßáò PGP! --0]\n"
+"\n"
+
+#
+# pgp.c:958
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- ÓöÜëìá: êáêïöôéáãìÝíï ìÞíõìá PGP/MIME! --]\n"
+"\n"
+
+#
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- ÓöÜëìá: áäõíáìßá äçìéïõñãßáò ðñïóùñéíïý áñ÷åßïõ! --]\n"
+
+#
+# pgp.c:980
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- Ôá åðüìåíá äåäïìÝíá åßíáé êñõðôïãñáöçìÝíá ìÝóù PGP/MIME --]\n"
+"\n"
+
+#
+# pgp.c:988
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- ÔÝëïò äåäïìÝíùí êñõðôïãñáöçìÝíùí ìÝóù PGP/MIME --]\n"
+
+#
+# pgp.c:1070
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "Áäõíáìßá áíïßãìáôïò õðïäéåñãáóßáò PGP!"
+
+#
+# pgp.c:1194
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "Íá ÷ñçóéìïðïéçèåß keyID = \"%s\" ãéá ôï %s;"
+
+#
+# pgp.c:1200
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "ÅéóÜãåôå keyID ãéá ôï %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "Áäõíáìßá êëÞóçò ôïõ PGP"
+
+#
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "ËÞøç êëåéäéïý PGP..."
+
+#: pgpkey.c:486
+#, fuzzy
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "¼ëá ôá üìïéá êëåéäéÜ åßíáé óçìåéùìÝíá óáí ëçãìÝíá/Üêõñá."
+
+#
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "ÄéáëÝîôå "
+
+#
+# pgpkey.c:178
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "ÅëÝãîôå êëåéäß "
+
+#
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "¼ìïéá PGP êëåéäéÜ <%s>."
+
+#
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "¼ìïéá PGP êëåéäéÜ \"%s\"."
+
+#
+# pgpkey.c:210 pgpkey.c:387
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "Áäõíáìßá áíïßãìáôïò /dev/null"
+
+#
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Áäõíáìßá äçìéïõñãßáò ðñïóùñéíïý áñ÷åßïõ"
+
+#
+# pgpkey.c:236
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "ID êëåéäéïý: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr ""
+"Áõôü ôï êëåéäß äåí ìðïñåß íá ÷ñçóéìïðïéçèåß ëçãìÝíï/á÷ñçóôåõìÝíï/Üêõñï."
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "Ôï ID åßíáé ëçãìÝíï/á÷ñçóôåõìÝíï/Üêõñï."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "Ôï ID Ý÷åé ìç ïñéóìÝíç åãêõñüôçôá."
+
+#
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "Ôï ID äåí åßíáé Ýãêõñï."
+
+#
+# pgpkey.c:259
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "Ôï ID åßíáé ìüíï ìåñéêþò Ýãêõñï."
+
+#
+# pgpkey.c:262
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s ÈÝëåôå óßãïõñá íá ÷ñçóéìïðïéÞóåôå ôï êëåéäß;"
+
+#
+# pgpkey.c:369
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Ðáñáêáëþ ãñÜøôå ôï ID ôïõ êëåéäéïý: "
+
+#
+# commands.c:87 commands.c:95 pgp.c:1373 pgpkey.c:220
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "ÊëÞóç ôïõ pgp..."
+
+#
+# pgpkey.c:416
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "Êëåéäß PGP %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Åýñåóç üìïéùí êëåéäéþí ìå \"%s\"..."
+
+#
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "Ç åíôïëÞ TOP äåí õðïóôçñßæåôå áðü ôï äéáêïìéóôÞ."
+
+#
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "Áäõíáìßá åããñáöÞò åðéêåöáëßäáò óôï ðñïóùñéíü áñ÷åßï!"
+
+#
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "Ç åíôïëÞ UIDL äåí õðïóôçñßæåôå áðü ôï äéáêïìéóôÞ."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "%s åßíáé ìç Ýãêõñç POP äéáäñïìÞ"
+
+#
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "ËÞøç ëßóôáò ìçíõìÜôùí..."
+
+#
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "Áäõíáìßá åããñáöÞò ìçíýìáôïò óôï ðñïóùñéíü áñ÷åßï!"
+
+#
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "¸ëåã÷ïò ãéá íÝá ìçíýìáôá..."
+
+#
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "Ï POP host äåí êáèïñßóôçêå."
+
+#
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "Äåí õðÜñ÷åé áëëçëïãñáößá óôï POP ãñáììáôïêéâþôéï."
+
+#
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "ÄéáãñáöÞ ìçíõìÜôùí áðü ôïí åîõðçñåôçôÞ;"
+
+#
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "ÁíÜãíùóç íÝùí ìçíõìÜôùí (%d bytes)..."
+
+#
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "ÓöÜëìá êáôÜ ôçí åããñáöÞ óôï ãñáììáôïêéâþôéï"
+
+#
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d áðü %d ìçíýìáôá äéáâÜóôçêáí]"
+
+#
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "Ç óýíäåóç ìå ôïí åîõðçñåôçôÞ Ýêëåéóå!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Áõèåíôéêïðïßçóç (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Áõèåíôéêïðïßçóç (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "Áõèåíôéêïðïßçóç APOP áðÝôõ÷å."
+
+#
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "Ç åíôïëÞ USER äåí õðïóôçñßæåôå áðü ôï äéáêïìéóôÞ."
+
+#
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "Áäõíáìßá Üöåóçò ôùí ìçíõìÜôùí óôïí åîõðçñåôçôÞ."
+
+#
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "ÓöÜëìá êáôá ôç óýíäåóç óôï äéáêïìéóôÞ: %s"
+
+#
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "Êëåßóéìï óýíäåóçò óôïí åîõðçñåôçôÞ IMAP..."
+
+#
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Åðéâåâáßùóç ôùí åõñåôçñßùí ìçíõìÜôùí..."
+
+#
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Áðþëåéá óýíäåóçò. Åðáíáóýíäåóç óôï äéáêïìéóôÞ POP;"
+
+#
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "ÁíáâëçèÝíôá Ìçíýìáôá"
+
+#
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "Äåí õðÜñ÷ïõí áíáâëçèÝíôá ìçíýìáôá."
+
+#
+# postpone.c:338 postpone.c:358 postpone.c:367
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "ÁêáôÜëëçëç åðéêåöáëßäá PGP"
+
+#
+# postpone.c:338 postpone.c:358 postpone.c:367
+#: postpone.c:479
+msgid "Illegal S/MIME header"
+msgstr "ÁêáôÜëëçëç åðéêåöáëßäá S/MIME"
+
+#
+#: postpone.c:554
+msgid "Decryption failed."
+msgstr "Ç áðïêñõðôïãñÜöçóç áðÝôõ÷å."
+
+#
+#: query.c:46
+msgid "New Query"
+msgstr "ÍÝá Åñþôçóç"
+
+#
+#: query.c:47
+msgid "Make Alias"
+msgstr "Äçìéïõñãßá Øåõäþíõìïõ"
+
+#
+#: query.c:48
+msgid "Search"
+msgstr "ÁíáæÞôçóç"
+
+#
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "ÁíáìïíÞ áðÜíôçóçò..."
+
+#
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Ç åíôïëÞ åñùôÞóåùò äåí êáèïñßóôçêå."
+
+#
+#: query.c:286
+msgid "Query"
+msgstr "Åñþôçóç"
+
+#
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Åñþôçóç: "
+
+#
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Åñþôçóç '%s'"
+
+#
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Äéï÷Ýôåõóç"
+
+#
+#: recvattach.c:53
+msgid "Print"
+msgstr "Åêôýðùóç"
+
+#
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "ÁðïèÞêåõóç..."
+
+#
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Ç ðñïóÜñôçóç áðïèçêåýèçêå."
+
+#
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ! Ðñüêåéôáé íá ãñÜøåéò ðÜíù áðü ôï %s, óõíÝ÷åéá;"
+
+#
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Ç ðñïóÜñôçóç Ý÷åé öéëôñáñéóôåß."
+
+#
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "ÖéëôñÜñéóìá ìÝóù: "
+
+#
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Äéï÷Ýôåõóç óôï: "
+
+#
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "Äåí îÝñù ðùò íá ôõðþóù ôéò %s ðñïóáñôÞóåéò!"
+
+#
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Åêôýðùóç óçìåéùìÝíïõ/ùí ðñïóÜñôçóçò/óåùí;"
+
+#
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Åêôýðùóç ðñïóáñôÞóåùí;"
+
+#
+#: recvattach.c:938
+msgid "Can't decrypt encrypted message!"
+msgstr "Áäõíáìßá áðïêñõðôïãñÜöçóçò ôïõ êñõðôïãñáöçìÝíïõ ìçíýìáôïò!"
+
+#
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "ÐñïóáñôÞóåéò"
+
+#
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "Äåí õðÜñ÷ïõí åðéìÝñïõò ôìÞìáôá ãéá íá åìöáíéóôïýí."
+
+#
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "Áäõíáìßá äéáãñáöÞò ðñïóÜñôçóçò áðü ôïí åîõðçñåôçôÞ POP."
+
+#
+#: recvattach.c:1056
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr ""
+"Ç äéáãñáöÞ ðñïóáñôÞóåùí áðü êñõðôïãñáöçìÝíá ìçíýìáôá äåí õðïóôçñßæåôáé."
+
+#
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Ìüíï ç äéáãñáöÞ ðïëõìåñþí ðñïóáñôÞóåùí õðïóôçñßæåôáé."
+
+#
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Ìðïñåßôå íá äéáâéâÜóåôå ìüíï ìÞíõìá/ìÝñç rfc822"
+
+#
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing message!"
+msgstr "ÓöÜëìá êáôÜ ôçí áðïóôïëÞ ôïõ ìçíýìáôïò."
+
+#
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing messages!"
+msgstr "ÓöÜëìá êáôÜ ôçí áðïóôïëÞ ôïõ ìçíýìáôïò."
+
+#
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Áäõíáìßá ðñüóâáóçò óôï ðñïóùñéíü áñ÷åßï %s."
+
+#
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "Ðñïþèçóç óáí ðñïóáñôÞóåéò;"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+"Áäõíáìßá áðïêùäéêïðïßçóçò üëùí ôùí óçìåéùìÝíùí ðñïóáñôÞóåùí. Ðñïþèçóç-MIME "
+"ôùí Üëëùí;"
+
+#
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Ðñïþèçóç åíóùìáôùìÝíïõ MIME;"
+
+#
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "Áäõíáìßá äçìéïõñãßáò ôïõ %s."
+
+#
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Áäõíáìßá åýñåóçò óçìåéùìÝíùí ìçíõìÜôùí."
+
+#
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "Äåí âñÝèçêáí ëßóôåò óõæçôÞóåùí!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+"Áäõíáìßá áðïêùäéêïðïßçóçò üëùí ôùí óçìåéùìÝíùí ðñïóáñôÞóåùí. MIME-"
+"encapsulate ôéò Üëëåò;"
+
+#
+#: remailer.c:480
+msgid "Append"
+msgstr "Ðñüóèåóç"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Åßóïäïò"
+
+#
+#: remailer.c:482
+msgid "Delete"
+msgstr "ÄéáãñáöÞ"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "OK"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "Áäõíáìßá ëÞøçò ôçò type2.list ôïõ mixmaster!"
+
+#
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "ÅðéëïãÞ ìéáò áëõóßäáò åðáíáðïóôïëÝùí."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr ""
+"ÓöÜëìá: ôï %s äåí ìðïñåß íá åßíáé ï ôåëéêüò åðáíáðïóôïëÝáò ôçò áëõóßäáò."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Ïé áëõóßäåò Mixmaster åßíáé ðåñéïñéóìÝíåò óå %d óôïé÷åßá."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "Ç áëõóßäá åðáíáðïóôïëÝùí åßíáé Þäç Üäåéá."
+
+#
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "¸÷åôå Þäç åðéëÝîåé ôï ðñþôï óôïé÷åßï ôçò áëõóßäáò."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "¸÷åôå Þäç åðéëÝîåé ôï ôåëåõôáßï óôïé÷åßï ôçò áëõóßäáò."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Ï Mixmaster äåí äÝ÷åôáé Cc Þ Bcc åðéêåöáëßäåò."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr ""
+"Ðáñáêáëþ ïñßóôå óùóôÜ ôçí ìåôáâëçôÞ ôïõ ïíüìáôïò ôïõ óõóôÞìáôïò üôáí "
+"÷ñçóéìïðïéåßôå ôï mixmaster!"
+
+#
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "ÓöÜëìá óôçí áðïóôïëÞ ìçíýìáôïò, ôåñìáôéóìüò èõãáôñéêÞò ìå %d.\n"
+
+#
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "ÓöÜëìá êáôÜ ôçí áðïóôïëÞ ôïõ ìçíýìáôïò."
+
+#
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "ÁêáôÜëëçëá ìïñöïðïéçìÝíç åßóïäïò ãéá ôï ôýðï %s óôç \"%s\" ãñáììÞ %d"
+
+#
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Äåí êáèïñßóôçêå äéáäñïìÞ mailcap"
+
+#
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "Ç åßóïäïò mailcap ãéá ôï ôýðï %s äå âñÝèçêå"
+
+#
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: ðïëý ëßãá ïñßóìáôá"
+
+#
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: ðÜñá ðïëëÜ ïñßóìáôá"
+
+#
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Äåí õðÜñ÷åé èÝìá, íá åãêáôáëåßøù;"
+
+#
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Äåí õðÜñ÷åé èÝìá, åãêáôÜëåéøç."
+
+#
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "ÁðÜíôçóç óôï %s%s;"
+
+#
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "ÓõíÝ÷åéá óôï %s%s;"
+
+#
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "ÊáíÝíá óçìåéùìÝíï ìÞíõìá äåí åßíáé ïñáôü!"
+
+#
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Óõìðåñßëçøç ôïõ ìçíýìáôïò óôçí áðÜíôçóç;"
+
+#
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Óõìðåñßëçøç êáèïñéóìÝíïõ ìçíýìáôïò..."
+
+#
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "Áäõíáìßá óõìðåñßëçøçò üëùí ôùí ìçíõìÜôùí ðïõ æçôÞèçêáí!"
+
+#
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "Ðñïþèçóç óáí ðñïóÜñôçóç;"
+
+#
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Åôïéìáóßá ðñïùèçìÝíïõ ìçíýìáôïò ..."
+
+#
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "ÁíÜêëçóç áíáâëçèÝíôïò ìçíýìáôïò;"
+
+#
+#: send.c:1336
+msgid "Edit forwarded message?"
+msgstr "Åðåîåñãáóßá ðñïùèçìÝíïõ ìçíýìáôïò;"
+
+#
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Ìáôáßùóç áðïóôïëÞò ìç ôñïðïðïéçìÝíïõ ìçíýìáôïò;"
+
+#
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Ìáôáßùóç áðïóôïëÞò ìç ôñïðïðïéçìÝíïõ ìçíýìáôïò."
+
+#
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "Ôï ãñÜììá äåí åóôÜëç."
+
+#
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Ôï ìÞíõìá áíåâëÞèç."
+
+#
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Äåí Ý÷ïõí êáèïñéóôåß ðáñáëÞðôåò!"
+
+#
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Äåí êáèïñßóôçêáí ðáñáëÞðôåò."
+
+#
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Äåí õðÜñ÷åé èÝìá, áêýñùóç áðïóôïëÞò;"
+
+#
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Äåí êáèïñßóôçêå èÝìá."
+
+#
+#: send.c:1526
+msgid "Sending message..."
+msgstr "ÁðïóôïëÞ ìçíýìáôïò..."
+
+#
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Áäõíáìßá áðïóôïëÞò ôïõ ìçíýìáôïò."
+
+#
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Ôï ãñÜììá åóôÜëç."
+
+#
+#: send.c:1672
+msgid "Sending in background."
+msgstr "ÁðïóôïëÞ óôï ðáñáóêÞíéï."
+
+#
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "Äå âñÝèçêå ðáñÜìåôñïò ïñéïèÝôçóçò! [áíáöÝñáôå áõôü ôï óöÜëìá]"
+
+#
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "Ôï %s äåí õðÜñ÷åé ðéá!"
+
+#
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "Ôï %s äåí åßíáé êáíïíéêü áñ÷åßï."
+
+#
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "Áäõíáìßá áíïßãìáôïò ôïõ %s"
+
+#
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "ÓöÜëìá êáôÜ ôçí áðïóôïëÞ ìçíýìáôïò, ôåñìáôéóìüò èõãáôñéêÞò ìå %d (%s)."
+
+#
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "¸îïäïò ôçò äéåñãáóßáò áðïóôïëÞò"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr ""
+
+#
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s...  ÅãêáôÜëåéøç.\n"
+
+#
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "Åíôïðéóìüò ôïõ %s...  ÅãêáôÜëåéøç.\n"
+
+#
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Åíôïðéóìüò óÞìáôïò %d...  ÅãêáôÜëåéøç.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr "ÅìðéóôåõìÝíï   "
+
+#: smime.c:303
+msgid "Verified  "
+msgstr "ÅðéâåâáéùìÝíï  "
+
+#: smime.c:306
+msgid "Unverified"
+msgstr "Ìç ÅðéâåâáéùìÝíï"
+
+#
+#: smime.c:309
+msgid "Expired   "
+msgstr "¸ëçîå   "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr "ÁíáêëÞèçêå   "
+
+#
+#: smime.c:315
+msgid "Invalid   "
+msgstr "Ìç Ýãêõñï   "
+
+#
+#: smime.c:318
+msgid "Unknown   "
+msgstr "¶ãíùóôï   "
+
+#
+# pgp.c:1200
+#: smime.c:347
+msgid "Enter keyID: "
+msgstr "ÅéóÜãåôå ôï keyID: "
+
+#
+#: smime.c:370
+#, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "¼ìïéá ðéóôïðïéçôéêÜ S/MIME \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr "Ôï ID %s äåí Ý÷åé åðéâåâáéùèåß. Óßãïõñá íá ãßíåé ÷ñÞóç ôïõ ãéá %s ;"
+
+#
+# pgp.c:1194
+#: smime.c:523 smime.c:592
+#, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "×ñÞóç ôïõ (ìç åìðéóôåõìÝíïõ) ID %s ãéá ôï %s "
+
+#
+# pgp.c:1194
+#: smime.c:526 smime.c:595
+#, c-format
+msgid "Use ID %s for %s ?"
+msgstr "×ñÞóç ôïõ ID = %s ãéá ôï %s ;"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+"Ðñïåéäïðïßçóç: Äåí Ý÷åé ïñéóôåß åìðéóôïóýíç óôï ID %s. (ðëÞêôñï. ãéá "
+"óõíÝ÷åéá)"
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr "Äåí âñÝèçêáí (Ýãêõñá) ðéóôïðïéçôéêÜ ãéá ôï %s."
+
+#
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "ÓöÜëìá: áäõíáìßá äçìéïõñãßáò õðïäéåñãáóßáò OpenSSL!"
+
+#
+#: smime.c:1197
+msgid "no certfile"
+msgstr "êáíÝíá áñ÷åßï ðéóôïðïéçôéêþí"
+
+#
+#: smime.c:1200
+msgid "no mbox"
+msgstr "êáíÝíá ãñáììáôïêéâþôéï"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr "Êáììßá Ýîïäïò áðü OpenSSL.."
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr "Ðñïåéäïðïßçóç: Äåí âñÝèçêå åíäéÜìåóï ðéóôïðïéçôéêü."
+
+#
+# pgp.c:1070
+#: smime.c:1426
+msgid "Can't open OpenSSL subprocess!"
+msgstr "Áäõíáìßá åêêßíçóçò õðïäéåñãáóßáò OpenSSL!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr "Êáììßá Ýîïäïò áðü OpenSSL.."
+
+#
+# pgp.c:669 pgp.c:894
+#: smime.c:1629 smime.c:1751
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- ÔÝëïò ôçò åîüäïõ OpenSSL --]\n"
+"\n"
+
+#
+#: smime.c:1712 smime.c:1722
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- ÓöÜëìá: áäõíáìßá äçìéïõñãßáò õðïäéåñãáóßáò OpenSSL! --]\n"
+
+#
+# pgp.c:980
+#: smime.c:1755
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr "[-- Ôá åðüìåíá äåäïìÝíá åßíáé êñõðôïãñáöçìÝíá ìÝóù S/MIME --]\n"
+
+#
+# pgp.c:676
+#: smime.c:1758
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr "[-- Ôá åðüìåíá äåäïìÝíá åßíáé õðïãåãñáììÝíá ìå S/MIME --]\n"
+
+#
+# pgp.c:988
+#: smime.c:1822
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- ÔÝëïò äåäïìÝíùí êñõðôïãñáöçìÝíùí ìÝóù S/MIME --]\n"
+
+#
+# pgp.c:682
+#: smime.c:1824
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- ÔÝëïò äåäïìÝíùí õðïãåãñáììÝíùí ìå S/MIME --]\n"
+
+#
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Ôáêôïðïßçóç ãñáììáôïêéâùôßïõ..."
+
+#
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr ""
+"Áäõíáìßá åýñåóçò ôçò ëåéôïõñãßáò ôáîéíüìçóçò! [áíáöÝñáôå áõôü ôï óöÜëìá]"
+
+#
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(êáíÝíá ãñáììáôïêéâþôéï)"
+
+#
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "Ôï ôñÝ÷ïí ìÞíõìá äåí åßíáé ïñáôü óå áõôÞ ôç ðåñéïñéóìÝíç üøç"
+
+#
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "Ôï ôñÝ÷ïí ìÞíõìá äåí åßíáé äéáèÝóéìï."
+
+#
+# commands.c:87 commands.c:95 pgp.c:1373 pgpkey.c:220
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "ÊëÞóç ôïõ OpenSSL..."
+
+#
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "Äéáâßâáóç ìçíýìáôïò óôï %s...;"
+
+#
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "Äéáâßâáóç ìçíõìÜôùí óôï %s...;"
+
+#
+# compose.c:133
+#~ msgid "ewsabf"
+#~ msgstr "ewsabf"
diff --git a/po/eo.gmo b/po/eo.gmo
new file mode 100644 (file)
index 0000000..de62fea
Binary files /dev/null and b/po/eo.gmo differ
diff --git a/po/eo.po b/po/eo.po
new file mode 100644 (file)
index 0000000..92f39e4
--- /dev/null
+++ b/po/eo.po
@@ -0,0 +1,4202 @@
+# Mesaøoj por la programo "mutt".
+# Edmund GRIMLEY EVANS <edmundo@rano.org>, 2000-2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Mutt 1.5.5.1\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2003-11-12 22:03+0000\n"
+"Last-Translator: Edmund GRIMLEY EVANS <edmundo@rano.org>\n"
+"Language-Team: eo <eo@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-3\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "Uzantonomo æe %s: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "Pasvorto por %s@%s: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Fino"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Forviþi"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Malforviþi"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Elekto"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Helpo"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "Vi ne havas adresaron!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Adresaro"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Aldonu nomon: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "En la adresaro jam estas nomo kun tiu adreso!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr "Averto: Æi tiu nomo eble ne funkcios. Æu ripari øin?"
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Adreso: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr "Eraro: '%s' estas malbona IDN."
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Plena nomo: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] Æu akcepti?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Skribi al dosiero: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Adreso aldonita."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Nomþamblono ne estas plenumebla. Æu daýrigi?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "\"compose\" en Mailcap-dosiero postulas %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "Eraro dum ruligo de \"%s\"!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Malsukceso malferi dosieron por analizi æapa¼ojn."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Malsukceso malferi dosieron por forigi æapa¼ojn."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr ""
+"En la Mailcap-dosiero mankas \"compose\" por %s; malplena dosiero estas "
+"kreita."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "\"edit\" en Mailcap-dosiero postulas %%s"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "En la Mailcap-dosiero mankas \"edit\" por %s"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "Neniu Mailcap-regulo kongruas. Traktas kiel tekston."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "MIME-speco ne difinita. Ne povas vidigi parton."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Ne povas krei filtrilon."
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Ne povas krei filtrilon"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "Skriberaro!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Mi ne scias presi tion!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Listo"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Masko"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s ne estas dosierujo."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Poþtfakoj [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Abonita [%s], Dosieromasko: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Dosierujo [%s], Dosieromasko: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Ne povas aldoni dosierujon!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Neniu dosiero kongruas kun la dosieromasko"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Kreado funkcias nur æe IMAP-poþtfakoj"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Forviþado funkcias nur æe IMAP-poþtfakoj"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Æu vere forviþi la poþtfakon \"%s\"?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "Poþtfako forviþita."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "Poþtfako ne forviþita."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Iri al la dosierujo: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Eraro dum legado de dosierujo."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Dosieromasko: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Inversa ordigo laý (d)ato, (a)lfabete, (g)rando, aý (n)e ordigu? "
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Ordigo laý (d)ato, (a)lfabete, (g)rando, aý (n)e ordigu? "
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "dagn"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Nova dosieronomo: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Ne povas rigardi dosierujon"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Eraro dum vidigo de dosiero"
+
+#: buffy.c:442
+msgid "New mail in "
+msgstr "Nova mesaøo en "
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: terminalo ne kapablas je koloro"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: koloro ne ekzistas"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: objekto ne ekzistas"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: komando validas nur por indeksobjekto"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: Nesufiæe da argumentoj"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Mankas argumentoj"
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: nesufiæe da argumentoj"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: nesufiæe da argumentoj"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: nekonata trajto"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "nesufiæe da argumentoj"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "tro da argumentoj"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "implicitaj koloroj ne funkcias"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "Æu kontroli PGP-subskribon?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Ne povis krei dumtempan dosieron!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Ne povas krei vidig-filtrilon"
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "Ne povis kopii mesaøon"
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr "S/MIME-subskribo estis sukcese kontrolita."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr "Posedanto de S/MIME-atestilo ne kongruas kun sendinto."
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr "S/MIME-subskribo NE povis esti kontrolita."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "PGP-subskribo estis sukcese kontrolita."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "PGP-subskribo NE povis esti kontrolita."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Komando: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Redirekti mesaøon al: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Redirekti markitajn mesaøojn al: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "Eraro dum analizo de adreso!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr "Malbona IDN: '%s'"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Redirekti mesaøon al %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Redirekti mesaøojn al %s"
+
+#: commands.c:294 recvcmd.c:192
+msgid "Message not bounced."
+msgstr "Mesaøo ne redirektita."
+
+#: commands.c:294 recvcmd.c:192
+msgid "Messages not bounced."
+msgstr "Mesaøoj ne redirektitaj."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Mesaøo redirektita."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Mesaøoj redirektitaj."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "Ne povas krei filtrilprocezon"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Filtri per komando: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "Neniu pres-komando estas difinita."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "Æu presi mesaøon?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Æu presi markitajn mesaøojn?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "Mesaøo presita"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Mesaøoj presitaj"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "Ne eblis presi mesaøon"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "Ne eblis presi mesaøojn"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Inversa ordigo laý (d)ato/d(e)/(r)ecv/(t)emo/(a)l/(f)adeno/(n)esortite/(g)"
+"rando/(p)oentoj?: "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Ordigo laý (d)ato/d(e)/(r)ecv/(t)emo/(a)l/(f)adeno/(n)esortite/(g)rando/(p)"
+"oentoj?: "
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dertafngp"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Þelkomando: "
+
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "Malkodita skribi%s al poþtfako"
+
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "Malkodita kopii%s al poþtfako"
+
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "Malæifrita skribi%s al poþtfako"
+
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "Malæifrita kopii%s al poþtfako"
+
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "Skribi%s al poþtfako"
+
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "Kopii%s al poþtfako"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " markitajn"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Kopias al %s ..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "Æu konverti al %s æe sendado?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Content-Type þanøita al %s."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "Signaro þanøita al %s; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "ne konvertas"
+
+#: commands.c:914
+msgid "converting"
+msgstr "konvertas"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Mankas mesaøopartoj."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Sendi"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Interrompi"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Aldoni dosieron"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Priskribo"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Subskribi, Æifri"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Æifri"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Subskribi"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Neæifrita"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " subskribi kiel: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<implicite>"
+
+#: compose.c:149
+msgid "Encrypt with: "
+msgstr "Æifri per: "
+
+#: compose.c:165
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "PGP æ(i)fri, (s)ubskribi, subskribi (k)iel, (a)mbaý, aý (f)orgesi? "
+
+#: compose.c:166
+msgid "esabf"
+msgstr "iskaf"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Subskribi kiel: "
+
+#: compose.c:227
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"S/MIME æ(i)fri, (s)ubskribi, subskribi (p)er, subskribi (k)iel, (a)mbaý, aý "
+"(f)orgesi? "
+
+#: compose.c:228
+msgid "eswabf"
+msgstr "ispkaf"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, aý (f)orgesi? "
+
+#: compose.c:238
+msgid "12345f"
+msgstr "12345f"
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] ne plu ekzistas!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] modifita. Æu aktualigi kodadon?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Partoj"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr "Averto: '%s' estas malbona IDN."
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Vi ne povas forviþi la solan parton."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr "Malbona IDN en \"%s\": '%s'"
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "Aldonas la elektitajn dosierojn ..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "Ne povas aldoni %s!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Malfermu poþtfakon por aldoni mesaøon el øi"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "Ne estas mesaøoj en tiu poþtfako."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Marku la mesaøojn, kiujn vi volas aldoni!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Ne povas aldoni!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "Rekodado efikas nur al tekstaj partoj."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "Æi tiu parto ne estos konvertita."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "Æi tiu parto estos konvertita."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Nevalida kodado."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Æu skribi kopion de æi tiu mesaøo?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Renomi al: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "Ne povas ekzameni la dosieron %s: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Nova dosiero: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Content-Type havas la formon bazo/subspeco"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Nekonata Content-Type %s"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Ne povas krei dosieron %s"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "Oni malsukcesis krei kunsenda¼on"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Æu prokrasti æi tiun mesaøon?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Skribi mesaøon al poþtfako"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Skribas mesaøon al %s ..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "Mesaøo skribita."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr "S/MIME jam elektita. Æu nuligi kaj daýrigi? "
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr "PGP jam elektita. Æu nuligi kaj daýrigi? "
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr " (nuna horo: %c)"
+
+#: crypt.c:71
+#, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- %s eligo sekvas%s --]\n"
+
+#: crypt.c:86
+msgid "Passphrase(s) forgotten."
+msgstr "Pasfrazo(j) forgesita(j)."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Donu PGP-pasfrazon:"
+
+#: crypt.c:147
+msgid "Enter SMIME passphrase:"
+msgstr "Donu S/MIME-pasfrazon:"
+
+#: crypt.c:192
+msgid "Create a traditional (inline) PGP message?"
+msgstr "Æu krei tradician (\"inline\") PGP-mesaøon?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "Alvokas PGP ..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr "S/MIME-mesaøoj sen informoj pri enhavo ne funkcias."
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr "Provas eltiri PGP-þlosilojn ...\n"
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr "Provas eltiri S/MIME-atestilojn ...\n"
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- Eraro: maløusta strukturo de multipart/signed! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- Eraro: nekonata multipart/signed-protokolo %s! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Averto: ne povas kontroli %s/%s-subskribojn. --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- La sekvaj datenoj estas subskribitaj --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Averto: ne povas trovi subskribon. --]\n"
+"\n"
+
+#: crypt.c:924
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Fino de subskribitaj datenoj --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "jes"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "ne"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Æu eliri el Mutt?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "nekonata eraro"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Premu klavon por daýrigi ..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " ('?' por listo): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Neniu poþtfako estas malfermita."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Ne estas mesaøoj."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "Poþtfako estas nurlega."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "Funkcio nepermesata dum elektado de aldonoj."
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "Mankas videblaj mesaøoj"
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "Ne povas þanøi skribostaton æe nurlega poþtfako!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "Þanøoj al poþtfako estos skribitaj æe eliro."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Þanøoj al poþtfako ne estos skribitaj."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Fini"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Skribi"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Nova mesaøo"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Respondi"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Respondi al grupo"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "Poþtfako estis modifita de ekstere. Flagoj povas esti maløustaj."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Nova mesaøo en æi tiu poþtfako"
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "Poþtfako estis modifita de ekstere."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Mankas markitaj mesaøoj."
+
+#: curs_main.c:653 menu.c:896
+msgid "Nothing to do."
+msgstr "Nenio farenda."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Salti al mesaøo: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "Argumento devas esti mesaønumero."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Tiu mesaøo ne estas videbla."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Nevalida mesaønumero."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Forviþi mesaøojn laý la þablono: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "Nenia þablono estas aktiva."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Þablono: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Limigi al mesaøoj laý la þablono: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Æu eliri el Mutt?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Marki mesaøojn laý la þablono: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Malforviþi mesaøojn laý la þablono: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Malmarki mesaøojn laý la þablono: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Malfermi poþtfakon nurlege"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Malfermi poþtfakon"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s ne estas poþtfako."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Eliri el Mutt sen skribi?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Vi estas æe la lasta mesaøo."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Mankas neforviþitaj mesaøoj."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Vi estas æe la unua mesaøo."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "Seræo rekomencis æe la komenco."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "Seræo rekomencis æe la fino."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Mankas novaj mesaøoj"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Mankas nelegitaj mesaøoj"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " en æi tiu limigita rigardo"
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "Ne povas þanøi la flagon 'important' æe POP-servilo."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Ne restas fadenoj."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Vi estas æe la unua fadeno."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "Fadenoj ne estas þaltitaj."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "Fadeno enhavas nelegitajn mesaøojn."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "Ne eblas redakti mesaøon en POP-servilo."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tenþovi linion, kiu komenciøas per unuopa ~\n"
+"~b adresoj\taldoni adresojn al la linio Bcc:\n"
+"~c adresoj\taldoni adresojn al la linio Cc:\n"
+"~f mesaøoj\tinkluzivi mesaøojn\n"
+"~F mesaøoj\tsame kiel ~f, sed inkluzivi ankaý la æapon\n"
+"~h\t\tredakti la mesaøoæapon\n"
+"~m mesaøoj\tinkluzivi kaj citi mesaøojn\n"
+"~M mesaøoj\tsame kiel ~m, sed inkluzivi ankaý la æapojn\n"
+"~[\t\tpresi la mesaøon\n"
+"~q\t\tskribi la dosieron kaj eliri el la redaktilo\n"
+"~r dosiero\t\tlegi dosieron en la redaktilon\n"
+"~t adresoj\taldoni adresojn al la linio To:\n"
+"~u\t\tredakti la antaýan linion denove\n"
+"~v\t\tredakti mesaøon per la redaktilo $visual\n"
+"~w dosiero\tskribi mesaøon al dosiero\n"
+"~x\t\tfor¼eti þanøojn kaj eliri el la redaktilo\n"
+"~?\t\tvidi æi tiun informon\n"
+".\t\tsola en linio finas la enigon\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: nevalida mesaønumero.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Finu mesaøon per . sur propra linio)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "Mankas poþtfako.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Mesaøo enhavas:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(daýrigi)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "mankas dosieronomo.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Nul linioj en mesaøo.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr "Malbona IDN en %s: '%s'\n"
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: nekonata redaktokomando (~? por helpo)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "Ne povis krei dumtempan poþtfakon: %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "Ne povis skribi al dumtempa poþtfako: %s"
+
+#: editmsg.c:101
+#, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "Ne povis stumpigi dumtempan poþtfakon: %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "Mesaøodosiero estas malplena!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "Mesaøo ne modifita!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "Ne povas malfermi mesaøodosieron: %s"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Ne povas aldoni al poþtfako: %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Eraro. Konservas dumtempan dosieron: %s"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Þalti flagon"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Malþalti flagon"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr "[-- Eraro: Neniu parto de Multipart/Alternative estis montrebla! --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Parto #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Speco: %s/%s, Kodado: %s, Grando: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Aýtomata vidigo per %s --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Alvokas aýtomatan vidigon per: %s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- Ne povas ruli %s. --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Erareligo de %s --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr "[-- Eraro: parto message/external ne havas parametro access-type --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Æi tiu %s/%s-parto "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(grando %s bitokoj) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "estas forviþita --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- je %s --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- nomo: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Æi tiu %s/%s-parto ne estas inkluzivita, --]\n"
+
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr "[-- kaj la indikita ekstera fonto eksvalidiøis. --]\n"
+
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr "[-- kaj Mutt ne kapablas je la indikita alirmaniero %s. --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Eraro: multipart/signed ne havas parametron protocol!"
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Eraro: multipart/encrypted ne havas parametron protocol!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Ne povas malfermi dumtempan dosieron!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s ne estas konata "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(uzu '%s' por vidigi æi tiun parton)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "(bezonas klavodifinon por 'view-attachments'!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: ne povas aldoni dosieron"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "ERARO: bonvolu raporti æi tiun cimon"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<NEKONATA>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Øeneralaj klavodifinoj:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Funkcioj, kiuj ne havas klavodifinon:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Helpo por %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: Ne povas fari unhook * de en hoko."
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: nekonata speco de hook: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: Ne povas forviþi %s de en %s."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "Nenia rajtiøilo disponata"
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Rajtiøas (anonime) ..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "Anonima rajtiøo malsukcesis."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Rajtiøas (CRAM-MD5) ..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "CRAM-MD5-rajtiøo malsukcesis."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Rajtiøas (GSSAPI) ..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "GSSAPI-rajtiøo malsukcesis."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "LOGIN estas malþaltita æe æi tiu servilo."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Salutas ..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "Saluto malsukcesis."
+
+#: imap/auth_sasl.c:112
+#, c-format
+msgid "Authenticating (%s)..."
+msgstr "Rajtiøas (%s) ..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "SASL-rajtiøo malsukcesis."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "%s ne estas valida IMAP-vojo"
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "Prenas nomspacojn ..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Prenas liston de poþtfakoj ..."
+
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "Poþtfako ne ekzistas"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Krei poþtfakon: "
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "Poþtfako devas havi nomon."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Poþtfako kreita."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "Poþtfako fermita"
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Fatala eraro. Mesaøonombro ne kongruas!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "Fermas la konekton al %s ..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Æi tiu IMAP-servilo estas antikva. Mutt ne funkcias kun øi."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr "Neatendita respondo ricevita de servilo: %s"
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "Æu sekura konekto per TLS?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "Ne povis negoci TLS-konekton"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "Elektas %s ..."
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "Eraro dum malfermado de poþtfako"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Ne povas aldoni al IMAP-poþtfako æe æi tiu servilo"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "Æu krei %s?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Fermas la konekton al la IMAP-servilo ..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "Markas %d mesaøojn kiel forviþitajn ..."
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "Forviþo malsukcesis"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Skribas mesaøoflagojn ... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Forviþas mesaøojn de la servilo ..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbox: EXPUNGE malsukcesis"
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "CLOSE malsukcesis"
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "Malbona nomo por poþtfako"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "Abonas %s ..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "Malabonas %s ..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "Ne povas preni æapojn de æi tiu versio de IMAP-servilo."
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "Ne povis krei dumtempan dosieron %s"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Prenas mesaøoæapojn ... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Prenas mesaøon ..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "La mesaøindekso estas maløusta. Provu remalfermi la poþtfakon."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Alþutas mesaøon ..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "Kopias %d mesaøojn al %s ..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "Kopias mesaøon %d al %s ..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "Æu daýrigi?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "adresaro: mankas adreso"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr "Averto: Malbona IDN '%s' en adreso '%s'.\n"
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "nevalida æaplinio"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: nekonata ordigmaniero"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): eraro en regula esprimo: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: nekonata variablo"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "reset: prefikso ne permesata"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "reset: valoro ne permesata"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s estas þaltita"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s estas malþaltita"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: nevalida poþtfakospeco"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: nevalida valoro"
+
+#: init.c:1312
+#, c-format
+msgid "%s: Unknown type."
+msgstr "%s: Nekonata speco."
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: nekonata speco"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Ne povas ekzameni la dosieron %s: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s ne estas normala dosiero."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Eraro en %s, linio %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: eraroj en %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: legado æesis pro tro da eraroj en %s"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: eraro æe %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: tro da argumentoj"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: nekonata komando"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Eraro en komandlinio: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "ne povas eltrovi la hejmdosierujon"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "ne povas eltrovi la uzantonomo"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Cirkla makroo trovita."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Klavo ne estas difinita."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Klavo ne estas difinita. Premu '%s' por helpo."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: tro da argumentoj"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: nekonata menuo"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "malplena klavoserio"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: tro da argumentoj"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: nekonata funkcio"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: malplena klavoserio"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: tro da argumentoj"
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: mankas argumentoj"
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s: funkcio ne ekzistas"
+
+#: keymap.c:912
+msgid "Enter keys (^G to abort): "
+msgstr "Donu þlosilojn (^G por nuligi): "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr "Signo = %s, Okume = %o, Dekume = %d"
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "malplena funkcio"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr "fino de kondiæa rulo (noop)"
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "devigi vidigon de parto per mailcap"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "vidigi parton kiel tekston"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "þalti aý malþalti montradon de subpartoj"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "iri al fino de paøo"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "redirekti mesaøon al alia adreso"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "elekti novan dosieron en æi tiu dosierujo"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "vidigi dosieron"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "montri la nomon de la elektita dosiero"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "aboni æi tiun poþtfakon (nur IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "malaboni æi tiun poþtfakon (nur IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "elekti, æu vidi æiujn, aý nur abonitajn poþtfakojn (nur IMAP)"
+
+#: keymap_alldefs.h:18
+msgid "list mailboxes with new mail"
+msgstr "listigi poþtfakojn kun nova mesaøo"
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "þanøi la dosierujon"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "kontroli poþtfakojn pri novaj mesaøoj"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "aldoni dosiero(j)n al æi tiu mesaøo"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "aldoni mesaøo(j)n al æi tiu mesaøo"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "redakti la BCC-liston"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "redakti la CC-liston"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "redakti priskribon de parto"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "redakti kodadon de parto"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "donu dosieron, al kiu la mesaøo estu skribita"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "redakti la dosieron aldonotan"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "redakti la From-kampon"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "redakti la mesaøon kun æapo"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "redakti la mesaøon"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "redakti parton, uzante mailcap"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "redakti la kampon Reply-To"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "redakti la temlinion de le mesaøo"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "redakti la liston de ricevontoj"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "krei novan poþtfakon (nur IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "redakti MIME-enhavospecon de parto"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "akiri dumtempan kopion de parto"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "apliki ispell al la mesaøo"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "verki novan parton per mailcap"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "þalti aý malþalti rekodadon de æi tiu parto"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "skribi æi tiun mesaøon por sendi øin poste"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "renomi/movi aldonitan dosieron"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "sendi la mesaøon"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "þalti dispozicion inter \"inline\" kaj \"attachment\""
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "elekti, æu forviþi la dosieron post sendado"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "aktualigi la kodadon de parto"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "skribi la mesaøon al poþtfako"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "kopii mesaøon al dosiero/poþtfako"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "aldoni sendinton al adresaro"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "movi registron al fino de ekrano"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "movi registron al mezo de ekrano"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "movi registron al komenco de ekrano"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "fari malkoditan kopion (text/plain)"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "fari malkoditan kopion (text/plain) kaj forviþi"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "forviþi registron"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "forviþi æi tiun poþtfakon (nur IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "forviþi æiujn mesaøojn en subfadeno"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "forviþi æiujn mesaøojn en fadeno"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "montri plenan adreson de sendinto"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "montri mesaøon kaj (mal)þalti montradon de plena æapo"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "montri mesaøon"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "redakti la krudan mesaøon"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "forviþi la signon antaý la tajpmontrilo"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "movi la tajpmontrilon unu signon maldekstren"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "movi la tajpmontrilon al la komenco de la vorto"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "salti al la komenco de la linio"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "rondiri tra enir-poþtfakoj"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "kompletigi dosieronomon aý nomon el la adresaro"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "kompletigi adreson kun demando"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "forviþi la signon sub la tajpmontrilo"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "salti al la fino de la linio"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "movi la tajpmontrilon unu signon dekstren"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "movi la tajpmontrilon al la fino de la vorto"
+
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr "rulumi malsupren tra la histori-listo"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "rulumi supren tra la histori-listo"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "forviþi signojn de la tajpmontrilo øis linifino"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "forviþi signojn de la tajpmontrilo øis fino de la vorto"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "forviþi æiujn signojn en la linio"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "forviþi la vorton antaý la tajpmontrilo"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "citi la sekvontan klavopremon"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "interþanøi la signon sub la tajpmontrilo kun la antaýa"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "majuskligi la vorton"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "konverti la vorton al minuskloj"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "konverti la vorton al majuskloj"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "enigi muttrc-komandon"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "enigi dosierþablonon"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "eliri el æi tiu menuo"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "filtri parton tra þelkomando"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "iri al la unua registro"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "þanøi la flagon 'grava' de mesaøo"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "plusendi mesaøon kun komentoj"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "elekti la aktualan registron"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "respondi al æiuj ricevintoj"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "rulumi malsupren duonon de paøo"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "rulumi supren duonon de paøo"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "æi tiu ekrano"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "salti al indeksnumero"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "iri al la lasta registro"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "respondi al specifita dissendolisto"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "ruligi makroon"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "verki novan mesaøon"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "malfermi alian poþtfakon"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "malfermi alian poþtfakon nurlege"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "malþalti flagon æe mesaøo"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "forviþi mesaøojn laý þablono"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "devigi prenadon de mesaøoj de IMAP-servilo"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "elþuti mesaøojn de POP-servilo"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "iri al la unua mesaøo"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "iri al la lasta mesaøo"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "montri nur la mesaøojn, kiuj kongruas kun þablono"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "salti al la unua nova mesaøo"
+
+#: keymap_alldefs.h:113
+msgid "jump to the next new or unread message"
+msgstr "salti al la sekva nova aý nelegita mesaøo"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "salti al la sekva subfadeno"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "salti al la sekva fadeno"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "salti al la sekva neforviþita mesaøo"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "salti al la sekva nelegita mesaøo"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "salti al patra mesaøo en fadeno"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "salti al la antaýa fadeno"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "salti al la antaýa subfadeno"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "salti al la antaýa neforviþita mesaøo"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "salti al la antaýa nova mesaøo"
+
+#: keymap_alldefs.h:123
+msgid "jump to the previous new or unread message"
+msgstr "salti al la antaýa nova aý nelegita mesaøo"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "salti al la antaýa nelegita mesaøo"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "marki la aktualan fadenon kiel legitan"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "marki la aktualan subfadenon kiel legitan"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "þalti flagon æe mesaøo"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "skribi þanøojn al poþtfako"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "marki mesaøojn laý þablono"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "malforviþi mesaøojn laý þablono"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "malmarki mesaøojn laý þablono"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "iri al la mezo de la paøo"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "iri al la sekva registro"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "rulumi malsupren unu linion"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "iri al la sekva paøo"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "salti al la fino de la mesaøo"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "þalti aý malþalti montradon de citita teksto"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "supersalti cititan tekston"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "salti al la komenco de mesaøo"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "trakti mesaøon/parton per þelkomando"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "iri al la antaýa registro"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "rulumi supren unu linion"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "iri al la antaýa paøo"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "presi la aktualan registron"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "demandi eksteran programon pri adresoj"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "aldoni novajn demandrezultojn al jamaj rezultoj"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "skribi þanøojn al poþtfako kaj eliri"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "revoki prokrastitan mesaøon"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "rekrei la enhavon de la ekrano"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{interna}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "respondi al mesaøo"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "uzi æi tiun mesaøon kiel modelon por nova mesaøo"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "skribi mesaøon/parton al dosiero"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "seræi pri regula esprimo"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "seræi malantaýen per regula esprimo"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "seræi pri la sekva trafo"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "seræi pri la sekva trafo en la mala direkto"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "þalti aý malþalti alikolorigon de seræþablono"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "alvoki komandon en subþelo"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "ordigi mesaøojn"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "ordigi mesaøojn en inversa ordo"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "marki la aktualan registron"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "apliki la sekvan komandon al æiuj markitaj mesaøoj"
+
+#: keymap_alldefs.h:164
+msgid "apply next function ONLY to tagged messages"
+msgstr "apliki la sekvan funkcion NUR al markitaj mesaøoj"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "marki la aktualan subfadenon"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "marki la aktualan fadenon"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "þanøi la flagon 'nova' de mesaøo"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "(mal)þalti, æu la poþtfako estos reskribita"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "(mal)þali, æu vidi poþtfakojn aý æiujn dosierojn"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "iri al la supro de la paøo"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "malforviþi la aktualan registron"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "malforviþi æiujn mesaøojn en fadeno"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "malforviþi æiujn mesaøojn en subfadeno"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "montri la version kaj daton de Mutt"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "vidigi parton, per mailcap, se necese"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "montri MIME-partojn"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr "montri la klavokodon por klavopremo"
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "montri la aktivan limigþablonon"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "(mal)kolapsigi la aktualan fadenon"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "(mal)kolapsigi æiujn fadenojn"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "aldoni publikan PGP-þlosilon"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "montri PGP-funkciojn"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "sendi publikan PGP-þlosilon"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "kontroli publikan PGP-þlosilon"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "vidi la uzant-identigilon de la þlosilo"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "kontroli pri klasika PGP"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "Akcepti la konstruitan æenon"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "Aldoni plusendilon al la æeno"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "Enþovi plusendilon en la æenon"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "Forviþi plusendilon el la æeno"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "Elekti la antaýan elementon de la æeno"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "Elekti la sekvan elementon de la æeno"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "Sendi la mesaøon tra mixmaster-plusendiloæeno"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "fari malæifritan kopion kaj forviþi"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "fari malæifritan kopion"
+
+#: keymap_alldefs.h:196
+msgid "wipe passphrase(s) from memory"
+msgstr "forviþi pasfrazo(j)n el memoro"
+
+#: keymap_alldefs.h:197
+msgid "extract supported public keys"
+msgstr "eltiri publikajn þlosilojn"
+
+#: keymap_alldefs.h:198
+msgid "show S/MIME options"
+msgstr "montri S/MIME-funkciojn"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr "Entjera troo - ne povas asigni memoron!"
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Mankas memoro!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"Por kontakti la kreantojn, bonvolu skribi al <mutt-dev@mutt.org>.\n"
+"Por raporti cimon, bonvolu uzi la programon flea(1).\n"
+
+#: main.c:50
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Kopirajto (C) 1996-2002 Michael R. Elkins kaj aliaj.\n"
+"Mutt venas kun ABSOLUTE NENIA GARANTIO; por detaloj tajpu 'mutt -vv'.\n"
+"Mutt estas libera programo, kaj vi rajtas pludoni kopiojn\n"
+"sub difinitaj kondiæoj; tajpu 'mutt -v' por detaloj.\n"
+
+#: main.c:56
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Kopirajto (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Kopirajto (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Kopirajto (C) 1997-2002 Thomas Roessler <roessler@guug.de>\n"
+"Kopirajto (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Kopirajto (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Kopirajto (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Kopirajto (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"Multaj aliaj homoj ne menciitaj æi tie kontribuis multe da\n"
+"programlinioj, riparoj, kaj sugestoj.\n"
+"\n"
+"    Æi tiu programo estas libera; vi povas pludoni kopiojn kaj modifi\n"
+"    øin sub la kondiæoj de la Øenerala Publika Rajtigilo de GNU,\n"
+"    kiel tio estas eldonita de Free Software Foundation; aý versio 2\n"
+"    de la Rajtigilo, aý (laý via elekto) iu sekva versio.\n"
+"\n"
+"    Æi tiu programo estas disdonita kun la espero, ke øi estos utila,\n"
+"    sed SEN IA AJN GARANTIO; eæ sen la implicita garantio de\n"
+"    KOMERCA KVALITO aý ADEKVATECO POR DIFINITA CELO. Vidu la\n"
+"    Øeneralan Publikan Rajtigilon de GNU por pli da detaloj.\n"
+"\n"
+"    Vi devus esti ricevinta kopion de la Øenerala Publika Rajtigilo de\n"
+"    GNU kun æi tiu programo; se ne, skribu al Free Software Foundation,\n"
+"    Inc., 59 Temple Place - Suite 330, Boston, MA  02111, Usono.\n"
+
+#: main.c:94
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"uzado: mutt [ -nRyzZ ] [ -e <kom> ] [ -F <dos> ] [ -m <speco> ] [ -f "
+"<dos> ]\n"
+"       mutt [ -nR ] [ -e <kom> ] [ -F <dos> ] -Q <var> [ -Q <var> ] [...]\n"
+"       mutt [ -nR ] [ -e <kom> ] [ -F <dos> ] -A <nom> [ -A <nom> ] [...]\n"
+"       mutt [ -nx ] [ -e <kom> ] [ -a <dos> ] [ -F <dos> ] [ -H <dos> ] [ -i "
+"<dos> ] [ -s <temo> ] [ -b <adr> ] [ -c <adr> ] <adr> [ ... ]\n"
+"       mutt [ -n ] [ -e <kom> ] [ -F <dos> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"opcioj:\n"
+"  -A <nomo>     traduki la nomon per la adresaro\n"
+"  -a <dosiero>\taldoni dosieron al la mesaøo\n"
+"  -b <adreso>\tspecifi adreson por blinda kopio (BCC)\n"
+"  -c <adreso>\tspecifi adreson por kopio (CC)\n"
+"  -e <komando>\tspecifi komandon por ruligi post la starto\n"
+"  -f <dosiero>\tspecifi la poþtfakon por malfermi\n"
+"  -F <dosiero>\tspecifi alian dosieron muttrc\n"
+"  -H <dosiero>\tspecifi malnetan dosieron por legi la æapon\n"
+"  -i <dosiero>\tspecifi dosieron, kiun Mutt inkluzivu en la respondo\n"
+"  -m <speco>\tspecifi implicitan specon de poþtfakoj\n"
+"  -n\t\tindikas al Mutt ne legi la sisteman dosieron Muttrc\n"
+"  -p\t\trevoki prokrastitan mesaøon\n"
+"  -Q <variablo> pridemandi la valoron de agordo-variablo\n"
+"  -R\t\tmalfermi poþtfakon nurlege\n"
+"  -s <temo>\tspecifi temlinion (en citiloj, se øi enhavas spacetojn)\n"
+"  -v\t\tmontri version kaj parametrojn de la traduka¼o\n"
+"  -x\t\timiti la sendreøimon de mailx\n"
+"  -y\t\telekti poþtfakon specifitan en via listo 'mailboxes'\n"
+"  -z\t\teliri tuj, se ne estas mesaøoj en la poþtfako\n"
+"  -Z\t\tmalfermi la unuan poþtfakon kun nova mesaøo; eliri tuj, se mankas\n"
+"  -h\t\tdoni æi tiun helpmesaøon"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Parametroj de la traduka¼o:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Eraro dum startigo de la terminalo."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Sencimigo æe la nivelo %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "DEBUG ne estis difinita por la tradukado. Ignoras.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s ne ekzistas. Æu krei øin?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "Ne povas krei %s: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Nenia ricevonto specifita.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: ne povas aldoni dosieron.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Mankas poþtfako kun nova poþto."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Neniu enir-poþtfako estas difinita."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "Poþtfako estas malplena."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Legas %s ... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "Poþtfako estas fuþita!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "Poþtfako fuþiøis!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Fatala eraro! Ne povis remalfermi poþtfakon!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Ne povis þlosi poþtfakon!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+"sync: mbox modifita, sed mankas modifitaj mesaøoj! (Raportu æi tiun cimon.)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Skribas mesaøojn ... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "Skribas þanøojn ..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Skribo malsukcesis! Skribis partan poþtfakon al %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "Ne povis remalfermi poþtfakon!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Remalfermas poþtfakon ..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Salti al: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Nevalida indeksnumero."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Neniaj registroj."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Vi ne povas rulumi pli malsupren."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Vi ne povas rulumi pli supren."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Vi estas æe la lasta paøo."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Vi estas æe la unua paøo."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "Unua registro estas montrita."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "Lasta registro estas montrita."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Vi estas æe la lasta registro."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Vi estas æe la lasta registro."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Seræi pri: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Inversa seræo pri: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Mankas seræþablono."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Ne trovita."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "Mankas markitaj registroj."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "Seræo ne eblas por æi tiu menuo."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "Saltado ne funkcias æe dialogoj."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Markado ne funkcias."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "Legas %s ... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr "maildir_commit_message(): ne povas þanøi tempon de dosiero"
+
+#: muttlib.c:835
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "Dosiero estas dosierujo; æu skribi sub øi? [(j)es, (n)e, æ(i)uj]"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr "jni"
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "Tio estas dosierujo; æu skribi dosieron en øi?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Dosiero en dosierujo: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "Dosiero ekzistas; æu (s)urskribi, (a)ldoni, aý (n)uligi?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "san"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "Ne eblas skribi mesaøon al POP-poþtfako."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s ne estas poþtfako!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Æu aldoni mesaøojn al %s?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "Konekto al %s fermita"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL ne estas disponata."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "Antaýkonekta komando malsukcesis."
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Eraro dum komunikado kun %s (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr "Malbona IDN \"%s\"."
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "Seræas pri %s ..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Ne povis trovi la servilon \"%s\""
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Konektiøas al %s ..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "Ne povis konektiøi al %s (%s)."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "Ne trovis sufiæe da entropio en via sistemo"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "Plenigas entropiujon: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s havas malsekurajn permesojn!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "SSL malþaltita pro manko de entropio"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "eraro æe legado aý skribado"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "nespecifita protokoleraro"
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "SSL malsukcesis: %s"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "Ne povas akiri SSL-atestilon"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "SSL-konekto per %s (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "Nekonata"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[ne povas kalkuli]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[nevalida dato]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "Atestilo de servilo ankoraý ne validas"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "Atestilo de servilo estas eksvalidiøinta"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Æi tiu atestilo apartenas al:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Æi tiu atestilo estis eldonita de:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Æi tiu atestilo estis valida"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "     de %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "     al %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Fingrospuro: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "Kontrolo de SSL-atestilo"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(m)alakcepti, akcepti (u)nufoje, (a)kcepti æiam"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "mua"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(m)alakcepti, akcepti (u)nufoje"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "mu"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Eliri  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Averto: Ne povis skribi atestilon"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "Atestilo skribita"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Tro da þlosoj; æu forigi la þloson por %s?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "Ne povas þlosi %s.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "Tro da tempo pasis dum provado akiri fcntl-þloson!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Atendas fcntl-þloson ... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "Tro da tempo pasis dum provado akiri flock-þloson!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Atendas flock-þloson ... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "Ne povis þlosi %s\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "Legas %s ..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "Skribas %s ..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "Ne povis aktualigi la poþtfakon %s!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Æu movi legitajn mesaøojn al %s?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Æu forpurigi %d forviþitan mesaøon?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Æu forpurigi %d forviþitajn mesaøojn?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Movas legitajn mesaøojn al %s ..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "Poþtfako estas neþanøita."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d retenite, %d movite, %d forviþite."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d retenite, %d forviþite."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr " Premu '%s' por (mal)þalti skribon"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "Uzu 'toggle-write' por reebligi skribon!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "Poþtfako estas markita kiel neskribebla. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "Poþtfako sinkronigita."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Ne povas skribi mesaøon"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr "Entjera troo - ne povas asigni memoron."
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "Ne disponata en æi tiu menuo."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "AntPø"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "SekvPø"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Vidi Partojn"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Sekva"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "Fino de mesaøo estas montrita."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "Vi estas æe la komenco de la mesaøo"
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Inversa seræo: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Seræo: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "Helpo estas nun montrata."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "Ne plu da citita teksto."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "Ne plu da necitita teksto post citita teksto."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "Plurparta mesaøo ne havas limparametron!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Eraro en esprimo: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Nevalida tago de monato: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Nevalida monato: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "Nevalida relativa dato: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "eraro en esprimo"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "eraro en þablono æe: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: nevalida komando"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: ne funkcias en æi tiu reøimo"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "parametro mankas"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "krampoj ne kongruas: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "malplena þablono"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "eraro: nekonata funkcio %d (raportu æi tiun cimon)"
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Tradukas seræþablonon ..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Ruligas komandon pri trafataj mesaøoj ..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "Mankas mesaøoj, kiuj plenumas la kondiæojn"
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "Seræo atingis la finon sen trovi trafon"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "Seræo atingis la komencon sen trovi trafon"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Seræo interrompita."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "PGP-pasfrazo forgesita."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Eraro: ne povas krei PGP-subprocezon! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- Fino de PGP-eligo --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr "[-- KOMENCO DE PGP-MESAØO --]\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- KOMENCO DE PUBLIKA PGP-ÞLOSILO --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- KOMENCO DE PGP-SUBSKRIBITA MESAØO --]\n"
+"\n"
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- FINO DE PGP-MESAØO --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- FINO DE PUBLIKA PGP-ÞLOSILO --]\n"
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- FINO DE PGP-SUBSKRIBITA MESAØO --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Eraro: ne povas trovi komencon de PGP-mesaøo! --]\n"
+"\n"
+
+#: pgp.c:662
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Interna eraro. Informu al <roessler@does-not-exist.org>."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Eraro: ne povas krei PGP-subprocezon! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Eraro: misformita PGP/MIME-mesaøo! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Eraro: ne povas krei dumtempan dosieron! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- La sekvaj datenoj estas PGP/MIME-æifritaj --]\n"
+"\n"
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- Fino de PGP/MIME-æifritaj datenoj --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "Ne povas malfermi PGP-subprocezon!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "Æu uzi keyID = \"%s\" por %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "Donu keyID por %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "Ne povas alvoki PGP"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "Prenas PGP-þlosilon ..."
+
+#: pgpkey.c:486
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr ""
+"Æiuj kongruaj þlosiloj estas eksvalidiøintaj, revokitaj, aý malþaltitaj."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Elekti  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Kontroli þlosilon  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "PGP-þlosiloj, kiuj kongruas kun <%s>."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "PGP-þlosiloj, kiuj kongruas kun \"%s\"."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "Ne povas malfermi /dev/null"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Ne povas krei dumtempan dosieron"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "Key ID: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "Æi tiu þlosilo ne estas uzebla: eksvalidiøinta/malþaltita/revokita."
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "ID estas eksvalidiøinta/malþaltita/revokita."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "ID havas nedifinitan validecon."
+
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "ID ne estas valida."
+
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "ID estas nur iomete valida."
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s Æu vi vere volas uzi la þlosilon?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Bonvolu doni la þlosilidentigilon: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "Alvokas PGP ..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "PGP-þlosilo %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Seræas þlosilojn, kiuj kongruas kun \"%s\" ..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "Servilo ne havas la komandon TOP."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "Ne povas skribi la æapa¼on al dumtempa dosiero!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "Servilo ne havas la komandon UIDL."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "%s ne estas valida POP-vojo"
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "Prenas liston de mesaøoj ..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "Ne povas skribi mesaøon al dumtempa dosiero!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "Kontrolas pri novaj mesaøoj ..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "POP-servilo ne estas difinita."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "Mankas novaj mesaøoj en POP-poþtfako."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "Æu forviþi mesaøojn de servilo?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Legas novajn mesaøojn (%d bitokojn) ..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "Eraro dum skribado de poþtfako!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d el %d mesaøoj legitaj]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "Servilo fermis la konekton!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Rajtiøas (SASL) ..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Rajtiøas (APOP) ..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "APOP-rajtiøo malsukcesis."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "Servilo ne havas la komandon USER."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "Ne povas lasi mesaøojn æe la servilo."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "Eraro dum konektiøo al servilo: %s"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "Fermas la konekton al POP-servilo ..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Kontrolas mesaøindeksojn ..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Konekto perdita. Æu rekonekti al POP-servilo?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Prokrastitaj Mesaøoj"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "Mankas prokrastitaj mesaøoj."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "Nevalida PGP-æapo"
+
+#: postpone.c:479
+msgid "Illegal S/MIME header"
+msgstr "Nevalida S/MIME-æapo"
+
+#: postpone.c:554
+msgid "Decryption failed."
+msgstr "Malæifro malsukcesis."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Nova Demando"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Aldoni Nomon"
+
+#: query.c:48
+msgid "Search"
+msgstr "Seræi"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Atendas respondon ..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Demandokomando ne difinita."
+
+#: query.c:286
+msgid "Query"
+msgstr "Demando"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Demando: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Demando '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Tubo"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Presi"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Skribas ..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Parto skribita."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "AVERTO! Vi estas surskribonta %s; æu daýrigi?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Parto filtrita."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Filtri tra: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Trakti per: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "Mi ne scias presi %s-partojn!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Æu presi markitajn partojn?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Æu presi parton?"
+
+#: recvattach.c:938
+msgid "Can't decrypt encrypted message!"
+msgstr "Ne povas malæifri æifritan mesaøon!"
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Partoj"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "Mankas subpartoj por montri!"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "Ne povas forviþi parton de POP-servilo."
+
+#: recvattach.c:1056
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "Mutt ne kapablas forviþi partojn el æifrita mesaøo."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Mutt kapablas forviþi nur multipart-partojn."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Vi povas redirekti nur message/rfc822-partojn."
+
+#: recvcmd.c:213
+msgid "Error bouncing message!"
+msgstr "Eraro dum redirektado de mesaøo!"
+
+#: recvcmd.c:213
+msgid "Error bouncing messages!"
+msgstr "Eraro dum redirektado de mesaøoj!"
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Ne povas malfermi dumtempan dosieron %s."
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "Æu plusendi kiel kunsenda¼ojn?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr "Ne povas malkodi æiujn markitajn partojn. Æu MIME-plusendi la aliajn?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Æu plusendi MIME-pakita?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "Ne povas krei %s."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Ne povas trovi markitajn mesaøojn."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "Neniu dissendolisto trovita!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr "Ne povas malkodi æiujn markitajn partojn. Æu MIME-paki la aliajn?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Aldoni"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Enþovi"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Forviþi"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "Bone"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "Ne povas preni type2.list de mixmaster!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Elekti plusendiloæenon."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "Eraro: %s ne estas uzebla kiel la fina plusendilo de æeno."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Mixmaster-æenoj estas limigitaj al %d elementoj."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "La plusendiloæeno estas jam malplena."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "Vi jam elektis la unuan elementon de la æeno."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "Vi jam elektis la lastan elementon de la æeno."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Mixmaster ne akceptas la kampon Cc aý Bcc en la æapo."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr "Bonvolu doni øustan valoron al \"hostname\", kiam vi uzas mixmaster!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Eraro dum sendado de mesaøo; ido finis per %d.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Eraro dum sendado de mesaøo."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "Maløuste strukturita elemento por speco %s en \"%s\" linio %d"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Neniu mailcap-vojo specifita"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "mailcap-regulo por speco %s ne trovita"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: nesufiæe da argumentoj"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: tro da argumentoj"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Mankas temlinio; æu nuligi?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Mankas temlinio; eliras."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Æu respondi al %s%s?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "Æu respondi grupe al %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "Neniuj markitaj mesaøoj estas videblaj!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Æu inkluzivi mesaøon en respondo?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Inkluzivas cititan mesaøon ..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "Ne povis inkluzivi æiujn petitajn mesaøojn!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "Æu plusendi kiel kunsenda¼on?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Pretigas plusenditan mesaøon ..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Æu revoki prokrastitan mesaøon?"
+
+#: send.c:1336
+msgid "Edit forwarded message?"
+msgstr "Æu redakti plusendatan mesaøon?"
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Æu nuligi nemodifitan mesaøon?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Nemodifita mesaøon nuligita"
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "Mesaøo ne sendita."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Mesaøo prokrastita."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Neniu ricevanto estas specifita!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Neniuj ricevantoj estis specifitaj."
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Mankas temlinio; æu haltigi sendon?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Temlinio ne specifita."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Sendas mesaøon ..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Ne povis sendi la mesaøon."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Mesaøo sendita."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Sendas en fono."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "Nenia limparametro trovita! (Raportu æi tiun cimon.)"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s ne plu ekzistas!"
+
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "%s ne estas normala dosiero."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "Ne povas malfermi %s"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Eraro dum sendado de mesaøo; ido finis per %d (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Eligo de la liverprocezo"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr "Malbona IDN %s dum kreado de resent-from."
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s ... Eliras.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "Ricevis %s ... Eliras.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Ricevis signalon %d ... Eliras.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr "Fidate        "
+
+#: smime.c:303
+msgid "Verified  "
+msgstr "Kontrolite    "
+
+#: smime.c:306
+msgid "Unverified"
+msgstr "Nekontrolite  "
+
+#: smime.c:309
+msgid "Expired   "
+msgstr "Eksvalidiøinte"
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr "Revokite      "
+
+#: smime.c:315
+msgid "Invalid   "
+msgstr "Nevalida      "
+
+#: smime.c:318
+msgid "Unknown   "
+msgstr "Nekonate      "
+
+#: smime.c:347
+msgid "Enter keyID: "
+msgstr "Donu keyID: "
+
+#: smime.c:370
+#, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "S/MIME-atestiloj, kiuj kongruas kun \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr "Identigilo %s estas nekontrolita. Æu vi volas uzi øin por %s?"
+
+#: smime.c:523 smime.c:592
+#, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "Æu uzi (nefidatan!) identigilon %s por %s?"
+
+#: smime.c:526 smime.c:595
+#, c-format
+msgid "Use ID %s for %s ?"
+msgstr "Æu uzi identigilon %s por %s?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+"Averto: Vi ankoraý ne decidis fidi identigilon %s. (ajna klavo por daýrigi)"
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr "Nenia (valida) atestilo trovita por %s."
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "Eraro: ne povis krei OpenSSL-subprocezon!"
+
+#: smime.c:1197
+msgid "no certfile"
+msgstr "mankas certfile"
+
+#: smime.c:1200
+msgid "no mbox"
+msgstr "mankas poþtfako"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr "Nenia eliro de OpenSSL."
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr "Averto: intera atestilo ne trovita."
+
+#: smime.c:1426
+msgid "Can't open OpenSSL subprocess!"
+msgstr "Ne povas malfermi OpenSSL-subprocezon!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr "Nenia eliro de OpenSSL."
+
+#: smime.c:1629 smime.c:1751
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- Fino de OpenSSL-eligo --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Eraro: ne povas krei OpenSSL-subprocezon! --]\n"
+
+#: smime.c:1755
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr "[-- La sekvaj datenoj estas S/MIME-æifritaj --]\n"
+
+#: smime.c:1758
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr "[-- La sekvaj datenoj estas S/MIME-subskribitaj --]\n"
+
+#: smime.c:1822
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- Fino de S/MIME-æifritaj datenoj. --]\n"
+
+#: smime.c:1824
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- Fino de S/MIME-subskribitaj datenoj. --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Ordigas poþtfakon ..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "Ne povis trovi ordigfunkcion! (Raportu æi tiun cimon.)"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(mankas poþtfako)"
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "Patra mesaøo ne estas videbla en æi tiu limigita rigardo."
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "Patra mesaøo ne estas havebla."
+
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "Alvokas PGP ..."
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "Æu redirekti mesaøon al %s ...?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "Æu redirekti mesaøojn al %s ...?"
+
+#~ msgid "ewsabf"
+#~ msgstr "iskaf"
+
+#~ msgid "Certificate *NOT* added."
+#~ msgstr "Atestilo skribita"
+
+#~ msgid "This ID's validity level is undefined."
+#~ msgstr "La valideco de æi tiu ID ne estas difinita."
+
+#~ msgid "[-- expired. --]\n"
+#~ msgstr "[-- eksvalidiøis. --]\n"
+
+#~ msgid "Decode-save"
+#~ msgstr "Malkodita skribi"
+
+#~ msgid "Decode-copy"
+#~ msgstr "Malkodita kopii"
+
+#~ msgid "Decrypt-save"
+#~ msgstr "Malæifrita skribi"
+
+#~ msgid "Decrypt-copy"
+#~ msgstr "Malæifrita kopii"
+
+#~ msgid "Copy"
+#~ msgstr "Kopii"
+
+#~ msgid ""
+#~ "[-- This %s/%s attachment is not included, --]\n"
+#~ "[-- and the indicated external source has --]\n"
+#~ "[-- expired. --]\n"
+#~ msgstr ""
+#~ "[-- Æi tiu %s/%s-parto ne estas inkluzivita, --]\n"
+#~ "[-- kaj la indikita ekstera fonto estas --]\n"
+#~ "[-- eksvalidiøinta. --]\n"
+
+#~ msgid "%s [%s]\n"
+#~ msgstr "%s [%s]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "[-- End of PGP output --]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "[-- Fino de PGP-eligo --]\n"
+#~ "\n"
+
+#~ msgid "Can't stat %s."
+#~ msgstr "Ne povas ekzameni la dosieron %s."
+
+#~ msgid "Authentication method is unknown."
+#~ msgstr "Rajtiøo-metodo ne estas konata."
diff --git a/po/es.gmo b/po/es.gmo
new file mode 100644 (file)
index 0000000..b072193
Binary files /dev/null and b/po/es.gmo differ
diff --git a/po/es.po b/po/es.po
new file mode 100644 (file)
index 0000000..fb164c9
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,4286 @@
+# Spanish translation of mutt
+# Copyright (C) 1999-2001 Boris Wesslowski <Boris@Wesslowski.com>
+msgid ""
+msgstr ""
+"Project-Id-Version: mutt 1.4\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2001-06-08 19:44+02:00\n"
+"Last-Translator: Boris Wesslowski <Boris@Wesslowski.com>\n"
+"Language-Team: -\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "Nombre de usuario en %s: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "Contraseña para %s@%s: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Salir"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Sup."
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Recuperar"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Seleccionar"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Ayuda"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "¡No tiene nombres en la libreta!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Libreta"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Nombre corto: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "¡Este nombre ya está definido en la libreta!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr ""
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Dirección: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr ""
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Nombre: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] ¿Aceptar?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Guardar en archivo: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Dirección añadida."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "No se pudo encontrar el nombre, ¿continuar?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "La entrada \"compose\" en el archivo Mailcap requiere %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "¡Error al ejecutar \"%s\"!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Error al abrir el archivo para leer las cabeceras."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Error al abrir el archivo para quitar las cabeceras."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr ""
+"Falta la entrada \"compose\" de mailcap para %s, creando archivo vacío."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "La entrada \"edit\" en el archivo Mailcap requiere %%s"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "Falta la entrada \"edit\" para %s en el archivo Mailcap"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr ""
+"No hay una entrada correspondiente en el archivo mailcap. Viendo como texto."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "Tipo MIME no definido.  No se puede mostrar el archivo adjunto."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "No se pudo crear el filtro"
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "No se pudo crear filtro"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "¡Error de escritura!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "¡No sé cómo se imprime eso!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Directorio"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Patrón"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s no es un directorio."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Buzones [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Suscrito [%s], patrón de archivos: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Directorio [%s], patrón de archivos: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "¡No se puede adjuntar un directorio!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Ningún archivo coincide con el patrón"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Crear sólo está soportado para buzones IMAP"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Suprimir sólo está soportado para buzones IMAP"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "¿Realmente quiere suprimir el buzón \"%s\"?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "El buzón fue suprimido."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "El buzón no fue suprimido."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Cambiar directorio a:"
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Error leyendo directorio."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Patrón de archivos: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr ""
+"¿Órden inverso por (f)echa, (t)amaño, (a)lfabéticamente o (s)in órden? "
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "¿Ordenar por (f)echa, (t)amaño, (a)lfabéticamente o (s)in órden? "
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "fats"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Nombre del nuevo archivo: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "No se puede mostrar el directorio"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Error al tratar de mostrar el archivo"
+
+#: buffy.c:442
+#, fuzzy
+msgid "New mail in "
+msgstr "Correo nuevo en %s."
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: color no soportado por la terminal"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: color desconocido"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: objeto desconocido"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: comando sólo válido para objetos en el índice"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: parámetros insuficientes"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Faltan parámetros."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: faltan parámetros"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: faltan parámetros"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: atributo desconocido"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "Faltan parámetros"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "Demasiados parámetros"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "No hay soporte para colores estándar"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "¿Verificar firma PGP?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "¡No se pudo crear el archivo temporal!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "No se pudo crear el filtro de muestra"
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "No se pudo copiar el mensaje"
+
+#: commands.c:182
+#, fuzzy
+msgid "S/MIME signature successfully verified."
+msgstr "Firma PGP verificada con éxito."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr ""
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+#, fuzzy
+msgid "S/MIME signature could NOT be verified."
+msgstr "Firma PGP NO pudo ser verificada."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "Firma PGP verificada con éxito."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "Firma PGP NO pudo ser verificada."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Comando: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Rebotar mensaje a: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Rebotar mensajes marcados a: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "¡Dirección errónea!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr ""
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Rebotar mensaje a %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Rebotar mensajes a %s"
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Message not bounced."
+msgstr "Mensaje rebotado."
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Messages not bounced."
+msgstr "Mensajes rebotados."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Mensaje rebotado."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Mensajes rebotados."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "No se pudo crear el proceso del filtro"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Redirigir el mensaje al comando:"
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "No ha sido definida la órden de impresión."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "¿Impimir mensaje?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "¿Imprimir mensajes marcados?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "Mensaje impreso"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Mensajes impresos"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "El mensaje no pudo ser imprimido"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "Los mensajes no pudieron ser imprimidos"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Órden-rev fech(a)/d(e)/(r)ece/a(s)nto/(p)ara/(h)ilo/(n)ada/ta(m)añ/punta(j): "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Órden fech(a)/d(e)/(r)ecep/a(s)unto/(p)ara/(h)ilo/(n)ada/ta(m)año/punta(j)e: "
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "aersphnmj"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Comando de shell: "
+
+#: commands.c:701
+#, fuzzy, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "%s%s en buzón"
+
+#: commands.c:702
+#, fuzzy, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "%s%s en buzón"
+
+#: commands.c:703
+#, fuzzy, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "%s%s en buzón"
+
+#: commands.c:704
+#, fuzzy, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "%s%s en buzón"
+
+#: commands.c:705
+#, fuzzy, c-format
+msgid "Save%s to mailbox"
+msgstr "%s%s en buzón"
+
+#: commands.c:705
+#, fuzzy, c-format
+msgid "Copy%s to mailbox"
+msgstr "%s%s en buzón"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " marcado"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Copiando a %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "¿Convertir a %s al mandar?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Content-Type cambiado a %s."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "El mapa de caracteres fue cambiado a %s; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "dejando sin convertir"
+
+#: commands.c:914
+msgid "converting"
+msgstr "convirtiendo"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "No hay archivos adjuntos."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Mandar"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Abortar"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Adjuntar archivo"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Descrip"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Firmar, cifrar"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Cifrar"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Firmar"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "En claro"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " firmar como: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<por defecto>"
+
+#: compose.c:149
+#, fuzzy
+msgid "Encrypt with: "
+msgstr "Cifrar"
+
+#: compose.c:165
+#, fuzzy
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "¿co(d)ificar, f(i)rmar (c)omo, amb(o)s o ca(n)celar? "
+
+#: compose.c:166
+#, fuzzy
+msgid "esabf"
+msgstr "dicon"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Firmar como: "
+
+#: compose.c:227
+#, fuzzy
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "¿co(d)ificar, f(i)rmar (c)omo, amb(o)s o ca(n)celar? "
+
+#: compose.c:228
+#, fuzzy
+msgid "eswabf"
+msgstr "dicon"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+
+#: compose.c:238
+msgid "12345f"
+msgstr ""
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "¡%s [#%d] ya no existe!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] modificado. ¿Rehacer codificación?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Archivos adjuntos"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr ""
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "No puede borrar la única pieza."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr ""
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "Adjuntando archivos seleccionados..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "¡Imposible adjuntar %s!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Abrir buzón para adjuntar mensaje de"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "No hay mensajes en esa carpeta."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Marque el mensaje que quiere adjuntar."
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "¡Imposible adjuntar!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "Recodificado sólo afecta archivos adjuntos de tipo texto."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "El archivo adjunto actual no será convertido."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "El archivo adjunto actual será convertido."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "La codificación no es válida."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "¿Guardar una copia de este mensaje?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Renombrar a: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, fuzzy, c-format
+msgid "Can't stat %s: %s"
+msgstr "No se pudo encontrar en disco: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Archivo nuevo: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Content-Type es de la forma base/subtipo"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Content-Type %s desconocido"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "No se pudo creal el archivo %s"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "Lo que tenemos aquí es un fallo al producir el archivo a adjuntar"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "¿Posponer el mensaje?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Guardar mensaje en el buzón"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Escribiendo mensaje en %s ..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "Mensaje escrito."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr ""
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr ""
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr ""
+
+#: crypt.c:71
+#, fuzzy, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- Salida de PGP a continuación (tiempo actual: %c) --]\n"
+
+#: crypt.c:86
+#, fuzzy
+msgid "Passphrase(s) forgotten."
+msgstr "Contraseña PGP olvidada."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Entre contraseña PGP:"
+
+#: crypt.c:147
+#, fuzzy
+msgid "Enter SMIME passphrase:"
+msgstr "Entre contraseña PGP:"
+
+#: crypt.c:192
+#, fuzzy
+msgid "Create a traditional (inline) PGP message?"
+msgstr "¿Crear un mensaje de tipo application/pgp?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "Invocando PGP..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr ""
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr ""
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr ""
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- Error: ¡Estructura multipart/signed inconsistente! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- Error: ¡Protocolo multipart/signed %s desconocido! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Advertencia: No se pudieron verificar %s/%s firmas. --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+#, fuzzy
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- Los siguientes datos están firmados --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Advertencia: No se pudieron encontrar firmas. --]\n"
+"\n"
+
+#: crypt.c:924
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Fin de datos firmados --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "sí"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "no"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "¿Salir de Mutt?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "error desconocido"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Presione una tecla para continuar..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " ('?' para lista): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Ningún buzón está abierto."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "No hay mensajes."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "El buzón es de sólo lectura."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "Función no permitida en el modo de adjuntar mensaje."
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "No hay mensajes visibles."
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "¡No se puede cambiar a escritura un buzón de sólo lectura!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "Los cambios al buzón seran escritos al salir del mismo."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Los cambios al buzón no serán escritos."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Salir"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Guardar"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Nuevo"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Responder"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Grupo"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "Buzón fue modificado.  Los indicadores pueden estar mal."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Correo nuevo en este buzón."
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "Buzón fue modificado externamente."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "No hay mensajes marcados."
+
+#: curs_main.c:653 menu.c:896
+#, fuzzy
+msgid "Nothing to do."
+msgstr "Conectando a %s..."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Saltar a mensaje: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "Argumento tiene que ser un número de mensaje."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Ese mensaje no es visible."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Número de mensaje erróneo."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Suprimir mensajes que coincidan con: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "No hay patrón limitante activo."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Límite: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Limitar a mensajes que coincidan con: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "¿Salir de Mutt?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Marcar mensajes que coincidan con: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "No suprimir mensajes que coincidan con: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Desmarcar mensajes que coincidan con: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Abrir buzón en modo de sólo lectura"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Abrir buzón"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s no es un buzón."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "¿Salir de Mutt sin guardar?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Está en el último mensaje."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "No hay mensajes sin suprimir."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Está en el primer mensaje."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "La búsqueda volvió a empezar desde arriba."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "La búsqueda volvió a empezar desde abajo."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "No hay mensajes nuevos"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "No hay mensajes sin leer"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " en esta vista limitada"
+
+#: curs_main.c:1405 pager.c:2337
+#, fuzzy
+msgid "Can't change 'important' flag on POP server."
+msgstr "No se pueden editar mensajes en el servidor POP."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "No hay mas hilos."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Ya está en el primer hilo."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "La muestra por hilos no está activada."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "El hilo contiene mensajes sin leer."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "No se pueden editar mensajes en el servidor POP."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tRenglón empieza con una tilde.\n"
+"~b usuarios\tañadir usuarios al campoBcc:\n"
+"~c usuarios\tañadir usuarios al camp Cc:\n"
+"~f mensajes\tincluir mensajes.\n"
+"~F mensajes\tlo mismo que ~f, pero con el encabezado.\n"
+"~h\t\teditar el encabezado del mensaje.\n"
+"~m mensajes\tincluir y citar mensajes.\n"
+"~M mensajes\tlo mismo que ~m, pero con el encabezado.\n"
+"~p\t\timprimir el mensaje.\n"
+"~q\t\tguardar archivo y salir del editor.\n"
+"~r archivo\t\tleer un archivo con el editor.\n"
+"~t usuarios\tañadir usuarios al campo To:\n"
+"~u\t\teditar el renglón anterior.\n"
+"~v\t\teditar mensaje con el editor definido en $visual .\n"
+"~w archivo\tescribir mensaje a un archivo.\n"
+"~x\t\tcancelar cambios y salir del editor.\n"
+"~?\t\teste mensaje.\n"
+".\t\tsólo en un renglón finaliza la entrada.\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: número de mensaje erróneo.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Termine el mensaje con un . sólo en un renglón)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "No hay buzón.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Mensaje contiene:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(continuar)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "falta el nombre del archivo.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "No hay renglones en el mensaje.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr ""
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: comando de editor deconocido (~? para ayuda)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "no se pudo crear la carpeta temporal: %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "no se pudo escribir la carpeta temporal: %s"
+
+#: editmsg.c:101
+#, fuzzy, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "no se pudo escribir la carpeta temporal: %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "¡El archivo del mensaje está vacío!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "¡El mensaje no fue modificado!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "No se pudo abrir el archivo del mensaje: %s"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "No se pudo agregar a la carpeta: %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Error. Preservando el archivo temporal: %s"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Poner indicador"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Quitar indicador"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[-- ¡Error: no se pudo mostrar ninguna parte de multipart/alternative! --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Archivo adjunto #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Tipo: %s/%s, codificación: %s, tamaño: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Automuestra usando %s --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Invocando comando de automuestra: %s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- No se puede ejecutar %s. --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Error al ejecutar %s --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- Error: Contenido message/external no tiene parámetro acces-type --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Este archivo adjunto %s/%s "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(tamaño %s bytes) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "ha sido suprimido --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- el %s --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- nombre: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, fuzzy, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Este archivo adjunto %s/%s "
+
+#: handler.c:1689
+#, fuzzy
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+"[-- Este archivo adjunto %s/%s no está incluido --]\n"
+"[-- y la fuente externa indicada ha expirado. --]\n"
+
+#: handler.c:1707
+#, fuzzy, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr ""
+"[-- Este archivo adjunto %s/%s no está incluido --]\n"
+"[-- y el tipo de acceso indicado %s no está soportado --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Error: multipart/signed no tiene protocolo."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Error: ¡multipart/encrypted no tiene parámetro de protocolo!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "¡Imposible abrir archivo temporal!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s no está soportado "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(use '%s' para ver esta parte)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "(necesita 'view-attachments' enlazado a una tecla)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: imposible adjuntar archivo"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "ERROR: por favor reporte este fallo"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<DESCONOCIDO>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Enlaces genéricos:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Funciones sin enlazar:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Ayuda para %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: No se puede desenganchar * desde dentro de un gancho."
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: tipo de gancho desconocido: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: No se puede suprimir un %s desde dentro de un %s."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "Falta un método de verificación de autentidad"
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Verificando autentidad (anónimo)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "Autentidad anónima falló."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Verificando autentidad (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "Verificación de autentidad CRAM-MD5 falló."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Verificando autentidad (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "Verificación de autentidad GSSAPI falló."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "LOGIN desactivado en este servidor."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Entrando..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "El login falló."
+
+#: imap/auth_sasl.c:112
+#, fuzzy, c-format
+msgid "Authenticating (%s)..."
+msgstr "Verificando autentidad (APOP)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "Verificación de autentidad SASL falló."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr ""
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "Consiguiendo espacio de nombres..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Consiguiendo lista de carpetas..."
+
+#: imap/browse.c:219
+#, fuzzy
+msgid "No such folder"
+msgstr "%s: color desconocido"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Crear buzón: "
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "El buzón tiene que tener un nombre."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Buzón creado."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "Buzón cerrado"
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "¡Error fatal!  La cuenta de mensajes no está sincronizada."
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "Cerrando conexión a %s..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Este servidor IMAP es ancestral. Mutt no puede trabajar con el."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "¿Asegurar conexión con TLS?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "No se pudo negociar una conexión TLS"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "Seleccionando %s..."
+
+#: imap/imap.c:690
+#, fuzzy
+msgid "Error opening mailbox"
+msgstr "¡Error al escribir el buzón!"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "No es posible agregar a buzones IMAP en este servidor."
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "¿Crear %s?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Cerrando conexión al servidor IMAP..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "Marcando %d mensajes como suprimidos..."
+
+#: imap/imap.c:961
+#, fuzzy
+msgid "Expunge failed"
+msgstr "CLOSE falló"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Guardando indicadores de estado de mensajes... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Eliminando mensajes del servidor..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr ""
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "CLOSE falló"
+
+#: imap/imap.c:1342
+#, fuzzy
+msgid "Bad mailbox name"
+msgstr "Crear buzón: "
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "Suscribiendo a %s..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "Desuscribiendo de %s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr ""
+"No se pueden recoger cabeceras de mensajes de esta versión de servidor IMAP."
+
+#: imap/message.c:84
+#, fuzzy, c-format
+msgid "Could not create temporary file %s"
+msgstr "¡No se pudo crear el archivo temporal!"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Consiguiendo cabeceras de mensajes... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Consiguiendo mensaje..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "El índice de mensajes es incorrecto. Intente reabrir el buzón."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Subiendo mensaje ..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "Copiando %d mensajes a %s..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "Copiando mensaje %d a %s..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "¿Continuar?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "alias: sin dirección"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr ""
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "encabezado erróneo"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: órden desconocido"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): error en expresión regular: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: variable desconocida"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "prefijo es ilegal con reset"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "valor es ilegal con reset"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s está activada"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s no está activada"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: tipo de buzón inválido"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: valor inválido"
+
+#: init.c:1312
+#, fuzzy, c-format
+msgid "%s: Unknown type."
+msgstr "%s: tipo desconocido"
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: tipo desconocido"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "No se pudo encontrar en disco: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s no es un buzón."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Error en %s, renglón %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: errores en %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: lectura fue cancelada por demasiados errores en %s"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: errores en %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: demasiados parámetros"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: comando desconocido"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Error en línea de comando: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "imposible determinar el directorio del usuario"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "imposible determinar nombre del usuario"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Bucle de macros detectado."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "La tecla no tiene enlace a una función."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Tecla sin enlace. Presione '%s' para obtener ayuda."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: demasiados parámetros"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: menú desconocido"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "sequencia de teclas vacía"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: demasiados parámetros"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: función deconocida"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: sequencia de teclas vacía"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: demasiados parámetros"
+
+#: keymap.c:871
+#, fuzzy
+msgid "exec: no arguments"
+msgstr "exec: faltan parámetros"
+
+#: keymap.c:891
+#, fuzzy, c-format
+msgid "%s: no such function"
+msgstr "%s: función deconocida"
+
+#: keymap.c:912
+#, fuzzy
+msgid "Enter keys (^G to abort): "
+msgstr "Entre keyID para %s: "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr ""
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "operación nula"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "forzar la muestra de archivos adjuntos usando mailcap"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "mostrar archivos adjuntos como texto"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "Cambiar muestra de subpartes"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "ir al final de la página"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "reenviar el mensaje a otro usuario"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "seleccione un archivo nuevo en este directorio"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "ver archivo"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "mostrar el nombre del archivo seleccionado"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "suscribir al buzón actual (sólo IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "desuscribir al buzón actual (sólo IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "cambiar entre ver todos los buzones o sólo los suscritos (sólo IMAP)"
+
+#: keymap_alldefs.h:18
+#, fuzzy
+msgid "list mailboxes with new mail"
+msgstr "Ningún buzón con correo nuevo."
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "cambiar directorio"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "revisar buzones por correo nuevo"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "adjuntar archivo(s) a este mensaje"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "adjuntar mensaje(s) a este mensaje"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "editar el campo BCC"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "editar el campo CC"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "editar la descripción del archivo adjunto"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "editar la codificación del archivo adjunto"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "guardar copia de este mensaje en archivo"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "editar el archivo a ser adjunto"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "editar el campo de from"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "editar el mensaje con cabecera"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "editar el mensaje"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "editar el archivo adjunto usando la entrada mailcap"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "editar el campo Reply-To"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "editar el asunto de este mensaje (subject)"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "editar el campo TO"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "crear un buzón nuevo (sólo IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "editar el tipo de archivo adjunto"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "producir copia temporal del archivo adjunto"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "Corrección ortográfica via ispell"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "producir archivo a adjuntar usando entrada mailcap"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "marcar/desmarcar este archivo adjunto para ser recodificado"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "guardar este mensaje para enviarlo después"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "renombrar/mover un archivo adjunto"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "enviar el mensaje"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "cambiar disposición entre incluido/archivo adjunto"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "cambiar si el archivo adjunto es suprimido después de enviarlo"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "refrescar la información de codificado del archivo adjunto"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "guardar el mensaje en un buzón"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "copiar un mensaje a un archivo/buzón"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "crear una entrada en la libreta con los datos del mensaje actual"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "mover entrada hasta abajo en la pantalla"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "mover entrada al centro de la pantalla"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "mover entrada hasta arriba en la pantalla"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "crear copia decodificada (text/plain)"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "crear copia decodificada (text/plain) y suprimir"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "suprimir"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "suprimir el buzón actual (sólo IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "suprimir todos los mensajes en este subhilo"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "suprimir todos los mensajes en este hilo"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "mostrar dirección completa del autor"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "mostrar mensaje y cambiar la muestra de todos los encabezados"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "mostrar el mensaje"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "editar el mensaje completo"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "suprimir el caracter anterior al cursor"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "mover el cursor un caracter a la izquierda"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "mover el cursor al principio de la palabra"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "saltar al principio del renglón"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "cambiar entre buzones de entrada"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "completar nombres de archivos o nombres en libreta"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "completar dirección con pregunta"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "suprimir el caracter bajo el cursor"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "saltar al final del renglón"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "mover el cursor un caracter a la derecha"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "mover el cursor al final de la palabra"
+
+#: keymap_alldefs.h:75
+#, fuzzy
+msgid "scroll down through the history list"
+msgstr "mover hacia atrás en el historial de comandos"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "mover hacia atrás en el historial de comandos"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "suprimir caracteres desde el cursor hasta el final del renglón"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "suprimir caracteres desde el cursor hasta el final de la palabra"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "suprimir todos lod caracteres en el renglón"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "suprimir la palabra anterior al cursor"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "marcar como cita la próxima tecla"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "transponer el caracter bajo el cursor con el anterior"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "capitalizar la palabra"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "convertir la palabra a minúsculas"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "convertir la palabra a mayúsculas"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "entrar comando de muttrc"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "entrar un patrón de archivos"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "salir de este menú"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "filtrar archivos adjuntos con un comando de shell"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "mover la primera entrada"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "marcar/desmarcar el mensaje como 'importante'"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "Reenviar el mensaje con comentrarios"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "seleccionar la entrada actual"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "responder a todos los destinatarios"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "media página hacia abajo"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "media página hacia arriba"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "esta pantalla"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "saltar a un número del índice"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "ir a la última entrada"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "responder a la lista de correo"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "ejecutar un macro"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "escribir un mensaje nuevo"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "abrir otro buzón"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "abrir otro buzón en modo de sólo lectura"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "quitarle un indicador a un mensaje"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "suprimir mensajes que coincidan con un patrón"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "forzar el obtener correo de un servidor IMAP"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "obtener correo de un servidor POP"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "ir al primer mensaje"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "ir al último mensaje"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "mostrar sólo mensajes que coincidan con un patrón"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "saltar al próximo mensaje nuevo"
+
+#: keymap_alldefs.h:113
+#, fuzzy
+msgid "jump to the next new or unread message"
+msgstr "saltar al próximo mensaje sin leer"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "saltar al próximo subhilo"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "saltar al próximo hilo"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "ir al próximo mensaje no borrado"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "saltar al próximo mensaje sin leer"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "saltar al mensaje anterior en el hilo"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "saltar al hilo anterior"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "saltar al subhilo anterior"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "ir al mensaje no borrado anterior"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "saltar al mensaje nuevo anterior"
+
+#: keymap_alldefs.h:123
+#, fuzzy
+msgid "jump to the previous new or unread message"
+msgstr "saltar al mensaje sin leer anterior"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "saltar al mensaje sin leer anterior"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "marcar el hilo actual como leído"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "marcar el subhilo actual como leído"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "ponerle un indicador a un mensaje"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "guardar cabios al buzón"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "marcar mensajes que coincidan con un patrón"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "restaurar mensajes que coincidan con un patrón"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "quitar marca de los mensajes que coincidan con un patrón"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "ir al centro de la página"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "ir a la próxima entrada"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "bajar un renglón"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "ir a la próxima página"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "saltar al final del mensaje"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "cambiar muestra del texto citado"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "saltar atrás del texto citado"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "saltar al principio del mensaje"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "filtrar mensaje/archivo adjunto via un comando de shell"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "ir a la entrada anterior"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "subir un renglón"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "ir a la página anterior"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "imprimir la entrada actual"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "Obtener direcciones de un programa externo"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "agregar nuevos resultados de la búsqueda a anteriores"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "guardar cambios al buzón y salir"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "reeditar mensaje pospuesto"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "refrescar la pantalla"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{interno}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "responder a un mensaje"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "usar el mensaje actual como base para uno nuevo"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "guardar mensaje/archivo adjunto en un archivo"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "buscar con una expresión regular"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "buscar con una expresión regular hacia atrás"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "buscar próxima coincidencia"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "buscar próxima coincidencia en dirección opuesta"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "cambiar coloración de patrón de búsqueda"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "invocar comando en un subshell"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "ordenar mensajes"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "ordenar mensajes en órden inverso"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "marcar la entrada actual"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "aplicar la próxima función a los mensajes marcados"
+
+#: keymap_alldefs.h:164
+#, fuzzy
+msgid "apply next function ONLY to tagged messages"
+msgstr "aplicar la próxima función a los mensajes marcados"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "marcar el subhilo actual"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "marcar el hilo actual"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "cambiar el indicador de 'nuevo' de un mensaje"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "cambiar si los cambios del buzón serán guardados"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "cambiar entre ver buzones o todos los archivos al navegar"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "ir al principio de la página"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "restaurar la entrada actual"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "restaurar todos los mensajes del hilo"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "restaurar todos los mensajes del subhilo"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "mostrar el número de versión y fecha de Mutt"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "mostrar archivo adjunto usando entrada mailcap si es necesario"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "mostrar archivos adjuntos tipo MIME"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr ""
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "mostrar patrón de limitación activo"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "colapsar/expander hilo actual"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "colapsar/expander todos los hilos"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "adjuntar clave PGP pública"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "mostrar opciones PGP"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "enviar clave PGP pública"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "verificar clave PGP pública"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "mostrar la identificación del usuario de la clave"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "verificar presencia de un pgp clásico"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "Aceptar la cadena construida"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "Agregar un remailer a la cadena"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "Poner un remailer en la cadena"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "Suprimir un remailer de la cadena"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "Seleccionar el elemento anterior en la cadena"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "Seleccionar el siguiente elemento en la cadena"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "enviar el mensaje a través de una cadena de remailers mixmaster"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "crear copia descifrada y suprimir "
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "crear copia descifrada"
+
+#: keymap_alldefs.h:196
+#, fuzzy
+msgid "wipe passphrase(s) from memory"
+msgstr "borrar contraseña PGP de la memoria"
+
+#: keymap_alldefs.h:197
+#, fuzzy
+msgid "extract supported public keys"
+msgstr "extraer claves PGP públicas"
+
+#: keymap_alldefs.h:198
+#, fuzzy
+msgid "show S/MIME options"
+msgstr "mostrar opciones PGP"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "¡Sin memoria!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"Para contactar a los desarrolladores mande un mensaje a <mutt-dev@mutt."
+"org>.\n"
+"Para reportar un fallo use la utilería flea(1) por favor.\n"
+
+#: main.c:50
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-2001 Michael R. Elkins y otros.\n"
+"Mutt viene con ABSOLUTAMENTE NINGUNA GARANTÍA; para obtener detalles\n"
+"teclee `mutt -vv'. Mutt es software libre, puede redistribuirlo\n"
+"bajo ciertas condiciones; teclee `mutt -vv' para más detalles.\n"
+
+#: main.c:56
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-2001 Michael R. Elkins <me@cs.hmc.edu>\n"
+"Copyright (C) 1996-2001 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2001 Thomas Roessler <roessler@guug.de>\n"
+"Copyright (C) 1998-2001 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2001 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2001 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"Muchos otros no mencionados aqui contribuyeron mucho código,\n"
+"mejoras y sugerencias.\n"
+"\n"
+"La traducción al español fue hecha por Boris Wesslowski <Boris@Wesslowski."
+"com>.\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"
+
+#: main.c:94
+#, fuzzy
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"uso: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <arch> ] [ -m <tipo> ] [ -f <arch> ]\n"
+"     mutt [ -nx ] [ -e <cmd> ] [ -a <arch> ] [ -F <arch> ] [ -H <arch> ] [ -"
+"i <arch> ] [ -s <asunto> ] [ -b <dir> ] [ -c <dir> ] <dir> [ ... ]\n"
+"     mutt [ -n ] [ -e <cmd> ] [ -F <archivo> ] -p\n"
+"     mutt -v[v]\n"
+"\n"
+"opciones:\n"
+"  -a <archivo>\tañadir un archivo al mensaje\n"
+"  -b <dirección>\tespecifica una dirección para enviar copia ciega (BCC)\n"
+"  -c <dirección>\tespecifica una dirección para enviar copia (CC)\n"
+"  -e <comando>\tespecifica un comando a ser ejecutado al empezar\n"
+"  -f <archivo>\tespecifica un buzón a leer\n"
+"  -F <archivo>\tespecifica un archivo muttrc alterno\n"
+"  -H <archivo>\tespecifica un archivo para obtener una cabecera\n"
+"  -i <archivo>\tespecifica un archivo a incluir en la respuesta\n"
+"  -m <tipo>\tespecifica un tipo de buzón\n"
+"  -n\t\tproduce que Mutt no lea el archivo Muttrc del sistema\n"
+"  -p\t\tcontinuar un mensaje pospuesto\n"
+"  -R\t\tabrir un buzón en modo de solo-lectura\n"
+"  -s <asunto>\tespecifica el asunto (necesita comillas si contiene "
+"espacios)\n"
+"  -v\t\tmuestra versión y opciones definidas al compilar\n"
+"  -x\t\tsimula el modo de envío mailx\n"
+"  -y\t\tselecciona un buzón especificado en su lista `mailboxes'\n"
+"  -z\t\tsalir inmediatamente si no hay mensajes en el buzón\n"
+"  -Z\t\tabrir la primera carpeta con mensajes nuevos, salir si no hay\n"
+"  -h\t\teste mensaje de ayuda"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Opciones especificadas al compilar:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Error al inicializar la terminal."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Modo debug a nivel %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "DEBUG no fue definido al compilar.  Ignorado.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s no existe. ¿Crearlo?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "No se pudo crear %s: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "No hay destinatario.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: imposible adjuntar archivo.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Ningún buzón con correo nuevo."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Ningún buzón de entrada fue definido."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "El buzón está vacío."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Leyendo %s... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "¡El buzón está corrupto!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "¡El buzón fue corrupto!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "¡Error fatal! ¡No se pudo reabrir el buzón!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "¡Imposible bloquear buzón!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+"sync: buzón modificado, ¡pero sin mensajes modificados! (reporte este fallo)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Guardando mensajes... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+#, fuzzy
+msgid "Committing changes..."
+msgstr "Compilando patrón de búsqueda..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "¡La escritura falló! Buzón parcial fue guardado en %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "¡Imposible reabrir buzón!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Reabriendo buzón..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Saltar a: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Número de índice inválido."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "No hay entradas."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Ya no puede bajar más."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Ya no puede subir más."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Está en la última página."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Está en la primera página."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "La primera entrada está siendo mostrada."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "La última entrada está siendo mostrada."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Está en la última entrada."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Está en la primera entrada."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Buscar por: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Buscar en sentido opuesto: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Nada que buscar."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "No fue encontrado."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "No hay entradas marcadas."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "No puede buscar en este menú."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "Saltar no está implementado para diálogos."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Marcar no está soportado."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "Leyendo %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr ""
+
+#: muttlib.c:835
+#, fuzzy
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "Archivo es un directorio, ¿guardar en él?"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "Archivo es un directorio, ¿guardar en él?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Archivo bajo directorio: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "El archivo existe, ¿(s)obreescribir, (a)gregar o (c)ancelar?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "sac"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "No se puede guardar un mensaje en un buzón POP."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "¡%s no es un buzón!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "¿Agregar mensajes a %s?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "Conexión a %s cerrada"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL no está disponible."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "La órden anterior a la conexión falló."
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Error al hablar con %s (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr ""
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "Buscando %s..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "No se encontró la dirección del servidor %s"
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Conectando a %s..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "No se pudo conectar a %s (%s)."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "No se pudo encontrar suficiente entropía en su sistema"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "Llenando repositorio de entropía: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "¡%s tiene derechos inseguros!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "SSL fue desactivado por la falta de entropía"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr ""
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr ""
+
+#: mutt_ssl.c:324
+#, fuzzy, c-format
+msgid "SSL failed: %s"
+msgstr "CLOSE falló"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "Imposible recoger el certificado de la contraparte"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "Conectando por SSL con %s (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "Desconocido"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[imposible calcular]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[fecha inválida]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "Certificado del servidor todavía no es válido"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "Certificado del servidor ha expirado"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Este certificado pertenece a:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Este certificado fue producido por:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Este certificado es válido"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   de %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "     a %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Huella: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "Prueba del certificado SSL"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(r)echazar, aceptar (u)na vez, (a)ceptar siempre"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "rua"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(r)echazar, aceptar (u)na vez"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "ru"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Salir  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Advertencia: no se pudo guardar el certificado"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "El certificado fue guardado"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Cuenta de bloqueo excedida, ¿quitar bloqueo de %s?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "No se pudo bloquear %s con dotlock.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "¡Bloqueo fcntl tardó demasiado!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Esperando bloqueo fcntl... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "¡Bloqueo flock tardó demasiado!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Esperando bloqueo flock... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "No se pudo bloquear %s\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "Leyendo %s..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "Escribiendo %s..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "¡No se pudo sincronizar el buzón %s!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "¿Mover mensajes leidos a %s?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "¿Expulsar %d mensaje suprimido?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "¿Expulsar %d mensajes suprimidos?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Moviendo mensajes leídos a %s..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "Buzón sin cambios."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "quedan %d, %d movidos, %d suprimidos."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "quedan %d, %d suprimidos."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr "Presione '%s' para cambiar escritura"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "¡Use 'toggle-write' para activar escritura!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "Buzón está marcado inescribible. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "El buzón fue marcado."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "No se pudo escribir el mensaje"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "No disponible en este menú."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "PágAnt"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "PróxPág"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Adjuntos"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Sig."
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "El final del mensaje está siendo mostrado."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "El principio del mensaje está siendo mostrado."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Buscar hacia atrás: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Buscar: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "La ayuda está siendo mostrada."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "No hay mas texto citado."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "No hay mas texto sin citar bajo el texto citado."
+
+# boundary es un parámetro definido por el estándar MIME
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "¡mensaje multiparte no tiene parámetro boundary!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Error en expresión: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Día inválido del mes: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Mes inválido: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "Fecha relativa incorrecta: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "error en expresión"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "error en patrón en: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: comando inválido"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: no soportado en este modo"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "falta un parámetro"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "paréntesis sin contraparte: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "patrón vacío"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "error: op %d desconocida (reporte este error)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Compilando patrón de búsqueda..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Ejecutando comando en mensajes que coinciden..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "Ningún mensaje responde al criterio dado."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "La búsqueda llegó al final sin encontrar nada."
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "La búsqueda llegó al principio sin encontrar nada."
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Búsqueda interrumpida."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "Contraseña PGP olvidada."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- ¡Error: imposible crear subproceso PGP! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- Fin de salida PGP --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PRINCIPIO DEL MENSAJE PGP --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- PRINCIPIO DEL BLOQUE DE CLAVES PÚBLICAS PGP --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PRINCIPIO DEL MENSAJE FIRMADO CON PGP --]\n"
+"\n"
+
+#: pgp.c:381
+#, fuzzy
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr ""
+"\n"
+"[-- FIN DEL MENSAJE PGP --]\n"
+"\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- FIN DEL BLOQUE DE CLAVES PÚBLICAS PGP --]\n"
+
+#: pgp.c:385
+#, fuzzy
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr ""
+"\n"
+"[-- FIN DEL MENSAJE FIRMADO CON PGP --]\n"
+"\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- ¡Error: no se encontró el principio del mensaje PGP! --]\n"
+"\n"
+
+#: pgp.c:662
+#, fuzzy
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Error interno. Informe a <roessler@guug.de>."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- ¡Error: imposible crear subproceso PGP! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- ¡Error: mensaje PGP/MIME mal formado! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- ¡Error: no se pudo cear archivo temporal! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- Lo siguiente está cifrado con PGP/MIME --]\n"
+"\n"
+
+#: pgp.c:863
+#, fuzzy
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr ""
+"\n"
+"[-- Fin de datos cifrados con PGP/MIME --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "¡No se pudo abrir subproceso PGP!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "¿Usar keyID = \"%s\" para %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "Entre keyID para %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "No se pudo invocar PGP"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "Recogiendo clave PGP..."
+
+#: pgpkey.c:486
+#, fuzzy
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "Todas las llaves que coinciden están marcadas expiradas/revocadas."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Seleccionar  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Verificar clave  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "Claves PGP que coinciden con <%s>."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "Claves PGP que coinciden con \"%s\"."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "No se pudo abrir /dev/null"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "No se pudo crear archivo temporal"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "Key ID: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "Esta clave no se puede usar: expirada/desactivada/revocada."
+
+#: pgpkey.c:608
+#, fuzzy
+msgid "ID is expired/disabled/revoked."
+msgstr "Esta clave está expirada/desactivada/revocada"
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr ""
+
+#: pgpkey.c:615
+#, fuzzy
+msgid "ID is not valid."
+msgstr "Esta ID no es de confianza."
+
+#: pgpkey.c:618
+#, fuzzy
+msgid "ID is only marginally valid."
+msgstr "Esta ID es marginalmente de confianza."
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s ¿Realmente quiere utilizar la llave?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Por favor entre la identificación de la clave: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "Invocando pgp..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "Clave PGP %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Buscando claves que coincidan con \"%s\"..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "La órden TOP no es soportada por el servidor."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "¡No se pudo escribir la cabecera al archivo temporal!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "La órden UIDL no es soportada por el servidor."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr ""
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "Consiguiendo la lista de mensajes..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "¡No se pudo escribir el mensaje al archivo temporal!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "Revisando si hay mensajes nuevos..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "El servidor POP no fue definido."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "No hay correo nuevo en el buzón POP."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "¿Suprimir mensajes del servidor?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Leyendo mensajes nuevos (%d bytes)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "¡Error al escribir el buzón!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d de %d mensajes leídos]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "¡El servidor cerró la conneción!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Verificando autentidad (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Verificando autentidad (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "Verificación de autentidad APOP falló."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "La órden USER no es soportada por el servidor."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "No es posible dejar los mensajes en el servidor."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "Error al conectar al servidor: %s"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "Cerrando conexión al servidor POP..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Verificando índice de mensajes..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Conexión perdida. ¿Reconectar al servidor POP?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Mensajes pospuestos"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "No hay mensajes pospuestos."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "Cabecera PGP illegal"
+
+#: postpone.c:479
+#, fuzzy
+msgid "Illegal S/MIME header"
+msgstr "Cabecera PGP illegal"
+
+#: postpone.c:554
+#, fuzzy
+msgid "Decryption failed."
+msgstr "El login falló."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Nueva indagación"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Producir nombre corto"
+
+#: query.c:48
+msgid "Search"
+msgstr "Buscar"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Esperando respuesta..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "El comando de indagación no fue definido."
+
+#: query.c:286
+msgid "Query"
+msgstr "Indagación"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Indagar: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Indagar '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Redirigir"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Imprimir"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Guardando..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Archivo adjunto guardado."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "¡Atención!  Está a punto de sobreescribir %s, ¿continuar?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Archivo adjunto filtrado."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Filtrar a través de: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Redirigir a: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "¡No sé cómo imprimir archivos adjuntos %s!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "¿Imprimir archivo(s) adjunto(s) marcado(s)?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "¿Imprimir archivo adjunto?"
+
+#: recvattach.c:938
+#, fuzzy
+msgid "Can't decrypt encrypted message!"
+msgstr "No fue encontrado ningún mensaje marcado."
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Archivos adjuntos"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "¡No hay subpartes para mostrar!"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "No se puede suprimir un archivo adjunto del servidor POP."
+
+#: recvattach.c:1056
+#, fuzzy
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "Suprimir archivos adjuntos de mensajes PGP no es soportado."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Suprimir sólo es soportado con archivos adjuntos tipo multiparte."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Solo puede rebotar partes tipo message/rfc822."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing message!"
+msgstr "Error al enviar el mensaje."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing messages!"
+msgstr "Error al enviar el mensaje."
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "No se pudo abrir el archivo temporal %s"
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "¿Adelatar como archivos adjuntos?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+"No se pudieron decodificar todos los archivos adjuntos marcados.  ¿Adelantar "
+"los otros por MIME?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "¿Adelantar con encapsulado MIME?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "No se pudo crear %s."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "No fue encontrado ningún mensaje marcado."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "¡Ninguna lista de correo encontrada!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+"No se pudieron decodificar todos los archivos adjuntos marcados.  "
+"¿Encapsular los otros por MIME?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Adjuntar"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Insertar"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Suprimir"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "Aceptar"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "¡No se pudo obtener el type2.list del mixmaster!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Seleccionar una cadena de remailers."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "Error: %s no puede ser usado como remailer final de una cadena."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Las cadenas mixmaster están limitadas a %d elementos."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "La cadena de remailers ya está vacía."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "Ya tiene el primer elemento de la cadena seleccionado."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "Ya tiene el último elemento de la cadena seleccionado."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Mixmaster no acepta cabeceras Cc or Bcc."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr ""
+"¡Por favor ajuste la variable hostname a un valor correcto si usa mixmaster!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Error al enviar mensaje, proceso hijo terminó %d.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Error al enviar el mensaje."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "Entrada mal formateada para el tipo %s en \"%s\" renglón %d"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Ruta para mailcap no especificada"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "Entrada mailcap para tipo %s no encontrada"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: faltan parámetros"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: demasiados parámetros"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Sin asunto, ¿cancelar?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Sin asunto, cancelando."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "¿Responder a %s%s?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "¿Responder a %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "¡No hay mensajes marcados visibles!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "¿Incluir mensaje en respuesta?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Incluyendo mensaje citado..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "¡No se pudieron incluir todos los mensajes pedidos!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "¿Adelatar como archivo adjunto?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Preparando mensaje reenviado..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "¿Continuar mensaje pospuesto?"
+
+#: send.c:1336
+#, fuzzy
+msgid "Edit forwarded message?"
+msgstr "Preparando mensaje reenviado..."
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "¿Cancelar mensaje sin cambios?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Mensaje sin cambios cancelado."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "Mensaje no enviado."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Mensaje pospuesto."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "¡No especificó destinatarios!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "No especificó destinatarios."
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Falta el asunto, ¿cancelar envío?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Asunto no fue especificado."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Enviando mensaje..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "No se pudo enviar el mensaje."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Mensaje enviado."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Enviando en un proceso en segundo plano."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "El parámetro límite no fue encontrado. [reporte este error]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "¡%s ya no existe!"
+
+#: sendlib.c:916
+#, fuzzy, c-format
+msgid "%s isn't a regular file."
+msgstr "%s no es un buzón."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "No se pudo abrir %s"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Error al enviar mensaje, proceso hijo terminó %d (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Salida del proceso de repartición de correo"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr ""
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s...  Saliendo.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "\"%s\" recibido...  Saliendo.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Señal %d recibida...  Saliendo.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr ""
+
+#: smime.c:303
+msgid "Verified  "
+msgstr ""
+
+#: smime.c:306
+msgid "Unverified"
+msgstr ""
+
+#: smime.c:309
+#, fuzzy
+msgid "Expired   "
+msgstr "Salir  "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr ""
+
+#: smime.c:315
+#, fuzzy
+msgid "Invalid   "
+msgstr "Mes inválido: %s"
+
+#: smime.c:318
+#, fuzzy
+msgid "Unknown   "
+msgstr "Desconocido"
+
+#: smime.c:347
+#, fuzzy
+msgid "Enter keyID: "
+msgstr "Entre keyID para %s: "
+
+#: smime.c:370
+#, fuzzy, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "Claves PGP que coinciden con \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr ""
+
+#: smime.c:523 smime.c:592
+#, fuzzy, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "¿Usar keyID = \"%s\" para %s?"
+
+#: smime.c:526 smime.c:595
+#, fuzzy, c-format
+msgid "Use ID %s for %s ?"
+msgstr "¿Usar keyID = \"%s\" para %s?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr ""
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+#, fuzzy
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "[-- ¡Error: imposible crear subproceso PGP! --]\n"
+
+#: smime.c:1197
+#, fuzzy
+msgid "no certfile"
+msgstr "No se pudo crear el filtro"
+
+#: smime.c:1200
+#, fuzzy
+msgid "no mbox"
+msgstr "(ningún buzón)"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr ""
+
+#: smime.c:1381
+#, fuzzy
+msgid "Warning: Intermediate certificate not found."
+msgstr "Advertencia: no se pudo guardar el certificado"
+
+#: smime.c:1426
+#, fuzzy
+msgid "Can't open OpenSSL subprocess!"
+msgstr "¡No se pudo abrir subproceso PGP!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr ""
+
+#: smime.c:1629 smime.c:1751
+#, fuzzy
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- Fin de salida PGP --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+#, fuzzy
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- ¡Error: imposible crear subproceso PGP! --]\n"
+
+#: smime.c:1755
+#, fuzzy
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr ""
+"[-- Lo siguiente está cifrado con PGP/MIME --]\n"
+"\n"
+
+#: smime.c:1758
+#, fuzzy
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr ""
+"[-- Los siguientes datos están firmados --]\n"
+"\n"
+
+#: smime.c:1822
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- Fin de datos cifrados con PGP/MIME --]\n"
+
+#: smime.c:1824
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- Fin de datos firmados --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Ordenando buzón..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "¡No se pudo encontrar la función para ordenar! [reporte este fallo]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(ningún buzón)"
+
+#: thread.c:1081
+#, fuzzy
+msgid "Parent message is not visible in this limited view."
+msgstr "El mensaje anterior no es visible en vista limitada"
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "El mensaje anterior no está disponible."
+
+#, fuzzy
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "Invocando pgp..."
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "¿Rebotar mensaje a %s...?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "¿Rebotar mensajes a %s...?"
+
+#, fuzzy
+#~ msgid "ewsabf"
+#~ msgstr "dicon"
+
+#, fuzzy
+#~ msgid "Certificate *NOT* added."
+#~ msgstr "El certificado fue guardado"
+
+#, fuzzy
+#~ msgid "This ID's validity level is undefined."
+#~ msgstr "El nivel de confianza de esta ID no está definido."
+
+#~ msgid "Decode-save"
+#~ msgstr "Guardar decodificado"
+
+#~ msgid "Decode-copy"
+#~ msgstr "Copiar decodificado"
+
+#~ msgid "Decrypt-save"
+#~ msgstr "Guardar descifrado"
+
+#~ msgid "Decrypt-copy"
+#~ msgstr "Copiar descifrado"
+
+#~ msgid "Copy"
+#~ msgstr "Copiar"
+
+#~ msgid "%s [%s]\n"
+#~ msgstr "%s [%s]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "[-- End of PGP output --]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "[-- Fin de salida PGP --]\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "Can't stat %s."
+#~ msgstr "No se pudo encontrar en disco: %s"
+
+#~ msgid "%s: no such command"
+#~ msgstr "%s: comando desconocido"
+
+#~ msgid "Authentication method is unknown."
+#~ msgstr "Método de verificación de autentidad desconocido."
diff --git a/po/et.gmo b/po/et.gmo
new file mode 100644 (file)
index 0000000..45d0454
Binary files /dev/null and b/po/et.gmo differ
diff --git a/po/et.po b/po/et.po
new file mode 100644 (file)
index 0000000..4159182
--- /dev/null
+++ b/po/et.po
@@ -0,0 +1,4169 @@
+# Estonian translations for mutt.
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Toomas Soome <tsoome@muhv.pri.ee>, 2002.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mutt 1.5.2\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2002-12-09 17:19+02:00\n"
+"Last-Translator: Toomas Soome <tsoome@muhv.pri.ee>\n"
+"Language-Team: Estonian <et@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-15\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "Kasutajanimi serveril %s: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "%s@%s parool: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Välju"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Kustuta"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Taasta"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Vali"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Appi"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "Tei pole hüüdnimesid!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Hüüdnimed"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Hüüdnimeks: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "Teil on juba selle nimeline hüüdnimi!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr "Hoiatus: See hüüdnimi ei pruugi toimida. Parandan?"
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Aadress: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr ""
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Isiku nimi: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] Nõus?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Salvestan faili: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Hüüdnimi on lisatud."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Nimemuster ei sobi, jätkan?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "Mailcap koostamise kirje nõuab %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "Viga \"%s\" käivitamisel!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Faili avamine päiste analüüsiks ebaõnnestus."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Faili avamine päiste eemaldamiseks ebaõnnestus."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "Mailcap koostamise kirjet %s jaoks puudub, loon tühja faili."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "Mailcap toimeta kirje nõuab %%s"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "Mailcap toimeta kirjet %s jaoks ei ole."
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "Sobivat mailcap kirjet pole. Käsitlen tekstina."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "MIME tüüp ei ole defineeritud. Lisa ei saa vaadata."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Filtri loomine ebaõnnestus"
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Ei õnnestu luua filtrit"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "Viga kirjutamisel!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Ma ei tea, kuidas seda trükkida!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Chdir"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Mask"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s ei ole kataloog."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Postkastid [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Tellitud [%s], faili mask: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Kataloog [%s], failimask: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Kataloogi ei saa lisada!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Maskile vastavaid faile ei ole"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Luua saab ainult IMAP postkaste"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Kustutada saab ainult IMAP postkaste"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Kas tõesti kustutada postkast \"%s\"?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "Postkast on kustutatud."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "Postkasti ei kustutatud."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Mine kataloogi: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Viga kataloogi skaneerimisel."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Failimask: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr ""
+"Järjestan tagurpidi (k)uup., (t)ähest., (s)uuruse järgi või (e)i järjesta? "
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Järjestan (k)uup., (t)ähest., (s)uuruse järgi või (e)i järjesta? "
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "ktse"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Uus failinimi: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Kataloogi ei saa vaadata"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Viga faili vaatamisel"
+
+#: buffy.c:442
+msgid "New mail in "
+msgstr "Uus kiri kaustas "
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: terminal ei toeta värve"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s. sellist värvi ei ole"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: sellist objekti ei ole"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: käsk kehtib ainult indekseeritud objektiga"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: liiga vähe argumente"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Puuduvad argumendid."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: liiga vähe argumente"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: liiga vähe argumente"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s. sellist atribuuti pole"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "liiga vähe argumente"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "liiga palju argumente"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "vaikimisi värve ei toetata"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "Kontrollin PGP allkirja?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Ei õnnestu luua ajutist faili!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Filtri loomine ebaõnnestus"
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "Teadet ei õnnestu kopeerida."
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr "S/MIME allkiri on edukalt kontrollitud."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr "S/MIME sertifikaadi omanik ei ole kirja saatja."
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr "S/MIME allkirja EI ÕNNESTU kontrollida."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "PGP allkiri on edukalt kontrollitud."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "PGP allkirja EI ÕNNESTU kontrollida."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Käsklus: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Peegelda teade aadressile: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Peegelda märgitud teated aadressile: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "Viga aadressi analüüsimisel!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr ""
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Peegelda teade aadressile %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Peegelda teated aadressile %s"
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Message not bounced."
+msgstr "Teade on peegeldatud."
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Messages not bounced."
+msgstr "Teated on peegeldatud."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Teade on peegeldatud."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Teated on peegeldatud."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "Filterprotsessi loomine ebaõnnestus"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Toruga käsule: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "Trükkimise käsklust ei ole defineeritud."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "Trükin teate?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Trükin märgitud teated?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "Teade on trükitud"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Teated on trükitud"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "Teadet ei saa trükkida"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "Teateid ei saa trükkida"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dfrsotuzc"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Käsurea käsk: "
+
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "Dekodeeri-salvesta%s postkasti"
+
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "Dekodeeri-kopeeri%s postkasti"
+
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "Dekrüpti-salvesta%s postkasti"
+
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "Dekrüpti-kopeeri%s postkasti"
+
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "Salvesta%s postkasti"
+
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "Kopeeri%s postkasti"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " märgitud"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Kopeerin kausta %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "Teisendan saatmisel kooditabelisse %s?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Sisu tüübiks on nüüd %s."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "Kooditabeliks on nüüd %s; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "ei teisenda"
+
+#: commands.c:914
+msgid "converting"
+msgstr "teisendan"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Lisasid ei ole."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Saada"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Katkesta"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Lisa fail"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Kirjeldus"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Allkirjasta, krüpti"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Krüpti"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Allkirjasta"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Puhas"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " allkirjasta kui: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<vaikimisi>"
+
+#: compose.c:149
+msgid "Encrypt with: "
+msgstr "Krüpti kasutades: "
+
+#: compose.c:165
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "PGP (k)rüpti, (a)llkiri, allk. ku(i), (m)õlemad või (u)nusta? "
+
+#: compose.c:166
+msgid "esabf"
+msgstr "kaimu"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Allkirjasta kui: "
+
+#: compose.c:227
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "S/MIME (k)rüpti, (a)llkiri, allk. ku(i), (m)õlemad või (u)nusta? "
+
+#: compose.c:228
+#, fuzzy
+msgid "eswabf"
+msgstr "kaimu"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr "1: DES, 2: 3DES, 3: RC2-40, 4: RC2-64, 5: RC2-128 või (u)nusta? "
+
+#: compose.c:238
+msgid "12345f"
+msgstr "12345u"
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] ei eksisteeri!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] muudeti. Uuendan kodeerimist?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Lisad"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr ""
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Ainukest lisa ei saa kustutada."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr ""
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "Lisan valitud failid..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "%s ei õnnestu lisada!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Avage postkast, millest lisada teade"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "Selles kaustas ei ole teateid."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Märkige teada, mida soovite lisada!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Ei õnnestu lisada!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "Ümberkodeerimine puudutab ainult tekstilisasid."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "Käesolevat lisa ei teisendata."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "Käesolev lisa teisendatakse."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Vigane kodeering."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Salvestan sellest teatest koopia?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Uus nimi: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "Ei saa lugeda %s atribuute: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Uus fail: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Content-Type on kujul baas/alam"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Tundmatu Content-Type %s"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Faili %s ei saa luua"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "See mis siin nüüd on, on viga lisa loomisel"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Panen teate postitusootele?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Kirjuta teade postkasti"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Kirjutan teate faili %s ..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "Teade on kirjutatud."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr "S/MIME on juba valitud. Puhasta ja jätka ? "
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr "PGP on juba valitud. Puhasta ja jätka ? "
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr " (praegune aeg: %c)"
+
+#: crypt.c:71
+#, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- järgneb %s väljund%s --]\n"
+
+#: crypt.c:86
+msgid "Passphrase(s) forgotten."
+msgstr "Parool(id) on unustatud."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Sisestage PGP parool:"
+
+#: crypt.c:147
+msgid "Enter SMIME passphrase:"
+msgstr "Sisestage SMIME parool:"
+
+#: crypt.c:192
+#, fuzzy
+msgid "Create a traditional (inline) PGP message?"
+msgstr "Loon PGP teade kirja kehas?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "Käivitan PGP..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr "Sisu vihjeta S/MIME teateid ei toetata."
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr "Proovin eraldada PGP võtmed...\n"
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr "Proovin eraldada S/MIME sertifikaadid...\n"
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- Viga: Vigane multipart/signed struktuur! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- Viga: Tundmatu multipart/signed protokoll %s! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Hoiatus: Me ai saa kontrollida %s/%s allkirju. --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- Järgnev info on allkirjastatud --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Hoiatus: Ei leia ühtegi allkirja. --]\n"
+"\n"
+
+#: crypt.c:924
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Allkirjastatud info lõpp --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "jah"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "ei"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Väljuda Muttist?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "tundmatu viga"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Jätkamiseks vajutage klahvi..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " ('?' annab loendi): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Avatud postkaste pole."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Teateid ei ole."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "Postkast on ainult lugemiseks."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "Funktsioon ei ole teate lisamise moodis lubatud."
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "Nähtavaid teateid pole."
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "Ainult lugemiseks postkastil ei saa kirjutamist lülitada!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "Muudatused kaustas salvestatakse kaustast väljumisel."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Muudatusi kaustas ei kirjutata."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Välju"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Salvesta"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Kiri"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Vasta"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Grupp"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "Postkasti on väliselt muudetud. Lipud võivad olla valed."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Selles postkastis on uus kiri."
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "Postkasti on väliselt muudetud."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Märgitud teateid pole."
+
+#: curs_main.c:653 menu.c:896
+#, fuzzy
+msgid "Nothing to do."
+msgstr "Ühendus serverisse %s..."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Hüppa teatele: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "Argument peab olema teate number."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "See teate ei ole nähtav."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Vigane teate number."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Kustuta teated mustriga: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "Kehtivat piirangumustrit ei ole."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Piirang: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Piirdu teadetega mustriga: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Väljun Muttist?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Märgi teated mustriga: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Taasta teated mustriga: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Võta märk teadetelt mustriga: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Avan postkasti ainult lugemiseks"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Avan postkasti"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s ei ole postkast."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Väljun Muttist salvestamata?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Te olete viimasel teatel."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Kustutamata teateid pole."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Te olete esimesel teatel."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "Otsing pööras algusest tagasi."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "Otsing pööras lõpust tagasi."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Uusi teateid pole"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Lugemata teateid pole"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " selles piiratud vaates"
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "POP serveril ei saa muuta lippu 'important' (tähtis)."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Rohkem teemasid pole."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Te olete esimesel teemal."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "Teemad ei ole lubatud."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "Teema sisaldab lugemata teateid."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "POP serveril ei saa teadet toimetada."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tlisa rida, mis algab sümboliga ~\n"
+"~b kasutajad\tlisa kasutajad Bcc: väljale\n"
+"~c kasutajad\tlisa kasutajad Cc: väljale\n"
+"~f teated\tlisa teated\n"
+"~F teated\tsama kui ~f, lisa ka päised\n"
+"~h\t\ttoimeta teate päist\n"
+"~m teated\tlisa ja tsiteeri teateid\n"
+"~M teated\tsama kui ~m, lisa ka päised\n"
+"~p\t\ttrüki teade\n"
+"~q\t\tkirjuta fail ja välju toimetist\n"
+"~r fail\t\tloe toimetisse fail\n"
+"~t kasutajad\tlisa kasutajad To: väljale\n"
+"~u\t\ttühista eelmine rida\n"
+"~v\t\ttoimeta teadet $visual toimetiga\n"
+"~w fail\t\tkirjuta teade faili\n"
+"~x\t\tkatkesta muudatused ja välju toimetist\n"
+"~?\t\tsee teade\n"
+".\t\tüksinda real lõpetab sisendi\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: vigane teate number.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Teate lõpetab rida, milles on ainult .)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "Postkasti pole.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Teade sisaldab:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(jätka)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "failinimi puudub.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Teates pole ridu.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr ""
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: tundmatu toimeti käsk (~? annab abiinfot)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "ajutise kausta loomine ebaõnnestus: %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "ei õnnestu kirjutada ajutisse kausta: %s"
+
+#: editmsg.c:101
+#, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "ajutist kausta ei õnnestu lühendada: %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "Teate fail on tühi!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "Teadet ei muudetud!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "Teate faili ei saa avada: %s"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Kausta ei saa lisada: %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Viga. Säilitan ajutise faili: %s"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Sea lipp"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Eemalda lipp"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr "[-- Viga:  Multipart/Alternative osasid ei saa näidata! --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Lisa #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Tüüp: %s/%s, Kodeering: %s, Maht: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Autovaade kasutades %s --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Käivitan autovaate käskluse: %s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- %s ei saa käivitada.--]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Autovaate %s stderr --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr "[-- Viga: message/external-body juurdepääsu parameeter puudub --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- See %s/%s lisa "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(maht %s baiti) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "on kustutatud --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- %s --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- nimi: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Seda %s/%s lisa ei ole kaasatud, --]\n"
+
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr "[-- ja näidatud väline allikas on aegunud --]\n"
+
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr "[-- ja näidatud juurdepääsu tüüpi %s ei toetata --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Viga: multipart/signed teatel puudub protokoll."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Viga: multipart/encrypted teatel puudub protokolli parameeter!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Ajutise faili avamine ebaõnnestus!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s ei toetata "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(selle osa vaatamiseks kasutage '%s')"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "('view-attachments' peab olema klahviga seotud!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: faili lisamine ebaõnnestus"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "VIGA: Palun teatage sellest veast"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<TUNDMATU>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Üldised seosed:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Sidumata funktsioonid:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "%s abiinfo"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: seose sees ei saa unhook * kasutada."
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: tundmatu seose tüüp: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: %s ei saa %s seest kustutada."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "Autentikaatoreid pole"
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Autentimine (anonüümne)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "Anonüümne autentimine ebaõnnestus."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Autentimine (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "CRAM-MD5 autentimine ebaõnnestus."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Autentimine (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "GSSAPI autentimine ebaõnnestus."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "LOGIN on sellel serveril blokeeritud."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Meldin..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "Meldimine ebaõnnestus."
+
+#: imap/auth_sasl.c:112
+#, fuzzy, c-format
+msgid "Authenticating (%s)..."
+msgstr "Autentimine (APOP)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "SASL autentimine ebaõnnestus."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "%s on vigane IMAP tee"
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "Laen nimeruumid..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Laen kaustade nimekirja..."
+
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "Sellist värvi ei ole"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Loon postkasti: "
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "Postkastil peab olema nimi."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Postkast on loodud."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "Postkast on suletud"
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Fataalne viga. Teadete arv ei ole sünkroonis!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "Sulen ühendust serveriga %s..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "See IMAP server on iganenud. Mutt ei tööta sellega."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "Turvan ühenduse TLS protokolliga?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "TLS ühendust ei õnnestu kokku leppida"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "Valin %s..."
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "Viga postkasti avamisel!"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Sellel serveril ei saa IMAP postkastidele lisada"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "Loon %s?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Sulen ühenduse IMAP serveriga..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "märgin %d teadet kustutatuks..."
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "Kustutamine ebaõnnestus."
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Salvestan teadete olekud... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Kustutan serveril teateid..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbox: EXPUNGE ebaõnnestus"
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "CLOSE ebaõnnestus."
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "Halb nimi postkastile"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "Tellin %s..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "Loobun kaustast %s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "Sellest IMAP serverist ei saa päiseid laadida."
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "Ajutise faili %s loomine ebaõnnestus"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Laen teadete päiseid... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Laen teadet..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "Teadete indeks on vigane. Proovige postkasti uuesti avada."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Saadan teadet ..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "Kopeerin %d teadet kausta %s..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "Kopeerin teadet %d kausta %s..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "Jätkan?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "alias: aadress puudub"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr ""
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "vigane päiseväli"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: tundmatu järjestamise meetod"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): vigane regexp: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: tundmatu muutuja"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "reset käsuga ei ole prefiks lubatud"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "reset käsuga ei ole väärtus lubatud"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s on seatud"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s ei ole seatud"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: vigane postkasti tüüp"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: vigane väärtus"
+
+#: init.c:1312
+#, fuzzy, c-format
+msgid "%s: Unknown type."
+msgstr "%s: tundmatu tüüp"
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: tundmatu tüüp"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Ei saa lugeda %s atribuute: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s ei ole tavaline fail."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Viga failis %s, real %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: vead failis %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: lugemine katkestati, kuna %s on liialt vigane"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: viga kohal %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: liiga palju argumente"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: tundmatu käsk"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Viga käsureal: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "ei leia kodukataloogi"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "ei suuda tuvastada kasutajanime"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Tuvastasin makros tsükli."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Klahv ei ole seotud."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Klahv ei ole seotud. Abiinfo saamiseks vajutage '%s'."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: liiga palju argumente"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: sellist menüüd ei ole"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "tühi klahvijärjend"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: iiga palju argumente"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: sellist funktsiooni tabelis ei ole"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "makro: tühi klahvijärjend"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "makro: liiga palju argumente"
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: argumente pole"
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s: sellist funktsiooni pole"
+
+#: keymap.c:912
+#, fuzzy
+msgid "Enter keys (^G to abort): "
+msgstr "Sisestage kasutaja teatele %s: "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr ""
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "tühi operatsioon"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "vaata lisa mailcap vahendusel"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "vaata lisa tekstina"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "Lülita osade näitamist"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "liigu lehe lõppu"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "saada teade edasi teisele kasutajale"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "valige sellest kataloogist uus fail"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "vaata faili"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "näita praegu valitud faili nime"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "telli jooksev postkast (ainult IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "loobu jooksvast postkastist (ainult IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "lülita kõikide/tellitud kaustade vaatamine (ainult IMAP)"
+
+#: keymap_alldefs.h:18
+msgid "list mailboxes with new mail"
+msgstr "näita uute teadetega postkaste"
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "vaheta kataloogi"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "kontrolli uusi kirju postkastides"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "lisa sellele teatele fail(e)"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "lisa sellele teatele teateid"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "toimeta BCC nimekirja"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "toimeta CC nimekirja"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "toimeta lisa kirjeldust"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "toimeta lisa kodeeringut"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "sisestage failinimi, kuhu salvestada selle teate koopia"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "toimeta lisatavat faili"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "toimeta from välja"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "toimeta teadet koos päisega"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "toimeta teadet"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "toimeta lisa kasutades mailcap kirjet"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "toimeta Reply-To välja"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "toimeta selle teate teemat"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "toimeta TO nimekirja"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "loo uus postkast (ainult IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "muuda lisa sisu tüüpi"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "loo lisast ajutine koopia"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "käivita teatel ispell"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "loo mailcap kirjet kasutades uus lisa"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "lülita selle lisa ümberkodeerimine"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "salvesta teade hilisemaks saatmiseks"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "tõsta/nimeta lisatud fail ümber"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "saada teade"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "lülita paigutust kehasse/lisasse"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "lülita faili kustutamist peale saatmist"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "uuenda teate kodeerimise infot"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "kirjuta teade kausta"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "koleeri teade faili/postkasti"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "loo teate saatjale alias"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "liiguta kirje ekraanil alla"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "liiguta kirje ekraanil keskele"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "liiguta kirje ekraanil üles"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "tee avatud (text/plain) koopia"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "tee avatud (text/plain) koopia ja kustuta"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "kustuta jooksev kirje"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "kustuta jooksev postkast (ainult IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "kustuta kõik teated alamteemas"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "kustuta kõik teated teemas"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "esita saatja täielik aadress"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "näita teadet ja lülita päise näitamist"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "näita teadet"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "toimeta kogu teadet"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "kustuta sümbol kursori eest"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "liiguta kursorit sümbol vasakule"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "tõsta kursor sõna algusse"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "hüppa rea algusse"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "vaheta sissetulevaid postkaste"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "täienda failinime või aliast"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "täienda aadressi päringuga"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "kustuta sümbol kursori alt"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "hüppa realõppu"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "liiguta kursorit sümbol paremale"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "tõsta kursor sõna lõppu"
+
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr "keri ajaloos alla"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "keri ajaloos üles"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "kustuta sümbolid kursorist realõpuni"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "kustuta sümbolid kursorist sõna lõpuni"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "kustuta real kõik sümbolid"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "kustuta sõna kursori eest"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "kvoodi järgmine klahvivajutus"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "vaheta kursori all olev sümbol kursorile eelnevaga"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "sõna algab suurtähega"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "teisenda tähed sõnas väiketähtedeks"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "teisenda tähed sõnas suurtähtedeks"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "sisestage muttrc käsk"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "sisestage faili mask"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "välju sellest menüüst"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "filtreeri lisa läbi väliskäsu"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "liigu esimesele kirjele"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "lülita teate 'tähtsuse' lippu"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "edasta teade kommentaaridega"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "vali jooksev kirje"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "vasta kõikidele"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "keri pool lehekülge alla"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "keri pool lehekülge üles"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "see ekraan"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "hüppa indeksi numbrile"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "liigu viimasele kirjele"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "vasta määratud postiloendile"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "käivita makro"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "koosta uus e-posti teade"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "ava teine kaust"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "ava teine kaust ainult lugemiseks"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "puhasta teate olekulipp"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "kustuta mustrile vastavad teated"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "lae kiri IMAP serverilt"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "lae kiri POP serverilt"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "liigu esimesele teatele"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "liigu viimasele teatele"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "näita ainult mustrile vastavaid teateid"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "hüppa järgmisele uuele teatele"
+
+#: keymap_alldefs.h:113
+#, fuzzy
+msgid "jump to the next new or unread message"
+msgstr "hüppa järgmisele lugemata teatele"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "hüppa järgmisele alamteemale"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "hüppa järgmisele teemale"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "liigu järgmisele kustutamata teatele"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "hüppa järgmisele lugemata teatele"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "hüppa teema vanemteatele"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "hüppa eelmisele teemale"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "hüppa eelmisele alamteemale"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "liigu eelmisele kustutamata teatele"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "hüppa eelmisele uuele teatele"
+
+#: keymap_alldefs.h:123
+#, fuzzy
+msgid "jump to the previous new or unread message"
+msgstr "hüppa eelmisele lugemata teatele"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "hüppa eelmisele lugemata teatele"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "märgi jooksev teema loetuks"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "märgi jooksev alamteema loetuks"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "sea teate olekulipp"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "salvesta postkasti muutused"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "märgi mustrile vastavad teated"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "taasta mustrile vastavad teated"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "eemalda märk mustrile vastavatelt teadetelt"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "liigu lehe keskele"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "liigu järgmisele kirjele"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "keri üks rida alla"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "liigu järgmisele lehele"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "hüppa teate lõppu"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "lülita tsiteeritud teksti näitamist"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "liigu tsiteeritud teksti lõppu"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "hüppa teate algusse"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "saada teade/lisa käsu sisendisse"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "liigu eelmisele kirjele"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "keri üks rida üles"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "liigu eelmisele lehele"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "trüki jooksev kirje"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "otsi aadresse välise programmiga"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "lisa uue päringu tulemused olemasolevatele"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "salvesta postkasti muutused ja välju"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "võta postitusootel teade"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "puhasta ja joonista ekraan uuesti"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{sisemine}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "vasta teatele"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "võta teade aluseks uuele"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "salvesta teade/lisa faili"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "otsi regulaaravaldist"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "otsi regulaaravaldist tagaspidi"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "otsi järgmist"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "otsi järgmist vastasuunas"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "lülita otsingumustri värvimine"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "käivita käsk käsuinterpretaatoris"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "järjesta teated"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "järjesta teated tagurpidi"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "märgi jooksev kirje"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "kasuta funktsiooni märgitud teadetel"
+
+#: keymap_alldefs.h:164
+#, fuzzy
+msgid "apply next function ONLY to tagged messages"
+msgstr "kasuta funktsiooni märgitud teadetel"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "märgi jooksev alamteema"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "märgi jooksev teema"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "lülita teate 'värskuse' lippu"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "lülita postkasti ülekirjutatamist"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "lülita kas brausida ainult postkaste või kõiki faile"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "liigu lehe algusse"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "taasta jooksev kirje"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "taasta kõik teema teated"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "taasta kõik alamteema teated"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "näita Mutti versiooni ja kuupäeva"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "vaata lisa kasutades vajadusel mailcap kirjet"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "näita MIME lisasid"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr ""
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "näita praegu kehtivat piirangu mustrit"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "ava/sule jooksev teema"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "ava/sule kõik teemad"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "lisa PGP avalik võti"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "näita PGP võtmeid"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "saada PGP avalik võti"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "kontrolli PGP avalikku võtit"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "vaata võtme kasutaja identifikaatorit"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "kontrolli klassikalise pgp olemasolu"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "Aktsepteeri koostatud ahelaga"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "Lisa edasisaatja ahela lõppu"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "Lisa edasisaatja ahelasse"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "Eemalda edasisaatja ahelast"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "Vali ahela eelmine element"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "Vali ahela järgmine element"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "saada teade läbi mixmaster vahendajate ahela"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "loo avateksti koopia ja kustuta"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "loo avateksti koopia"
+
+#: keymap_alldefs.h:196
+msgid "wipe passphrase(s) from memory"
+msgstr "eemalda parool(id) mälust"
+
+#: keymap_alldefs.h:197
+msgid "extract supported public keys"
+msgstr "eralda toetatud avalikud võtmed"
+
+#: keymap_alldefs.h:198
+msgid "show S/MIME options"
+msgstr "näita S/MIME võtmeid"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Mälu on otsas!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"Arendajatega kontakteerumiseks saatke palun kiri aadressil <mutt-dev@mutt."
+"org>.\n"
+"Veast teatamiseks kasutage palun käsku flea(1).\n"
+
+#: main.c:50
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Autoriõigus (C) 1996-2002 Michael R. Elkins ja teised.\n"
+"Mutt ei paku MITTE MINGISUGUSEID GARANTIISID; detailid käsuga `mutt -vv'.\n"
+"Mutt on vaba tarkvara ja te võite seda teatud tingimustel levitada;\n"
+"detailsemat infot saate käsuga `mutt -vv'.\n"
+
+#: main.c:56
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Autoriõigus (C) 1996-2002 Michael R. Elkins <me@cs.hmc.edu>\n"
+"Autoriõigus (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Autoriõigus (C) 1997-2002 Thomas Roessler <roessler@guug.de>\n"
+"Autoriõigus (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Autoriõigus (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Autoriõigus (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Autoriõigus (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"Paljud siin mainimata inimesed on saatnud koodi, parandusi ja soovitusi.\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"
+
+#: main.c:94
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"kasutage: mutt [ -nRyzZ ] [ -e <käsk> ] [ -F <fail> ] [ -m <tüüp> ]\n"
+"               [ -f <fail> ]\n"
+"          mutt [ -nR ] [ -e <käsk> ] [ -F <fail> ] -Q <päring>\n"
+"               [ -Q <päring> ] [...]\n"
+"          mutt [ -nR ] [ -e <käsk> ] [ -F <fail> ] -A <hüüdnimi>\n"
+"               [ -A <hüüdnimi> ] [...]\n"
+"          mutt [ -nx ] [ -e <käsk> ] [ -a <fail> ] [ -F <fail> ] [ -H "
+"<fail> ]\n"
+"               [ -i <fail> ] [ -s <teema> ] [ -b <aadr> ] [ -c <aadr> ]\n"
+"               <aadr> [ ... ]\n"
+"          mutt [ -n ] [ -e <käsk> ] [ -F <fail> ] -p\n"
+"          mutt -v[v]\n"
+"\n"
+"võtmed:\n"
+"  -A <hüüdnimi>\tavalda antud hüüdnimi\n"
+"  -a <fail>\tlisa teatele fail\n"
+"  -b <aadress>\tmäära pimekoopia (BCC) aadress\n"
+"  -c <aadress>\tmäära koopia (CC) aadress\n"
+"  -e <käsk>\tkäivita peale algväärtutamist käsk\n"
+"  -f <fail>\tmillist postkasti lugeda\n"
+"  -F <fail>\tmäära alternatiivne muttrc fail\n"
+"  -H <fail>\tmäära päiste mustandi fail\n"
+"  -i <fail>\tfail mida mutt peab vastamisel lisama\n"
+"  -m <tüüp>\tmääta vaikimisi postkasti tüüp\n"
+"  -n\t\tära loe süsteemset Muttrc faili\n"
+"  -p\t\tlae postitusootel teade\n"
+"  -Q <muutuja>\tloe seadete muutuja\n"
+"  -R\t\tava postkast ainult lugemiseks\n"
+"  -s <teema>\tmäära teate teema (jutumärkides, kui on mitmesõnaline)\n"
+"  -v\t\tnäita versiooni ja kompileerimis-aegseid määranguid\n"
+"  -x\t\tsimuleeri mailx saatmise moodi\n"
+"  -y\t\tvali postkast teie 'postkastide' loendist\n"
+"  -z\t\tvälju kohe, kui postkastis pole uusi teateid\n"
+"  -Z\t\tava esimene kaust uue teatega, välju kohe, kui pole\n"
+"  -h\t\tesita see abiinfo"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Kompileerimise võtmed:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Viga terminali initsialiseerimisel."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Silumise tase %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "DEBUG ei ole kompileerimise ajal defineeritud. Ignoreerin.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s ei ole. Loon selle?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "%s ei saa luua: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Saajaid ei ole määratud.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: faili ei saa lisada.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Uute teadetega postkaste ei ole."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Sissetulevate kirjade postkaste ei ole määratud."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "Postkast on tühi."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Loen %s... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "Postkast on riknenud!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "Postkast oli riknenud!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Fataalne viga! Postkasti ei õnnestu uuesti avada!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Postkasti ei saa lukustada!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+"sync: mbox on muudetud, aga muudetud teateid ei ole! (teatage sellest veast)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Kirjutan teateid... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "Kinnitan muutused..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Kirjutamine ebaõnnestus! Osaline postkast salvestatud faili %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "Postkasti ei õnnestu uuesti avada!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Avan postkasti uuesti..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Hüppa: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Vigane indeksi number."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Kirjeid pole."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Enam allapoole ei saa kerida."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Enam ülespoole ei saa kerida."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Te olete viimasel lehel."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Te olete esimesel lehel."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "Esimene kirje on näidatud."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "Viimane kirje on näidatud."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Te olete viimasel kirjel."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Te olete esimesel kirjel."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Otsi: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Otsi tagurpidi: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Otsingumuster puudub."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Ei leitud."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "Märgitud kirjeid pole."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "Selles menüüs ei ole otsimist realiseeritud."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "hüppamine ei ole dialoogidele realiseeritud."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Märkimist ei toetata."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "Loen %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr "maildir_commit_message(): ei õnnestu seada faili aegu"
+
+#: muttlib.c:835
+#, fuzzy
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "Fail on kataloog, salvestan sinna?"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "Fail on kataloog, salvestan sinna?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Fail kataloogis: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "Fail on olemas, (k)irjutan üle, (l)isan või ka(t)kestan?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "klt"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "Teadet ei saa POP postkasti salvestada."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s ei ole postkast!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Lisan teated kausta %s?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "Ühendus serveriga %s suleti"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL ei ole kasutatav."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "Preconnect käsklus ebaõnnestus"
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Viga serveriga %s suhtlemisel (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr ""
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "Otsin serverit %s..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Ei leia masina \"%s\" aadressi"
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Ühendus serverisse %s..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "Serveriga %s ei õnnestu ühendust luua (%s)."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "Teie süsteemis ei ole piisavalt entroopiat"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "Kogun entroopiat: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s omab ebaturvalisi õigusi!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "Entroopia nappuse tõttu on SSL kasutamine blokeeritud"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "S/V viga"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "protokolli viga"
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "SSL ebaõnnestus: %s"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "Ei õnnestu saada partneri sertifikaati"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "SSL ühendus kasutades %s (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "Tundmatu"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[arvutamine ei õnnestu]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[vigane kuupäev]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "Serveri sertifikaat ei ole veel kehtiv"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "Serveri sertifikaat on aegunud"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Selle serveri omanik on:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Selle sertifikaadi väljastas:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "See sertifikaat on kehtiv"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   alates %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "     kuni %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Sõrmejälg: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "SSL Sertifikaadi kontroll"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(k)eeldu, (n)õustu korra, nõustu (a)alati"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "kna"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(k)eeldu, (n)õustu korra"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "kn"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Välju  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Hoiatus: Sertifikaati ei saa salvestada"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "Sertifikaat on salvestatud"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Lukustamise arv on ületatud, eemaldan %s lukufaili? "
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "%s punktfailiga lukustamine ei õnnestu.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "fcntl luku seadmine aegus!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Ootan fcntl lukku... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "flock luku seadmine aegus!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Ootan flock lukku... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "%s ei saa lukustada\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "Loen %s..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "Kirjutan %s..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "Postkasti %s ei õnnestu sünkroniseerida!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Tõstan loetud teated postkasti %s?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Eemaldan %d kustutatud teate?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Eemaldan %d kustutatud teadet?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Tõstan loetud teated kausta %s..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "Postkasti ei muudetud."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d säilitatud, %d tõstetud, %d kustutatud."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d säilitatud, %d kustutatud."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr "Kirjutamise lülitamiseks vajutage '%s'"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "Kirjutamise uuesti lubamiseks kasutage 'toggle-write'!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "Postkast on märgitud mittekirjutatavaks. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "Postkast on kontrollitud."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Teadet ei õnnestu kirjutada"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "Ei ole selles menüüs kasutatav."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "EelmLk"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "JärgmLm"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Vaata lisa"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Järgm."
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "Teate lõpp on näidatud."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "Teate algus on näidatud."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "tagurpidi otsing: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Otsing: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "Te loete praegu abiinfot."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "Rohkem tsiteetitud teksti pole."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "Tsiteeritud teksiti järel rohkem teksti ei ole."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "mitmeosalisel teatel puudub eraldaja!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Viga avaldises: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Vigane kuupäev: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Vigane kuu: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "Vigane suhteline kuupäev: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "viga avaldises"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "viga mustris: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: vigane käsklus"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: ei toetata selles moodis"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "parameeter puudub"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "sulud ei klapi: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "tühi muster"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "viga: tundmatu op %d (teatage sellest veast)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Kompileerin otsingumustrit..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Käivitan leitud teadetel käsu..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "Ühtegi mustrile vastavat teadet ei leitud."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "Otsing jõudis midagi leidmata lõppu"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "Otsing jõudis midagi leidmata algusse"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Otsing katkestati."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "PGP parool on unustatud."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Viga: ei õnnestu luua PGP alamprotsessi! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- PGP väljundi lõpp --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PGP TEATE ALGUS --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- PGP AVALIKU VÕTME BLOKI ALGUS --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PGP ALLKIRJASTATUD TEATE ALGUS --]\n"
+"\n"
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- PGP TEATE LÕPP --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- PGP AVALIKU VÕTME BLOKI LÕPP --]\n"
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- PGP ALLKIRJASTATUD TEATE LÕPP --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Viga: ei suuda leida PGP teate algust! --]\n"
+"\n"
+
+#: pgp.c:662
+#, fuzzy
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Sisemine viga. Informeerige <roessler@guug.de>."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Viga: PGP alamprotsessi loomine ei õnnestu! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Viga: vigane PGP/MIME teade! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Viga: ajutise faili loomine ebaõnnestus! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- Järgneb PGP/MIME krüptitud info --]\n"
+"\n"
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- PGP/MIME krüptitud info lõpp --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "PGP protsessi loomine ebaõnnestus!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "Kasutan kasutajat = \"%s\" teatel %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "Sisestage kasutaja teatele %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "PGP käivitamine ei õnnestu"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "Laen PGP võtit..."
+
+#: pgpkey.c:486
+#, fuzzy
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "Kõik sobivad võtmed on märgitud aegunuks/tühistatuks."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Vali  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Võtme kontroll  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "PGP võtmed, mis sisaldavad <%s>."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "PGP võtmed, mis sisaldavad \"%s\"."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "/dev/null ei saa avada"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Ei õnnestu avada ajutist faili"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "Võtme ID: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "Seda võtit ei saa kasutada: aegunud/blokeeritud/tühistatud."
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "ID on aegunud/blokeeritud/tühistatud."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "ID kehtivuse väärtus ei ole defineeritud."
+
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "ID ei ole kehtiv."
+
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "ID on ainult osaliselt kehtiv."
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s Kas te soovite seda võtit tõesti kasutada?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Palun sisestage võtme ID: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "Käivitan pgp..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "PGP Võti %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Otsin võtmeid, mis sisaldavad \"%s\"..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "Server ei toeta käsklust TOP."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "Päist ei õnnestu ajutissse faili kirjutada!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "Server ei toeta UIDL käsklust."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "%s on vigane POP tee"
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "Laen teadete nimekirja..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "Teadet ei õnnestu ajutisse faili kirjutada!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "Kontrollin, kas on uusi teateid..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "POP serverit ei ole määratud."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "Uusi teateid POP postkastis pole."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "Kustutan teated serverist?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Loen uusi teateid (%d baiti)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "Viga postkasti kirjutamisel!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d/%d teadet loetud]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "Server sulges ühenduse!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Autentimine (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Autentimine (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "APOP autentimine ebaõnnestus."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "Server ei toeta käsklust USER."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "Teateid ei õnnestu sererile jätta."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "Viga serveriga ühenduse loomisel: %s"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "Sulen ühenduse POP serveriga..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Kontrollin teadete indekseid ..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Ühendus katkes. Taastan ühenduse POP serveriga?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Postitusootel teated"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "Postitusootel teateid pole"
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "Vigane PGP päis"
+
+#: postpone.c:479
+msgid "Illegal S/MIME header"
+msgstr "Vigane S/MIME päis"
+
+#: postpone.c:554
+msgid "Decryption failed."
+msgstr "Dekrüptimine ebaõnnestus."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Uus päring"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Loo alias"
+
+#: query.c:48
+msgid "Search"
+msgstr "Otsi"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Ootan vastust..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Päringukäsku ei ole defineeritud."
+
+#: query.c:286
+msgid "Query"
+msgstr "Päring"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Päring: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Päring '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Toru"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Trüki"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Salvestan..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Lisa on salvestatud."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "HOIATUS: Te olete üle kirjutamas faili %s, jätkan?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Lisa on filtreeritud."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Filtreeri läbi: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Toru käsule: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "Ma ei tea, kuidas trükkida %s lisasid!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Trükin märgitud lisa(d)?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Trükin lisa?"
+
+#: recvattach.c:938
+msgid "Can't decrypt encrypted message!"
+msgstr "Krüpteeritud teadet ei õnnestu lahti krüpteerida!"
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Lisad"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "Osasid, mida näidata, ei ole!"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "Lisasid ei saa POP serverilt kustutada."
+
+#: recvattach.c:1056
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "Krüpteeritud teadetest ei saa lisasid eemaldada."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Kustutada saab ainult mitmeosalise teate lisasid."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Peegeldada saab ainult message/rfc822 osi."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing message!"
+msgstr "Viga teate saatmisel."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing messages!"
+msgstr "Viga teate saatmisel."
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Ajutist faili %s ei saa avada."
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "Edasta lisadena?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+"Kõiki märgitud lisasid ei saa dekodeerida. Edastan ülejäänud MIME formaadis?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Edastan MIME pakina?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "%s loomine ebaõnnestus."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Ei leia ühtegi märgitud teadet."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "Postiloendeid pole!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+"Kõiki märgitud lisasid ei saa dekodeerida. Kapseldan ülejäänud MIME formaati?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Lõppu"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Lisa"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Kustuta"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "OK"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "Mixmaster type2.list laadimine ei õnnestu!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Valige vahendajate ahel."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "Viga: %s ei saa ahela viimase vahendajana kasutada."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Mixmaster ahelad on piiratud %d lüliga."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "Vahendajate ahel on juba tühi."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "Te olete ahela esimese lüli juba valinud."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "Te olete ahela viimase lüli juba valinud."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Mixmaster ei toeta Cc või Bcc päiseid."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr ""
+"Mixmaster kasutamisel omistage palun hostname muutujale korrektne väärtus!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Viga teate saatmisel, alamprotsess lõpetas koodiga %d.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Viga teate saatmisel."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "Vigaselt formaaditud kirje tüübile %s faili \"%s\" real %d"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Mailcap tee ei ole määratud"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "Tüübil %s puudub mailcap kirje"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: liiga vähe argumente"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: liiga palju argumente"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Teema puudub, katkestan?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Teema puudub, katkestan."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Vastan aadressile %s%s?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "Vastus aadressile %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "Märgitud teateid ei ole näha!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Kaasan vastuses teate?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Tsiteerin teadet..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "Kõiki soovitud teateid ei õnnestu kaasata!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "Edasta lisadena?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Valmistan edastatavat teadet..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Laen postitusootel teate?"
+
+#: send.c:1336
+msgid "Edit forwarded message?"
+msgstr "Toimetan edastatavat teadet?"
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Katkestan muutmata teate?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Katkestasin muutmata teate saatmise."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "Kirja ei saadetud."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Teade jäeti postitusootele."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Kirja saajaid pole määratud!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Kirja saajaid ei määratud!"
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Teema puudub, katkestan saatmise?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Teema puudub."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Saadan teadet..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Teadet ei õnnestu saata."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Teade on saadetud."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Saadan taustal."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "Eraldaja puudub! [teatage sellest veast]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s ei ole enam!"
+
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "%s ei ole tavaline fail."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "%s ei saa avada"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Viga teate saatmisel, alamprotsess lõpetas %d (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Väljund saatmise protsessist"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr ""
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s...  Väljun.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "Sain %s...  Väljun.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Sain signaali %d...  Väljun.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr "Usaldatud "
+
+#: smime.c:303
+msgid "Verified  "
+msgstr "Kontrollitud "
+
+#: smime.c:306
+msgid "Unverified"
+msgstr "Kontrollimata"
+
+#: smime.c:309
+msgid "Expired   "
+msgstr "Aegunud   "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr "Tühistatud "
+
+#: smime.c:315
+msgid "Invalid   "
+msgstr "Vigane    "
+
+#: smime.c:318
+msgid "Unknown   "
+msgstr "Tundmatu  "
+
+#: smime.c:347
+msgid "Enter keyID: "
+msgstr "Sisestage võtme ID: "
+
+#: smime.c:370
+#, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "S/MIME sertifikaadid, mis sisaldavad \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr "ID %s pole kontrollitud. Kas soovite seda ikka %s jaoks kasutada ?"
+
+#: smime.c:523 smime.c:592
+#, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "Kasutan (mitteusaldatavat!) ID %s %s jaoks?"
+
+#: smime.c:526 smime.c:595
+#, c-format
+msgid "Use ID %s for %s ?"
+msgstr "Kasutan ID %s %s jaoks?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+"Hoiatus: Te pole veel otsustanud usaldada ID %s. (jätkamiseks suvaline klahv)"
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr "%s jaoks puudub kehtiv sertifikaat."
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "Viga: ei õnnestu luua OpenSSL alamprotsessi!"
+
+#: smime.c:1197
+msgid "no certfile"
+msgstr "sertifikaadi faili pole"
+
+#: smime.c:1200
+msgid "no mbox"
+msgstr "pole postkast"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr "OpenSSL väljundit pole..."
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr "Hoiatus: vahepealset sertifikaati pole."
+
+#: smime.c:1426
+msgid "Can't open OpenSSL subprocess!"
+msgstr "OpenSSL protsessi avamine ebaõnnestus!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr "OpenSSL väljundit pole..."
+
+#: smime.c:1629 smime.c:1751
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- OpenSSL väljundi lõpp --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Viga: ei õnnestu luua OpenSSL alamprotsessi! --]\n"
+
+#: smime.c:1755
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr "[-- Järgneb S/MIME krüptitud info --]\n"
+
+#: smime.c:1758
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr "[-- Järgneb S/MIME allkirjastatud info --]\n"
+
+#: smime.c:1822
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- S/MIME krüptitud info lõpp --]\n"
+
+#: smime.c:1824
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- S/MIME Allkirjastatud info lõpp --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Järjestan teateid..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "Ei leia järjestamisfunktsiooni! [teatage sellest veast]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(pole postkast)"
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "Vanem teade ei ole selles piiratud vaates nähtav."
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "Vanem teade ei ole kättesaadav."
+
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "Käivitan OpenSSL..."
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "Peegelda teade aadressile %s...?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "Peegelda teated aadressile %s...?"
+
+#~ msgid "ewsabf"
+#~ msgstr "kaimu"
diff --git a/po/fr.gmo b/po/fr.gmo
new file mode 100644 (file)
index 0000000..0a6a398
Binary files /dev/null and b/po/fr.gmo differ
diff --git a/po/fr.po b/po/fr.po
new file mode 100644 (file)
index 0000000..f550027
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,4662 @@
+# French messages for Mutt.
+# Copyright (C) 1998-2003 Marc Baudoin <babafou@babafou.eu.org>, Vincent Lefevre <vincent@vinc17.org>
+# Marc Baudoin <babafou@babafou.eu.org>, Vincent Lefevre <vincent@vinc17.org>, 1998-2003
+#
+# , fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Mutt 1.5.5.1\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2003-11-09 13:44+0100\n"
+"Last-Translator: Vincent Lefevre <vincent@vinc17.org>\n"
+"Language-Team: mutt-dev <mutt-dev@mutt.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Report-Msgid-Bugs-To: \n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "Nom d'utilisateur sur %s : "
+
+# , c-format
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "Mot de passe pour %s@%s : "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Quitter"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Effacer"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Récup"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Sélectionner"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Aide"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "Vous n'avez pas défini d'alias !"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Alias"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Créer l'alias : "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "Vous avez déjà défini un alias ayant ce nom !"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr "Attention : ce nom d'alias peut ne pas fonctionner. Corriger ?"
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Adresse : "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr "Erreur : '%s' est un mauvais IDN."
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Nom de la personne : "
+
+# , c-format
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] Accepter ?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Sauver dans le fichier : "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Alias ajouté."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Ne correspond pas au nametemplate, continuer ?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "L'entrée compose du fichier mailcap nécessite %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "Erreur en exécutant \"%s\" !"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Échec d'ouverture du fichier pour décoder les en-têtes."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Échec d'ouverture du fichier pour enlever les en-têtes."
+
+# , c-format
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "Pas d'entrée compose pour %s dans mailcap, création d'un fichier vide."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "L'entrée Edit du fichier mailcap nécessite %%s"
+
+# , c-format
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "Pas d'entrée edit pour %s dans mailcap"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "Pas d'entrée mailcap correspondante. Visualisation en texte."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "Type MIME non défini. Impossible de visualiser l'attachement."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Impossible de créer le filtre"
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Impossible de créer le filtre"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "Erreur d'écriture !"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Je ne sais pas comment imprimer ceci !"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Changement de répertoire"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Masque"
+
+# , c-format
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s n'est pas un répertoire."
+
+# , c-format
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Boîtes aux lettres [%d]"
+
+# , c-format
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Abonné [%s], masque de fichier : %s"
+
+# , c-format
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Répertoire [%s], masque de fichier : %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Impossible d'attacher un répertoire !"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Aucun fichier ne correspond au masque"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "La création n'est supportée que pour les boîtes aux lettres IMAP"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "La suppression n'est supportée que pour les boîtes aux lettres IMAP"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Voulez-vous vraiment supprimer la boîte aux lettres \"%s\" ?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "Boîte aux lettres supprimée."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "Boîte aux lettres non supprimée."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Changement de répertoire vers : "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Erreur de lecture du répertoire."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Masque de fichier : "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Tri inverse par (d)ate, (a)lphabétique, (t)aille ou (n)e pas trier ? "
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Tri par (d)ate, (a)lphabétique, (t)aille ou (n)e pas trier ? "
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "datn"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Nouveau nom de fichier : "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Impossible de visualiser un répertoire"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Erreur en essayant de visualiser le fichier"
+
+# , c-format
+#: buffy.c:442
+msgid "New mail in "
+msgstr "Nouveau(x) message(s) dans "
+
+# , c-format
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s : couleur non disponible sur ce terminal"
+
+# , c-format
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s : cette couleur n'existe pas"
+
+# , c-format
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s : cet objet n'existe pas"
+
+# , c-format
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s : commande uniquement valide pour l'objet index"
+
+# , c-format
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s : pas assez d'arguments"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Arguments manquants."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color : pas assez d'arguments"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono : pas assez d'arguments"
+
+# , c-format
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s : cet attribut n'existe pas"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "pas assez d'arguments"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "trop d'arguments"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "La couleur default n'est pas disponible"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "Vérifier la signature PGP ?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Impossible de créer le fichier temporaire !"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Impossible de créer le filtre d'affichage"
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "Impossible de copier le message"
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr "Signature S/MIME vérifiée avec succès."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr "Le propriétaire du certificat S/MIME ne correspond pas à l'expéditeur."
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr "La signature S/MIME n'a PAS pu être vérifiée."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "Signature PGP vérifiée avec succès."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "La signature PGP n'a PAS pu être vérifiée."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Commande : "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Renvoyer le message à : "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Renvoyer les messages marqués à : "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "Erreur de décodage de l'adresse !"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr "Mauvais IDN : '%s'"
+
+# , c-format
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Renvoyer le message à %s"
+
+# , c-format
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Renvoyer les messages à %s"
+
+#: commands.c:294 recvcmd.c:192
+msgid "Message not bounced."
+msgstr "Message non renvoyé."
+
+#: commands.c:294 recvcmd.c:192
+msgid "Messages not bounced."
+msgstr "Messages non renvoyés."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Message renvoyé."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Messages renvoyés."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "Impossible de créer le processus filtrant"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Passer à la commande : "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "Aucune commande d'impression n'a été définie."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "Imprimer le message ?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Imprimer les messages marqués ?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "Message imprimé"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Messages imprimés"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "Le message n'a pas pu être imprimé"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "Les messages n'ont pas pu être imprimés"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Tri inv (d)ate/(a)uteur/(r)eçu/(o)bj/de(s)t/d(i)sc/(n)on/(t)aille/s(c)"
+"ore ? : "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Tri (d)ate/(a)uteur/(r)eçu/(o)bj/de(s)t/d(i)sc/(n)on/(t)aille/s(c)ore ? : "
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "darosintc"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Commande shell : "
+
+# , c-format
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "Décoder-sauver%s vers une BAL"
+
+# , c-format
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "Décoder-copier%s vers une BAL"
+
+# , c-format
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "Déchiffrer-sauver%s vers une BAL"
+
+# , c-format
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "Déchiffrer-copier%s vers une BAL"
+
+# , c-format
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "Sauver%s vers une BAL"
+
+# , c-format
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "Copier%s vers une BAL"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " les messages marqués"
+
+# , c-format
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Copie vers %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "Convertir en %s à l'envoi ?"
+
+# , c-format
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Content-Type changé à %s."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "Jeu de caractères changé à %s ; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "pas de conversion"
+
+#: commands.c:914
+msgid "converting"
+msgstr "conversion"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Il n'y a pas d'attachements."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Envoyer"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Abandonner"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Attacher fichier"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Description"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Signer, Chiffrer"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Chiffrer"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Signer"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Clair"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " signer en tant que : "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<défaut>"
+
+#: compose.c:149
+msgid "Encrypt with: "
+msgstr "Chiffrer avec : "
+
+#: compose.c:165
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "(c)hiffrer PGP, (s)igner, (e)n tant que, les (d)eux, ou (o)ublier ? "
+
+#: compose.c:166
+msgid "esabf"
+msgstr "csedo"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Signer en tant que : "
+
+#: compose.c:227
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"(c)hiffr S/MIME, (s)ign, ch. (a)vec, s. (e)n tant que, les (d)eux, (o)"
+"ublier ? "
+
+#: compose.c:228
+msgid "eswabf"
+msgstr "csaedo"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, ou (o)ublier ? "
+
+#: compose.c:238
+msgid "12345f"
+msgstr "12345o"
+
+# , c-format
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] n'existe plus !"
+
+# , c-format
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] modifié. Mise à jour du codage ?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Attachements"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr "Attention : '%s' est un mauvais IDN."
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Vous ne pouvez pas effacer l'unique attachement."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr "Mauvais IDN dans « %s » : '%s'"
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "J'attache les fichiers sélectionnés..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "Impossible d'attacher %s !"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Ouvrir une boîte aux lettres d'où attacher un message"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "Aucun message dans ce dossier."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Marquez les messages que vous voulez attacher !"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Impossible d'attacher !"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "Le recodage affecte uniquement les attachements textuels."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "L'attachement courant ne sera pas converti."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "L'attachement courant sera converti."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Codage invalide."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Sauver une copie de ce message ?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Renommer en : "
+
+# , c-format
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "Impossible d'obtenir le statut de %s : %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Nouveau fichier : "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Content-Type est de la forme base/sous"
+
+# , c-format
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Content-Type %s inconnu"
+
+# , c-format
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Impossible de créer le fichier %s"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "Nous sommes en présence d'un échec de fabrication d'un attachement"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Ajourner ce message ?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Écrire le message dans la boîte aux lettres"
+
+# , c-format
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Écriture du message dans %s ..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "Message écrit."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr "S/MIME déjà sélectionné. Effacer & continuer ? "
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr "PGP déjà sélectionné. Effacer & continuer ? "
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr " (heure courante : %c)"
+
+#: crypt.c:71
+#, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- La sortie %s suit%s --]\n"
+
+#: crypt.c:86
+msgid "Passphrase(s) forgotten."
+msgstr "Phrase(s) de passe oubliée(s)."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Entrez la phrase de passe PGP :"
+
+#: crypt.c:147
+msgid "Enter SMIME passphrase:"
+msgstr "Entrez la phrase de passe SMIME :"
+
+#: crypt.c:192
+msgid "Create a traditional (inline) PGP message?"
+msgstr "Créer un message PGP traditionnel (en ligne) ?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "Appel de PGP..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr ""
+"Les messages S/MIME sans indication sur le contenu ne sont pas supportés."
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr "Tentative d'extraction de clés PGP...\n"
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr "Tentative d'extraction de certificats S/MIME...\n"
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- Erreur : Structure multipart/signed incohérente ! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- Erreur : Protocole multipart/signed %s inconnu ! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Attention : les signatures %s/%s ne peuvent pas être vérifiées. --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- Les données suivantes sont signées --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Attention : Impossible de trouver des signatures. --]\n"
+"\n"
+
+#: crypt.c:924
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Fin des données signées --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "oui"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "non"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Quitter Mutt ?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "erreur inconnue"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Appuyez sur une touche pour continuer..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " ('?' pour avoir la liste) : "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Aucune boîte aux lettres n'est ouverte."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Il n'y a pas de messages."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "La boîte aux lettres est en lecture seule."
+
+# , c-format
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "Fonction non autorisée en mode attach-message."
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "Pas de messages visibles."
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr ""
+"Impossible de rendre inscriptible une boîte aux lettres en lecture seule !"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "Les modifications du dossier seront enregistrées à sa sortie."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Les modifications du dossier ne seront pas enregistrées."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Quitter"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Sauver"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Message"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Répondre"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Groupe"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr ""
+"Boîte aux lettres modifiée extérieurement. Les indicateurs peuvent être faux."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Nouveau(x) message(s) dans cette boîte aux lettres."
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "La boîte aux lettres a été modifiée extérieurement."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Pas de messages marqués."
+
+# , c-format
+#: curs_main.c:653 menu.c:896
+msgid "Nothing to do."
+msgstr "Rien à faire."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Aller au message : "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "L'argument doit être un numéro de message."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Ce message n'est pas visible."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Numéro de message invalide."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Effacer les messages correspondant à : "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "Aucun motif de limite n'est en vigueur."
+
+# , c-format
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Limite : %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Limiter aux messages correspondant à : "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Quitter Mutt ?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Marquer les messages correspondant à : "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Récupérer les messages correspondant à : "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Démarquer les messages correspondant à : "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Ouvre la boîte aux lettres en lecture seule"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Ouvre la boîte aux lettres"
+
+# , c-format
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s n'est pas une boîte aux lettres."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Quitter Mutt sans sauvegarder ?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Vous êtes sur le dernier message."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Pas de message non effacé."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Vous êtes sur le premier message."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "La recherche est repartie du début."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "La recherche est repartie de la fin."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Pas de nouveaux messages"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Pas de messages non lus"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " dans cette vue limitée"
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "Impossible de changer l'indicateur 'important' sur le serveur POP."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Pas d'autres discussions."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Vous êtes sur la première discussion."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "L'affichage des discussions n'est pas activé."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "Cette discussion contient des messages non-lus."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "Impossible d'éditer le message sur le serveur POP."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tinsère une ligne commençant par un unique ~\n"
+"~b utilisateurs\tajoute des utilisateurs au champ Bcc:\n"
+"~c utilisateurs\tajoute des utilisateurs au champ Cc:\n"
+"~f messages\tinclut des messages\n"
+"~F messages\tidentique à ~f, mais inclut également les en-têtes\n"
+"~h\t\tédite l'en-tête du message\n"
+"~m messages\tinclut et cite les messages\n"
+"~M messages\tidentique à ~m, mais inclut les en-têtes\n"
+"~p\t\timprime le message\n"
+"~q\t\tsauvegarde le fichier et quitte l'éditeur\n"
+"~r fichier\tlit un fichier dans l'éditeur\n"
+"~t utilisateurs\tajoute des utilisateurs au champ To:\n"
+"~u\t\tduplique la ligne précédente\n"
+"~v\t\tédite le message avec l'éditeur défini dans $visual\n"
+"~w fichier\tsauvegarde le message dans un fichier\n"
+"~x\t\tabandonne les modifications et quitte l'éditeur\n"
+"~?\t\tce message\n"
+".\t\tseul sur une ligne, termine la saisie\n"
+
+# , c-format
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d : numéro de message invalide.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Veuillez terminer le message par un . en début de ligne)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "Pas de boîte aux lettres.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Le message contient :\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(continuer)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "nom de fichier manquant.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Pas de lignes dans le message.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr "Mauvais IDN dans %s : '%s'\n"
+
+# , c-format
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s : commande d'éditeur inconnue (~? pour l'aide)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "impossible de créer le dossier temporaire : %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "impossible d'écrire dans le dossier temporaire : %s"
+
+#: editmsg.c:101
+#, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "impossible de tronquer le dossier temporaire : %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "Le fichier contenant le message est vide !"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "Message non modifié !"
+
+# , c-format
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "Impossible d'ouvrir le fichier : %s"
+
+# , c-format
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Impossible d'ajouter au dossier : %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Erreur. On préserve le fichier temporaire : %s"
+
+# , c-format
+#: flags.c:332
+msgid "Set flag"
+msgstr "Positionner l'indicateur"
+
+# , c-format
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Effacer l'indicateur"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[-- Erreur : Aucune partie du Multipart/Alternative n'a pu être affichée ! "
+"--]\n"
+
+# , c-format
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Attachement #%d"
+
+# , c-format
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Type : %s/%s, Codage : %s, Taille : %s --]\n"
+
+# , c-format
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Visualisation automatique en utilisant %s --]\n"
+
+# , c-format
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Invocation de la commande de visualisation automatique : %s"
+
+# , c-format
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- Impossible d'exécuter %s. --]\n"
+
+# , c-format
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Visualisation automatique stderr de %s --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- Erreur : message/external-body n'a pas de paramètre access-type --]\n"
+
+# , c-format
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Cet attachement %s/%s "
+
+# , c-format
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(taille %s octets) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "a été effacé --]\n"
+
+# , c-format
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- le %s --]\n"
+
+# , c-format
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- nom: %s --]\n"
+
+# , c-format
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Cet attachement %s/%s n'est pas inclus, --]\n"
+
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr "[-- et la source externe indiquée a expiré. --]\n"
+
+# , c-format
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr "[-- et l'access-type %s indiqué n'est pas supporté --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Erreur : multipart/signed n'a pas de protocole."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Erreur : multipart/encrypted n'a pas de paramètre de protocole !"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Impossible d'ouvrir le fichier temporaire !"
+
+# , c-format
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s n'est pas disponible "
+
+# , c-format
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(utilisez '%s' pour voir cette partie)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "(la fonction 'view-attachments' doit être affectée à une touche !)"
+
+# , c-format
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s : impossible d'attacher le fichier"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "ERREUR : veuillez signaler ce problème"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<INCONNU>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Affectations génériques :\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Fonctions non affectées :\n"
+"\n"
+
+# , c-format
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Aide pour %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook : impossible de faire un unhook * à l'intérieur d'un hook."
+
+# , c-format
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook : type hook inconnu : %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook : impossible de supprimer un %s à l'intérieur d'un %s."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "Pas d'authentificateurs disponibles"
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Authentification (anonyme)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "L'authentification anonyme a échoué."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Authentification (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "L'authentification CRAM-MD5 a échoué."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Authentification (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "L'authentification GSSAPI a échoué."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "LOGIN désactivée sur ce serveur."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Connexion..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "La connexion a échoué."
+
+#: imap/auth_sasl.c:112
+#, c-format
+msgid "Authenticating (%s)..."
+msgstr "Authentification (%s)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "L'authentification SASL a échoué."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "%s n'est pas un chemin IMAP valide"
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "Récupération des espaces de noms..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Récupération de la liste des dossiers..."
+
+# , c-format
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "Ce dossier n'existe pas"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Créer la boîte aux lettres : "
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "La boîte aux lettres doit avoir un nom."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Boîte aux lettres créée."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "Boîte aux lettres fermée"
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Erreur fatale. Le nombre de messages ne correspond pas !"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "Fermeture de la connexion à %s..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Ce serveur IMAP est trop ancien. Mutt ne marche pas avec."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr "Réponse inattendue reçue du serveur : %s"
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "Connexion sécurisée avec TLS ?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "Impossible de négocier la connexion TLS"
+
+# , c-format
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "Sélection de %s..."
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "Erreur à l'ouverture de la boîte aux lettres"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Impossible d'ajouter aux boîtes aux lettres IMAP sur ce serveur"
+
+# , c-format
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "Créer %s ?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Fermeture de la connexion au serveur IMAP..."
+
+# , c-format
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "Marquage de %d messages à effacer..."
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "Expunge a échoué"
+
+# , c-format
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Sauvegarde des indicateurs de statut du message... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Effacement des messages sur le serveur..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbox: EXPUNGE a échoué"
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "CLOSE a échoué"
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "Mauvaise boîte aux lettres"
+
+# , c-format
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "Abonnement à %s..."
+
+# , c-format
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "Désabonnement de %s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr ""
+"Impossible de récupérer les en-têtes à partir de cette version du serveur "
+"IMAP."
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "Impossible de créer le fichier temporaire %s"
+
+# , c-format
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Récupération des en-têtes des messages... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Récupération du message..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr ""
+"L'index du message est incorrect. Essayez de rouvrir la boîte aux lettres."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Chargement du message ..."
+
+# , c-format
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "Copie de %d messages dans %s..."
+
+# , c-format
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "Copie du message %d dans %s..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "Continuer ?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "alias : pas d'adresse"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr "Attention : mauvais IDN '%s' dans l'alias '%s'.\n"
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "en-tête invalide"
+
+# , c-format
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s : méthode de tri inconnue"
+
+# , c-format
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s) : erreur dans l'expression rationnelle : %s\n"
+
+# , c-format
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s : variable inconnue"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "ce préfixe est illégal avec reset"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "cette valeur est illégale avec reset"
+
+# , c-format
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s est positionné"
+
+# , c-format
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s n'est pas positionné"
+
+# , c-format
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s : type de boîte aux lettres invalide"
+
+# , c-format
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s : valeur invalide"
+
+# , c-format
+#: init.c:1312
+#, c-format
+msgid "%s: Unknown type."
+msgstr "%s : type inconnu."
+
+# , c-format
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s : type inconnu"
+
+# , c-format
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Impossible d'obtenir le statut de %s : %s"
+
+# , c-format
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s n'est pas un fichier ordinaire."
+
+# , c-format
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Erreur dans %s, ligne %d : %s"
+
+# , c-format
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source : erreurs dans %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source : lecture interrompue car trop d'erreurs dans %s"
+
+# , c-format
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source : erreur dans %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source : trop d'arguments"
+
+# , c-format
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s : commande inconnue"
+
+# , c-format
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Erreur dans la ligne de commande : %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "impossible de déterminer le répertoire personnel"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "impossible de déterminer le nom d'utilisateur"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Boucle de macro détectée."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Cette touche n'est pas affectée."
+
+# , c-format
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Cette touche n'est pas affectée. Tapez '%s' pour avoir l'aide."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push : trop d'arguments"
+
+# , c-format
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s : ce menu n'existe pas"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "séquence de touches nulle"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind : trop d'arguments"
+
+# , c-format
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s : cette fonction n'existe pas dans la table"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro : séquence de touches vide"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro : trop d'arguments"
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec : pas d'arguments"
+
+# , c-format
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s : cette fonction n'existe pas"
+
+# , c-format
+#: keymap.c:912
+msgid "Enter keys (^G to abort): "
+msgstr "Entrez des touches (^G pour abandonner) : "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr "Caractère = %s, Octal = %o, Decimal = %d"
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "opération nulle"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr "fin d'exécution conditionnelle (noop)"
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr ""
+"forcer la visualisation d'un attachment en utilisant le fichier mailcap"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "visualiser un attachment en tant que texte"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "Inverser l'affichage des sous-parties"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "se déplacer en bas de la page"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "renvoyer un message à un autre utilisateur"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "sélectionner un nouveau fichier dans ce répertoire"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "visualiser le fichier"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "afficher le nom du fichier sélectionné actuellement"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "s'abonner à la BAL courante (IMAP seulement)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "se désabonner de la BAL courante (IMAP seulement)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr ""
+"changer entre voir toutes les BAL/voir les BAL abonnées (IMAP seulement)"
+
+#: keymap_alldefs.h:18
+msgid "list mailboxes with new mail"
+msgstr "lister les BAL ayant de nouveaux messages"
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "changer de répertoires"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "vérifier la présence de nouveaux messages dans les BAL"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "attacher un fichier à ce message"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "attacher un message à ce message"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "éditer la liste BCC"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "éditer la liste CC"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "éditer la description de l'attachement"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "éditer le transfer-encoding de l'attachement"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "entrer le nom d'un fichier dans lequel sauver une copie de ce message"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "éditer le fichier à attacher"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "éditer le champ from"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "éditer le message avec ses en-têtes"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "éditer le message"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "éditer l'attachement en utilisant l'entrée mailcap"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "éditer le champ Reply-To"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "éditer l'objet de ce message"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "éditer la liste TO"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "créer une nouvelle BAL (IMAP seulement)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "éditer le content-type de l'attachement"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "obtenir une copie temporaire d'un attachement"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "lancer ispell sur le message"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "composer un nouvel attachement en utilisant l'entrée mailcap"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "inverser le recodage de cet attachement"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "sauvegarder ce message pour l'envoyer plus tard"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "renommer/déplacer un fichier attaché"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "envoyer le message"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "changer la disposition (en ligne/attachement)"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "changer l'option de suppression de fichier après envoi"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "mettre à jour les informations de codage d'un attachement"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "écrire le message dans un dossier"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "copier un message dans un fichier ou une BAL"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "créer un alias à partir de l'expéditeur d'un message"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "déplacer l'entrée au bas de l'écran"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "déplacer l'entrée au milieu de l'écran"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "déplacer l'entrée en haut de l'écran"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "faire une copie décodée (text/plain)"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "faire une copie décodée (text/plain) et effacer"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "effacer l'entrée courante"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "supprimer la BAL courante (IMAP seulement)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "effacer tous les messages dans la sous-discussion"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "effacer tous les messages dans la discussion"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "afficher l'adresse complète de l'expéditeur"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "afficher le message et inverser la restriction des en-têtes"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "afficher un message"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "éditer le message brut"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "effacer le caractère situé devant le curseur"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "déplacer le curseur d'un caractère vers la gauche"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "déplacer le curseur au début du mot"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "aller au début de la ligne"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "parcourir les boîtes aux lettres recevant du courrier"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "compléter un nom de fichier ou un alias"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "compléter une adresse grâce à une requête"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "effacer le caractère situé sous le curseur"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "aller à la fin de la ligne"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "déplacer le curseur d'un caractère vers la droite"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "déplacer le curseur à la fin du mot"
+
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr "redescendre dans l'historique"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "remonter dans l'historique"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "effacer la fin de la ligne à partir du curseur"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "effacer la fin du mot à partir du curseur"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "effacer tous les caractères de la ligne"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "effacer le mot situé devant le curseur"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "entrer le caractère correspondant à la prochaine touche"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "échanger le caractère situé sous le curseur avec le précédent"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "capitaliser le mot"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "convertir le mot en minuscules"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "convertir le mot en majuscules"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "entrer une commande muttrc"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "entrer un masque de fichier"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "sortir de ce menu"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "filtrer un attachement au moyen d'une commande shell"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "se déplacer sur la première entrée"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "modifier l'indicateur 'important' d'un message"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "faire suivre un message avec des commentaires"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "sélectionner l'entrée courante"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "répondre à tous les destinataires"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "descendre d'1/2 page"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "remonter d'1/2 page"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "cet écran"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "aller à un numéro d'index"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "aller à la dernière entrée"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "répondre à la liste spécifiée"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "exécuter une macro"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "composer un nouveau message"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "ouvrir un dossier différent"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "ouvrir un dossier différent en lecture seule"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "effacer un indicateur de statut d'un message"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "effacer les messages correspondant à un motif"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "forcer la récupération du courrier depuis un serveur IMAP"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "récupérer le courrier depuis un serveur POP"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "aller au premier message"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "aller au dernier message"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "afficher seulement les messages correspondant à un motif"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "aller au nouveau message suivant"
+
+#: keymap_alldefs.h:113
+msgid "jump to the next new or unread message"
+msgstr "aller au message nouveau ou non lu suivant"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "aller à la sous-discussion suivante"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "aller à la discussion suivante"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "aller au message non effacé suivant"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "aller au message non lu suivant"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "aller au message père dans la discussion"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "aller à la discussion précédente"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "aller à la sous-discussion précédente"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "aller au message non effacé précédent"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "aller au nouveau message précédent"
+
+#: keymap_alldefs.h:123
+msgid "jump to the previous new or unread message"
+msgstr "aller au message nouveau ou non lu précédent"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "aller au message non lu précédent"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "marquer la discussion courante comme lue"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "marquer la sous-discussion courante comme lue"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "mettre un indicateur d'état sur un message"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "sauver les modifications de la boîte aux lettres"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "marquer les messages correspondant à un motif"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "récupérer les messages correspondant à un motif"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "démarquer les messages correspondant à un motif"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "aller au milieu de la page"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "aller à l'entrée suivante"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "descendre d'une ligne"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "aller à la page suivante"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "aller à la fin du message"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "inverser l'affichage du texte cité"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "sauter le texte cité"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "aller au début du message"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "passer le message/l'attachement à une commande shell"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "aller à l'entrée précédente"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "remonter d'une ligne"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "aller à la page précédente"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "imprimer l'entrée courante"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "demander des adresses à un programme externe"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "ajouter les nouveaux résultats de la requête aux résultats courants"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "sauver les modifications de la boîte aux lettres et quitter"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "rappeler un message ajourné"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "effacer l'écran et réafficher"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{interne}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "répondre à un message"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "utiliser le message courant comme modèle pour un nouveau message"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "sauver le message/l'attachement dans un fichier"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "rechercher une expression rationnelle"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "rechercher en arrière une expression rationnelle"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "rechercher la prochaine occurrence"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "rechercher la prochaine occurrence dans la direction opposée"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "inverser la coloration du motif de recherche"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "exécuter une commande dans un sous-shell"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "trier les messages"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "trier les messages dans l'ordre inverse"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "marquer l'entrée courante"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "appliquer la prochaine fonction aux messages marqués"
+
+#: keymap_alldefs.h:164
+msgid "apply next function ONLY to tagged messages"
+msgstr "appliquer la prochaine fonction SEULEMENT aux messages marqués"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "marquer la sous-discussion courante"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "marquer la discussion courante"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "inverser l'indicateur 'nouveau' d'un message"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "changer l'option de mise à jour de la boîte aux lettres"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "changer entre l'affichage des BAL et celui de tous les fichiers"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "aller en haut de la page"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "récupérer l'entrée courante"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "récupérer tous les messages de la discussion"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "récupérer tous les messages de la sous-discussion"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "afficher la version de Mutt (numéro et date)"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "visualiser l'attachement en utilisant l'entrée mailcap si nécessaire"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "afficher les attachements MIME"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr "afficher le code d'une touche enfoncée"
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "afficher le motif de limitation actuel"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "comprimer/décomprimer la discussion courante"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "comprimer/décomprimer toutes les discussions"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "attacher une clé publique PGP"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "afficher les options PGP"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "envoyer une clé publique PGP"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "vérifier une clé publique PGP"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "afficher le numéro d'utilisateur de la clé"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "reconnaissance pgp classique"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "Accepter la chaîne construite"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "Ajouter un redistributeur de courrier à la fin de la chaîne"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "Insérer un redistributeur de courrier dans la chaîne"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "Retirer un redistributeur de courrier de la chaîne"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "Sélectionner l'élément précédent de la chaîne"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "Sélectionner l'élément suivant de la chaîne"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr ""
+"envoyer le message dans une chaîne de redistributeurs de courrier mixmaster"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "faire une copie déchiffrée et effacer"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "faire une copie déchiffrée"
+
+#: keymap_alldefs.h:196
+msgid "wipe passphrase(s) from memory"
+msgstr "effacer la (les) phrase(s) de passe de la mémoire"
+
+#: keymap_alldefs.h:197
+msgid "extract supported public keys"
+msgstr "extraire les clés publiques supportées"
+
+#: keymap_alldefs.h:198
+msgid "show S/MIME options"
+msgstr "afficher les options S/MIME"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+"Dépassement de capacité sur entier -- impossible d'allouer la mémoire !"
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Plus de mémoire !"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"Pour contacter les développeurs, veuillez écrire à <mutt-dev@mutt.org>.\n"
+"Pour signaler un bug, veuillez utiliser l'utilitaire flea(1).\n"
+
+#: main.c:50
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins et autres.\n"
+"Mutt ne fournit ABSOLUMENT AUCUNE GARANTIE ; pour les détails tapez `mutt -"
+"vv'.\n"
+"Mutt est un logiciel libre, et vous êtes libre de le redistribuer\n"
+"sous certaines conditions ; tapez `mutt -vv' pour les détails.\n"
+
+#: main.c:56
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"De nombreuses autres personnes non mentionnées ici ont fourni\n"
+"beaucoup de code, des corrections et des suggestions.\n"
+"\n"
+"    Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou\n"
+"    le modifier sous les termes de la GNU General Public License telle que\n"
+"    publiée par la Free Software Foundation ; que ce soit la version 2 de\n"
+"    la licence, ou (selon votre choix) une version plus récente.\n"
+"\n"
+"    Ce programme est distribué avec l'espoir qu'il soit utile,\n"
+"    mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de\n"
+"    QUALITÉ MARCHANDE ou d'ADÉQUATION À UN BESOIN PARTICULIER. Référez-vous\n"
+"    à la GNU General Public License pour plus de détails.\n"
+"\n"
+"    Vous devez avoir reçu un exemplaire de la GNU General Public License\n"
+"    avec ce programme ; si ce n'est pas le cas, écrivez à la Free Software\n"
+"    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\n"
+
+#: main.c:94
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"usage : mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <fich> ] [ -m <type> ] [ -f "
+"<fich> ]\n"
+"        mutt [ -nR ] [ -e <cmd> ] [ -F <fich> ] -Q <requête> [ -Q <req> ] "
+"[...]\n"
+"        mutt [ -nR ] [ -e <cmd> ] [ -F <fich> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"        mutt [ -nx ] [ -e <cmd> ] [ -a <fich> ] [ -F <fich> ] [ -H <fich> ] "
+"[ -i <fich> ] [ -s <obj> ] [ -b <adr> ] [ -c <adr> ] <adr> [ ... ]\n"
+"        mutt [ -n ] [ -e <cmd> ] [ -F <fich> ] -p\n"
+"        mutt -v[v]\n"
+"\n"
+"options :\n"
+"  -A <alias>\tdéveloppe l'alias mentionné\n"
+"  -a <fich>\tattache un fichier à ce message\n"
+"  -b <adresse>\tspécifie une adresse à mettre en copie aveugle (BCC)\n"
+"  -c <adresse>\tspécifie une adresse à mettre en copie (CC)\n"
+"  -e <commande>\tspécifie une commande à exécuter après l'initialisation\n"
+"  -f <fich>\tspécifie quelle boîte aux lettres lire\n"
+"  -F <fich>\tspécifie un fichier muttrc alternatif\n"
+"  -H <fich>\tspécifie un fichier de brouillon d'où lire les en-têtes\n"
+"  -i <fich>\tspécifie un fichier que Mutt doit inclure dans la réponse\n"
+"  -m <type>\tspécifie un type de boîte aux lettres par défaut\n"
+"  -n\t\tfait que Mutt ne lit pas le fichier Muttrc système\n"
+"  -p\t\trappelle un message ajourné\n"
+"  -Q <variable>\tdemande la valeur d'une variable de configuration\n"
+"  -R\t\touvre la boîte aux lettres en mode lecture seule\n"
+"  -s <obj>\tspécifie un objet (entre guillemets s'il contient des espaces)\n"
+"  -v\t\taffiche la version et les définitions de compilation\n"
+"  -x\t\tsimule le mode d'envoi mailx\n"
+"  -y\t\tsélectionne une BAL spécifiée dans votre liste `mailboxes'\n"
+"  -z\t\tquitte immédiatement si pas de nouveau message dans la BAL\n"
+"  -Z\t\touvre le premier dossier ayant un nouveau message, quitte sinon\n"
+"  -h\t\tce message d'aide"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Options de compilation :"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Erreur d'initialisation du terminal."
+
+# , c-format
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Débuggage au niveau %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "DEBUG n'a pas été défini à la compilation. Ignoré.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s n'existe pas. Le créer ?"
+
+# , c-format
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "Impossible de créer %s : %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Pas de destinataire spécifié.\n"
+
+# , c-format
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s : impossible d'attacher le fichier.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Pas de boîte aux lettres avec des nouveaux messages."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Pas de boîtes aux lettres recevant du courrier définies."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "La boîte aux lettres est vide."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Lecture de %s... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "La boîte aux lettres est altérée !"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "La boîte aux lettres a été altérée !"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Erreur fatale ! La boîte aux lettres n'a pas pu être réouverte !"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Impossible de verrouiller la boîte aux lettres !"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr "sync : BAL modifiée, mais pas de message modifié ! (signalez ce bug)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Écriture des messages... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "Écriture des changements..."
+
+# , c-format
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Erreur d'écriture ! Boîte aux lettres partielle sauvée dans %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "La boîte aux lettres n'a pas pu être réouverte !"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Réouverture de la boîte aux lettres..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Aller à : "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Numéro d'index invalide."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Pas d'entrées."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Défilement vers le bas impossible."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Défilement vers le haut impossible."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Vous êtes sur la dernière page."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Vous êtes sur la première page."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "La première entrée est affichée."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "La dernière entrée est affichée."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Vous êtes sur la dernière entrée."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Vous êtes sur la première entrée."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Rechercher : "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Rechercher en arrière : "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Pas de motif de recherche."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Non trouvé."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "Pas d'entrées marquées."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "La recherche n'est pas implémentée pour ce menu."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "Le saut n'est pas implémenté pour les dialogues."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Le marquage n'est pas supporté."
+
+# , c-format
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "Lecture de %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr "maildir_commit_message() : impossible de fixer l'heure du fichier"
+
+#: muttlib.c:835
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr ""
+"Le fichier est un répertoire, sauver dans celui-ci ? [(o)ui, (n)on, (t)ous]"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr "ont"
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "Le fichier est un répertoire, sauver dans celui-ci ?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Fichier dans le répertoire : "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "Le fichier existe, écras(e)r, (c)oncaténer ou (a)nnuler ?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "eca"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "Impossible de sauver le message dans la boîte aux lettres POP."
+
+# , c-format
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s n'est pas une boîte aux lettres !"
+
+# , c-format
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Ajouter les messages à %s ?"
+
+# , c-format
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "Connexion à %s fermée"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL n'est pas disponible."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "La commande Preconnect a échoué."
+
+# , c-format
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Erreur en parlant à %s (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr "Mauvais IDN « %s »."
+
+# , c-format
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "Recherche de %s..."
+
+# , c-format
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Impossible de trouver la machine \"%s\""
+
+# , c-format
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Connexion à %s..."
+
+# , c-format
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "Impossible de se connecter à %s (%s)."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "Impossible de trouver assez d'entropie sur votre système"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "Remplissage du tas d'entropie : %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s a des droits d'accès peu sûrs !"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "SSL désactivé par manque d'entropie"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "erreur d'E/S"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "erreur de protocole non spécifiée"
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "SSL a échoué : %s"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "Impossible d'obtenir le certificat de la machine distante"
+
+# , c-format
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "Connexion SSL utilisant %s (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "Inconnu"
+
+# , c-format
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[impossible de calculer]"
+
+# , c-format
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[date invalide]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "Le certificat du serveur n'est pas encore valide"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "Le certificat du serveur a expiré"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Ce certificat appartient à :"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Ce certificat a été émis par :"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Ce certificat est valide"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "     de %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "      à %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Empreinte: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "Vérification du certificat SSL"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(r)ejeter, accepter (u)ne fois, (a)ccepter toujours"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "rua"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(r)ejeter, accepter (u)ne fois"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "ru"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Quitter  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Attention : le certificat n'a pas pu être sauvé"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "Certificat sauvé"
+
+# , c-format
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Nombre d'essais de verrouillage dépassé, enlever le verrou pour %s ?"
+
+# , c-format
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "Impossible de verrouiller %s avec dotlock.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "Délai dépassé lors de la tentative de verrouillage fcntl !"
+
+# , c-format
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Attente du verrouillage fcntl... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "Délai dépassé lors de la tentative de verrouillage flock !"
+
+# , c-format
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Attente de la tentative de flock... %d"
+
+# , c-format
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "Impossible de verrouiller %s\n"
+
+# , c-format
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "Lecture de %s..."
+
+# , c-format
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "Écriture de %s..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "Impossible de synchroniser la boîte aux lettres %s !"
+
+# , c-format
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Déplacer les messages lus dans %s ?"
+
+# , c-format
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Effacer %d message(s) marqué(s) à effacer ?"
+
+# , c-format
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Effacer %d message(s) marqué(s) à effacer ?"
+
+# , c-format
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Déplacement des messages lus dans %s..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "La boîte aux lettres est inchangée."
+
+# , c-format
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d gardé(s), %d déplacé(s), %d effacé(s)."
+
+# , c-format
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d gardé(s), %d effacé(s)."
+
+# , c-format
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr " Appuyez sur '%s' pour inverser l'écriture autorisée"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "Utilisez 'toggle-write' pour réautoriser l'écriture !"
+
+# , c-format
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "La boîte aux lettres est protégée contre l'écriture. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "Boîte aux lettres vérifiée."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Impossible d'écrire le message"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr "Dépassement de capacité sur entier -- impossible d'allouer la mémoire."
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "Non disponible dans ce menu."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "PgPréc"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "PgSuiv"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Voir attach."
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Suivant"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "La fin du message est affichée."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "Le début du message est affiché."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Rechercher en arrière : "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Rechercher : "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "L'aide est actuellement affichée."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "Il n'y a plus de texte cité."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "Il n'y a plus de texte non cité après le texte cité."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "le message multipart n'a pas de paramètre boundary !"
+
+# , c-format
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Erreur dans l'expression : %s"
+
+# , c-format
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Quantième invalide : %s"
+
+# , c-format
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Mois invalide : %s"
+
+# , c-format
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "Date relative invalide : %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "erreur dans l'expression"
+
+# , c-format
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "erreur dans le motif à : %s"
+
+# , c-format
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c : commande invalide"
+
+# , c-format
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c : non supporté dans ce mode"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "paramètre manquant"
+
+# , c-format
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "parenthésage incorrect : %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "motif vide"
+
+# , c-format
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "erreur : opération inconnue %d (signalez cette erreur)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Compilation du motif de recherche..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Exécution de la commande sur les messages correspondants..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "Aucun message ne correspond au critère."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "Fin atteinte sans rien avoir trouvé"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "Début atteint sans rien avoir trouvé"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Recherche interrompue."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "Phrase de passe PGP oubliée."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Erreur : impossible de créer le sous-processus PGP ! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- Fin de sortie PGP --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- DÉBUT DE MESSAGE PGP --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- DÉBUT DE BLOC DE CLÉ PUBLIQUE PGP --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- DÉBUT DE MESSAGE SIGNÉ PGP --]\n"
+"\n"
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- FIN DE MESSAGE PGP --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- FIN DE BLOC DE CLÉ PUBLIQUE PGP --]\n"
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- FIN DE MESSAGE SIGNÉ PGP --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Erreur : impossible de trouver le début du message PGP ! --]\n"
+"\n"
+
+#: pgp.c:662
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Erreur interne. Veuillez avertir <roessler@does-not-exist.org>."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Erreur : impossible de créer un sous-processus PGP ! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Erreur : message PGP/MIME mal formé ! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Erreur : impossible de créer le fichier temporaire ! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- Les données suivantes sont chiffrées avec PGP/MIME --]\n"
+"\n"
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- Fin des données chiffrées avec PGP/MIME --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "Impossible d'ouvrir le sous-processus PGP !"
+
+# , c-format
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "Utiliser keyID = \"%s\" pour %s ?"
+
+# , c-format
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "Entrez keyID pour %s : "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "Impossible d'invoquer PGP"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "Récupération de la clé PGP..."
+
+#: pgpkey.c:486
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr ""
+"Toutes les clés correspondantes sont expirées, annulées, ou désactivées."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Sélectionner  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Vérifier clé  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "Clés PGP correspondant à <%s>."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "Clés PGP correspondant à \"%s\"."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "Impossible d'ouvrir /dev/null"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Impossible de créer le fichier temporaire"
+
+# , c-format
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "ID clé : 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "Cette clé ne peut pas être utilisée : expirée/désactivée/annulée."
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "L'ID est expiré/désactivé/annulé."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "L'ID a une validité indéfinie."
+
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "L'ID n'est pas valide."
+
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "L'ID n'est que peu valide."
+
+# , c-format
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s Voulez-vous vraiment utiliser la clé ?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Veuillez entrer l'ID de la clé : "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "Appel de pgp..."
+
+# , c-format
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "Clé PGP %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Recherche des clés correspondant à \"%s\"..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "La commande TOP n'est pas supportée par le serveur."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "Impossible d'écrire l'en-tête dans le fichier temporaire !"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "La commande UIDL n'est pas supportée par le serveur."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "%s est un chemin POP invalide"
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "Récupération de la liste des messages..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "Impossible d'écrire le message dans le fichier temporaire !"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "Recherche de nouveaux messages..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "Le serveur POP n'est pas défini."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "Aucun nouveau message dans la boîte aux lettres POP."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "Effacer les messages sur le serveur ?"
+
+# , c-format
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Lecture de nouveaux messages (%d octets)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "Erreur à l'écriture de la boîte aux lettres !"
+
+# , c-format
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d messages lus sur %d]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "Le serveur a fermé la connexion !"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Authentification (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Authentification (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "L'authentification APOP a échoué."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "La commande USER n'est pas supportée par le serveur."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "Impossible de laisser les messages sur le serveur."
+
+# , c-format
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "Erreur de connexion au serveur : %s"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "Fermeture de la connexion au serveur POP..."
+
+# , c-format
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Vérification des index des messages..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Connexion perdue. Se reconnecter au serveur POP ?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Messages ajournés"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "Pas de message ajourné."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "En-tête PGP illégal"
+
+#: postpone.c:479
+msgid "Illegal S/MIME header"
+msgstr "En-tête S/MIME illégal"
+
+#: postpone.c:554
+msgid "Decryption failed."
+msgstr "Le déchiffrage a échoué."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Nouvelle requête"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Créer un alias"
+
+#: query.c:48
+msgid "Search"
+msgstr "Rechercher"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Attente de la réponse..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Commande de requête non définie."
+
+#: query.c:286
+msgid "Query"
+msgstr "Requête"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Requête : "
+
+# , c-format
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Requête '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Pipe"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Imprimer"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "On sauve..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Attachement sauvé."
+
+# , c-format
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "ATTENTION ! Vous allez écraser %s, continuer ?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Attachement filtré."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Filtrer avec : "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Passer à la commande : "
+
+# , c-format
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "Je ne sais pas comment imprimer %s attachements !"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Imprimer l(es) attachement(s) marqué(s) ?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Imprimer l'attachement ?"
+
+#: recvattach.c:938
+msgid "Can't decrypt encrypted message!"
+msgstr "Impossible de déchiffrer le message chiffré !"
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Attachements"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "Il n'y a pas de sous-parties à montrer !"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "Impossible d'effacer l'attachement depuis le serveur POP."
+
+#: recvattach.c:1056
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "L'effacement d'attachements des messages chiffrés n'est pas supporté."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Seul l'effacement d'attachements multipart est supporté."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Vous ne pouvez renvoyer que des parties message/rfc822."
+
+#: recvcmd.c:213
+msgid "Error bouncing message!"
+msgstr "Erreur en renvoyant le message !"
+
+#: recvcmd.c:213
+msgid "Error bouncing messages!"
+msgstr "Erreur en renvoyant les messages !"
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Impossible d'ouvrir le fichier temporaire %s."
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "Faire suivre sous forme d'attachements ?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+"Impossible de décoder tous les attachements marqués. Faire suivre les "
+"autres ?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Faire suivre en MIME encapsulé ?"
+
+# , c-format
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "Impossible de créer %s."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Aucun message marqué n'a pu être trouvé."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "Pas de liste de diffusion trouvée !"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+"Impossible de décoder ts les attachements marqués. MIME-encapsuler les "
+"autres ?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Ajouter"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Insérer"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Retirer"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "OK"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "Impossible d'obtenir le type2.list du mixmaster !"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Sélectionner une chaîne de redistributeurs de courrier."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "Erreur : %s ne peut pas être utilisé comme redistributeur final."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Les chaînes mixmaster sont limitées à %d éléments."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "La chaîne de redistributeurs de courrier est déjà vide."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "Le premier élément de la chaîne est déjà sélectionné."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "Le dernier élément de la chaîne est déjà sélectionné."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Le mixmaster n'accepte pas les en-têtes Cc et Bcc."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr ""
+"Donnez une valeur correcte à hostname quand vous utilisez le mixmaster !"
+
+# , c-format
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Erreur en envoyant le message, fils terminé avec le code %d.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Erreur en envoyant le message."
+
+# , c-format
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "Entrée incorrectement formatée pour le type %s dans \"%s\" ligne %d"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Pas de chemin mailcap spécifié"
+
+# , c-format
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "Entrée mailcap pour le type %s non trouvée"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score : pas assez d'arguments"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score : trop d'arguments"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Pas de sujet, abandonner ?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Pas de sujet, abandon."
+
+# , c-format
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Répondre à %s%s ?"
+
+# , c-format
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "Suivi de la discussion à %s%s ?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "Pas de messages marqués visibles !"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Inclure le message dans la réponse ?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Inclusion du message cité..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "Tous les messages demandés n'ont pas pu être inclus !"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "Faire suivre sous forme d'attachement ?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Préparation du message à faire suivre..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Rappeler un message ajourné ?"
+
+#: send.c:1336
+msgid "Edit forwarded message?"
+msgstr "Éditer le message à faire suivre ?"
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Message non modifié. Abandonner ?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Message non modifié. Abandon."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "Message non envoyé."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Message ajourné."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Aucun destinataire spécifié !"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Aucun destinataire spécifié."
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Pas d'objet, abandonner l'envoi ?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Pas d'objet spécifié."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Envoi du message..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Impossible d'envoyer le message."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Message envoyé."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Envoi en tâche de fond."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "Pas de paramètre boundary trouvé !  [signalez cette erreur]"
+
+# , c-format
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s n'existe plus !"
+
+# , c-format
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "%s n'est pas un fichier ordinaire."
+
+# , c-format
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "Impossible d'ouvrir %s"
+
+# , c-format
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Erreur en envoyant le message, fils terminé avec le code %d (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Sortie du processus de livraison"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr "Mauvais IDN %s lors de la préparation du resent-from."
+
+# , c-format
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s... On quitte.\n"
+
+# , c-format
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "Erreur %s... On quitte.\n"
+
+# , c-format
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Signal %d... On quitte.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr "De confiance"
+
+#: smime.c:303
+msgid "Verified  "
+msgstr "Vérifié     "
+
+#: smime.c:306
+msgid "Unverified"
+msgstr "Non vérifié "
+
+#: smime.c:309
+msgid "Expired   "
+msgstr "Expiré      "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr "Révoqué     "
+
+# , c-format
+#: smime.c:315
+msgid "Invalid   "
+msgstr "Invalide    "
+
+#: smime.c:318
+msgid "Unknown   "
+msgstr "Inconnu     "
+
+# , c-format
+#: smime.c:347
+msgid "Enter keyID: "
+msgstr "Entrez keyID : "
+
+#: smime.c:370
+#, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "Certificats S/MIME correspondant à \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr "L'ID %s n'est pas vérifié. Voulez-vous l'utiliser pour %s ?"
+
+# , c-format
+#: smime.c:523 smime.c:592
+#, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "Utiliser l'ID %s (pas de confiance !) pour %s ?"
+
+# , c-format
+#: smime.c:526 smime.c:595
+#, c-format
+msgid "Use ID %s for %s ?"
+msgstr "Utiliser l'ID %s pour %s ?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+"Att.: vous n'avez pas encore décidé de faire confiance à l'ID %s. (touche)"
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr "Pas de certificat (valide) trouvé pour %s."
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "Erreur : impossible de créer le sous-processus OpenSSL !"
+
+#: smime.c:1197
+msgid "no certfile"
+msgstr "pas de certfile"
+
+#: smime.c:1200
+msgid "no mbox"
+msgstr "pas de BAL"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr "Pas de sortie pour OpenSSL.."
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr "Attention : le certificat intermédiaire n'a pas été trouvé."
+
+#: smime.c:1426
+msgid "Can't open OpenSSL subprocess!"
+msgstr "Impossible d'ouvrir le sous-processus OpenSSL !"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr "Pas de sortie pour OpenSSL..."
+
+#: smime.c:1629 smime.c:1751
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- Fin de sortie OpenSSL --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Erreur : impossible de créer le sous-processus OpenSSL ! --]\n"
+
+#: smime.c:1755
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr "[-- Les données suivantes sont chiffrées avec S/MIME --]\n"
+
+#: smime.c:1758
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr "[-- Les données suivantes sont signées avec S/MIME --]\n"
+
+#: smime.c:1822
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- Fin des données chiffrées avec S/MIME. --]\n"
+
+#: smime.c:1824
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- Fin des données signées avec S/MIME. --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Tri de la boîte aux lettres..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "Fonction de tri non trouvée ! [signalez ce bug]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(pas de boîte aux lettres)"
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "Le message père n'est pas visible dans cette vue limitée."
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "Le message père n'est pas disponible."
+
+# , c-format
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "Renvoyer le message à %s... ?"
+
+# , c-format
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "Renvoyer les messages à %s... ?"
+
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "Appel d'OpenSSL..."
+
+#~ msgid "ewsabf"
+#~ msgstr "casedo"
+
+#~ msgid "%s/.index"
+#~ msgstr "%s/.index"
+
+#~ msgid "This message seems to require key %s. (Any key to continue)"
+#~ msgstr "Ce message semble nécessiter la clé %s. (Touche pour continuer)"
+
+#~ msgid "Alert: No mailbox specified in certificate.\n"
+#~ msgstr "Alerte : pas de boîte aux lettres spécifiée dans le certificat.\n"
+
+#~ msgid "Alert: Certificate does *NOT* belong to \"%s\".\n"
+#~ msgstr "Alerte : le certificat n'appartient *PAS* à \"%s\".\n"
+
+#~ msgid "%s/%s.%d"
+#~ msgstr "%s/%s.%d"
+
+#~ msgid "Certificate \"%s\" exists for \"%s\"."
+#~ msgstr "Le certificat \"%s\" existe pour \"%s\"."
+
+#~ msgid "Successfully added certificate \"%s\" for \"%s\". "
+#~ msgstr "Certificat \"%s\" ajouté avec succès pour \"%s\". "
+
+#~ msgid "Certificate *NOT* added."
+#~ msgstr "Certificat *NON* ajouté."
+
+#~ msgid "This ID's validity level is undefined."
+#~ msgstr "Le niveau de validité de cet ID est indéfini."
+
+#~ msgid "[-- expired. --]\n"
+#~ msgstr "[-- expiré. --]\n"
+
+#~ msgid "Decode-save"
+#~ msgstr "Décoder-sauver"
+
+#~ msgid "Decode-copy"
+#~ msgstr "Décoder-copier"
+
+#~ msgid "Decrypt-save"
+#~ msgstr "Déchiffrer-sauver"
+
+#~ msgid "Decrypt-copy"
+#~ msgstr "Déchiffrer-copier"
+
+#~ msgid "Copy"
+#~ msgstr "Copier"
+
+# , c-format
+#~ msgid ""
+#~ "[-- This %s/%s attachment is not included, --]\n"
+#~ "[-- and the indicated external source has --]\n"
+#~ "[-- expired. --]\n"
+#~ msgstr ""
+#~ "[-- Cet attachement %s/%s n'est pas inclus, --]\n"
+#~ "[-- et la source externe indiquée a --]\n"
+#~ "[-- expiré. --]\n"
+
+#~ msgid "%s [%s]\n"
+#~ msgstr "%s [%s]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "[-- End of PGP output --]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "[-- Fin de sortie PGP --]\n"
+#~ "\n"
+
+# , c-format
+#~ msgid "Can't stat %s."
+#~ msgstr "Impossible d'obtenir le statut de %s."
+
+# , c-format
+#~ msgid "%s: no such command"
+#~ msgstr "%s : cette commande n'existe pas"
+
+#~ msgid "Authentication method is unknown."
+#~ msgstr "La méthode d'authentification est inconnue."
+
+#~ msgid "MIC algorithm: "
+#~ msgstr "Algorithme MIC : "
+
+#~ msgid "This doesn't make sense if you don't want to sign the message."
+#~ msgstr "Ceci n'a aucun sens si vous ne voulez pas signer le message."
+
+#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160"
+#~ msgstr ""
+#~ "Algorithme MIC inconnu, algorithmes valides : pgp-md5, pgp-sha1, pgp-"
+#~ "rmd160"
+
+#~ msgid ""
+#~ "\n"
+#~ "SHA1 implementation Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft."
+#~ "com>\n"
+#~ "\n"
+#~ "    Redistribution and use in source and binary forms, with or without\n"
+#~ "    modification, are permitted under certain conditions.\n"
+#~ "\n"
+#~ "    The SHA1 implementation comes AS IS, and ANY EXPRESS OR IMPLIED\n"
+#~ "    WARRANTIES, including, but not limited to, the implied warranties of\n"
+#~ "    merchantability and fitness for a particular purpose ARE DISCLAIMED.\n"
+#~ "\n"
+#~ "    You should have received a copy of the full distribution terms\n"
+#~ "    along with this program; if not, write to the program's developers.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Implémentation SHA1 Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft."
+#~ "com>\n"
+#~ "\n"
+#~ "    Redistribution et utilisation sous formes source et binaire, avec ou\n"
+#~ "    sans modification, sont autorisées sous certaines conditions.\n"
+#~ "\n"
+#~ "    L'implémentation SHA1 est fournie TELLE QUELLE, et TOUTE GARANTIE\n"
+#~ "    EXPLICITE OU IMPLICITE, dont, mais pas uniquement, les garanties\n"
+#~ "    implicites de qualité marchande ou d'adéquation à un besoin "
+#~ "particulier\n"
+#~ "    EST DÉMENTIE.\n"
+#~ "\n"
+#~ "    Vous devez avoir reçu un exemplaire des termes de la distribution "
+#~ "complète\n"
+#~ "    avec ce programme ; si ce n'est pas le cas, écrivez aux développeurs "
+#~ "du\n"
+#~ "    programme.\n"
+
+#~ msgid "POP Username: "
+#~ msgstr "Nom d'utilisateur POP : "
+
+# , c-format
+#~ msgid "Reading new message (%d bytes)..."
+#~ msgstr "Lecture d'un nouveau message (%d octets)..."
+
+#~ msgid "Error reading message!"
+#~ msgstr "Erreur à la lecture du message !"
+
+# , c-format
+#~ msgid "%s [%d message read]"
+#~ msgstr "%s [%d message lu]"
+
+#~ msgid "Creating mailboxes is not yet supported."
+#~ msgstr "La création de boîtes aux lettres n'est pas encore supportée."
+
+#~ msgid "Reopening mailbox... %s"
+#~ msgstr "Réouverture de la boîte aux lettres... %s"
+
+#~ msgid "Closing mailbox..."
+#~ msgstr "Fermeture de la boîte aux lettres..."
+
+#~ msgid "IMAP Username: "
+#~ msgstr "Nom d'utilisateur IMAP : "
+
+# , c-format
+#~ msgid "CRAM key for %s@%s: "
+#~ msgstr "Clé CRAM pour %s@%s : "
+
+#~ msgid "Skipping CRAM-MD5 authentication."
+#~ msgstr "On passe sur l'authentification CRAM-MD5."
+
+#~ msgid "[-- Error: unexpected end of file! --]\n"
+#~ msgstr "[-- Erreur : fin de fichier inattendue ! --]\n"
+
+#~ msgid "Sending APPEND command ..."
+#~ msgstr "Envoi de la commande APPEND ..."
+
+#~ msgid "%d kept."
+#~ msgstr "%d gardés."
+
+#~ msgid "POP Password: "
+#~ msgstr "Mot de passe POP : "
+
+#~ msgid "No POP username is defined."
+#~ msgstr "Le nom d'utilisateur POP n'est pas défini."
+
+# , c-format
+#~ msgid "Could not find address for host %s."
+#~ msgstr "Impossible de trouver l'adresse de la machine %s."
+
+#~ msgid "Attachment saved"
+#~ msgstr "Attachement sauvé"
+
+#~ msgid "Can't open %s: %s."
+#~ msgstr "Impossible d'ouvrir %s : %s."
+
+#~ msgid "Error while recoding %s. Leave it unchanged."
+#~ msgstr "Erreur en recodant %s. Laisser inchangé."
+
+#~ msgid "Error while recoding %s. See %s for recovering your data."
+#~ msgstr "Erreur en recodant %s. Voir %s pour récupérer vos données."
+
+#~ msgid "Can't change character set for non-text attachments!"
+#~ msgstr ""
+#~ "Impossible de changer le jeu de caractères pour des attachements non "
+#~ "textuels !"
+
+#~ msgid "Enter character set: "
+#~ msgstr "Entrez le jeu de caractères : "
+
+#~ msgid "Recoding successful."
+#~ msgstr "Recodage réussi."
+
+#~ msgid "change an attachment's character set"
+#~ msgstr "changer le jeu de caractères d'un attachement"
+
+#~ msgid "recode this attachment to/from the local charset"
+#~ msgstr "recoder cet attachement vers/depuis le jeu de caractères local"
+
+#~ msgid "Compose"
+#~ msgstr "Composer"
+
+#~ msgid "Target message not found while counting messages in thread."
+#~ msgstr ""
+#~ "Message cible non trouvé pendant le comptage des messages dans la "
+#~ "discussion."
+
+#~ msgid "We can't currently handle utf-8 at this point."
+#~ msgstr "Nous ne supportons pas actuellement l'utf-8 à cet endroit."
+
+#~ msgid "UTF-8 encoding attachments has not yet been implemented."
+#~ msgstr "Les attachements en utf-8 ne sont pas encore implémentés."
+
+#~ msgid "We currently can't encode to utf-8."
+#~ msgstr "Nous ne pouvons pas actuellement encoder en utf-8."
+
+#~ msgid "move to the last undelete message"
+#~ msgstr "aller au dernier message non effacé"
+
+#~ msgid "return to the main-menu"
+#~ msgstr "retourner au menu principal"
+
+# , c-format
+#~ msgid "ignoring empty header field: %s"
+#~ msgstr "En-tête vide ignoré : %s"
+
+#~ msgid "Recoding only affetcs text attachments."
+#~ msgstr "Le recodage affecte uniquement les attachements textuels."
+
+# , c-format
+#~ msgid "imap_error(): unexpected response in %s: %s\n"
+#~ msgstr "imap_error() : réponse inattendue dans %s : %s\n"
+
+#~ msgid "An unkown PGP version was defined for signing."
+#~ msgstr "Une version inconnue de PGP a été définie pour signer."
+
+#~ msgid "Message edited. Really send?"
+#~ msgstr "Message édité. Voulez-vous vraiment l'envoyer ?"
+
+# , c-format
+#~ msgid "Unknown PGP version \"%s\"."
+#~ msgstr "Version de PGP \"%s\" inconnue."
+
+#~ msgid "reserved"
+#~ msgstr "réservé"
+
+#~ msgid "Encrypted Session Key"
+#~ msgstr "Clé de session chiffrée"
+
+#~ msgid "Signature Packet"
+#~ msgstr "Paquet de signature"
+
+#~ msgid "Conventionally Encrypted Session Key Packet"
+#~ msgstr "Paquet de clé de session chiffré de manière conventionnelle"
+
+#~ msgid "One-Pass Signature Packet"
+#~ msgstr "Paquet de signature à une passe"
+
+#~ msgid "Secret Key Packet"
+#~ msgstr "Paquet de clé secrète"
+
+#~ msgid "Public Key Packet"
+#~ msgstr "Paquet de clé publique"
+
+#~ msgid "Secret Subkey Packet"
+#~ msgstr "Paquet de sous-clé secrète"
+
+#~ msgid "Compressed Data Packet"
+#~ msgstr "Paquet de données comprimées"
+
+#~ msgid "Symmetrically Encrypted Data Packet"
+#~ msgstr "Paquet de données chiffrées symétriquement"
+
+#~ msgid "Marker Packet"
+#~ msgstr "Paquet marqueur"
+
+#~ msgid "Literal Data Packet"
+#~ msgstr "Paquet de données littérales"
+
+#~ msgid "Trust Packet"
+#~ msgstr "Paquet de confiance"
+
+#~ msgid "Name Packet"
+#~ msgstr "Paquet de nom"
+
+#~ msgid "Subkey Packet"
+#~ msgstr "Paquet de sous-clé"
+
+#~ msgid "Reserved"
+#~ msgstr "Réservé"
+
+#~ msgid "Comment Packet"
+#~ msgstr "Paquet de commentaire"
+
+#~ msgid "Display message using mailcap?"
+#~ msgstr "Afficher le message en utilisant mailcap ?"
+
+#~ msgid "Can't open your secret key ring!"
+#~ msgstr "Impossible d'ouvrir votre fichier de clés secrètes"
+
+#~ msgid "===== Attachments ====="
+#~ msgstr "===== Attachements ====="
+
+#~ msgid "Please report this program error in the function mutt_mktime."
+#~ msgstr "Veuillez signaler cette erreur dans la fonction mutt_mktime."
+
+# , c-format
+#~ msgid "%s is a boolean var!"
+#~ msgstr "%s est une variable booléenne !"
+
+# , c-format
+#~ msgid "Saved output of child process to %s.\n"
+#~ msgstr "Sortie du processus fils sauvée dans %s.\n"
+
+#~ msgid ""
+#~ "[-- Error: this message does not comply with the PGP/MIME specification! "
+#~ "--]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "[-- Erreur : ce message n'est pas conforme à la spécification PGP/MIME ! "
+#~ "--]\n"
+#~ "\n"
diff --git a/po/gl.gmo b/po/gl.gmo
new file mode 100644 (file)
index 0000000..7a251b8
Binary files /dev/null and b/po/gl.gmo differ
diff --git a/po/gl.po b/po/gl.po
new file mode 100644 (file)
index 0000000..c5688e0
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,4476 @@
+# GALICIAN TRANSLATION OF MUTT
+# Copyright (C) 1999 Roberto Suarez Soto <ask4it@bigfoot.com>
+# Roberto Suarez Soto <ask4it@bigfoot.com>, 1999-2001.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Mutt 1.3\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2001-04-22 22:05+0200\n"
+"Last-Translator: Roberto Suarez Soto <ask4it@bigfoot.com>\n"
+"Language-Team: Galician <trasno@ceu.fi.udc.es>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "Nome de usuario en %s: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "Contrasinal para %s@%s: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Saír"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Borrar"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Recuperar"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Seleccionar"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Axuda"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "¡Non tés aliases definidas!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Aliases"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Alias como: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "¡Xa tés un alias definido con ese nome!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr ""
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Enderezo: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr ""
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Nome persoal: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] ¿Aceptar?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Gardar a ficheiro: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Alias engadido."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Non se puido atopa-lo nome, ¿continuar?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "A entrada \"compose\" no ficheiro Mailcap require %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "¡Erro executando \"%s\"!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Fallo ó abri-lo ficheiro para analiza-las cabeceiras."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Fallo ó abri-lo ficheiro para quitar as cabeceiras"
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr ""
+"Non hai entrada \"compose\"  para %sno ficheiro Mailcap, creando\n"
+" ficheiro vacío."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "A entrada \"Edit\" do ficheiro Mailcap require %%s"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "Non hai entrada \"edit\" no ficheiro Mailcap para %s"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr ""
+"Non se atopou ningunha entrada coincidente no ficheiro mailcap.Vendo como "
+"texto"
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "Tipo MIME non definido. Non se pode ver-lo ficheiro adxunto."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Non se puido crea-lo filtro"
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Non podo crea-lo filtro"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "¡Fallo de escritura!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "¡Non lle sei cómo imprimir iso!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Directorio"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Máscara"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s non é un directorio."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Buzóns [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Subscrito [%s], máscara de ficheiro: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Directorio [%s], máscara de ficheiro: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Non é posible adxuntar un directorio"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Non hai ficheiros que coincidan coa máscara"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "A operación 'Crear' está soportada só en buzóns IMAP"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "A operación 'Borrar' está soportada só en buzóns IMAP"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "¿Seguro de borra-lo buzón \"%s\"?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "Buzón borrado."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "Buzón non borrado."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Cambiar directorio a: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Erro lendo directorio."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Máscara de ficheiro: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "¿Ordear inversamente por (d)ata, (a)lfabeto, (t)amaño ou (s)en orden?"
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "¿Ordear por (d)ata, (a)lfabeto, (t)amaño ou (s)en orden?"
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "dats"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Novo nome de ficheiro: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Non é posible ver un directorio"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Erro intentando ver ficheiro"
+
+#: buffy.c:442
+#, fuzzy
+msgid "New mail in "
+msgstr "Novo correo en %s."
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: color non soportado polo terminal"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: non hai tal color"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: non hai tal obxeto"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: comando válido só para o obxeto \"índice\""
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: parámetros insuficientes"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Faltan parámetros."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: parámetros insuficientes"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: parámetros insuficientes"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: non hai tal atributo"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "parámetros insuficientes"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "demasiados parámetros"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "colores por defecto non soportados"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "¿Verificar firma PGP?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "¡Non foi posible crear o ficheiro temporal!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Non foi posible crea-lo filtro de visualización"
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "Non foi posible copia-la mensaxe."
+
+#: commands.c:182
+#, fuzzy
+msgid "S/MIME signature successfully verified."
+msgstr "Sinatura PGP verificada con éxito."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr ""
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+#, fuzzy
+msgid "S/MIME signature could NOT be verified."
+msgstr "Non foi posible verifica-la sinatura PGP."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "Sinatura PGP verificada con éxito."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "Non foi posible verifica-la sinatura PGP."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Comando: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Rebotar mensaxe a: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Rebotar mensaxes marcadas a: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "¡Erro analizando enderezo!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr ""
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Rebotar mensaxe a %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Rebotar mensaxes a %s"
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Message not bounced."
+msgstr "Mensaxe rebotada."
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Messages not bounced."
+msgstr "Mensaxes rebotadas."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Mensaxe rebotada."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Mensaxes rebotadas."
+
+#: commands.c:381 commands.c:415 commands.c:432
+#, fuzzy
+msgid "Can't create filter process"
+msgstr "Non podo crea-lo filtro"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Canalizar ó comando: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "Non foi definido ningún comando de impresión."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "¿Imprimir mensaxe?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "¿Imprimir mensaxes marcadas?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "Mensaxe impresa"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Mensaxes impresas"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "Non foi posible imprimi-la mensaxe"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "Non foi posible imprimi-las mensaxes"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Ordear-inv (d)ata/d(e)/(r)ecb/(t)ema/(p)ara/(f)ío/(n)ada/t(a)m/p(u)nt: "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr "Ordear (d)ata/d(e)/(r)ecb/(t)ema/(p)ara/(f)ío/(n)ada/t(a)m/p(u)nt: "
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dertpfnau"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Comando de shell: "
+
+#: commands.c:701
+#, fuzzy, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "%s%s ó buzón"
+
+#: commands.c:702
+#, fuzzy, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "%s%s ó buzón"
+
+#: commands.c:703
+#, fuzzy, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "%s%s ó buzón"
+
+#: commands.c:704
+#, fuzzy, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "%s%s ó buzón"
+
+#: commands.c:705
+#, fuzzy, c-format
+msgid "Save%s to mailbox"
+msgstr "%s%s ó buzón"
+
+#: commands.c:705
+#, fuzzy, c-format
+msgid "Copy%s to mailbox"
+msgstr "%s%s ó buzón"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " marcado"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Copiando a %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr ""
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Tipo de contido cambiado a %s..."
+
+#: commands.c:912
+#, fuzzy, c-format
+msgid "Character set changed to %s; %s."
+msgstr "O xogo de caracteres foi cambiado a %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr ""
+
+#: commands.c:914
+msgid "converting"
+msgstr ""
+
+#
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Non hai ficheiros adxuntos."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Enviar"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Cancelar"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Adxuntar ficheiro"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Descrip"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Firmar, Encriptar"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Encriptar"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Firmar"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Limpar"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " firmar como: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<por defecto>"
+
+#: compose.c:149
+#, fuzzy
+msgid "Encrypt with: "
+msgstr "Encriptar"
+
+#: compose.c:165
+#, fuzzy
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "¿(e)ncriptar, (f)irmar, firmar (c)omo, (a)mbas ou (o)lvidar? "
+
+#: compose.c:166
+msgid "esabf"
+msgstr "efcao"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Firmar como: "
+
+#: compose.c:227
+#, fuzzy
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "¿(e)ncriptar, (f)irmar, firmar (c)omo, (a)mbas ou (o)lvidar? "
+
+#: compose.c:228
+#, fuzzy
+msgid "eswabf"
+msgstr "efcao"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+
+#: compose.c:238
+msgid "12345f"
+msgstr ""
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] xa non existe!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] modificado. ¿Actualizar codificación?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Adxuntos"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr ""
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Non podes borra-lo único adxunto."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr ""
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "Adxuntando ficheiros seleccionados ..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "¡Non foi posible adxuntar %s!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Abrir buzón do que adxuntar mensaxe"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "Non hai mensaxes nese buzón."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "¡Marca as mensaxes que queres adxuntar!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "¡Non foi posible adxuntar!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "A recodificación só afecta ós adxuntos de texto."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "O adxunto actual non será convertido."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "O adxunto actual será convertido"
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Codificación inválida."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "¿Gardar unha copia desta mensaxe?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Cambiar nome a: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, fuzzy, c-format
+msgid "Can't stat %s: %s"
+msgstr "Non foi atopado: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Novo ficheiro: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Content-Type é da forma base/subtipo"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Non coñezo ó Content-Type %s"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Non fun capaz de crea-lo ficheiro %s"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "O que temos aquí é un fallo ó face-lo adxunto"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "¿Pospór esta mensaxe?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Escribir mensaxe ó buzón"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Escribindo mensaxe a %s..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "Mensaxe escrita."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr ""
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr ""
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr ""
+
+#: crypt.c:71
+#, fuzzy, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- Saída PGP a continuación (hora actual: %c) --]\n"
+
+#: crypt.c:86
+#, fuzzy
+msgid "Passphrase(s) forgotten."
+msgstr "Contrasinal PGP esquecido."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Introduza o contrasinal PGP:"
+
+#: crypt.c:147
+#, fuzzy
+msgid "Enter SMIME passphrase:"
+msgstr "Introduza o contrasinal PGP:"
+
+#: crypt.c:192
+#, fuzzy
+msgid "Create a traditional (inline) PGP message?"
+msgstr "¿Crear unha mensaxe aplicación/pgp?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "Chamando ó PGP..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr ""
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr ""
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr ""
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr "[-- Erro: estructura multiparte/asinada inconsistente --]\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr "[-- Erro: protocolo multiparte/asinado %s descoñecido --]\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Atención: non é posible verificar sinaturas %s/%s --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+#, fuzzy
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- Os datos a continuación están asinados --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Atención: non se atoparon sinaturas. --]\n"
+"\n"
+
+#: crypt.c:924
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Fin dos datos asinados --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "sí"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "non"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "¿Saír de Mutt?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "erro descoñecido"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Pulsa calquera tecla para seguir..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr "('?' para lista): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Non hai buzóns abertos."
+
+#
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Non hai mensaxes."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "O buzón é de só lectura."
+
+#
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "Función non permitida no modo \"adxuntar-mensaxe\"."
+
+#: curs_main.c:51
+#, fuzzy
+msgid "No visible messages."
+msgstr "Non hai novas mensaxes"
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "¡Non se pode cambiar a escritura un buzón de só lectura!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "Os cambios ó buzón serán escritos á saída da carpeta."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Os cambios á carpeta non serán gardados."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Saír"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Gardar"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Nova"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Responder"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Grupo"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "O buzón foi modificado externamente. Os indicadores poden ser erróneos"
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Novo correo neste buzón."
+
+#: curs_main.c:499
+#, fuzzy
+msgid "Mailbox was externally modified."
+msgstr "O buzón foi modificado externamente. Os indicadores poden ser erróneos"
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Non hai mensaxes marcadas."
+
+#: curs_main.c:653 menu.c:896
+#, fuzzy
+msgid "Nothing to do."
+msgstr "Conectando con %s..."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Saltar á mensaxe: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "O parámetro debe ser un número de mensaxe."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Esa mensaxe non é visible."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Número de mensaxe inválido."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Borrar as mensaxes que coincidan con: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "Non hai patrón limitante efectivo."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Límite: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Limitar ás mensaxes que coincidan con: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "¿Saír de Mutt?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Marcar as mensaxes que coincidan con: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Recuperar as mensaxes que coincidan con: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Desmarcar as mensaxes que coincidan con: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Abrir buzón en modo de só lectura"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Abrir buzón"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s non é un buzón."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "¿Saír de Mutt sen gardar?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Está na última mensaxe."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Non hai mensaxes recuperadas."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Está na primeira mensaxe."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "A búsqueda volveu ó principio."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "A búsqueda volveu ó final."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Non hai novas mensaxes"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Non hai mensaxes sen ler"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " nesta vista limitada"
+
+#: curs_main.c:1405 pager.c:2337
+#, fuzzy
+msgid "Can't change 'important' flag on POP server."
+msgstr "Non é posible editar unha mensaxe no servidor POP."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Non hai máis fíos"
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Está no primeiro fío"
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "Enfiamento non habilitado."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "O fío contén mensaxes sen ler."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "Non é posible editar unha mensaxe no servidor POP."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tinsertar unha liña comezando cun único ~\n"
+"~b usuarios\tengadir usuarios ó campo Bcc:\n"
+"~c usuarios\tengadir usuarios ó campo Cc:\n"
+"~f mensaxes\tincluir mensaxes\n"
+"~F mensaxes\tmesmo que ~f, mais tamén incluir cabeceiras\n"
+"~h\t\tedita-la cabeceira da mensaxe\n"
+"~m mensaxes\tincluir e citar mensaxes\n"
+"~M mensaxes\tcomo ~m, mais tamén incluir cabeceiras\n"
+"~p\t\timprimi-la mensaxe\n"
+"~q\t\tescribir ficheiro e saír do editor\n"
+"~r ficheiro\t\tler un ficheiro ó editor\n"
+"~t usuarios\tengadir usuarios ó campo Para: \n"
+"~u\t\treedita-la liña anterior\n"
+"~v\t\tedita-la mensaxe có editor $visual\n"
+"~w ficheiro\t\tescribir mensaxes ó ficheiro\n"
+"~x\t\tcancelar cambios e saír do editor\n"
+"~?\t\testa mensaxe\n"
+".\t\tnunha liña, de seu, acaba a entrada\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: número de mensaxe non válido.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Un '.' de seu nunha liña remata a mensaxe)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "Non hai buzón.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "A mensaxe contén:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(seguir)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "falta o nome do ficheiro.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Non hai liñas na mensaxe.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr ""
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: comando de editor descoñecido (~? para axuda)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "Non foi posible crea-la carpeta temporal: %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "Non foi posible crea-lo buzón temporal: %s"
+
+#: editmsg.c:101
+#, fuzzy, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "Non foi posible crea-lo buzón temporal: %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "¡A mensaxe está valeira!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "Mensaxe non modificada."
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "Non foi posible abri-lo ficheiro da mensaxe: %s"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Non foi posible engadir á carpeta: %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Erro. Conservando ficheiro temporal: %s"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Pór indicador"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Limpar indicador"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[-- Erro: ¡Non foi posible amosar ningunha parte de Multipart/"
+"Alternative!--]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Adxunto #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Tipo: %s/%s, Codificación: %s, Tamaño: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Automostra usando %s --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Chamando ó comando de automostra: %s"
+
+#: handler.c:1560
+#, fuzzy, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- o %s --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Automostra da stderr de %s --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr "[-- Erro: mensaxe/corpo externo non ten parámetro \"access-type\"--]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Este adxunto %s/%s "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(tamaño %s bytes) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "foi borrado --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- o %s --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- nome: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, fuzzy, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Este adxunto %s/%s "
+
+#: handler.c:1689
+#, fuzzy
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+"[-- Este adxunto %s/%s non está incluido --]\n"
+"[-- e a fonte externa indicada expirou--]\n"
+
+#: handler.c:1707
+#, fuzzy, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr ""
+"[-- Este adxunto %s/%s non está incluido, --]\n"
+"[-- e o \"access-type\" %s indicado non está soportado --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Erro: multipart/signed non ten protocolo."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Erro: ¡multipart/encrypted non ten parámetro de protocolo!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "¡Non foi posible abri-lo ficheiro temporal!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s non está soportado "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(use '%s' para ver esta parte)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "(cómpre que 'view-attachments' esté vinculado a unha tecla!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: non foi posible adxuntar ficheiro"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "ERRO: por favor, informe deste fallo"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<DESCOÑECIDO>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Vínculos xerais:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Funcións sen vínculo:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Axuda sobre %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: Non é posible facer 'unhook *' dentro doutro hook."
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: tipo descoñecido: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: non é posible borrar un %s dende dentro dun %s"
+
+#: imap/auth.c:104 pop_auth.c:411
+#, fuzzy
+msgid "No authenticators available"
+msgstr "Autenticación SASL fallida."
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Autenticando como anónimo ..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "Autenticación anónima fallida."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Autenticando (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "Autenticación CRAM-MD5 fallida."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Autenticando (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "Autenticación GSSAPI fallida."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "LOGIN deshabilitado neste servidor."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Comezando secuencia de login ..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "O login fallou."
+
+#: imap/auth_sasl.c:112
+#, fuzzy, c-format
+msgid "Authenticating (%s)..."
+msgstr "Autenticando (APOP)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "Autenticación SASL fallida."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr ""
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "Recollendo entornos de nomes..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Recollendo lista de carpetas..."
+
+#: imap/browse.c:219
+#, fuzzy
+msgid "No such folder"
+msgstr "%s: non hai tal color"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Crear buzón:"
+
+#: imap/browse.c:282
+#, fuzzy
+msgid "Mailbox must have a name."
+msgstr "O buzón non cambiou."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Buzón creado."
+
+#: imap/command.c:290
+#, fuzzy
+msgid "Mailbox closed"
+msgstr "Buzón borrado."
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Erro fatal. ¡A conta de mensaxes non está sincronizada!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "Pechando conexión con %s..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Este servidor IMAP é moi vello. Mutt non traballa con el."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "¿Usar conexión segura con TLS?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr ""
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "Seleccionando %s..."
+
+#: imap/imap.c:690
+#, fuzzy
+msgid "Error opening mailbox"
+msgstr "¡Erro cando se estaba a escribi-lo buzón!"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Non é posible engadir ós buzóns IMAP deste servidor"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "¿Crear %s?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Pechando conexión ó servidor IMAP..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "Marcando %d mensaxes borradas ..."
+
+#: imap/imap.c:961
+#, fuzzy
+msgid "Expunge failed"
+msgstr "O login fallou."
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Gardando indicadores de estado da mensaxe... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Borrando mensaxes do servidor..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr ""
+
+#: imap/imap.c:1099
+#, fuzzy
+msgid "CLOSE failed"
+msgstr "O login fallou."
+
+#: imap/imap.c:1342
+#, fuzzy
+msgid "Bad mailbox name"
+msgstr "Crear buzón:"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "Subscribindo a %s..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "Borrando a subscripción con %s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "Non foi posible recoller cabeceiras da versión de IMAP do servidor"
+
+#: imap/message.c:84
+#, fuzzy, c-format
+msgid "Could not create temporary file %s"
+msgstr "¡Non foi posible crear o ficheiro temporal!"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Recollendo cabeceiras de mensaxes... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Recollendo mensaxe..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "O índice de mensaxes é incorrecto. Tente reabri-lo buzón."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Enviando mensaxe ..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "Copiando %d mensaxes a %s..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "Copiando mensaxe %d a %s..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "¿Seguir?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "alias: sen enderezo"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr ""
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "campo de cabeceira inválido"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: método de ordeación descoñecido"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): erro en regexp: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: variable descoñecida"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "prefixo ilegal con reset"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "valor ilegal con reset"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s está activada"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s non está activada"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: tipo de buzón inválido"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: valor inválido"
+
+#: init.c:1312
+#, fuzzy, c-format
+msgid "%s: Unknown type."
+msgstr "%s: tipo descoñecido"
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: tipo descoñecido"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Non foi atopado: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s non é un buzón."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Erro en %s, liña %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: erros en %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: a lectura foi abortada por haber demasiados erros in %s"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: erro en %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: demasiados parámetros"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: comando descoñecido"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Erro na liña de comando: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "non foi posible determina-lo directorio \"home\""
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "non foi posible determina-lo nome de usuario"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Bucle de macro detectado."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "A tecla non está vinculada."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "A tecla non está vinculada. Pulsa '%s' para axuda."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: demasiados parámetros"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: non hai tal menú"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "secuencia de teclas nula"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: demasiados argumentos"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: función descoñecida"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: secuencia de teclas baleira"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: demasiados parámetros"
+
+#: keymap.c:871
+#, fuzzy
+msgid "exec: no arguments"
+msgstr "exec: parámetros insuficientes"
+
+#: keymap.c:891
+#, fuzzy, c-format
+msgid "%s: no such function"
+msgstr "%s: función descoñecida"
+
+#: keymap.c:912
+#, fuzzy
+msgid "Enter keys (^G to abort): "
+msgstr "Introduza keyID para %s: "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr ""
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "operación nula"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "forzar amosa do adxunto usando mailcap"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "ver adxunto como texto"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "Cambia-la visualización das subpartes"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "mover ó final da páxina"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "volver a manda-la mensaxe a outro usuario"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "seleccionar un novo ficheiro neste directorio"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "ver ficheiro"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "ve-lo nome do ficheiro seleccioado actualmente"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "subscribir ó buzón actual (só IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "borra-la subscripción ó buzón actual (só IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "cambiar entre ver todos e ver só os buzóns subscritos (só IMAP)"
+
+#: keymap_alldefs.h:18
+#, fuzzy
+msgid "list mailboxes with new mail"
+msgstr "Non hai buzóns con novo correo."
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "cambiar directorios"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "comprobar se hai novo correo nos buzóns"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "adxuntar ficheiro(s) a esta mensaxe"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "adxuntar mensaxe(s) a esta mensaxe"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "edita-la lista de BCC"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "edita-la lista CC"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "edita-la descripción do adxunto"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "edita-lo \"transfer-encoding\" do adxunto"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "introducir un ficheiro no que gardar unha copia da mensaxe"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "edita-lo ficheiro a adxuntar"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "edita-lo campo \"De\""
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "edita-la mensaxe con cabeceiras"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "edita-la mensaxe"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "edita-lo adxunto usando a entrada mailcap"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "edita-lo campo Responder-A"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "edita-lo tema desta mensaxe"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "edita-a lista do Para"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "crear un novo buzón (só IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "edita-lo tipo de contido do adxunto"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "coller unha copia temporal do adxunto"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "executar ispell na mensaxe"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "compór novo adxunto usando a entrada mailcap"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "cambia-la recodificación deste adxunto"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "gardar esta mensaxe para mandar logo"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "renomear/mover un ficheiro adxunto"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "envia-la mensaxe"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "cambia-la disposición entre interior/adxunto"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "cambiar a opción de borra-lo ficheiro logo de mandalo"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "actualiza-la información de codificación dun adxunto"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "escribi-la mensaxe a unha carpeta"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "copiar unha mensaxe a un ficheiro/buzón"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "crear un alias do remitente dunha mensaxe"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "mover entrada ó final da pantalla"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "mover entrada ó medio da pantalla"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "mover entrada ó principio da pantalla"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "facer copia descodificada (texto plano)"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "facer copia descodificada (texto plano) e borrar"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "borra-la entrada actual"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "borra-lo buzón actual (só IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "borrar tódalas mensaxes no subfío"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "borrar tódalas mensaxes no fío"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "amosa-lo enderezo completo do remitente"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "amosa-la mensaxe e cambia-lo filtrado de cabeceiras"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "amosar unha mensaxe"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "edita-la mensaxe en cru"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "borra-lo carácter en fronte do cursor"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "move-lo cursor un carácter á esquerda"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "move-lo cursor ó comezo da palabra"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "saltar ó comezo de liña"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "cambiar entre buzóns de entrada"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "nome de ficheiro completo ou alias"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "enderezo completo con consulta"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "borra-lo carácter baixo o cursor"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "saltar ó final da liña"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "move-lo cursor un carácter á dereita"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "move-lo cursor ó final da palabra"
+
+#: keymap_alldefs.h:75
+#, fuzzy
+msgid "scroll down through the history list"
+msgstr "moverse cara atrás na lista do historial"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "moverse cara atrás na lista do historial"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "borra-los caracteres dende o cursor ata o fin da liña"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "borra-los caracteres dende o cursor ata o fin da palabra"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "borrar tódolos caracteres da liña"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "borra-la palabra en fronte do cursor"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "cita-la vindeira tecla pulsada"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "intercambia-lo caracter baixo o cursor có anterior"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "pasa-la primeira letra da palabra a maiúsculas"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "converti-la palabra a minúsculas"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "converti-la palabra a maiúsculas"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "introducir un comando do muttrc"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "introducir unha máscara de ficheiro"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "saír deste menú"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "filtrar adxunto a través dun comando shell"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "moverse á primeira entrada"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "cambia-lo indicador de 'importante' dunha mensaxe"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "reenvia-la mensaxe con comentarios"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "selecciona-la entrada actual"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "responder a tódolos destinatarios"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "moverse 1/2 páxina cara abaixo"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "moverse 1/2 páxina cara arriba"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "esta pantalla"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "saltar a un número do índice"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "moverse á última entrada"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "responder á lista de correo especificada"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "executar unha macro"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "compór unha nova mensaxe"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "abrir unha carpeta diferente"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "abrir unha carpeta diferente en modo de só lectura"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "limpar a marca de estado dunha mensaxe"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "borrar mensaxes coincidentes cun patrón"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "forza-la recollida de correo desde un servidor IMAP"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "recoller correo dun servidor POP"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "moverse á primeira mensaxe"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "moverse á última mensaxe"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "amosar só mensaxes que coincidan cun patrón"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "saltar á vindeira nova mensaxe"
+
+#: keymap_alldefs.h:113
+#, fuzzy
+msgid "jump to the next new or unread message"
+msgstr "saltar á vindeira mensaxe recuperada"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "saltar ó vindeiro subfío"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "saltar ó vindeiro fío"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "moverse á vindeira mensaxe recuperada"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "saltar á vindeira mensaxe recuperada"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "saltar á mensaxe pai no fío"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "saltar ó fío anterior"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "saltar ó subfío anterior"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "moverse á anterior mensaxe recuperada"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "saltar á vindeira mensaxe nova"
+
+#: keymap_alldefs.h:123
+#, fuzzy
+msgid "jump to the previous new or unread message"
+msgstr "saltar á anterior mensaxe non lida"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "saltar á anterior mensaxe non lida"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "marca-lo fío actual como lido"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "marca-lo subfío actual como lido"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "pór un indicador de estado nunha mensaxe"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "gardar cambios ó buzón"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "marcar mensaxes coincidintes cun patrón"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "recuperar mensaxes coincidindo cun patrón"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "quitar marca a mensaxes coincidintes cun patrón"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "moverse ó medio da páxina"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "moverse á vindeira entrada"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "avanzar unha liña"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "moverse á vindeira páxina"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "saltar ó final da mensaxe"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "cambiar a visualización do texto citado"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "saltar o texto citado"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "saltar ó comezo da mensaxe"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "canalizar mensaxe/adxunto a un comando de shell"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "moverse á entrada anterior"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "retroceder unha liña"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "moverse á vindeira páxina"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "imprimi-la entrada actual"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "consultar o enderezo a un programa externo"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "engadir os resultados da nova consulta ós resultados actuais"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "gardar cambios ó buzón e saír"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "reeditar unha mensaxe posposta"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "limpar e redibuxa-la pantalla"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{interno}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "responder a unha mensaxe"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "usa-la mensaxe actual como patrón para unha nova"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "gardar mensaxe/adxunto a un ficheiro"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "buscar unha expresión regular"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "buscar unha expresión regular cara atrás"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "busca-la vindeira coincidencia"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "busca-la vindeira coincidencia en dirección oposta"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "cambia-la coloración do patrón de búsqueda"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "chamar a un comando nun subshell"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "ordear mensaxes"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "ordear mensaxes en orden inverso"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "marca-la entrada actual"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "aplica-la vindeira función ás mensaxes marcadas"
+
+#: keymap_alldefs.h:164
+#, fuzzy
+msgid "apply next function ONLY to tagged messages"
+msgstr "aplica-la vindeira función ás mensaxes marcadas"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "marca-lo subfío actual"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "marca-lo fío actual"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "cambia-lo indicador de 'novo' dunha mensaxe"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "cambia-la opción de reescribir/non-reescribi-lo buzón"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "cambia-la opción de ver buzóns/tódolos ficheiros"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "moverse ó comezo da páxina"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "recupera-la entrada actual"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "recuperar tódalas mensaxes en fío"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "recuperar tódalas mensaxes en subfío"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "amosa-lo número e data de versión de Mutt"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "ver adxunto usando a entrada de mailcap se cómpre"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "amosar adxuntos MIME"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr ""
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "amosar o patrón limitante actual"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "colapsar/expandir fío actual"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "colapsar/expandir tódolos fíos"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "adxuntar unha chave pública PGP"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "amosa-las opcións PGP"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "enviar por correo unha chave pública PGP"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "verificar unha chave pública PGP"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "ve-la identificación de usuario da chave"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "verificar para pgp clásico"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "Acepta-la cadea construida"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "Engadir un remailer á cadea"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "Insertar un remailer na cadea"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "Borrar un remailer da cadea"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "Selecciona-lo anterior elemento da cadea"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "Selecciona-lo vindeiro elemento da cadea"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "envia-la mensaxe a través dunha cadea de remailers mixmaster"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "facer unha copia desencriptada e borrar"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "facer unha copia desencriptada"
+
+#: keymap_alldefs.h:196
+#, fuzzy
+msgid "wipe passphrase(s) from memory"
+msgstr "borra-lo contrasinal PGP de memoria"
+
+#: keymap_alldefs.h:197
+#, fuzzy
+msgid "extract supported public keys"
+msgstr "extraer chaves públicas PGP"
+
+#: keymap_alldefs.h:198
+#, fuzzy
+msgid "show S/MIME options"
+msgstr "amosa-las opcións PGP"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "¡Memoria agotada!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"Para pórse en contacto cós desenvolvedores, manda unha mensaxe a <mutt-"
+"dev@mutt.org>.\n"
+"Para informar dun fallo, use a utilidade flea(1).\n"
+
+#: main.c:50
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-9 de Michael R. Elkins and others.\n"
+"Mutt vén sen NINGÚN TIPO DE GARANTIA; para ve-los detalles, escriba `mutt -"
+"vv'.\n"
+"Mutt é software libre, e vostede é benvido cando desexe redistribuilo \n"
+"baixo certas condicións; escriba `mutt -vv' para ve-losdetalles.\n"
+
+#: main.c:56
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-2001 Michael R. Elkins <me@cs.hmc.edu>\n"
+"Copyright (C) 1996-2001 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2001 Thomas Roessler <roessler@guug.de>\n"
+"Copyright (C) 1998-2001 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2001 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2001 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"Moita xente non mencionada aquí colaborou con unha morea de código,\n"
+"amaños, e suxerencias.\n"
+"\n"
+"    Este programa é software libre; pode redistribuilo e/ou modificalo\n"
+"    baixo os términos da Licencia Pública Xeral de GNU, tal e como foi\n"
+"    publicada pola Free Software Foundation; tanto a versión 2 da\n"
+"    licencia, ou (ó seu gusto) outra versión posterior.\n"
+"\n"
+"    Este programa é distribuido na esperanza de que sexa útil,\n"
+"    mais SEN GARANTÍA DE NINGÚN TIPO; incluso sen a garantía implícita\n"
+"    de MERCANTIBILIDADE ou AXEITAMENTE PARA ALGÚN PROPÓSITO PARTICULAR.\n"
+"    Mire a Licencia General de GNU para máis información.\n"
+"\n"
+"    Debería haber recibido unha copia da Licencia Pública Xeral de GNU\n"
+"    xunto deste programa; se non foi así, escriba á Free Software\n"
+"    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\n"
+
+#: main.c:94
+#, fuzzy
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"uso: mutt [ -nRzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f <file> ]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <ficheiro> ] [ -F <ficheiro> ]\n"
+" [ -H <ficheiro> ] [ -i <ficheiro> ] [ -s <tema> ] [ -b <enderz> ] [ -c "
+"<enderz> ] <enderz> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <ficheiro> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -a <ficheiro>\tadxuntar un ficheiro á mensaxe\n"
+"  -b <enderezo>\tespecificar un enderezo para carbon-copy cego (BCC)\n"
+"  -c <enderezo>\tespecificar un enderezo para carbon-copy (CC)\n"
+"  -e <comando>\tespecificar un comando a executar despois do inicio\n"
+"  -f <ficheiro>\tespecificar que buzón ler\n"
+"  -F <ficheiro>\tespecificar un ficheiro muttrc alternativo\n"
+"  -H <ficheiro>\tespecificar un ficheiro borrador do que le-la cabeceira\n"
+"  -i <ficheiro>\tespecificar un ficheiro que Mutt deberá incluir na "
+"resposta\n"
+"  -m <tipo>\tespecificar un tipo de buzón por defecto\n"
+"  -n\t\tfai que Mutt non lea o Muttrc do sistema\n"
+"  -p\t\teditar unha mensaxe posposta\n"
+"  -R\t\tabrir un buzón en modo de só lectura\n"
+"  -s <tema>\tespecificar un tema (debe ir entre comillas se ten espacios)\n"
+"  -v\t\tamosa-la versión e las definicións en tempo de compilación\n"
+"  -x\t\tsimula-lo modo de envío de mailx\n"
+"  -y\t\tseleccionar un buzón especificado na súa lista de buzóns\n"
+"  -z\t\tsalir de contado se non quedan mensaxes no buzón\n"
+"  -Z\t\tabri-la primeira carpeta con algunha mensaxe nova, saír de contado "
+"si non hai tal\n"
+"  -h\t\testa mensaxe de axuda"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Opcións de compilación:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Error iniciando terminal."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Depurando a nivel %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr ""
+"A opción \"DEBUG\" non foi especificada durante a compilación. Ignorado.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s non existe. ¿Desexa crealo?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "Non foi posible crear %s: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Non foi especificado ningún destinatario.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: non foi posible adxuntar ficheiro.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Non hai buzóns con novo correo."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Non se definiron buzóns para correo entrante."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "O buzón está valeiro."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Lendo %s... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "¡O buzón está corrupto!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "¡O buzón foi corrompido!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "¡Erro fatal! ¡Non foi posible reabri-lo buzón!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "¡Imposible bloquea-lo buzón!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+"sync: ¡buzón modificado, mais non hai mensaxes modificadas! (informe deste "
+"fallo)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Escribindo mensaxes... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+#, fuzzy
+msgid "Committing changes..."
+msgstr "Compilando patrón de búsqueda..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "¡Fallou a escritura! Gardado buzón parcialmente a %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "¡Non foi posible reabri-lo buzón!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Reabrindo buzón..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Saltar a: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Número de índice inválido."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Non hai entradas."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Non é posible moverse máis abaixo."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Non é posible moverse máis arriba."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Está na derradeira páxina."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Está na primeira páxina."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "Amosase a primeira entrada."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "Amosase a derradeira entrada."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Está na derradeira entrada."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Está na primeira entrada."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Búsqueda de: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Búsqueda inversa de: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Non hai patrón de búsqueda."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Non se atopou."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "Non hai entradas marcadas."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "A búsqueda non está implementada neste menú."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "O salto non está implementado nos diálogos."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "O marcado non está soportado."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "Lendo %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr ""
+
+#: muttlib.c:835
+#, fuzzy
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "O ficheiro é un directorio, ¿gardar nel?"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "O ficheiro é un directorio, ¿gardar nel?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Ficheiro no directorio: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "O ficheiro existe, ¿(s)obreescribir, (e)ngadir ou (c)ancelar?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "sec"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "Non foi posible garda-la mensaxe no buzón POP."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "¡%s non é un buzón!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "¿engadir mensaxes a %s?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, fuzzy, c-format
+msgid "Connection to %s closed"
+msgstr "Fallou a conexión con %s."
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL non está accesible."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "O comando de preconexión fallou."
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, fuzzy, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Erro ó conectar có servidor: %s"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr ""
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "Buscando %s..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Non foi posible atopa-lo servidor \"%s\""
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Conectando con %s..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "Non foi posible conectar con %s (%s)"
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "Non hai entropía abondo no seu sistema"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "Enchendo pozo de entropía: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s ten permisos inseguros."
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "SSL foi deshabilitado debido á falta de entropía."
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr ""
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr ""
+
+#: mutt_ssl.c:324
+#, fuzzy, c-format
+msgid "SSL failed: %s"
+msgstr "O login fallou."
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "Non foi posible obter un certificado do outro extremo"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "Conectando mediante SSL usando %s (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "Descoñecido"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[imposible calcular]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[ data incorrecta ]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "O certificado do servidor non é aínda válido"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "O certificado do servidor expirou"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Este certificado pertence a:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Este certificado foi emitido por:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Este certificado é válido"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   de %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "     a %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Fingerprint: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "Comprobación do certificado SSL"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(r)exeitar, aceptar (e)sta vez, (a)ceptar sempre"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "rea"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(r)exeitar, aceptar (e)sta vez"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "re"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Saír  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Atención: non foi posible garda-lo certificado"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "Certificado gardado"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Excedeuse a conta de bloqueos, ¿borrar bloqueo para %s?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "Non se pode bloquear %s.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "¡Tempo de espera excedido cando se tentaba face-lo bloqueo fcntl!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Agardando polo bloqueo fcntl... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "¡Tempo de espera excedido cando se tentaba face-lo bloqueo flock!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Agardando polo intento de flock... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "Non foi posible bloquear %s.\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "Lendo %s..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "Escribindo %s..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "¡Non foi posible sincroniza-lo buzón %s!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "¿Mover mensaxes lidas a %s?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "¿Purgar %d mensaxe marcada como borrada?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "¿Purgar %d mensaxes marcadas como borradas?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Movendo mensaxes lidas a %s..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "O buzón non cambiou."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d conservados, %d movidos, %d borrados."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d conservados, %d borrados."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr " Pulse '%s' para cambiar a modo escritura"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "¡Use 'toggle-write' para restablece-lo modo escritura!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "O buzón está marcado como non escribible. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "Buzón marcado para comprobación."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Non foi posible escribi-la mensaxe"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "Non dispoñible neste menú."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "PáxAnt"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "SegPáx"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Ver adxunto"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Seguinte"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "Amosase o final da mensaxe."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "Amosase o principio da mensaxe."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Búsqueda inversa: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Búsqueda: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "Estase a amosa-la axuda"
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "Non hai máis texto citado."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "Non hai máis texto sen citar despois do texto citado."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "¡A mensaxe multiparte non ten parámetro \"boundary\"!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Erro na expresión: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Día do mes inválido: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Mes inválido: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "Data relativa incorrecta: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "erro na expresión"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "erro no patrón en: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: comando inválido"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: non está soportado neste modo"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "falta un parámetro"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "paréntese sen contraparte: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "patrón valeiro"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "erro: operador descoñecido %d (informe deste erro)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Compilando patrón de búsqueda..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Executando comando nas mensaxes coincidintes..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "Non hai mensaxes que coincidan co criterio."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "A búsqueda cheou ó final sen atopar coincidencias"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "A búsqueda chegou ó comezo sen atopar coincidencia"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Búsqueda interrompida."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "Contrasinal PGP esquecido."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Erro: ¡non foi posible crear subproceso PGP! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr "[-- Fin da saída PGP --]\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- COMEZA A MESAXE PGP --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- COMEZA O BLOQUE DE CHAVE PÚBLICA PGP --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- COMEZA A MESAXE FIRMADA CON PGP --]\n"
+"\n"
+
+#: pgp.c:381
+#, fuzzy
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr ""
+"\n"
+"[-- FIN DA MESAXE PGP --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- FIN DO BLOQUE DE CHAVE PÚBLICA PGP --]\n"
+
+#: pgp.c:385
+#, fuzzy
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr ""
+"\n"
+"[-- FIN DA MESAXE FIRMADA CON PGP --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Erro: ¡non se atopou o comezo da mensaxe PGP! --]\n"
+"\n"
+
+#: pgp.c:662
+#, fuzzy
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Erro interno. Informe a <roessler@guug.de>."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Erro: ¡non foi posible crear un subproceso PGP! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Erro: ¡mensaxe PGP/MIME mal formada! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Erro: ¡non foi posible crea-lo ficheiro temporal! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- Os datos a continuación están encriptados con PGP/MIME --]\n"
+"\n"
+
+#: pgp.c:863
+#, fuzzy
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr ""
+"\n"
+"[-- Fin dos datos con encriptación PGP/MIME --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "¡Non foi posible abri-lo subproceso PGP!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "¿Usa-lo keyID = \"%s\" para %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "Introduza keyID para %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "Non foi posible invocar ó PGP"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "Recollendo chave PGP..."
+
+#: pgpkey.c:486
+#, fuzzy
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "Tódalas chaves coincidintes están marcadas como expiradas/revocadas."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Seleccionar  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Comprobar chave  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "Chaves PGP coincidintes con <%s>."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "Chaves PGP coincidintes con \"%s\""
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "Non foi posible abrir /dev/null"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Non podo crea-lo ficheiro temporal"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "Key ID: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "Esta chave non pode ser usada: expirada/deshabilitada/revocada."
+
+#: pgpkey.c:608
+#, fuzzy
+msgid "ID is expired/disabled/revoked."
+msgstr "Este ID expirou/foi deshabilitado/foi revocado"
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr ""
+
+#: pgpkey.c:615
+#, fuzzy
+msgid "ID is not valid."
+msgstr "Este ID non é de confianza."
+
+#: pgpkey.c:618
+#, fuzzy
+msgid "ID is only marginally valid."
+msgstr "Este ID é de confianza marxinal."
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s ¿Está seguro de querer usa-la chave?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Introduza o key ID: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "Chamando ó PGP..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "Chave PGP %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Buscando chaves que coincidan con \"%s\"..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "O comando TOP non está soportado polo servidor."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "Non foi posible escribi-la cabeceira ó ficheiro temporal"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "O comando UIDL non está soportado polo servidor."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr ""
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "Recollendo a lista de mensaxes..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "Non foi posible escribi-la mensaxe ó ficheiro temporal"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "Buscando novas mensaxes..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "O servidor POP non está definido"
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "Non hai novo correo no buzón POP."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "¿Borra-las mensaxes do servidor?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Lendo novas mensaxes (%d bytes)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "¡Erro cando se estaba a escribi-lo buzón!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d de %d mensaxes lidas]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "¡O servidor pechou a conexión!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Autenticando (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Autenticando (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "Autenticación APOP fallida."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "O comando USER non está soportado polo servidor."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "Non foi posible deixa-las mensaxes no servidor."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "Erro ó conectar có servidor: %s"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "Pechando conexión có servidor POP..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Verificando os índices de mensaxes..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Perdeuse a conexión. ¿Volver a conectar ó servidor POP?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Mensaxes pospostas"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "Non hai mensaxes pospostas."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "Cabeceira PGP ilegal"
+
+#: postpone.c:479
+#, fuzzy
+msgid "Illegal S/MIME header"
+msgstr "Cabeceira PGP ilegal"
+
+#: postpone.c:554
+#, fuzzy
+msgid "Decryption failed."
+msgstr "O login fallou."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Nova consulta"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Facer alias"
+
+#: query.c:48
+msgid "Search"
+msgstr "Búsqueda"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Agardando resposta..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Comando de consulta non definido."
+
+#: query.c:286
+msgid "Query"
+msgstr "Consulta"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Consulta: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Consulta '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Canalizar"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Imprimir"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Gardando..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Adxunto gardado."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "¡ATENCION! Está a punto de sobreescribir %s, ¿seguir?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Adxunto filtrado."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Filtrar a través de: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Canalizar a: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "¡Non sei cómo imprimir adxuntos %s!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "¿Imprimi-la(s) mensaxe(s) marcada(s)?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "¿Imprimir adxunto?"
+
+#: recvattach.c:938
+#, fuzzy
+msgid "Can't decrypt encrypted message!"
+msgstr "Non foi posible atopar ningunha mensaxe marcada."
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Adxuntos"
+
+#
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "Non hai subpartes que amosar."
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "Non é posible borrar un adxunto do servidor POP."
+
+#: recvattach.c:1056
+#, fuzzy
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "O borrado de adxuntos de mensaxes PGP non está soportado."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Só o borrado de adxuntos de mensaxes multiparte está soportado."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Somentes podes rebotar partes \"message/rfc822\""
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing message!"
+msgstr "Erro enviando a mensaxe."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing messages!"
+msgstr "Erro enviando a mensaxe."
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Non foi posible abri-lo ficheiro temporal %s."
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "¿Reenviar mensaxes coma adxuntos?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+"Non foi posible decodificar tódolos adxuntos marcados.\n"
+"¿Remitir con MIME os outros?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "¿Facer \"forward\" con encapsulamento MIME?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "Non foi posible crear %s"
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Non foi posible atopar ningunha mensaxe marcada."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "¡Non se atoparon listas de correo!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+"Non foi posible decodificar tódolos adxuntos marcados.\n"
+"¿Remitir con MIME os outros?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Engadir"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Insertar"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Borrar"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "Ok"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "Non foi posible recolle-lo 'type2.list' do mixmaster."
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Seleccionar unha cadea de remailers."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "Erro: %s non pode ser usado como remailer final dunha cadea."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "As cadeas mixmaster están limitadas a %d elementos."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "A cadea de remailers xa está valeira."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "O primeiro elemento da cadea xa está seleccionado."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "O derradeiro elemento da cadea xa está seleccionado."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "O mixmaster non acepta cabeceiras Cc ou Bcc."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr ""
+"Por favor, use un valor correcto da variable 'hostname' cando use o "
+"mixmaster."
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Erro enviando mensaxe, o proceso fillo saíu con %d.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Erro enviando a mensaxe."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "Entrada malformada para o tipo %s en \"%s\" liña %d"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Non se especificou unha ruta de mailcap"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "non se atopou unha entrada mailcap para o tipo %s"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: insuficientes parámetros"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: demasiados parámetros"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Non hai tema, ¿cancelar?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Non hai tema, cancelando."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "¿Responder a %s%s?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "¿Responder a %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "¡Non hai mensaxes marcadas que sexan visibles!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "¿Inclui-la mensaxe na resposta?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Incluindo mensaxe citada..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "¡Non foi posible incluir tódalas mensaxes requeridas!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "¿Remitir como adxunto?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Preparando mensaxe remitida ..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "¿Editar mensaxe posposta?"
+
+#: send.c:1336
+#, fuzzy
+msgid "Edit forwarded message?"
+msgstr "Preparando mensaxe remitida ..."
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "¿Cancelar mensaxe sen modificar?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Mensaxe sen modificar cancelada."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "Mensaxe non enviada."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Mensaxe posposta."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "¡Non se especificaron destinatarios!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Non se especificaron destinatarios."
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Non hai tema, ¿cancela-lo envío?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Non se especificou tema."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Enviando mensaxe..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Non foi posible envia-la mensaxe."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Mensaxe enviada."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Mandando en segundo plano."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "¡Non se atopout parámetro \"boundary\"! [informe deste erro]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "¡Xa non existe %s!"
+
+#: sendlib.c:916
+#, fuzzy, c-format
+msgid "%s isn't a regular file."
+msgstr "%s non é un buzón."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "Non foi posible abrir %s"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Erro enviando mensaxe, o proceso fillo saíu con %d (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Saída do proceso de distribución"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr ""
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "Atrapado %s... Saíndo.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "Atrapado %s... Saíndo.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Atrapado sinal %d... Saíndo.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr ""
+
+#: smime.c:303
+msgid "Verified  "
+msgstr ""
+
+#: smime.c:306
+msgid "Unverified"
+msgstr ""
+
+#: smime.c:309
+#, fuzzy
+msgid "Expired   "
+msgstr "Saír  "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr ""
+
+#: smime.c:315
+#, fuzzy
+msgid "Invalid   "
+msgstr "Mes inválido: %s"
+
+#: smime.c:318
+#, fuzzy
+msgid "Unknown   "
+msgstr "Descoñecido"
+
+#: smime.c:347
+#, fuzzy
+msgid "Enter keyID: "
+msgstr "Introduza keyID para %s: "
+
+#: smime.c:370
+#, fuzzy, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "Chaves PGP coincidintes con \"%s\""
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr ""
+
+#: smime.c:523 smime.c:592
+#, fuzzy, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "¿Usa-lo keyID = \"%s\" para %s?"
+
+#: smime.c:526 smime.c:595
+#, fuzzy, c-format
+msgid "Use ID %s for %s ?"
+msgstr "¿Usa-lo keyID = \"%s\" para %s?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr ""
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+#, fuzzy
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "[-- Erro: ¡non foi posible crear subproceso PGP! --]\n"
+
+#: smime.c:1197
+#, fuzzy
+msgid "no certfile"
+msgstr "Non se puido crea-lo filtro"
+
+#: smime.c:1200
+#, fuzzy
+msgid "no mbox"
+msgstr "(non hai buzón)"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr ""
+
+#: smime.c:1381
+#, fuzzy
+msgid "Warning: Intermediate certificate not found."
+msgstr "Atención: non foi posible garda-lo certificado"
+
+#: smime.c:1426
+#, fuzzy
+msgid "Can't open OpenSSL subprocess!"
+msgstr "¡Non foi posible abri-lo subproceso PGP!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr ""
+
+#: smime.c:1629 smime.c:1751
+#, fuzzy
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr "[-- Fin da saída PGP --]\n"
+
+#: smime.c:1712 smime.c:1722
+#, fuzzy
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Erro: ¡non foi posible crear subproceso PGP! --]\n"
+
+#: smime.c:1755
+#, fuzzy
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr ""
+"[-- Os datos a continuación están encriptados con PGP/MIME --]\n"
+"\n"
+
+#: smime.c:1758
+#, fuzzy
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr ""
+"[-- Os datos a continuación están asinados --]\n"
+"\n"
+
+#: smime.c:1822
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- Fin dos datos con encriptación PGP/MIME --]\n"
+
+#: smime.c:1824
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- Fin dos datos asinados --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Ordeando buzón..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "¡Non foi atopada unha función de ordeación! [informe deste fallo]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(non hai buzón)"
+
+#: thread.c:1081
+#, fuzzy
+msgid "Parent message is not visible in this limited view."
+msgstr "A mensaxe pai non é visible na vista limitada."
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "A mensaxe pai non é accesible."
+
+#, fuzzy
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "Chamando ó PGP..."
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "¿Rebotar mensaxe a %s...?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "¿Rebotar mensaxes a %s...?"
+
+#, fuzzy
+#~ msgid "ewsabf"
+#~ msgstr "efcao"
+
+#, fuzzy
+#~ msgid "Certificate *NOT* added."
+#~ msgstr "Certificado gardado"
+
+#, fuzzy
+#~ msgid "This ID's validity level is undefined."
+#~ msgstr "O nivel de confianza deste ID está sen definir."
+
+#~ msgid "Decode-save"
+#~ msgstr "Descodificar-gardar"
+
+#~ msgid "Decode-copy"
+#~ msgstr "Descodificar-copiar"
+
+#~ msgid "Decrypt-save"
+#~ msgstr "Desencriptar-gardar"
+
+#~ msgid "Decrypt-copy"
+#~ msgstr "Desencriptar-copiar"
+
+#~ msgid "Copy"
+#~ msgstr "Copiar"
+
+#~ msgid "%s [%s]\n"
+#~ msgstr "%s [%s]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "[-- End of PGP output --]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "[-- Fin da saída PGP --]\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "Can't stat %s."
+#~ msgstr "Non foi atopado: %s"
+
+#~ msgid "%s: no such command"
+#~ msgstr "%s: non hai tal comando"
+
+#~ msgid "Authentication method is unknown."
+#~ msgstr "O método de autenticación é descoñecido."
+
+#, fuzzy
+#~ msgid "Creating mailboxes is not yet supported."
+#~ msgstr "O marcado non está soportado."
+
+#, fuzzy
+#~ msgid "Can't open %s: %s."
+#~ msgstr "Non foi atopado: %s"
+
+#~ msgid "MIC algorithm: "
+#~ msgstr "Algoritmo MIC: "
+
+#~ msgid "This doesn't make sense if you don't want to sign the message."
+#~ msgstr "Isto non é moi sensato se non queres firma-la mensaxe."
+
+#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160"
+#~ msgstr ""
+#~ "Algoritmo MIC descoñecido, os válidos son: pgp-md5, pgp-sha1, pgp-rmd160"
+
+#~ msgid "[-- Error: unexpected end of file! --]\n"
+#~ msgstr "[-- Erro: ¡fin de ficheiro inesperado! --]\n"
+
+#~ msgid "IMAP Username: "
+#~ msgstr "Usuario IMAP: "
+
+#, fuzzy
+#~ msgid "CRAM key for %s@%s: "
+#~ msgstr "Introduza keyID para %s: "
+
+#~ msgid "Reopening mailbox... %s"
+#~ msgstr "Reabrindo buzón... %s"
+
+#~ msgid "Closing mailbox..."
+#~ msgstr "Pechando buzón..."
+
+#~ msgid "Sending APPEND command ..."
+#~ msgstr "Enviando comando APPEND..."
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "SHA1 implementation Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft."
+#~ "com>\n"
+#~ "\n"
+#~ "    Redistribution and use in source and binary forms, with or without\n"
+#~ "    modification, are permitted under certain conditions.\n"
+#~ "\n"
+#~ "    The SHA1 implementation comes AS IS, and ANY EXPRESS OR IMPLIED\n"
+#~ "    WARRANTIES, including, but not limited to, the implied warranties of\n"
+#~ "    merchantability and fitness for a particular purpose ARE DISCLAIMED.\n"
+#~ "\n"
+#~ "    You should have received a copy of the full distribution terms\n"
+#~ "    along with this program; if not, write to the program's developers.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Implementación SHA1 Copyright (C) 1995-7 Eric A. Young <eay@cryptosoft."
+#~ "com>\n"
+#~ "    A redistribución e uso na súa forma de fontes e binarios, con ou sin\n"
+#~ "    modificación, están permitidas baixo certas condicións.\n"
+#~ "\n"
+#~ "    A implementación de SHA1 ven TAL CUAL, e CALQUERA GARANTIA EXPRESA "
+#~ "OU\n"
+#~ "    IMPLICADA, incluindo, mais non limitada a, as garantías implícitas "
+#~ "de\n"
+#~ "    comercialización e adaptación a un propósito particular SON\n"
+#~ "    DESCARGADAS.\n"
+
+#~ msgid "POP Password: "
+#~ msgstr "Contrasinal POP: "
+
+#~ msgid "No POP username is defined."
+#~ msgstr "Non foi definido nome de usuario POP."
+
+#, fuzzy
+#~ msgid "Reading new message (%d bytes)..."
+#~ msgstr "Lendo %d nova mensaxe (%d butes)..."
+
+#~ msgid "Error reading message!"
+#~ msgstr "¡Erro lendo mensaxe!"
+
+#, fuzzy
+#~ msgid "%s [%d message read]"
+#~ msgstr "%s [%d mensaxes lidas]"
+
+#~ msgid "Attachment saved"
+#~ msgstr "Adxunto gardado"
+
+#~ msgid "Compose"
+#~ msgstr "Compór"
+
+#~ msgid "move to the last undelete message"
+#~ msgstr "moverse á última mensaxe recuperada"
+
+#~ msgid "return to the main-menu"
+#~ msgstr "voltar ó menú principal"
+
+#~ msgid "ignoring empty header field: %s"
+#~ msgstr "ignorando campo de cabeceira valeiro: %s"
+
+#~ msgid "imap_error(): unexpected response in %s: %s\n"
+#~ msgstr "imap_erro(): resposta inesperada en %s: %s\n"
+
+#
+#~ msgid "IMAP folder browsing is not currently supported"
+#~ msgstr "A navegación de carpetas IMAP non está soportada actualmente"
+
+#~ msgid "Can't open your secret key ring!"
+#~ msgstr "¡Non fun capaz de abri-lo teu anel secreto de chaves!"
+
+#~ msgid "An unkown PGP version was defined for signing."
+#~ msgstr "Foi definida unha versión descoñecida de PGP para firmar."
+
+#~ msgid "===== Attachments ====="
+#~ msgstr "====== Adxuntos ====="
+
+#
+#~ msgid "Sending CREATE command ..."
+#~ msgstr "Enviando comando CREATE..."
+
+#~ msgid "Unknown PGP version \"%s\"."
+#~ msgstr "Versión de PGP descoñecida \"%s\"."
+
+#~ msgid ""
+#~ "[-- Error: this message does not comply with the PGP/MIME specification! "
+#~ "--]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "[-- Erro: ¡esta mensaxe non compre coas especificacións PGP/MIME! --]\n"
+#~ "\n"
+
+#~ msgid "reserved"
+#~ msgstr "reservado"
+
+#~ msgid "Encrypted Session Key"
+#~ msgstr "Chave da sesión encriptada"
+
+#~ msgid "Signature Packet"
+#~ msgstr "Paquete da firma"
+
+#~ msgid "Conventionally Encrypted Session Key Packet"
+#~ msgstr "Paquete da sesión encriptada convencionalmente"
+
+#~ msgid "One-Pass Signature Packet"
+#~ msgstr "Paquete de firma \"One-Pass\""
+
+#~ msgid "Secret Key Packet"
+#~ msgstr "Paquete de chave secreta"
+
+#~ msgid "Public Key Packet"
+#~ msgstr "Paquete de chave pública"
+
+#~ msgid "Secret Subkey Packet"
+#~ msgstr "Paquete de subchave secreta"
+
+#~ msgid "Compressed Data Packet"
+#~ msgstr "Paquete de datos comprimidos"
+
+#~ msgid "Symmetrically Encrypted Data Packet"
+#~ msgstr "Paquete de data encriptada simétricamente"
+
+#~ msgid "Marker Packet"
+#~ msgstr "Paquete marcador"
+
+#~ msgid "Literal Data Packet"
+#~ msgstr "Paquete de datos literales"
+
+#~ msgid "Trust Packet"
+#~ msgstr "Paquete de confianza"
+
+#~ msgid "Name Packet"
+#~ msgstr "Paquete de nome"
+
+#~ msgid "Subkey Packet"
+#~ msgstr "Paquete de subchave"
+
+#~ msgid "Reserved"
+#~ msgstr "Reservado"
+
+#~ msgid "Comment Packet"
+#~ msgstr "Paquete de comentario"
+
+#~ msgid "Message edited. Really send?"
+#~ msgstr "Mensaxe editada. ¿Enviar de verdad?"
+
+#~ msgid "Saved output of child process to %s.\n"
+#~ msgstr "Gardada saída do proceso fillo a %s.\n"
diff --git a/po/hu.gmo b/po/hu.gmo
new file mode 100644 (file)
index 0000000..93fc145
Binary files /dev/null and b/po/hu.gmo differ
diff --git a/po/hu.po b/po/hu.po
new file mode 100644 (file)
index 0000000..c9daca4
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,4163 @@
+# Hungarian translation for Mutt.
+# Copyright (C) 2000-2001 Free Software Foundation, Inc.
+# László Kiss <kissl@eptan.efe.hu>, 2000-2001;
+# Szabolcs Horváth <horvaths@fi.inf.elte.hu>, 2001-2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 1.5.4i\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2003-08-01 13:56+0000\n"
+"Last-Translator: Szabolcs Horváth <horvaths@fi.inf.elte.hu>\n"
+"Language-Team: LME Magyaritasok Lista <magyar@lists.linux.hu>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "%s azonosító: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "%s@%s jelszava: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Kilép"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Töröl"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Visszaállít"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Választ"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Súgó"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "Nincs bejegyzés a címjegyzékben!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Címjegyzék"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Álnév: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "Már van bejegyzés ilyen álnévvel!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr "Figyelmeztetés: Ez az álnév lehet, hogy nem mûködik.  Javítsam?"
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Cím: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr "Hiba: '%s' hibás IDN."
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Név: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] Rendben?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Mentés fájlba: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Cím bejegyezve."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Nem felel meg a névmintának, tovább?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "A mailcap-ba \"compose\" bejegyzés szükséges %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "Hiba a(z) \"%s\" futtatásakor!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Fájl megnyitási hiba a fejléc vizsgálatakor."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Fájl megnyitási hiba a fejléc eltávolításkor."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr ""
+"Nincs mailcap \"compose\" bejegyzés a(z) %s esetre, üres fájl létrehozása."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "A mailcap-ba \"edit\" bejegyzés szükséges %%s"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "Nincs \"edit\" bejegyzés a mailcap-ban a(z) %s esetre"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "Nincs megfelelõ mailcap bejegyzés. Megjelenítés szövegként."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "A MIME típus nincs definiálva. A melléklet nem jeleníthetõ meg."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Nem lehet szûrõt létrehozni."
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Szûrõt nem lehet létrehozni"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "Írási hiba!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Nem ismert, hogy ezt hogyan kell kinyomtatni!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Könyvtárváltás"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Maszk"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "A(z) %s nem könyvtár."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Postafiókok [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Felírt [%s], Fájlmaszk: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Könyvtár [%s], Fájlmaszk: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Könyvtár nem csatolható!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Nincs a fájlmaszknak megfelelõ fájl"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Csak IMAP postafiókok létrehozása támogatott"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Csak IMAP postafiókok törlése támogatott"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Valóban törli a \"%s\" postafiókot?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "Postafiók törölve."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "A postafiók nem lett törölve."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Könyvtár: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Hiba a könyvtár beolvasásakor."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Fájlmaszk: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Fordított rendezés (d)átum, (n)év, (m)éret szerint vagy (r)endezetlen?"
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Rendezés (d)átum, (n)év, (m)éret szerint vagy (r)endezetlen?"
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "dnmr"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Az új fájl neve: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "A könyvtár nem jeleníthetõ meg"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Hiba a fájl megjelenítéskor"
+
+#: buffy.c:442
+msgid "New mail in "
+msgstr "Új levél: "
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: a terminál által nem támogatott szín"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%%s: nincs ilyen szín"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: nincs ilyen objektum"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: a parancs csak index objektumra érvényes"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: túl kevés paraméter"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Hiányzó paraméter."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: túl kevés paraméter"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: túl kevés paraméter"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: nincs ilyen attribútum"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "túl kevés paraméter"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "túl sok paraméter"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "az alapértelmezett színek nem támogatottak"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "Ellenõrizzük a PGP aláírást?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Nem lehet átmeneti fájlt létrehozni!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Nem lehet megjelenítõ szûrõt létrehozni."
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "A levelet nem tudtam másolni"
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr "S/MIME aláírás sikeresen ellenõrizve."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr "Az S/MIME tanúsítvány tulajdonosa nem egyezik a küldõvel. "
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr "Az S/MIME aláírást NEM tudtam ellenõrizni."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "A PGP aláírás sikeresen ellenõrizve."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "A PGP aláírást NEM tudtam ellenõrizni."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Parancs: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Levél visszaküldése. Címzett: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Kijelölt levelek visszaküldése. Címzett: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "Hibás cím!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr "Hibás IDN: '%s'"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Levél visszaküldése %s részére"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Levél visszaküldése %s részére"
+
+#: commands.c:294 recvcmd.c:192
+msgid "Message not bounced."
+msgstr "A levél nem lett visszaküldve."
+
+#: commands.c:294 recvcmd.c:192
+msgid "Messages not bounced."
+msgstr "A levél nem lett visszaküldve."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Levél visszaküldve."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Levél visszaküldve."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "Szûrõfolyamatot nem lehet létrehozni"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Parancs, aminek továbbít: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "Nincs nyomtatási parancs megadva."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "Kinyomtatod a levelet?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Kinyomtatod a kijelölt leveleket?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "Levél kinyomtatva"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Levél kinyomtatva"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "A levelet nem tudtam kinyomtatni"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "A leveleket nem tudtam kinyomtatni"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Fordítva rendez Dátum/Feladó/érK/tárGy/Címzett/Téma/Rendetlen/Méret/"
+"Pontszám: "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Rendez Dátum/Feladó/érKezés/tárGy/Címzett/Téma/Rendezetlen/Méret/Pontszám: "
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dfkgctrmp"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Shell parancs: "
+
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "Dekódolás-mentés%s postafiókba"
+
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "Dekódolás-másolás%s postafiókba"
+
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "Visszafejtés-mentés%s postafiókba"
+
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "Visszafejtés-másolás%s postafiókba"
+
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "Mentés%s postafiókba"
+
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "Másolás%s postafiókba"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " kijelölt"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Másolás a(z) %s-ba..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "Átalakítsam %s formátumra küldéskor?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Tartalom-típus megváltoztatva %s-ra."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "Karakterkészlet beállítva: %s; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "nem alakítom át"
+
+#: commands.c:914
+msgid "converting"
+msgstr "átalakítom"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Nincs melléklet."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Küld"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Mégse"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Fájl csatolás"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Leírás"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Aláír, Titkosít"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Titkosít"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Aláír"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Nincs"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " aláír mint: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<alapeset>"
+
+#: compose.c:149
+msgid "Encrypt with: "
+msgstr "Titkosítás: "
+
+#: compose.c:165
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "PGP (t)itkosít, (a)láír, aláír (m)int, titkosít é(s) aláír, mé(g)se? "
+
+#: compose.c:166
+msgid "esabf"
+msgstr "tamsg"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Aláír mint: "
+
+#: compose.c:227
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"S/MIME (t)itkosít, (a)láír, titkosít (p)rg, aláír (m)int, titkosít é(s) "
+"aláír, mé(g)se? "
+
+#: compose.c:228
+msgid "eswabf"
+msgstr "tapmsg"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, vagy (m)égse? "
+
+#: compose.c:238
+msgid "12345f"
+msgstr "12345m"
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] tovább nem létezik!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] módosítva. Frissítsük a kódolást?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Mellékletek"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr "Figyelmeztetés: '%s' hibás IDN."
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Az egyetlen melléklet nem törölhetõ."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr "Hibás IDN \"%s\": '%s'"
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "A kiválasztott fájlok csatolása..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "%s nem csatolható!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Postafiók megnyitása levél csatolásához"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "Nincs levél ebben a postafiókban."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Jelöld ki a csatolandó levelet!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Nem lehet csatolni!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "Az újrakódolás csak a szöveg mellékleteket érinti."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "Ez a melléklet nem lesz konvertálva."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "Ez a melléklet konvertálva lesz."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Érvénytelen kódolás."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Mented egy másolatát a levélnek?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Átnevezés: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "%s nem olvasható: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Új fájl: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "A tartalom-típus alap-/altípus formájú."
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "%s ismeretlen tartalom-típus"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Nem lehet a(z) %s fájlt létrehozni"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "Hiba a melléklet csatolásakor"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Eltegyük a levelet késõbbre?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Levél mentése postafiókba"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Levél mentése %s-ba ..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "Levél elmentve."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr "S/MIME már ki van jelölve. Törlés & folytatás ?"
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr "PGP már ki van jelölve. Törlés & folytatás ?"
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr " (pontos idõ: %c)"
+
+#: crypt.c:71
+#, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- %s kimenet következik%s --]\n"
+
+#: crypt.c:86
+msgid "Passphrase(s) forgotten."
+msgstr "Jelszó elfelejtve."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Kérlek írd be a PGP jelszavadat: "
+
+#: crypt.c:147
+msgid "Enter SMIME passphrase:"
+msgstr "Kérlek írd be az SMIME jelszavadat: "
+
+#: crypt.c:192
+msgid "Create a traditional (inline) PGP message?"
+msgstr "Hagyományos (beágyazott) PGP üzenet készítése?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "PGP betöltés..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr "Tartalom-útmutatás nélküli S/MIME üzenetek nem támogatottak."
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr "PGP kulcsok kibontása...\n"
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr "S/MIME tanúsítványok kibontása...\n"
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- Hiba: Ellentmondó többrészes/aláírt struktúra! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- Hiba: Ismeretlen többrészes/aláírt protokoll %s! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Figyelmeztetés: Nem tudtam leellenõrizni a %s/%s aláírásokat. --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- A következõ adatok alá vannak írva --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Figyelmeztetés: Nem találtam egy aláírást sem. --]\n"
+"\n"
+
+#: crypt.c:924
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Aláírt adat vége --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "igen"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "nem"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Kilépsz a Mutt-ból?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "ismeretlen hiba"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Nyomj le egy billentyût a folytatáshoz..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " ('?' lista): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Nincs megnyitott postafiók."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Nincs levél."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "A postafiók csak olvasható."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "A funkció levél-csatolás módban le van tiltva."
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "Nincs látható levél."
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "A csak olvasható postafiókba nem lehet írni!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr ""
+"A postafiók módosításai a postafiókból történõ kilépéskor lesznek elmentve."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "A postafiók módosításai nem lesznek elmentve."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Kilép"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Ment"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Levél"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Válasz"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Csoport"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "A postafiókot más program módosította. A jelzõk hibásak lehetnek."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Új levél érkezett a postafiókba."
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "A postafiókot más program módosította."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Nincs kijelölt levél."
+
+#: curs_main.c:653 menu.c:896
+#, fuzzy
+msgid "Nothing to do."
+msgstr "Kapcsolódás %s-hez..."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Levélre ugrás: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "A paraméternek levélszámnak kell lennie."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Ez a levél nem látható."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Érvénytelen levélszám."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "A mintára illeszkedõ levelek törlése: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "A szûrõ mintának nincs hatása."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Szûkítés: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Minta a levelek szûkítéséhez: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Kilépsz a Muttból?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Minta a levelek kijelöléséhez: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Minta a levelek visszaállításához: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Minta a levélkijelölés megszüntetéséhez:"
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Postafiók megnyitása csak olvasásra"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Postafiók megnyitása"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "A(z) %s nem egy postafiók."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Kilépsz a Muttból mentés nélül?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Ez az utolsó levél."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Nincs visszaállított levél."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Ez az elsõ levél."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "Keresés az elejétõl."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "Keresés a végétõl."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Nincs új levél"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Nincs olvasatlan levél"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " ebben a szûkített megjelenítésben"
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "A POP kiszolgálón nem lehet a 'fontos' jelzõt állítani."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Nincs több téma."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Ez az elsõ téma."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "A témázás le van tiltva."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "A témában olvasatlan levelek vannak."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "A POP kiszolgálón nem lehet szerkeszteni a levelet."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tbeszúr egy '~'-al kezdödõ sort\n"
+"~b címzett\thozzáadás a Bcc: (Titkos másolat:) mezõhöz\n"
+"~c címzett\thozzáadás a Cc: (Másolat:) mezõhöz\n"
+"~f levelek\tlevelek beszúrása\n"
+"~F levelek\tmint az ~f, de az levélfejlécet is beszúrja\n"
+"~h\t\tlevél fejlécének szerkesztése\n"
+"~m leveleket\tidézett levelek beszúrása\n"
+"~M levelek\tmint az ~m, de az levélfejlécet is beszúrja\n"
+"~p\t\tlevél kinyomtatása\n"
+"~q\t\tfájl mentése és kilépés az editorból\n"
+"~r fájl\t\tfájl beolvasása az editorba\n"
+"~t címzett\thozzáadás a To: (Címzett:) mezõhöz\n"
+"~u\t\taz utolsó sor visszahívása\n"
+"~v\t\tlevél szerkesztése a $visual editorral\n"
+"~w fájl\t\tlevél mentése fájlba\n"
+"~x\t\tváltoztatások megszakítása és kilépés az editorból\n"
+"~?\t\tez az üzenet\n"
+".\t\tha egyedül áll a sorban befejezi a bevitelt\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: érvénytelen levélszám.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Levél befejezése egyetlen '.'-ot tartalmazó sorral)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "Nincs postafiók.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Levél tartalom:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(tovább)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "hiányzó fájlnév.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Nincsenek sorok a levélben.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr "Hibás IDN a következõben: %s '%s'\n"
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "s%: ismeretlen editor parancs (~? súgó)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "%s ideiglenes postafiók nem hozható létre"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "nem lehet írni a(z) %s ideiglenes postafiókba"
+
+#: editmsg.c:101
+#, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "nem lehet levágni a(z) %s ideiglenes postafiókból"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "A levélfájl üres!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "A levél nem lett módosítva!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "A(z) %s levélfájl üres"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Nem lehet hozzáfûzni a(z) %s postafiókhoz"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Hiba a(z) %s ideiglenes fájl mentésekor"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Jelzõ beállítása"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Jelzõ törlése"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr "[-- Hiba:  Egy Többrészes/Alternatív rész sem jeleníthetõ meg! --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Melléklet #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Típus: %s/%s, Kódolás: %s, Méret: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Automatikus megjelenítés a(z) %s segítségével --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Megjelenítõ parancs indítása: %s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- Nem futtatható: %s --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- A(z) %s hiba kimenete --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- Hiba: az üzenetnek/külsõ-törzsének nincs elérési-típus paramétere --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Ez a %s/%s melléklet "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(mérete %s bájt)"
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr " törölve lett --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- %s-on --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- név: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- A %s/%s melléklet nincs beágyazva, --]\n"
+
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+"[-- és a jelzett külsõ forrás --]\n"
+"[-- megszûnt. --]\n"
+
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr "[-- és a jelzett elérési-típus, %s nincs támogatva --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Hiba: a többrészes/aláírt részhez nincs protokoll megadva."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Hiba: a többrészes/kódolt rész protokoll paramétere hiányzik!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Nem lehet megnyitni átmeneti fájlt!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s nincs támogatva "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(E rész megjelenítéséhez használja a(z) '%s'-t)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "(a mellélet megtekintéshez billentyû lenyomás szükséges!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: nem lehet csatolni a fájlt"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "HIBA: kérlek jelezd ezt a hibát a fejlesztõknek"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<ISMERETLEN>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Alap billentyûkombinációk:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Billentyûkombináció nélküli parancsok:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Súgó: %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: Nem lehet 'unhook *'-ot végrehajtani hook parancsból."
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "hozzárendelés törlése: ismeretlen hozzárendelési típus: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: %s-t nem lehet törölni a következõbõl: %s."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "Egyetlen azonosító sem érhetõ el"
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Azonosítás (anonymous)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "Anonymous azonosítás nem sikerült."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Azonosítás (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "CRAM-MD5 azonosítás nem sikerült."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Azonosítás (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "GSSAPI azonosítás nem sikerült."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "A LOGIN parancsot letiltották ezen a szerveren."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Bejelentkezés..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "Sikertelen bejelentkezés."
+
+#: imap/auth_sasl.c:112
+#, fuzzy, c-format
+msgid "Authenticating (%s)..."
+msgstr "Azonosítás (APOP)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "SASL azonosítás nem sikerült."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "%s érvénytelen IMAP útvonal"
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "Névterek letöltése..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Postafiókok listájának letöltése..."
+
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "Nincs ilyen postafiók"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Postafiók létrehozása: "
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "A postafióknak nevet kell adni."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Postafiók létrehozva."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "Postafiók lezárva"
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Végzetes hiba.  Az üzenetszámláló nincs szinkronban."
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "%s kapcsolat lezárása..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Ez az IMAP kiszolgáló nagyon régi. A Mutt nem tud együttmûködni vele."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "Biztonságos TLS kapcsolat?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "Nem lehetett megtárgyalni a TLS kapcsolatot"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "%s választása..."
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "Hiba a postafiók megnyitásaor"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Ezen a szerveren az IMAP postafiókokhoz nem lehet hozzáfûzni"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "%s létrehozása?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "IMAP kapcsolat lezárása..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "%d levél megjelölése töröltnek..."
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "Sikertelen törlés"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Állapotjelzõk mentése... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Levelek törlése a szerverrõl..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbox: EXPUNGE sikertelen"
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "Sikertelen CLOSE"
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "Hibás postafiók név"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "%s felírása..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "%s leírása..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "Nem lehet a fejléceket letölteni ezen verziójú IMAP szerverrõl"
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "Nem lehet a %s átmeneti fájlt létrehozni"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Levélfejlécek letöltése... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Levél letöltése..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr ""
+"A levelek tartalomjegyzéke hibás. Próbáld megnyitni újra a postafiókot."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Levél feltöltése..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "%d levél másolása a %s postafiókba..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "%d levél másolása %s-ba ..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "Folytatod?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "címjegyzék: nincs cím"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr "Figyelmeztetés: Hibás IDN '%s' a '%s' álnévben.\n"
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "érvénytelen mezõ a fejlécben"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: ismeretlen rendezési mód"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): hibás reguláris kifejezés: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: ismeretlen változó"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "\"reset\"-nél nem adható meg elõtag"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "\"reset\"-nél nem adható meg érték"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s beállítva"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s beállítása törölve"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: érvénytelen postafiók típus"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: érvénytelen érték"
+
+#: init.c:1312
+#, fuzzy, c-format
+msgid "%s: Unknown type."
+msgstr "%s: ismeretlen típus"
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: ismeretlen típus"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "%s nem olvasható: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s nem egy hagyományos fájl."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Hiba a %s-ban, sor %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: hiba a %s fájlban"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: az olvasás megszakadt, a %s fájlban túl sok a hiba"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: hiba a %s-nál"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: túl sok paraméter"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: ismeretlen parancs"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Hibás parancssor: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "meghatározhatatlan felhasználói könyvtár"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "meghatározhatatlan felhasználónév"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Végtelen ciklus a makróban."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "A billentyûhöz nincs funkció rendelve."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "A billentyûhöz nincs funkció rendelve. A súgóhoz nyomd meg a '%s'-t."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: túl sok paraméter"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: nincs ilyen menü"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "üres billentyûzet-szekvencia"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: túl sok paraméter"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: ismeretlen funkció"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: üres billentyûzet-szekvencia"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: túl sok paraméter"
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: nincs paraméter"
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s: nincs ilyen funkció"
+
+#: keymap.c:912
+msgid "Enter keys (^G to abort): "
+msgstr "Add meg a kulcsokat (^G megszakítás): "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr "Karakter = %s, Oktális = %o, Decimális = %d"
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "üres mûvelet"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "melléklet megtekintése mailcap segítségével"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "melléklet megtekintése szövegként"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "További részek mutatása/elrejtése"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "ugrás az oldal aljára"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "levél újraküldése egy másik felhasználónak"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "válassz egy új fájlt ebben a könyvtárban"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "fájl megtekintése"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "kijelölt fájl nevének mutatása"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "aktuális postafiók felírása (csak IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "aktuális postafiók leírása (csak IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "váltás az összes/felírt postafiók nézetek között (csak IMAP)"
+
+#: keymap_alldefs.h:18
+msgid "list mailboxes with new mail"
+msgstr "új levelet tartalmazó postafiókok"
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "könyvtár váltás"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "új levél keresése a postafiókokban"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "fájl(ok) csatolása ezen üzenethez"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "üzenet(ek) csatolása ezen üzenethez"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "Rejtett másolatot kap (BCC) lista szerkesztése"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "Másolatot kap lista (CC) szerkesztése"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "melléklet-leírás szerkesztése"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "melléklet átviteli-kódolás szerkesztése"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "adj meg egy fájlnevet, ahova a levél másolatát elmentem"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "csatolandó fájl szerkesztése"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "feladó mezõ szerkesztése"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "üzenet szerkesztése fejlécekkel együtt"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "üzenet szerkesztése"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "melléklet szerkesztése a mailcap bejegyzés használatával"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "Válaszcím szerkesztése"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "levél tárgyának szerkesztése"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "Címzett lista (TO) szerkesztése"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "új postafiók létrehozása (csak IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "melléklet tartalom-típusának szerkesztése"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "ideiglenes másolat készítése a mellékletrõl"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "levél ellenõrzése ispell-el"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "új melléklet összeállítása a mailcap bejegyzéssel segítségével"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "ezen melléklet újrakódolása"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "üzenet elmentése késõbbi küldéshez"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "csatolt fájl átnevezése/mozgatása"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "üzenet elküldése"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "váltás beágyazás/csatolás között"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "fájl törlése/meghagyása küldés után"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "melléklet kódolási információinak frissítése"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "üzenet írása postafiókba"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "üzenet másolása fájlba/postafiókba"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "álnév létrehozása a feladóhoz"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "lapozás a képernyõ aljára"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "lapozás a képernyõ közepére"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "lapozás a képernyõ tetejére"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "visszafejtett (sima szöveges) másolat készítése"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "visszafejtett (sima szöveges) másolat készítése és törlés"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "aktuális bejegyzés törlése"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "aktuális postafiók törlése (csak IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "témarész összes üzenetének törlése"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "téma összes üzenetének törlése"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "a feladó teljes címének mutatása"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "üzenet megjelenítése és a teljes fejléc ki/bekapcsolása"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "üzenet megjelenítése"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "nyers üzenet szerkesztése"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "a kurzor elõtti karakter törlése"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "kurzor mozgatása egy karakterrel balra"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "kurzor mozgatása a szó elejére"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "ugrás a sor elejére"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "bejövõ postafiókok körbejárása"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "teljes fájlnév vagy álnév"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "teljes cím lekérdezéssel"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "kurzoron álló karakter törlése"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "ugrás a sor végére"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "kurzor mozgatása egy karakterrel jobbra"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "kurzor mozgatása a szó végére"
+
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr "lapozás lefelé az elõzményekben"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "lapozás felfelé az elõzményekben"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "karakterek törlése a sor végéig"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "karakterek törlése a szó végéig"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "karakter törlése a sorban"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "a kurzor elõtti szó törlése"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "a következõ kulcs idézése"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "az elõzõ és az aktuális karakter cseréje"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "szó nagy kezdõbetûssé alakítása"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "szó kisbetûssé alakítása"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "szó nagybetûssé alakítása"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "adj meg egy muttrc parancsot"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "adj meg egy fájlmaszkot"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "kilépés ebbõl a menübõl"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "melléklet szûrése egy shell parancson keresztül"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "ugrás az elsõ bejegyzésre"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "üzenet 'fontos' jelzõjének állítása"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "üzenet továbbítása kommentekkel"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "aktuális bejegyzés kijelölése"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "válasz az összes címzettnek"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "fél oldal lapozás lefelé"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "fél oldal lapozás felfelé"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "ez a képernyõ"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "ugrás sorszámra"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "ugrás az utolsó bejegyzésre"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "válasz a megadott levelezõlistára"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "makró végrehajtása"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "új levél szerkesztése"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "más postafiók megnyitása"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "más postafiók megnyitása csak olvasásra"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "levél-állapotjelzõ törlése"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "mintára illeszkedõ levelek törlése"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "kényszerített levélletöltés az IMAP kiszolgálóról"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "levelek törlése POP kiszolgálóról"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "ugrás az elsõ levélre"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "ugrás az utolsó levélre"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "csak a mintára illeszkedõ levelek mutatása"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "ugrás a következõ új levélre"
+
+#: keymap_alldefs.h:113
+msgid "jump to the next new or unread message"
+msgstr "ugrás a következõ új vagy olvasatlan levélre"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "ugrás a következõ témarészre"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "ugrás a következõ témára"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "ugrás a következõ visszaállított levélre"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "ugrás a következõ olvasatlan levélre"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "ugrás a levél elõzményére ebben a témában"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "ugrás az elõzõ témára"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "ugrás az elõzõ témarészre"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "ugrás az elõzõ visszaállított levélre"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "ugrás az elõzõ új levélre"
+
+#: keymap_alldefs.h:123
+msgid "jump to the previous new or unread message"
+msgstr "ugrás az elõzõ új vagy olvasatlan levélre"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "ugrás az elõzõ olvasatlan levélre"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "téma jelölése olvasottnak"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "témarész jelölése olvasottnak"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "levél-állapotjelzõ beállítása"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "mentés postafiókba"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "levelek kijelölése mintára illesztéssel"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "levelek visszaállítása mintára illesztéssel"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "kijelölés megszüntetése mintára illesztéssel"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "mozgatás az oldal közepére"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "mozgatás a következõ bejegyzésre"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "mozgás egy sorral lejjebb"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "ugrás a következõ oldalra"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "ugrás az üzenet aljára"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "idézett szöveg mutatása/elrejtése"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "idézett szöveg átlépése"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "ugrás az üzenet tetejére"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "üzenet/melléklet átadása csövön shell parancsnak"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "ugrás az elõzõ bejegyzésre"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "mozgás egy sorral feljebb"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "ugrás az elõzõ oldalra"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "bejegyzés nyomtatása"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "címek lekérdezése külsõ program segítségével"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "új lekérdezés eredményének hozzáfûzése az eddigiekhez"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "változások mentése és kilépés"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "elhalasztott levél újrahívása"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "képernyõ törlése és újrarajzolása"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "(belsõ)"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "válasz a levélre"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "levél sablonként használata egy új levélhez"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "levél/melléklet mentése fájlba"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "reguláris kifejezés keresése"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "reguláris kifejezés keresése visszafelé"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "keresés tovább"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "keresés visszafelé"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "keresett minta színezése ki/be"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "parancs végrehajtása rész-shellben"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "üzenetek rendezése"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "üzenetek rendezése fordított sorrendben"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "bejegyzés megjelölése"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "csoportos mûvelet végrehajtás a kijelölt üzenetekre"
+
+#: keymap_alldefs.h:164
+#, fuzzy
+msgid "apply next function ONLY to tagged messages"
+msgstr "csoportos mûvelet végrehajtás a kijelölt üzenetekre"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "témarész megjelölése"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "téma megjelölése"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "levél 'új' jelzõjének állítása"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "a postafiók újraírásának ki/bekapcsolása"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "váltás a csak postafiókok/összes fájl böngészése között"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "ugrás az oldal tetejére"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "aktuális bejegyzés visszaállítása"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "a téma összes levelének visszaállítása"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "a témarész összes levelének visszaállítása"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "a Mutt verziójának és dátumának megjelenítése"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "melléklet mutatása mailcap bejegyzés használatával, ha szükséges"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "MIME mellékletek mutatása"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr "billentyûleütés kódjának mutatása"
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "aktuális szûrõminta mutatása"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "téma kinyitása/bezárása"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "összes téma kinyitása/bezárása"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "PGP nyilvános kulcs csatolása"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "PGP paraméterek mutatása"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "PGP nyilvános kulcs elküldése"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "PGP nyilvános kulcs ellenõrzése"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "a kulcstulajdonos azonosítójának megtekintése"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "klasszikus php keresése"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "Összeállított lánc elfogadása"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "Újraküldõ hozzáfûzése a lánchoz"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "Újraküldõ beszúrása a láncba"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "Újraküldõ törlése a láncból"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "A lánc elõzõ elemének kijelölése"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "A lánc következõ elemének kijelölése"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "üzenet küldése egy mixmaster újraküldõ láncon keresztül"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "visszafejtett másolat készítése és törlés"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "visszafejtett másolat készítése"
+
+#: keymap_alldefs.h:196
+msgid "wipe passphrase(s) from memory"
+msgstr "jelszó törlése a memóriából"
+
+#: keymap_alldefs.h:197
+msgid "extract supported public keys"
+msgstr "támogatott nyilvános kulcsok kibontása"
+
+#: keymap_alldefs.h:198
+msgid "show S/MIME options"
+msgstr "S/MIME opciók mutatása"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Elfogyott a memória!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"A fejlesztõkkel a <mutt-dev@mutt.org> címen veheted fel a kapcsolatot.\n"
+"Hiba jelentéséhez kérlek használd a flea(1) programot.\n"
+
+#: main.c:50
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins és sokan mások.\n"
+"A Mutt-ra SEMMIFÉLE GARANCIA NINCS; a részletekért írd be: `mutt -vv'.\n"
+"A Mutt szabad szoftver, és terjesztheted az alábbi feltételek\n"
+"szerint; írd be a `mutt -vv'-t a részletekért.\n"
+
+#: main.c:56
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"Sokan mások (akik itt nincsenek felsorolva) programrészekkel,\n"
+"javításokkal, ötlettekkel járultak hozzá a Mutt-hoz.\n"
+"\n"
+"    Ez a program szabad szoftver; terjesztheted és/vagy módosíthatod\n"
+"    a Szabad Szoftver Alapítvány által kiadott GNU General Public License\n"
+"    (a license második, vagy annál késõbbi verziójának) feltételei szerint.\n"
+"\n"
+"    Ezt a programot abban a szellemben terjesztjük, hogy hasznos,\n"
+"    de NINCS SEMMIFÉLE GARANCIA; nincs burkolt garancia a FORGALOMKÉPESSÉG\n"
+"    vagy a HELYESSÉG SZAVATOSSÁGÁRA EGY SAJÁTSÁGOS HASZNÁLATKOR.\n"
+"    Olvasd el a GNU General Public License-t a további információkért.\n"
+"\n"
+"    Ezzel a programmal meg kellett kapnod a GNU General Public License\n"
+"    másolatát; ha nem, írj a Szabad Szoftver Alapítványnak: Free Software\n"
+"    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\n"
+
+#: main.c:94
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"használat:\n"
+"     mutt [ -nRyzZ ] [ -e <par.> ] [ -F <fájl> ] [ -m <típus> ] [ -f "
+"<fájl> ]\n"
+"     mutt [ -nR ] [ -e <par.> ] [ -F <fájl> ] -Q <kérd.> [ -Q <kérd.> ] "
+"[...]\n"
+"     mutt [ -nR ] [ -e <par.> ] [ -F <fájl> ] -A <álnév> [ -A <álnév> ] "
+"[...]\n"
+"     mutt [ -nx ] [ -e <par.> ] [ -a <fájl> ] [ -F <fájl> ] [ -H <fájl> ]\n"
+"\t[ -i <fájl> ] [ -s <tárgy> ] [ -b <címek> ] [ -c <címek> ] <címek>\n"
+"\t[ ... ]\n"
+"     mutt [ -n ] [ -e <par.> ] [ -F <fájl> ] -p\n"
+"     mutt -v[v]\n"
+"\n"
+"paraméterek:\n"
+"  -A <álnév>\trövid név kifejtése\n"
+"  -a <fájl>\tfájl csatolása a levélhez\n"
+"  -b <cím>\trejtett másolatot (BCC) küld a megadott címre\n"
+"  -c <cím>\tmásolatot (CC) küld a megadott címre\n"
+"  -e <parancs>\tmegadott parancs végrehajtása inicializálás után\n"
+"  -f <fájl>\tbetöltendõ levelesláda megadása\n"
+"  -F <fájl>\talternatív muttrc fájl használata\n"
+"  -H <fájl>\tvázlat (draft) fájl megadása, amibõl a fejlécet és\n"
+"\t\ta törzset kell beolvasni\n"
+"  -i <fájl>\tválasz esetén a Mutt beleteszi ezt a fájlt a válaszba\n"
+"  -m <típus>\taz alapértelmezett postafiók típusának megadása\n"
+"  -n\t\ta Mutt nem fogja beolvasni a rendszerre vonatkozó Muttrc-t\n"
+"  -p\t\telhalasztott levél visszahívása\n"
+"  -Q <változó>\tkonfigurációs beállítása lekérdezése\n"
+"  -R\t\tpostafiók megnyitása csak olvasható módban\n"
+"  -s <tárgy>\ttárgy megadása (idézõjelek közé kell tenni, ha van benne "
+"szóköz)\n"
+"  -v\t\tverziószám és fordítási opciók mutatása\n"
+"  -x\t\tmailx küldés szimulálása\n"
+"  -y\t\tpostafiók megadása a `mailboxes' listából\n"
+"  -z\t\tkilép rögtön, ha nincs új levél a postafiókban\n"
+"  -Z\t\tmegnyitja az elsõ olyan postafiókot, amiben új levél van (ha nincs, "
+"kilép)\n"
+"  -h\t\tkiírja ezt az üzenetet"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Fordítási opciók:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Hiba a terminál inicializálásakor."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Hibakövetés szintje: %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr ""
+"A HIBAKÖVETÉS nem volt engedélyezve fordításkor.  Figyelmen kívül hagyva.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s nem létezik. Létrehozzam?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "Nem tudom létrehozni %s: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Nincs címzett megadva.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: nem tudom csatolni a fájlt.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Nincs új levél egyik postafiókban sem."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Nincs bejövõ postafiók megadva."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "A postafiók üres."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "%s olvasása... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "A postafiók megsérült!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "A postafiók megsérült!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Végzetes hiba!  A postafiókot nem lehet újra megnyitni!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Nem tudom zárolni a postafiókot!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+"sync: mbox megváltozott, de nincs módosított levél! (jelentsd ezt a hibát)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Levelek írása... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "Változások mentése..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Írás nem sikerült!  Részleges postafiókot elmentettem a(z) %s fájlba"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "Nem lehetett újra megnyitni a postafiókot!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Postafiók újra megnyitása..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Ugrás: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Érvénytelen indexszám."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Nincsenek bejegyzések."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Nem lehet tovább lefelé scrollozni."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Nem lehet tovább felfelé scrollozni."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Ez az utolsó oldal."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Ez az elsõ oldal."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "Az elsõ bejegyzés látható."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "Az utolsó bejegyzés látható."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Az utolsó bejegyzésen vagy."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Az elsõ bejegyzésen vagy."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Keresés: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Keresés visszafelé: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Nincs keresési minta."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Nem található."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "Nincsenek kijelölt bejegyzések."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "A keresés nincs megírva ehhez a menühöz."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "Az ugrás funkció nincs megírva ehhez a menühöz."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Kijelölés nem támogatott."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "%s olvasása... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr "maildir_commit_message (): a fájlidõ beállítása nem sikerült"
+
+#: muttlib.c:835
+#, fuzzy
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "A fájl egy könyvtár, elmentsem ebbe a könyvtárba?"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "A fájl egy könyvtár, elmentsem ebbe a könyvtárba?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Könyvtárbeli fájlok: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "A fájl létezik, (f)elülírjam, (h)ozzáfûzzem, vagy (m)égsem?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "fhm"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "Levelet nem lehet menteni POP postafiókba."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "A %s nem postafiók!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Levelek hozzáfûzése %s postafiókhoz?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "%s kapcsolat lezárva"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL nem elérhetõ."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "A \"preconnect\" parancs nem sikerült."
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Hiba a %s kapcsolat közben (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr "Hibás IDN \"%s\"."
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "%s feloldása..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "A \"%s\" host nem található."
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Kapcsolódás %s-hez..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "%s-hoz nem lehet kapcsolódni %s (%s)."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "Nem találtam elég entrópiát ezen a rendszeren"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "Entrópiát szerzek a véletlenszámgenerátorhoz: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s jogai nem biztonságosak!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "Entrópia hiány miatt az SSL letiltva"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "I/O hiba"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "ismeretlen protokoll hiba"
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "SSL sikertelen: %s"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "A szervertõl nem lehet tanusítványt kapni"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "SSL kapcsolódás a(z) %s használatával (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "Ismeretlen"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[nem kiszámítható]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[érvénytelen dátum]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "A szerver tanúsítványa még nem érvényes"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "A szerver tanúsítványa lejárt"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Akire a tanusítvány vonatkozik:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "A tanusítványt kiállította:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Ez a tanúsítvány érvényes"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   kezdete: %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "     vége: %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Ujjlenyomat: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "SSL Tanúsítvány ellenõrzés"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(v)isszautasít, (e)gyszer elfogad, (m)indig elfogad"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "vem"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(v)isszautasít, (e)gyszer elfogad"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "ve"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Kilép  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Figyelmeztetés: A tanúsítvány nem menthetõ"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "A tanúsítvány elmentve"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "A lock számláló túlhaladt, eltávolítsam a(z) %s lockfájlt?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "Nem lehet dotlock-olni: %s.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "Lejárt a maximális várakozási idõ az fcntl lock-ra!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Várakozás az fcntl lock-ra... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "Lejárt a maximális várakozási idõ az flock lock-ra!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Várakozás az flock-ra... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "Nem lehet lockolni %s\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "%s olvasása..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "%s írása..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "A %s postafiókot nem tudtam szinkronizálni!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Az olvasott leveleket mozgassam a %s postafiókba?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Töröljem a %d töröltnek jelölt levelet?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Töröljem a %d töröltnek jelölt levelet?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Olvasott levelek mozgatása a %s postafiókba..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "Postafiók változatlan."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d megtartva, %d átmozgatva, %d törölve."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d megtartva, %d törölve."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr " Nyomd meg a '%s' gombot az írás ki/bekapcsolásához"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "Használd a 'toggle-write'-ot az írás újra engedélyezéséhez!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "A postafiókot megjelöltem nem írhatónak. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "A postafiók ellenõrizve."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Nem lehet írni a levelet"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "Nem elérhetõ ebben a menüben."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "ElõzõO"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "KövO"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Melléklet"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Köv."
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "Ez az üzenet vége."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "Ez az üzenet eleje."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Keresés visszafelé: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Keresés: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "A súgó már meg van jelenítve."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "Nincs több idézett szöveg."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "Nincs nem idézett szöveg az idézett szöveg után."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "a többrészes üzenetnek nincs határoló paramétere!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Hiba a kifejezésben: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Érvénytelen a hónap napja: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Érvénytelen hónap: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "Érvénytelen viszonylagos hónap: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "hiba a kifejezésben"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "hiba a mintában: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: érvénytelen parancs"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: nincs támogatva ebben a módban"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "hiányzó paraméter"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "nem megegyezõ zárójelek: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "üres minta"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "hiba: ismeretlen operandus %d (jelentsd ezt a hibát)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Keresési minta fordítása..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Parancs végrehajtása az egyezõ leveleken..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "Nincs a kritériumnak megfelelõ levél."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "A keresõ elérte a végét, és nem talált egyezést"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "A keresõ elérte az elejét, és nem talált egyezést"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Keresés megszakítva."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "PGP jelszó elfelejtve."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Hiba: nem lehet létrehozni a PGP alfolyamatot! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- PGP kimenet vége --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PGP LEVÉL KEZDÕDIK --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- PGP NYILVÁNOS KULCS KEZDÕDIK --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PGP ALÁÍRT LEVÉL KEZDÕDIK --]\n"
+"\n"
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- PGP LEVÉL VÉGE --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- PGP NYILVÁNOS KULCS VÉGE --]\n"
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- PGP ALÁÍRT LEVÉL VÉGE --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Hiba: nem található a PGP levél kezdete! --]\n"
+"\n"
+
+#: pgp.c:662
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Belsõ hiba. Kérlek értesítsd <roessler@does-not-exist.org>-t."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Hiba: nem lehet a PGP alfolyamatot létrehozni! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Hiba: hibás PGP/MIME levél! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Hiba: nem lehet létrehozni az ideiglenes fájlt! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- A következõ adat PGP/MIME-vel titkosított --]\n"
+"\n"
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- PGP/MIME titkosított adat vége --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "PGP alfolyamatot nem lehet megnyitni"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "Használjam a kulcsID = \"%s\" ehhez: %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "Add meg a kulcsID-t %s-hoz: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "PGP-t nem tudom meghívni"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "PGP kulcs leszedése..."
+
+#: pgpkey.c:486
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "Minden illeszkedõ kulcs lejárt/letiltott/visszavont."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Választ  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Kulcs ellenõrzése  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "PGP kulcsok egyeznek <%s>."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "PGP kulcsok egyeznek \"%s\"."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "Nem lehet a /dev/null-t megnyitni"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Nem lehet ideiglenes fájlt létrehozni"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "Kulcs ID: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "Ez a kulcs nem használható: lejárt/letiltott/visszahívott."
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "ID lejárt/letiltott/visszavont."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "ID-nek nincs meghatározva az érvényessége."
+
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "Az ID nem érvényes."
+
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "Az ID csak részlegesen érvényes."
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s Valóban szeretnéd használni ezt a kulcsot?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Kérlek írd be a kulcs ID-t: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "pgp hívása..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "PGP Kulcs %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Egyezõ \"%s\" kulcsok keresése..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "A TOP parancsot nem támogatja a szerver."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "Nem lehet írni az ideiglenes fájlba!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "Az UIDL parancsot nem támogatja a szerver."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "%s érvénytelen POP útvonal"
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "Üzenetek listájának letöltése..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "Nem lehet a levelet beleírni az ideiglenes fájlba!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "Új levelek letöltése..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "POP szerver nincs megadva."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "Nincs új levél a POP postafiókban."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "Levelek törlése a szerverrõl?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Új levelek olvasása (%d bytes)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "Hiba a postafiók írásakor!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d/%d levél beolvasva]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "A szerver lezárta a kapcsolatot!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Azonosítás (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Azonosítás (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "APOP azonosítás sikertelen."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "A USER parancsot nem ismeri ez a kiszolgáló."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "Nem lehet a leveleket a szerveren hagyni."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "Hiba a szerverre való csatlakozás közben: %s"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "POP kapcsolat lezárása..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Levelek tartalomjegyzékének ellenõrzése..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "A kapcsolatot elveszett. Újracsatlakozik a POP kiszolgálóhoz?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Elhalasztott levelek"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "Nincsenek elhalasztott levelek."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "Érvénytelen PGP fejléc"
+
+#: postpone.c:479
+msgid "Illegal S/MIME header"
+msgstr "Érvénytelen S/MIME fejléc"
+
+#: postpone.c:554
+msgid "Decryption failed."
+msgstr "Visszafejtés sikertelen."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Új lekérdezés"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Álnév"
+
+#: query.c:48
+msgid "Search"
+msgstr "Keresés"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Várakozás a válaszra..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "A lekérdezés parancs nincs megadva."
+
+#: query.c:286
+msgid "Query"
+msgstr "Lekérdezés"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Lekérdezés: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "'%s' lekérdezése"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Átküld"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Nyomtat"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Mentés..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "A melléklet elmentve."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "FIGYELMEZTETÉS!  %s-t felülírására készülsz, folytatod?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Melléklet szûrve."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Szûrõn keresztül: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Átküld: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "Nem tudom hogyan kell nyomtatni a(z) %s csatolást!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Kinyomtassam a kijelölt melléklet(ek)et?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Kinyomtassam a mellékletet?"
+
+#: recvattach.c:938
+msgid "Can't decrypt encrypted message!"
+msgstr "Nem tudtam visszafejteni a titkosított üzenetet!"
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Mellékletek"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "Nincsenek mutatható részek!"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "POP kiszolgálón nem lehet mellékletet törölni."
+
+#: recvattach.c:1056
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "Mellékletek törlése kódolt üzenetbõl nem támogatott."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Többrészes csatolásoknál csak a törlés támogatott."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Csak levél/rfc222 részeket lehet visszaküldeni."
+
+#: recvcmd.c:213
+msgid "Error bouncing message!"
+msgstr "Hiba a levél újraküldésekor."
+
+#: recvcmd.c:213
+msgid "Error bouncing messages!"
+msgstr "Hiba a levelek újraküldésekor."
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Nem tudtam megnyitni a(z) %s ideiglenes fájlt."
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "Továbbítás mellékletként?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+"Nem lehet kibontani minden kijelölt mellékletet. A többit MIME kódolva "
+"küldöd?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Továbbküldés MIME kódolással?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "Nem tudtam létrehozni: %s."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Nem található egyetlen kijelölt levél sem."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "Nincs levelezõlista!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+"Nem tudom az összes kijelölt mellékletet visszaalakítani.  A többit MIME-"
+"kódolod?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Hozzáfûzés"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Beszúrás"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Törlés"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "OK"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "Nem lehet beolvasni a mixmaster type2.list-jét!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Válaszd ki az újraküldõ láncot."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "Hiba: %s-t nem lehet használni a lánc utolsó újraküldõjeként."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "A Mixmaster lánc maximálisan %d elembõl állhat."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "Az újraküldõ lánc már üres."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "Már ki van választva a lánc elsõ eleme."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "Már ki van választva a lánc utolsó eleme."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "A Mixmaster nem fogadja el a Cc vagy a Bcc fejléceket."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr ""
+"Kérlek állítsd be a hostname változót a megfelelõ értékre, ha mixmastert "
+"használsz!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Hiba a levél elküldésekor, a gyermek folyamat kilépett: %d.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Hiba a levél elküldésekor."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr ""
+"Nem megfelelõen formázott bejegyzés a(z) %s típushoz a(z) \"%s\" fájl %d. "
+"sorában"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Nincs mailcap útvonal megadva"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "mailcap bejegyzés a(z) %s típushoz nem található"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: túl kevés paraméter"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: túl sok paraméter"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Nincs tárgy megadva, megszakítod?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Nincs tárgy megadva, megszakítom."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Válasz a %s%s címre?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "Válasz a %s%s címre?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "Nincs látható, kijeölt levél!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Levél beillesztése a válaszba?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Idézett levél beillesztése..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "Nem tudtam az összes kért levelet beilleszteni!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "Továbbítás mellékletként?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Továbbított levél elõkészítése..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Elhalasztott levél újrahívása?"
+
+#: send.c:1336
+msgid "Edit forwarded message?"
+msgstr "Továbbított levél szerkesztése?"
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Megszakítod a nem módosított levelet?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Nem módosított levelet megszakítottam."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "A levél nem lett elküldve."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "A levél el lett halasztva."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Nincs címzett megadva!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Nem volt címzett megadva."
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Nincs tárgy, megszakítsam a küldést?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Nincs tárgy megadva."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Levél elküldése..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Nem tudtam a levelet elküldeni."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Levél elküldve."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Küldés a háttérben."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "Nem található határoló paraméter! [jelentsd ezt a hibát]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s többé nem létezik!"
+
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "%s nem egy hagyományos fájl."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "%s nem nyitható meg"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Hiba a levél elküldése közben, a gyermek folyamat kilépett: %d (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "A kézbesítõ folyamat kimenete"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr "Hibás IDN %s a resent-from mezõ elõkészítésekor"
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s...  Kilépés.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "%s-t kaptam...  Kilépek.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "%d jelzést kaptam...  Kilépek.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr "Megbízható    "
+
+#: smime.c:303
+msgid "Verified  "
+msgstr "Ellenõrzött   "
+
+#: smime.c:306
+msgid "Unverified"
+msgstr "Ellenõrizetlen"
+
+#: smime.c:309
+msgid "Expired   "
+msgstr "Lejárt        "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr "Visszavont    "
+
+#: smime.c:315
+msgid "Invalid   "
+msgstr "Érvénytelen   "
+
+#: smime.c:318
+msgid "Unknown   "
+msgstr "Ismeretlen    "
+
+#: smime.c:347
+msgid "Enter keyID: "
+msgstr "Add meg a kulcsID-t: "
+
+#: smime.c:370
+#, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "S/MIME kulcsok egyeznek \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr "ID %s ellenõrizetlen. Szeretnéd használni a következõhöz: %s ?"
+
+#: smime.c:523 smime.c:592
+#, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "ID %s (ellenõrizetlen!) használata ehhez: %s?"
+
+#: smime.c:526 smime.c:595
+#, c-format
+msgid "Use ID %s for %s ?"
+msgstr "ID %s használata ehhez: %s?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+"Figyelem: nem döntötted el, hogy megbízható-e az alábbi ID: %s. (billentyû)"
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr "Nem található (érvényes) tanúsítvány ehhez: %s"
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "Hiba: nem lehet létrehozni az OpenSSL alfolyamatot!"
+
+#: smime.c:1197
+msgid "no certfile"
+msgstr "nincs tanúsítványfájl"
+
+#: smime.c:1200
+msgid "no mbox"
+msgstr "nincs postafiók"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr "Nincs kimenet az OpenSSLtõl..."
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr "Figyelmeztetés: köztes tanúsítvány nem található."
+
+#: smime.c:1426
+msgid "Can't open OpenSSL subprocess!"
+msgstr "OpenSSL alfolyamatot nem lehet megnyitni!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr "Nincs kimenet az OpenSSLtõl..."
+
+#: smime.c:1629 smime.c:1751
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- OpenSSL kimenet vége --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Hiba: nem lehet létrehozni az OpenSSL alfolyamatot! --]\n"
+
+#: smime.c:1755
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr "[-- A következõ adat S/MIME-vel titkosított --]\n"
+
+#: smime.c:1758
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr "[-- A következõ adatok S/MIME-vel alá vannak írva --]\n"
+
+#: smime.c:1822
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- S/MIME titkosított adat vége. --]\n"
+
+#: smime.c:1824
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- S/MIME aláírt adat vége --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Postafiók rendezése..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "Nincs meg a rendezõ függvény! [kérlek jelentsd ezt a hibát]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(nincs postafiók)"
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "A nyitóüzenet nem látható a szûkített nézetben."
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "A nyitóüzenet nem áll rendelkezésre."
diff --git a/po/id.gmo b/po/id.gmo
new file mode 100644 (file)
index 0000000..05ca556
Binary files /dev/null and b/po/id.gmo differ
diff --git a/po/id.po b/po/id.po
new file mode 100644 (file)
index 0000000..7ffe28e
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,4316 @@
+# Ronny Haryanto <ronny-mutt-po-file@haryan.to>, 1999-2003
+#
+# http://www.linux.or.id
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 1.5.5.1i\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2003-11-11 10:30+0700\n"
+"Last-Translator: Ronny Haryanto <ronny-mutt-po-file@haryan.to>\n"
+"Language-Team: Indonesia <web@linux.or.id>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 7bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "Nama user di %s: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "Password utk %s@%s: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Keluar"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Hapus"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Nggak jadi hapus"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Pilih"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Bantuan"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "Anda tidak punya kumpulan alias!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Kumpulan alias"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Alias sebagai: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "Anda telah punya alias dengan nama tersebut!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr "Peringatan: Nama alias ini mungkin tidak akan bekerja. Betulkan?"
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Alamat: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr "Error: IDN '%s' tidak benar."
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Nama lengkap: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] Sudah betul?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Simpan ke file: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Alias telah ditambahkan."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Tidak cocok dengan nametemplate, lanjutkan?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "'compose' di file mailcap membutuhkan %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "Gagal menjalankan \"%s\"!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Gagal membuka file untuk menge-parse headers."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Gagal membuka file untuk menghapus headers."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr ""
+"'compose' di file mailcap tidak ditemukan untuk %s, membuat file kosong."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "'Edit' di file mailcap membutuhkan %%s"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "'Edit' di file mailcap tidak ditemukan untuk %s"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "Tidak ada jenis yang cocok di file mailcap. Ditampilkan sebagai teks."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "Jenis MIME tidak didefinisikan. Tidak bisa melihat lampiran."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Tidak bisa membuat filter"
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Tidak bisa membuat filter"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "Gagal menulis!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Saya tidak tahu bagaimana mencetak itu!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Pindah dir"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Mask"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s bukan direktori."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Kotak surat [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Berlangganan [%s], File mask: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Direktori [%s], File mask: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Tidak bisa melampirkan sebuah direktori"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Tidak ada file yang sesuai dengan mask"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Pembuatan hanya didukung untuk kotak surat jenis IMAP."
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Penghapusan hanya didukung untuk kotak surat jenis IMAP."
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Yakin hapus kotak surat \"%s\"?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "Kotak surat telah dihapus."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "Kotak surat tidak dihapus."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Pindah dir ke: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Gagal membaca direktori."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "File Mask: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr ""
+"Urut terbalik berdasarkan (t)anggal, (a)bjad, (u)kuran atau (n)ggak diurut? "
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Urut berdasarkan (t)anggal, (a)bjad, (u)kuran atau (n)ggak diurut? "
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "taun"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Nama file baru: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Tidak bisa menampilkan sebuah direktori"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Gagal menampilkan file"
+
+#: buffy.c:442
+msgid "New mail in "
+msgstr "Surat baru di "
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: warna tidak didukung oleh term"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: tidak ada warna begitu"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: tidak ada objek begitu"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: perintah hanya untuk objek indeks"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: parameternya kurang"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Parameter tidak ditemukan"
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: parameternya kurang"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: parameternya kurang"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: tidak ada atribut begitu"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "parameternya kurang"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "parameternya terlalu banyak"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "warna default tidak didukung"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "Periksa tandatangan PGP?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Tidak bisa membuat file sementara!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Tidak bisa membuat tampilan filter"
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "Tidak bisa menyalin surat"
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr "Tanda tangan S/MIME berhasil diverifikasi."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr "Pemilik sertifikat S/MIME tidak sesuai dg pengirim."
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr "Tanda tangan S/MIME TIDAK berhasil diverifikasi."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "Tanda tangan PGP berhasil diverifikasi."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "Tanda tangan PGP TIDAK berhasil diverifikasi."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Perintah: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Bounce surat ke: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Bounce surat yang telah ditandai ke: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "Gagal menguraikan alamat!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr "IDN salah: '%s'"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Bounce surat ke %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Bounce surat-surat ke %s"
+
+#: commands.c:294 recvcmd.c:192
+msgid "Message not bounced."
+msgstr "Surat tidak dibounce."
+
+#: commands.c:294 recvcmd.c:192
+msgid "Messages not bounced."
+msgstr "Surat-surat tidak dibounce."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Surat telah dibounce."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Surat-surat telah dibounce."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "Tidak bisa membuat proses filter"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Pipe ke perintah: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "Perintah untuk mencetak belum didefinisikan."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "Cetak surat?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Cetak surat-surat yang ditandai?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "Surat telah dicetak"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Surat-surat telah dicetak"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "Surat tidak dapat dicetak"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "Surat-surat tidak dapat dicetak"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Urut terbalik tan(g)gal/d(a)ri/t(e)rima/(s)ubj/(k)e/(t)hread/(n)ggak urut/(u)"
+"kuran/n(i)lai? "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Urut tan(g)gal/d(a)ri/t(e)rima/(s)ubj/(k)e/(t)hread/(n)ggak urut/(u)kuran/n"
+"(i)lai? "
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "gaesktnui"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Perintah shell: "
+
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "Urai-simpan%s ke kotak surat"
+
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "Urai-salin%s ke kotak surat"
+
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "Dekripsi-simpan%s ke kotak surat"
+
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "Dekripsi-salin%s ke kotak surat"
+
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "Simpan%s ke kotak surat"
+
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "Salin%s ke kotak surat"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " telah ditandai"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Sedang menyalin ke %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "Ubah ke %s saat mengirim?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Content-Type diubah ke %s."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "Character set diubah ke %s; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "tidak melakukan konversi"
+
+#: commands.c:914
+msgid "converting"
+msgstr "melakukan konversi"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Tidak ada lampiran."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Kirim"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Batal"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Lampirkan file"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Ket"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Tandatangan, Enkrip"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Enkrip"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Tandatangan"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Polos"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " tandatangan sebagai: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<default>"
+
+#: compose.c:149
+msgid "Encrypt with: "
+msgstr "Enkrip dengan: "
+
+#: compose.c:165
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "PGP (e)nkrip, (t)andatangan, tandatangan (s)bg, ke(d)uanya, (b)atal? "
+
+#: compose.c:166
+msgid "esabf"
+msgstr "etsdb"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Tandatangani sebagai: "
+
+#: compose.c:227
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"S/MIME (e)nkrip, (t)andatangan, enkrip d(g), tandatangan (s)bg, ke(d)uanya, "
+"(b)atal? "
+
+#: compose.c:228
+msgid "eswabf"
+msgstr "etgsdb"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, atau (b)atal? "
+
+#: compose.c:238
+msgid "12345f"
+msgstr "12345b"
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] sudah tidak ada!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] telah diubah. Update encoding?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Lampiran"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr "Peringatan: IDN '%s' tidak benar."
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Tidak bisa menghapus satu-satunya lampiran."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr "IDN di \"%s\" tidak benar: '%s'"
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "Melampirkan file-file yang dipilih..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "Tidak bisa melampirkan %s!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Buka kotak surat untuk mengambil lampiran"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "Tidak ada surat di kotak tersebut."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Tandai surat-surat yang mau dilampirkan!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Tidak bisa dilampirkan!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "Peng-coding-an ulang hanya berpengaruh terhadap lampiran teks."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "Lampiran yg dipilih tidak akan dikonersi."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "Lampiran yg dipilih akan dikonversi."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Encoding tidak betul."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Simpan salinan dari surat ini?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Ganti nama ke: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "Tidak bisa stat %s: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "File baru: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Content-Type harus dalam format jenis-dasar/sub-jenis"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Content-Type %s tak dikenali"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Tidak bisa membuat file %s"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "Gagal membuat lampiran, nih..."
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Tunda surat ini?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Simpan surat ke kotak surat"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Menyimpan surat ke %s ..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "Surat telah disimpan."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr "S/MIME sudah dipilih. Bersihkan & lanjut ? "
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr "PGP sudah dipilih. Bersihkan & lanjut ? "
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr " (waktu skrg: %c)"
+
+#: crypt.c:71
+#, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- Keluaran dari %s%s --]\n"
+
+#: crypt.c:86
+msgid "Passphrase(s) forgotten."
+msgstr "Passphrase sudah dilupakan."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Masukkan passphrase PGP: "
+
+#: crypt.c:147
+msgid "Enter SMIME passphrase:"
+msgstr "Masukkan passphrase S/MIME: "
+
+#: crypt.c:192
+msgid "Create a traditional (inline) PGP message?"
+msgstr "Buat surat PGP traditional (inline)?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "Memanggil PGP..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr "Surat2 S/MIME tanpa hints pada isi tidak didukung."
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr "Mencoba mengekstrak kunci2 PGP...\n"
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr "Mencoba mengekstrak sertifikat2 S/MIME...\n"
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- Error: Struktur multipart/signed tidak konsisten! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- Error: Protokol multipart/signed %s tidak dikenal! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Warning: Tidak dapat mem-verifikasi tandatangan %s/%s. --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- Data berikut ini ditandatangani --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Warning: Tidak dapat menemukan tandatangan. --]\n"
+"\n"
+
+#: crypt.c:924
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Akhir data yang ditandatangani --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "ya"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "nggak"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Keluar dari Mutt?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "eh..eh.. napa nih?"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Tekan sembarang tombol untuk lanjut..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " ('?' utk lihat daftar): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Tidak ada kotak surat yang terbuka."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Tidak ada surat."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "Kotak surat hanya bisa dibaca."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "Fungsi ini tidak diperbolehkan pada mode pelampiran-surat"
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "Tidak ada surat yg bisa dilihat."
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "Kotak surat read-only, tidak bisa toggle write!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "Perubahan ke folder akan dilakukan sewaktu keluar dari folder."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Perubahan ke folder tidak akan dilakukan."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Keluar"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Simpan"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Surat"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Balas"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Grup"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr ""
+"Kotak surat diobok-obok oleh program lain. Tanda-tanda surat mungkin tidak "
+"tepat."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Surat baru di kotak ini."
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "Kotak surat diobok-obok oleh program lain."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Tidak ada surat yang ditandai."
+
+#: curs_main.c:653 menu.c:896
+msgid "Nothing to do."
+msgstr "Gak ngapa-ngapain."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Ke surat no: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "Parameter harus berupa nomer surat."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Surat itu tidak bisa dilihat."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Tidak ada nomer begitu."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Hapus surat-surat yang: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "Pola batas (limit pattern) tidak ditentukan."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr " Batas: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Hanya surat-surat yang: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Keluar dari Mutt?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Tandai surat-surat yang: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Tidak jadi hapus surat-surat yang: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Tidak jadi tandai surat-surat yang: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Buka kotak surat dengan mode read-only"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Buka kotak surat"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s bukan kotak surat."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Keluar dari Mutt tanpa menyimpan?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Anda sudah di surat yang terakhir."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Tidak ada surat yang tidak jadi dihapus."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Anda sudah di surat yang pertama."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "Pencarian kembali ke atas."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "Pencarian kembali ke bawah."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Tidak ada surat baru"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Tidak ada surat yang belum dibaca"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " di tampilan terbatas ini"
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "Tidak bisa mengubah tanda 'penting' di server POP."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Tidak ada thread lagi."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Anda di thread yang pertama."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "Tidak disetting untuk melakukan threading."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "Thread berisi surat yang belum dibaca."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "Tidak bisa menyunting surat di server POP"
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tmasukkan baris yang dimulai dengan ~\n"
+"~b users\ttambahkan users ke kolom Bcc:\n"
+"~c users\ttambahkan users ke kolom Cc:\n"
+"~f surat2\tsertakan surat2\n"
+"~F surat2\tsama seperti ~f, tapi juga menyertakan headers\n"
+"~h\t\tedit header surat\n"
+"~m surat2\tmenyertakan dan mengutip surat2\n"
+"~M surat2\tsama seperti ~m, tapi menyertakan headers\n"
+"~p\t\tcetak surat\n"
+"~q\t\ttulis surat dan keluar dari editor\n"
+"~r file\t\tselipkan file ke editor\n"
+"~t users\ttambahkan users ke kolom To:\n"
+"~u\t\tpanggil baris sebelumnya\n"
+"~v\t\tedit surat dengan editor $visual\n"
+"~w file\t\tsimpan surat ke file\n"
+"~x\t\tbatalkan perubahan dan keluar dari editor\n"
+"~?\t\tsurat ini\n"
+".\t\tdi satu baris sendiri menyelesaikan input\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: bukan nomer surat yang betul.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Akhiri surat dengan . di satu baris sendiri)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "Tidak ada kotak surat.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Surat berisi:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(lanjut)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "nama file tidak ditemukan.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Tidak ada sebaris pun di dalam surat.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr "IDN di %s tidak benar: '%s'\n"
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: perintah editor tidak dikenali (~? utk bantuan)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "Tidak bisa membuat kotak surat sementara: %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "Tidak bisa membuat kotak surat sementara: %s"
+
+#: editmsg.c:101
+#, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "tidak bisa memotong kotak surat sementara: %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "Surat kosong!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "Surat tidak diubah!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "Tidak bisa membuka file surat: %s"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Tidak bisa menambah ke kotak surat: %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Error. Menyimpan file sementara: %s"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Tandai"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Batal ditandai"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[-- Error: Tidak ada bagian Multipart/Alternative yg bisa ditampilkan! --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Lampiran #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Jenis: %s/%s, Encoding: %s, Ukuran: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Tampil-otomatis dengan %s --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Menjalankan perintah tampil-otomatis: %s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- Tidak bisa menjalankan %s. --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Stderr dari tampil-otomatis %s --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- Error:  message/external-body tidak punya parameter access-type --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Lampiran %s/%s ini "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(ukuran %s bytes) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "telah dihapus --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- pada %s --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- nama: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Lampiran %s/%s ini tidak disertakan, --]\n"
+
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+"[-- dan sumber eksternal yg disebutkan telah --]\n"
+"[-- kadaluwarsa. --]\n"
+
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr "[-- dan tipe akses %s tsb tidak didukung --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Error: multipart/signed tidak punya protokol."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Error: multipart/encrypted tidak punya parameter protokol!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Tidak bisa membuka file sementara!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s tidak didukung "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(gunakan '%s' untuk melihat bagian ini)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "(tombol untuk 'view-attachments' belum ditentukan!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: tidak bisa melampirkan file"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "ERROR: harap laporkan bug ini"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<GAK TAU>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Penentuan tombol generik:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Fungsi-fungsi yang belum ditentukan tombolnya:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Bantuan utk %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: Tidak dapat melakukan unhook * dari hook."
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: jenis tidak dikenali: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: Tidak dapat menghapus %s dari %s."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "Tidak ada pengauthentikasi yg bisa digunakan"
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Mengauthentikasi (anonim)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "Authentikasi anonim gagal."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Mengauthentikasi (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "Authentikasi CRAM-MD5 gagal."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Mengauthentikasi (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "Authentikasi GSSAPI gagal."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "LOGIN tidak diaktifkan di server ini."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Sedang login..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "Login gagal."
+
+#: imap/auth_sasl.c:112
+#, c-format
+msgid "Authenticating (%s)..."
+msgstr "Mengauthentikasi (%s)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "Authentikasi SASL gagal."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "%s bukan path IMAP yang valid"
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "Mencari namespaces..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Mengambil daftar kotak surat..."
+
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "Tidak ada folder itu"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Membuat kotak surat: "
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "Kotak surat harus punya nama."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Kotak surat telah dibuat."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "Kotak surat telah ditutup."
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Fatal error. Jumlah surat tidak konsisten dengan server!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "Menutup hubungan ke %s..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "IMAP server ini sudah kuno. Mutt tidak bisa menggunakannya."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr "Respons yg tdk diharapkan dari server: %s"
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "Gunakan hubungan aman dg TLS?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "Tidak dapat negosiasi hubungan TLS"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "Memilih %s..."
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "Error sewaktu membuka kotak surat"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Tidak dapat menambah ke kotak surat IMAP di server ini"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "Buat %s?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Menutup hubungan ke server IMAP..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "Menandai %d surat-surat \"dihapus\"..."
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "Penghapusan gagal"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Menyimpan tanda-tanda status surat... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Menghapus surat-surat di server..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbox: EXPUNGE (hapus) gagal"
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "CLOSE (penutupan) gagal."
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "Nama kotak surat yg buruk"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "Berlangganan ke %s..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "Berhenti langganan dari %s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "Tidak dapat mengambil header dari IMAP server versi ini."
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "Tidak bisa membuat file sementara %s"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Mengambil header surat... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Mengambil surat..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "Index dari surat tidak benar. Cobalah membuka kembali kotak surat tsb."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Meletakkan surat ..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "Menyalin %d surat ke %s..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "Menyalin surat %d ke %s..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "Lanjutkan?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "alias: tidak ada alamat email"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr "Peringatan: IDN '%s' di alias '%s' tidak benar.\n"
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "kolom header tidak dikenali"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: metoda pengurutan tidak dikenali"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): error pada regexp: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: variable tidak diketahui"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "prefix tidak diperbolehkan dengan reset"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "nilai tidak diperbolehkan dengan reset"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s hidup"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s mati"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: jenis kotak surat tidak dikenali"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: nilai tidak betul"
+
+#: init.c:1312
+#, c-format
+msgid "%s: Unknown type."
+msgstr "%s: Jenis tidak dikenali."
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: jenis tidak dikenali"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Tidak bisa stat %s: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s bukan file biasa."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Error di %s, baris %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: errors di %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: pembacaan dibatalkan sebab terlalu banyak error di %s"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: error pada %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: parameter terlalu banyak"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: perintah tidak dikenali"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Error di baris perintah: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "tidak bisa menentukan home direktori"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "tidak bisa menentukan username"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Loop macro terdeteksi."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Tombol itu tidak ditentukan untuk apa."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Tombol itu tidak ditentukan untuk apa. Tekan '%s' utk bantuan."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: parameter terlalu banyak"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: tidak ada menu begitu"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "urutan tombol kosong"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: parameter terlalu banyak"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: tidak ada fungsi begitu di map"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: urutan tombol kosong"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: parameter terlalu banyak"
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: tidak ada parameter"
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s: tidak ada fungsi begitu"
+
+#: keymap.c:912
+msgid "Enter keys (^G to abort): "
+msgstr "Masukkan kunci-kunci (^G utk batal): "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr "Kar = %s, Oktal = %o, Desimal = %d"
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "null operation"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr "akhir eksekusi bersyarat (noop)"
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "paksa menampilkan lampiran menggunakan mailcap"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "tampilkan lampiran sebagai teks"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "Tampilkan atau tidak sub-bagian"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "ke akhir halaman"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "kirim surat ke user lain"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "pilih file baru di direktori ini"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "tampilkan file"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "tampilkan nama file yang sedang dipilih"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "berlangganan ke kotak surat (untuk IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "berhenti langganan dari kotak surat (untuk IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "tampilkan semua kotak surat atau hanya yang langganan? (untuk IMAP)"
+
+#: keymap_alldefs.h:18
+msgid "list mailboxes with new mail"
+msgstr "tampilkan daftar kotak surat dengan surat baru"
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "pindah direktori"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "periksa kotak surat apakah ada surat baru"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "lampirkan file ke surat ini"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "lampirkan surat lain ke surat ini"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "edit daftar BCC"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "edit daftar CC"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "edit keterangan lampiran"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "edit transfer-encoding dari lampiran"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "masukkan nama file di mana salinan surat ini mau disimpan"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "edit file yang akan dilampirkan"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "edit kolom From"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "edit surat berikut dengan headers"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "edit surat"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "edit lampiran berdasarkan mailcap"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "edit kolom Reply-To"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "edit subjek dari surat ini"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "edit daftar TO"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "buat kotak surat baru (untuk IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "edit jenis isi (content-type) lampiran"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "ambil salinan sementara dari lampiran"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "jalankan ispell ke surat"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "buat lampiran berdasarkan mailcap"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "peng-coding-an ulang dari lampiran ini"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "simpan surat ini untuk dikirim nanti"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "ganti nama/pindahkan file lampiran"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "kirim suratnya"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "penampilan inline atau sebagai attachment"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "hapus atau tidak setelah suratnya dikirim"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "betulkan encoding info dari lampiran"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "simpan surat ke sebuah folder"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "simpan surat ke file/kotak surat"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "buat alias dari pengirim surat"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "pindahkan entry ke akhir layar"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "pindahkan entry ke tengah layar"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "pindahkan entry ke awal layar"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "buat salinan (text/plain) yang sudah di-decode"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "buat salinan (text/plain) yang sudah di-decode dan hapus"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "hapus entry"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "hapus kotak surat (untuk IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "hapus semua surat di subthread"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "hapus semua surat di thread"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "tampilkan alamat lengkap pengirim"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "tampilkan surat dan pilih penghapusan header"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "tampilkan surat"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "edit keseluruhan surat"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "hapus karakter di depan kursor"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "pindahkan kursor satu karakter ke kanan"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "ke awal kata"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "ke awal baris"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "cycle antara kotak surat yang menerima surat"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "lengkapi nama file atau alias"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "lengkapi alamat dengan query"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "hapus karakter di bawah kursor"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "ke akhir baris"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "pindahkan kursor satu karakter ke kanan"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "pindahkan kursor ke akhir kata"
+
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr "scroll daftar history ke bawah"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "scroll daftar history ke atas"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "hapus dari kursor sampai akhir baris"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "hapus dari kursor sampai akhir kata"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "hapus baris"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "hapus kata di depan kursor"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "kutip tombol yang akan ditekan berikut"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "tukar karakter di bawah kursor dg yg sebelumnya"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "ubah kata ke huruf kapital"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "ubah kata ke huruf kecil"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "ubah kata ke huruf besar"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "menjalankan perintah muttrc"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "menentukan file mask"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "keluar dari menu ini"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "mem-filter lampiran melalui perintah shell"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "ke entry pertama"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "menandai surat penting atau tidak ('important' flag)"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "forward surat dengan komentar"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "pilih entry"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "balas ke semua penerima"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "geser ke bawah setengah layar"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "geser ke atas setengah layar"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "layar ini"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "ke nomer indeks"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "ke entry terakhir"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "balas ke mailing list yang disebut"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "menjalankan macro"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "menulis surat baru"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "membuka folder lain"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "membuka folder lain dengan mode read-only"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "bersihkan suatu tanda status pada surat"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "hapus surat yang cocok dengan suatu kriteria"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "paksa mengambil surat dari server IMAP"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "mengambil surat dari server POP"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "ke surat pertama"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "ke surat terakhir"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "hanya tunjukkan surat yang cocok dengan suatu kriteria"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "ke surat berikutnya yang baru"
+
+#: keymap_alldefs.h:113
+msgid "jump to the next new or unread message"
+msgstr "ke surat berikutnya yang baru atau belum dibaca"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "ke subthread berikutnya"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "ke thread berikutnya"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "ke surat berikutnya yang tidak dihapus"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "ke surat berikutnya yang belum dibaca"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "loncat ke surat induk di thread ini"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "ke thread sebelumnya"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "ke subthread sebelumnya"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "ke surat sebelumnya yang tidak dihapus"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "ke surat sebelumnya yang baru"
+
+#: keymap_alldefs.h:123
+msgid "jump to the previous new or unread message"
+msgstr "ke surat sebelumnya yang baru atau belum dibaca"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "ke surat sebelumnya yang belum dibaca"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "tandai thread 'sudah dibaca'"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "tandai subthread 'sudah dibaca'"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "tandai status dari surat"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "simpan perubahan ke kotak surat"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "tandai surat-surat yang cocok dengan kriteria"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "tidak jadi menghapus surat-surat yang cocok dengan kriteria"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "tidak jadi menandai surat-surat yang cocok dengan kriteria"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "ke tengah halaman"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "ke entry berikutnya"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "geser ke bawah satu baris"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "ke halaman berikutnya"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "ke akhir surat"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "tampilkan atau tidak teks yang dikutip"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "lompati setelah teks yang dikutip"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "ke awal surat"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "pipe surat/lampiran ke perintah shell"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "ke entry sebelumnya"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "geser ke atas satu baris"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "ke halaman sebelumnya"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "cetak entry"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "gunakan program lain untuk mencari alamat"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "tambahkan hasil pencarian baru ke hasil yang sudah ada"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "simpan perubahan ke kotak surat dan keluar"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "lanjutkan surat yang ditunda"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "bersihkan layar dan redraw"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{jerohan}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "balas surat"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "gunakan surat sebagai template"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "simpan surat/lampiran ke suatu file"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "cari dengan regular expression"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "cari mundur dengan regular expression"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "cari yang cocok berikutnya"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "cari mundur yang cocok berikutnya"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "diwarnai atau tidak jika ketemu"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "jalankan perintah di subshell"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "urutkan surat-surat"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "urutkan terbalik surat-surat"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "tandai entry"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "lakukan fungsi berikutnya ke surat-surat yang ditandai"
+
+#: keymap_alldefs.h:164
+msgid "apply next function ONLY to tagged messages"
+msgstr "lakukan fungsi berikutnya HANYA ke surat-surat yang ditandai"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "tandai subthread"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "tandai thread"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "tandai atau tidak sebuah surat 'baru'"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "apakah kotak surat akan ditulis ulang"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "apakah menjelajahi kotak-kotak surat saja atau semua file"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "ke awal halaman"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "tidak jadi hapus entry"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "tidak jadi hapus semua surat di thread"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "tidak jadi hapus semua surat di subthread"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "tunjukkan versi dan tanggal dari Mutt"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "tampilkan lampiran berdasarkan mailcap jika perlu"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "tampilkan lampiran MIME"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr "tampilkan keycode untuk penekanan tombol"
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "tampilkan kriteria batas yang aktif"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "collapse/uncollapse thread"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "collapse/uncollapse semua thread"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "lampirkan PGP public key"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "tunjukan opsi2 PGP"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "kirim PGP public key lewat surat"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "periksa PGP public key"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "tampilkan user ID dari key"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "periksa pgp klasik"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "Terima rangkaian yang dibentuk"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "Tambahkan remailer ke rangkaian"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "Sisipkan remailer ke rangkaian"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "Hapus remailer dari rangkaian"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "Pilih elemen sebelumnya dalam rangkaian"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "Pilih elemen berikutnya dalam rangkaian"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "kirim surat melalui sebuah rangkaian remailer mixmaster"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "buat salinan yang sudah di-decrypt dan hapus"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "buat salinan yang sudah di-decrypt"
+
+#: keymap_alldefs.h:196
+msgid "wipe passphrase(s) from memory"
+msgstr "hapus passphrase dari memory"
+
+#: keymap_alldefs.h:197
+msgid "extract supported public keys"
+msgstr "ekstrak kunci2 publik yg didukung"
+
+#: keymap_alldefs.h:198
+msgid "show S/MIME options"
+msgstr "tunjukan opsi2 S/MIME"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr "Integer overflow -- tidak bisa mengalokasikan memori!"
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Buset, memory abis!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"Untuk menghubungi developersnya, kirim email ke <mutt-dev@mutt.org>.\n"
+"Untuk melaporkan bug, mohon gunakan program flea(1).\n"
+
+#: main.c:50
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins dan kawan-kawan.\n"
+"Mutt TIDAK menyertakan jaminan dalam bentuk apapun; baca 'mutt -vv'.\n"
+"Mutt adalah software bebas, anda diperbolehkan utk menyebarluaskannya\n"
+"dengan beberapa persyaratan; baca 'mutt -vv' utk jelasnya.\n"
+
+#: main.c:56
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Hak Cipta (C) 1996-2002 Michael R. Elkins <me@cs.hmc.edu>\n"
+"Hak Cipta (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Hak Cipta (C) 1997-2002 Thomas Roessler <roessler@guug.de>\n"
+"Hak Cipta (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Hak Cipta (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Hak Cipta (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"Dan banyak lagi yang tidak dapat disebutkan di sini satu per satu telah\n"
+"menyumbangkan banyak kode, perbaikan dan saran.\n"
+"\n"
+"    Program ini adalah program bebas; anda dapat mendistribusikan ulang\n"
+"    dan/atau mengubahnya di bawah persyaratan dan aturan dari GNU General\n"
+"    Public License seperti yang dipublikasikan oleh Free Software "
+"Foundation;\n"
+"    baik versi 2 dari lisensi tersebut, atau yang lebih baru.\n"
+"\n"
+"    Program ini didistribusikan dengan harapan agar berguna, tetapi\n"
+"    TANPA JAMINAN APAPUN; bahkan tanpa jaminan terimplikasi dari\n"
+"    kelayakan perdagangan atau kecocokan untuk suatu kegunaan. Silakan\n"
+"    mengacu ke GNU General Public License untuk informasi lebih lanjut.\n"
+"\n"
+"    Anda seharusnya sudah menerima salinan dari GNU General Public License\n"
+"    bersama dengan program ini; jika tidak, silakan bersurat kepada\n"
+"    Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  "
+"02111, USA.\n"
+
+#: main.c:94
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"penggunaan: mutt [ -nRzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"opsi:\n"
+"  -A <alias>\tekspansi alias\n"
+"  -a <file>\tlampirkan file ke surat\n"
+"  -b <alamat>\talamat blind carbon-copy (BCC)\n"
+"  -c <alamat>\talamat carbon-copy (CC)\n"
+"  -e <perintah>\tperintah yang dijalankan setelah inisialisasi\n"
+"  -f <file>\tkotak surat yang dibaca\n"
+"  -F <file>\tfile muttrc alternatif\n"
+"  -H <file>\tfile contoh daftar headers\n"
+"  -i <file>\tfile yang disertakan dalam surat balasan\n"
+"  -m <jenis>\tjenis kotak surat yang digunakan\n"
+"  -n\t\tmenyuruh Mutt untuk tidak membaca muttrc dari system\n"
+"  -p\t\tlanjutkan surat yang ditunda\n"
+"  -Q <variabel>\tmelakukan query thd suatu variabel konfigurasi\n"
+"  -R\t\tbuka kotak surat dengan mode read-only\n"
+"  -s <subj>\tsubjek surat (harus dikutip jika mengandung spasi)\n"
+"  -v\t\ttunjukkan versi dan definisi sewaktu compile\n"
+"  -x\t\tsimulasi mailx untuk mengirim surat\n"
+"  -y\t\tpilih kotak surat yg ada di daftar `mailboxes'\n"
+"  -z\t\tlangsung keluar jika tidak ada surat di kotak surat\n"
+"  -Z\t\tbuka folder pertama dg surat baru, langsung keluar jika tidak ada\n"
+"  -h\t\tsurat ini"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Opsi2 sewaktu kompilasi:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Gagal menginisialisasi terminal."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Melakukan debug tingkat %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "DEBUG tidak digunakan sewaktu compile. Cuek.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s tidak ada. Buat?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "Tidak bisa membuat %s: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Tidak ada penerima yang disebutkan.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: tidak bisa melampirkan file.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Tidak ada kotak surat dengan surat baru."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Tidak ada kotak surat incoming yang didefinisikan."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "Kotak surat kosong."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Membaca %s... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "Kotak surat kacau!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "Kotak surat diobok-obok sampe kacau!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Fatal error! Tidak bisa membuka kembali kotak surat!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Tidak bisa mengunci kotak surat!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+"sync: mbox diubah, tapi tidak ada surat yang berubah! (laporkan bug ini)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Menulis surat-surat... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "Melakukan perubahan..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Gagal menulis! Sebagian dari kotak surat disimpan ke %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "Tidak bisa membuka kembali mailbox!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Membuka kembali kotak surat..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Ke: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Nomer indeks tidak betul."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Tidak ada entry."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Sudah tidak bisa geser lagi. Jebol nanti."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Sudah tidak bisa geser lagi. Jebol nanti."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Anda di halaman terakhir."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Anda di halaman pertama."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "Entry pertama sudah ditampilkan."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "Entry terakhir sudah ditampilkan."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Anda di entry terakhir."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Anda di entry pertama."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Cari: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Cari mundur: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Tidak ada kriteria pencarian."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Tidak ketemu."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "Tidak ada entry yang ditandai."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "Pencarian tidak bisa dilakukan untuk menu ini."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "Pelompatan tidak diimplementasikan untuk dialogs."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Penandaan tidak didukung."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "Membaca %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr "maildir_commit_message(): tidak dapat mengeset waktu pada file"
+
+#: muttlib.c:835
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr ""
+"File adalah sebuah direktori, simpan di dalamnya? [(y)a, (t)idak, (s)emua]"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr "yts"
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "File adalah sebuah direktori, simpan di dalamnya?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "File di dalam direktori: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "File sudah ada, (t)impa, t(a)mbahkan, atau (b)atal?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "tab"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "Tidak bisa menyimpan surat ke kotak surat POP"
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s bukan kotak surat!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Tambahkan surat-surat ke %s?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "Hubungan ke %s ditutup."
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL tidak tersedia."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "Perintah pra-koneksi gagal."
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Kesalahan waktu menghubungi ke server %s (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr "IDN \"%s\" tidak benar."
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "Mencari %s..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Tidak dapat menemukan host \"%s\""
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Menghubungi %s..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "Tidak bisa berhubungan ke %s (%s)"
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "Gagal menemukan cukup entropy di sistem anda"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "Mengisi pool entropy: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s mempunyai permissions yang tidak aman!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "SSL tidak dapat digunakan karena kekurangan entropy"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "Kesalahan I/O"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "kesalahan protokol tak terdefinisikan"
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "SSL gagal: %s"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "Tidak bisa mengambil sertifikat"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "Hubungan SSL menggunakan %s (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "Tidak diketahui"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "%s: tidak bisa melampirkan file"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[tanggal tidak betul]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "Sertifikat server belum sah"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "Sertifikat server sudah kadaluwarsa"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Sertifikat ini dimiliki oleh:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Sertifikat ini dikeluarkan oleh:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Sertifikat ini sah"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   dari %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "     ke %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Cap jari: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "Cek sertifikat SSL"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(t)olak, terima (s)ekali, terima selal(u)"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "tsu"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(t)olak, terima (s)ekali"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "ts"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Keluar  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Warning: Tidak dapat menyimpan sertifikat"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "Sertifikat telah disimpan"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Jumlah lock terlalu banyak, hapus lock untuk %s?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "Tidak bisa men-dotlock %s.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "Terlalu lama menunggu waktu mencoba fcntl lock!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Menunggu fcntl lock... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "Terlalu lama menunggu waktu mencoba flock!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Menunggu flock... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "Tidak bisa mengunci %s\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "Membaca %s..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "Menulis %s..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "Tidak bisa mensinkronisasi kotak surat %s!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Pindahkan surat-surat yang sudah dibaca ke %s?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Benar-benar hapus %d surat yang ditandai akan dihapus?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Benar-benar hapus %d surat yang ditandai akan dihapus?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Pindahkan surat-surat yang sudah dibaca ke %s..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "Kotak surat tidak berubah."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d disimpan, %d dipindahkan, %d dihapus."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d disimpan, %d dihapus."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr "Tekan '%s' untuk mengeset bisa/tidak menulis"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "Gunakan 'toggle-write' supaya bisa menulis lagi!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "Kotak surat ditandai tidak boleh ditulisi. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "Kotak surat telah di-checkpoint."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Tidak dapat menulis surat"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr "Integer overflow -- tidak bisa mengalokasikan memori."
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "Tidak ada di menu ini."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "HlmnSblm"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "HlmnBrkt"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Lampiran"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Brkt"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "Sudah paling bawah."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "Sudah paling atas."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Cari mundur: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Cari: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "Bantuan sudah ditampilkan."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "Tidak ada lagi teks kutipan."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "Tidak ada lagi teks yang tidak dikutp setelah teks kutipan."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "surat multi bagian tidak punya parameter batas!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Kesalahan pada ekspresi: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Tidak tanggal: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Tidak ada bulan: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "Bulan relatif tidak benar: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "kesalahan pada ekspresi"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "error pada kriteria pada: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: tidak ada perintah begitu"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: tidak didukung pada mode ini"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "parameter tidak ada"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "tanda kurung tidak klop: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "kriteria kosong"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "error: %d tidak dikenali (laporkan error ini)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Menyusun kriteria pencarian..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Menjalankan perintah terhadap surat-surat yang cocok..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "Tidak ada surat yang memenuhi kriteria."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "Sudah dicari sampe bawah, tapi tidak ketemu"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "Sudah dicari sampe atas, tapi tidak ketemu"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Pencarian dibatalkan."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "Passphrase PGP sudah dilupakan."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Error: tidak bisa membuat subproses utk PGP! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- Akhir keluaran PGP --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- AWAL SURAT PGP --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- AWAL PGP PUBLIC KEY BLOCK --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- AWAL SURAT DG TANDATANGAN PGP --]\n"
+"\n"
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- AKHIR PESAN PGP --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- AKHIR PGP PUBLIC KEY BLOCK --]\n"
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- AKHIR PESAN DG TANDATANGAN PGP --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Error: tidak tahu dimana surat PGP dimulai! --]\n"
+"\n"
+
+#: pgp.c:662
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Internal error. Beritahukan kepada <roessler@does-not-exist.org>."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Error: tidak bisa membuat subproses PGP! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Error: surat PGP/MIME tidak dalam format yg betul! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Error: tidak bisa membuat file sementara! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- Data berikut dienkripsi dg PGP/MIME --]\n"
+"\n"
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- Akhir data yang dienkripsi dg PGP/MIME --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "Tidak bisa membuka subproses PGP!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "Gunakan keyID = '%s' untuk %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "Masukkan keyID untuk %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "Tidak dapat menjalankan PGP"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "Mengambil PGP key..."
+
+#: pgpkey.c:486
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "Semua kunci yang cocok telah kadaluwarsa, dicabut, atau disabled."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Pilih  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Cek key  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "PGP keys yg cocok dg <%s>."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "PGP keys yg cocok dg \"%s\"."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "Tidak bisa membuka /dev/null"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Tidak bisa membuat file sementara"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "Identifikasi kunci: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "Kunci ini tidak dapat digunakan: kadaluwarsa/disabled/dicabut."
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "ID telah kadaluwarsa/disabled/dicabut."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "Validitas ID tidak terdifinisikan."
+
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "ID tidak valid."
+
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "ID hanya valid secara marginal."
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s Anda yakin mau menggunakan kunci tsb?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Masukkan key ID: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "Menjalankan PGP..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "Kunci PGP %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Mencari kunci yg cocok dengan \"%s\"..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "Perintah TOP tidak didukung oleh server."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "Tidak bisa menulis header ke file sementara!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "Perintah UIDL tidak didukung oleh server."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "%s bukan path POP yang valid"
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "Mengambil daftar surat..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "Tidak bisa menulis surat ke file sementara!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "Memeriksa surat baru..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "Nama server POP tidak diketahui."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "Tidak ada surat baru di kotak surat POP."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "Hapus surat-surat dari server?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Membaca surat-surat baru (%d bytes)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "Error sewaktu menulis ke kotak surat!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d dari %d surat dibaca]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "Server menutup hubungan!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Mengauthentikasi (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Mengauthentikasi (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "Authentikasi APOP gagal."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "Perintah USER tidak didukung oleh server."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "Tidak bisa meninggalkan surat-surat di server."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "Kesalahan waktu menghubungi ke server: %s"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "Menutup hubungan ke server POP..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Memverifikasi indeks surat..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Hubungan terputus. Hubungi kembali server POP?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Surat-surat tertunda"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "Tidak ada surat yg ditunda."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "PGP header tidak betul"
+
+#: postpone.c:479
+msgid "Illegal S/MIME header"
+msgstr "S/MIME header tidak betul"
+
+#: postpone.c:554
+msgid "Decryption failed."
+msgstr "Dekripsi gagal."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Query Baru"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Buat Alias"
+
+#: query.c:48
+msgid "Search"
+msgstr "Cari"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Menunggu respons..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Perintah query tidak diketahui."
+
+#: query.c:286
+msgid "Query"
+msgstr "Query"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Query: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Query '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Pipa"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Cetak"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Menyimpan..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Lampiran telah disimpan."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "PERHATIAN! Anda akan menimpa %s, lanjut?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Lampiran telah difilter."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Filter melalui: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Pipe ke: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "Saya tidak tahu bagaimana mencetak lampiran %s!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Cetak lampiran yang ditandai?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Cetak lampiran?"
+
+#: recvattach.c:938
+msgid "Can't decrypt encrypted message!"
+msgstr "Tidak dapat men-decrypt surat ini!"
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Lampiran"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "Tidak ada sub-bagian yg bisa ditampilkan!"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "Tidak bisa menghapus lampiran dari server POP."
+
+#: recvattach.c:1056
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "Penghapusan lampiran dari surat yg dienkripsi tidak didukung."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Hanya penghapusan lampiran dari surat multi bagian yang didukung."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Anda hanya dapat menge-bounce bagian-bagian 'message/rfc822'."
+
+#: recvcmd.c:213
+msgid "Error bouncing message!"
+msgstr "Gagal menge-bounce surat!"
+
+#: recvcmd.c:213
+msgid "Error bouncing messages!"
+msgstr "Gagal menge-bounce surat-surat!"
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Tidak bisa membuka file sementara %s."
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "Forward sebagai lampiran?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+"Tidak dapat menguraikan semua lampiran yang ditandai. MIME-forward yg "
+"lainnya?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Forward dalam MIME?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "Tidak bisa membuat %s."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Tidak dapat menemukan surat yang ditandai."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "Tidak ada mailing list yang ditemukan!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+"Tidak dapat menguraikan semua lampiran yang ditandai. Ubah yg lainnya ke "
+"MIME?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Tambahkan"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Masukkan"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Hapus"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "OK"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "Tidak dapat mengambil type2.list milik mixmaster!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Pilih rangkaian remailer."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "Error: %s tidak dapat digunakan sebagai akhir rangkaian remailer."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Rangkaian mixmaster dibatasi hingga %d elemen."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "Rangkaian remailer sudah kosong."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "Anda sudah memilih awal rangkaian."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "Anda sudah memilih akhir rangkaian."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Mixmaster tidak menerima header Cc maupun Bcc."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr "Mohon variabel hostname diisi dengan benar jika menggunakan mixmaster!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Error mengirimkan surat, proses keluar dengan kode %d.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Gagal mengirim surat."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "Entry utk jenis %s di '%s' baris %d tidak diformat dengan benar"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Path untuk mailcap tidak diketahui"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "entry mailcap untuk jenis %s tidak ditemukan"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: parameternya kurang"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: parameternya terlalu banyak"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Tidak ada subjek, batal?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Tidak ada subjek, batal."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Balas ke %s%s?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "Balas ke %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "Tidak ada surat yang ditandai yang kelihatan!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Sertakan surat asli di surat balasan?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Menyertakan surat terkutip..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "Tidak bisa menyertakan semua surat yang diminta!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "Forward sebagai lampiran?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Mempersiapkan surat yg diforward..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Lanjutkan surat yang ditunda sebelumnya?"
+
+#: send.c:1336
+msgid "Edit forwarded message?"
+msgstr "Edit surat yg diforward?"
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Batalkan surat yang tidak diubah?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Surat yang tidak diubah dibatalkan."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "Surat tidak dikirim."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Surat ditunda."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Tidak ada penerima yang disebutkan!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Tidak ada penerima yang disebutkan."
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Tidak ada subjek, batalkan pengiriman?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Tidak ada subjek."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Mengirim surat..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Tidak bisa mengirim surat."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Surat telah dikirim."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Mengirim di latar belakang."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "Tidak ada parameter batas yang bisa ditemukan! [laporkan error ini]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s tidak ada lagi!"
+
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "%s bukan file biasa."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "Tidak bisa membuka %s"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Error mengirimkan surat, proses keluar dengan kode %d (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Keluaran dari proses pengiriman"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr "IDN %s pada saat mempersiapkan resent-from tidak benar."
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s...  Keluar.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "%s tertangkap... Keluar.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Sinyal %d tertangkap... Keluar.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr "Dipercaya "
+
+#: smime.c:303
+msgid "Verified  "
+msgstr "Sudah verif."
+
+#: smime.c:306
+msgid "Unverified"
+msgstr "Blm verif."
+
+#: smime.c:309
+msgid "Expired   "
+msgstr "Kadaluarsa"
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr "Dicabut   "
+
+#: smime.c:315
+msgid "Invalid   "
+msgstr "Tdk valid "
+
+#: smime.c:318
+msgid "Unknown   "
+msgstr "Tdk diketahui"
+
+#: smime.c:347
+msgid "Enter keyID: "
+msgstr "Masukkan keyID: "
+
+#: smime.c:370
+#, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "Sertifikat2 S/MIME yg cocok dg \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr "ID %s belum diverifikasi. Yakin mau digunakan utk %s ?"
+
+#: smime.c:523 smime.c:592
+#, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "Gunakan ID (belum dipercaya!) %s utk %s ?"
+
+#: smime.c:526 smime.c:595
+#, c-format
+msgid "Use ID %s for %s ?"
+msgstr "Gunakan ID %s utk %s ?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+"Warning: Anda belum memutuskan utk mempercayai ID %s. (sembarang utk lanjut)"
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr "Tidak ditemukan sertifikat (yg valid) utk %s."
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "Error: tidak bisa membuat subproses utk OpenSSL!"
+
+#: smime.c:1197
+msgid "no certfile"
+msgstr "tdk ada certfile"
+
+#: smime.c:1200
+msgid "no mbox"
+msgstr "tdk ada mbox"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr "Tdk ada keluaran dr OpenSSL"
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr "Warning: Sertifikat intermediate tdk ditemukan."
+
+#: smime.c:1426
+msgid "Can't open OpenSSL subprocess!"
+msgstr "Tidak bisa membuka subproses OpenSSL!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr "Tdk ada keluaran dr OpenSSL..."
+
+#: smime.c:1629 smime.c:1751
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- Akhir keluaran OpenSSL --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Error: tidak bisa membuat subproses utk OpenSSL! --]\n"
+
+#: smime.c:1755
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr "[-- Data berikut dienkripsi dg S/MIME --]\n"
+
+#: smime.c:1758
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr "[-- Data berikut ditandatangani dg S/MIME --]\n"
+
+#: smime.c:1822
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- Akhir data yang dienkripsi dg S/MIME. --]\n"
+
+#: smime.c:1824
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- Akhir data yg ditandatangani dg S/MIME. --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Mengurutkan surat-surat..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "Tidak bisa menemukan fungsi pengurutan! [laporkan bug ini]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(tidak ada kotak surat)"
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "Surat induk tidak bisa dilihat di tampilan terbatas ini."
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "Surat induk tidak ada."
+
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "Memanggil OpenSSL..."
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "Bounce surat ke %s...?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "Bounce surat-surat ke %s...?"
+
+#~ msgid "ewsabf"
+#~ msgstr "etgsdb"
+
+#, fuzzy
+#~ msgid "Certificate *NOT* added."
+#~ msgstr "Sertifikat telah disimpan"
+
+#~ msgid "This ID's validity level is undefined."
+#~ msgstr "Tingkat validitas dari ID ini tidak didefinisikan."
+
+#~ msgid "[-- expired. --]\n"
+#~ msgstr "[-- kadaluwarsa. --]\n"
+
+#~ msgid "Decode-save"
+#~ msgstr "Decode-simpan"
+
+#~ msgid "Decode-copy"
+#~ msgstr "Decode-copy"
+
+#~ msgid "Decrypt-save"
+#~ msgstr "Decrypt-simpan"
+
+#~ msgid "Decrypt-copy"
+#~ msgstr "Decrypt-copy"
+
+#~ msgid "Copy"
+#~ msgstr "Copy"
+
+#~ msgid ""
+#~ "[-- This %s/%s attachment is not included, --]\n"
+#~ "[-- and the indicated external source has --]\n"
+#~ "[-- expired. --]\n"
+#~ msgstr ""
+#~ "[-- Lampiran %s/%s ini tidak disertakan, --]\n"
+#~ "[-- dan sumber luar yang dimaksud sudah --]\n"
+#~ "[-- kadaluwarsa. --]\n"
+
+#~ msgid "%s [%s]\n"
+#~ msgstr "%s [%s]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "[-- End of PGP output --]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "[-- Akhir keluaran PGP --]\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "Can't stat %s."
+#~ msgstr "Tidak bisa stat: %s"
+
+#~ msgid "%s: no such command"
+#~ msgstr "%s: tidak ada perintah begitu"
+
+#~ msgid "Authentication method is unknown."
+#~ msgstr "Metode otentikasi tidak diketahui."
+
+#~ msgid "MIC algorithm: "
+#~ msgstr "Algoritma MIC: "
+
+#~ msgid "This doesn't make sense if you don't want to sign the message."
+#~ msgstr "Ini tidak masuk akal jika anda tidak mau tandatangani suratnya."
+
+#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160"
+#~ msgstr "Algoritma MIC yang dikenali adalah: pgp-md5, pgp-sha1, pgp-rmd160"
+
+#~ msgid ""
+#~ "\n"
+#~ "SHA1 implementation Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft."
+#~ "com>\n"
+#~ "\n"
+#~ "    Redistribution and use in source and binary forms, with or without\n"
+#~ "    modification, are permitted under certain conditions.\n"
+#~ "\n"
+#~ "    The SHA1 implementation comes AS IS, and ANY EXPRESS OR IMPLIED\n"
+#~ "    WARRANTIES, including, but not limited to, the implied warranties of\n"
+#~ "    merchantability and fitness for a particular purpose ARE DISCLAIMED.\n"
+#~ "\n"
+#~ "    You should have received a copy of the full distribution terms\n"
+#~ "    along with this program; if not, write to the program's developers.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Implementasi SHA1 Hak Cipta (C) 1995-1997 Eric A. Young <eay@cryptsoft."
+#~ "com>\n"
+#~ "\n"
+#~ "    Pendistribusian ulang dan penggunaan dalam bentuk sumber dan biner\n"
+#~ "    dengan maupun tanpa perubahan, diperbolehkan dengan syarat-syarat\n"
+#~ "    tertentu.\n"
+#~ "\n"
+#~ "    Implementasi SHA1 adalah APA ADANYA, dan TIDAK diberikan jaminan\n"
+#~ "    dalam bentuk apapun, baik eksplisit maupun terimplikasi, termasuk\n"
+#~ "    tapi tidak terbatas kepada jaminan perdagangan dan ketepatgunaan.\n"
+#~ "\n"
+#~ "    Anda semestinya sudah menerima sebuah salinan dari persyaratan "
+#~ "lengkap\n"
+#~ "    pendistribusian ulang bersama program ini; jika tidak, hubungi\n"
+#~ "    para pembuat program ini.\n"
+
+#~ msgid "POP Username: "
+#~ msgstr "Nama user POP: "
+
+#~ msgid "Reading new message (%d bytes)..."
+#~ msgstr "Membaca surat baru (%d bytes)..."
+
+#~ msgid "Error reading message!"
+#~ msgstr "Gagal membaca surat!"
+
+#~ msgid "%s [%d message read]"
+#~ msgstr "%s [%d surat dibaca]"
+
+#~ msgid "Creating mailboxes is not yet supported."
+#~ msgstr "Pembuatan kotak surat belum diimplementasikan."
+
+#~ msgid "Reopening mailbox... %s"
+#~ msgstr "Membuka kembali kotak surat... %s"
+
+#~ msgid "Closing mailbox..."
+#~ msgstr "Menutup kotak surat..."
+
+#~ msgid "IMAP Username: "
+#~ msgstr "IMAP Username: "
+
+#~ msgid "CRAM key for %s@%s: "
+#~ msgstr "CRAM key untuk %s@%s: "
+
+#~ msgid "Skipping CRAM-MD5 authentication."
+#~ msgstr "Melewati authentikasi CRAM-MD5."
+
+#~ msgid "[-- Error: unexpected end of file! --]\n"
+#~ msgstr "[-- Error: akhir file tak diduga! --]\n"
+
+#~ msgid "Sending APPEND command ..."
+#~ msgstr "Mengirim perintah APPEND ..."
+
+#~ msgid "%d kept."
+#~ msgstr "%d disimpan."
+
+#~ msgid "POP Password: "
+#~ msgstr "Password POP: "
+
+#~ msgid "No POP username is defined."
+#~ msgstr "Username POP tidak diketahui."
+
+#~ msgid "Could not find address for host %s."
+#~ msgstr "Alamat tidak ditemukan untuk %s."
+
+#~ msgid "Attachment saved"
+#~ msgstr "Lampiran telah disimpan"
diff --git a/po/it.gmo b/po/it.gmo
new file mode 100644 (file)
index 0000000..701361a
Binary files /dev/null and b/po/it.gmo differ
diff --git a/po/it.po b/po/it.po
new file mode 100644 (file)
index 0000000..06c7d49
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,4199 @@
+# Translation for mutt.
+# Copyright (C) 1998-2001 Marco d'Itri
+# Marco d'Itri <md@linux.it>, 2000.
+#
+# $Id: it.po,v 3.10 2003/11/05 20:09:35 roessler Exp $
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mutt-1.3.23\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2002-01-19 21:09+0100\n"
+"Last-Translator: Marco d'Itri <md@linux.it>\n"
+"Language-Team: none\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "Nome dell'utente su %s: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "Password per %s@%s: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Esci"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Canc"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "DeCanc"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Seleziona"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Aiuto"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "Non hai alias!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Crea l'alias"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Crea l'alias: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "Hai già definito un alias con questo nome!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr ""
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Indirizzo: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr ""
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Nome della persona: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] Va bene?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Salva nel file: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Alias aggiunto."
+
+# FIXME
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Il nametemplate non corrisponde, continuo?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "La voce compose di mailcap richiede %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "Errore eseguendo \"%s\"!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Errore nell'apertura del file per leggere gli header."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Errore nell'apertura del file per rimuovere gli header."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "Manca la voce compose di mailcap per %s, creo un file vuoto."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "La voce edit di mailcap richiede %%s"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "Manca la voce edit di mailcap per %s"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr ""
+"Non è stata trovata la voce di mailcap corrispondente.  Visualizzo come "
+"testo."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "Tipo MIME non definito.  Impossibile visualizzare l'allegato."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Impossibile creare il filtro"
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Impossibile creare il filtro"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "Errore di scrittura!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Non so come stamparlo!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "CambiaDir"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Maschera"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s non è una directory."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Mailbox [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Iscritto [%s], Maschera dei file: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Directory [%s], Maschera dei file: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Impossibile allegare una directory!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Non ci sono file corrispondenti alla maschera"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "È possibile creare solo mailbox IMAP"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "È possibile cancellare solo mailbox IMAP"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Cancello davvero la mailbox \"%s\"?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "Mailbox cancellata."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "Mailbox non cancellata."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Cambia directory:"
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Errore nella lettura della directory."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Maschera dei file: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr ""
+"Ordino al contrario per (d)ata, (a)lfabetico, dimensioni(z) o (n)ulla? "
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Ordino per (d)ata, (a)lfabetico, dimensioni(z) o (n)ulla? "
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "dazn"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Nuovo nome del file: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Impossibile vedere una directory"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "C'è stato un errore nella visualizzazione del file"
+
+#: buffy.c:442
+#, fuzzy
+msgid "New mail in "
+msgstr "Nuova posta in %s."
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: il colore non è gestito dal terminale"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: colore inesistente"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: oggetto inesistente"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: comando valido solo per l'oggetto index"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: troppo pochi argomenti"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Mancano dei parametri."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: troppo pochi argomenti"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: troppo pochi argomenti"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: attributo inesistente"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "troppo pochi argomenti"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "troppi argomenti"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "i colori predefiniti non sono gestiti"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "Verifico la firma PGP?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Impossibile creare il file temporaneo!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Impossibile creare il filtro di visualizzazione"
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "Impossibile copiare il messaggio"
+
+#: commands.c:182
+#, fuzzy
+msgid "S/MIME signature successfully verified."
+msgstr "Firma PGP verificata con successo."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr ""
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+#, fuzzy
+msgid "S/MIME signature could NOT be verified."
+msgstr "Non è stato possibile verificare la firma PGP."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "Firma PGP verificata con successo."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "Non è stato possibile verificare la firma PGP."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Comando: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Rimbalza il messaggio a: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Rimbalza i messaggi a: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "Errore nella lettura dell'indirizzo!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr ""
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Rimbalza il messaggio a %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Rimbalza i messaggi a %s"
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Message not bounced."
+msgstr "Messaggio rimbalzato."
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Messages not bounced."
+msgstr "Messaggi rimbalzati."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Messaggio rimbalzato."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Messaggi rimbalzati."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "Impossibile creare il processo filtro"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Apri una pipe con il comando: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "Non è stato definito un comando di stampa."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "Stampo il messaggio?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Stampo i messaggi segnati?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "Messaggio stampato"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Messaggi stampati"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "Impossibile stampare il messaggio"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "Impossibile stampare i messaggi"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"OrdContr (d)ata/(f)rom/(r)icev/(s)ogg/t(o)/(t)hread/n(u)lla/si(z)e/s(c)ore?: "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Ordina per (d)ata/(f)rom/(r)icev/(s)ogg/t(o)/(t)hread/n(u)lla/si(z)e/s(c)"
+"ore?: "
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dfrsotuzc"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Comando della shell: "
+
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "Decodifica e salva nella mailbox%s"
+
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "Decodifica e copia nella mailbox%s"
+
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "Decifra e salva nella mailbox%s"
+
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "Decifra e copia nella mailbox%s"
+
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "Salva nella mailbox%s"
+
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "Copia nella mailbox%s"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " i messaggi segnati"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Copio in %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "Convertire in %s al momento dell'invio?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Il Content-Type è stato cambiato in %s."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "Il set di caratteri è stato cambiato in %s; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "non convertito"
+
+#: commands.c:914
+msgid "converting"
+msgstr "convertito"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Non ci sono allegati."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Spedisci"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Abbandona"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Allega un file"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Descr"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Firma, Crittografa"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Crittografa"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Firma"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Normale"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " firma come: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<predefinito>"
+
+#: compose.c:149
+#, fuzzy
+msgid "Encrypt with: "
+msgstr "Crittografa"
+
+#: compose.c:165
+#, fuzzy
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "cifra(e), firma(s), firma come(a), entrambi(b), annulla(f) "
+
+#: compose.c:166
+msgid "esabf"
+msgstr "esabf"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Firma come: "
+
+#: compose.c:227
+#, fuzzy
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "cifra(e), firma(s), firma come(a), entrambi(b), annulla(f) "
+
+#: compose.c:228
+#, fuzzy
+msgid "eswabf"
+msgstr "esabf"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+
+#: compose.c:238
+msgid "12345f"
+msgstr ""
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] non esiste più!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] è stato modificato. Aggiorno la codifica?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Allegati"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr ""
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Non puoi cancellare l'unico allegato."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr ""
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "Allego i file selezionati..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "Impossibile allegare %s!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Apri la mailbox da cui allegare il messaggio"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "In questo folder non ci sono messaggi."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Segna i messaggi che vuoi allegare!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Impossibile allegare!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "La ricodifica ha effetti solo sugli allegati di testo."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "L'allegato corrente non sarà convertito."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "L'allegato corrente sarà convertito."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Codifica non valida."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Salvo una copia di questo messaggio?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Rinomina in: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "Impossibile fare stat di %s: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Nuovo file: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Content-Type non è nella forma base/sub"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Content-Type %s sconosciuto"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Impossibile creare il file %s"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "Quel che abbiamo qui è l'impossibilità di fare un allegato"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Rimando a dopo questo messaggio?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Salva il messaggio nella mailbox"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Scrivo il messaggio in %s ..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "Messaggio scritto."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr ""
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr ""
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr ""
+
+#: crypt.c:71
+#, fuzzy, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- Segue l'output di PGP (ora attuale: %c) --]\n"
+
+#: crypt.c:86
+#, fuzzy
+msgid "Passphrase(s) forgotten."
+msgstr "Passphrase di PGP dimenticata."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Inserisci la passphrase di PGP:"
+
+#: crypt.c:147
+#, fuzzy
+msgid "Enter SMIME passphrase:"
+msgstr "Inserisci la passphrase di PGP:"
+
+#: crypt.c:192
+#, fuzzy
+msgid "Create a traditional (inline) PGP message?"
+msgstr "Creo un messaggio application/pgp?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "Eseguo PGP..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr ""
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr ""
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr ""
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- Errore: struttura multipart/signed incoerente! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr "[-- Errore: protocollo multipart/signed %s sconosciuto! --]\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr "[-- Attenzione: impossibile verificare firme %s/%s. --]\n"
+
+#. Now display the signed body
+#: crypt.c:912
+#, fuzzy
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- I seguenti dati sono firmati --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Attenzione: non è stata trovata alcuna firma. --]\n"
+"\n"
+
+#: crypt.c:924
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr "[-- Fine dei dati firmati --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "sì"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "no"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Esci da mutt?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "errore sconosciuto"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Premi un tasto per continuare..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " ('?' per la lista): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Nessuna mailbox aperta."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Non ci sono messaggi."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "La mailbox è di sola lettura."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "Funzione non permessa nella modalità attach-message."
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "Non ci sono messaggi visibili"
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "Impossibile (dis)abilitare la scrittura a una mailbox di sola lettura!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "I cambiamenti al folder saranno scritti all'uscita dal folder."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "I cambiamenti al folder non saranno scritti."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Esci"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Salva"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Mail"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Rispondi"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Gruppo"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr ""
+"La mailbox è stata modificata dall'esterno.  I flag possono essere sbagliati."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "C'è nuova posta in questa mailbox."
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "La mailbox è stata modificata dall'esterno."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Nessun messaggio segnato."
+
+#: curs_main.c:653 menu.c:896
+#, fuzzy
+msgid "Nothing to do."
+msgstr "Mi connetto a %s..."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Salta al messaggio: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "L'argomento deve essere il numero di un messaggio."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Questo messaggio non è visibile."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Numero del messaggio non valido."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Cancella i messaggi corrispondenti a: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "Non è attivo alcun modello limitatore."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Limita: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Limita ai messaggi corrispondenti a: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Esci da Mutt?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Segna i messaggi corrispondenti a: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "De-cancella i messaggi corrispondenti a: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Togli il segno ai messaggi corrispondenti a: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Apri la mailbox in sola lettura"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Apri la mailbox"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s non è una mailbox."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Esci da Mutt senza salvare?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Sei all'ultimo messaggio."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Nessun messaggio da de-cancellare."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Sei al primo messaggio."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "La ricerca è ritornata all'inizio."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "La ricerca è ritornata al fondo."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Non ci sono nuovi messaggi"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Non ci sono messaggi non letti"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " in questa visualizzazione limitata"
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "Impossibile cambiare il flag \"importante\" sul server POP."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Non ci sono altri thread."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Sei al primo thread."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "Il threading non è attivo."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "Il thread contiene messaggi non letti."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "Impossibile modificare i messaggi sul server POP."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tinserisci una linea che inizia con un solo ~\n"
+"~b utenti\taggiungi utenti al campo Bcc:\n"
+"~c utenti\taggiungi utenti al campo Cc:\n"
+"~f messaggi\tincludi dei messaggi\n"
+"~F messaggi\tcome ~f, ma include anche gli header\n"
+"~h\t\tmodifica gli header del messaggio\n"
+"~m messaggi\tincludi e cita dei messaggi\n"
+"~Mmessaggi\tcome ~m, ma include anche gli header\n"
+"~p\t\tstampa il messaggio\n"
+"~q\t\tscrivi il file e abbandona l'editor\n"
+"~r file\t\tleggi un file nell'editor\n"
+"~t utenti\taggiungi utenti al campo To:\n"
+"~u\t\trichiama la linea precedente\n"
+"~v\t\tmodifica il messaggio con il $VISUAL editor\n"
+"~w file\t\tscrivi il messaggio nel file\n"
+"~x\t\tabbandona i cambiamenti e lascia l'editor\n"
+"~?\t\tquesto messaggio\n"
+"~.\t\tda solo su una linea termina l'input\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: numero del messaggio non valido.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Termina il messaggio con un . su una linea da solo)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "Nessuna mailbox.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Il messaggio contiene:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(continua)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "manca il nome del file.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Non ci sono linee nel messaggio.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr ""
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: comando dell'editor sconosciuto (~? per l'aiuto)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "impossibile creare il folder temporaneo: %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "impossibile scrivere il folder temporaneo: %s"
+
+#: editmsg.c:101
+#, fuzzy, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "impossibile scrivere il folder temporaneo: %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "Il file del messaggio è vuoto!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "Messaggio non modificato!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "Impossibile aprire il file del messaggio: %s"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Impossibile accodare al folder: %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Errore. Preservato il file temporaneo: %s"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Imposta il flag"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Cancella il flag"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[-- Errore: impossibile visualizzare ogni parte di multipart/alternative! "
+"--]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Allegato #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Tipo: %s/%s, Codifica: %s, Dimensioni: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Visualizza automaticamente con %s --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Richiamo il comando di autovisualizzazione: %s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- Impossibile eseguire %s. --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Stderr dell'autoview di %s --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- Errore: message/external-body non ha un parametro access-type --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Questo allegato %s/%s "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(dimensioni %s byte) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "è stato cancellato -- ]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- su %s --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- nome: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Questo allegato %s/%s non è incluso, --]\n"
+
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr "[-- e l'origine esterna indicata è scaduta. --]\n"
+
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr "[-- e il l'access-type %s indicato non è gestito --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Errore: multipart/signed non ha protocollo."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Errore: multipart/encrypted non ha il parametro protocol!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Impossibile aprire il file temporaneo!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s non è gestito "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(usa '%s' per vederlo)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "('view-attachments' deve essere assegnato a un tasto!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: impossibile allegare il file"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "ERRORE: per favore segnala questo bug"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<SCONOSCIUTO>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Assegnazioni generiche:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Funzioni non assegnate:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Aiuto per %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: impossibile usare unhook * dentro un hook."
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: tipo di hook sconosciuto: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: impossibile cancellare un %s dentro un %s."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "Non ci sono autenticatori disponibili."
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Autenticazione in corso (anonimo)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "L'autenticazione anonima è fallita."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Autenticazione in corso (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "Autenticazione CRAM-MD5 fallita."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Autenticazione in corso (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "Autenticazione GSSAPI fallita."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "LOGIN non è abilitato su questo server."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Faccio il login..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "Login fallito."
+
+#: imap/auth_sasl.c:112
+#, fuzzy, c-format
+msgid "Authenticating (%s)..."
+msgstr "Autenticazione in corso (APOP)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "Autenticazione SASL fallita."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "%s non è un percorso IMAP valido"
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "Scarico i namespace..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Scarico la lista dei folder..."
+
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "Folder inesistente"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Crea la mailbox:"
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "La mailbox deve avere un nome."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Mailbox creata."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "Mailbox chiusa"
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Errore fatale. Il numero dei messaggi non è sincronizzato!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "Chiudo la connessione a %s..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Questo server IMAP è troppo vecchio, mutt non può usarlo."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "Vuoi usare TLS per rendere sicura la connessione?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "Impossibile negoziare la connessione TLS"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "Seleziono %s..."
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "Errore durante l'apertura della mailbox"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Impossibile accodare alle mailbox IMAP di questo server"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "Creo %s?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Chiudo la connessione al server IMAP..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "Segno cancellati %d messaggi..."
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "Expunge fallito"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Salvo i flag di stato dei messaggi... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Cancello i messaggi dal server..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbox: EXPUNGE fallito"
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "CLOSE fallito"
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "Nome della mailbox non valido"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "Mi iscrivo a %s..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "Mi deiscrivo da %s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "Impossibile scaricare gli header da questa versione del server IMAP."
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "Impossibile creare il file temporaneo %s"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Prendo gli header dei messaggi... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Prendo il messaggio..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "L'indice dei messaggi non è corretto; prova a riaprire la mailbox."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Mando il messaggio ..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "Copio %d messaggi in %s..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "Copio il messaggio %d in %s ..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "Continua?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "alias: nessun indirizzo"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr ""
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "Campo dell'header non valido"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: metodo di ordinamento sconosciuto"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): errore nella regexp: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: variabile sconosciuta"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "prefix non è consentito con reset"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "value non è consentito con reset"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s è attivo"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s non è attivo"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: tipo di mailbox non valido"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: valore non valido"
+
+#: init.c:1312
+#, fuzzy, c-format
+msgid "%s: Unknown type."
+msgstr "%s: tipo sconosciuto"
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: tipo sconosciuto"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Impossibile fare stat di %s: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s non è un file regolare."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Errore in %s, linea %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: errori in %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: lettura terminata a causa di troppi errori in %s"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: errore in %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: troppi argomenti"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: comando sconosciuto"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Errore nella riga di comando: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "impossibile determinare la home directory"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "impossibile determinare l'username"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Individuato un loop di macro."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Il tasto non è assegnato."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Il tasto non è assegnato.  Premi '%s' per l'aiuto."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: troppi argomenti"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: menù inesistente"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "sequenza di tasti nulla"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: troppi argomenti"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: la funzione non è nella mappa"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: sequenza di tasti nulla"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: troppi argomenti"
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: non ci sono argomenti"
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s: la funzione non esiste"
+
+#: keymap.c:912
+#, fuzzy
+msgid "Enter keys (^G to abort): "
+msgstr "Inserisci il keyID per %s: "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr ""
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "operazione nulla"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "forza la visualizzazione dell'allegato usando mailcap"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "visualizza l'allegato come se fosse testo"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "(dis)attiva la visualizzazione delle sottoparti"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "spostati in fondo alla pagina"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "rispedisci un messaggio a un altro utente"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "seleziona un nuovo file in questa directory"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "guarda il file"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "mostra il nome del file attualmente selezionato"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "iscrizione alla mailbox corrente (solo IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "deiscrizione dalla mailbox corrente (solo IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr ""
+"visualizza tutte le mailbox o solo quelle a cui si è iscritti (solo IMAP)"
+
+#: keymap_alldefs.h:18
+#, fuzzy
+msgid "list mailboxes with new mail"
+msgstr "Nessuna mailbox con nuova posta."
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "cambia directory"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "controlla se c'è nuova posta nella mailbox"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "allega un file a questo messaggio"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "allega un messaggio a questo messaggio"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "modifica la lista dei BCC"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "modifica la lista dei CC"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "modifica la descrizione dell'allegato"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "modifica il transfer-encoding dell'allegato"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "inserisci un file in cui salvare una coppia di questo messagio"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "modifica il file da allegare"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "modifica il campo from"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "modifica il messaggio insieme agli header"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "modifica il messaggio"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "modifica l'allegato usando la voce di mailcap"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "modifica il campo Reply-To"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "modifica il Subject di questo messaggio"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "modifica la lista dei TO"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "crea una nuova mailbox (solo IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "modifica il tipo di allegato"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "prendi una copia temporanea di un allegato"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "esegui ispell sul messaggio"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "componi un nuovo allegato usando la voce di mailcap"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "(dis)abilita la ricodifica di questo allegato"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "salva questo messaggio per inviarlo in seguito"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "rinomina/sposta un file allegato"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "spedisce il messaggio"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "cambia la disposizione tra inline e attachment"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "(dis)attiva se cancellare il file dopo averlo spedito"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "aggiorna le informazioni sulla codifica di un allegato"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "scrivi il messaggio in un folder"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "copia un messaggio in un file/mailbox"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "crea un alias dal mittente del messaggio"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "muovi la voce in fondo allo schermo"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "muovi al voce in mezzo allo schermo"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "muovi la voce all'inizio dello schermo"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "fai una copia decodificata (text/plain)"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "fai una copia decodificata (text/plain) e cancellalo"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "cancella la voce corrente"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "cancella la mailbox corrente (solo IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "cancella tutti i messaggi nel subthread"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "cancella tutti i messaggi nel thread"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "visualizza l'indirizzo completo del mittente"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "visualizza il messaggio e (dis)attiva la rimozione degli header"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "visualizza un messaggio"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "modifica il messaggio grezzo"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "cancella il carattere davanti al cursore"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "sposta il cursore di un carattere a sinistra"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "sposta il cursore all'inizio della parola"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "salta all'inizio della riga"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "passa alla mailbox di ingresso successiva"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "completa il nome del file o l'alias"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "completa l'indirizzo con una ricerca"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "cancella il carattere sotto il cursore"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "salta alla fine della riga"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "sposta il cursore di un carattere a destra"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "sposta il cursore alla fine della parola"
+
+#: keymap_alldefs.h:75
+#, fuzzy
+msgid "scroll down through the history list"
+msgstr "spostati in alto attraverso l'history"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "spostati in alto attraverso l'history"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "cancella i caratteri dal cursore alla fine della riga"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "cancella i caratteri dal cursore alla fine della parola"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "cancella tutti i caratteri sulla riga"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "cancella la parola davanti al cursore"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "proteggi il prossimo tasto digitato"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "scambia il carattere sotto il cursore con il precedente"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "rendi maiuscola la prima lettera"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "rendi minuscola la parola"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "rendi maiuscola la parola"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "inserisci un comando di muttrc"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "inserisci la maschera dei file"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "esci da questo menù"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "filtra l'allegato attraverso un comando della shell"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "spostati alla prima voce"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "(dis)attiva il flag 'importante' del messaggio"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "inoltra un messaggio con i commenti"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "seleziona la voce corrente"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "rispondi a tutti i destinatari"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "sposta verso il basso di 1/2 pagina"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "sposta verso l'alto di 1/2 pagina"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "questo schermo"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "salta a un numero dell'indice"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "spostati all'ultima voce"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "rispondi alla mailing list indicata"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "esegui una macro"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "componi un nuovo messaggio"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "apri un altro folder"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "apri un altro folder in sola lettura"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "cancella il flag di stato da un messaggio"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "cancella i messaggi corrispondenti al modello"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "recupera la posta dal server IMAP"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "recupera la posta dal server POP"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "spostati al primo messaggio"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "spostati all'ultimo messaggio"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "mostra solo i messaggi corrispondenti al modello"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "salta al prossimo messaggio nuovo"
+
+#: keymap_alldefs.h:113
+#, fuzzy
+msgid "jump to the next new or unread message"
+msgstr "salta al prossimo messaggio non letto"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "salta al prossimo subthread"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "salta al prossimo thread"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "salta al prossimo messaggio de-cancellato"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "salta al prossimo messaggio non letto"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "salta al messaggio padre nel thread"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "salta al thread precedente"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "salta al thread seguente"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "salta al precedente messaggio de-cancellato"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "salta al precedente messaggio nuovo"
+
+#: keymap_alldefs.h:123
+#, fuzzy
+msgid "jump to the previous new or unread message"
+msgstr "salta al precedente messaggio non letto"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "salta al precedente messaggio non letto"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "segna il thread corrente come già letto"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "segna il subthread corrente come già letto"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "imposta un flag di stato su un messaggio"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "salva i cambiamenti nella mailbox"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "segna i messaggi corrispondenti al modello"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "de-cancella i messaggi corrispondenti al modello"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "togli il segno ai messaggi corrispondenti al modello"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "spostati in mezzo alla pagina"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "spostati alla prossima voce"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "spostati una riga in basso"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "spostati alla prossima pagina"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "salta in fondo al messaggio"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "(dis)attiva la visualizzazione del testo citato"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "salta oltre il testo citato"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "salta all'inizio del messaggio"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "manda un messaggio/allegato a un comando della shell con una pipe"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "spostati alla voce precedente"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "spostati in alto di una riga"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "spostati alla pagina precedente"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "stampa la voce corrente"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "chiedi gli indirizzi a un programma esterno"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "aggiungi i risultati della nuova ricerca ai risultati attuali"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "salva i cambiamenti alla mailbox ed esci"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "richiama un messaggio rimandato"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "cancella e ridisegna lo schermo"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{internal}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "rispondi a un messaggio"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "usa il messaggio corrente come modello per uno nuovo"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "salva in un file un messaggio/allegato"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "cerca una espressione regolare"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "cerca all'indietro una espressione regolare"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "cerca la prossima corrispondenza"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "cerca la prossima corrispondenza nella direzione opposta"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "(dis)attiva la colorazione del modello cercato"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "esegui un comando in una subshell"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "ordina i messaggi"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "ordina i messaggi in ordine inverso"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "segna la voce corrente"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "applica la prossima funzione ai messaggi segnati"
+
+#: keymap_alldefs.h:164
+#, fuzzy
+msgid "apply next function ONLY to tagged messages"
+msgstr "applica la prossima funzione ai messaggi segnati"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "segna il subthread corrente"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "segna il thread corrente"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "(dis)attiva il flag 'nuovo' di un messaggio"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "(dis)attiva se la mailbox sarà riscritta"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "(dis)attiva se visualizzare le mailbox o tutti i file"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "spostati all'inizio della pagina"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "de-cancella la voce corrente"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "de-cancella tutti i messaggi nel thread"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "de-cancella tutti i messaggi nel subthread"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "mostra il numero di versione e la data di Mutt"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "visualizza l'allegato usando se necessario la voce di mailcap"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "mostra gli allegati MIME"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr ""
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "mostra il modello limitatore attivo"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "(de)comprimi il thread corrente"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "(de)comprimi tutti i thread"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "allega una chiave pubblica PGP"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "mostra le opzioni PGP"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "spedisci una chiave pubblica PGP"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "verifica una chiave pubblica PGP"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "visualizza la chiave dell'user id"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "controlla una firma PGP tradizionale"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "Accetta la catena costruita"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "Accoda un remailer alla catena"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "Inserisce un remailer nella catena"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "Toglie un remail dalla catena"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "Seleziona l'elemento precedente della catena"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "Seleziona il prossimo elemento della catena"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "invia il messaggio attraverso una catena di remailer mixmaster"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "fai una copia decodificata e cancellalo"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "fai una copia decodificata"
+
+#: keymap_alldefs.h:196
+#, fuzzy
+msgid "wipe passphrase(s) from memory"
+msgstr "cancella la passphrase PGP dalla memoria"
+
+#: keymap_alldefs.h:197
+#, fuzzy
+msgid "extract supported public keys"
+msgstr "estrai le chiavi pubbliche PGP"
+
+#: keymap_alldefs.h:198
+#, fuzzy
+msgid "show S/MIME options"
+msgstr "mostra le opzioni PGP"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Memoria esaurita!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"Per contattare gli sviluppatori scrivi a <mutt-dev@mutt.org>.\n"
+"Per segnalare un bug usa il programma flea(1).\n"
+
+#: main.c:50
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-2001 Michael R. Elkins e altri.\n"
+"Mutt non ha ALCUNA GARANZIA; usare `mutt -vv' per i dettagli.\n"
+"Mutt è software libero e sei invitato a ridistribuirlo\n"
+"sotto certe condizioni; scrivere `mutt -vv' per i dettagli.\n"
+
+#: main.c:56
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-2001 Michael R. Elkins <me@cs.hmc.edu>\n"
+"Copyright (C) 1996-2001 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2001 Thomas Roessler <roessler@guug.de>\n"
+"Copyright (C) 1998-2001 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2001 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2001 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"Molti altri non menzionati qui hanno contribuito con codice, correzioni\n"
+"e suggerimenti.\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"
+
+#: main.c:94
+#, fuzzy
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"uso: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <tipo> ] [ -f <file> ]\n"
+"\tmutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] [ -i "
+"<file> ] [ -s <sogg> ] [ -b <indir> ] [ -c <indir> ] <indir> [ ... ]\n"
+"\tmutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"\tmutt -v[v]\n"
+"\n"
+"opzioni\n"
+"  -a <file>\tallega un file al messaggio\n"
+"  -b <indir>\tindirizzo in blind carbon copy (BCC)\n"
+"  -c <indir>\tindirizzo in carbon copy (CC)\n"
+"  -e <cmd>\tcomando da eseguire dopo l'inizializzazione\n"
+"  -f <file>\tquale mailbox leggere\n"
+"  -F <file>\tun file muttrc alternativo\n"
+"  -H <file>\tun file di esempio da cui leggere gli header\n"
+"  -i <file>\tun file che mutt dovrebbe includere nella risposta\n"
+"  -m <tipo>\til tipo di mailbox predefinita\n"
+"  -n\t\tdisabilita la lettura del Muttrc di sistema\n"
+"  -p\t\trichiama un messaggio rimandato\n"
+"  -R\t\tapri la mailbox in sola lettura\n"
+"  -s <sogg>\tspecifica il Subject (deve essere tra apici se ha spazi)\n"
+"  -v\t\tmostra la versione e le definizioni della compilazione\n"
+"  -x\t\tsimula la modalità invio di mailx\n"
+"  -y\t\tseleziona una mailbox specificata nella lista `mailboxes'\n"
+"  -z\t\tesce immediatamente se non ci sono messaggi nella mailbox\n"
+"  -Z\t\tapre il primo folder con un nuovo messaggio, esce se non ce ne sono\n"
+"  -h\t\tquesto messaggio di aiuto"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Opzioni di compilazione:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Errore nell'inizializzazione del terminale."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Debugging al livello %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "DEBUG non è stato definito durante la compilazione.  Ignorato.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s non esiste. Lo creo?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "Impossibile creare %s: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Nessun destinatario specificato.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: impossibile allegare il file.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Nessuna mailbox con nuova posta."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Non è stata definita una mailbox di ingresso."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "La mailbox è vuota."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Leggo %s... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "La mailbox è rovinata!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "La mailbox è stata rovinata!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Errore fatale!  Impossibile riaprire la mailbox!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Impossibile bloccare la mailbox."
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr "sync: mbox modified, but no modified messages! (segnala questo bug)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Scrivo i messaggi... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "Applico i cambiamenti..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Scrittura fallita!  Salvo la mailbox parziale in %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "Impossibile riaprire la mailbox!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Riapro la mailbox..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Salta a: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Numero dell'indice non valido."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Nessuna voce."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Non puoi spostarti più in basso."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Non puoi spostarti più in alto."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Sei all'ultima pagina."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Sei alla prima pagina."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "La prima voce è questa."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "L'ultima voce è questa."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Sei all'ultima voce."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Sei alla prima voce."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Cerca: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Cerca all'indietro: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Nessun modello di ricerca."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Non trovato."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "Nessuna voce segnata."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "In questo menù la ricerca non è stata implementata."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "I salti non sono implementati per i dialog."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Non è possibile segnare un messaggio."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "Leggo %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr ""
+
+#: muttlib.c:835
+#, fuzzy
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "Il file è una directory, salvo lì dentro?"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "Il file è una directory, salvo lì dentro?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "File nella directory: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr ""
+"Il file esiste, lo s(o)vrascrivo, (a)ccodo, o (c) annullo l'operazione?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "oac"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "Impossibile salvare il messaggio nella mailbox POP."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s non è una mailbox!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Accodo i messaggi a %s?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "Connessione a %s chiusa."
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL non è disponibile."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "Comando di preconnessione fallito."
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Errore parlando a %s (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr ""
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "Cerco %s..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Impossibile trovare l'host \"%s\"."
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Mi connetto a %s..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "Impossibile connettersi a %s (%s)."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "Impossibile trovare abbastanza entropia nel sistema"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "Riempimento del pool di entropia: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s ha permessi insicuri!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "SSL disabilitato a causa della mancanza di entropia"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "errore di I/O"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "errore del protocollo non precisato"
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "SSL fallito: %s"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "Impossibile ottenere il certificato dal peer"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "Connessione SSL con %s (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "Sconosciuto"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[impossibile da calcolare]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[data non valida]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "Il certificato del server non è ancora valido"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "Il certificato del server è scaduto"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Questo certificato appartiene a:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Questo certificato è stato emesso da:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Questo certificato è valido"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "    da %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "    a %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Fingerprint: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "Controllo del certificato SSL"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(r)ifiuta, accetta s(o)lo adesso, (a)ccetta sempre"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "roa"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(r)ifiuta, accetta s(o)lo adesso"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "ro"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Esci  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Attenzione: impossibile salvare il certificato"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "Certificato salvato"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Tentati troppi lock, rimuovo il lock di %s?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "Impossibile fare un dotlock su %s.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "Timeout scaduto durante il tentativo di lock fcntl!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Aspetto il lock fcntl... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "Timeout scaduto durante il tentativo di lock flock!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Attesa del lock flock... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "Impossibile fare il lock di %s\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "Leggo %s..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "Scrivo %s..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "Impossibile sincronizzare la mailbox %s!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Sposto i messaggi letti in %s?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Cancello %d messaggio cancellato?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Cancello %d messaggi cancellati?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Sposto i messaggi letti in %s..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "La mailbox non è stata modificata."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d tenuti, %d spostati, %d cancellati."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d tenuti, %d cancellati."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr "Premi '%s' per (dis)abilitare la scrittura"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "Usa 'toggle-write' per riabilitare la scrittura!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "La mailbox è indicata non scrivibile. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "Effettuato il checkpoint della mailbox."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Impossibile scrivere il messaggio"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "Non disponibile in questo menù."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "PgPrec"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "PgSucc"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Vedi Allegato"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Succ"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "Il messaggio finisce qui."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "L'inizio del messaggio è questo."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Cerca all'indietro: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Cerca: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "L'help è questo."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "Non c'è altro testo citato."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "Non c'è altro testo non citato dopo quello citato."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "il messaggio multipart non ha il parametro boundary!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Errore nell'espressione: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Giorno del mese non valido: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Mese non valido: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "Data relativa non valida: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "errore nell'espressione"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "errore nel modello in: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: comando non valido"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: non gestito in questa modalità"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "parametro mancante"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "parentesi fuori posto: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "modello vuoto"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "errore: unknown op %d (segnala questo errore)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Compilo il modello da cercare..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Eseguo il comando sui messaggi corrispondenti..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "Nessun messaggio corrisponde al criterio."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "La ricerca è arrivata in fondo senza trovare una corrispondenza"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "La ricerca è arrivata all'inizio senza trovare una corrispondenza"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Ricerca interrotta."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "Passphrase di PGP dimenticata."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Errore: impossibile creare il sottoprocesso PGP --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- Fine dell'output di PGP --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr "[-- INIZIO DEL MESSAGGIO DI PGP --]\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- INIZIO DEL BLOCCO DELLA CHIAVE PUBBLICA --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr "[-- INIZIO DEL MESSAGGIO FIRMATO CON PGP --]\n"
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- FINE DEL MESSAGGIO DI PGP --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- FINE DEL BLOCCO DELLA CHIAVE PUBBLICA --]\n"
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- FINE DEL MESSAGGIO FIRMATO CON PGP --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Errore: impossibile trovare l'inizio del messaggio di PGP! --]\n"
+"\n"
+
+#: pgp.c:662
+#, fuzzy
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Errore interno. Informa <roessler@guug.de>."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Errore: non è stato possibile creare un sottoprocesso PGP! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Errore: impossibile trovare l'inizio del messaggio di PGP! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Errore: impossibile creare il file temporaneo! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr "[-- I seguenti dati sono cifrati con PGP/MIME  --]\n"
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- Fine dei dati cifrati con PGP/MIME  --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "Impossibile aprire il sottoprocesso PGP!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "Uso il keyID \"%s\" per %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "Inserisci il keyID per %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "Impossibile eseguire PGP"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "Prendo la chiave PGP..."
+
+#: pgpkey.c:486
+#, fuzzy
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "Tutte le chiavi corrispondenti sono scadute o revocate."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Seleziona  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Controlla la chiave  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "Chiavi PGP corrispondenti a <%s>."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "Chiavi PGP corrispondenti a \"%s\"."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "Impossibile aprire /dev/null"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Impossibile creare il file temporaneo"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "Key ID: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "Questa chiave non può essere usata: è scaduta/disabilitata/revocata."
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "L'ID è scaduto/disabilitato/revocato."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "L'ID ha validità indefinita."
+
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "L'ID non è valido."
+
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "L'ID è solo marginalmente valido."
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s Vuoi veramente usare questa chiave?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Inserisci il key ID: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "Eseguo PGP..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "Chiave PGP %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Cerco chiavi corrispondenti a \"%s\"..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "Il comando TOP non è gestito dal server."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "Impossibile scrivere l'header nel file temporaneo!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "Il comando UIDL non è gestito dal server."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "%s non è un percorso POP valido"
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "Prendo la lista dei messaggi..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "Impossibile scrivere il messaggio nel file temporaneo!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "Controllo se ci sono nuovi messaggi..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "L'host POP non è stato definito."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "Non c'è nuova posta nella mailbox POP."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "Cancello i messaggi dal server?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Leggo i nuovi messaggi (%d byte)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "Errore durante la scrittura della mailbox!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d messaggi letti su %d]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "Il server ha chiuso la connessione!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Autenticazione in corso (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Autenticazione in corso (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "Autenticazione APOP fallita."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "Il comando USER non è gestito dal server."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "Impossibile lasciare i messaggi sul server."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "Errore nella connessione al server: %s"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "Chiudo la connessione al server POP..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Verifica degli indici dei messaggi..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Connessione persa. Mi riconnetto al server POP?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Messaggi Rimandati"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "Non ci sono messaggi rimandati."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "Header PGP non consentito"
+
+#: postpone.c:479
+#, fuzzy
+msgid "Illegal S/MIME header"
+msgstr "Header PGP non consentito"
+
+#: postpone.c:554
+#, fuzzy
+msgid "Decryption failed."
+msgstr "Login fallito."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Nuova Ricerca"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Crea un alias"
+
+#: query.c:48
+msgid "Search"
+msgstr "Cerca"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Aspetto la risposta..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Il comando della ricerca non è definito."
+
+#: query.c:286
+msgid "Query"
+msgstr "Ricerca"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Cerca: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Ricerca '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Pipe"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Stampa"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Salvo..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Allegato salvato."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "ATTENZIONE!  Stai per sovrascrivere %s, continuo?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Allegato filtrato."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Filtra attraverso: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Manda con una pipe a: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "Non so come stampare allegati %s!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Stampo gli allegati segnati?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Stampo l'allegato?"
+
+#: recvattach.c:938
+#, fuzzy
+msgid "Can't decrypt encrypted message!"
+msgstr "Non ci sono messaggi segnati."
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Allegati"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "Non ci sono sottoparti da visualizzare!"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "Impossibile cancellare l'allegato dal server POP"
+
+#: recvattach.c:1056
+#, fuzzy
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "La cancellazione degli allegati da messaggi PGP non è gestita."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "È gestita solo la cancellazione degli allegati multiparte."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Puoi rimbalzare solo parti message/rfc822."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing message!"
+msgstr "Errore durante l'invio del messaggio."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing messages!"
+msgstr "Errore durante l'invio del messaggio."
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Impossibile aprire il file temporaneo %s."
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "Inoltro come allegati?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+"Impossibile decodificare tutti gli allegati segnati. Uso MIME per gli altri?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Inoltro incapsulato in MIME?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "Impossibile creare %s."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Non ci sono messaggi segnati."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "Non è stata trovata alcuna mailing list!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+"Impossibile decodificare tutti gli allegati segnati. Uso MIME per gli altri?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Accoda"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Inserisce"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Cancella"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "OK"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "Non trovo type2.list di mixmaster!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Seleziona una catena di remailer."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "Errore: %s non può essere usato come remailer finale di una catena."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Le catene mixmaster sono limitate a %d elementi."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "La catena di remailer è già vuota."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "Hai già selezionato il primo elemento della catena."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "Hai già selezionato l'ultimo elemento della catena."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Mixmaster non accetta header Cc o Bcc."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr "Imposta la variabile hostname al valore corretto quando usi mixmaster!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Errore nella spedizione del messaggio, il figlio è uscito con %d.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Errore durante l'invio del messaggio."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "Voce impropriamente formattata per il tipo %s in \"%s\", linea %d"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Il percorso di mailcap non è stato specificato"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "La voce di mailcap per il tipo %s non è stata trovata"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: troppo pochi argomenti"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: troppi argomenti"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Nessun soggetto, lo abbandono?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Nessun soggetto, abbandonato."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Rispondo a %s%s?"
+
+# FIXME - come tradurre questo messaggio?
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "Rispondo a %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "Non è visibile alcun messaggio segnato!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Includo il messaggio nella risposta?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Includo il messaggio citato..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "Non ho potuto includere tutti i messaggi richiesti!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "Inoltro come allegato?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Preparo il messaggio inoltrato..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Richiamo il messaggio rimandato?"
+
+#: send.c:1336
+#, fuzzy
+msgid "Edit forwarded message?"
+msgstr "Preparo il messaggio inoltrato..."
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Abbandono il messaggio non modificato?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Ho abbandonato il messaggio non modificato."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "Il messaggio non è stato spedito."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Il messaggio è stato rimandato."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Non sono stati specificati destinatari!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Non sono stati specificati destinatari."
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Nessun soggetto, abbandono l'invio?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Non è stato specificato un soggetto."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Spedisco il messaggio..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Impossibile spedire il messaggio."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Messaggio spedito."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Invio in background."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "No boundary parameter found! [segnala questo errore]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s non esiste più!"
+
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "%s non è un file regolare."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "Impossibile aprire %s"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Errore nella spedizione del messaggio, il figlio è uscito con %d (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Output del processo di consegna"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr ""
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s...  Esco.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "Preso %s...  Esco.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Preso il segnale %d...  Esco.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr ""
+
+#: smime.c:303
+msgid "Verified  "
+msgstr ""
+
+#: smime.c:306
+msgid "Unverified"
+msgstr ""
+
+#: smime.c:309
+#, fuzzy
+msgid "Expired   "
+msgstr "Esci  "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr ""
+
+#: smime.c:315
+#, fuzzy
+msgid "Invalid   "
+msgstr "Mese non valido: %s"
+
+#: smime.c:318
+#, fuzzy
+msgid "Unknown   "
+msgstr "Sconosciuto"
+
+#: smime.c:347
+#, fuzzy
+msgid "Enter keyID: "
+msgstr "Inserisci il keyID per %s: "
+
+#: smime.c:370
+#, fuzzy, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "Chiavi PGP corrispondenti a \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr ""
+
+#: smime.c:523 smime.c:592
+#, fuzzy, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "Uso il keyID \"%s\" per %s?"
+
+#: smime.c:526 smime.c:595
+#, fuzzy, c-format
+msgid "Use ID %s for %s ?"
+msgstr "Uso il keyID \"%s\" per %s?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr ""
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+#, fuzzy
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "[-- Errore: impossibile creare il sottoprocesso PGP --]\n"
+
+#: smime.c:1197
+#, fuzzy
+msgid "no certfile"
+msgstr "Impossibile creare il filtro"
+
+#: smime.c:1200
+#, fuzzy
+msgid "no mbox"
+msgstr "(nessuna mailbox)"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr ""
+
+#: smime.c:1381
+#, fuzzy
+msgid "Warning: Intermediate certificate not found."
+msgstr "Attenzione: impossibile salvare il certificato"
+
+#: smime.c:1426
+#, fuzzy
+msgid "Can't open OpenSSL subprocess!"
+msgstr "Impossibile aprire il sottoprocesso PGP!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr ""
+
+#: smime.c:1629 smime.c:1751
+#, fuzzy
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- Fine dell'output di PGP --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+#, fuzzy
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Errore: impossibile creare il sottoprocesso PGP --]\n"
+
+#: smime.c:1755
+#, fuzzy
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr "[-- I seguenti dati sono cifrati con PGP/MIME  --]\n"
+
+#: smime.c:1758
+#, fuzzy
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr ""
+"[-- I seguenti dati sono firmati --]\n"
+"\n"
+
+#: smime.c:1822
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr "[-- Fine dei dati cifrati con PGP/MIME  --]\n"
+
+#: smime.c:1824
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr "[-- Fine dei dati firmati --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Ordino la mailbox..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "Could not find sorting function! [segnala questo bug]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(nessuna mailbox)"
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "Il messaggio padre non è visibil in questa visualizzazione limitata."
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "Il messaggio padre non è disponibile."
+
+#, fuzzy
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "Eseguo PGP..."
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "Rimbalzo il messaggio a %s...?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "Rimbalzo i messaggi a %s...?"
+
+#, fuzzy
+#~ msgid "ewsabf"
+#~ msgstr "esabf"
+
+#, fuzzy
+#~ msgid "Certificate *NOT* added."
+#~ msgstr "Certificato salvato"
diff --git a/po/ja.gmo b/po/ja.gmo
new file mode 100644 (file)
index 0000000..f9d3d12
Binary files /dev/null and b/po/ja.gmo differ
diff --git a/po/ja.po b/po/ja.po
new file mode 100644 (file)
index 0000000..0522e7b
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,4162 @@
+# Japanese messages for Mutt.
+# Copyright (C) 2002 mutt-j ML members.
+# FIRST AUTHOR Kikutani Makoto <kikutani@Galaxy.net>, 1999.
+# 2nd AUTHOR OOTA,Toshiya <oota@mspd.mt.nec.co.jp>, 2002.
+#  (temporarily with Tamotsu TAKAHASHI <tamo@momonga-linux.org> for 1.5.x)
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 1.5.5.1\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2003-11-17 17:10+0900\n"
+"Last-Translator: Tamotsu TAKAHASHI <tamo@momonga-linux.org>\n"
+"Language-Team: mutt-j <mutt-j@ribbon.or.jp>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=euc-jp\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "%s ¤Î¥æ¡¼¥¶Ì¾: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "%s@%s ¤Î¥Ñ¥¹¥ï¡¼¥É: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Ìá¤ë"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "ºï½ü"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "ºï½ü¤ò²ò½ü"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "ÁªÂò"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "¥Ø¥ë¥×"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "ÊÌ̾¤¬¤Ê¤¤!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "ÊÌ̾"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "ÊÌ̾ÆþÎÏ: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "¤¹¤Ç¤Ë¤³¤Î̾Á°¤ÎÊÌ̾¤¬¤¢¤ë!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr "·Ù¹ð: ¤³¤ÎÊÌ̾¤ÏÀµ¾ï¤ËÆ°ºî¤·¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤¡£½¤Àµ?"
+
+#: alias.c:279
+msgid "Address: "
+msgstr "¥¢¥É¥ì¥¹: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr "¥¨¥é¡¼: '%s' ¤ÏÉÔÀµ¤Ê IDN."
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "¸Ä¿Í̾: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] Î»²ò?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Êݸ¤¹¤ë¥Õ¥¡¥¤¥ë: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "ÊÌ̾¤òÄɲä·¤¿¡£"
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "̾Á°¤Î¥Æ¥ó¥×¥ì¡¼¥È¤Ë°ìÃפµ¤»¤é¤ì¤Ê¤¤¡£Â³¹Ô?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "Mailcap ÊÔ½¸¥¨¥ó¥È¥ê¤Ë %%s ¤¬É¬Í×"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "\"%s\" ¼Â¹Ô¥¨¥é¡¼!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "¥Ø¥Ã¥À²òÀϤΤ¿¤á¤Î¥Õ¥¡¥¤¥ë¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¡£"
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "¥Ø¥Ã¥Àºï½ü¤Î¤¿¤á¤Î¥Õ¥¡¥¤¥ë¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¡£"
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "%s ¤Î¤¿¤á¤Î mailcap ÊÔ½¸¥¨¥ó¥È¥ê¤¬¤Ê¤¤¤Î¤Ç¶õ¥Õ¥¡¥¤¥ë¤òºîÀ®¡£"
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "Mailcap ÊÔ½¸¥¨¥ó¥È¥ê¤Ë¤Ï %%s ¤¬É¬Í×"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "%s ¤Î¤¿¤á¤Î mailcap ÊÔ½¸¥¨¥ó¥È¥ê¤¬¤Ê¤¤"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "mailcap ¤Ë°ìÃ×¥¨¥ó¥È¥ê¤¬¤Ê¤¤¡£¥Æ¥­¥¹¥È¤È¤·¤Æɽ¼¨Ãæ¡£"
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "MIME ·Á¼°¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£ÅºÉÕ¥Õ¥¡¥¤¥ë¤òɽ¼¨¤Ç¤­¤Ê¤¤¡£"
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "¥Õ¥£¥ë¥¿¤òºîÀ®¤Ç¤­¤Ê¤¤"
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "¥Õ¥£¥ë¥¿¤òºîÀ®¤Ç¤­¤Ê¤¤"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "½ñ¤­¹þ¤ß¼ºÇÔ!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "¤É¤Î¤è¤¦¤Ë°õºþ¤¹¤ë¤«ÉÔÌÀ!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "¥Ç¥£¥ì¥¯¥È¥êÊѹ¹"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "¥Þ¥¹¥¯"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s ¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï¤Ê¤¤¡£"
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹ [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "¹ØÆÉ [%s], ¥Õ¥¡¥¤¥ë¥Þ¥¹¥¯: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê [%s], ¥Õ¥¡¥¤¥ë¥Þ¥¹¥¯: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤ÏźÉդǤ­¤Ê¤¤!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "¥Õ¥¡¥¤¥ë¥Þ¥¹¥¯¤Ë°ìÃפ¹¤ë¥Õ¥¡¥¤¥ë¤¬¤Ê¤¤"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "ºîÀ®µ¡Ç½¤Ï IMAP ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î¤ß¤Î¥µ¥Ý¡¼¥È"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "ºï½üµ¡Ç½¤Ï IMAP ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î¤ß¤Î¥µ¥Ý¡¼¥È"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "ËÜÅö¤Ë¥á¡¼¥ë¥Ü¥Ã¥¯¥¹ \"%s\" ¤òºï½ü?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ïºï½ü¤µ¤ì¤¿¡£"
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ïºï½ü¤µ¤ì¤Ê¤«¤Ã¤¿¡£"
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "¥Ç¥£¥ì¥¯¥È¥êÊѹ¹Àè: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤Î¥¹¥­¥ã¥ó¥¨¥é¡¼¡£"
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "¥Õ¥¡¥¤¥ë¥Þ¥¹¥¯: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "µÕ½ç¤ÎÀ°Îó: (d)ÆüÉÕ,(a)ABC½ç,(z)¥µ¥¤¥º,(n)À°Î󤷤ʤ¤?"
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "À°Îó: (d)ÆüÉÕ,(a)ABC½ç,(z)¥µ¥¤¥º,(n)À°Î󤷤ʤ¤?"
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "dazn"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "¿·µ¬¥Õ¥¡¥¤¥ë̾: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤Ï±ÜÍ÷¤Ç¤­¤Ê¤¤"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "¥Õ¥¡¥¤¥ë±ÜÍ÷¥¨¥é¡¼"
+
+#: buffy.c:442
+msgid "New mail in "
+msgstr "¿·Ãå¥á¡¼¥ë¤¢¤ê: "
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "¿§ %s ¤Ï¤³¤ÎüËö¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s ¤È¤¤¤¦¿§¤Ï¤Ê¤¤"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s ¤È¤¤¤¦¥ª¥Ö¥¸¥§¥¯¥È¤Ï¤Ê¤¤"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s ¥³¥Þ¥ó¥É¤Ï¥¤¥ó¥Ç¥Ã¥¯¥¹¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤Î¤ßÍ­¸ú"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: °ú¿ô¤¬¾¯¤Ê¤¹¤®¤ë"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "°ú¿ô¤¬¤Ê¤¤¡£"
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: °ú¿ô¤¬¾¯¤Ê¤¹¤®¤ë"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: °ú¿ô¤¬¾¯¤Ê¤¹¤®¤ë"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s ¤È¤¤¤¦Â°À­¤Ï¤Ê¤¤"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "°ú¿ô¤¬¾¯¤Ê¤¹¤®¤ë"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "°ú¿ô¤¬Â¿¤¹¤®¤ë"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "´ûÄêÃͤ理¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "PGP ½ð̾¤ò¸¡¾Ú?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "°ì»þ¥Õ¥¡¥¤¥ë¤òºîÀ®¤Ç¤­¤Ê¤«¤Ã¤¿!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "ɽ¼¨ÍÑ¥Õ¥£¥ë¥¿¤òºîÀ®¤Ç¤­¤Ê¤¤"
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "¥á¥Ã¥»¡¼¥¸¤ò¥³¥Ô¡¼¤Ç¤­¤Ê¤«¤Ã¤¿"
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr "S/MIME ½ð̾¤Î¸¡¾Ú¤ËÀ®¸ù¤·¤¿¡£"
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr "S/MIME ¾ÚÌÀ½ñ½êÍ­¼Ô¤¬Á÷¿®¼Ô¤Ë°ìÃפ·¤Ê¤¤¡£"
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr "S/MIME ½ð̾¤Ï¸¡¾Ú¤Ç¤­¤Ê¤«¤Ã¤¿¡£"
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "PGP ½ð̾¤Î¸¡¾Ú¤ËÀ®¸ù¤·¤¿¡£"
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "PGP ½ð̾¤Ï¸¡¾Ú¤Ç¤­¤Ê¤«¤Ã¤¿¡£"
+
+#: commands.c:223
+msgid "Command: "
+msgstr "¥³¥Þ¥ó¥É: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "¥á¥Ã¥»¡¼¥¸¤ÎºÆÁ÷Àè: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "¥¿¥°ÉÕ¤­¥á¥Ã¥»¡¼¥¸¤ÎºÆÁ÷Àè: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "¥¢¥É¥ì¥¹²òÀÏ¥¨¥é¡¼!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr "ÉÔÀµ¤Ê IDN: '%s'"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "%s ¤Ø¥á¥Ã¥»¡¼¥¸ºÆÁ÷"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "%s ¤Ø¥á¥Ã¥»¡¼¥¸ºÆÁ÷"
+
+#: commands.c:294 recvcmd.c:192
+msgid "Message not bounced."
+msgstr "¥á¥Ã¥»¡¼¥¸¤ÏºÆÁ÷¤µ¤ì¤Ê¤«¤Ã¤¿¡£"
+
+#: commands.c:294 recvcmd.c:192
+msgid "Messages not bounced."
+msgstr "¥á¥Ã¥»¡¼¥¸¤ÏºÆÁ÷¤µ¤ì¤Ê¤«¤Ã¤¿¡£"
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "¥á¥Ã¥»¡¼¥¸¤òºÆÁ÷¤·¤¿¡£"
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "¥á¥Ã¥»¡¼¥¸¤òºÆÁ÷¤·¤¿¡£"
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "¥Õ¥£¥ë¥¿¥×¥í¥»¥¹¤òºîÀ®¤Ç¤­¤Ê¤¤"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "¥³¥Þ¥ó¥É¤Ø¤Î¥Ñ¥¤¥×: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "°õºþ¥³¥Þ¥ó¥É¤¬Ì¤ÄêµÁ¡£"
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "¥á¥Ã¥»¡¼¥¸¤ò°õºþ?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "¥¿¥°ÉÕ¤­¥á¥Ã¥»¡¼¥¸¤ò°õºþ?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "¥á¥Ã¥»¡¼¥¸¤Ï°õºþ¤µ¤ì¤¿"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "¥á¥Ã¥»¡¼¥¸¤Ï°õºþ¤µ¤ì¤¿"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "¥á¥Ã¥»¡¼¥¸¤Ï°õºþ¤Ç¤­¤Ê¤«¤Ã¤¿"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "¥á¥Ã¥»¡¼¥¸¤Ï°õºþ¤Ç¤­¤Ê¤«¤Ã¤¿"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"µÕ½ç¤ÎÀ°Îó d)»þ/f)Á÷¼Ô/r)Ãå½ç/s)Âê/o)°¸Àè/t)¥¹¥ì/u)̵/z)¥µ¥¤¥º/c)ÆÀÅÀ?:"
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr "À°Îó d)»þ/f)Á÷¼Ô/r)Ãå½ç/s)Âê/o)°¸Àè/t)¥¹¥ì/u)̵/z)¥µ¥¤¥º/c)ÆÀÅÀ?:"
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dfrsotuzc"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "¥·¥§¥ë¥³¥Þ¥ó¥É: "
+
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "%s¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¥Ç¥³¡¼¥É¤·¤ÆÊݸ"
+
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "%s¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¥Ç¥³¡¼¥É¤·¤Æ¥³¥Ô¡¼"
+
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "%s¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ËÉü¹æ²½¤·¤ÆÊݸ"
+
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "%s¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ËÉü¹æ²½¤·¤Æ¥³¥Ô¡¼"
+
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "%s¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ËÊݸ"
+
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "%s¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¥³¥Ô¡¼"
+
+#: commands.c:706
+msgid " tagged"
+msgstr "¥¿¥°ÉÕ¤­¥á¥Ã¥»¡¼¥¸¤ò"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "%s ¤Ë¥³¥Ô¡¼Ãæ..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "Á÷¿®»þ¤Ë %s ¤ËÊÑ´¹?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Content-Type¤ò %s ¤ËÊѹ¹¤·¤¿¡£"
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "ʸ»ú¥»¥Ã¥È¤ò %s ¤ËÊѹ¹¤·¤¿; %s¡£"
+
+#: commands.c:914
+msgid "not converting"
+msgstr "ÊÑ´¹¤Ê¤·"
+
+#: commands.c:914
+msgid "converting"
+msgstr "ÊÑ´¹¤¢¤ê"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤¬¤Ê¤¤¡£"
+
+#: compose.c:84
+msgid "Send"
+msgstr "Á÷¿®"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Ãæ»ß"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "¥Õ¥¡¥¤¥ëźÉÕ"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "ÆâÍÆÀâÌÀ"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "½ð̾,°Å¹æ²½"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "°Å¹æ²½"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "½ð̾"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "ʿʸ"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr "    ½ð̾: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<´ûÄêÃÍ>"
+
+#: compose.c:149
+msgid "Encrypt with: "
+msgstr "  °Å¹æ²½Êý¼°: "
+
+#: compose.c:165
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "PGP (e)°Å¹æ²½,(s)½ð̾,(a)..¤È¤·¤Æ½ð̾,(b)ξ¼Ô,(f)²ò½ü?"
+
+#: compose.c:166
+msgid "esabf"
+msgstr "esabf"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "..¤È¤·¤Æ½ð̾: "
+
+#: compose.c:227
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"S/MIME (e)°Å¹æ²½,(s)½ð̾,(w)..¤Ç°Å¹æ²½,(a)..¤È¤·¤Æ½ð̾,(b)ξ¼Ô,(f)²ò½ü?"
+
+#: compose.c:228
+msgid "eswabf"
+msgstr "eswabf"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr "1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, (f)²ò½ü? "
+
+#: compose.c:238
+msgid "12345f"
+msgstr "12345f"
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] ¤Ï¤â¤Ï¤ä¸ºß¤·¤Ê¤¤!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] ¤ÏÊѹ¹¤µ¤ì¤¿¡£¥¨¥ó¥³¡¼¥É¹¹¿·?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- ÅºÉÕ¥Õ¥¡¥¤¥ë"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr "·Ù¹ð: '%s' ¤ÏÉÔÀµ¤Ê IDN."
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Í£°ì¤ÎźÉÕ¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Æ¤Ï¤¤¤±¤Ê¤¤¡£"
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr "\"%s\" Ãæ¤ËÉÔÀµ¤Ê IDN: '%s'"
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "ÁªÂò¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤òźÉÕÃæ..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "%s ¤ÏźÉդǤ­¤Ê¤¤!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤òźÉÕ¤¹¤ë¤¿¤á¤Ë¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ò¥ª¡¼¥×¥ó"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "¤½¤Î¥Õ¥©¥ë¥À¤Ë¤Ï¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤¡£"
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "źÉÕ¤·¤¿¤¤¥á¥Ã¥»¡¼¥¸¤Ë¥¿¥°¤òÉÕ¤±¤è!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "źÉդǤ­¤Ê¤¤!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "¥³¡¼¥ÉÊÑ´¹¤Ï¥Æ¥­¥¹¥È·¿ÅºÉÕ¥Õ¥¡¥¤¥ë¤Ë¤Î¤ßÍ­¸ú¡£"
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "¸½ºß¤ÎźÉÕ¥Õ¥¡¥¤¥ë¤ÏÊÑ´¹¤µ¤ì¤Ê¤¤¡£"
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "¸½ºß¤ÎźÉÕ¥Õ¥¡¥¤¥ë¤ÏÊÑ´¹¤µ¤ì¤ë¡£"
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "ÉÔÀµ¤Ê¥¨¥ó¥³¡¼¥ÉË¡¡£"
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤Î¥³¥Ô¡¼¤òÊݸ?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "¥ê¥Í¡¼¥à (°ÜÆ°) Àè: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "%s ¤ò°À­Ä´ºº¤Ç¤­¤Ê¤¤: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "¿·µ¬¥Õ¥¡¥¤¥ë: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Content-Type ¤Ï base/sub ¤È¤¤¤¦·Á¼°¤Ë¤¹¤ë¤³¤È"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "%s ¤ÏÉÔÌÀ¤Ê Content-Type"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤­¤Ê¤¤"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "¤Ä¤Þ¤êźÉÕ¥Õ¥¡¥¤¥ë¤ÎºîÀ®¤Ë¼ºÇÔ¤·¤¿¤È¤¤¤¦¤³¤È¤À"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤ò½ñ¤­¤«¤±¤ÇÊÝα?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "¥á¥Ã¥»¡¼¥¸¤ò¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë½ñ¤­¹þ¤à"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "¥á¥Ã¥»¡¼¥¸¤ò %s ¤Ë½ñ¤­¹þ¤ßÃæ..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "¥á¥Ã¥»¡¼¥¸¤Ï½ñ¤­¹þ¤Þ¤ì¤¿¡£"
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr "S/MIME ¤¬´û¤ËÁªÂò¤µ¤ì¤Æ¤¤¤ë¡£²ò½ü¤·¤Æ·Ñ³?"
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr "PGP ¤¬´û¤ËÁªÂò¤µ¤ì¤Æ¤¤¤ë¡£²ò½ü¤·¤Æ·Ñ³?"
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr " (¸½ºß»þ¹ï: %c)"
+
+#: crypt.c:71
+#, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- %s ½ÐÎϤϰʲ¼¤ÎÄ̤ê%s --]\n"
+
+#: crypt.c:86
+msgid "Passphrase(s) forgotten."
+msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬¤¹¤Ù¤Æ¥á¥â¥ê¤«¤é¾Ãµî¤µ¤ì¤¿¡£"
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "PGP ¥Ñ¥¹¥Õ¥ì¡¼¥ºÆþÎÏ:"
+
+#: crypt.c:147
+msgid "Enter SMIME passphrase:"
+msgstr "S/MIME ¥Ñ¥¹¥Õ¥ì¡¼¥ºÆþÎÏ:"
+
+#: crypt.c:192
+msgid "Create a traditional (inline) PGP message?"
+msgstr "ÅÁÅýŪ¤Ê (¥¤¥ó¥é¥¤¥ó¤Î) PGP ¥á¥Ã¥»¡¼¥¸¤òºîÀ®?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "PGP µ¯Æ°Ãæ..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr "ÆâÍÆ¥Ò¥ó¥È¤Î¤Ê¤¤ S/MIME ¥á¥Ã¥»¡¼¥¸¤Ï̤¥µ¥Ý¡¼¥È¡£"
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr "PGP ¸°¤ÎŸ³«¤ò»î¹ÔÃæ...\n"
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr "S/MIME ¾ÚÌÀ½ñ¤ÎŸ³«¤ò»î¹ÔÃæ...\n"
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- ¥¨¥é¡¼: multipart/signed ¹½Â¤¤¬Ì·½â¤·¤Æ¤¤¤ë! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- ¥¨¥é¡¼: ÉÔÌÀ¤Ê multipart/signed ¥×¥í¥È¥³¥ë %s! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- ·Ù¹ð: ¤³¤Î Mutt ¤Ç¤Ï %s/%s ½ð̾¤ò¸¡¾Ú¤Ç¤­¤Ê¤¤ --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- °Ê²¼¤Î¥Ç¡¼¥¿¤Ï½ð̾¤µ¤ì¤Æ¤¤¤ë --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- ·Ù¹ð: °ì¤Ä¤â½ð̾¤ò¸¡½Ð¤Ç¤­¤Ê¤«¤Ã¤¿ --]\n"
+"\n"
+
+#: crypt.c:924
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- ½ð̾¥Ç¡¼¥¿½ªÎ» --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "yes"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "no"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Mutt ¤òÈ´¤±¤ë?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "ÉÔÌÀ¤Ê¥¨¥é¡¼"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "³¤±¤ë¤Ë¤Ï²¿¤«¥­¡¼¤ò..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr "('?' ¤Ç°ìÍ÷): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "³«¤¤¤Æ¤¤¤ë¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬¤Ê¤¤¡£"
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤¡£"
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ÏÆɤ߽Ф·ÀìÍÑ¡£"
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "¤³¤Îµ¡Ç½¤Ï¥á¥Ã¥»¡¼¥¸ÅºÉե⡼¥É¤Ç¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Ê¤¤¡£"
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "²Ä»ë¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤¡£"
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "Æɤ߽Ф·ÀìÍѥ᡼¥ë¥Ü¥Ã¥¯¥¹¤Ç¤ÏÊѹ¹¤Î½ñ¤­¹þ¤ß¤òÀÚÂؤǤ­¤Ê¤¤!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "¥Õ¥©¥ë¥Àæ½Ð»þ¤Ë¥Õ¥©¥ë¥À¤Ø¤ÎÊѹ¹¤¬½ñ¤­¹þ¤Þ¤ì¤ë¡£"
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "¥Õ¥©¥ë¥À¤Ø¤ÎÊѹ¹¤Ï½ñ¤­¹þ¤Þ¤ì¤Ê¤¤¡£"
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Ãæ»ß"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Êݸ"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "¥á¡¼¥ë"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "ÊÖ¿®"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Á´°÷¤ËÊÖ¿®"
+
+# ¡ÖÉÔÀµ¤Ê²ÄǽÀ­¤¢¤ê¡×¤À¤È½ÅÂç¤Ê¤³¤È¤Î¤è¤¦¤Ë»×¤¨¤Æ¤·¤Þ¤¦¤Î¤ÇÊѹ¹¤·¤¿¡£
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬³°Éô¤«¤éÊѹ¹¤µ¤ì¤¿¡£¥Õ¥é¥°¤¬Àµ³Î¤Ç¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤¡£"
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "¤³¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¿·Ãå¥á¡¼¥ë¡£"
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬³°Éô¤«¤éÊѹ¹¤µ¤ì¤¿¡£"
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "¥¿¥°ÉÕ¤­¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤¡£"
+
+#: curs_main.c:653 menu.c:896
+msgid "Nothing to do."
+msgstr "²¿¤â¤·¤Ê¤¤¡£"
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "¥á¥Ã¥»¡¼¥¸ÈÖ¹æ¤ò»ØÄê: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "°ú¿ô¤Ï¥á¥Ã¥»¡¼¥¸ÈÖ¹æ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£"
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "¤½¤Î¥á¥Ã¥»¡¼¥¸¤Ï²Ä»ë¤Ç¤Ï¤Ê¤¤¡£"
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "ÉÔÀµ¤Ê¥á¥Ã¥»¡¼¥¸Èֹ档"
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "¥á¥Ã¥»¡¼¥¸¤òºï½ü¤¹¤ë¤¿¤á¤Î¥Ñ¥¿¡¼¥ó: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "¸½ºßÍ­¸ú¤ÊÀ©¸Â¥Ñ¥¿¡¼¥ó¤Ï¤Ê¤¤¡£"
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "À©¸Â¥Ñ¥¿¡¼¥ó: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "¥á¥Ã¥»¡¼¥¸¤Îɽ¼¨¤òÀ©¸Â¤¹¤ë¥Ñ¥¿¡¼¥ó: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Mutt ¤òÃæ»ß?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "¥á¥Ã¥»¡¼¥¸¤Ë¥¿¥°¤òÉÕ¤±¤ë¤¿¤á¤Î¥Ñ¥¿¡¼¥ó: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "¥á¥Ã¥»¡¼¥¸¤Îºï½ü¤ò²ò½ü¤¹¤ë¤¿¤á¤Î¥Ñ¥¿¡¼¥ó: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "¥á¥Ã¥»¡¼¥¸¤Î¥¿¥°¤ò³°¤¹¤¿¤á¤Î¥Ñ¥¿¡¼¥ó: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Æɤ߽Ф·ÀìÍѥ⡼¥É¤Ç¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ò¥ª¡¼¥×¥ó"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ò¥ª¡¼¥×¥ó"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s ¤Ï¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ç¤Ï¤Ê¤¤¡£"
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Êݸ¤·¤Ê¤¤¤Ç Mutt ¤òÈ´¤±¤ë?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "¤¹¤Ç¤ËºÇ¸å¤Î¥á¥Ã¥»¡¼¥¸¡£"
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "̤ºï½ü¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤¡£"
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "¤¹¤Ç¤ËºÇ½é¤Î¥á¥Ã¥»¡¼¥¸¡£"
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "¸¡º÷¤Ï°ìÈÖ¾å¤ËÌá¤Ã¤¿¡£"
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "¸¡º÷¤Ï°ìÈÖ²¼¤ËÌá¤Ã¤¿¡£"
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "¿·Ãå¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "̤ÆÉ¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤"
+
+# ÆüËܸì¤Ç¤Ï¸ì½ç¤¬°ã¤¦¤Î¤Ç¤¹ (T_T
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " (¤³¤ÎÀ©¸Âɽ¼¨¾õÂ֤ǤÏ)"
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "POP ¥µ¡¼¥Ð¾å¤Ç¤Ï¡Ö½ÅÍסץե饰¤òÊѹ¹¤Ç¤­¤Ê¤¤¡£"
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "¤â¤¦¥¹¥ì¥Ã¥É¤¬¤Ê¤¤¡£"
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "¤¹¤Ç¤ËºÇ½é¤Î¥¹¥ì¥Ã¥É¡£"
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "¥¹¥ì¥Ã¥Éɽ¼¨¤¬Í­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤Ê¤¤¡£"
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "¥¹¥ì¥Ã¥ÉÃæ¤Ë̤ÆÉ¥á¥Ã¥»¡¼¥¸¤¬¤¢¤ë¡£"
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "POP ¥µ¡¼¥Ð¾å¤Ç¤Ï¥á¥Ã¥»¡¼¥¸¤òÊÔ½¸¤Ç¤­¤Ê¤¤¡£"
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\t¹Ô¤¬ ~ ¤Ç»Ï¤Þ¤ë¤È¤­¤ÎºÇ½é¤Î ~ ¤òÆþÎÏ\n"
+"~b users\tBcc: ¥Õ¥£¡¼¥ë¥É¤Ë¥æ¡¼¥¶¤òÄɲÃ\n"
+"~c users\tCc: ¥Õ¥£¡¼¥ë¥É¤Ë¥æ¡¼¥¶¤òÄɲÃ\n"
+"~f messages\t¥á¥Ã¥»¡¼¥¸¤ò¼è¤ê¹þ¤ß\n"
+"~F messages\t¥Ø¥Ã¥À¤â´Þ¤á¤ë¤³¤È¤ò½ü¤±¤Ð ~f ¤ÈƱ¤¸\n"
+"~h\t\t¥á¥Ã¥»¡¼¥¸¥Ø¥Ã¥À¤òÊÔ½¸\n"
+"~m messages\t¥á¥Ã¥»¡¼¥¸¤ò°úÍѤΰ٤˼è¤ê¹þ¤ß\n"
+"~M messages\t¥Ø¥Ã¥À¤ò´Þ¤á¤ë¤³¤È¤ò½ü¤±¤Ð ~m ¤ÈƱ¤¸\n"
+"~p\t\t¥á¥Ã¥»¡¼¥¸¤ò°õºþ\n"
+"~q\t\t¥Õ¥¡¥¤¥ë¤Ø½ñ¤­¹þ¤ó¤Ç¥¨¥Ç¥£¥¿¤ò½ªÎ»\n"
+"~r file\t\t¥¨¥Ç¥£¥¿¤Ë¥Õ¥¡¥¤¥ë¤òÆɤ߽Ф·\n"
+"~t users\tTo: ¥Õ¥£¡¼¥ë¥É¤Ë¥æ¡¼¥¶¤òÄɲÃ\n"
+"~u\t\tÁ°¤Î¹Ô¤òºÆ¸Æ½Ð¤·\n"
+"~v\t\t$visual ¥¨¥Ç¥£¥¿¤Ç¥á¥Ã¥»¡¼¥¸¤òÊÔ½¸\n"
+"~w file\t\t¥á¥Ã¥»¡¼¥¸¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤ß\n"
+"~x\t\tÊѹ¹¤òÃæ»ß¤·¤Æ¥¨¥Ç¥£¥¿¤ò½ªÎ»\n"
+"~?\t\t¤³¤Î¥á¥Ã¥»¡¼¥¸\n"
+".\t\t¤³¤Îʸ»ú¤Î¤ß¤Î¹Ô¤ÇÆþÎϤò½ªÎ»\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d ¤ÏÉÔÀµ¤Ê¥á¥Ã¥»¡¼¥¸Èֹ档\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(¥á¥Ã¥»¡¼¥¸¤Î½ªÎ»¤Ï . ¤Î¤ß¤Î¹Ô¤òÆþÎÏ)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î»ØÄ꤬¤Ê¤¤¡£\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "¥á¥Ã¥»¡¼¥¸ÆâÍÆ:\n"
+
+# ¥á¥Ã¥»¡¼¥¸ÆâÍƤÎɽ¼¨½ªÎ»¸å¤Ë½Ð¤ë¤Î¤ÇÌ¿Îá¤À¤È»×¤¦¡£
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(·Ñ³¤»¤è)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "¥Õ¥¡¥¤¥ë̾¤Î»ØÄ꤬¤Ê¤¤¡£\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "¥á¥Ã¥»¡¼¥¸¤ËÆâÍƤ¬°ì¹Ô¤â¤Ê¤¤¡£\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr "%s Ãæ¤ËÉÔÀµ¤Ê IDN: '%s'\n"
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s ¤ÏÉÔÌÀ¤Ê¥¨¥Ç¥£¥¿¥³¥Þ¥ó¥É (~? ¤Ç¥Ø¥ë¥×)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "°ì»þ¥Õ¥©¥ë¥À¤òºîÀ®¤Ç¤­¤Ê¤«¤Ã¤¿: %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "°ì»þ¥á¡¼¥ë¥Õ¥©¥ë¥À¤Ë½ñ¤­¹þ¤á¤Ê¤«¤Ã¤¿: %s"
+
+#: editmsg.c:101
+#, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "°ì»þ¥á¡¼¥ë¥Õ¥©¥ë¥À¤ÎºÇ¸å¤Î¹Ô¤ò¾Ã¤»¤Ê¤«¤Ã¤¿: %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "¥á¥Ã¥»¡¼¥¸¥Õ¥¡¥¤¥ë¤¬¶õ!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "¥á¥Ã¥»¡¼¥¸¤ÏÊѹ¹¤µ¤ì¤Æ¤¤¤Ê¤¤!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "¥á¥Ã¥»¡¼¥¸¥Õ¥¡¥¤¥ë¤ò¥ª¡¼¥×¥ó¤Ç¤­¤Ê¤¤: %s"
+
+# %s ¤Ï strerror(errno) ¤Î¤è¤¦¤Ç¤¢¤ë¡£
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "¥Õ¥©¥ë¥À¤ËÄɲäǤ­¤Ê¤¤: %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "¥¨¥é¡¼¡£°ì»þ¥Õ¥¡¥¤¥ë %s ¤ÏÊÝ´É"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "¥Õ¥é¥°ÀßÄê"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "¥Õ¥é¥°²ò½ü"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr "[-- ¥¨¥é¡¼: ¤É¤Î Multipart/Alternative ¥Ñ¡¼¥È¤âɽ¼¨¤Ç¤­¤Ê¤«¤Ã¤¿! --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- ÅºÉÕ¥Õ¥¡¥¤¥ë #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- ¥¿¥¤¥×: %s/%s, ¥¨¥ó¥³¡¼¥ÉË¡: %s, ¥µ¥¤¥º: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- %s ¤ò»È¤Ã¤¿¼«Æ°É½¼¨ --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "¼«Æ°É½¼¨¥³¥Þ¥ó¥É %s µ¯Æ°"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- %s ¤ò¼Â¹Ô¤Ç¤­¤Ê¤¤¡£ --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- %s ¤Îɸ½à¥¨¥é¡¼½ÐÎϤò¼«Æ°É½¼¨ --]\n"
+
+# ¡Ö»ØÄê¡×¤Ã¤ÆɬÍס©¤Ï¤ß¤Ç¤½¤¦¤Ê¤ó¤Ç¤¹¤±¤É
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- ¥¨¥é¡¼: message/external-body ¤Ë access-type ¥Ñ¥é¥á¡¼¥¿¤Î»ØÄ꤬¤Ê¤¤ --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- ¤³¤Î %s/%s ·Á¼°ÅºÉÕ¥Õ¥¡¥¤¥ë"
+
+# °ì¹Ô¤Ë¤ª¤µ¤Þ¤é¤Ê¤¤¤Èµ¤»ý¤Á°­¤¤¤Î¤Ç¡Ö¥µ¥¤¥º¡×¤ò¤±¤º¤Ã¤¿¤ê¤·¤¿
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(%s ¥Ð¥¤¥È)"
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "¤Ïºï½üºÑ¤ß --]\n"
+
+# ËÜÅö¤Ï¡Ö¤³¤Î¥Õ¥¡¥¤¥ë¤Ï¡Á·î¡ÁÆü¤Ëºï½üºÑ¤ß¡×¤È¤·¤¿¤¤¤Î¤À¤¬¡£
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- (%s ¤Ëºï½ü) --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- Ì¾Á°: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- ¤³¤Î %s/%s ·Á¼°ÅºÉÕ¥Õ¥¡¥¤¥ë¤Ï´Þ¤Þ¤ì¤Æ¤ª¤é¤º¡¢ --]\n"
+
+# °ì¹Ô¤Ë¤·¤Æ¤âÂç¾æÉפÀ¤È»×¤¦¤Î¤À¤¬¤Ê¤¡¡Ä¡Ä
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+"[-- ¤«¤Ä¡¢»ØÄꤵ¤ì¤¿³°Éô¤Î¥½¡¼¥¹¤Ï´ü¸Â¤¬ --]\n"
+"[-- Ëþλ¤·¤Æ¤¤¤ë¡£ --]\n"
+
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr "[-- ¤«¤Ä¡¢»ØÄꤵ¤ì¤¿ access-type %s ¤Ï̤¥µ¥Ý¡¼¥È --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "¥¨¥é¡¼: multipart/signed ¤Ë¥×¥í¥È¥³¥ë¤¬¤Ê¤¤¡£"
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "¥¨¥é¡¼: multipart/encrypted ¤Ë¥×¥í¥È¥³¥ë¥Ñ¥é¥á¡¼¥¿¤¬¤Ê¤¤!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "°ì»þ¥Õ¥¡¥¤¥ë¤ò¥ª¡¼¥×¥ó¤Ç¤­¤Ê¤¤!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s ·Á¼°¤Ï̤¥µ¥Ý¡¼¥È "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(¤³¤Î¥Ñ¡¼¥È¤òɽ¼¨¤¹¤ë¤Ë¤Ï '%s' ¤ò»ÈÍÑ)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "(¥­¡¼¤Ë 'view-attachments' ¤ò³ä¤êÅö¤Æ¤ëɬÍפ¬¤¢¤ë!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: ¥Õ¥¡¥¤¥ë¤òźÉդǤ­¤Ê¤¤"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "¥¨¥é¡¼: ¤³¤Î¥Ð¥°¤ò¥ì¥Ý¡¼¥È¤»¤è"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<ÉÔÌÀ>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"°ìÈÌŪ¤Ê¥­¡¼¥Ð¥¤¥ó¥É:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"̤¥Ð¥¤¥ó¥É¤Îµ¡Ç½:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "%s ¤Î¥Ø¥ë¥×"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: ¥Õ¥Ã¥¯Æ⤫¤é¤Ï unhook * ¤Ç¤­¤Ê¤¤"
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: %s ¤ÏÉÔÌÀ¤Ê¥Õ¥Ã¥¯¥¿¥¤¥×"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: %s ¤ò %s Æ⤫¤éºï½ü¤Ç¤­¤Ê¤¤¡£"
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "ÍøÍѤǤ­¤ëǧ¾Ú½èÍý¤¬¤Ê¤¤"
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "ǧ¾ÚÃæ (ƿ̾)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "ƿ̾ǧ¾Ú¤Ë¼ºÇÔ¤·¤¿¡£"
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "ǧ¾ÚÃæ (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "CRAM-MD5 Ç§¾Ú¤Ë¼ºÇÔ¤·¤¿¡£"
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "ǧ¾ÚÃæ (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "GSSAPI Ç§¾Ú¤Ë¼ºÇÔ¤·¤¿¡£"
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "LOGIN ¤Ï¤³¤Î¥µ¡¼¥Ð¤Ç¤Ï̵¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë"
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "¥í¥°¥¤¥óÃæ..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "¥í¥°¥¤¥ó¤Ë¼ºÇÔ¤·¤¿¡£"
+
+#: imap/auth_sasl.c:112
+#, c-format
+msgid "Authenticating (%s)..."
+msgstr "ǧ¾ÚÃæ (%s)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "SASL Ç§¾Ú¤Ë¼ºÇÔ¤·¤¿¡£"
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "%s ¤ÏÉÔÀµ¤Ê IMAP ¥Ñ¥¹"
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "¥Í¡¼¥à¥¹¥Ú¡¼¥¹¼èÆÀÃæ..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "¥Õ¥©¥ë¥À¥ê¥¹¥È¼èÆÀÃæ..."
+
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "¤½¤Î¤è¤¦¤Ê¥Õ¥©¥ë¥À¤Ï¤Ê¤¤"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òºîÀ®: "
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¤Ï̾Á°¤¬É¬Íס£"
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬ºîÀ®¤µ¤ì¤¿¡£"
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òÊĤ¸¤¿"
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Ã×̿Ū¥¨¥é¡¼¡£¥á¥Ã¥»¡¼¥¸¿ô¤¬Æ±´ü¤·¤Æ¤¤¤Ê¤¤!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "%s ¤Ø¤ÎÀܳ¤ò½ªÎ»Ãæ..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "¤³¤Î IMAP ¥µ¡¼¥Ð¤Ï¸Å¤¤¡£¤³¤ì¤Ç¤Ï Mutt ¤Ï¤¦¤Þ¤¯µ¡Ç½¤·¤Ê¤¤¡£"
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr "¥µ¡¼¥Ð¤«¤éͽ´ü¤»¤ÌÈ¿±þ¤ò¼õ¤±¼è¤Ã¤¿: %s"
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "TLS ¤ò»È¤Ã¤¿°ÂÁ´¤ÊÀܳ?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "TLS Àܳ¤ò³ÎΩ¤Ç¤­¤Ê¤«¤Ã¤¿"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "%s ¤òÁªÂòÃæ..."
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¥ª¡¼¥×¥ó»þ¥¨¥é¡¼"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "¤³¤Î¥µ¡¼¥Ð¤Î IMAP ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¤ÏÄɲäǤ­¤Ê¤¤"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "%s ¤òºîÀ®?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "IMAP ¥µ¡¼¥Ð¤Ø¤ÎÀܳ¤ò½ªÎ»Ãæ..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "%d ¸Ä¤Î¥á¥Ã¥»¡¼¥¸¤Ëºï½ü¤ò¥Þ¡¼¥¯Ãæ..."
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "ºï½ü¤Ë¼ºÇÔ¤·¤¿"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "¥á¥Ã¥»¡¼¥¸¥¹¥Æ¡¼¥¿¥¹¥Õ¥é¥°¤òÊݸÃæ... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "¥µ¡¼¥Ð¤«¤é¥á¥Ã¥»¡¼¥¸¤òºï½üÃæ..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbox: ºï½ü¤Ë¼ºÇÔ¤·¤¿"
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "¥¯¥í¡¼¥º¤Ë¼ºÇÔ¤·¤¿"
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "ÉÔÀµ¤Ê¥á¡¼¥ë¥Ü¥Ã¥¯¥¹Ì¾"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "%s ¤Î¹ØÆɤò³«»ÏÃæ..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "%s ¤Î¹ØÆɤò¼è¤ê¾Ã¤·Ãæ..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "¤³¤Î¥Ð¡¼¥¸¥ç¥ó¤Î IMAP ¥µ¡¼¥Ð¤«¤é¤Ï¤Ø¥Ã¥À¤ò¼èÆÀ¤Ç¤­¤Ê¤¤¡£"
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤­¤Ê¤«¤Ã¤¿"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "¥á¥Ã¥»¡¼¥¸¥Ø¥Ã¥À¼èÆÀÃæ... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "¥á¥Ã¥»¡¼¥¸¼èÆÀÃæ..."
+
+# ¤³¤Î Try ¤¬Ì¿Îá¤Ç¤Ê¤±¤ì¤Ð¤è¤¤¤Î¤À¤¬¡£
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "¥á¥Ã¥»¡¼¥¸º÷°ú¤¬ÉÔÀµ¡£¥á¡¼¥ë¥Ü¥Ã¥¯¥¹ºÆ¥ª¡¼¥×¥ó¤ò»î¤ß¤ë¡£"
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "¥á¥Ã¥»¡¼¥¸¤ò¥¢¥Ã¥×¥í¡¼¥ÉÃæ..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "%d ¥á¥Ã¥»¡¼¥¸¤ò %s ¤Ë¥³¥Ô¡¼Ãæ..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "¥á¥Ã¥»¡¼¥¸ %d ¤ò %s ¤Ë¥³¥Ô¡¼Ãæ..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "·Ñ³?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "alias (ÊÌ̾): ¥¢¥É¥ì¥¹¤¬¤Ê¤¤"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr "·Ù¹ð: ÉÔÀµ¤Ê IDN '%s' ¤¬¥¨¥¤¥ê¥¢¥¹ '%s' Ãæ¤Ë¤¢¤ë¡£\n"
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "ÉÔÀµ¤Ê¤Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s ¤ÏÉÔÌÀ¤ÊÀ°ÎóÊýË¡"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): Àµµ¬É½¸½¤Ç¥¨¥é¡¼: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s ¤ÏÉÔÌÀ¤ÊÊÑ¿ô"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "reset ¤È¶¦¤Ë»È¤¦ÀÜƬ¼­¤¬ÉÔÀµ"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "reset ¤È¶¦¤Ë»È¤¦Ãͤ¬ÉÔÀµ"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s ¤ÏÀßÄꤵ¤ì¤Æ¤¤¤ë"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s ¤Ï²ò½ü¤µ¤ì¤Æ¤¤¤ë"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s ¤ÏÉÔÀµ¤Ê¥á¡¼¥ë¥Ü¥Ã¥¯¥¹·Á¼°"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s ¤ÏÉÔÀµ¤ÊÃÍ"
+
+#: init.c:1312
+#, c-format
+msgid "%s: Unknown type."
+msgstr "%s ¤ÏÉÔÌÀ¤Ê¥¿¥¤¥×"
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s ¤ÏÉÔÌÀ¤Ê¥¿¥¤¥×"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "%s ¤ò°À­Ä´ºº¤Ç¤­¤Ê¤¤: %s"
+
+# regular file ¤Ã¤Æ¡ÖÄ̾ï¥Õ¥¡¥¤¥ë¡×¤Ç¤¹¤«¡©
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s ¤Ïɸ½à¥Õ¥¡¥¤¥ë¤Ç¤Ï¤Ê¤¤¡£"
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "%s Ãæ¤Î %d ¹ÔÌܤǥ¨¥é¡¼: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: %s Ãæ¤Ç¥¨¥é¡¼"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: %s Ãæ¤Ë¥¨¥é¡¼¤¬Â¿¤¹¤®¤ë¤Î¤ÇÆɤ߽Ф·Ãæ»ß"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: %s ¤Ç¥¨¥é¡¼"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: °ú¿ô¤¬Â¿¤¹¤®¤ë"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: ÉÔÌÀ¤Ê¥³¥Þ¥ó¥É"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "¥³¥Þ¥ó¥É¥é¥¤¥ó¤Ç¥¨¥é¡¼: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤ò¼±Ê̤Ǥ­¤Ê¤¤"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "¥æ¡¼¥¶Ì¾¤ò¼±Ê̤Ǥ­¤Ê¤¤"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "¥Þ¥¯¥í¤Î¥ë¡¼¥×¤¬¸¡½Ð¤µ¤ì¤¿¡£"
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "¥­¡¼¤Ï¥Ð¥¤¥ó¥É¤µ¤ì¤Æ¤¤¤Ê¤¤¡£"
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "¥­¡¼¤Ï¥Ð¥¤¥ó¥É¤µ¤ì¤Æ¤¤¤Ê¤¤¡£'%s' ¤ò²¡¤¹¤È¥Ø¥ë¥×"
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: °ú¿ô¤¬Â¿¤¹¤®¤ë"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s ¤È¤¤¤¦¥á¥Ë¥å¡¼¤Ï¤Ê¤¤"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "¥­¡¼¥·¡¼¥±¥ó¥¹¤¬¤Ê¤¤"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: °ú¿ô¤¬Â¿¤¹¤®¤ë"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s ¤È¤¤¤¦µ¡Ç½¤Ï¥Þ¥Ã¥×Ãæ¤Ë¤Ê¤¤"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: ¥­¡¼¥·¡¼¥±¥ó¥¹¤¬¤Ê¤¤"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: °ú¿ô¤¬Â¿¤¹¤®¤ë"
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: °ú¿ô¤¬¤Ê¤¤"
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s ¤È¤¤¤¦µ¡Ç½¤Ï¤Ê¤¤"
+
+#: keymap.c:912
+msgid "Enter keys (^G to abort): "
+msgstr "¥­¡¼¤ò²¡¤¹¤È³«»Ï (½ªÎ»¤Ï ^G): "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr "ʸ»ú = %s, 8¿Ê = %o, 10¿Ê = %d"
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "Æ°ºî¤Î»ØÄ꤬¤Ê¤¤"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr "¾ò·ïÉÕ¤­¼Â¹Ô¤Î½ªÎ» (²¿¤â¤·¤Ê¤¤)"
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "mailcap ¤ò»È¤Ã¤ÆźÉÕ¥Õ¥¡¥¤¥ë¤ò¶¯À©É½¼¨"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤ò¥Æ¥­¥¹¥È¤È¤·¤Æɽ¼¨"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "Éû¥Ñ¡¼¥È¤Îɽ¼¨¤òÀÚÂØ"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "¥Ú¡¼¥¸¤Î°ìÈÖ²¼¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "¥á¥Ã¥»¡¼¥¸¤ò¾¤Î¥æ¡¼¥¶¤ËºÆÁ÷"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "¤³¤Î¥Ç¥£¥ì¥¯¥È¥êÃæ¤Î¿·¤·¤¤¥Õ¥¡¥¤¥ë¤òÁªÂò"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "¥Õ¥¡¥¤¥ë¤ò±ÜÍ÷"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "ÁªÂòÃæ¤Î¥Õ¥¡¥¤¥ë̾¤òɽ¼¨"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "¸½ºß¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ò¹ØÆÉ(IMAP¤Î¤ß)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "¸½ºß¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î¹ØÆɤòÃæ»ß(IMAP¤Î¤ß)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "¡ÖÁ´¥Ü¥Ã¥¯¥¹/¹ØÆÉÃæ¤Î¤ß¡×±ÜÍ÷ÀÚÂØ(IMAP¤Î¤ß)"
+
+#: keymap_alldefs.h:18
+msgid "list mailboxes with new mail"
+msgstr "¿·Ãå¥á¡¼¥ë¤Î¤¢¤ë¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ò°ìÍ÷ɽ¼¨"
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤òÊѹ¹"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¿·Ãå¥á¡¼¥ë¤¬¤¢¤ë¤«¸¡ºº"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤Ë¥Õ¥¡¥¤¥ë¤òźÉÕ"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤Ë¥á¥Ã¥»¡¼¥¸¤òźÉÕ"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "BCC¥ê¥¹¥È¤òÊÔ½¸"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "CC¥ê¥¹¥È¤òÊÔ½¸"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤ÎÆâÍÆÀâÌÀʸ¤òÊÔ½¸"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤Î content-trasfer-encoding ¤òÊÔ½¸"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "¥á¥Ã¥»¡¼¥¸¤Î¥³¥Ô¡¼¤òÊݸ¤¹¤ë¥Õ¥¡¥¤¥ë̾¤òÆþÎÏ"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "źÉÕ¤¹¤ë¥Õ¥¡¥¤¥ë¤òÊÔ½¸"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "From ¥Õ¥£¡¼¥ë¥É¤òÊÔ½¸"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "¥á¥Ã¥»¡¼¥¸¤ò¥Ø¥Ã¥À¤´¤ÈÊÔ½¸"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "¥á¥Ã¥»¡¼¥¸¤òÊÔ½¸"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤ò mailcap ¥¨¥ó¥È¥ê¤ò»È¤Ã¤ÆÊÔ½¸"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "Reply-To ¥Õ¥£¡¼¥ë¥É¤òÊÔ½¸"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "¥á¥Ã¥»¡¼¥¸¤ÎÂê̾¤òÊÔ½¸"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "TO ¥ê¥¹¥È¤òÊÔ½¸"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "¿·¤·¤¤¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òºîÀ®(IMAP¤Î¤ß)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤Î content-type ¤òÊÔ½¸"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤Î°ì»þŪ¤Ê¥³¥Ô¡¼¤òºîÀ®"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "¥á¥Ã¥»¡¼¥¸¤Ë ispell ¤ò¼Â¹Ô"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "mailcap ¥¨¥ó¥È¥ê¤ò»È¤Ã¤ÆźÉÕ¥Õ¥¡¥¤¥ë¤òºîÀ®"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "¤³¤ÎźÉÕ¥Õ¥¡¥¤¥ë¤Î¥³¡¼¥ÉÊÑ´¹¤Î̵ͭ¤òÀÚÂØ"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤ò¡Ö½ñ¤­¤«¤±¡×¤Ë¤¹¤ë"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤ò¥ê¥Í¡¼¥à(°ÜÆ°)"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "disposition ¤Î inline/attachment ¤òÀÚÂØ"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "Á÷¿®¸å¤Ë¥Õ¥¡¥¤¥ë¤ò¾Ã¤¹¤«¤É¤¦¤«¤òÀÚÂØ"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤Î¥¨¥ó¥³¡¼¥É¾ðÊó¤ò¹¹¿·"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "¥Õ¥©¥ë¥À¤Ë¥á¥Ã¥»¡¼¥¸¤ò½ñ¤­¹þ¤à"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "¥á¥Ã¥»¡¼¥¸¤ò¥Õ¥¡¥¤¥ë¤ä¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¥³¥Ô¡¼"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "¥á¥Ã¥»¡¼¥¸¤ÎÁ÷¿®¼Ô¤«¤éÊÌ̾¤òºîÀ®"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "¥¹¥¯¥ê¡¼¥ó¤Î°ìÈÖ²¼¤Ë¥¨¥ó¥È¥ê°ÜÆ°"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "¥¹¥¯¥ê¡¼¥ó¤ÎÃæ±û¤Ë¥¨¥ó¥È¥ê°ÜÆ°"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "¥¹¥¯¥ê¡¼¥ó¤Î°ìÈÖ¾å¤Ë¥¨¥ó¥È¥ê°ÜÆ°"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "text/plain ¤Ë¥Ç¥³¡¼¥É¤·¤¿¥³¥Ô¡¼¤òºîÀ®"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "text/plain ¤Ë¥Ç¥³¡¼¥É¤·¤¿¥³¥Ô¡¼¤òºîÀ®¤·ºï½ü"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "¸½ºß¤Î¥¨¥ó¥È¥ê¤òºï½ü"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "¸½ºß¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òºï½ü(IMAP¤Î¤ß)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "Éû¥¹¥ì¥Ã¥É¤Î¥á¥Ã¥»¡¼¥¸¤ò¤¹¤Ù¤Æºï½ü"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "¥¹¥ì¥Ã¥É¤Î¥á¥Ã¥»¡¼¥¸¤ò¤¹¤Ù¤Æºï½ü"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "Á÷¿®¼Ô¤Î´°Á´¤Ê¥¢¥É¥ì¥¹¤òɽ¼¨"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¡¢¥Ø¥Ã¥ÀÍ޻ߤòÀÚÂØ"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "¥á¥Ã¥»¡¼¥¸¤òɽ¼¨"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "À¸¤Î¥á¥Ã¥»¡¼¥¸¤òÊÔ½¸"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "¥«¡¼¥½¥ë¤ÎÁ°¤Îʸ»ú¤òºï½ü"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "¥«¡¼¥½¥ë¤ò°ìʸ»úº¸¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "¥«¡¼¥½¥ë¤òñ¸ì¤ÎÀèƬ¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "¹ÔƬ¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "ÅþÃåÍѥ᡼¥ë¥Ü¥Ã¥¯¥¹¤ò½ä²ó"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "¥Õ¥¡¥¤¥ë̾¤äÊÌ̾¤òÊä´°"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "Ì䤤¹ç¤ï¤»¤Ë¤è¤ê¥¢¥É¥ì¥¹¤òÊä´°"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "¥«¡¼¥½¥ë¤Î²¼¤Î»ú¤òºï½ü"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "¹ÔËö¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "¥«¡¼¥½¥ë¤ò°ìʸ»ú±¦¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "¥«¡¼¥½¥ë¤òñ¸ì¤ÎºÇ¸å¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr "ÍúÎò¥ê¥¹¥È¤ò²¼¤Ë¥¹¥¯¥í¡¼¥ë"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "ÍúÎò¥ê¥¹¥È¤ò¾å¤Ë¥¹¥¯¥í¡¼¥ë"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "¥«¡¼¥½¥ë¤«¤é¹ÔËö¤Þ¤Çºï½ü"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "¥«¡¼¥½¥ë¤«¤éñ¸ìËö¤Þ¤Çºï½ü"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "¤½¤Î¹Ô¤Îʸ»ú¤ò¤¹¤Ù¤Æºï½ü"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "¥«¡¼¥½¥ë¤ÎÁ°Êý¤Îñ¸ì¤òºï½ü"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "¼¡¤Ë¥¿¥¤¥×¤¹¤ëʸ»ú¤ò°úÍÑÉä¤Ç¤¯¤¯¤ë"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "¥«¡¼¥½¥ë°ÌÃÖ¤Îʸ»ú¤È¤½¤ÎÁ°¤Îʸ»ú¤È¤òÆþ¤ì´¹¤¨"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "ñ¸ì¤ÎÀèƬʸ»ú¤òÂçʸ»ú²½"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "ñ¸ì¤ò¾®Ê¸»ú²½"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "ñ¸ì¤òÂçʸ»ú²½"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "muttrc ¤Î¥³¥Þ¥ó¥É¤òÆþÎÏ"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "¥Õ¥¡¥¤¥ë¥Þ¥¹¥¯¤òÆþÎÏ"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "¤³¤Î¥á¥Ë¥å¡¼¤ò½ªÎ»"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "¥·¥§¥ë¥³¥Þ¥ó¥É¤òÄ̤·¤ÆźÉÕ¥Õ¥¡¥¤¥ë¤òɽ¼¨"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "ºÇ½é¤Î¥¨¥ó¥È¥ê¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "¡Ö½ÅÍסץե饰¤ÎÀÚÂØ"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "¥³¥á¥ó¥ÈÉÕ¤­¤Ç¥á¥Ã¥»¡¼¥¸¤òžÁ÷"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "¸½ºß¤Î¥¨¥ó¥È¥ê¤òÁªÂò"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "¤¹¤Ù¤Æ¤Î¼õ¿®¼Ô¤ËÊÖ¿®"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "Ⱦ¥Ú¡¼¥¸²¼¤Ë¥¹¥¯¥í¡¼¥ë"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "Ⱦ¥Ú¡¼¥¸¾å¤Ë¥¹¥¯¥í¡¼¥ë"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "¤³¤Î²èÌÌ"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "¥¤¥ó¥Ç¥Ã¥¯¥¹ÈÖ¹æ¤ËÈô¤Ö"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "ºÇ¸å¤Î¥¨¥ó¥È¥ê¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "»ØÄêºÑ¤ß¥á¡¼¥ê¥ó¥°¥ê¥¹¥È°¸¤Æ¤ËÊÖ¿®"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "¥Þ¥¯¥í¤ò¼Â¹Ô"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "¿·µ¬¥á¥Ã¥»¡¼¥¸¤òºîÀ®"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "Ê̤Υե©¥ë¥À¤ò¥ª¡¼¥×¥ó"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "Æɤ߽Ф·ÀìÍѥ⡼¥É¤ÇÊ̤Υե©¥ë¥À¤ò¥ª¡¼¥×¥ó"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "¥á¥Ã¥»¡¼¥¸¤Î¥¹¥Æ¡¼¥¿¥¹¥Õ¥é¥°¤ò²ò½ü"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "¥Ñ¥¿¡¼¥ó¤Ë°ìÃפ·¤¿¥á¥Ã¥»¡¼¥¸¤òºï½ü"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "IMAP ¥µ¡¼¥Ð¤«¤é¥á¡¼¥ë¤ò¼èÆÀ"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "POP ¥µ¡¼¥Ð¤«¤é¥á¡¼¥ë¤ò¼èÆÀ"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "ºÇ½é¤Î¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "ºÇ¸å¤Î¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "¥Ñ¥¿¡¼¥ó¤Ë°ìÃפ·¤¿¥á¥Ã¥»¡¼¥¸¤À¤±É½¼¨"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "¼¡¤Î¿·Ãå¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:113
+msgid "jump to the next new or unread message"
+msgstr "¼¡¤Î¿·Ãå¤Þ¤¿¤Ï̤ÆɤΥá¥Ã¥»¡¼¥¸¤Ø°ÜÆ°"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "¼¡¤Î¥µ¥Ö¥¹¥ì¥Ã¥É¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "¼¡¤Î¥¹¥ì¥Ã¥É¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "¼¡¤Î̤ºï½ü¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "¼¡¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸¤Ø°ÜÆ°"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "¥¹¥ì¥Ã¥É¤Î¿Æ¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "Á°¤Î¥¹¥ì¥Ã¥É¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "Á°¤Î¥µ¥Ö¥¹¥ì¥Ã¥É¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "Á°¤Î̤ºï½ü¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "Á°¤Î¿·Ãå¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:123
+msgid "jump to the previous new or unread message"
+msgstr "Á°¤Î¿·Ãå¤Þ¤¿¤Ï̤ÆÉ¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "Á°¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "¸½ºß¤Î¥¹¥ì¥Ã¥É¤ò´ûÆɤˤ¹¤ë"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "¸½ºß¤Î¥µ¥Ö¥¹¥ì¥Ã¥É¤ò´ûÆɤˤ¹¤ë"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "¥á¥Ã¥»¡¼¥¸¤Ë¥¹¥Æ¡¼¥¿¥¹¥Õ¥é¥°¤òÀßÄê"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "Êѹ¹¤ò¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ËÊݸ"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "¥Ñ¥¿¡¼¥ó¤Ë°ìÃפ·¤¿¥á¥Ã¥»¡¼¥¸¤Ë¥¿¥°¤òÉÕ¤±¤ë"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "¥Ñ¥¿¡¼¥ó¤Ë°ìÃפ·¤¿¥á¥Ã¥»¡¼¥¸¤Îºï½ü¾õÂÖ¤ò²ò½ü"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "¥Ñ¥¿¡¼¥ó¤Ë°ìÃפ·¤¿¥á¥Ã¥»¡¼¥¸¤Î¥¿¥°¤ò¤Ï¤º¤¹"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "¥Ú¡¼¥¸¤ÎÃæ±û¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "¼¡¤Î¥¨¥ó¥È¥ê¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "°ì¹Ô²¼¤Ë¥¹¥¯¥í¡¼¥ë"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "¼¡¥Ú¡¼¥¸¤Ø°ÜÆ°"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "¥á¥Ã¥»¡¼¥¸¤Î°ìÈÖ²¼¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "°úÍÑʸ¤Îɽ¼¨¤ò¤¹¤ë¤«¤É¤¦¤«ÀÚÂØ"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "°úÍÑʸ¤ò¥¹¥­¥Ã¥×¤¹¤ë"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "¥á¥Ã¥»¡¼¥¸¤Î°ìÈÖ¾å¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "¥á¥Ã¥»¡¼¥¸/źÉÕ¥Õ¥¡¥¤¥ë¤ò¥³¥Þ¥ó¥É¤Ë¥Ñ¥¤¥×"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "Á°¤Î¥¨¥ó¥È¥ê¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "°ì¹Ô¾å¤Ë¥¹¥¯¥í¡¼¥ë"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "Á°¤Î¥Ú¡¼¥¸¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "¸½ºß¤Î¥¨¥ó¥È¥ê¤ò°õºþ"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "³°Éô¥×¥í¥°¥é¥à¤Ë¥¢¥É¥ì¥¹¤òÌ䤤¹ç¤ï¤»"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "¿·¤¿¤ÊÌ䤤¹ç¤ï¤»·ë²Ì¤ò¸½ºß¤Î·ë²Ì¤ËÄɲÃ"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "Êѹ¹¤ò¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ËÊݸ¸å½ªÎ»"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "½ñ¤­¤«¤±¤Î¥á¥Ã¥»¡¼¥¸¤ò¸Æ¤Ó½Ð¤¹"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "²èÌ̤ò¥¯¥ê¥¢¤·ºÆÉÁ²è"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{ÆâÉô}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "¥á¥Ã¥»¡¼¥¸¤ËÊÖ¿®"
+
+# ¤³¤ì¤Ç¥®¥ê¥®¥ê°ì¹Ô¤Ë¤ª¤µ¤Þ¤ë¥Ï¥º
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "¸½ºß¤Î¥á¥Ã¥»¡¼¥¸¤ò¿·¤·¤¤¤â¤Î¤Î¸¶·Á¤È¤·¤ÆÍøÍÑ"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "¥á¥Ã¥»¡¼¥¸/źÉÕ¥Õ¥¡¥¤¥ë¤ò¥Õ¥¡¥¤¥ë¤ËÊݸ"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "Àµµ¬É½¸½¸¡º÷"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "µÕ½ç¤ÎÀµµ¬É½¸½¸¡º÷"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "¼¡¤Ë°ìÃפ¹¤ë¤â¤Î¤ò¸¡º÷"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "µÕ½ç¤Ç°ìÃפ¹¤ë¤â¤Î¤ò¸¡º÷"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "¸¡º÷¥Ñ¥¿¡¼¥ó¤òÃ忧¤¹¤ë¤«¤É¤¦¤«ÀÚÂØ"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "¥µ¥Ö¥·¥§¥ë¤Ç¥³¥Þ¥ó¥É¤òµ¯Æ°"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "¥á¥Ã¥»¡¼¥¸¤òÀ°Îó"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "¥á¥Ã¥»¡¼¥¸¤òµÕ½ç¤ÇÀ°Îó"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "¥á¥Ã¥»¡¼¥¸¤Ë¥¿¥°ÉÕ¤±"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "¼¡¤ËÆþÎϤ¹¤ëµ¡Ç½¤ò¥¿¥°ÉÕ¤­¥á¥Ã¥»¡¼¥¸¤ËŬÍÑ"
+
+#: keymap_alldefs.h:164
+msgid "apply next function ONLY to tagged messages"
+msgstr "¼¡¤ËÆþÎϤ¹¤ëµ¡Ç½¤ò¥¿¥°ÉÕ¤­¥á¥Ã¥»¡¼¥¸¤Ë¤Î¤ßŬÍÑ"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "¸½ºß¤Î¥µ¥Ö¥¹¥ì¥Ã¥É¤Ë¥¿¥°¤òÉÕ¤±¤ë"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "¸½ºß¤Î¥¹¥ì¥Ã¥É¤Ë¥¿¥°¤òÉÕ¤±¤ë"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "¥á¥Ã¥»¡¼¥¸¤Î¡Ö¿·Ãå¡×¥Õ¥é¥°¤òÀÚÂØ"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ËÊѹ¹¤ò½ñ¤­¹þ¤à¤«¤É¤¦¤«¤òÀÚÂØ"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "±ÜÍ÷Ë¡¤ò¡Ö¥á¡¼¥ë¥Ü¥Ã¥¯¥¹/Á´¥Õ¥¡¥¤¥ë¡×´Ö¤ÇÀÚÂØ"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "¥Ú¡¼¥¸¤Î°ìÈÖ¾å¤Ë°ÜÆ°"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "¥¨¥ó¥È¥ê¤Îºï½ü¾õÂÖ¤ò²ò½ü"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "¥¹¥ì¥Ã¥É¤Î¤¹¤Ù¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤Îºï½ü¾õÂÖ¤ò²ò½ü"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "¥µ¥Ö¥¹¥ì¥Ã¥É¤Î¤¹¤Ù¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤Îºï½ü¤ò²ò½ü"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "Mutt ¤Î¥Ð¡¼¥¸¥ç¥ó¤ÎÈÖ¹æ¤ÈÆüÉÕ¤òɽ¼¨"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "źÉÕ¥Õ¥¡¥¤¥ë±ÜÍ÷(ɬÍפʤémailcap¥¨¥ó¥È¥ê»ÈÍÑ)"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "MIME ÅºÉÕ¥Õ¥¡¥¤¥ë¤òɽ¼¨"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr "¼¡¤Ë²¡¤¹¥­¡¼¤Î¥³¡¼¥É¤òɽ¼¨"
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "¸½ºßÍ­¸ú¤ÊÀ©¸Â¥Ñ¥¿¡¼¥ó¤ÎÃͤòɽ¼¨"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "¸½ºß¤Î¥¹¥ì¥Ã¥É¤òŸ³«/È󟳫"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "¤¹¤Ù¤Æ¤Î¥¹¥ì¥Ã¥É¤òŸ³«/È󟳫"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "PGP ¸ø³«¸°¤òźÉÕ"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "PGP ¥ª¥×¥·¥ç¥ó¤òɽ¼¨"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "PGP ¸ø³«¸°¤ò¥á¡¼¥ëÁ÷¿®"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "PGP ¸ø³«¸°¤ò¸¡¾Ú"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "¸°¤Î¥æ¡¼¥¶ ID ¤òɽ¼¨"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "µì·Á¼°¤Î PGP ¤ò¥Á¥§¥Ã¥¯"
+
+# ¡Ö¤¹¤Ù¤Æ¤Î¡×¤Ã¤ÆɬÍס©
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "¹½ÃÛ¤µ¤ì¤¿Á´¤Æ¤Î¥Á¥§¡¼¥ó¤ò¼õÍÆ"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "¥Á¥§¡¼¥ó¤Ë remailer ¤òÄɲÃ"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "¥Á¥§¡¼¥ó¤Ë remailer ¤òÁÞÆþ"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "¥Á¥§¡¼¥ó¤«¤é remailer ¤òºï½ü"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "Á°¤Î¥Á¥§¡¼¥ó¥¨¥ì¥á¥ó¥È¤òÁªÂò"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "¼¡¤Î¥Á¥§¡¼¥ó¥¨¥ì¥á¥ó¥È¤òÁªÂò"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "mixmaster remailer ¥Á¥§¡¼¥ó¤ò»È¤Ã¤ÆÁ÷¿®"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "Éü¹æ²½¤·¤¿¥³¥Ô¡¼¤òºî¤Ã¤Æ¤«¤éºï½ü"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "Éü¹æ²½¤·¤¿¥³¥Ô¡¼¤òºîÀ®"
+
+#: keymap_alldefs.h:196
+msgid "wipe passphrase(s) from memory"
+msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤ò¤¹¤Ù¤Æ¥á¥â¥ê¤«¤é¾Ãµî"
+
+#: keymap_alldefs.h:197
+msgid "extract supported public keys"
+msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¸ø³«¸°¤òÃê½Ð"
+
+#: keymap_alldefs.h:198
+msgid "show S/MIME options"
+msgstr "S/MIME ¥ª¥×¥·¥ç¥ó¤òɽ¼¨"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr "·å¤¢¤Õ¤ì -- ¥á¥â¥ê¤ò³ä¤êÅö¤Æ¤é¤ì¤Ê¤¤!"
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "¥á¥â¥êÉÔ­!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"³«È¯¼Ô(ËܲÈ)¤ËÏ¢Íí¤ò¤È¤ë¤Ë¤Ï <mutt-dev@mutt.org> ¤Ø¥á¡¼¥ë¤»¤è¡£\n"
+"¥Ð¥°¤ò¥ì¥Ý¡¼¥È¤¹¤ë¤Ë¤Ï flea (1) ¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤ò»ÈÍѤ»¤è¡£\n"
+"ÆüËܸìÈǤΥХ°¥ì¥Ý¡¼¥È¤ª¤è¤ÓÏ¢Íí¤Ï mutt-j ML ¤Ø¡£\n"
+
+#: main.c:50
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+
+#: main.c:56
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+
+#: main.c:94
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"»ÈÍÑË¡: mutt [-nRyzZ] [-e <¥³¥Þ¥ó¥É>] [-F <¥Õ¥¡¥¤¥ë>] [-m <¥¿¥¤¥×>] \n"
+"             [-f <¥Õ¥¡¥¤¥ë>]\n"
+"        mutt [-nR] [-e <¥³¥Þ¥ó¥É>] [-F <¥Õ¥¡¥¤¥ë>] -Q <Ì䤤¹ç¤ï¤»> \n"
+"             [-Q <Ì䤤¹ç¤ï¤»> ]\n"
+"        mutt [-nR] [-e <¥³¥Þ¥ó¥É>] [-F <¥Õ¥¡¥¤¥ë>] -A <ÊÌ̾> \n"
+"             [-A <ÊÌ̾> ]\n"
+"        mutt [-nx] [-e <¥³¥Þ¥ó¥É>] [-a <¥Õ¥¡¥¤¥ë>] [-F <¥Õ¥¡¥¤¥ë>] \n"
+"             [-H <¥Õ¥¡¥¤¥ë>] [-i <¥Õ¥¡¥¤¥ë>] [-s <Âê̾>] [-b <¥¢¥É¥ì¥¹>] \n"
+"             [-c <¥¢¥É¥ì¥¹>] <¥¢¥É¥ì¥¹> [ ... ]\n"
+"        mutt [-n] [-e <¥³¥Þ¥ó¥É>] [-F <¥Õ¥¡¥¤¥ë>] -p\n"
+"        mutt -v[v]\n"
+"\n"
+"¥ª¥×¥·¥ç¥ó:\n"
+"  -A <ÊÌ̾>\t»ØÄꤷ¤¿ÊÌ̾¤ÎŸ³«\n"
+"  -a <¥Õ¥¡¥¤¥ë>\t¥á¥Ã¥»¡¼¥¸¤Ë¥Õ¥¡¥¤¥ë¤òźÉÕ\n"
+"  -b <¥¢¥É¥ì¥¹>\tblind carbon-copy (BCC) ¥¢¥É¥ì¥¹¤Î»ØÄê\n"
+"  -c <¥¢¥É¥ì¥¹>\tcarbon-copy (CC) ¥¢¥É¥ì¥¹¤Î»ØÄê\n"
+"  -e <¥³¥Þ¥ó¥É>\t½é´ü²½¸å¤Ë¼Â¹Ô¤¹¤ë¥³¥Þ¥ó¥É¤Î»ØÄê\n"
+"  -f <¥Õ¥¡¥¤¥ë>\tÆɤ߽Ф·¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î»ØÄê\n"
+"  -F <¥Õ¥¡¥¤¥ë>\tÂåÂØ muttrc ¥Õ¥¡¥¤¥ë¤Î»ØÄê\n"
+"  -H <¥Õ¥¡¥¤¥ë>\t¤Ø¥Ã¥À¤òÆɤि¤á¤Ë²¼½ñ¥Õ¥¡¥¤¥ë¤ò»ØÄê\n"
+"  -i <¥Õ¥¡¥¤¥ë>\tÊÖ¿®»þ¤Ë Mutt ¤¬ÁÞÆþ¤¹¤ë¥Õ¥¡¥¤¥ë¤Î»ØÄê\n"
+"  -m <¥¿¥¤¥×>\t¥á¡¼¥ë¥Ü¥Ã¥¯¥¹·Á¼°¤Î»ØÄê\n"
+"  -n\t\t¥·¥¹¥Æ¥à´ûÄê¤Î Muttrc ¤òÆɤޤʤ¤¤³¤È¤Î»ØÄê\n"
+"  -p\t\tÊݸ¤µ¤ì¤Æ¤¤¤ë (½ñ¤­¤«¤±) ¥á¥Ã¥»¡¼¥¸¤ÎºÆÆɤ߽Ф·¤Î»ØÄê\n"
+"  -Q <variable>\tÀßÄêÊÑ¿ô¤ÎÌ䤤¹ç¤ï¤»\n"
+"  -R\t\t¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òÆɤ߽Ф·ÀìÍѥ⡼¥É¤Ç¥ª¡¼¥×¥ó¤¹¤ë¤³¤È¤Î»ØÄê\n"
+"  -s <Âê̾>\tÂê̾¤Î»ØÄê (¶õÇò¤¬¤¢¤ë¾ì¹ç¤Ë¤Ï°úÍÑÉä¤Ç¤¯¤¯¤ë¤³¤È)\n"
+"  -v\t\t¥Ð¡¼¥¸¥ç¥ó¤È¥³¥ó¥Ñ¥¤¥ë»þ»ØÄê¤Îɽ¼¨\n"
+"  -x\t\tmailx Á÷¿®¥â¡¼¥É¤Î¥·¥ß¥å¥ì¡¼¥È\n"
+"  -y\t\t»ØÄꤵ¤ì¤¿ `mailboxes' ¥ê¥¹¥È¤ÎÃ椫¤é¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ÎÁªÂò\n"
+"  -z\t\t¥á¡¼¥ë¥Ü¥Ã¥¯¥¹Ãæ¤Ë¥á¥Ã¥»¡¼¥¸¤¬Ìµ¤±¤ì¤Ð¤¹¤°¤Ë½ªÎ»\n"
+"  -Z\t\t¿·Ãå¥á¥Ã¥»¡¼¥¸¤¬Ìµ¤±¤ì¤Ð¤¹¤°¤Ë½ªÎ»\n"
+"  -h\t\t¤³¤Î¥Ø¥ë¥×¥á¥Ã¥»¡¼¥¸"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"¥³¥ó¥Ñ¥¤¥ë»þ¥ª¥×¥·¥ç¥ó:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "üËö½é´ü²½¥¨¥é¡¼"
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "¥ì¥Ù¥ë %d ¤Ç¥Ç¥Ð¥Ã¥°Ãæ¡£\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "DEBUG ¤¬¥³¥ó¥Ñ¥¤¥ë»þ¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿¡£Ìµ»ë¤¹¤ë¡£\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s ¤¬Â¸ºß¤·¤Ê¤¤¡£ºîÀ®?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "%s ¤¬ %s ¤Î¤¿¤á¤ËºîÀ®¤Ç¤­¤Ê¤¤¡£"
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "¼õ¼è¿Í¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¡£\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: ¥Õ¥¡¥¤¥ë¤òźÉդǤ­¤Ê¤¤¡£\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "¿·Ãå¥á¡¼¥ë¤Î¤¢¤ë¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ï¤Ê¤¤¡£"
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "ÅþÃåÍѥ᡼¥ë¥Ü¥Ã¥¯¥¹¤¬Ì¤ÄêµÁ¡£"
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬¶õ¡£"
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Æɤ߽Ф·Ãæ %s... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬¤³¤ï¤ì¤Æ¤¤¤ë!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬¤³¤ï¤ì¤¿!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Ã×̿Ū¤Ê¥¨¥é¡¼! ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òºÆ¥ª¡¼¥×¥ó¤Ç¤­¤Ê¤«¤Ã¤¿!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¥í¥Ã¥¯ÉÔǽ!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+"sync: ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬Êѹ¹¤µ¤ì¤¿¤¬¡¢Êѹ¹¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤(¤³¤Î¥Ð¥°¤òÊó¹ð¤»¤è)!"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "¥á¥Ã¥»¡¼¥¸½ñ¤­¹þ¤ßÃæ... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "Êѹ¹·ë²Ì¤òÈ¿±ÇÃæ..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "½ñ¤­¹þ¤ß¼ºÇÔ! ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ÎÃÇÊÒ¤ò %s ¤ËÊݸ¤·¤¿"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òºÆ¥ª¡¼¥×¥ó¤Ç¤­¤Ê¤«¤Ã¤¿!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹ºÆ¥ª¡¼¥×¥óÃæ..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "°ÜÆ°À襤¥ó¥Ç¥Ã¥¯¥¹ÈÖ¹æ¤ò»ØÄê: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "ÉÔÀµ¤Ê¥¤¥ó¥Ç¥Ã¥¯¥¹Èֹ档"
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "¥¨¥ó¥È¥ê¤¬¤Ê¤¤¡£"
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "¤³¤ì¤è¤ê²¼¤Ë¤Ï¥¹¥¯¥í¡¼¥ë¤Ç¤­¤Ê¤¤¡£"
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "¤³¤ì¤è¤ê¾å¤Ë¤Ï¥¹¥¯¥í¡¼¥ë¤Ç¤­¤Ê¤¤¡£"
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "¤¹¤Ç¤ËºÇ¸å¤Î¥Ú¡¼¥¸¡£"
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "¤¹¤Ç¤ËºÇ½é¤Î¥Ú¡¼¥¸¡£"
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "ºÇ½é¤Î¥¨¥ó¥È¥ê¤¬É½¼¨¤µ¤ì¤Æ¤¤¤ë¡£"
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "ºÇ¸å¤Î¥¨¥ó¥È¥ê¤¬É½¼¨¤µ¤ì¤Æ¤¤¤ë¡£"
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "¤¹¤Ç¤ËºÇ¸å¤Î¥¨¥ó¥È¥ê¡£"
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "¤¹¤Ç¤ËºÇ½é¤Î¥¨¥ó¥È¥ê¡£"
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "¸¡º÷¥Ñ¥¿¡¼¥ó: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "µÕ½ç¸¡º÷¥Ñ¥¿¡¼¥ó: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "¸¡º÷¥Ñ¥¿¡¼¥ó¤¬¤Ê¤¤¡£"
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¡£"
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "¥¿¥°ÉÕ¤­¥¨¥ó¥È¥ê¤¬¤Ê¤¤¡£"
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "¤³¤Î¥á¥Ë¥å¡¼¤Ç¤Ï¸¡º÷µ¡Ç½¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£"
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "¥¸¥ã¥ó¥×µ¡Ç½¤Ï¥À¥¤¥¢¥í¥°¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£"
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "¥¿¥°ÉÕ¤±µ¡Ç½¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¡£"
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "%s ¤«¤éÆɤ߽Ф·Ãæ... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr "maildir_commit_message(): ¥Õ¥¡¥¤¥ë¤Ë»þ¹ï¤òÀßÄê¤Ç¤­¤Ê¤¤"
+
+# »²¹Í: "Save to file: " => "Êݸ¤¹¤ë¥Õ¥¡¥¤¥ë: " (alias.c, recvattach.c)
+#: muttlib.c:835
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr ""
+"¤½¤³¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¢¤ë¡£¤½¤ÎÇÛ²¼¤ËÊݸ? [(y)¤¹¤ë,(n)¤·¤Ê¤¤,(a)¤¹¤Ù¤ÆÊݸ]"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr "yna"
+
+# »²¹Í: "Save to file: " => "Êݸ¤¹¤ë¥Õ¥¡¥¤¥ë: " (alias.c, recvattach.c)
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "¤½¤³¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¢¤ë¡£¤½¤ÎÇÛ²¼¤ËÊݸ?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "¥Ç¥£¥ì¥¯¥È¥êÇÛ²¼¤Î¥Õ¥¡¥¤¥ë: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "¥Õ¥¡¥¤¥ë¤¬Â¸ºß¡¢(o)¾å½ñ¤­ (a)Äɲà(c)Ãæ»ß?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "oac"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "POP ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¤Ï¥á¥Ã¥»¡¼¥¸¤òÊݸ¤Ç¤­¤Ê¤¤"
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s ¤Ï¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ç¤Ï¤Ê¤¤!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "%s ¤Ë¥á¥Ã¥»¡¼¥¸¤òÄɲÃ?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "%s ¤Ø¤ÎÀܳ¤ò½ªÎ»¤·¤¿"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL ¤¬ÍøÍѤǤ­¤Ê¤¤¡£"
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "»öÁ°Àܳ¥³¥Þ¥ó¥É¤¬¼ºÇÔ¡£"
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "%s ¤Ø¤Î¸ò¿®¥¨¥é¡¼ (%s)¡£"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr "ÉÔÀµ¤Ê IDN \"%s\"."
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "%s ¸¡º÷Ãæ..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "¥Û¥¹¥È \"%s\" ¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿"
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "%s ¤ËÀܳÃæ..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "%s ¤ËÀܳ¤Ç¤­¤Ê¤«¤Ã¤¿ (%s)¡£"
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "¼Â¹ÔÃæ¤Î¥·¥¹¥Æ¥à¤Ë¤Ï½½Ê¬¤ÊÍ𻨤µ¤ò¸«¤Ä¤±¤é¤ì¤Ê¤«¤Ã¤¿"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "Í𻨤µ¥×¡¼¥ë¤ò½¼Å¶Ãæ: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s ¤ËÀȼå¤Ê¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤¬¤¢¤ë!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "Í𻨤µÉÔ­¤Î¤¿¤á SSL ¤Ï̵¸ú¤Ë¤Ê¤Ã¤¿"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "I/O ¥¨¥é¡¼"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "ÆÃÄê¤Ç¤­¤Ê¤¤¥×¥í¥È¥³¥ë¥¨¥é¡¼"
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "SSL ¤Ï %s ¤Ç¼ºÇÔ¡£"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "ÀܳÀ褫¤é¾ÚÌÀ½ñ¤òÆÀ¤é¤ì¤Ê¤«¤Ã¤¿"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "%s ¤ò»È¤Ã¤¿ SSL Àܳ (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "ÉÔÌÀ"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[·×»»ÉÔǽ]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[ÉÔÀµ¤ÊÆüÉÕ]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "¥µ¡¼¥Ð¤Î¾ÚÌÀ½ñ¤Ï¤Þ¤ÀÍ­¸ú¤Ç¤Ê¤¤"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "¥µ¡¼¥Ð¤Î¾ÚÌÀ½ñ¤¬´ü¸ÂÀÚ¤ì"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "¤³¤Î¾ÚÌÀ½ñ¤Î½ê°Àè:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "¤³¤Î¾ÚÌÀ½ñ¤Îȯ¹Ô¸µ:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "¤³¤Î¾ÚÌÀ½ñ¤ÎÍ­¸ú´ü´Ö¤Ï"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   %s ¤«¤é"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "   %s ¤Þ¤Ç"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "¥Õ¥£¥ó¥¬¡¼¥×¥ê¥ó¥È: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "SSL ¾ÚÌÀ½ñ¸¡ºº"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(r)µñÈÝ (o)º£²ó¤Î¤ß¾µÇ§ (a)¤¤¤Ä¤Ç¤â¾µÇ§"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "roa"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(r)µñÈÝ (o)º£²ó¤Î¤ß¾µÇ§"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "ro"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "½ªÎ»  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "·Ù¹ð: ¾ÚÌÀ½ñ¤òÊݸ¤Ç¤­¤Ê¤«¤Ã¤¿"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "¾ÚÌÀ½ñ¤òÊݸ¤·¤¿"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "¥í¥Ã¥¯²ó¿ô¤¬Ëþλ¡¢%s ¤Î¥í¥Ã¥¯¤ò¤Ï¤º¤¹¤«?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "%s ¤Î¥É¥Ã¥È¥í¥Ã¥¯¤¬¤Ç¤­¤Ê¤¤¡£\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "fcntl ¥í¥Ã¥¯Ãæ¤Ë¥¿¥¤¥à¥¢¥¦¥ÈȯÀ¸!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "fcntl ¥í¥Ã¥¯ÂÔ¤Á... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "flock ¥í¥Ã¥¯Ãæ¤Ë¥¿¥¤¥à¥¢¥¦¥ÈȯÀ¸!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "flock ¥í¥Ã¥¯ÂÔ¤Á... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "%s ¤ò¥í¥Ã¥¯¤Ç¤­¤Ê¤«¤Ã¤¿\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "%s Æɤ߽Ф·Ãæ..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "%s ½ñ¤­¹þ¤ßÃæ..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "%s ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ÎƱ´ü¤¬¤È¤ì¤Ê¤«¤Ã¤¿!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "%s ¤Ë´ûÆÉ¥á¥Ã¥»¡¼¥¸¤ò°ÜÆ°?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "ºï½ü¤µ¤ì¤¿ %d ¥á¥Ã¥»¡¼¥¸¤òÇÑ´þ?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "ºï½ü¤µ¤ì¤¿ %d ¥á¥Ã¥»¡¼¥¸¤òÇÑ´þ?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "%s ¤Ë´ûÆÉ¥á¥Ã¥»¡¼¥¸¤ò°ÜÆ°Ãæ..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ÏÊѹ¹¤µ¤ì¤Ê¤«¤Ã¤¿"
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d ÊÝ»ý¡¢%d °ÜÆ°¡¢%d ÇÑ´þ"
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d ÊÝ»ý¡¢%d ÇÑ´þ"
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr " '%s' ¤ò²¡¤¹¤ÈÊѹ¹¤ò½ñ¤­¹þ¤à¤«¤É¤¦¤«¤òÀÚÂØ"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "'toggle-write' ¤ò»È¤Ã¤Æ½ñ¤­¹þ¤ß¤òÍ­¸ú¤Ë¤»¤è!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ï½ñ¤­¹þ¤ßÉÔǽ¤Ë¥Þ¡¼¥¯¤µ¤ì¤¿¡£%s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î¥Á¥§¥Ã¥¯¥Ý¥¤¥ó¥È¤òºÎ¼è¤·¤¿¡£"
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "¥á¥Ã¥»¡¼¥¸¤ò½ñ¤­¹þ¤á¤Ê¤¤"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr "·å¤¢¤Õ¤ì -- ¥á¥â¥ê¤ò³ä¤êÅö¤Æ¤é¤ì¤Ê¤¤¡£"
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "¤³¤Î¥á¥Ë¥å¡¼¤Ç¤ÏÍøÍѤǤ­¤Ê¤¤¡£"
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "Á°ÊÇ"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "¼¡ÊÇ"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "źÉÕ¥Õ¥¡¥¤¥ë"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "¼¡"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "¥á¥Ã¥»¡¼¥¸¤Î°ìÈÖ²¼¤¬É½¼¨¤µ¤ì¤Æ¤¤¤ë"
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "¥á¥Ã¥»¡¼¥¸¤Î°ìÈ־夬ɽ¼¨¤µ¤ì¤Æ¤¤¤ë"
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "µÕ½ç¤Î¸¡º÷: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "¸¡º÷: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "¸½ºß¥Ø¥ë¥×¤òɽ¼¨Ãæ"
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "¤³¤ì°Ê¾å¤Î°úÍÑʸ¤Ï¤Ê¤¤¡£"
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "°úÍÑʸ¤Î¸å¤Ë¤Ï¤â¤¦Èó°úÍÑʸ¤¬¤Ê¤¤¡£"
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "¥Þ¥ë¥Á¥Ñ¡¼¥È¤Î¥á¥Ã¥»¡¼¥¸¤À¤¬ boundary ¥Ñ¥é¥á¡¼¥¿¤¬¤Ê¤¤!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "±¦µ­¤Î¼°Ãæ¤Ë¥¨¥é¡¼: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "%s ¤ÏÉÔÀµ¤ÊÆüÉÕ"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "%s ¤ÏÉÔÀµ¤Ê·î"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "%s ¤ÏÉÔÀµ¤ÊÁêÂзîÆü"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "¼°Ãæ¤Ë¥¨¥é¡¼"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "%s ¥Ñ¥¿¡¼¥óÃæ¤Ë¥¨¥é¡¼"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c ¤ÏÉÔÀµ¤Ê¥³¥Þ¥ó¥É"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c ¤Ï¤³¤Î¥â¡¼¥É¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "¥Ñ¥é¥á¡¼¥¿¤¬¤Ê¤¤"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "Âбþ¤¹¤ë³ç¸Ì¤¬¤Ê¤¤: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "¥Ñ¥¿¡¼¥ó¤¬¶õ"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "¥¨¥é¡¼: ÉÔÌÀ¤Ê op %d (¤³¤Î¥¨¥é¡¼¤òÊó¹ð¤»¤è)¡£"
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "¸¡º÷¥Ñ¥¿¡¼¥ó¤ò¥³¥ó¥Ñ¥¤¥ëÃæ..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "¥á¥Ã¥»¡¼¥¸¥Ñ¥¿¡¼¥ó¸¡º÷¤Î¤¿¤á¤Ë¥³¥Þ¥ó¥É¼Â¹ÔÃæ..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "¥Ñ¥¿¡¼¥ó¤Ë°ìÃפ¹¤ë¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤«¤Ã¤¿¡£"
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "°ìÈÖ²¼¤Þ¤Ç¡¢²¿¤â¸¡º÷¤Ë°ìÃפ·¤Ê¤«¤Ã¤¿¡£"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "°ìÈÖ¾å¤Þ¤Ç¡¢²¿¤â¸¡º÷¤Ë°ìÃפ·¤Ê¤«¤Ã¤¿¡£"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "¸¡º÷¤¬ÃæÃǤµ¤ì¤¿¡£"
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "PGP ¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬¥á¥â¥ê¤«¤é¾Ãµî¤µ¤ì¤¿¡£"
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- ¥¨¥é¡¼: PGP »Ò¥×¥í¥»¥¹¤òºîÀ®¤Ç¤­¤Ê¤«¤Ã¤¿! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- PGP ½ÐÎϽªÎ» --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PGP ¥á¥Ã¥»¡¼¥¸³«»Ï --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- PGP ¸ø³«¸°¥Ö¥í¥Ã¥¯³«»Ï --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PGP ½ð̾¥á¥Ã¥»¡¼¥¸³«»Ï --]\n"
+"\n"
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- PGP¥á¥Ã¥»¡¼¥¸½ªÎ» --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- PGP ¸ø³«¸°¥Ö¥í¥Ã¥¯½ªÎ» --]\n"
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- PGP ½ð̾¥á¥Ã¥»¡¼¥¸½ªÎ» --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- ¥¨¥é¡¼: PGP ¥á¥Ã¥»¡¼¥¸¤Î³«»ÏÅÀ¤òȯ¸«¤Ç¤­¤Ê¤«¤Ã¤¿! --]\n"
+"\n"
+
+#: pgp.c:662
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "ÆâÉô¥¨¥é¡¼¡£<roessler@does-not-exist.org> ¤ËÊó¹ð¤»¤è¡£"
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- ¥¨¥é¡¼: PGP »Ò¥×¥í¥»¥¹¤òºîÀ®¤Ç¤­¤Ê¤«¤Ã¤¿! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- ¥¨¥é¡¼: ÉÔÀµ¤Ê·Á¼°¤Î PGP/MIME ¥á¥Ã¥»¡¼¥¸! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- ¥¨¥é¡¼: °ì»þ¥Õ¥¡¥¤¥ë¤òºîÀ®¤Ç¤­¤Ê¤«¤Ã¤¿! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- °Ê²¼¤Î¥Ç¡¼¥¿¤Ï PGP/MIME ¤Ç°Å¹æ²½¤µ¤ì¤Æ¤¤¤ë --]\n"
+"\n"
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- PGP/MIME °Å¹æ²½¥Ç¡¼¥¿½ªÎ» --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "PGP »Ò¥×¥í¥»¥¹¤ò¥ª¡¼¥×¥ó¤Ç¤­¤Ê¤¤!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "¸° ID = \"%s\" ¤ò %s ¤Ë»È¤¦?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "%s ¤Î¸° ID ÆþÎÏ: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "PGP µ¯Æ°¤Ç¤­¤Ê¤¤"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "PGP ¸°¤ò¼èÆÀÃæ..."
+
+#: pgpkey.c:486
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "°ìÃפ·¤¿¸°¤Ï¤¹¤Ù¤Æ´ü¸ÂÀڤ줫ÇÑ´þºÑ¤ß¡¢¤Þ¤¿¤Ï»ÈÍѶػߡ£"
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "ÁªÂò  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "PGP ¸°¸¡ºº  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "PGP ¸°¤Ï <%s> ¤Ë°ìÃס£"
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "PGP ¸°¤Ï \"%s\" ¤Ë°ìÃס£"
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "/dev/null ¤ò¥ª¡¼¥×¥ó¤Ç¤­¤Ê¤¤"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "°ì»þ¥Õ¥¡¥¤¥ë¤òºîÀ®¤Ç¤­¤Ê¤¤"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "¸° ID: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "¤³¤Î¸°¤Ï´ü¸ÂÀڤ줫»ÈÍÑÉԲĤ«ÇÑ´þºÑ¤ß¤Î¤¿¤á¡¢»È¤¨¤Ê¤¤¡£"
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "ID ¤Ï´ü¸ÂÀڤ줫»ÈÍÑÉԲĤ«ÇÑ´þºÑ¤ß¡£"
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "ID ¤Ï¿®ÍÑÅÙ¤¬Ì¤ÄêµÁ¡£"
+
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "ID ¤Ï¿®ÍѤµ¤ì¤Æ¤¤¤Ê¤¤¡£"
+
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "ID ¤Ï¤«¤í¤¦¤¸¤Æ¿®ÍѤµ¤ì¤Æ¤¤¤ë¡£"
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s ËÜÅö¤Ë¤³¤Î¸°¤ò»ÈÍÑ?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "¸° ID ¤òÆþÎÏ: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "PGP µ¯Æ°Ãæ..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "PGP ¸° %s"
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "\"%s\" ¤Ë°ìÃפ¹¤ë¸°¤ò¸¡º÷Ãæ..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "¥³¥Þ¥ó¥É TOP ¤ò¥µ¡¼¥Ð¤¬¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¡£"
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "¥Ø¥Ã¥À¤ò°ì»þ¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤á¤Ê¤¤!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "¥³¥Þ¥ó¥É UIDL ¤ò¥µ¡¼¥Ð¤¬¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¡£"
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "%s ¤ÏÉÔÀµ¤Ê POP ¥Ñ¥¹"
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "¥á¥Ã¥»¡¼¥¸¥ê¥¹¥È¤ò¼èÆÀÃæ..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "¥á¥Ã¥»¡¼¥¸¤ò°ì»þ¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤á¤Ê¤¤!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "¿·Ãå¥á¥Ã¥»¡¼¥¸¸¡½ÐÃæ..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "POP ¥Û¥¹¥È¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£"
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "POP ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¿·Ãå¥á¡¼¥ë¤Ï¤Ê¤¤¡£"
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "¥µ¡¼¥Ð¤«¤é¥á¥Ã¥»¡¼¥¸¤òºï½ü?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "¿·Ãå¥á¥Ã¥»¡¼¥¸Æɤ߽Ф·Ãæ (%d ¥Ð¥¤¥È)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹½ñ¤­¹þ¤ßÃæ¤Ë¥¨¥é¡¼!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d / %d ¥á¥Ã¥»¡¼¥¸Æɤ߽Ф·]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "¥µ¡¼¥Ð¤¬Àܳ¤òÀڤä¿!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "ǧ¾ÚÃæ (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "ǧ¾ÚÃæ (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "APOP Ç§¾Ú¤Ë¼ºÇÔ¤·¤¿¡£"
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "¥³¥Þ¥ó¥É USER ¤Ï¥µ¡¼¥Ð¤¬¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¡£"
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "¥µ¡¼¥Ð¤Ë¥á¥Ã¥»¡¼¥¸¤ò»Ä¤»¤Ê¤¤¡£"
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "¥µ¡¼¥Ð %s ¤Ø¤ÎÀܳ¥¨¥é¡¼¡£"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "POP ¥µ¡¼¥Ð¤Ø¤ÎÀܳ½ªÎ»Ãæ..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "¥á¥Ã¥»¡¼¥¸º÷°ú¸¡¾ÚÃæ..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Àܳ¤¬Àڤ줿¡£POP ¥µ¡¼¥Ð¤ËºÆÀܳ?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "½ñ¤­¤«¤±¤Î¥á¥Ã¥»¡¼¥¸"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "½ñ¤­¤«¤±¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤¡£"
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "ÉÔÀµ¤Ê PGP ¥Ø¥Ã¥À"
+
+#: postpone.c:479
+msgid "Illegal S/MIME header"
+msgstr "ÉÔÀµ¤Ê S/MIME ¥Ø¥Ã¥À"
+
+#: postpone.c:554
+msgid "Decryption failed."
+msgstr "Éü¹æ²½¤Ë¼ºÇÔ¤·¤¿¡£"
+
+#: query.c:46
+msgid "New Query"
+msgstr "¿·µ¬Ì䤤¹ç¤ï¤»"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "ÊÌ̾ºîÀ®"
+
+#: query.c:48
+msgid "Search"
+msgstr "¸¡º÷"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "±þÅúÂÔ¤Á..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Ì䤤¹ç¤ï¤»¥³¥Þ¥ó¥É¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£"
+
+#: query.c:286
+msgid "Query"
+msgstr "Ì䤤¹ç¤ï¤»"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Ì䤤¹ç¤ï¤»: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Ì䤤¹ç¤ï¤» '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "¥Ñ¥¤¥×"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "°õºþ"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "ÊݸÃæ..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤òÊݸ¤·¤¿¡£"
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "·Ù¹ð! %s ¤ò¾å½ñ¤­¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¡£·Ñ³?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤Ï¥³¥Þ¥ó¥É¤òÄ̤·¤Æ¤¢¤ë¡£"
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "ɽ¼¨¤Î¤¿¤á¤ËÄ̲ᤵ¤»¤ë¥³¥Þ¥ó¥É: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "¥Ñ¥¤¥×¤¹¤ë¥³¥Þ¥ó¥É: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "¤É¤Î¤è¤¦¤ËźÉÕ¥Õ¥¡¥¤¥ë %s ¤ò°õºþ¤¹¤ë¤«ÉÔÌÀ!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "¥¿¥°ÉÕ¤­ÅºÉÕ¥Õ¥¡¥¤¥ë¤ò°õºþ?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤ò°õºþ?"
+
+#: recvattach.c:938
+msgid "Can't decrypt encrypted message!"
+msgstr "°Å¹æ²½¥á¥Ã¥»¡¼¥¸¤òÉü¹æ²½¤Ç¤­¤Ê¤¤!"
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "źÉÕ¥Õ¥¡¥¤¥ë"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "ɽ¼¨¤¹¤Ù¤­Éû¥Ñ¡¼¥È¤¬¤Ê¤¤!"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "POP ¥µ¡¼¥Ð¤«¤éźÉÕ¥Õ¥¡¥¤¥ë¤òºï½ü¤Ç¤­¤Ê¤¤¡£"
+
+#: recvattach.c:1056
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "°Å¹æ²½¥á¥Ã¥»¡¼¥¸¤«¤é¤ÎźÉÕ¥Õ¥¡¥¤¥ë¤Îºï½ü¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¡£"
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "¥Þ¥ë¥Á¥Ñ¡¼¥ÈźÉÕ¥Õ¥¡¥¤¥ë¤Îºï½ü¤Î¤ß¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¡£"
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "message/rfc822 ¥Ñ¡¼¥È¤Î¤ßºÆÁ÷¤·¤Æ¤â¤è¤¤¡£"
+
+#: recvcmd.c:213
+msgid "Error bouncing message!"
+msgstr "¥á¥Ã¥»¡¼¥¸ºÆÁ÷¥¨¥é¡¼!"
+
+#: recvcmd.c:213
+msgid "Error bouncing messages!"
+msgstr "¥á¥Ã¥»¡¼¥¸ºÆÁ÷¥¨¥é¡¼!"
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "°ì»þ¥Õ¥¡¥¤¥ë %s ¤ò¥ª¡¼¥×¥ó¤Ç¤­¤Ê¤¤¡£"
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤È¤·¤ÆžÁ÷?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr "¥¿¥°ÉÕ¤­ÅºÉÕ¥Õ¥¡¥¤¥ë¤¹¤Ù¤Æ¤ÎÉü¹æ²½¤Ï¼ºÇÔ¡£À®¸ùʬ¤À¤± MIME Å¾Á÷?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "MIME ¥«¥×¥»¥ë²½¤·¤ÆžÁ÷?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "%s ¤òºîÀ®¤Ç¤­¤Ê¤¤¡£"
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "¥¿¥°ÉÕ¤­¥á¥Ã¥»¡¼¥¸¤¬°ì¤Ä¤â¸«¤Ä¤«¤é¤Ê¤¤¡£"
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr "¥¿¥°ÉÕ¤­ÅºÉÕ¥Õ¥¡¥¤¥ë¤¹¤Ù¤Æ¤ÎÉü¹æ²½¤Ï¼ºÇÔ¡£À®¸ùʬ¤À¤± MIME ¥«¥×¥»¥ë²½?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "ÄɲÃ"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "ÁÞÆþ"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "ºï½ü"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "¾µÇ§(OK)"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "mixmaster ¤Î type2.list ¼èÆÀ¤Ç¤­¤º!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "remailer ¥Á¥§¡¼¥ó¤òÁªÂò¡£"
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "¥¨¥é¡¼: %s ¤ÏºÇ¸å¤Î remailer ¥Á¥§¡¼¥ó¤Ë¤Ï»È¤¨¤Ê¤¤¡£"
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Mixmaster ¥Á¥§¡¼¥ó¤Ï %d ¥¨¥ì¥á¥ó¥È¤ËÀ©¸Â¤µ¤ì¤Æ¤¤¤ë¡£"
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "remailer ¥Á¥§¡¼¥ó¤Ï¤¹¤Ç¤Ë¶õ¡£"
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "¤¹¤Ç¤ËºÇ½é¤Î¥Á¥§¡¼¥ó¥¨¥ì¥á¥ó¥È¤òÁªÂò¤·¤Æ¤¤¤ë¡£"
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "¤¹¤Ç¤ËºÇ¸å¤Î¥Á¥§¡¼¥ó¥¨¥ì¥á¥ó¥È¤òÁªÂò¤·¤Æ¤¤¤ë¡£"
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Mixmaster ¤Ï Cc ¤Þ¤¿¤Ï Bcc ¥Ø¥Ã¥À¤ò¼õ¤±¤Ä¤±¤Ê¤¤¡£"
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr "mixmaster ¤ò»È¤¦»þ¤Ë¤Ï¡¢hostname ÊÑ¿ô¤ËŬÀÚ¤ÊÃͤòÀßÄꤻ¤è¡£"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "¥á¥Ã¥»¡¼¥¸Á÷¿®¥¨¥é¡¼¡¢»Ò¥×¥í¥»¥¹¤¬ %d ¤Ç½ªÎ»¡£\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "¥á¥Ã¥»¡¼¥¸Á÷¿®¥¨¥é¡¼¡£"
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "%s ·Á¼°¤ËÉÔŬÀڤʥ¨¥ó¥È¥ê¤¬ \"%s\" ¤Î %d ¹ÔÌܤˤ¢¤ë"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "mailcap ¥Ñ¥¹¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "%s ·Á¼°ÍѤΠmailcap ¥¨¥ó¥È¥ê¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: °ú¿ô¤¬¾¯¤Ê¤¹¤®¤ë"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: °ú¿ô¤¬Â¿¤¹¤®¤ë"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Âê̾¤¬¤Ê¤¤¡£Ãæ»ß?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "̵Âê¤ÇÃæ»ß¤¹¤ë¡£"
+
+# ¤³¤³¤Ç no ¤À¤È from ¤ËÊÖ¿®¤¹¤ë¡£
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "%s%s ¤Ø¤ÎÊÖ¿®?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "%s%s ¤Ø¤Î¥Õ¥©¥í¡¼¥¢¥Ã¥×?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "²Ä»ë¤Ê¥¿¥°ÉÕ¤­¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "ÊÖ¿®¤Ë¥á¥Ã¥»¡¼¥¸¤ò´Þ¤á¤ë¤«?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "°úÍÑ¥á¥Ã¥»¡¼¥¸¤ò¼è¤ê¹þ¤ßÃæ..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "¤¹¤Ù¤Æ¤ÎÍ׵ᤵ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤ò¼è¤ê¹þ¤á¤Ê¤«¤Ã¤¿!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤È¤·¤ÆžÁ÷?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "žÁ÷¥á¥Ã¥»¡¼¥¸¤ò½àÈ÷Ãæ..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "½ñ¤­¤«¤±¤Î¥á¥Ã¥»¡¼¥¸¤ò¸Æ¤Ó½Ð¤¹?"
+
+#: send.c:1336
+msgid "Edit forwarded message?"
+msgstr "žÁ÷¥á¥Ã¥»¡¼¥¸¤òÊÔ½¸?"
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "¥á¥Ã¥»¡¼¥¸¤Ï̤Êѹ¹¡£Ãæ»ß?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "̤Êѹ¹¤Î¥á¥Ã¥»¡¼¥¸¤òÃæ»ß¤·¤¿¡£"
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "¥á¡¼¥ë¤ÏÁ÷¿®¤µ¤ì¤Ê¤«¤Ã¤¿¡£"
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "¥á¥Ã¥»¡¼¥¸¤Ï½ñ¤­¤«¤±¤ÇÊÝᤵ¤ì¤¿¡£"
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "¼õ¿®¼Ô¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "¼õ¿®¼Ô¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿¡£"
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Âê̾¤¬¤Ê¤¤¡£Á÷¿®¤òÃæ»ß?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Âê̾¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¡£"
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Á÷¿®Ãæ..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¤Ç¤­¤Ê¤«¤Ã¤¿¡£"
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "¥á¡¼¥ë¤òÁ÷¿®¤·¤¿¡£"
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤ÇÁ÷¿®¡£"
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "boundary ¥Ñ¥é¥á¡¼¥¿¤¬¤ß¤Ä¤«¤é¤Ê¤¤! [¤³¤Î¥¨¥é¡¼¤òÊó¹ð¤»¤è]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s ¤Ï¤â¤Ï¤ä¸ºß¤·¤Ê¤¤!"
+
+# regular file ¤Ã¤Æ¡ÖÄ̾ï¥Õ¥¡¥¤¥ë¡×¤Ç¤¹¤«¡©
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "%s ¤Ïɸ½à¥Õ¥¡¥¤¥ë¤Ç¤Ï¤Ê¤¤¡£"
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "%s ¤ò¥ª¡¼¥×¥ó¤Ç¤­¤Ê¤«¤Ã¤¿"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "¥á¥Ã¥»¡¼¥¸Á÷¿®¥¨¥é¡¼¡£»Ò¥×¥í¥»¥¹¤¬ %d (%s) ¤Ç½ªÎ»¤·¤¿¡£"
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "ÇÛ¿®¥×¥í¥»¥¹¤Î½ÐÎÏ"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr "ÉÔÀµ¤Ê IDN %s ¤ò resent-from ¤Î½àÈ÷Ãæ¤Ëȯ¸«¡£"
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s... ½ªÎ»¡£\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "%s ¤ò¼õ¤±¼è¤Ã¤¿¡£½ªÎ»¡£\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "¥·¥°¥Ê¥ë %d ¤ò¼õ¤±¼è¤Ã¤¿¡£½ªÎ»¡£\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr "¿®ÍѺѤߠ "
+
+#: smime.c:303
+msgid "Verified  "
+msgstr "¸¡¾ÚºÑ¤ß  "
+
+#: smime.c:306
+msgid "Unverified"
+msgstr "̤¸¡¾Ú    "
+
+#: smime.c:309
+msgid "Expired   "
+msgstr "´ü¸ÂÀڤ젠"
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr "ÇÑ´þºÑ¤ß  "
+
+# ÉÔÀµ¤è¤êÉÔ¿®¤«¡©
+#: smime.c:315
+msgid "Invalid   "
+msgstr "ÉÔÀµ      "
+
+#: smime.c:318
+msgid "Unknown   "
+msgstr "ÉÔÌÀ      "
+
+#: smime.c:347
+msgid "Enter keyID: "
+msgstr "¸°IDÆþÎÏ: "
+
+#: smime.c:370
+#, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "S/MIME ¾ÚÌÀ½ñ¤Ï \"%s\" ¤Ë°ìÃס£"
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr "ID %s ¤Ï̤¸¡¾Ú¡£%s ¤Ë»ÈÍÑ?"
+
+#: smime.c:523 smime.c:592
+#, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "(̤¿®ÍѤÊ!) ID %s ¤ò %s ¤Ë»ÈÍÑ?"
+
+#: smime.c:526 smime.c:595
+#, c-format
+msgid "Use ID %s for %s ?"
+msgstr "ID %s ¤ò %s ¤Ë»ÈÍÑ?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr "·Ù¹ð: ¤Þ¤À ID %s ¤ò¿®ÍѤ¹¤ë¤«·èÄꤷ¤Æ¤¤¤Ê¤¤¡£(²¿¤«¥­¡¼¤ò²¡¤»¤Ð³¤¯)"
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr "%s ¤Î (Àµ¤·¤¤) ¾ÚÌÀ½ñ¤¬¸«¤Ä¤«¤é¤Ê¤¤¡£"
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "¥¨¥é¡¼: OpenSSL »Ò¥×¥í¥»¥¹ºîÀ®ÉÔǽ!"
+
+#: smime.c:1197
+msgid "no certfile"
+msgstr "¾ÚÌÀ½ñ¥Õ¥¡¥¤¥ë¤¬¤Ê¤¤"
+
+#: smime.c:1200
+msgid "no mbox"
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬¤Ê¤¤"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr "OpenSSL ¤«¤é½ÐÎϤ¬¤Ê¤¤.."
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr "·Ù¹ð: Ãæ´Ö¾ÚÌÀ½ñ¤¬¸«¤Ä¤«¤é¤Ê¤¤¡£"
+
+#: smime.c:1426
+msgid "Can't open OpenSSL subprocess!"
+msgstr "OpenSSL »Ò¥×¥í¥»¥¹¥ª¡¼¥×¥óÉÔǽ!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr "OpenSSL ¤«¤é½ÐÎϤ¬¤Ê¤¤..."
+
+#: smime.c:1629 smime.c:1751
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- OpenSSL ½ÐÎϽªÎ» --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- ¥¨¥é¡¼: OpenSSL »Ò¥×¥í¥»¥¹¤òºîÀ®¤Ç¤­¤Ê¤«¤Ã¤¿! --]\n"
+
+#: smime.c:1755
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr "[-- °Ê²¼¤Î¥Ç¡¼¥¿¤Ï S/MIME ¤Ç°Å¹æ²½¤µ¤ì¤Æ¤¤¤ë --]\n"
+
+#: smime.c:1758
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr "[-- °Ê²¼¤Î¥Ç¡¼¥¿¤Ï S/MIME ¤Ç½ð̾¤µ¤ì¤Æ¤¤¤ë --]\n"
+
+#: smime.c:1822
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- S/MIME °Å¹æ²½¥Ç¡¼¥¿½ªÎ» --]\n"
+
+#: smime.c:1824
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- S/MIME ½ð̾¥Ç¡¼¥¿½ªÎ» --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹À°ÎóÃæ..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "À°Îóµ¡Ç½¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿! [¤³¤Î¥Ð¥°¤òÊó¹ð¤»¤è]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬¤Ê¤¤)"
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "¿Æ¥á¥Ã¥»¡¼¥¸¤Ï¤³¤ÎÀ©¸Â¤µ¤ì¤¿É½¼¨ÈϰϤǤÏÉԲĻ롣"
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "¿Æ¥á¥Ã¥»¡¼¥¸¤¬ÍøÍѤǤ­¤Ê¤¤¡£"
+
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "OpenSSL µ¯Æ°Ãæ..."
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "%s ¤Ø¥á¥Ã¥»¡¼¥¸¤òºÆÁ÷?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "%s ¤Ø¥á¥Ã¥»¡¼¥¸¤òºÆÁ÷?"
+
+#~ msgid "This message seems to require key %s. (Any key to continue)"
+#~ msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤Ï¸° %s ¤òÍ׵ᤷ¤Æ¤¤¤ë¤è¤¦¤À¡£(²¿¤«¥­¡¼¤ò²¡¤»¤Ð³¤¯)"
+
+#~ msgid "Alert: No mailbox specified in certificate.\n"
+#~ msgstr "·Ù¹ð: ¾ÚÌÀ½ñ¤Ç¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¡£\n"
+
+#~ msgid "Alert: Certificate does *NOT* belong to \"%s\".\n"
+#~ msgstr "·Ù¹ð: ¾ÚÌÀ½ñ¤¬ \"%s\" ¤Ë½ê°¤·¤Æ *¤¤¤Ê¤¤*¡£\n"
+
+#~ msgid "Certificate \"%s\" exists for \"%s\"."
+#~ msgstr "¾ÚÌÀ½ñ \"%s\" ¤¬ \"%s\" ¤ËÂФ·¤Æ¸ºß¤¹¤ë¡£"
+
+#~ msgid "Successfully added certificate \"%s\" for \"%s\". "
+#~ msgstr "¾ÚÌÀ½ñ \"%s\" ¤ò \"%s\" ¤ËÄɲÃÀ®¸ù¡£"
+
+#~ msgid "Certificate *NOT* added."
+#~ msgstr "¾ÚÌÀ½ñ¤ÏÄɲà*¤µ¤ì¤º* ¡£"
+
+#~ msgid "This ID's validity level is undefined."
+#~ msgstr "¤³¤Î ID ¤Î¿®ÍÑÅÙ¤Ï̤ÄêµÁ¤Ç¤¢¤ë¡£"
diff --git a/po/ko.gmo b/po/ko.gmo
new file mode 100644 (file)
index 0000000..c220fe2
Binary files /dev/null and b/po/ko.gmo differ
diff --git a/po/ko.po b/po/ko.po
new file mode 100644 (file)
index 0000000..1cee78f
--- /dev/null
+++ b/po/ko.po
@@ -0,0 +1,4143 @@
+# Korean messages for mutt.
+# Copyright (C) 1998 Free Software Foundation, Inc.
+# Sang-Jin Hwang,ý <accel@linux.mdworld.com>, 1998, 1999.
+# Byeong-Chan Kim <redhands@linux.sarag.net>, 2000.
+# Im Eunjea <eunjea@kldp.org>, 2002, 2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 1.5.1i\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2003-08-26 23:46+300\n"
+"Last-Translator: Im Eunjea <eunjea@kldp.org>\n"
+"Language-Team: Im Eunjea <eunjea@kldp.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=EUC-KR\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "À̸§ ¹Ù²Ù±â (%s): "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "%s@%sÀÇ ¾ÏÈ£: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Á¾·á"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "»èÁ¦"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "º¹±¸"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "¼±ÅÃ"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "µµ¿ò¸»"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "º°ÄªÀÌ ¾øÀ½!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "º°Äª"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "»ç¿ë º°Äª: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "°°Àº À̸§ÀÇ º°ÄªÀÌ À̹̠ÀÖÀ½!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr "°æ°í: ÀÌ ¾Ë¸®¾Æ½º´Â ÀÛµ¿ÇÏÁö ¾Ê½À´Ï´Ù. °íÄ¥±î¿ä?"
+
+#: alias.c:279
+msgid "Address: "
+msgstr "ÁÖ¼Ò: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr "¿À·ù: '%s'´Â À߸øµÈ IDN."
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "À̸§: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] Ãß°¡ÇÒ±î¿ä?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "ÆÄÀϷΠÀúÀå: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "º°Äª Ãß°¡µÊ."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "À̸§ ÅÛÇ÷¹ÀÌÆ®¿Í ÀÏÄ¡ÇÏÁö ¾ÊÀ½. °è¼ÓÇÒ±î¿ä?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "Mailcap ÀÛ¼º Ç׸ñÀº %%s°¡ ÇÊ¿äÇÔ"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "\"%s\" ½ÇÇà ¿À·ù!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Çì´õ¸¦ ºÐ¼®Çϱâ À§ÇÑ ÆÄÀÏ ¿­±â ½ÇÆÐ"
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Çì´õ Á¦°Å¸¦ À§ÇÑ ÆÄÀÏ ¿­±â ½ÇÆÐ"
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "%sÀÇ mailcap ÀÛ¼º Ç׸ñÀÌ ¾øÀ½, ºó ÆÄÀÏ »ý¼º."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "Mailcap ÆíÁý Ç׸ñÀº %%s°¡ ÇÊ¿äÇÔ"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "ÆíÁýÀ» À§ÇÑ %sÀÇ mailcap Ç׸ñÀÌ ¾øÀ½"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "mailcap Ç׸ñ¿¡¼­ ÀÏÄ¡Çϴ °ÍÀ» Ã£À» ¼ö ¾øÀ½. text·Î º¸±â."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "Á¤ÀǵÇÁö ¾ÊÀº MIME Çü½Ä. Ã·ºÎ¹°À» º¼ ¼ö ¾øÀ½."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "ÇÊÅ͸¦ ¸¸µé ¼ö ¾øÀ½"
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "ÇÊÅ͸¦ ¸¸µé ¼ö ¾øÀ½"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "¾²±â ½ÇÆÐ!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "¾î¶»°Ô Ãâ·ÂÇÒ Áö ¾Ë ¼ö ¾øÀ½!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "µð·ºÅ丮 À̵¿"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "¸Å½ºÅ©"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s´Â µð·ºÅ丮°¡ ¾Æ´Õ´Ï´Ù."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "¸ÞÀÏÇÔ [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "°¡ÀÔ [%s], ÆÄÀÏ ¸Å½ºÅ©: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "µð·ºÅ丮 [%s], ÆÄÀÏ ¸Å½ºÅ©: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "µð·ºÅ丮´Â Ã·ºÎÇÒ ¼ö ¾øÀ½!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "ÆÄÀÏ ¸Å½ºÅ©¿Í ÀÏÄ¡Çϴ ÆÄÀÏ ¾øÀ½."
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "»ý¼ºÀº IMAP ¸ÞÀÏÇÔ¿¡¼­¸¸ Áö¿øµÊ"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "»èÁ¦´Â IMAP ¸ÞÀÏÇÔ¿¡¼­¸¸ Áö¿øµÊ"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Á¤¸»·Î \"%s\" ¸ÞÀÏÇÔÀ» Áö¿ï±î¿ä?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "¸ÞÀÏÇÔ »èÁ¦µÊ."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "¸ÞÀÏÇÔÀÌ »èÁ¦µÇÁö ¾ÊÀ½."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "À̵¿ÇÒ µð·ºÅ丮: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "µð·ºÅ丮 °Ë»çÁß ¿À·ù."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "ÆÄÀÏ ¸Å½ºÅ©: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "¿ª¼øÁ¤·Ä ¹æ¹ý: ³¯Â¥(d), ³¹¸»(a), Å©±â(z), ¾ÈÇÔ(n)?"
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Á¤·Ä ¹æ¹ý: ³¯Â¥(d), ±ÛÀÚ(a), Å©±â(z), ¾ÈÇÔ(n)?"
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "dazn"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "»õ ÆÄÀÏ À̸§: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "µð·ºÅ丮¸¦ º¼ ¼ö ¾øÀ½"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "ÆÄÀÏ º¸±â ½Ãµµ Áß ¿À·ù"
+
+#: buffy.c:442
+msgid "New mail in "
+msgstr "»õ ¸ÞÀÏ µµÂø "
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: Å͹̳ο¡¼­ Áö¿øµÇÁö ¾Ê´Â »ö."
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: »ö»ó ¾øÀ½."
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: Ç׸ñ ¾øÀ½"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: À妽º Ç׸ñ¿¡¼­¸¸ »ç¿ë °¡´ÉÇÑ ¸í·É¾î."
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: Àμö°¡ ºÎÁ·ÇÔ"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Àμö°¡ ºüÁ³À½."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: Àμö°¡ ºÎÁ·ÇÔ"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: Àμö°¡ ºÎÁ·ÇÔ"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: ¼Ó¼º ¾øÀ½."
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "Àμö°¡ ºÎÁ·ÇÔ"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "Àμö°¡ ³Ê¹« ¸¹À½"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "±âº» »ö»óµéÀÌ Áö¿øµÇÁö ¾ÊÀ½"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "PGP ¼­¸íÀ» È®ÀÎÇÒ±î¿ä?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "ÀӽàÆÄÀÏÀ» ¸¸µé ¼ö ¾øÀ½!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Ç¥½Ã ÇÊÅ͸¦ ¸¸µé ¼ö ¾øÀ½"
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "¸ÞÀÏÀ» º¹»çÇÒ ¼ö ¾øÀ½"
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr "S/MIME ¼­¸í È®Àο¡ ¼º°øÇÔ."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr "S/MIME ÀÎÁõ¼­ ¼ÒÀ¯ÀÚ¿Í º¸³½ÀÌ°¡ ÀÏÄ¡ÇÏÁö ¾ÊÀ½."
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr "S/MIME ¼­¸í °ËÁõ¿¡ ½ÇÆÐÇÔ."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "PGP ¼­¸í È®Àο¡ ¼º°øÇÔ."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "PGP ¼­¸í °ËÁõ¿¡ ½ÇÆÐÇÔ."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "¸í·É¾î: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "¸ÞÀÏÀ» Àü´ÞÇÒ ÁÖ¼Ò: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "¼±ÅÃÇÑ ¸ÞÀÏÀ» Àü´ÞÇÑ ÁÖ¼Ò: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "ÁÖ¼Ò ºÐ¼® Áß ¿À·ù!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr "À߸øµÈ IDN: '%s'"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "%s¿¡°Ô ¸ÞÀÏ Àü´Þ"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "%s¿¡°Ô ¸ÞÀÏ Àü´Þ"
+
+#: commands.c:294 recvcmd.c:192
+msgid "Message not bounced."
+msgstr "¸ÞÀÏÀÌ Àü´Þ µÇÁö ¾ÊÀ½."
+
+#: commands.c:294 recvcmd.c:192
+msgid "Messages not bounced."
+msgstr "¸ÞÀϵéÀÌ Àü´Þ µÇÁö ¾ÊÀ½."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "¸ÞÀÏÀÌ Àü´ÞµÊ."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "¸ÞÀϵéÀÌ Àü´ÞµÊ."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "ÇÊÅÍ°úÁ¤À» »ý¼ºÇÒ ¼ö ¾øÀ½"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "¸í·É¾î·Î ¿¬°á: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "ÇÁ¸°Æ® ¸í·ÉÀÌ Á¤ÀǵÇÁö ¾ÊÀ½."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "¸ÞÀÏÀ» ÇÁ¸°Æ® ÇÒ±î¿ä?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Ç¥½ÃÇÑ ¸ÞÀÏÀ» ÇÁ¸°Æ® ÇÒ±î¿ä?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "¸ÞÀÏÀ» ÇÁ¸°Æ®ÇÔ"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "¸ÞÀϵéÀ» ÇÁ¸°Æ®ÇÔ"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "¸ÞÀÏÀ» ÇÁ¸°Æ® ÇÒ ¼ö ¾øÀ½"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "¸ÞÀϵéÀ» ÇÁ¸°Æ® ÇÒ ¼ö ¾øÀ½"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"¿ª¼øÁ¤·Ä: (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Á¤·Ä: (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dfrsotuzc"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "½© ¸í·É¾î: "
+
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "º¹È£È­-ÀúÀå%s ¸ÞÀÏÇÔÀ¸·Î"
+
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "º¹È£È­-º¹»ç%s ¸ÞÀÏÇÔÀ¸·Î"
+
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "Çص¶-ÀúÀå%s ¸ÞÀÏÇÔÀ¸·Î"
+
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "Çص¶-º¹»ç%s ¸ÞÀÏÇÔÀ¸·Î"
+
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "ÀúÀå%s ¸ÞÀÏÇÔÀ¸·Î"
+
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "º¹»ç%s ¸ÞÀÏÇÔÀ¸·Î"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " Ç¥½ÃµÊ"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "%s·Î º¹»ç..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "º¸³¾¶§ %s·Î º¯È¯ÇÒ±î¿ä?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "%s·Î Content-TypeÀÌ ¹Ù²ñ."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "¹®ÀÚ¼ÂÀÌ %s¿¡¼­ %s·Î ¹Ù²ñ."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "º¯È¯ÇÏÁö ¾ÊÀ½"
+
+#: commands.c:914
+msgid "converting"
+msgstr "º¯È¯Áß"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "÷ºÎ¹°ÀÌ ¾øÀ½."
+
+#: compose.c:84
+msgid "Send"
+msgstr "º¸³¿"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Ãë¼Ò"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "ÆÄÀϠ÷ºÎ"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "¼³¸í"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "¼­¸í, ¾Ïȣȭ"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "¾Ïȣȭ"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "¼­¸í"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "¾øÀ½"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " »ç¿ë ¼­¸í: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<±âº»°ª>"
+
+#: compose.c:149
+msgid "Encrypt with: "
+msgstr "¾Ïȣȭ ¹æ½Ä: "
+
+#: compose.c:165
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "PGP ¾Ïȣȭ(e), ¼­¸í(s), »ç¿ë ¼­¸í(a), µÑ ´Ù(b), Ãë¼Ò(f)? "
+
+#: compose.c:166
+msgid "esabf"
+msgstr "esabf"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "»ç¿ë ¼­¸í: "
+
+#: compose.c:227
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "S/MIME ¾Ïȣȭ(e), ¼­¸í(s), ¹æ½Ä(w), »ç¿ë ¼­¸í(a), µÑ ´Ù(b), Ãë¼Ò(f)? "
+
+#: compose.c:228
+msgid "eswabf"
+msgstr "eswabf"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr "1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, Ãë¼Ò(f)? "
+
+#: compose.c:238
+msgid "12345f"
+msgstr "12345f"
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d]´Â ´õ ÀÌ»ó Á¸ÀçÇÏÁö ¾ÊÀ½!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] º¯°æµÊ. ´Ù½Ã ÀÎÄÚµùÇÒ±î¿ä?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Ã·ºÎ¹°"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr "°æ°í: '%s' À߸øµÈ IDN."
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "÷ºÎ¹°¸¸À» »èÁ¦ÇÒ ¼ö´Â ¾ø½À´Ï´Ù."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr "À߸øµÈ IDN \"%s\": '%s'"
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "¼±ÅõȠÆÄÀÏÀ» Ã·ºÎÁß..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "%s¸¦ Ã·ºÎÇÒ ¼ö ¾øÀ½!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "¸ÞÀÏÀ» Ã·ºÎÇϱâ À§ÇØ ¸ÞÀÏÇÔÀ» ¿°"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "Æú´õ¿¡ ¸ÞÀÏÀÌ ¾øÀ½."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "÷ºÎÇÏ°íÀÚ Çϴ ¸ÞÀÏÀ» Ç¥½ÃÇϼ¼¿ä."
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "÷ºÎÇÒ ¼ö ¾øÀ½!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "ÀúÀåÀº ÅؽºÆ® Ã·ºÎ¹°¿¡¸¸ Àû¿ëµÊ."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "ÇöÀç Ã·ºÎ¹°Àº º¯È¯ÇÒ¼ö ¾øÀ½."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "ÇöÀç Ã·ºÎ¹°Àº º¯È¯ °¡´ÉÇÔ."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "À߸øµÈ ÀÎÄÚµù"
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "ÀÌ ¸ÞÀÏÀÇ º¹»çº»À» ÀúÀåÇÒ±î¿ä?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "À̸§ ¹Ù²Ù±â: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "%s: %sÀÇ »óŸ¦ ¾Ë¼ö ¾øÀ½."
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "»õ ÆÄÀÏ: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Content-TypeÀÌ base/sub Çü½ÄÀÓ."
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "¾Ë ¼ö ¾ø´Â Content-Type %s"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "%s ÆÄÀÏÀ» ¸¸µé ¼ö ¾øÀ½"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "¿©±â¿¡ Àִ °ÍµéÀº Ã·ºÎ °úÁ¤¿¡¼­ ½ÇÆÐÇÑ °ÍµéÀÔ´Ï´Ù."
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "ÀÌ ¸ÞÀÏÀ» ³ªÁß¿¡ º¸³¾±î¿ä?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "¸ÞÀÏÇÔ¿¡ ¸ÞÀÏ ¾²±â"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "%s¿¡ ¸ÞÀÏ ¾²´ÂÁß..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "¸ÞÀÏ ¾²±â ¿Ï·á."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr "À̹̠S/MIMEÀÌ ¼±ÅõÊ. Áö¿ì°í °è¼ÓÇÒ±î¿ä? "
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr "PGP°¡ ¼±ÅõÊ. Áö¿ì°í °è¼ÓÇÒ±î¿ä? "
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr " (ÇöÀ砽ð£: %c)"
+
+#: crypt.c:71
+#, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- %s Ãâ·Â °á°ú %s --]\n"
+
+#: crypt.c:86
+msgid "Passphrase(s) forgotten."
+msgstr "¾ÏÈ£ ¹®±¸ ÀØÀ½."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "PGP ¾ÏÈ£ ¹®±¸ ÀÔ·Â:"
+
+#: crypt.c:147
+msgid "Enter SMIME passphrase:"
+msgstr "SMIME ¾ÏÈ£ ¹®±¸ ÀÔ·Â:"
+
+#: crypt.c:192
+msgid "Create a traditional (inline) PGP message?"
+msgstr "±¸½Ä inline PGP ¸Þ¼¼Áö¸¦ ¸¸µé±î¿ä?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "PGP¸¦ ±¸µ¿ÇÕ´Ï´Ù..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr "³»¿ë¿¡ S/MIME Ç¥½Ã°¡ ¾ø´Â °æ¿ì´Â Áö¿øÇÏÁö ¾ÊÀ½."
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr "PGP ¿­¼è¸¦ ÃßÃâÇϴ Áß...\n"
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr "S/MIME ÀÎÁõ¼­ ÃßÃâÇϴ Áß...\n"
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- ¿À·ù: ÀÏÄ¡ÇÏÁö ¾Ê´Â multipart/signed ±¸Á¶! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- ¿À·ù: ¾Ë ¼ö ¾ø´Â multipart/signed ÇÁ·ÎÅäÄÝ %s! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Warning: %s/%s ¼­¸íÀ» È®ÀΠÇÒ ¼ö ¾øÀ½ --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- ¾Æ·¡ÀÇ ÀÚ·á´Â ¼­¸í µÇ¾úÀ½ --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- °æ°í: ¼­¸íÀ» Ã£À» ¼ö ¾øÀ½. --]\n"
+"\n"
+
+#: crypt.c:924
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- ¼­¸í ÀÚ·áÀÇ ³¡ --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "yes"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "no"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "MuttÀ» Á¾·áÇÒ±î¿ä?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "¾Ë ¼ö ¾ø´Â ¿À·ù"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "¾Æ¹«Å°³ª ´©¸£¸é °è¼ÓÇÕ´Ï´Ù..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr "(¸ñ·Ï º¸±â '?'): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "¿­¸° ¸ÞÀÏÇÔÀÌ ¾øÀ½."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "¸ÞÀÏÀÌ ¾øÀ½."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "Àбâ Àü¿ë ¸ÞÀÏÇÔ."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "¸ÞÀϠ÷ºÎ ¸ðµå¿¡¼­ Çã°¡µÇÁö ¾Ê´Â ±â´ÉÀÓ."
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "¸ÞÀÏ ¾øÀ½."
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "Àбâ Àü¿ë ¸ÞÀÏÇÔ¿¡ ¾µ¼ö ¾øÀ½!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "º¯°æ »çÇ×Àº Æú´õ¸¦ ´ÝÀ»¶§ ±â·ÏµÊ."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "º¯°æ »çÇ×À» ±â·Ï ÇÏÁö ¾ÊÀ½."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Á¾·á"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "ÀúÀå"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "¸ÞÀÏ"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "´äÀå"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "±×·ì"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "¿ÜºÎ¿¡¼­ ¸ÞÀÏÇÔÀÌ º¯°æµÊ. Ç÷¡±×°¡ Æ²¸± ¼ö ÀÖÀ½"
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "ÇöÀç ¸ÞÀÏÇÔ¿¡ »õ ¸ÞÀÏ µµÂø."
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "¿ÜºÎ¿¡¼­ ¸ÞÀÏÇÔÀÌ º¯°æµÊ."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Ç¥½ÃµÈ ¸ÞÀÏÀÌ ¾øÀ½."
+
+#: curs_main.c:653 menu.c:896
+#, fuzzy
+msgid "Nothing to do."
+msgstr "%s·Î ¿¬°á Áß..."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "À̵¿: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "¸ÞÀÏÀÇ ¹øÈ£¸¸ °¡´É."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "¸ÞÀÏÀÌ º¼ ¼ö ¾ø´Â »óÅÂÀÓ."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "À߸øµÈ ¸ÞÀÏ ¹øÈ£."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "ÀÏÄ¡Çϴ ¸ÞÀÏ »èÁ¦: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "Á¦ÇÑ ÆÐÅÏÀÌ ¾øÀ½."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "ÆÐÅÏ: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "ÆÐÅÏ°ú ÀÏÄ¡Çϴ ¸ÞÀÏ: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "MuttÀ» Á¾·áÇÒ±î¿ä?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "ÀÏÄ¡Çϴ ¸ÞÀÏ¿¡ Ç¥½ÃÇÔ: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "ÀÏÄ¡Çϴ ¸ÞÀÏÀ» »èÁ¦ Ãë¼Ò: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "ÀÏÄ¡Çϴ ¸ÞÀÏÀ» Ç¥½Ã ÇØÁ¦: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Àбâ Àü¿ëÀ¸·Î ¸ÞÀÏÇÔ ¿­±â"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "¸ÞÀÏÇÔ ¿­±â"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s´Â ¸ÞÀÏÇÔÀÌ ¾Æ´Ô."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "ÀúÀåÇÏÁö ¾Ê°í MuttÀ» ³¡³¾±î¿ä?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "¸¶Áö¸· ¸Þ¼¼ÁöÀÔ´Ï´Ù."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "»èÁ¦ Ãë¼ÒµÈ ¸ÞÀÏ ¾øÀ½."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "ù¹ø° ¸Þ¼¼ÁöÀÔ´Ï´Ù."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "À§ºÎÅÍ ´Ù½Ã °Ë»ö."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "¾Æ·¡ºÎÅÍ ´Ù½Ã °Ë»ö."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "»õ ¸ÞÀÏ ¾øÀ½"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "ÀÐÁö ¾ÊÀº ¸ÞÀÏ ¾øÀ½"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " º¸±â Á¦ÇÑ"
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "POP ¼­¹ö¿¡¼­ 'Áß¿ä' Ç¥½Ã¸¦ ¹Ù²Ü ¼ö ¾øÀ½."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "´õ ÀÌ»ó ±ÛŸ·¡ ¾øÀ½."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "óÀ½ ±ÛŸ·¡ÀÔ´Ï´Ù."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "±ÛŸ·¡ ¸ðµå°¡ ¾Æ´Ô."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "±ÛŸ·¡¿¡ ÀÐÁö ¾ÊÀº ¸Þ¼¼Áö ÀÖÀ½."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "POP ¼­¹öÀÇ ¸ÞÀÏÀ» ¼öÁ¤ÇÒ ¼ö ¾øÀ½."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\t~ ·Î ½ÃÀÛÇϴ ÇÑÁÙÀ» »ðÀÔÇϱâ\n"
+"~b »ç¿ëÀÚ\tBcc: Ç׸ñ¿¡ »ç¿ëÀÚ Ãß°¡Çϱâ\n"
+"~c »ç¿ëÀÚ\tCc: Ç׸ñ¿¡ »ç¿ëÀÚ Ãß°¡Çϱâ\n"
+"~f ¸Þ¼¼Áö\t¸Þ¼¼Áö Æ÷ÇÔÇϱâ\n"
+"~F ¸Þ¼¼Áö\tÇì´õ Æ÷ÇÔ ÀÌ¿Ü¿¡´Â ~f ¿Í µ¿ÀÏ\n"
+"~h\t\t¸Þ¼¼Áö Çì´õ ÆíÁý\n"
+"~m ¸Þ¼¼Áö\tÀο렸޼¼Áö Æ÷ÇÔ\n"
+"~M ¸Þ¼¼Áö\tÇì´õ Æ÷ÇÔ ÀÌ¿Ü¿¡´Â ~m °ú µ¿ÀÏ\n"
+"~p\t\t¸Þ¼¼Áö Àμâ\n"
+"~q\t\t¸Þ¼¼Áö ÀúÀå ÈÄ ÆíÁý±â Á¾·á\n"
+"~t »ç¿ëÀÚ\t»ç¿ëÀÚ¸¦ To: Ç׸ñ¿¡ Ãß°¡\n"
+"~u\t\tÀÌÀü ÁÙ ´Ù½Ã ºÒ·¯¿È\n"
+"~v\t\t$visual ÆíÁý±â·Î ¸Þ¼¼Áö ÆíÁý\n"
+"~w ÆÄÀÏ\t\tÆÄÀϷΠ¸Þ¼¼Áö ÀúÀå\n"
+"~x\t\tÆíÁý ¹«½ÃÇÏ°í ÆíÁý±â Á¾·á\n"
+"~?\t\tÇöÀç ¸Þ¼¼Áö\n"
+".\t\tÁÙ¿¡ È¦·Î ÀÖÀ» °æ¿ì ÀԷ Á¾·á\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: À߸øµÈ ¸ÞÀÏ ¹øÈ£.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(ÁÙ¿¡ . È¦·Î »ç¿ëÇÏ¿© ¸Þ¼¼Áö ³¡³»±â)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "¸ÞÀÏÇÔ ¾øÀ½.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "¸Þ¼¼Áö¿¡ Æ÷ÇÔµÊ:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(°è¼Ó)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "ÆÄÀÏÀ̸§ÀÌ ºüÁü.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "¸Þ¼¼Áö¿¡ ³»¿ë ¾øÀ½.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr "À߸øµÈ IDN %s: '%s'\n"
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: ¾Ë ¼ö ¾ø´Â ÆíÁý ¸í·É (~? µµ¿ò¸»)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "ÀӽàÆú´õ¸¦ ¸¸µé ¼ö ¾øÀ½: %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "Àӽà¸ÞÀÏ Æú´õ¸¦ ¾µ ¼ö ¾øÀ½: %s"
+
+#: editmsg.c:101
+#, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "Àӽà¸ÞÀÏ Æú´õ¸¦ »èÁ¦ ÇÒ ¼ö ¾øÀ½: %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "¸Þ¼¼Áö ÆÄÀÏÀÌ ºñ¾úÀ½!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "¸Þ¼¼Áö°¡ º¯°æµÇÁö ¾ÊÀ½!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "¸Þ¼¼Áö ÆÄÀÏÀ» ¿­ ¼ö ¾øÀ½: %s"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Æú´õ¿¡ Ã·°¡ÇÒ ¼ö ¾øÀ½: %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "ÀӽàÆÄÀÏÀ» ÀúÀåÇϴ Áß ¿À·ù: %s"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Ç÷¡±× ¼³Á¤"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Ç÷¡±× Áö¿ò"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr "[-- ¿À·ù:  Multipart/Alternative ºÎºÐÀ» Ç¥½Ã ¼ö ¾øÀ½! --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Ã·ºÎ¹° #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Á¾·ù: %s/%s, ÀÎÄÚµù ¹æ½Ä: %s, Å©±â: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- %s¸¦ »ç¿ëÇÑ ÀÚµ¿ º¸±â --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "ÀÚµ¿ º¸±â ¸í·É ½ÇÇà: %s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- %s¸¦ ½ÇÇàÇÒ ¼ö ¾øÀ½. --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- %sÀÇ ÀÚµ¿ º¸±â ¿À·ù --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr "[-- ¿À·ù: message/external-body¿¡ access-type º¯¼ö°¡ ¾øÀ½ --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[ -- %s/%s Ã·ºÎ¹° "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(Å©±â: %s ¹ÙÀÌÆ®) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "»èÁ¦ µÇ¾úÀ½ --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- %s¿¡ --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- À̸§: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- ÀÌ %s/%s Ã·ºÎ¹°Àº Æ÷ÇÔµÇÁö ¾ÊÀ½, --]\n"
+
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr "[-- ÁöÁ¤µÈ ¿ÜºÎ ¼Ò½º°¡ ¸¸±âµÊ --]\n"
+
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr "[-- ÁöÁ¤µÈ access-type %s´Â Áö¿øµÇÁö ¾ÊÀ½ --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "¿À·ù: multipart/signed ÇÁ·ÎÅäÄÝÀÌ ¾øÀ½."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "¿À·ù: multipart/encrypted ÇÁ·ÎÅäÄÝ º¯¼ö°¡ ¾øÀ½!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "ÀӽàÆÄÀÏÀ» ¿­ ¼ö ¾øÀ½!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- '%s/%s'´Â Áö¿øµÇÁö ¾ÊÀ½ "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "('%s' Å°: ºÎºÐ º¸±â)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "('÷ºÎ¹° º¸±â' ±Û¼è Á¤ÀÇ°¡ ÇÊ¿äÇÔ!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: ÆÄÀÏÀ» Ã·ºÎÇÒ ¼ö ¾øÀ½"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "¿À·ù: ÀÌ ¹ö±×¸¦ º¸°í ÇØÁÖ¼¼¿ä"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<¾Ë¼ö ¾øÀ½>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"±âº» ±Û¼è Á¤ÀÇ:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"±Û¼è°¡ Á¤ÀǵÇÁö ¾ÊÀº ±â´É:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "%s µµ¿ò¸»"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: unhook * ÇÒ ¼ö ¾øÀ½."
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: ¾Ë ¼ö ¾ø´Â hook À¯Çü: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: %s¸¦ %s¿¡¼­ Áö¿ï ¼ö ¾øÀ½."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "ÀÎÁõÀÚ°¡ ¾øÀ½."
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "ÀÎÁõ Áß (anonymous)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "Anonymous ÀÎÁõ ½ÇÆÐ"
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "ÀÎÁõ Áß (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "CRAM-MD5 ÀÎÁõ¿¡ ½ÇÆÐÇÔ."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "ÀÎÁõ Áß (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "GSSAPI ÀÎÁõ¿¡ ½ÇÆÐÇÔ."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "ÀÌ ¼­¹ö´Â LOGINÀÌ Çã¿ëµÇÁö ¾ÊÀ½."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Á¢¼Ó Áß..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "Á¢¼Ó ½ÇÆÐ."
+
+#: imap/auth_sasl.c:112
+#, fuzzy, c-format
+msgid "Authenticating (%s)..."
+msgstr "ÀÎÁõ Áß (APOP)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "SASL ÀÎÁõ¿¡ ½ÇÆÐÇÔ."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "%s´Â À߸øµÈ IMAP ÆнºÀÓ"
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "³×ÀÓ½ºÆäÀ̽º ¹Þ´Â Áß..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Æú´õ ¸ñ·Ï ¹Þ´Â Áß..."
+
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "Æú´õ ¾øÀ½"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "¸ÞÀÏÇÔ ¿­±â"
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "¸ÞÀÏÇÔÀº À̸§À» °¡Á®¾ß ÇÔ."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "¸ÞÀÏÇÔÀÌ »ý¼ºµÊ."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "¸ÞÀÏÇÔÀÌ ´ÝÈû"
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Ä¡¸íÀû ¿À·ù. ¸Þ¼¼Áö ¼ýÀÚ°¡ µ¿±âµÇÁö ¾ÊÀ½!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "%s¿ÍÀÇ ¿¬°áÀ» ´Ý´ÂÁß..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "¿À·¡µÈ ¹öÁ¯ÀÇ IMAP ¼­¹ö·Î Mutt¿Í »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "TLS¸¦ »ç¿ëÇÏ¿© ¿¬°á ÇÒ±î¿ä?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "TLS ¿¬°á ÇÒ¼ö ¾øÀ½"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "%s ¼±ÅàÁß..."
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "¸ÞÀÏÇÔ ¿©´ÂÁß ¿À·ù"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "ÀÌ ¼­¹ö¿¡ IMAP ¸ÞÀÏÇÔÀ» Ãß°¡ÇÒ ¼ö ¾øÀ½"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "%s¸¦ ¸¸µé±î¿ä?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "IMAP ¼­¹ö Á¢¼Ó ´Ý´Â Áß..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "%d°³ÀÇ ¸ÞÀÏÀ» »èÁ¦ Ç¥½ÃÇÔ..."
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "»èÁ¦ ½ÇÆÐ"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "¸Þ¼¼Áö »óÅ Ç÷¡±× ÀúÀå... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "¼­¹ö¿¡¼­ ¸Þ¼¼Áö »èÁ¦ Áß..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbox: »èÁ¦ ½ÇÆÐ"
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "´Ý±â ½ÇÆÐ"
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "À߸øµÈ ¸ÞÀÏÇÔ À̸§"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "%s¿¡ °¡ÀÔ Áß..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "%s¿¡¼­ °¡ÀÔ Å»Åð Áß..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "ÀÌ ¹öÁ¯ÀÇ IAMP ¼­¹ö¿¡¼­ Çì´õ¸¦ °¡Á®¿Ã ¼ö ¾ø½À´Ï´Ù."
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "ÀӽàÆÄÀÏ %s¸¦ ¸¸µé ¼ö ¾øÀ½!"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "¸Þ¼¼Áö Çì´õ °¡Á®¿À´Â Áß... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "¸Þ¼¼Áö °¡Á®¿À´Â Áß..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "À߸øµÈ ¸ÞÀÏ À妽º. ¸ÞÀÏÇÔ ¿­±â Àç½Ãµµ."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "¸ÞÀÏÀ» ¾÷·Îµå Çϴ Áß..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "%d°³ÀÇ ¸Þ¼¼Áö¸¦ %s·Î º¹»ç Áß..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "¸Þ¼¼Áö %d¸¦ %s·Î º¹»ç Áß..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "°è¼ÓÇÒ±î¿ä?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "º°Äª: ÁÖ¼Ò ¾øÀ½"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr "°æ°í: À߸øµÈ IDN '%s' ¾Ë¸®¾Æ½º '%s'.\n"
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "À߸øµÈ Çì´õ Çʵå"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: ¾Ë ¼ö ¾ø´Â Á¤·Ä ¹æ¹ý"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): Á¤±ÔÇ¥Çö½Ä ¿À·ù: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: ¾Ë ¼ö ¾ø´Â º¯¼ö"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "À߸øµÈ Á¢µÎ»ç"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "À߸øµÈ º¯¼ö°ª"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s ¼³Á¤"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s ¼³Á¤ ÇØÁ¦"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: À߸øµÈ ¸ÞÀÏÇÔ Çü½Ä"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: À߸øµÈ °ª"
+
+#: init.c:1312
+#, fuzzy, c-format
+msgid "%s: Unknown type."
+msgstr "%s: ¾Ë ¼ö ¾ø´Â Çü½Ä"
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: ¾Ë ¼ö ¾ø´Â Çü½Ä"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "%s: %sÀÇ »óŸ¦ ¾Ë¼ö ¾øÀ½."
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s´Â ¿Ã¹Ù¸¥ ÆÄÀÏÀÌ ¾Æ´Ô."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "%sÀÇ %d¹ø ÁÙ¿¡ ¿À·ù: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: %s¿¡ ¿À·ù"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: %s¿¡ ¿À·ù°¡ ¸¹À¸¹Ç·Î Àбâ Ãë¼Ò"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: %s¿¡ ¿À·ù"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: Àμö°¡ ³Ê¹« ¸¹À½"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: ¾Ë ¼ö ¾ø´Â ¸í·É¾î"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "¸í·É¾î ¿À·ù: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "Ȩ µð·ºÅ丮¸¦ Ã£À» ¼ö ¾øÀ½"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "»ç¿ëÀÚ À̸§À» ¾Ë¼ö ¾øÀ½"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "¸ÅÅ©·Î ·çÇÁ°¡ ¹ß»ý."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Á¤ÀǵÇÁö ¾ÊÀº ±Û¼è."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Á¤ÀǵÇÁö ¾ÊÀº ±Û¼è. µµ¿ò¸» º¸±â´Â '%s'"
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: Àμö°¡ ³Ê¹« ¸¹À½"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: ±×·± ¸Þ´º ¾øÀ½"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "°ø¹é ±Û¼è ½ÃÄö½º"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: Àμö°¡ ³Ê¹« ¸¹À½"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: ¸Ê¿¡ ±×·± ±â´É ¾øÀ½"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: ºó ±Û¼è ½ÃÄö½º"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: Àμö°¡ ³Ê¹« ¸¹À½"
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: Àμö°¡ ¾øÀ½"
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s: ±×·± ±â´É ¾øÀ½"
+
+#: keymap.c:912
+msgid "Enter keys (^G to abort): "
+msgstr "Å° ÀԷ (^G Ãë¼Ò): "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr "Char = %s, Octal = %o, Decimal = %d"
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "°ø¹é ¿¬»ê"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "mailcapÀ» »ç¿ëÇØ °­Á¦·Î Ã·ºÎ¹°À» º½"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "÷ºÎ¹°À» text·Î º¸±â"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "Ãß°¡ Ã·ºÎ¹°ÀǠǥ½Ã »óÅ ¹Ù²Þ"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "ÆäÀÌÁö ¸¶Áö¸·À¸·Î À̵¿"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "¸Þ¼¼Áö¸¦ ´Ù¸¥ »ç¶÷¿¡°Ô º¸³¿"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "ÇöÀç µð·ºÅ丮¿¡¼­ »õ ÆÄÀÏ ¼±ÅÃ"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "ÆÄÀÏ º¸±â"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "ÇöÀç ¼±ÅõȠÆÄÀÏÀÇ À̸§ º¸±â"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "ÇöÀç ¸ÞÀÏÇÔ °¡ÀÔ (IMAP¸¸ Áö¿ø)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "ÇöÀç ¸ÞÀÏÇÔ Å»Åð (IMAP¸¸ Áö¿ø)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "¸ðµç/°¡ÀԵȠ¸ÞÀÏÇÔ º¸±â ¼±Åà(IMAP¸¸ Áö¿ø)"
+
+#: keymap_alldefs.h:18
+msgid "list mailboxes with new mail"
+msgstr "»õ ¸ÞÀÏÀÌ µµÂøÇÑ ¸ÞÀÏÇÔ ¸ñ·Ï."
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "µð·ºÅ丮 ¹Ù²Ù±â"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "¸ÞÀÏÇÔÀÇ »õ ¸ÞÀÏ È®ÀÎ"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "ÇöÀç ¸Þ¼¼Áö¿¡ ÆÄÀϠ÷ºÎ"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "ÇöÀç ¸Þ¼¼Áö¿¡ ¸Þ¼¼Áö Ã·ºÎ"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "BCC ¸ñ·Ï ÆíÁý"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "CC ¸ñ·Ï ÆíÁý"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "÷ºÎ¹° ¼³¸í ÆíÁý"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "÷ºÎ¹° Àü¼Û ºÎȣȭ ¹æ¹ý ÆíÁý"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "ÇöÀç ¸Þ¼¼ÁöÀÇ º¹»çº»À» ÀúÀåÇÒ ÆÄÀÏ ¼±ÅÃ"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "ÆÄÀÏÀ» °íÄ£ ÈĠ÷ºÎÇϱâ"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "from Çʵå ÆíÁý"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "Çì´õ¸¦ Æ÷ÇÔÇÑ ¸Þ¼¼Áö ÆíÁý"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "¸Þ¼¼Áö ÆíÁý"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "mailcap Ç׸ñÀ» »ç¿ëÇÏ¿© Ã·ºÎ¹° ÆíÁý"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "Reply-To Çʵå ÆíÁý"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "Á¦¸ñ ÆíÁý"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "TO ¸ñ·Ï ÆíÁýÇϱâ"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "»õ·Î¿î ¸ÞÀÏÇÔ ¸¸µë (IMAP¸¸ Áö¿ø)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "÷ºÎ¹° ³»¿ë À¯Çü ÆíÁý"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "÷ºÎ¹°ÀÇ Àӽà»çº» °¡Á®¿È"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "ispell·Î ¸ÞÀÏ °Ë»ç"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "mailcap Ç׸ñÀ» »ç¿ëÇØ »õ·Î¿î Ã·ºÎ¹° ÀÛ¼º"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "÷ºÎ¹°ÀÇ ÀúÀå »óÅ Åä±Û"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "ÇöÀç ¸ÞÀÏÀ» ÀúÀå ÈÄ ³ªÁß¿¡ º¸³¿"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "÷ºÎ ÆÄÀÏ À̸§ º¯°æ/À̵¿"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "¸ÞÀÏ º¸³¿"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "inline ¶Ç´Â attachment ¼±ÅÃ"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "¹ß½Å ÈÄ ÆÄÀÏÀ» Áö¿ïÁö ¼±ÅÃ"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "÷ºÎ¹°ÀÇ ÀÎÄÚµù Á¤º¸ ´Ù½Ã Àбâ"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "¸ÞÀÏÀ» Æú´õ¿¡ ÀúÀå"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "¸ÞÀÏÀ» ÆÄÀÏ/¸ÞÀÏÇÔ¿¡ º¹»ç"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "¹ß½ÅÀÎÀÇ º°Äª ¸¸µé±â"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "Ç׸ñÀ» È­¸é ¾Æ·¡·Î À̵¿"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "Ç׸ñÀ» È­¸é Áß°£À¸·Î À̵¿"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "Ç׸ñÀ» È­¸é À§·Î À̵¿"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "text/plain À¸·Î µðÄÚµùÈÄ º¹»ç"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "text/plain À¸·Î µðÄÚµùÈÄ º¹»ç, Áö¿ì±â"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "ÇöÀç Ç׸ñ Áö¿ò"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "ÇöÀç ¸ÞÀÏÇÔÀ» »èÁ¦ (IMAP¿¡¼­¸¸)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "ºÎ¼Ó ±ÛŸ·¡ÀÇ ¸ðµç ¸ÞÀÏ Áö¿ò"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "±ÛŸ·¡ÀÇ ¸ðµç ¸ÞÀÏ Áö¿ì±â"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "¼Û½ÅÀÎÀÇ ÁÖ¼Ò ÀüºÎ º¸±â"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "¸ÞÀÏ Ãâ·Â°ú Çì´õ ¼û±â±â Åä±Û"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "¸ÞÀÏ º¸±â"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "ÀúÀåµÈ »óÅÂÀÇ ¸ÞÀÏ ÆíÁý"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "Ä¿¼­ ¾ÕÀÇ ±ÛÀÚ Áö¿ò"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "Ä¿¼­¸¦ ÇѱÛÀÚ ¿ÞÂÊÀ¸·Î º¸³¿"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "´Ü¾îÀǠóÀ½À¸·Î À̵¿"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "ÁÙÀǠóÀ½À¸·Î À̵¿"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "¼ö½Å ¸ÞÀÏÇÔ º¸±â"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "ÆÄÀÏ¸í ¶Ç´Â º°Äª ¿Ï¼ºÇϱâ"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "Äõ¸®·Î ÁÖ¼Ò ¿Ï¼ºÇϱâ"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "Ä¿¼­ÀÇ ±ÛÀÚ Áö¿ò"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "ÁÙÀÇ ³¡À¸·Î À̵¿"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "ÇѱÛÀÚ ¿À¸¥ÂÊÀ¸·Î À̵¿"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "´Ü¾îÀÇ ³¡À¸·Î À̵¿"
+
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr "history ¸ñ·Ï ¾Æ·¡·Î ³»¸®±â"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "history ¸ñ·Ï À§·Î ¿Ã¸®±â"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "Ä¿¼­ºÎÅÍ ÁÙÀÇ ³¡±îÁö ±ÛÀÚ Áö¿ò"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "Ä¿¼­ºÎÅÍ ´Ü¾îÀÇ ³¡±îÁö Áö¿ò"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "ÇöÀç ÁÙÀÇ ¸ðµç ±ÛÀÚ Áö¿ò"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "Ä¿¼­ ¾ÕÀÇ ´Ü¾î Áö¿ò"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "´ÙÀ½¿¡ ÀԷµǴ ¹®ÀÚ¸¦ Àοë"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "¾ÕµÚ ¹®ÀÚ ¹Ù²Ù±â"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "´ë¹®ÀڷΠº¯È¯"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "¼Ò¹®ÀڷΠº¯È¯"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "´ë¹®ÀڷΠº¯È¯"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "muttrc ¸í·É¾î ÀÔ·Â"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "ÆÄÀÏ ¸Å½ºÅ© ÀÔ·Â"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "ÇöÀç ¸Þ´º ³ª°¨"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "½© ¸í·É¾î¸¦ ÅëÇؠ÷ºÎ¹° °É¸£±â"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "óÀ½ Ç׸ñÀ¸·Î À̵¿"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "¸ÞÀÏÀÇ 'Áß¿ä' Ç÷¡±× »óÅ ¹Ù²Ù±â"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "¸ÞÀÏ Æ÷¿öµù"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "ÇöÀç Ç׸ñ ¼±ÅÃ"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "¸ðµç ¼ö½ÅÀÚ¿¡°Ô ´äÀå"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "1/2 ÆäÀÌÁö ³»¸®±â"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "1/2 ÆäÀÌÁö ¿Ã¸®±â"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "ÇöÀç È­¸é"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "¹øÈ£·Î À̵¿"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "¸¶Áö¸· Ç׸ñÀ¸·Î À̵¿"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "ÁöÁ¤µÈ ¸ÞÀϸµ ¸®½ºÆ®·Î ´äÀåÇϱâ"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "¸ÅÅ©·Î ½ÇÇà"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "»õ·Î¿î ¸ÞÀÏ ÀÛ¼º"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "´Ù¸¥ Æú´õ ¿­±â"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "´Ù¸¥ Æú´õ¸¦ Àбâ Àü¿ëÀ¸·Î ¿­±â"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "¸ÞÀÏÀÇ »óÅ Ç÷¡±× ÇØÁ¦Çϱâ"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "ÆÐÅÏ°ú ÀÏÄ¡Çϴ ¸ÞÀÏ »èÁ¦"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "IMAP ¼­¹ö¿¡¼­ ¸ÞÀÏ °¡Á®¿À±â"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "POP ¼­¹ö¿¡¼­ ¸ÞÀÏ °¡Á®¿À±â"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "óÀ½ ¸ÞÀϷΠÀ̵¿"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "¸¶Áö¸· ¸ÞÀϷΠÀ̵¿"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "ÆÐÅÏ°ú ÀÏÄ¡Çϴ ¸ÞÀϸ¸ º¸ÀÓ"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "´ÙÀ½ »õ ¸ÞÀϷΠÀ̵¿"
+
+#: keymap_alldefs.h:113
+msgid "jump to the next new or unread message"
+msgstr "ÀÐÁö ¾ÊÀº ´ÙÀ½ ¸ÞÀÏ/»õ ¸ÞÀϷΠÀ̵¿"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "´ÙÀ½ ºÎ¼Ó ±ÛŸ·¡·Î À̵¿"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "´ÙÀ½ ±ÛŸ·¡·Î À̵¿"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "»èÁ¦µÇÁö ¾ÊÀº ´ÙÀ½ ¸ÞÀϷΠÀ̵¿"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "ÀÐÁö ¾ÊÀº ´ÙÀ½ ¸ÞÀϷΠÀ̵¿"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "±ÛŸ·¡ÀÇ ºÎ¸ð ¸ÞÀϷΠÀ̵¿"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "ÀÌÀü ±ÛŸ·¡·Î À̵¿"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "ÀÌÀü ºÎ¼Ó ±ÛŸ·¡·Î À̵¿"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "»èÁ¦µÇÁö ¾ÊÀº ÀÌÀü ¸ÞÀϷΠÀ̵¿"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "ÀÌÀü »õ ¸ÞÀϷΠÀ̵¿"
+
+#: keymap_alldefs.h:123
+msgid "jump to the previous new or unread message"
+msgstr "ÀÐÁö ¾ÊÀº ÀÌÀü ¸ÞÀÏ/»õ ¸ÞÀϷΠÀ̵¿"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "ÀÐÁö ¾ÊÀº ÀÌÀü ¸ÞÀϷΠÀ̵¿"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "ÇöÀç ±ÛŸ·¡¿¡ ÀÐÀº Ç¥½ÃÇϱâ"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "ÇöÀ砺μӠ±ÛŸ·¡¿¡ ÀÐÀº Ç¥½ÃÇϱâ"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "¸ÞÀÏÀÇ »óÅ Ç÷¡±× ¼³Á¤Çϱâ"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "¸ÞÀÏÇÔ º¯°æ »çÇ× ÀúÀå"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "ÆÐÅÏ°ú ÀÏÄ¡Çϴ ¸ÞÀÏ¿¡ Å±נºÙÀÓ"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "ÆÐÅÏ°ú ÀÏÄ¡Çϴ ¸ÞÀÏ º¹±¸"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "ÆÐÅÏ°ú ÀÏÄ¡Çϴ ¸ÞÀÏÀǠűנÇØÁ¦"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "ÆäÀÌÁö Áß°£À¸·Î À̵¿"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "´ÙÀ½ Ç׸ñÀ¸·Î À̵¿"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "ÇÑÁÙ¾¿ ³»¸®±â"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "´ÙÀ½ ÆäÀÌÁö·Î À̵¿"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "¸Þ¼¼Áö ¸¶Áö¸·À¸·Î À̵¿"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "Àο빮ÀǠǥ½Ã »óÅ ¹Ù²Ù±â"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "Àο빮 ´ÙÀ½À¸·Î ³Ñ¾î°¡±â"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "¸Þ¼¼Áö Ã³À½À¸·Î À̵¿"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "¸ÞÀÏ/÷ºÎ¹°À» ½© ¸í·ÉÀ¸·Î ¿¬°áÇϱâ"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "ÀÌÀü Ç׸ñÀ¸·Î À̵¿"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "ÇÑÁÙ¾¿ ¿Ã¸®±â"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "ÀÌÀü ÆäÀÌÁö·Î À̵¿"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "ÇöÀç Ç׸ñ Ãâ·Â"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "ÁÖ¼Ò¸¦ ¾ò±â À§ÇØ ¿ÜºÎ ÇÁ·Î±×·¥ ½ÇÇà"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "Äõ¸® °á°ú¸¦ ÇöÀç °á°ú¿¡ Ãß°¡"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "¸ÞÀÏÇÔÀÇ º¯°æ »çÇ× ÀúÀå ÈÄ ³¡³»±â"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "¹ß¼Û ¿¬±âÇÑ ¸ÞÀÏ ´Ù½Ã ºÎ¸£±â"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "È­¸é ´Ù½Ã ±×¸®±â"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{³»ºÎÀÇ}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "¸ÞÀÏ¿¡ ´äÀåÇϱâ"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "ÇöÀç ¸ÞÀÏÀ» »õ ¸ÞÀÏÀÇ ÅÛÇ÷¹ÀÌÆ®·Î »ç¿ëÇÔ"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "¸ÞÀÏ/÷ºÎ¹° ÆÄÀϷΠÀúÀå"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "Á¤±Ô Ç¥Çö½ÄÀ» ÀÌ¿ëÇØ °Ë»ö"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "Á¤±Ô Ç¥Çö½ÄÀ» ÀÌ¿ëÇØ ¿ª¼ø °Ë»ö"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "´ÙÀ½ Ã£±â"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "¿ª¼øÀ¸·Î Ã£±â"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "°Ë»ö ÆÐÅÏ Ä÷¯¸µ ¼±ÅÃ"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "ÇϺΠ½© ½ÇÇà"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "¸ÞÀÏ Á¤·Ä"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "¸ÞÀÏ ¿ª¼ø Á¤·Ä"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "ÇöÀç Ç׸ñ¿¡ Å±נºÙÀÓ"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "´ÙÀ½ ±â´ÉÀ» Å±װ¡ ºÙÀº ¸ÞÀÏ¿¡ Àû¿ë"
+
+#: keymap_alldefs.h:164
+#, fuzzy
+msgid "apply next function ONLY to tagged messages"
+msgstr "´ÙÀ½ ±â´ÉÀ» Å±װ¡ ºÙÀº ¸ÞÀÏ¿¡ Àû¿ë"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "ÇöÀ砺μӠ±ÛŸ·¡¿¡ Å±נºÙÀÓ"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "ÇöÀç ±ÛŸ·¡¿¡ Å±נºÙÀÓ"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "¸ÞÀÏÀÇ '»õ±Û' Ç÷¡±× »óÅ ¹Ù²Þ"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "¸ÞÀÏÇÔÀ» ´Ù½Ã ¾µ °ÍÀÎÁö ¼±ÅÃ"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "¸ÞÀÏÇÔÀ» º¼Áö ¸ðµç ÆÄÀÏÀ» º¼Áö ¼±ÅÃ"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "ù ÆäÀÌÁö·Î À̵¿"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "ÇöÀç Ç׸ñ º¹±¸"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "±ÛŸ·¡ÀÇ ¸ðµç ¸ÞÀÏ º¹±¸Çϱâ"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "ºÎ¼Ó ±ÛŸ·¡ÀÇ ¸ðµç ¸ÞÀÏ º¹±¸Çϱâ"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "MuttÀÇ ¹öÁ¯°ú Á¦ÀÛÀÏ º¸±â"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "ÇÊ¿äÇÏ´Ù¸é mailcap Ç׸ñÀ» »ç¿ëÇؠ÷ºÎ¹°À» º¸¿©ÁÜ"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "MIME Ã·ºÎ¹° º¸±â"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr ""
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "ÇöÀç Á¦ÇÑ ÆÐÅÏ º¸±â"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "ÇöÀç ±ÛŸ·¡ Æì±â/Á¢±â"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "¸ðµç ±ÛŸ·¡ Æì±â/Á¢±â"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "PGP °ø°³ ¿­¼è Ã·ºÎ"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "PGP ¿É¼Ç º¸±â"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "PGP °ø°³ ¿­¼è ¹ß¼Û"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "PGP °ø°³ ¿­¼è È®ÀÎ"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "¿­¼èÀÇ »ç¿ëÀÚ ID º¸±â"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "Classic PGP È®ÀÎ"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "üÀΠ±¸Á¶¸¦ Çã°¡ÇÔ"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "üÀο¡ ¸®¸ÞÀÏ·¯ Ã·°¡"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "üÀο¡ ¸®¸ÞÀÏ·¯ »ðÀÔ"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "üÀο¡¼­ ¸®¸ÞÀÏ·¯ »èÁ¦"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "üÀÎÀÇ ÀÌÀü Ç׸ñ ¼±ÅÃ"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "üÀÎÀÇ ´ÙÀ½ Ç׸ñ ¼±ÅÃ"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "mixmaster ¸®¸ÞÀÏ·¯ Ã¼ÀÎÀ» ÅëÇÑ ¸ÞÀÏ º¸³»±â"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "Çص¶ »çº» ¸¸µç ÈÄ »èÁ¦Çϱâ"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "Çص¶ »çº» ¸¸µé±â"
+
+#: keymap_alldefs.h:196
+msgid "wipe passphrase(s) from memory"
+msgstr "¸Þ¸ð¸®¿¡¼­ ¾ÏÈ£ ¹®±¸ Áö¿ò"
+
+#: keymap_alldefs.h:197
+msgid "extract supported public keys"
+msgstr "°ø°³ ¿­¼è ÃßÃâ"
+
+#: keymap_alldefs.h:198
+msgid "show S/MIME options"
+msgstr "S/MIME ¿É¼Ç º¸±â"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "¸Þ¸ð¸® ºÎÁ·!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"°³¹ßÀÚ¿Í ¿¬¶ôÇÏ·Á¸é <mutt-dev@mutt.org>·Î ¸ÞÀÏÀ» º¸³»½Ê½Ã¿À.\n"
+"¹ö±× º¸°í´Â flea(1) À¯Æ¿¸®Æ¼¸¦ »ç¿ëÇØ ÁֽʽÿÀ.\n"
+
+#: main.c:50
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins ¿Ü.\n"
+"MuttÀº ¾î¶°ÇѠåÀÓµµ ÁöÁö ¾Ê½À´Ï´Ù; ÀÚ¼¼ÇÑ »çÇ×Àº 'mutt -vv'¸¦ È®ÀÎÇϽñâ\n"
+"¹Ù¶ø´Ï´Ù. MuttÀº °ø°³ ¼ÒÇÁÆ®¿þ¾îÀ̸ç, ÀÏÁ¤ »çÇ׸¸ ÁöŲ´Ù¸é ¿©·¯ºÐ²²¼­ ÀÚÀ¯\n"
+"·ÎÀÌ Àç¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¼¼ÇÑ »çÇ×Àº 'mutt -vv'·Î È®ÀÎÇϽñ⠹ٶø´Ï´Ù.\n"
+
+#: main.c:56
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"¿©±â¿¡ ¾ð±ÞµÇÁö ¾ÊÀº ¸¹Àº ºÐµé²²¼­ ¼Ò½º ÄÚµå, ¼öÁ¤, ±×¸®°í\n"
+"±â´ÉÁ¦¾È¿¡ ¸¹Àº µµ¿òÀ» Áּ̽À´Ï´Ù.\n"
+"\n"
+"    ÀÌ ÇÁ·Î±×·¥Àº °ø°³ Ç®±×¸²ÀÔ´Ï´Ù; ¿©·¯ºÐ²²¼­´Â Free Software Foundation\n"
+"    ÀÇ GNU General Public License¿¡  µû¶ó¼­ º» ÇÁ·Î±×·¥À» Àç¹èÆ÷ ¶Ç´Â ¼öÁ¤\n"
+"    ÇÒ ¼ö ÀÖ½À´Ï´Ù; GPL ¹öÁ¯ 2 ¶Ç´Â (¿©·¯ºÐÀÌ ¼±ÅÃÇÑ) ÀÌÈÄÀÇ GPL ¹öÁ¯À» µû\n"
+"    ¸¨´Ï´Ù.\n"
+"\n"
+"    ÀÌ ÇÁ·Î±×·¥Àº À¯¿ëÇÏ°Ô ¾²À̱根ٶó´Â Àǹ̿¡¼­ ¹èÆ÷µÇ¾úÀ¸¸ç,  ÀÛµ¿¿¡ ´ë\n"
+"    ÇÑ ¾î¶°ÇÑ º¸Áõµµ ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù; »óÇ°¼º ¶Ç´Â Æ¯Á¤ ¸ñÀûÀÇ »ç¿ë¿¡ ´ëÇÑ\n"
+"    º¸Áõ ¶ÇÇÑ ¾ø½À´Ï´Ù.  ÀÚ¼¼ÇÑ »çÇ×Àº GNU General Public License¸¦ Âü°íÇÏ\n"
+"    ½Ã±â ¹Ù¶ø´Ï´Ù.\n"
+"\n"
+"    º» ÇÁ·Î±×·¥¿¡´Â GNU General Public License º¹»çº»ÀÌ Æ÷ÇÔ µÇ¾îÀÖ½À´Ï´Ù;\n"
+"    Æ÷ÇԵǾî ÀÖÁö ¾ÊÀ» °æ¿ì ¾Æ·¡ÀÇ ÁּҷΠ¿¬¶ôÇϽñ⠹ٶø´Ï´Ù.\n"
+"    Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  "
+"02111, USA.\n"
+
+#: main.c:94
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"usage: mutt [ -nRyzZ ] [ -e <¸í·É¾î> ] [ -F <ÆÄÀÏ> ] [ -m <Á¾·ù> ] [ -f <ÆÄÀÏ"
+"> ]\n"
+"       mutt [ -nR ] [ -e <¸í·É¾î> ] [ -F <ÆÄÀÏ> ] -Q <Äõ¸®> [ -Q <Äõ¸®> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <¸í·É¾î> ] [ -F <ÆÄÀÏ> ] -A <¾Ë¸®¾Æ½º> [ -A <¾Ë¸®¾Æ"
+"½º> ] [...]\n"
+"       mutt [ -nx ] [ -e <¸í·É¾î> ] [ -a <ÆÄÀÏ> ] [ -F <ÆÄÀÏ> ] [ -H <ÆÄÀÏ"
+"> ] [ -i <ÆÄÀÏ> ] [ -s <Á¦¸ñ> ] [ -b <ÁÖ¼Ò> ] [ -c <ÁÖ¼Ò> ] <ÁÖ¼Ò> [ ... ]\n"
+"       mutt [ -n ] [ -e <¸í·É¾î> ] [ -F <ÆÄÀÏ> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"¼±ÅûçÇ×:\n"
+"  -A <¾Ë¸®¾Æ½º>\tÁÖ¾îÁø ¾Ë¸®¾Æ½º È®Àå\n"
+"  -a <ÆÄÀÏ>\t¸ÞÀÏ¿¡ ÆÄÀϠ÷ºÎ\n"
+"  -b <ÁÖ¼Ò>\tBCC ÁÖ¼Ò ÁöÁ¤\n"
+"  -c <ÁÖ¼Ò>\tCC ÁÖ¼Ò ÁöÁ¤\n"
+"  -e <¸í·É¾î>\tÃʱâÈ­ ÈÄ ½ÇÇàÇÒ ¸í·É¾î ÁöÁ¤\n"
+"  -f <ÆÄÀÏ>\tÀÐÀ» ¸ÞÀÏÇÔ ÁöÁ¤\n"
+"  -F <ÆÄÀÏ>\tº°µµÀÇ muttrc ÆÄÀÏ ÁöÁ¤\n"
+"  -H <ÆÄÀÏ>\tÇì´õºÎÅÍ ÀÐÀ» ÃʾȠÆÄÀÏ ÁöÁ¤\n"
+"  -i <ÆÄÀÏ>\tMutt °¡ ´äÀå¿¡ Æ÷ÇÔ½Ãų ÆÄÀÏ ÁöÁ¤\n"
+"  -m <À¯Çü>\t±âº» ¸ÞÀÏÇÔ À¯Çü ÁöÁ¤\n"
+"  -n\t\tMutt ½Ã½ºÅÛ Muttrc ÆÄÀÏ ÀÐÁö ¾ÊÀ½\n"
+"  -p\t\t¹ß¼Û ¿¬±âµÈ ¸ÞÀÏ ´Ù½Ã ¿­±â\n"
+"  -Q <º¯¼ö>\t¼³Á¤ º¯¼ö Äõ¸®\n"
+"  -R\t\t¸ÞÀÏÇÔ Àбâ Àü¿ë ¹æ½ÄÀ¸·Î ¿­±â\n"
+"  -s <Á¦¸ñ>\tÁ¦¸ñ ÁöÁ¤ (°ø¹éÀÌ ÀÖÀ» °æ¿ì Àο렺ÎÈ£ »ç¿ë)\n"
+"  -v\t\t¹öÁ¯, ÄÄÆÄÀÏ ¿É¼Ç º¸±â\n"
+"  -x\t\tmailx Àü¼Û ¹æ½Ä Èä³»³»±â\n"
+"  -y\t\t`¸ÞÀÏÇÔ'ÀÇ ¸ñ·Ï Áß ¸ÞÀÏÇÔ ÁöÁ¤\n"
+"  -z\t\t¸ÞÀÏÇÔ¿¡ ¸ÞÀÏÀÌ ¾øÀ¸¸é Áï½Ã ³¡³»±â\n"
+"  -Z\t\t»õ ¸ÞÀÏÀÌ Àִ ù¹ø° ¸ÞÀÏÇÔ ¿­±â, ¾øÀ» °æ¿ì ³¡³¿\n"
+"  -h\t\tÇöÀç µµ¿ò¸»"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"ÄÄÆÄÀÏ ¼±ÅûçÇ×:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Å͹̳ΠÃʱâÈ­ ¿À·ù."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "µð¹ö±ë ·¹º§ %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "DEBUG°¡ ÄÄÆÄÀϽàÁ¤ÀǵÇÁö ¾ÊÀ½. ¹«½ÃÇÔ\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s°¡ ¾øÀ½. ¸¸µé±î¿ä?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "%s¸¦ ¸¸µé ¼ö ¾øÀ½: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "¼ö½ÅÀÚ°¡ ÁöÁ¤µÇÁö ¾ÊÀ½.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: ÆÄÀÏÀ» Ã·ºÎÇÒ ¼ö ¾øÀ½.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "»õ ¸ÞÀÏÀÌ µµÂøÇÑ ¸ÞÀÏÇÔ ¾øÀ½."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "¼ö½Å ¸ÞÀÏÇÔÀÌ Á¤ÀǵÇÁö ¾ÊÀ½."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "¸ÞÀÏÇÔÀÌ ºñ¾úÀ½"
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "%s Àд Áß... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "¸ÞÀÏÇÔÀÌ ¼Õ»óµÊ!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "¸ÞÀÏÇÔÀÌ ¼Õ»óµÇ¾úÀ½!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Ä¡¸íÀû ¿À·ù! ¸ÞÀÏÇÔÀ» ´Ù½Ã ¿­ ¼ö ¾øÀ½!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "¸ÞÀÏÇÔÀ» Àá±Û ¼ö ¾øÀ½!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr "sync: mbox°¡ ¼öÁ¤µÇ¾úÀ¸³ª, ¼öÁ¤µÈ ¸ÞÀϴ ¾øÀ½! (¹ö±× º¸°í ¹Ù¶÷)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "¸ÞÀÏ ¾²´Â Áß... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "¼öÁ¤Áß..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "¾²±â ½ÇÆÐ! ¸ÞÀÏÇÔÀÇ ÀϺΰ¡ %s¿¡ ÀúÀåµÇ¾úÀ½"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "¸ÞÀÏÇÔÀ» ´Ù½Ã ¿­ ¼ö ¾øÀ½!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "¸ÞÀÏÇÔÀ» ´Ù½Ã ¿©´Â Áß..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "À̵¿ÇÒ À§Ä¡: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "À߸øµÈ »öÀΠ¹øÈ£."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Ç׸ñÀÌ ¾øÀ½."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "´õ À̻󠳻·Á°¥ ¼ö ¾øÀ½."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "´õ ÀÌ»ó ¿Ã¶ó°¥ ¼ö ¾øÀ½."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "¸¶Áö¸· ÆäÀÌÁöÀÔ´Ï´Ù."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "ù¹ø° ÆäÀÌÁöÀÔ´Ï´Ù."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "ù¹ø° Ç׸ñ º¸ÀÓ."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "¸¶Áö¸· Ç׸ñ º¸ÀÓ."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "¸¶Áö¸· Ç׸ñ¿¡ À§Ä¡ÇÏ°í ÀÖ½À´Ï´Ù."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "ù¹ø° Ç׸ñ¿¡ À§Ä¡ÇÏ°í ÀÖ½À´Ï´Ù."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "ã¾Æº¸±â: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "¹Ý´ë ¹æÇâÀ¸·Î Ã£¾Æº¸±â: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "ÆÐÅÏÀ» Ã£À» ¼ö ¾øÀ½."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "ãÀ» ¼ö ¾øÀ½."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "űװ¡ ºÙÀº Ç׸ñ ¾øÀ½."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "ÀÌ ¸Þ´º¿¡´Â °Ë»ö ±â´ÉÀÌ ¾ø½À´Ï´Ù."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "¼±ÅÃâ¿¡´Â ¹Ù·Î °¡±â ±â´ÉÀÌ ¾ø½À´Ï´Ù."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "ű׸¦ ºÙÀ̴ °ÍÀ» Áö¿øÇÏÁö ¾ÊÀ½."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "%s Àд Áß... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr "maildir_commit_message(): ÆÄÀÏ ½Ã°£À» ¼³Á¤ÇÒ ¼ö ¾øÀ½"
+
+#: muttlib.c:835
+#, fuzzy
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "ÆÄÀÏÀÌ ¾Æ´Ï¶ó µð·ºÅ丮ÀÔ´Ï´Ù, ±× ¾Æ·¡¿¡ ÀúÀåÇÒ±î¿ä?"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "ÆÄÀÏÀÌ ¾Æ´Ï¶ó µð·ºÅ丮ÀÔ´Ï´Ù, ±× ¾Æ·¡¿¡ ÀúÀåÇÒ±î¿ä?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "µð·ºÅ丮¾È¿¡ ÀúÀåÇÒ ÆÄÀÏ:"
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "ÆÄÀÏÀÌ Á¸ÀçÇÔ, µ¤¾î¾²±â(o), Ã·°¡(a), Ãë¼Ò(c)?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "oac"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "POP ¸ÞÀÏÇÔ¿¡ ¸ÞÀÏÀ» ÀúÀåÇÒ ¼ö ¾øÀ½."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s´Â ¸ÞÀÏÇÔÀÌ ¾Æ´Ô!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "%s¿¡ ¸ÞÀÏÀ» Ã·°¡ÇÒ±î¿ä?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "%sÀÇ Á¢¼ÓÀÌ ²÷¾îÁü"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL »ç¿ë ºÒ°¡."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "Ãʱâ Á¢¼Ó(preconnect) ¸í·É ½ÇÆÐ."
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "%s (%s) ¿À·ù"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr "À߸øµÈ IDN \"%s\"."
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "%s¸¦ Ã£´Â Áß..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "%s È£½ºÆ®¸¦ Ã£À» ¼ö ¾øÀ½."
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "%s·Î ¿¬°á Áß..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "%s (%s)·Î ¿¬°áÇÒ ¼ö ¾øÀ½."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "½Ã½ºÅÛ¿¡¼­ ÃæºÐÇÑ ¿£Æ®·ÎÇǸ¦ Ã£À» ¼ö ¾øÀ½"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "¿£Æ®·ÎÇǸ¦ Ã¤¿ì´Â Áß: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s´Â ¾ÈÀüÇÏÁö ¾ÊÀº Æ۹̼ÇÀ» °¡Áö°í ÀÖÀ½!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "¿£Æ®·ÎÇÇ ºÎÁ·À¸·Î ÀÎÇØ SSL »ç¿ë ºÒ°¡"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "ÀÔ/Ãâ·Â ¿À·ù"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "¸íÈ®ÇÏÁö ¾ÊÀº ÇÁ·ÎÅäÄÝ ¿À·ù"
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "SSL ½ÇÆÐ: %s"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "ÁöÁ¤ÇÑ °÷¿¡¼­ ÀÎÁõ¼­¸¦ °¡Á®¿Ã ¼ö ¾øÀ½"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "%s¸¦ »ç¿ëÇØ SSL ¿¬°á (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "¾Ë ¼ö ¾øÀ½"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[°è»êÇÒ ¼ö ¾øÀ½]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[À߸øµÈ ³¯Â¥]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "¼­¹ö ÀÎÁõ¼­°¡ ¾ÆÁ÷ À¯È¿ÇÏÁö ¾ÊÀ½ "
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "¼­¹ö ÀÎÁõ¼­°¡ ¸¸±âµÊ"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "ÀÌ ÀÎÁõ¼­´Â ´ÙÀ½¿¡ ¼ÓÇÔ:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "ÀÌ ÀÎÁõ¼­ÀÇ ¹ßÇàÀÎÀº:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "ÀÌ ÀÎÁõ¼­´Â À¯È¿ÇÔ"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   from %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "     to %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Fingerprint: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "SSL ÀÎÁõ¼­ °Ë»ç"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "°ÅºÎ(r), À̹ø¸¸ Çã°¡(o), ¾ðÁ¦³ª Çã°¡(a)"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "roa"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "°ÅºÎ(r), À̹ø¸¸ Çã°¡(o)"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "ro"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "³¡³»±â  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "°æ°í: ÀÎÁõ¼­¸¦ ÀúÀåÇÏÁö ¸øÇÔ"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "ÀÎÁõ¼­ ÀúÀåµÊ"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Àá±Ý ¼ö°¡ Çѵµ¸¦ ³Ñ¾úÀ½, %sÀÇ Àá±ÝÀ» ¾ø¾Ù±î¿ä?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "dotlock %s¸¦ ÇÒ ¼ö ¾øÀ½.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "fcntl Àá±Ý ½Ãµµ Áß ½Ã°£ Á¦ÇÑÀ» ÃÊ°úÇÔ!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "fcntl Àá±ÝÀ» ±â´Ù¸®´Â Áß... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "flock Àá±Ý ½Ãµµ Áß ½Ã°£ Á¦ÇÑÀ» ÃÊ°úÇÔ!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "flock ½Ãµµ¸¦ ±â´Ù¸®´Â Áß... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "%s¸¦ Àá±Û ¼ö ¾øÀ½.\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "%s Àд Áß..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "%s ¾²´Â Áß..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "%s ¸ÞÀÏÇÔÀ» µ¿±âÈ­ ½Ãų ¼ö ¾øÀ½!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "ÀÐÀº ¸ÞÀÏÀ» %s·Î ¿Å±æ±î¿ä?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "»èÁ¦ Ç¥½ÃµÈ ¸ÞÀÏ(%d)À» »èÁ¦ÇÒ±î¿ä?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "»èÁ¦ Ç¥½ÃµÈ ¸ÞÀϵé(%d)À» »èÁ¦ÇÒ±î¿ä?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "ÀÐÀº ¸ÞÀÏÀ» %s·Î ¿Å±â´Â Áß..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "¸ÞÀÏÇÔÀÌ º¯°æµÇÁö ¾ÊÀ½."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d°³ º¸°ü, %d°³ À̵¿, %d°³ »èÁ¦"
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d°³ º¸°ü, %d°³ »èÁ¦"
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr " ¾²±â »óÅ ¹Ù²Ù±â; `%s'¸¦ ´©¸£¼¼¿ä"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "´Ù½Ã ¾²±â¸¦ °¡´ÉÇÏ°Ô ÇÏ·Á¸é 'toggle-write'¸¦ »ç¿ëÇϼ¼¿ä!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "¸ÞÀÏÇÔÀÌ ¾²±â ºÒ°¡´ÉÀ¸·Î Ç¥½Ã µÇ¾úÀ½. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "¸ÞÀÏÇÔÀ̠ǥ½ÃµÊ."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "¸ÞÀÏÀ» ¾²Áö ¸øÇÔ"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "ÀÌ ¸Þ´º¿¡¼± À¯È¿ÇÏÁö ¾ÊÀ½."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "ÀÌÀüÆäÀÌÁö"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "´ÙÀ½ÆäÀÌÁö"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "÷ºÎ¹°º¸±â"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "´ÙÀ½"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "¸Þ¼¼ÁöÀÇ ³¡ÀÔ´Ï´Ù."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "¸Þ¼¼ÁöÀǠóÀ½ÀÔ´Ï´Ù."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "°Å²Ù·Î Ã£±â: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "ã±â: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "ÇöÀç µµ¿ò¸»À» º¸°í ÀÖ½À´Ï´Ù."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "´õ ÀÌ»óÀÇ Àο빮 ¾øÀ½."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "Àο빮 ÀÌÈÄ¿¡ ´õ ÀÌ»óÀÇ ºñ Àο빮 ¾øÀ½."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "´ÙÁß ÆÄÆ® ¸ÞÀÏ¿¡ °æ°è º¯¼ö°¡ ¾øÀ½!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Ç¥Çö½Ä¿¡¼­ ¿À·ù: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "À߸øµÈ ³¯Â¥ ÀÔ·Â: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "À߸øµÈ ´Þ ÀÔ·Â: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "À߸øµÈ ³¯Â¥ ÀÔ·Â: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "Ç¥Çö½Ä ¿À·ù"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "ÆÐÅÏ ¿À·ù: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: À߸øµÈ ¸í·É¾î"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: ÀÌ ¸ðµå¿¡¼­ Áö¿øµÇÁö ¾ÊÀ½"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "º¯¼ö°¡ ºüÁü"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "»ðÀÔ ¾î±¸°¡ ¸ÂÁö ¾ÊÀ½: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "ºó ÆÐÅÏ"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "¿À·ù: ¾Ë ¼ö ¾ø´Â ÀÛµ¿ %d (¿À·ù º¸°í ¹Ù¶÷)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "°Ë»ö ÆÐÅÏ ÄÄÆÄÀÏ Áß..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "¼±ÅõȠ¸ÞÀÏ¿¡ ¸í·É ½ÇÇàÁß..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "±âÁØ°ú ÀÏÄ¡Çϴ ¸ÞÀÏÀÌ ¾øÀ½."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "ÀÏÄ¡Çϴ °á°ú°¡ ¾Æ·¡¿¡ ¾øÀ½"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "ÀÏÄ¡Çϴ °á°ú°¡ À§¿¡ ¾øÀ½"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "ã´Â µµÁß ÁߴܵÊ."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "PGP ¾ÏÈ£ ¹®±¸ ÀØÀ½."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- ¿À·ù: PGP ÇϺΠÇÁ·Î¼¼½º¸¦ »ý¼ºÇÒ ¼ö ¾øÀ½! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- PGP Ãâ·Â ³¡ --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PGP ¸ÞÀÏ ½ÃÀÛ --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- PGP °ø°³ ¿­¼è ºÎºÐ ½ÃÀÛ --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PGP ¼­¸í ¸ÞÀÏ ½ÃÀÛ --]\n"
+"\n"
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- PGP ¸ÞÀÏ ³¡ --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- PGP °ø°³ ¿­¼è ºÎºÐ ³¡--]\n"
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- PGP ¼­¸í ¸ÞÀÏ ³¡ --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- ¿À·ù: PGP ¸ÞÀÏÀÇ ½ÃÀÛÀ» Ã£À» ¼ö ¾øÀ½! --]\n"
+"\n"
+
+#: pgp.c:662
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "³»ºÎ ¿À·ù. <roessler@does-not-exist.org>¿¡°Ô ¾Ë·ÁÁֽʽÿä."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Error: PGP ÇϺΠÇÁ·Î¼¼½º¸¦ »ý¼ºÇÒ ¼ö ¾øÀ½! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- ¿À·ù: À߸ø ¸¸µé¾îÁø PGP/MIME Çü½ÄÀÇ ¸ÞÀÏ! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- ¿À·ù: ÀӽàÆÄÀÏÀ» ¸¸µé ¼ö°¡ ¾øÀ½! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- ¾Æ·¡ÀÇ ÀÚ·á´Â PGP/MIME ¾Ïȣȭ µÇ¾úÀ½ --]\n"
+"\n"
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- PGP/MIME ¾Ïȣȭ ÀÚ·á ³¡ --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "PGP ÇϺΠÇÁ·Î¼¼½º¸¦ ¿­ ¼ö ¾øÀ½!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "keyID = \"%s\"¸¦ %s¿¡ »ç¿ëÇÒ±î¿ä?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "%sÀÇ keyID ÀÔ·Â: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "PGP¸¦ ½ÇÇàÇÏÁö ¸øÇÔ"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "PGP ¿­¼è °¡Á®¿À´Â Áß..."
+
+#: pgpkey.c:486
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "¸ðµç Å°°¡ ¸¸±â/Ãë¼Ò/»ç¿ë ºÒ°¡ ÀÔ´Ï´Ù."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "¼±Åà "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "¿­¼è È®ÀΠ "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "PGP Å°°¡ <%s>¿Í ÀÏÄ¡ÇÔ."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "PGP Å°°¡ \"%s\"¿Í ÀÏÄ¡ÇÔ."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "/dev/null¸¦ ¿­ ¼ö ¾øÀ½"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "ÀӽàÆÄÀÏÀ» ¸¸µé ¼ö ¾øÀ½"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "¿­¼è ID: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "ÀÌ Å°´Â »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù: ¸¸±â/»ç¿ëÁßÁö/Ãë¼ÒµÊ."
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "ÀÌ Å°´Â ¸¸±â/»ç¿ëÁßÁö/Ãë¼ÒµÊ."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "IDÀÇ ÀÎÁõÀÚ°¡ Á¤ÀǵÇÁö ¾ÊÀ½."
+
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "ÀÌ ID´Â È®½ÇÇÏÁö ¾ÊÀ½."
+
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "ÀÌ ID´Â ½Å¿ëµµ°¡ ³·À½"
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s ÀÌ Å°¸¦ Á¤¸»·Î »ç¿ëÀ» ÇÏ°Ú½À´Ï±î?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "¿­¼è ID ¸¦ ÀÔ·ÂÇϽʽÿä: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "PGP¸¦ ±¸µ¿ÇÕ´Ï´Ù..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "PGP Ű %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "\"%s\"¿Í ÀÏÄ¡Çϴ Ű¸¦ Ã£´Â Áß..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "¸í·É¾î TOPÀÌ ¼­¹ö¿¡¼­ Áö¿øµÇÁö ¾ÊÀ½."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "ÀӽàÆÄÀÏ ¸¸µé ¼ö ¾øÀ½"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "¸í·É¾î UIDLÀÌ ¼­¹ö¿¡¼­ Áö¿øµÇÁö ¾ÊÀ½."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "%s´Â À߸øµÈ POP Æнº"
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "¸ÞÀÏÀÇ ¸ñ·ÏÀ» °¡Á®¿À´Â Áß..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "¸ÞÀÏÀ» ÀӽàÆÄÀÏ¿¡ ¾µ¼ö ¾øÀ½!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "»õ ¸ÞÀÏÀ» È®ÀÎÁß..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "POP ¼­¹ö°¡ ÁöÁ¤µÇÁö ¾ÊÀ½."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "POP ¸ÞÀÏÇÔ¿¡ »õ ¸ÞÀÏÀÌ ¾øÀ½."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "¼­¹öÀÇ ¸ÞÀÏÀ» »èÁ¦ ÇÒ±î¿ä?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "»õ ¸ÞÀÏ Àд Áß (%d ¹ÙÀÌÆ®)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "¸ÞÀÏÇÔ¿¡ ¾²´Â Áß ¿À·ù!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d - %d ¸ÞÀÏ ÀÐÀ½]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "¼­¹ö¿Í ¿¬°áÀÌ ²÷¾îÁü!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "ÀÎÁõ Áß (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "ÀÎÁõ Áß (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "APOP ÀÎÁõ¿¡ ½ÇÆÐÇÔ."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "¸í·É¾î USER¸¦ ¼­¹ö¿¡¼­ Áö¿øÇÏÁö ¾ÊÀ½."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "¼­¹ö¿¡ ¸ÞÀÏÀ» ³²°Ü µÑ ¼ö ¾øÀ½."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "%s ¼­¹ö¿ÍÀÇ ¿¬°á ¿À·ù"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "POP ¼­¹ö¿ÍÀÇ ¿¬°áÀ» ´Ý´ÂÁß..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "¸ÞÀÏ À妽º¸¦ È®ÀÎÁß..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "¿¬°áÀÌ ²÷¾îÁü. POP ¼­¹ö¿Í ´Ù½Ã ¿¬°á ÇÒ±î¿ä?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "¹ß¼Û ¿¬±â µÊ"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "¹ß¼Û ¿¬±âµÈ ¸ÞÀÏ ¾øÀ½."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "À߸øµÈ PGP Çì´õ"
+
+#: postpone.c:479
+msgid "Illegal S/MIME header"
+msgstr "À߸øµÈ S/MIME Çì´õ"
+
+#: postpone.c:554
+msgid "Decryption failed."
+msgstr "Çص¶ ½ÇÆÐ."
+
+#: query.c:46
+msgid "New Query"
+msgstr "»õ Áú¹®"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "º°Äª ¸¸µé±â"
+
+#: query.c:48
+msgid "Search"
+msgstr "ã±â"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "ÀÀ´äÀ» ±â´Ù¸®´Â Áß..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "ÁúÀÇ ¸í·ÉÀÌ Á¤ÀǵÇÁö ¾ÊÀ½."
+
+#: query.c:286
+msgid "Query"
+msgstr "ÁúÀÇ"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "ÁúÀÇ: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "ÁúÀÇ '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "¿¬°á"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Ãâ·Â"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "ÀúÀåÁß..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "÷ºÎ¹° ÀúÀåµÊ."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "ÁÖÀÇ! %s¸¦ µ¤¾î ¾º¿ó´Ï´Ù, °è¼ÓÇÒ±î¿ä?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "÷ºÎ¹° ÇÊÅ͵Ê."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "ÇÊÅÍ: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "¿¬°á: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "÷ºÎ¹° %sÀÇ Ãâ·Â ¹æ¹ýÀ» ¾Ë ¼ö ¾øÀ½!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "űװ¡ ºÙÀº Ã·ºÎ¹° Ãâ·Â?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "÷ºÎ¹° Ãâ·Â?"
+
+#: recvattach.c:938
+msgid "Can't decrypt encrypted message!"
+msgstr "¾ÏȣȭµÈ ¸ÞÀÏÀ» Çص¶ÇÒ ¼ö ¾øÀ½!"
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "÷ºÎ¹°"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "´õ ÀÌ»ó Ã·ºÎ¹°ÀÌ ¾ø½À´Ï´Ù."
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "POP ¼­¹ö¿¡¼­ Ã·ºÎ¹°À» »èÁ¦ ÇÒ¼ö ¾øÀ½."
+
+#: recvattach.c:1056
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "¾ÏȣȭµÈ ¸ÞÀÏÀǠ÷ºÎ¹° »èÁ¦´Â Áö¿øµÇÁö ¾ÊÀ½."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "´ÙÁßü°è Ã·ºÎ¹°ÀÇ »èÁ¦¸¸ÀÌ Áö¿øµË´Ï´Ù."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "message/rfc822 ºÎºÐ¸¸ Àü´ÞÇÒ ¼ö ÀÖ½À´Ï´Ù."
+
+#: recvcmd.c:213
+msgid "Error bouncing message!"
+msgstr "¸ÞÀÏ ¹Ù¿î½ºÁß ¿À·ù!"
+
+#: recvcmd.c:213
+msgid "Error bouncing messages!"
+msgstr "¸ÞÀÏ ¹Ù¿î½ºÁß ¿À·ù!"
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "ÀӽàÆÄÀÏ %s¸¦ ¿­Áö ¸øÇÔ"
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "÷ºÎ¹°·Î Æ÷¿öµù?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr "Ç¥½ÃµÈ Ã·ºÎ¹°À» ¸ðµÎ µðÄÚµùÇÏÁö ¸øÇÔ. ³ª¸ÓÁö´Â MIME Æ÷¿öµù ÇÒ±î¿ä?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "MIME Ä¸½¶¿¡ ³Ö¾î Æ÷¿öµùÇÒ±î¿ä?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "%s¸¦ ¸¸µé ¼ö ¾øÀ½."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Ç¥½ÃµÈ ¸ÞÀÏÀÌ ¾ø½À´Ï´Ù."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "¸ÞÀϸµ ¸®½ºÆ®¸¦ Ã£À» ¼ö ¾øÀ½!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr "Ç¥½ÃµÈ Ã·ºÎ¹°À» ¸ðµÎ µðÄÚµùÇÏÁö ¸øÇÔ. ³ª¸ÓÁö´Â MIME Ä¸½¶À» »ç¿ëÇÒ±î¿ä?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "÷°¡"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "»ðÀÔ"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "»èÁ¦"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "È®ÀÎ"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "mixmasterÀÇ type2.list¸¦ Ã£Áö ¸øÇÔ!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "¸®¸ÞÀÏ·¯ Ã¼ÀΠ¼±ÅÃ."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "¿À·ù: %s´Â Ã¼ÀÎÀÇ ¸¶Áö¸· ¸®¸ÞÀÏ·¯·Î »ç¿ëÇÒ¼ö ¾øÀ½."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Mixmaster Ã¼ÀÎÀº %d°³ÀÇ Á¦ÇÑÀÌ ÀÖÀ½."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "¸®¸ÞÀÏ·¯ Ã¼ÀÎÀÌ À̹̠ºñ¾î ÀÖÀ½."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "À̹̠ù¹ø° Ã¼ÀÎÀ» ¼±ÅÃÇßÀ½."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "À̹̠¸¶Áö¸· Ã¼ÀÎÀ» ¼±ÅÃÇßÀ½."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Mixmaster´Â Cc ¶Ç´Â Bcc Çì´õ¸¦ Çã¿ëÇÏÁö ¾ÊÀ½."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr "mixmaster¸¦ »ç¿ëÇϱâ À§ÇÑ Àû´çÇѠȣ½ºÆ® º¯¼ö¸¦ »ç¿ëÇϼ¼¿ä!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "¸ÞÀÏ º¸³»´Â Áß ¿À·ù %d.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "¸ÞÀÏ º¸³»´Â Áß ¿À·ù."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "\"%2$s\" %d ¹ø° ÁÙÀÇ %1$s À¯ÇüÀÇ Ç׸ñÀº À߸øµÈ Çü½ÄÀÓ"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "mailcap Æнº°¡ ÁöÁ¤µÇÁö ¾ÊÀ½"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "%s Çü½ÄÀ» mailcap Ç׸ñ¿¡¼­ Ã£À» ¼ö ¾øÀ½"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: ³Ê¹« ÀûÀº ÀÎÀÚ"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: ³Ê¹« ¸¹Àº ÀÎÀÚ"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Á¦¸ñ ¾øÀ½. ³¡³¾±î¿ä?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Á¦¸ñ ¾øÀ½. ³¡³À´Ï´Ù."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "%s%s¿¡°Ô ´äÀå?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "%s%s¿¡°Ô ´ñ±Û?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "űװ¡ ºÙÀº ¸ÞÀÏÀ» º¼ ¼ö ¾øÀ½!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "´äÀå¿¡ ¿øº»À» Æ÷ÇÔ½Ãŵ´Ï±î?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Àο렸ÞÀÏ Æ÷ÇÔ Áß..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "¿äûµÈ ¸ðµç ¸ÞÀÏÀ» Æ÷ÇÔÇÒ ¼ö ¾øÀ½!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "÷ºÎ¹°·Î Æ÷¿öµù?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "¸ÞÀÏ Æ÷¿öµùÀ» Áغñ Áß..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "¹ß¼Û ¿¬±âµÈ ¸ÞÀÏÀ» ´Ù½Ã ºÎ¸¦±î¿ä?"
+
+#: send.c:1336
+msgid "Edit forwarded message?"
+msgstr "Æ÷¿öµùµÈ ¸ÞÀÏÀ» ¼öÁ¤ÇÒ±î¿ä?"
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "º¯°æµÇÁö ¾ÊÀº ¸ÞÀÏÀ» Ãë¼ÒÇÒ±î¿ä?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "º¯°æµÇÁö ¾ÊÀº ¸ÞÀÏ Ãë¼ÒÇÔ."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "º¸³»Áö ¾ÊÀ½."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "¹ß¼Û ¿¬±âµÊ."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "¼ö½ÅÀÚ°¡ ÁöÁ¤µÇÁö ¾ÊÀ½!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "¼ö½ÅÀÚ°¡ ÁöÁ¤µÇÁö ¾ÊÀ½."
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Á¦¸ñ ¾øÀ½, º¸³»±â¸¦ Ãë¼ÒÇÒ±î¿ä?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Á¦¸ñÀÌ ÁöÁ¤µÇÁö ¾ÊÀ½."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "¸ÞÀÏ º¸³»´Â Áß..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "¸ÞÀÏÀ» º¸³¾ ¼ö ¾øÀ½."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "¸ÞÀÏ º¸³¿."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "¹é±×¶ó¿îµå·Î º¸³¿."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "ÇÑ°è º¯¼ö ¾øÀ½! [¿À·ù º¸°í ¹Ù¶÷]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s°¡ ´õ ÀÌ»ó Á¸ÀçÄ¡ ¾ÊÀ½!"
+
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "%s´Â ¿Ã¹Ù¸¥ ÆÄÀÏÀÌ ¾Æ´Ô."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "%s¸¦ ¿­ ¼ö ¾øÀ½"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "¸ÞÀÏÀ» º¸³»´Â Áß ¿À·ù %d (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "¹è´Þ ÇÁ·Î¼¼½ºÀÇ Ãâ·Â"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr "resent-fromÀ» ÁغñÇϴ µ¿¾È À߸øµÈ IDN %s"
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s... Á¾·áÇÔ.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "%s ¹ß°ß... Á¾·áÇÔ.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "%d ½ÅÈ£ ¹ß°ß... Á¾·áÇÔ.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr "½Å¿ëÇÒ ¼ö ÀÖÀ½   "
+
+#: smime.c:303
+msgid "Verified  "
+msgstr "È®Àεʠ  "
+
+#: smime.c:306
+msgid "Unverified"
+msgstr "¹ÌÈ®ÀεÊ"
+
+#: smime.c:309
+msgid "Expired   "
+msgstr "¸¸±âµÊ  "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr "Ãë¼ÒµÊ   "
+
+#: smime.c:315
+msgid "Invalid   "
+msgstr "¹«È¿   "
+
+#: smime.c:318
+msgid "Unknown   "
+msgstr "¾Ë ¼ö ¾øÀ½   "
+
+#: smime.c:347
+msgid "Enter keyID: "
+msgstr "keyID ÀÔ·Â: "
+
+#: smime.c:370
+#, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "S/MIME ÀÎÁõ¼­°¡ \"%s\"¿Í ÀÏÄ¡."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr "ID %s ¹ÌÈ®ÀεÊ. %s¿¡ »ç¿ëÇÒ±î¿ä?"
+
+#: smime.c:523 smime.c:592
+#, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "ID \"%s\" (¹ÏÀ» ¼ö ¾øÀ½!)¸¦ %s¿¡ »ç¿ëÇÒ±î¿ä?"
+
+#: smime.c:526 smime.c:595
+#, c-format
+msgid "Use ID %s for %s ?"
+msgstr "ID \"%s\"¸¦ %s¿¡ »ç¿ëÇÒ±î¿ä?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr "°æ°í: ½Å¿ë ID %s¸¦ °áÁ¤ÇÏÁö ¾Ê¾Ò½À´Ï´Ù. (¾Æ¹« Å°³ª °è¼Ó)"
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr "%s¸¦ À§ÇÑ ÀÎÁõ¼­¸¦ Ã£À» ¼ö ¾øÀ½."
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "¿À·ù: OpenSSL ÇϺΠÇÁ·Î¼¼½º¸¦ »ý¼ºÇÒ ¼ö ¾øÀ½!"
+
+#: smime.c:1197
+msgid "no certfile"
+msgstr "ÀÎÁõÆÄÀÏ ¾øÀ½"
+
+#: smime.c:1200
+msgid "no mbox"
+msgstr "¸ÞÀÏÇÔ ¾øÀ½"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr "OpenSSLÀ¸·Î ºÎÅÍ Ãâ·ÂÀÌ ¾øÀ½.."
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr "°æ°í: ÀÎÁõ¼­¸¦ Ã£À» ¼ö ¾øÀ½"
+
+#: smime.c:1426
+msgid "Can't open OpenSSL subprocess!"
+msgstr "OpenSSL ÇϺΠÇÁ·Î¼¼½º¸¦ ¿­ ¼ö ¾øÀ½!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr "OpenSSLÀ¸·Î ºÎÅÍ Ãâ·ÂÀÌ ¾øÀ½..."
+
+#: smime.c:1629 smime.c:1751
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- OpenSSL Ãâ·Â ³¡ --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- ¿À·ù: OpenSSL ÇϺΠÇÁ·Î¼¼½º¸¦ »ý¼ºÇÒ ¼ö ¾øÀ½! --]\n"
+
+#: smime.c:1755
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr ""
+"[-- ¾Æ·¡ÀÇ ÀÚ·á´Â S/MIME ¾Ïȣȭ µÇ¾úÀ½ --]\n"
+"\n"
+
+#: smime.c:1758
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr ""
+"[-- ¾Æ·¡ÀÇ ÀÚ·á´Â S/MIME ¼­¸í µÇ¾úÀ½ --]\n"
+"\n"
+
+#: smime.c:1822
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- S/MIME ¾Ïȣȭ ÀÚ·á ³¡ --]\n"
+
+#: smime.c:1824
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- S/MIME ¼­¸í ÀÚ·á ³¡ --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "¸ÞÀÏÇÔ Á¤·Ä Áß..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "Á¤·Ä ÇÔ¼ö Ã£À» ¼ö ¾øÀ½! [¹ö±× º¸°í ¹Ù¶÷]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(¸ÞÀÏÇÔ ¾øÀ½)"
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "Á¦ÇѵȠº¸±â·Î ºÎ¸ð ¸ÞÀÏÀº º¸ÀÌÁö ¾Ê´Â »óÅÂÀÓ."
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "ºÎ¸ð ¸ÞÀÏÀÌ Á¸ÀçÇÏÁö ¾ÊÀ½."
diff --git a/po/lt.gmo b/po/lt.gmo
new file mode 100644 (file)
index 0000000..599ae97
Binary files /dev/null and b/po/lt.gmo differ
diff --git a/po/lt.po b/po/lt.po
new file mode 100644 (file)
index 0000000..f4dd8f6
--- /dev/null
+++ b/po/lt.po
@@ -0,0 +1,4301 @@
+# Lithuanian translation of Mutt
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Tadas <btadas@is.lt>, 2000
+# Marius Gedminas <mgedmin@puni.osf.lt>
+# Gediminas Paulauskas <menesis@delfi.lt>, 2000.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mutt 1.3.12i\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2000-11-29 21:22+0200\n"
+"Last-Translator: Gediminas Paulauskas <menesis@delfi.lt>\n"
+"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-13\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "%s vartotojo vardas: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "%s@%s slaptaþodis: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Iðeit"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Trint"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Gràþint"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Pasirinkti"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Pagalba"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "Tu neturi aliasø!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Aliasai"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Aliase kaip:"
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "Tu jau apibrëþei aliasà tokiu vardu!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr ""
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Adresas:"
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr ""
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Asmens vardas:"
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] Tinka?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Iðsaugoti á bylà:"
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Aliasas ádëtas."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Negaliu rasti tinkanèio vardo, tæsti?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "Mailcap kûrimo áraðui reikia %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "Klaida vykdant \"%s\"!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Nepavyko atidaryti bylos antraðtëms nuskaityti."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Nepavyko atidaryti bylos antraðtëms iðmesti."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "Nëra mailcap kûrimo áraðo %s, sukuriu tuðèià bylà."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "Mailcap Taisymo áraðui reikia %%s"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "Nëra mailcap taisymo áraðo tipui %s"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "Neradau tinkamo mailcap áraðo.  Rodau kaip tekstà."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "MIME tipas neapibrëþtas.  Negaliu parodyti priedo."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Negaliu sukurti filtro"
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Negaliu sukurti filtro"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "Raðymo nesëkmë!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Að neþinau, kaip tai atspausdinti!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Pereiti"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Kaukë"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s nëra katalogas."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Paðto dëþutës [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Uþsakytos [%s], Bylø kaukë: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Katalogas [%s], Bylø kaukë: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Negaliu prisegti katalogo!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Në viena byla netinka bylø kaukei"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Kol kas sukurti gali tik IMAP paðto dëþutes"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Kol kas iðtrinti gali tik IMAP paðto dëþutes"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Tikrai iðtrinti paðto dëþutæ \"%s\"?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "Paðto dëþutë iðtrinta."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "Paðto dëþutë neiðtrinta."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Pereiti á katalogà: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Klaida skaitant katalogà."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Bylø kaukë:"
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Atvirkðèiai rikiuoti pagal (d)atà, (v)ardà, d(y)dá ar (n)erikiuoti?"
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Rikiuoti pagal (d)atà, (v)ardà, d(y)dá ar (n)erikiuoti? "
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "dvyn"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Naujos bylos vardas: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Negaliu þiûrëti katalogo"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Klaida bandant þiûrëti bylà"
+
+#: buffy.c:442
+#, fuzzy
+msgid "New mail in "
+msgstr "Naujas paðtas dëþutëje %s."
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: spalva nepalaikoma terminalo"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: nëra tokios spalvos"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: nëra tokio objekto"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: komanda teisinga tik indekso objektams"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: per maþai argumentø"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Trûksta argumentø."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: per maþai argumentø"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: per maþai argumentø"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: tokio atributo nëra"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "per maþai argumentø"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "per daug argumentø"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "áprastos spalvos nepalaikomos"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "Tikrinti PGP paraðà?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Negaliu sukurti laikinos bylos!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Negaliu sukurti ekrano filtro"
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "Negalëjau kopijuoti laiðko"
+
+#: commands.c:182
+#, fuzzy
+msgid "S/MIME signature successfully verified."
+msgstr "PGP paraðas patikrintas sëkmingai."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr ""
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+#, fuzzy
+msgid "S/MIME signature could NOT be verified."
+msgstr "PGP paraðas NEGALI bûti patikrintas."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "PGP paraðas patikrintas sëkmingai."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "PGP paraðas NEGALI bûti patikrintas."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Komanda: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Nukreipti laiðkà kam: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Nukreipti paþymëtus laiðkus kam: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "Klaida nagrinëjant adresà!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr ""
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Nukreipti laiðkà á %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Nukreipti laiðkus á %s"
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Message not bounced."
+msgstr "Laiðkas nukreiptas."
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Messages not bounced."
+msgstr "Laiðkai nukreipti."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Laiðkas nukreiptas."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Laiðkai nukreipti."
+
+#: commands.c:381 commands.c:415 commands.c:432
+#, fuzzy
+msgid "Can't create filter process"
+msgstr "Negaliu sukurti filtro"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Filtruoti per komandà: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "Spausdinimo komanda nebuvo apibrëþta."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "Spausdinti laiðkà?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Spausdinti paþymëtus laiðkus?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "Laiðkas atspausdintas"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Laiðkai atspausdinti"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "Laiðkas negalëjo bûti atspausdintas"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "Laiðkai negalëjo bûti atspausdinti"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Atv-Rik (d)ata/n(u)o/g(a)uta/(t)ema/(k)am/(g)ija/(n)erik/d(y)dis/(v)ertë?: "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Rik (d)ata/n(u)o/g(a)uta/(t)ema/(k)am/(g)ija/(n)erik/d(y)dis/(v)ertë?: "
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "duatkgnyv"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Shell komanda: "
+
+#: commands.c:701
+#, fuzzy, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "%s%s á dëþutæ"
+
+#: commands.c:702
+#, fuzzy, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "%s%s á dëþutæ"
+
+#: commands.c:703
+#, fuzzy, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "%s%s á dëþutæ"
+
+#: commands.c:704
+#, fuzzy, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "%s%s á dëþutæ"
+
+#: commands.c:705
+#, fuzzy, c-format
+msgid "Save%s to mailbox"
+msgstr "%s%s á dëþutæ"
+
+#: commands.c:705
+#, fuzzy, c-format
+msgid "Copy%s to mailbox"
+msgstr "%s%s á dëþutæ"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " paþymëtus"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Kopijuoju á %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr ""
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Content-Type pakeistas á %s."
+
+#: commands.c:912
+#, fuzzy, c-format
+msgid "Character set changed to %s; %s."
+msgstr "Character set pakeistas á %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr ""
+
+#: commands.c:914
+msgid "converting"
+msgstr ""
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Nëra jokiø priedø."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Siøsti"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Nutraukti"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Prisegti bylà"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Aprað"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Pasiraðyti, Uþðifruoti"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Uþðifruoti"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Pasiraðyti"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Iðvalyti"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " pasiraðyti kaip: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<áprastas>"
+
+#: compose.c:149
+#, fuzzy
+msgid "Encrypt with: "
+msgstr "Uþðifruoti"
+
+#: compose.c:165
+#, fuzzy
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"(u)þðifruot, pa(s)iraðyt, pasiraðyt k(a)ip, a(b)u, rinktis (m)ic algoritmà, "
+"ar (p)amirðti?"
+
+#: compose.c:166
+#, fuzzy
+msgid "esabf"
+msgstr "usabmp"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Pasiraðyti kaip: "
+
+#: compose.c:227
+#, fuzzy
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"(u)þðifruot, pa(s)iraðyt, pasiraðyt k(a)ip, a(b)u, rinktis (m)ic algoritmà, "
+"ar (p)amirðti?"
+
+#: compose.c:228
+#, fuzzy
+msgid "eswabf"
+msgstr "usabmp"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+
+#: compose.c:238
+msgid "12345f"
+msgstr ""
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] nebeegzistuoja!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] pasikeitë. Atnaujinti koduotæ?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Priedai"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr ""
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Tu negali iðtrinti vienintelio priedo."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr ""
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "Prisegu parinktas bylas..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "Negaliu prisegti %s!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Atidaryti dëþutæ, ið kurios prisegti laiðkà"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "Nëra laiðkø tame aplanke."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Paþymëk laiðkus, kuriuos nori prisegti!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Negaliu prisegti!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "Perkodavimas keièia tik tekstinius priedus."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "Esamas priedas nebus konvertuotas."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "Esamas priedas bus konvertuotas."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Bloga koduotë."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Iðsaugoti ðio laiðko kopijà?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Pervadinti á:"
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, fuzzy, c-format
+msgid "Can't stat %s: %s"
+msgstr "Negalëjau stat'inti: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Nauja byla:"
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Content-Type pavidalas yra rûðis/porûðis"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Neþinomas Content-Type %s"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Negaliu sukurti bylos %s"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "Èia turëtø bûti priedas, taèiau jo nepavyko padaryti"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Atidëti ðá laiðkà?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Áraðyti laiðkà á dëþutæ"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Raðau laiðkà á %s ..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "Laiðkas áraðytas."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr ""
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr ""
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr ""
+
+#: crypt.c:71
+#, fuzzy, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- Toliau PGP iðvestis (esamas laikas: %c) --]\n"
+
+#: crypt.c:86
+#, fuzzy
+msgid "Passphrase(s) forgotten."
+msgstr "PGP slapta frazë pamirðta."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Ávesk slaptà PGP frazæ:"
+
+#: crypt.c:147
+#, fuzzy
+msgid "Enter SMIME passphrase:"
+msgstr "Ávesk slaptà PGP frazæ:"
+
+#: crypt.c:192
+#, fuzzy
+msgid "Create a traditional (inline) PGP message?"
+msgstr "Ar sukurti application/pgp laiðkà?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "Kvieèiu PGP..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr ""
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr ""
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr ""
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- Klaida: Neteisinga multipart/signed struktûra! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- Klaida: Neþinomas multipart/signed protokolas %s! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Dëmesio: Negaliu patikrinti %s/%s paraðo. --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+#, fuzzy
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- Toliau einantys duomenys yra pasiraðyti --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Dëmesio: Negaliu rasti jokiø paraðø --]\n"
+"\n"
+
+#: crypt.c:924
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Pasiraðytø duomenø pabaiga --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "taip"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "ne"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Iðeiti ið Mutt?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "neþinoma klaida"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Spausk bet koká klaviðà..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr "('?' parodo sàraðà): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Jokia dëþutë neatidaryta."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Ten nëra laiðkø."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "Dëþutë yra tik skaitoma."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "Funkcija neleistina laiðko prisegimo reþime."
+
+#: curs_main.c:51
+#, fuzzy
+msgid "No visible messages."
+msgstr "Nëra naujø laiðkø"
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "Negaliu perjungti tik skaitomos dëþutës raðomumo!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "Aplanko pakeitimai bus áraðyti iðeinant ið aplanko."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Aplanko pakeitimai nebus áraðyti."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Iðeit"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Saugoti"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Raðyt"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Atsakyt"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Grupei"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "Dëþutë buvo iðoriðkai pakeista.  Flagai gali bûti neteisingi."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Naujas paðtas ðioje dëþutëje."
+
+#: curs_main.c:499
+#, fuzzy
+msgid "Mailbox was externally modified."
+msgstr "Dëþutë buvo iðoriðkai pakeista.  Flagai gali bûti neteisingi."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Nëra paþymëtø laiðkø."
+
+#: curs_main.c:653 menu.c:896
+#, fuzzy
+msgid "Nothing to do."
+msgstr "Jungiuosi prie %s..."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Ðokti á laiðkà: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "Argumentas turi bûti laiðko numeris."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Tas laiðkas yra nematomas."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Blogas laiðko numeris."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Iðtrinti laiðkus, tenkinanèius: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "Joks ribojimo pattern'as nëra naudojamas."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Riba: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Riboti iki laiðkø, tenkinanèiø: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Iðeiti ið Mutt?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Paþymëti laiðkus, tenkinanèius: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Sugràþinti laiðkus, tenkinanèius: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Atþymëti laiðkus, tenkinanèius: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Atidaryti dëþutæ tik skaitymo reþimu."
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Atidaryti dëþutæ"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s nëra paðto dëþutë."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Iðeiti ið Mutt neiðsaugojus pakeitimø?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Tu esi ties paskutiniu laiðku."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Nëra iðtrintø laiðkø."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Tu esi ties pirmu laiðku."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "Paieðka perðoko á virðø."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "Paieðka perðoko á apaèià."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Nëra naujø laiðkø"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Nëra neskaitytø laiðkø"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " ðiame apribotame vaizde"
+
+#: curs_main.c:1405 pager.c:2337
+#, fuzzy
+msgid "Can't change 'important' flag on POP server."
+msgstr "Negaliu taisyti laiðko POP serveryje."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Daugiau gijø nëra."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Tu esi ties pirma gija."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "Skirstymas gijomis neleidþiamas."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "Gijoje yra neskaitytø laiðkø."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "Negaliu taisyti laiðko POP serveryje."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\táterpti eilutæ, prasidedanèià vienu ~\n"
+"~b vartotojai\tpridëti vartotojus prie Bcc: lauko\n"
+"~c vartotojai\tpridëti vartotojus prie Cc: lauko\n"
+"~f laiðkai\tátraukti laiðkus\n"
+"~F laiðkai\ttas pats kas ~f, be to, átraukti antraðtes\n"
+"~h\t\ttaisyti laiðko antraðtæ\n"
+"~m laiðkai\tátraukti ir cituoti laiðkus\n"
+"~M laiðkai\ttas pats kas ~m, be to, átraukti antraðtes\n"
+"~p\t\tspausdinti laiðkà\n"
+"~q\t\táraðyti bylà ir iðeiti ið redaktoriaus\n"
+"~r byla\tperskaityti bylà á redaktoriø\n"
+"~t vartotojai\tpridëti vartotojus prie To: lauko\n"
+"~u\t\tatkurti praeità eilutæ\n"
+"~v\t\ttaisyti laiðkà su $visual redaktoriumi\n"
+"~w byla\táraðyti laiðkà á bylà\n"
+"~x\t\tatsisakyti pakeitimø ir iðeiti ið redaktoriaus\n"
+"~?\t\tði þinutë\n"
+".\t\tvienas eilutëje baigia ávedimà\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: blogas laiðko numeris.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Uþbaik laiðkà vieninteliu taðku eilutëje)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "Nëra dëþutës.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Laiðke yra:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(tæsti)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "trûksta bylos vardo.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Laiðke nëra eiluèiø.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr ""
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: neþinoma redaktoriaus komanda (~? suteiks pagalbà)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "negalëjau sukurti laikino aplanko: %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "negalëjau áraðyti laikino paðto aplanko: %s"
+
+#: editmsg.c:101
+#, fuzzy, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "negalëjau áraðyti laikino paðto aplanko: %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "Laiðkø byla yra tuðèia!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "Laiðkas nepakeistas!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "Negaliu atidaryti laiðko bylos: %s"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Negaliu pridurti laiðko prie aplanko: %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Klaida. Iðsaugau laikinà bylà: %s"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Uþdëti flagà"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Iðvalyti flagà"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[-- Klaida:  Nepavyko parodyti në vienos Multipart/Alternative dalies! --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Priedas #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Tipas: %s/%s, Koduotë: %s, Dydis: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Automatinë perþiûra su %s --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Kvieèiu autom. perþiûros komandà: %s"
+
+#: handler.c:1560
+#, fuzzy, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- %s --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Automatinës perþiûros %s klaidos --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- Klaida: message/external-body dalis neturi access-type parametro --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Ðis %s/%s priedas "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(dydis %s baitø)"
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "buvo iðtrintas --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- %s --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- vardas: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, fuzzy, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Ðis %s/%s priedas "
+
+#: handler.c:1689
+#, fuzzy
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+"[-- Ðis %s/%s priedas neátrauktas, --]\n"
+"[-- o nurodytas iðorinis ðaltinis iðseko. --]\n"
+
+#: handler.c:1707
+#, fuzzy, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr ""
+"[-- Ðis %s/%s priedas neátrauktas, --]\n"
+"[-- o nurodytas pasiekimo tipas %s yra nepalaikomas. --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Klaida: multipart/signed neturi protokolo."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Klaida: multipart/encrypted neturi protocol parametro!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Negaliu atidaryti laikinos bylos!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s yra nepalaikomas "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(naudok '%s' ðiai daliai perþiûrëti)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "('view-attachments' turi bûti susietas su klaviðu!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: negalëjau prisegti bylos"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "KLAIDA: praðau praneðti ðià klaidà"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<NEÞINOMAS>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Bendri susiejimai:\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Nesusietos funkcijos:\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Pagalba apie %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr ""
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: neþinomas hook tipas: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr ""
+
+#: imap/auth.c:104 pop_auth.c:411
+#, fuzzy
+msgid "No authenticators available"
+msgstr "SASL autentikacija nepavyko."
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Autentikuojuosi (anoniminë)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "Anoniminë autentikacija nepavyko."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Autentikuojuosi (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "CRAM-MD5 autentikacija nepavyko."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Autentikuojuosi (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "GSSAPI autentikacija nepavyko."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "LOGIN iðjungtas ðiame serveryje."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Pasisveikinu..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "Nepavyko pasisveikinti."
+
+#: imap/auth_sasl.c:112
+#, fuzzy, c-format
+msgid "Authenticating (%s)..."
+msgstr "Autentikuojuosi (APOP)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "SASL autentikacija nepavyko."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr ""
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "Gaunu vardø erdves..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Gaunu aplankø sàraðà..."
+
+#: imap/browse.c:219
+#, fuzzy
+msgid "No such folder"
+msgstr "%s: nëra tokios spalvos"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Sukurti dëþutæ: "
+
+#: imap/browse.c:282
+#, fuzzy
+msgid "Mailbox must have a name."
+msgstr "Dëþutë yra nepakeista."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Dëþutë sukurta."
+
+#: imap/command.c:290
+#, fuzzy
+msgid "Mailbox closed"
+msgstr "Paðto dëþutë iðtrinta."
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Mirtina klaida.  Nesutampa laiðkø skaièius!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "Uþdarau jungtá su %s..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Ðis IMAP serveris yra senoviðkas. Mutt su juo neveikia."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr ""
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr ""
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "Parenku %s..."
+
+#: imap/imap.c:690
+#, fuzzy
+msgid "Error opening mailbox"
+msgstr "Klaida raðant á paðto dëþutæ!"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Nepavyko pridurti prie IMAP dëþuèiø ðiame serveryje"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "Sukurti %s?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Uþdarau jungtá su IMAP serveriu..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "Paþymiu %d laiðkus iðtrintais..."
+
+#: imap/imap.c:961
+#, fuzzy
+msgid "Expunge failed"
+msgstr "Nepavyko pasisveikinti."
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Iðsaugau laiðko bûsenos flagus... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Iðtuðtinu laiðkus ið serverio..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr ""
+
+#: imap/imap.c:1099
+#, fuzzy
+msgid "CLOSE failed"
+msgstr "Nepavyko pasisveikinti."
+
+#: imap/imap.c:1342
+#, fuzzy
+msgid "Bad mailbox name"
+msgstr "Sukurti dëþutæ: "
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "Uþsakau %s..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "Atsisakau %s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "Negaliu paimti antraðèiø ið ðios IMAP serverio versijos."
+
+#: imap/message.c:84
+#, fuzzy, c-format
+msgid "Could not create temporary file %s"
+msgstr "Negaliu sukurti laikinos bylos!"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Paimu laiðkø antraðtes... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Paimu laiðkà..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "Laiðkø indeksas yra neteisingas. Bandyk ið naujo atidaryti dëþutæ."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Nusiunèiu laiðkà..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "Kopijuoju %d laiðkus á %s..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "Kopijuoju laiðkà %d á %s..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "Tæsti?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "alias: nëra adreso"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr ""
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "blogas antraðtës laukas"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: neþinomas rikiavimo metodas"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): klaida regexp'e: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: neþinomas kintamasis"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "negalima vartoti prieðdëlio su reset"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "reikðmë neleistina reset komandoje"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s yra ájungtas"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s yra iðjungtas"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: blogas paðto dëþutës tipas"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: bloga reikðmë"
+
+#: init.c:1312
+#, fuzzy, c-format
+msgid "%s: Unknown type."
+msgstr "%s: neþinomas tipas"
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: neþinomas tipas"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Negalëjau stat'inti: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s nëra paðto dëþutë."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Klaida %s, eilutë %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: klaidos %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: skaitymas nutrauktas, nes %s yra per daug klaidø."
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: klaida %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: per daug argumentø"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: neþinoma komanda"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Klaida komandinëje eilutëje: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "negaliu nustatyti namø katalogo"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "negaliu nustatyti vartotojo vardo"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Rastas ciklas makrokomandoje."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Klaviðas nëra susietas."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Klaviðas nëra susietas.  Spausk '%s' dël pagalbos."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: per daug argumentø"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: nëra tokio meniu"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "nulinë klaviðø seka"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: per daug argumentø"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: èia nëra tokios funkcijos"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: tuðèia klaviðø seka"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: per daug argumentø"
+
+#: keymap.c:871
+#, fuzzy
+msgid "exec: no arguments"
+msgstr "exec: per maþai argumentø"
+
+#: keymap.c:891
+#, fuzzy, c-format
+msgid "%s: no such function"
+msgstr "%s: èia nëra tokios funkcijos"
+
+#: keymap.c:912
+#, fuzzy
+msgid "Enter keys (^G to abort): "
+msgstr "Ávesk rakto ID, skirtà %s: "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr ""
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "nulinë operacija"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "priverstinai rodyti priedà naudojant mailcap áraðà"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "þiûrëti priedà kaip tekstà"
+
+#: keymap_alldefs.h:9
+#, fuzzy
+msgid "Toggle display of subparts"
+msgstr "perjungti cituojamo teksto rodymà"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "eiti á puslapio apaèià"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "vël siøsti laiðkà kitam vartotojui"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "pasirink naujà bylà ðiame kataloge"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "þiûrëti bylà"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "parodyti dabar paþymëtos bylos vardà"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "uþsakyti esamà aplankà (tik IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "atsisakyti esamo aplanko (tik IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "perjungti visø/uþsakytø dëþuèiø rodymà (tik IMAP)"
+
+#: keymap_alldefs.h:18
+#, fuzzy
+msgid "list mailboxes with new mail"
+msgstr "Nëra dëþutës su nauju paðtu."
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "keisti katalogus"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "tikrinti, ar dëþutëse yra naujo paðto"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "prisegti bylà(as) prie ðio laiðko"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "prisegti bylà(as) prie ðio laiðko"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "taisyti BCC sàraðà"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "taisyti CC sàraðà"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "taisyti priedo apraðymà"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "taisyti priedo Transfer-Encoding"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "ávesk bylà, á kurià iðsaugoti ðio laiðko kopijà"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "taisyti bylà, skirtà prisegimui"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "taisyti From laukà"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "taisyti laiðkà su antraðtëmis"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "taisyti laiðkà"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "taisyti priedà naudojant mailcap áraðà"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "taisyti Reply-To laukà"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "taisyti ðio laiðko temà"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "taisyti To sàraðà"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "sukurti naujà dëþutæ (tik IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "keisti priedo Content-Type"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "gauti laikinà priedo kopijà"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "paleisti ispell laiðkui"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "sukurti naujà priedà naudojant mailcap áraðà"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "perjungti ðio priedo perkodavimà"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "iðsaugoti ðá laiðkà vëlesniam siuntimui"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "pervadinti/perkelti prisegtà bylà"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "siøsti laiðkà"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "perjungti, ar siøsti laiðke, ar priede"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "perjungti, ar iðtrinti bylà, jà iðsiuntus"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "atnaujinti priedo koduotës info."
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "áraðyti laiðkà á aplankà"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "kopijuoti laiðkà á bylà/dëþutæ"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "sukurti aliasà laiðko siuntëjui"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "rodyti áraðà á ekrano apaèioje"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "rodyti áraðà á ekrano viduryje"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "rodyti áraðà á ekrano virðuje"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "padaryti iðkoduotà (text/plain) kopijà"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "padaryti iðkoduotà (text/plain) kopijà ir iðtrinti"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "iðtrinti esamà áraðà"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "iðtrinti esamà dëþutæ (tik IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "iðtrinti visus laiðkus subgijoje"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "iðtrinti visus laiðkus gijoje"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "rodyti pilnà siuntëjo adresà"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "rodyti laiðkà ir perjungti antraðèiø rodymà"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "rodyti laiðkà"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "taisyti grynà laiðkà"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "iðtrinti simbolá prieð þymeklá"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "perkelti þymeklá vienu simboliu kairën"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "perkelti þymeklá á þodþio pradþià"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "perðokti á eilutës pradþià"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "eiti ratu per gaunamo paðto dëþutes"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "uþbaigti bylos vardà ar aliasà"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "uþbaigti adresà su uþklausa"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "iðtrinti simbolá po þymekliu"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "perðokti á eilutës galà"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "perkelti þymeklá vienu simboliu deðinën"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "perkelti þymeklá á þodþio pabaigà"
+
+#: keymap_alldefs.h:75
+#, fuzzy
+msgid "scroll down through the history list"
+msgstr "slinktis aukðtyn istorijos sàraðe"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "slinktis aukðtyn istorijos sàraðe"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "iðtrinti simbolius nuo þymeklio iki eilutës galo"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "iðtrinti simbolius nuo þymeklio iki þodþio galo"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "iðtrinti visus simbolius eilutëje"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "iðtrinti þodá prieð þymeklá"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "cituoti sekantá nuspaustà klaviðà"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "sukeisti simbolá po þymekliu su praeitu"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "pradëti þodá didþiàja raide"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "perraðyti þodá maþosiomis raidëmis"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "perraðyti þodá didþiosiomis raidëmis"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "ávesti muttrc komandà"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "ávesti bylø kaukæ"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "iðeiti ið ðio meniu"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "filtruoti priedà per shell komandà"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "eiti á pirmà uþraðà"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "perjungti laiðko 'svarbumo' flagà"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "persiøsti laiðkà su komentarais"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "paþymëti esamà áraðà"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "atsakyti visiems gavëjams"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "slinktis þemyn per 1/2 puslapio"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "slinktis aukðtyn per 1/2 puslapio"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "ðis ekranas"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "ðokti á indekso numerá"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "eiti á paskutiná áraðà"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "atsakyti nurodytai konferencijai"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "ávykdyti macro"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "sukurti naujà laiðkà"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "atidaryti kità aplankà"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "atidaryti kità aplankà tik skaitymo reþimu"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "iðvalyti laiðko bûsenos flagà"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "iðtrinti laiðkus, tenkinanèius pattern'à"
+
+#: keymap_alldefs.h:107
+#, fuzzy
+msgid "force retrieval of mail from IMAP server"
+msgstr "parsiøsti paðtà ið POP serverio"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "parsiøsti paðtà ið POP serverio"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "eiti á pirmà laiðkà"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "eiti á paskutiná laiðkà"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "rodyti tik laiðkus, tenkinanèius pattern'à"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "ðokti á kità naujà laiðkà"
+
+#: keymap_alldefs.h:113
+#, fuzzy
+msgid "jump to the next new or unread message"
+msgstr "ðokti á kità neskaitytà laiðkà"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "ðokti á kità subgijà"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "ðokti á kità gijà"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "eiti á kità neiðtrintà laiðkà"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "ðokti á kità neskaitytà laiðkà"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "ðokti á tëviná laiðkà gijoje"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "ðokti á praeità gijà"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "ðokti á praeità subgijà"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "eiti á praeità neiðtrintà laiðkà"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "ðokti á praeità naujà laiðkà"
+
+#: keymap_alldefs.h:123
+#, fuzzy
+msgid "jump to the previous new or unread message"
+msgstr "ðokti á praeità neskaitytà laiðkà"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "ðokti á praeità neskaitytà laiðkà"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "paþymëti esamà gijà skaityta"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "paþymëti esamà subgijà skaityta"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "uþdëti bûsenos flagà laiðkui"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "iðsaugoti dëþutës pakeitimus"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "paþymëti laiðkus, tenkinanèius pattern'à"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "sugràþinti laiðkus, tenkinanèius pattern'à"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "atþymëti laiðkus, tenkinanèius pattern'à"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "eiti á puslapio vidurá"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "eiti á kità áraðà"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "slinktis viena eilute þemyn"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "eiti á kità puslapá"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "ðokti á laiðko apaèià"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "perjungti cituojamo teksto rodymà"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "praleisti cituojamà tekstà"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "ðokti á laiðko virðø"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "filtruoti laiðkà/priedà per shell komandà"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "eiti á praeità áraðà"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "slinktis viena eilute aukðtyn"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "eiti á praeità puslapá"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "spausdinti esamà áraðà"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "uþklausti iðorinæ programà adresams rasti"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "pridurti naujos uþklausos rezultatus prie esamø"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "iðsaugoti dëþutës pakeitimus ir iðeiti"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "tæsti atidëtà laiðkà"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "iðvalyti ir perpieðti ekranà"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{vidinë}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "atsakyti á laiðkà"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "naudoti esamà laiðkà kaip ðablonà naujam"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "iðsaugoti laiðkà/priedà á bylà"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "ieðkoti reguliarios iðraiðkos"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "ieðkoti reguliarios iðraiðkos atgal"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "ieðkoti kito tinkamo"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "ieðkoti kito tinkamo prieðinga kryptimi"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "perjungti paieðkos pattern'o spalvojimà"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "kviesti komandà subshell'e"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "rikiuoti laiðkus"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "rikiuoti laiðkus atvirkðèia tvarka"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "paþymëti esamà áraðà"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "pritaikyti kità funkcijà paþymëtiems laiðkams"
+
+#: keymap_alldefs.h:164
+#, fuzzy
+msgid "apply next function ONLY to tagged messages"
+msgstr "pritaikyti kità funkcijà paþymëtiems laiðkams"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "paþymëti esamà subgijà"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "paþymëti esamà gijà"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "perjungti laiðko 'naujumo' flagà"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "perjungti, ar dëþutë bus perraðoma"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "perjungti, ar narðyti paðto dëþutes, ar visas bylas"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "eiti á puslapio virðø"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "sugràþinti esamà áraðà"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "sugràþinti visus laiðkus gijoje"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "sugràþinti visus laiðkus subgijoje"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "parodyti Mutt versijos numerá ir datà"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "rodyti priedà naudojant mailcap áraðà, jei reikia"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "rodyti MIME priedus"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr ""
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "parodyti dabar aktyvø ribojimo pattern'à"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "sutraukti/iðskleisti esamà gijà"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "sutraukti/iðskleisti visas gijas"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "prisegti PGP vieðà raktà"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "rodyti PGP parinktis"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "siøsti PGP vieðà raktà"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "patikrinti PGP vieðà raktà"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "þiûrëti rakto vartotojo id"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr ""
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "Priimti sukonstruotà grandinæ"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "Pridëti persiuntëjà á grandinæ"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "Áterpti persiuntëjà á grandinæ"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "Paðalinti persiuntëjà ið grandinës"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "Pasirinkti ankstesná elementà grandinëje"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "Pasirinkti tolesná elementà grandinëje"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "pasiøsti praneðimà per mixmaster persiuntëjø grandinæ"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "padaryti iððifruotà kopijà ir iðtrinti"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "padaryti iððifruotà kopijà"
+
+#: keymap_alldefs.h:196
+#, fuzzy
+msgid "wipe passphrase(s) from memory"
+msgstr "uþmirðti PGP slaptà frazæ"
+
+#: keymap_alldefs.h:197
+#, fuzzy
+msgid "extract supported public keys"
+msgstr "iðtraukti PGP vieðus raktus"
+
+#: keymap_alldefs.h:198
+#, fuzzy
+msgid "show S/MIME options"
+msgstr "rodyti PGP parinktis"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Baigësi atmintis!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"Kad susisiektum su kûrëjais, raðyk laiðkus á <mutt-dev@mutt.org>.\n"
+"Kad praneðtum klaidà, naudok flea(1) áranká.\n"
+
+#: main.c:50
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-2000 Michael R. Elkins ir kiti.\n"
+"Mutt ateina ABSOLIUÈIAI BE JOKIOS GARANTIJOS; dël smulkmenø paleisk 'mutt -"
+"vv.'\n"
+"Mutt yra free software, ir tu gali laisvai jà platinti su tam\n"
+"tikromis sàlygomis; raðyk 'mutt -vv' dël smulkmenø.\n"
+
+#: main.c:56
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-2000 Michael R. Elkins <me@cs.hmc.edu>\n"
+"Copyright (C) 1996-2000 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2000 Thomas Roessler <roessler@guug.de>\n"
+"Copyright (C) 1998-2000 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2000 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2000 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000      Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"Daugybë kitø, nepaminëtø èia, prisidëjo daugybe kodo, pataisymø ir "
+"pasiûlymø.\n"
+"\n"
+"    Ði programa yra free software; tu gali jà platinti ir/arba\n"
+"keisti \n"
+"    pagal GNU General Public License sàlygas, kurias paskelbë\n"
+"    Free Software Foundation; arba 2 Licenzijos versijà, arba\n"
+"    (pagal tavo pasirinkimà) bet kurià vëlesnæ versijà.\n"
+"\n"
+"    Ði programa yra platinama, tikintis, kad ji bus naudinga,\n"
+"    bet BE JOKIOS GARANTIJOS; netgi be numanomos garantijos\n"
+"    VERTINGUMUI arba TINKAMUMUI KOKIAM NORS TIKSLUI.\n"
+"  Þiûrëk á GNU General Public License dël detaliø.\n"
+"\n"
+"    Tu turëjai gauti GNU General Public License kopijà\n"
+"    kartu su ðia programa; jeigu ne, paraðyk á Free Software\n"
+"    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n"
+
+#: main.c:94
+#, fuzzy
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"vartosena: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <byla> ] [ -m <tipas> ] [ -f "
+"<byla> ]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <byla> ] [ -F <byla> ] [ -H <byla> ] "
+"[ -i <byla> ] [ -s <tema> ] [ -b <adres> ] [ -c <adres> ] <adres> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <byla> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"parinktys:\n"
+"  -a <byla>\tprisegti bylà prie laiðko\n"
+"  -b <adresas>\tnurodyti blind carbon-copy (BCC) adresà\n"
+"  -c <adresas>\tnurodyti carbon-copy (CC) adresà\n"
+"  -e <komanda>\tnurodyti komandà, kurià ávykdyti po inicializacijos\n"
+"  -f <byla>\tnurodyti, kurià dëþutæ perskaityti\n"
+"  -F <byla>\tnurodyti alternatyvià muttrc bylà\n"
+"  -H <byla>\tnurodyti juodraðèio bylà, ið kurios skaityti antraðtæ\n"
+"  -i <byla>\tnurodyti bylà, kurià Mutt turëtø átraukti á atsakymà\n"
+"  -m <tipas>\tnurodyti áprastà dëþutës tipà\n"
+"  -n\t\tpriverèia Mutt neskaityti sistemos Muttrc\n"
+"  -p\t\ttæsti atidëtà laiðkà\n"
+"  -R\t\tatidaryti dëþutæ tik skaitymo reþime\n"
+"  -s <tema>\tnurodyti temà (turi bûti kabutëse, jei yra tarpø)\n"
+"  -v\t\trodyti versijà ir kompiliavimo apibrëþimus\n"
+"  -x\t\tsimuliuoti mailx siuntimo bûdà\n"
+"  -y\t\tpasirinkti dëþutæ, nurodytà tavo 'mailboxes' sàraðe\n"
+"  -z\t\tiðkart iðeiti, jei dëþutëje nëra laiðkø\n"
+"  -Z\t\tatidaryti pirmà aplankà su naujais laiðkais, iðkart iðeiti, jei "
+"nëra\n"
+"  -h\t\tði pagalbos þinutë"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Kompiliavimo parinktys:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Klaida inicializuojant terminalà."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Derinimo lygis %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "DEBUG nebuvo apibrëþtas kompiliavimo metu.  Ignoruoju.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s neegzistuoja. Sukurti jà?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "Negaliu sukurti %s: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Nenurodyti jokie gavëjai.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: negaliu prisegti bylos.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Nëra dëþutës su nauju paðtu."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Neapibrëþta në viena paðtà gaunanti dëþutë."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "Dëþutë yra tuðèia."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Skaitau %s... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "Dëþutë yra sugadinta!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "Dëþutë buvo sugadinta!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Baisi klaida!  Negaliu vël atidaryti dëþutës!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Negaliu uþrakinti dëþutës!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr "sync: mbox pakeista, bet nëra pakeistø laiðkø! (praneðk ðià klaidà)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Raðau laiðkus... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+#, fuzzy
+msgid "Committing changes..."
+msgstr "Kompiliuoju paieðkos pattern'à..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Áraðyti nepavyko!  Dëþutë dalinai iðsaugota á %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "Negaliu vël atidaryti dëþutës!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Vël atidarau dëþutæ..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Ðokti á: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Blogas indekso numeris."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Nëra áraðø."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Tu negali slinkti þemyn daugiau."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Tu negali slinkti aukðtyn daugiau."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Tu esi paskutiniame puslapyje."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Tu esi pirmame puslapyje."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "Rodomas pirmas áraðas."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "Rodomas paskutinis áraðas."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Tu esi ties paskutiniu áraðu."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Tu esi ties pirmu áraðu."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Ieðkoti ko: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Atgal ieðkoti ko: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Jokio paieðkos pattern'o."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Nerasta."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "Nëra paþymëtø áraðø."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "Paieðka ðiam meniu neágyvendinta."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "Ðokinëjimas dialoguose neágyvendintas."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Þymëjimas nepalaikomas."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "Skaitau %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr ""
+
+#: muttlib.c:835
+#, fuzzy
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "Byla yra katalogas, saugoti joje?"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "Byla yra katalogas, saugoti joje?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Byla kataloge: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "Byla egzistuoja, (u)þraðyti, (p)ridurti, arba (n)utraukti?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "upn"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "Negaliu iðsaugoti laiðko á POP dëþutæ."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s nëra paðto dëþutë!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Pridurti laiðkus prie %s?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, fuzzy, c-format
+msgid "Connection to %s closed"
+msgstr "Jungiuosi prie %s..."
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL nepasiekiamas."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "Nepavyko komanda prieð jungimàsi"
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, fuzzy, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Klaida jungiantis prie IMAP serverio: %s"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr ""
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "Ieðkau %s..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Negalëjau rasti hosto \"%s\""
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Jungiuosi prie %s..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "Negalëjau prisijungti prie %s (%s)."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "Nepavyko rasti pakankamai entropijos tavo sistemoje"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "Pildau entropijos tvenkiná: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s teisës nesaugios!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "SSL uþdraustas dël entropijos trûkumo"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr ""
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr ""
+
+#: mutt_ssl.c:324
+#, fuzzy, c-format
+msgid "SSL failed: %s"
+msgstr "Nepavyko pasisveikinti."
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "Nepavyko gauti sertifikato ið peer'o"
+
+#: mutt_ssl.c:341
+#, fuzzy, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "SSL jungtis, naudojant %s"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "Neþinoma"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[negaliu suskaièiuoti]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[bloga data]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "Serverio sertifikatas dar negalioja"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "Serverio sertifikatas paseno"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Ðis sertifikatas priklauso: "
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Ðis sertifikatas buvo iðduotas:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Ðis sertifikatas galioja"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "    nuo %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "    iki %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Pirðtø antspaudas: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "SSL sertifikato patikrinimas"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(a)tmesti, (p)riimti ðákart, (v)isada priimti"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "apv"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(a)tmesti, (p)riimti ðákart"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "ap"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Iðeiti  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Áspëju: Negalëjau iðsaugoti sertifikato"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "Sertifikatas iðsaugotas"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Uþraktø skaièius virðytas, paðalinti uþraktà nuo %s?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "Negaliu taðku uþrakinti %s.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "Virðytas leistinas laikas siekiant fcntl uþrakto!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Laukiu fcntl uþrakto... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "Virðytas leistinas laikas siekiant flock uþrakto!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Laukiu fcntl uþrakto... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "Nepavyko uþrakinti %s\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "Skaitau %s..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "Raðau %s..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "Nepavyko sinchronizuoti dëþutës %s!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Perkelti skaitytus laiðkus á %s?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Sunaikinti %d iðtrintà laiðkà?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Sunaikinti %d iðtrintus laiðkus?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Perkeliu skaitytus laiðkus á %s..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "Dëþutë yra nepakeista."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d palikti, %d perkelti, %d iðtrinti."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d palikti, %d iðtrinti."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr "Spausk '%s', kad perjungtum raðymà"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "Naudok 'toggle-write', kad vël galëtum raðyti!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "Dëþutë yra padaryta neáraðoma. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "Dëþutë sutikrinta."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Negaliu áraðyti laiðko"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "Neprieinama ðiame meniu."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "PraPsl"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "KitPsl"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Priedai"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Kitas"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "Rodoma laiðko apaèia."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "Rodomas laiðko virðus."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Atvirkðèia paieðka: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Paieðka: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "Ðiuo metu rodoma pagalba."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "Cituojamo teksto nebëra."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "Nëra daugiau necituojamo teksto uþ cituojamo."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "keliø daliø laiðkas neturi boundary parametro!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Klaida iðraiðkoje: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Bloga mënesio diena: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Blogas mënuo: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, fuzzy, c-format
+msgid "Invalid relative date: %s"
+msgstr "Blogas mënuo: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "klaida iðraiðkoje"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "klaida pattern'e: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: bloga komanda"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: nepalaikomas ðiame reþime"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "trûksta parametro"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "trûkstami skliausteliai: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "tuðèias pattern'as"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "klaida: neþinoma operacija %d (praneðkite ðià klaidà)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Kompiliuoju paieðkos pattern'à..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Vykdau komandà tinkantiems laiðkams..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "Jokie laiðkai netenkina kriterijaus."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "Paieðka pasiekë apaèià nieko neradusi"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "Paieðka pasiekë virðø nieko neradusi"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Paieðka pertraukta."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "PGP slapta frazë pamirðta."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Klaida: negaliu sukurti PGP subproceso! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- PGP iðvesties pabaiga --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PGP LAIÐKO PRADÞIA --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- PGP VIEÐO RAKTO BLOKO PRADÞIA --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PGP PASIRAÐYTO LAIÐKO PRADÞIA --]\n"
+"\n"
+
+#: pgp.c:381
+#, fuzzy
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr ""
+"\n"
+"[-- PGP LAIÐKO PABAIGA --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- PGP VIEÐO RAKTO BLOKO PABAIGA --]\n"
+
+#: pgp.c:385
+#, fuzzy
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr ""
+"\n"
+"[-- PGP PASIRAÐYTO LAIÐKO PABAIGA --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Klaida: neradau PGP laiðko pradþios! --]\n"
+"\n"
+
+#: pgp.c:662
+#, fuzzy
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Vidinë klaida. Praneðk <roessler@guug.de>."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Klaida: negalëjau sukurti PGP subproceso! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Klaida: blogai suformuotas PGP/MIME laiðkas! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Klaida: negalëjau sukurti laikinos bylos! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- Toliau einantys duomenys yra uþðifruoti su PGP/MIME --]\n"
+"\n"
+
+#: pgp.c:863
+#, fuzzy
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr ""
+"\n"
+"[-- PGP/MIME uþðifruotø duomenø pabaiga --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "Negaliu atidaryti PGP vaikinio proceso!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "Naudoti rakto ID = \"%s\", skirtà %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "Ávesk rakto ID, skirtà %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "Negaliu kviesti PGP"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "Paimu PGP raktà..."
+
+#: pgpkey.c:486
+#, fuzzy
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "Ðis raktas negali bûti naudojamas: jis pasenæs/uþdraustas/atðauktas."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Pasirink  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Tikrinti raktà  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "PGP raktai, tenkinantys <%s>."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "PGP raktai, tenkinantys \"%s\"."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "Negaliu atidaryti /dev/null"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Negaliu sukurti laikinos bylos"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "Rakto ID: ox%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "Ðis raktas negali bûti naudojamas: jis pasenæs/uþdraustas/atðauktas."
+
+#: pgpkey.c:608
+#, fuzzy
+msgid "ID is expired/disabled/revoked."
+msgstr "Ðis raktas negali bûti naudojamas: jis pasenæs/uþdraustas/atðauktas."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr ""
+
+#: pgpkey.c:615
+#, fuzzy
+msgid "ID is not valid."
+msgstr "Ðis ID yra nepatikimas."
+
+#: pgpkey.c:618
+#, fuzzy
+msgid "ID is only marginally valid."
+msgstr "Ðis ID yra tik vos vos patikimas."
+
+#: pgpkey.c:622
+#, fuzzy, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s Ar tikrai nori já naudoti?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Praðau, ávesk rakto ID:"
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "Kvieèiu pgp..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "PGP raktas %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Ieðkau raktø, tenkinanèiø \"%s\"..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "Serveris nepalaiko komandos TOP."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "Negaliu áraðyti antraðtës á laikinà bylà!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "Serveris nepalaiko komandos UIDL."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr ""
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "Paimu laiðkø sàraðà..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "Negaliu áraðyti laiðko á laikinà bylà!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "Tikrinu, ar yra naujø laiðkø..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "POP hostas nenurodytas."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "Nëra naujø laiðkø POP dëþutëje."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "Iðtrinti laiðkus ið serverio?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Skaitau naujus laiðkus (%d baitø)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "Klaida raðant á paðto dëþutæ!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d ið %d laiðkø perskaityti]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "Serveris uþdarë jungtá!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Autentikuojuosi (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Autentikuojuosi (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "APOP autentikacija nepavyko."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "Serveris nepalaiko komandos USER."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "Negaliu palikti laiðkø serveryje."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "Klaida jungiantis prie IMAP serverio: %s"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "Uþdarau jungtá su POP serveriu..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Tikrinu laiðkø indeksus..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Jungtis prarasta. Vël prisijungti prie POP serverio?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Atidëti laiðkai"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "Nëra atidëtø laiðkø."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "Neleistina PGP antraðtë"
+
+#: postpone.c:479
+#, fuzzy
+msgid "Illegal S/MIME header"
+msgstr "Neleistina PGP antraðtë"
+
+#: postpone.c:554
+#, fuzzy
+msgid "Decryption failed."
+msgstr "Nepavyko pasisveikinti."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Nauja uþklausa"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Padaryti aliasà"
+
+#: query.c:48
+msgid "Search"
+msgstr "Ieðkoti"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Laukiu atsakymo..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Uþklausos komanda nenurodyta."
+
+#: query.c:286
+msgid "Query"
+msgstr "Uþklausa"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Uþklausa: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Uþklausa '%s''"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Pipe"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Spausdinti"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Iðsaugau..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Priedas iðsaugotas."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "DËMESIO!  Tu þadi uþraðyti ant seno %s, tæsti"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Priedas perfiltruotas."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Filtruoti per: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Pipe á: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "Að neþinau kaip spausdinti %s priedus!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Spausdinti paþymëtus priedus?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Spausdinti priedà?"
+
+#: recvattach.c:938
+#, fuzzy
+msgid "Can't decrypt encrypted message!"
+msgstr "Negaliu rasti në vieno paþymëto laiðko."
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Priedai"
+
+#: recvattach.c:987
+#, fuzzy
+msgid "There are no subparts to show!"
+msgstr "Nëra jokiø priedø."
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "Negaliu iðtrinti priedo ið POP serverio."
+
+#: recvattach.c:1056
+#, fuzzy
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "PGP laiðkø priedø iðtrynimas nepalaikomas."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Palaikomas trynimas tik ið keleto daliø priedø."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Tu gali nukreipti tik message/rfc822 priedus."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing message!"
+msgstr "Klaida siunèiant laiðkà."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing messages!"
+msgstr "Klaida siunèiant laiðkà."
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Negaliu atidaryti laikinos bylos %s."
+
+#: recvcmd.c:444
+#, fuzzy
+msgid "Forward as attachments?"
+msgstr "rodyti MIME priedus"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr "Negaliu dekoduoti visø paþymëtø priedø.  Persiøsti kitus MIME formatu?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Persiøsti MIME enkapsuliuotà?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "Negaliu sukurti %s."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Negaliu rasti në vieno paþymëto laiðko."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "Nerasta jokia konferencija!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+"Negaliu dekoduoti visø paþymëtø priedø.  Enkapsuliuoti kitus MIME formatu?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Pridurti"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Áterpti"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Trinti"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "Gerai"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "Negaliu gauti mixmaster'io type2.list!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Pasirink persiuntëjø grandinæ."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr ""
+"Klaida: %s negali bûti naudojamas kaip galutinis persiuntëjas grandinëje."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Mixmaster'io grandinës turi bûti ne ilgesnës nei %d elementø."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "Persiuntëjø grandinë jau tuðèia."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "Tu jau pasirinkai pirmà grandinës elementà."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "Tu jau pasirinkai paskutiná grandinës elementà."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Mixmaster'is nepriima Cc bei Bcc antraðèiø."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr "Teisingai nustatyk hostname kintamàjá, kai naudoji mixmaster'á!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Klaida siunèiant laiðkà, klaidos kodas %d.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Klaida siunèiant laiðkà."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "Blogai suformuotas tipo %s áraðas \"%s\" %d eilutëje"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Nenurodytas mailcap kelias!"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "mailcap áraðas tipui %s nerastas"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: per maþai argumentø"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: per daug argumentø"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Nëra temos, nutraukti?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Nëra temos, nutraukiu."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Atsakyti %s%s?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "Pratæsti-á %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "Në vienas paþymëtas laiðkas nëra matomas!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Átraukti laiðkà á atsakymà?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Átraukiu cituojamà laiðkà..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "Negalëjau átraukti visø praðytø laiðkø!"
+
+#: send.c:762
+#, fuzzy
+msgid "Forward as attachment?"
+msgstr "Spausdinti priedà?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Paruoðiu persiunèiamà laiðkà..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Tæsti atidëtà laiðkà?"
+
+#: send.c:1336
+#, fuzzy
+msgid "Edit forwarded message?"
+msgstr "Paruoðiu persiunèiamà laiðkà..."
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Nutraukti nepakeistà laiðkà?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Nutrauktas nepakeistas laiðkas."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "Laiðkas neiðsiøstas."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Laiðkas atidëtas."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Nenurodyti jokie gavëjai!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Nebuvo nurodyti jokie gavëjai."
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Nëra temos, nutraukti siuntimà?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Nenurodyta jokia tema."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Siunèiu laiðkà..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Negalëjau iðsiøsti laiðko."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Laiðkas iðsiøstas."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Siunèiu fone."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "Trûksta boundary parametro! [praneðk ðià klaidà]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s nebeegzistuoja!"
+
+#: sendlib.c:916
+#, fuzzy, c-format
+msgid "%s isn't a regular file."
+msgstr "%s nëra paðto dëþutë."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "Negalëjau atidaryti %s"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Klaida siunèiant laiðkà, klaidos kodas %d (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Pristatymo proceso iðvestis"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr ""
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s...  Iðeinu.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "Sugavau %s...  Iðeinu.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Sugavau signalà %d...  Iðeinu.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr ""
+
+#: smime.c:303
+msgid "Verified  "
+msgstr ""
+
+#: smime.c:306
+msgid "Unverified"
+msgstr ""
+
+#: smime.c:309
+#, fuzzy
+msgid "Expired   "
+msgstr "Iðeiti  "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr ""
+
+#: smime.c:315
+#, fuzzy
+msgid "Invalid   "
+msgstr "Blogas mënuo: %s"
+
+#: smime.c:318
+#, fuzzy
+msgid "Unknown   "
+msgstr "Neþinoma"
+
+#: smime.c:347
+#, fuzzy
+msgid "Enter keyID: "
+msgstr "Ávesk rakto ID, skirtà %s: "
+
+#: smime.c:370
+#, fuzzy, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "PGP raktai, tenkinantys \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr ""
+
+#: smime.c:523 smime.c:592
+#, fuzzy, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "Naudoti rakto ID = \"%s\", skirtà %s?"
+
+#: smime.c:526 smime.c:595
+#, fuzzy, c-format
+msgid "Use ID %s for %s ?"
+msgstr "Naudoti rakto ID = \"%s\", skirtà %s?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr ""
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+#, fuzzy
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "[-- Klaida: negaliu sukurti PGP subproceso! --]\n"
+
+#: smime.c:1197
+#, fuzzy
+msgid "no certfile"
+msgstr "Negaliu sukurti filtro"
+
+#: smime.c:1200
+#, fuzzy
+msgid "no mbox"
+msgstr "(nëra dëþutës)"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr ""
+
+#: smime.c:1381
+#, fuzzy
+msgid "Warning: Intermediate certificate not found."
+msgstr "Áspëju: Negalëjau iðsaugoti sertifikato"
+
+#: smime.c:1426
+#, fuzzy
+msgid "Can't open OpenSSL subprocess!"
+msgstr "Negaliu atidaryti PGP vaikinio proceso!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr ""
+
+#: smime.c:1629 smime.c:1751
+#, fuzzy
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- PGP iðvesties pabaiga --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+#, fuzzy
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Klaida: negaliu sukurti PGP subproceso! --]\n"
+
+#: smime.c:1755
+#, fuzzy
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr ""
+"[-- Toliau einantys duomenys yra uþðifruoti su PGP/MIME --]\n"
+"\n"
+
+#: smime.c:1758
+#, fuzzy
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr ""
+"[-- Toliau einantys duomenys yra pasiraðyti --]\n"
+"\n"
+
+#: smime.c:1822
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- PGP/MIME uþðifruotø duomenø pabaiga --]\n"
+
+#: smime.c:1824
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- Pasiraðytø duomenø pabaiga --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Rikiuoju dëþutæ..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "Negalëjau rasti rikiavimo funkcijos! [praneðk ðià klaidà]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(nëra dëþutës)"
+
+#: thread.c:1081
+#, fuzzy
+msgid "Parent message is not visible in this limited view."
+msgstr "Tëvinis laiðkas nematomas ribotame vaizde"
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "Nëra prieinamo tëvinio laiðko."
+
+#, fuzzy
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "Kvieèiu pgp..."
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "Nukreipti laiðkà á %s...?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "Nukreipti laiðkus á %s...?"
+
+#, fuzzy
+#~ msgid "ewsabf"
+#~ msgstr "usabmp"
+
+#, fuzzy
+#~ msgid "Certificate *NOT* added."
+#~ msgstr "Sertifikatas iðsaugotas"
+
+#, fuzzy
+#~ msgid "This ID's validity level is undefined."
+#~ msgstr "Ðio ID pasitikëjimo lygis nenurodytas."
+
+#~ msgid "Decode-save"
+#~ msgstr "Dekoduoti-iðsaugoti"
+
+#~ msgid "Decode-copy"
+#~ msgstr "Dekoduoti-kopijuoti"
+
+#~ msgid "Decrypt-save"
+#~ msgstr "Iððifruoti-iðsaugoti"
+
+#~ msgid "Decrypt-copy"
+#~ msgstr "Iððifruoti-kopijuoti"
+
+#~ msgid "Copy"
+#~ msgstr "Kopijuoti"
+
+#~ msgid "%s [%s]\n"
+#~ msgstr "%s [%s]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "[-- End of PGP output --]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "[-- PGP iðvesties pabaiga --]\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "Can't stat %s."
+#~ msgstr "Negalëjau stat'inti: %s"
+
+#~ msgid "%s: no such command"
+#~ msgstr "%s: nëra tokios komandos"
+
+#~ msgid "Authentication method is unknown."
+#~ msgstr "Autentikacijos metodas neþinomas."
+
+#~ msgid "MIC algorithm: "
+#~ msgstr "MIC algoritmas: "
+
+#~ msgid "This doesn't make sense if you don't want to sign the message."
+#~ msgstr "Tai neturi jokios prasmës, jei tu nenori pasiraðyti laiðko."
+
+#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160"
+#~ msgstr "Neþinomas MIC algoritmas, galimi yra: pgp-md5, pgp-sha1, pgp-rmd160"
diff --git a/po/mutt.pot b/po/mutt.pot
new file mode 100644 (file)
index 0000000..f1da0c3
--- /dev/null
@@ -0,0 +1,4012 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr ""
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr ""
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr ""
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr ""
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr ""
+
+#: addrbook.c:36
+msgid "Select"
+msgstr ""
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr ""
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr ""
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr ""
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr ""
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr ""
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr ""
+
+#: alias.c:279
+msgid "Address: "
+msgstr ""
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr ""
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr ""
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr ""
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr ""
+
+#: alias.c:342
+msgid "Alias added."
+msgstr ""
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr ""
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr ""
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr ""
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr ""
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr ""
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr ""
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr ""
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr ""
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr ""
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr ""
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr ""
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr ""
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr ""
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr ""
+
+#: browser.c:41
+msgid "Chdir"
+msgstr ""
+
+#: browser.c:42
+msgid "Mask"
+msgstr ""
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr ""
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr ""
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr ""
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr ""
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr ""
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr ""
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr ""
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr ""
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr ""
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr ""
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr ""
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr ""
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr ""
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr ""
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr ""
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr ""
+
+#: browser.c:1049
+msgid "dazn"
+msgstr ""
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr ""
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr ""
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr ""
+
+#: buffy.c:442
+msgid "New mail in "
+msgstr ""
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr ""
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr ""
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr ""
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr ""
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr ""
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr ""
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr ""
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr ""
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr ""
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr ""
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr ""
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr ""
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr ""
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr ""
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr ""
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr ""
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr ""
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr ""
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr ""
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr ""
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr ""
+
+#: commands.c:223
+msgid "Command: "
+msgstr ""
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr ""
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr ""
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr ""
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr ""
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr ""
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr ""
+
+#: commands.c:294 recvcmd.c:192
+msgid "Message not bounced."
+msgstr ""
+
+#: commands.c:294 recvcmd.c:192
+msgid "Messages not bounced."
+msgstr ""
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr ""
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr ""
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr ""
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr ""
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr ""
+
+#: commands.c:483
+msgid "Print message?"
+msgstr ""
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr ""
+
+#: commands.c:492
+msgid "Message printed"
+msgstr ""
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr ""
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr ""
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr ""
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr ""
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr ""
+
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr ""
+
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr ""
+
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr ""
+
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr ""
+
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr ""
+
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr ""
+
+#: commands.c:706
+msgid " tagged"
+msgstr ""
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr ""
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr ""
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr ""
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr ""
+
+#: commands.c:914
+msgid "not converting"
+msgstr ""
+
+#: commands.c:914
+msgid "converting"
+msgstr ""
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr ""
+
+#: compose.c:84
+msgid "Send"
+msgstr ""
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr ""
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr ""
+
+#: compose.c:90
+msgid "Descrip"
+msgstr ""
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr ""
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr ""
+
+#: compose.c:131
+msgid "Sign"
+msgstr ""
+
+#: compose.c:133
+msgid "Clear"
+msgstr ""
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr ""
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr ""
+
+#: compose.c:149
+msgid "Encrypt with: "
+msgstr ""
+
+#: compose.c:165
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+
+#: compose.c:166
+msgid "esabf"
+msgstr ""
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr ""
+
+#: compose.c:227
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+
+#: compose.c:228
+msgid "eswabf"
+msgstr ""
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+
+#: compose.c:238
+msgid "12345f"
+msgstr ""
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr ""
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr ""
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr ""
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr ""
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr ""
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr ""
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr ""
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr ""
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr ""
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr ""
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr ""
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr ""
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr ""
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr ""
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr ""
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr ""
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr ""
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr ""
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr ""
+
+#: compose.c:1141
+msgid "New file: "
+msgstr ""
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr ""
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr ""
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr ""
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr ""
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr ""
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr ""
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr ""
+
+#: compose.c:1305
+msgid "Message written."
+msgstr ""
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr ""
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr ""
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr ""
+
+#: crypt.c:71
+#, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr ""
+
+#: crypt.c:86
+msgid "Passphrase(s) forgotten."
+msgstr ""
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr ""
+
+#: crypt.c:147
+msgid "Enter SMIME passphrase:"
+msgstr ""
+
+#: crypt.c:192
+msgid "Create a traditional (inline) PGP message?"
+msgstr ""
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr ""
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr ""
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr ""
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr ""
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+
+#. Now display the signed body
+#: crypt.c:912
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+
+#: crypt.c:924
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr ""
+
+#: curs_lib.c:158
+msgid "no"
+msgstr ""
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr ""
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr ""
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr ""
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr ""
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr ""
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr ""
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr ""
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr ""
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr ""
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr ""
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr ""
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr ""
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr ""
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr ""
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr ""
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr ""
+
+#: curs_main.c:403
+msgid "Group"
+msgstr ""
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr ""
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr ""
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr ""
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr ""
+
+#: curs_main.c:653 menu.c:896
+msgid "Nothing to do."
+msgstr ""
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr ""
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr ""
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr ""
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr ""
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr ""
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr ""
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr ""
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr ""
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr ""
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr ""
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr ""
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr ""
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr ""
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr ""
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr ""
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr ""
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr ""
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr ""
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr ""
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr ""
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr ""
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr ""
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr ""
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr ""
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr ""
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr ""
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr ""
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr ""
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr ""
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr ""
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr ""
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr ""
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr ""
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr ""
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr ""
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr ""
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr ""
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr ""
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr ""
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr ""
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr ""
+
+#: editmsg.c:101
+#, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr ""
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr ""
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr ""
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr ""
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr ""
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr ""
+
+#: flags.c:332
+msgid "Set flag"
+msgstr ""
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr ""
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr ""
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr ""
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr ""
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr ""
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr ""
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr ""
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr ""
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr ""
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr ""
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr ""
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr ""
+
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr ""
+
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr ""
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr ""
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr ""
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr ""
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr ""
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr ""
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr ""
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr ""
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr ""
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr ""
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr ""
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr ""
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr ""
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr ""
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr ""
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr ""
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr ""
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr ""
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr ""
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr ""
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr ""
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr ""
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr ""
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr ""
+
+#: imap/auth_sasl.c:112
+#, c-format
+msgid "Authenticating (%s)..."
+msgstr ""
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr ""
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr ""
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr ""
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr ""
+
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr ""
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr ""
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr ""
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr ""
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr ""
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr ""
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr ""
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr ""
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr ""
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr ""
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr ""
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr ""
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr ""
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr ""
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr ""
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr ""
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr ""
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr ""
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr ""
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr ""
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr ""
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr ""
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr ""
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr ""
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr ""
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr ""
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr ""
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr ""
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr ""
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr ""
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr ""
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr ""
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr ""
+
+#: init.c:611
+msgid "alias: no address"
+msgstr ""
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr ""
+
+#: init.c:714
+msgid "invalid header field"
+msgstr ""
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr ""
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr ""
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr ""
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr ""
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr ""
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr ""
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr ""
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr ""
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr ""
+
+#: init.c:1312
+#, c-format
+msgid "%s: Unknown type."
+msgstr ""
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr ""
+
+#: init.c:1375
+#, c-format
+msgid "%s: stat: %s"
+msgstr ""
+
+#: init.c:1380
+#, c-format
+msgid "%s: not a regular file"
+msgstr ""
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr ""
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr ""
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr ""
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr ""
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr ""
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr ""
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr ""
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr ""
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr ""
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr ""
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr ""
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr ""
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr ""
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr ""
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr ""
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr ""
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr ""
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr ""
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr ""
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr ""
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr ""
+
+#: keymap.c:912
+msgid "Enter keys (^G to abort): "
+msgstr ""
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr ""
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr ""
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr ""
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr ""
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr ""
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr ""
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr ""
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr ""
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr ""
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr ""
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr ""
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr ""
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr ""
+
+#: keymap_alldefs.h:18
+msgid "list mailboxes with new mail"
+msgstr ""
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr ""
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr ""
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr ""
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr ""
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr ""
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr ""
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr ""
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr ""
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr ""
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr ""
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr ""
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr ""
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr ""
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr ""
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr ""
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr ""
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr ""
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr ""
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr ""
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr ""
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr ""
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr ""
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr ""
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr ""
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr ""
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr ""
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr ""
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr ""
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr ""
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr ""
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr ""
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr ""
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr ""
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr ""
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr ""
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr ""
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr ""
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr ""
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr ""
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr ""
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr ""
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr ""
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr ""
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr ""
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr ""
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr ""
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr ""
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr ""
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr ""
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr ""
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr ""
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr ""
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr ""
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr ""
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr ""
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr ""
+
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr ""
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr ""
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr ""
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr ""
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr ""
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr ""
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr ""
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr ""
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr ""
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr ""
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr ""
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr ""
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr ""
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr ""
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr ""
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr ""
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr ""
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr ""
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr ""
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr ""
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr ""
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr ""
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr ""
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr ""
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr ""
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr ""
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr ""
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr ""
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr ""
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr ""
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr ""
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr ""
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr ""
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr ""
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr ""
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr ""
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr ""
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr ""
+
+#: keymap_alldefs.h:113
+msgid "jump to the next new or unread message"
+msgstr ""
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr ""
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr ""
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr ""
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr ""
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr ""
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr ""
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr ""
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr ""
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr ""
+
+#: keymap_alldefs.h:123
+msgid "jump to the previous new or unread message"
+msgstr ""
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr ""
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr ""
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr ""
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr ""
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr ""
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr ""
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr ""
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr ""
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr ""
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr ""
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr ""
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr ""
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr ""
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr ""
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr ""
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr ""
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr ""
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr ""
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr ""
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr ""
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr ""
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr ""
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr ""
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr ""
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr ""
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr ""
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr ""
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr ""
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr ""
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr ""
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr ""
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr ""
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr ""
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr ""
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr ""
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr ""
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr ""
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr ""
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr ""
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr ""
+
+#: keymap_alldefs.h:164
+msgid "apply next function ONLY to tagged messages"
+msgstr ""
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr ""
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr ""
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr ""
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr ""
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr ""
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr ""
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr ""
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr ""
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr ""
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr ""
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr ""
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr ""
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr ""
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr ""
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr ""
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr ""
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr ""
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr ""
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr ""
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr ""
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr ""
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr ""
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr ""
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr ""
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr ""
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr ""
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr ""
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr ""
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr ""
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr ""
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr ""
+
+#: keymap_alldefs.h:196
+msgid "wipe passphrase(s) from memory"
+msgstr ""
+
+#: keymap_alldefs.h:197
+msgid "extract supported public keys"
+msgstr ""
+
+#: keymap_alldefs.h:198
+msgid "show S/MIME options"
+msgstr ""
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr ""
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+
+#: main.c:50
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+
+#: main.c:56
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+
+#: main.c:94
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr ""
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr ""
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr ""
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr ""
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr ""
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr ""
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr ""
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr ""
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr ""
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr ""
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr ""
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr ""
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr ""
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr ""
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr ""
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr ""
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr ""
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr ""
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr ""
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr ""
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr ""
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr ""
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr ""
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr ""
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr ""
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr ""
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr ""
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr ""
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr ""
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr ""
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr ""
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr ""
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr ""
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr ""
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr ""
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr ""
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr ""
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr ""
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr ""
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr ""
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr ""
+
+#: muttlib.c:835
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr ""
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr ""
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr ""
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr ""
+
+#: muttlib.c:869
+msgid "oac"
+msgstr ""
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr ""
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr ""
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr ""
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr ""
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr ""
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr ""
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr ""
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr ""
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr ""
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr ""
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr ""
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr ""
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr ""
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr ""
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr ""
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr ""
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr ""
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr ""
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr ""
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr ""
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr ""
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr ""
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr ""
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr ""
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr ""
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr ""
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr ""
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr ""
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr ""
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr ""
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr ""
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr ""
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr ""
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr ""
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr ""
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr ""
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr ""
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr ""
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr ""
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr ""
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr ""
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr ""
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr ""
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr ""
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr ""
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr ""
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr ""
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr ""
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr ""
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr ""
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr ""
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr ""
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr ""
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr ""
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr ""
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr ""
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr ""
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr ""
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr ""
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr ""
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr ""
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr ""
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr ""
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr ""
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr ""
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr ""
+
+#: pager.c:1454
+msgid "Next"
+msgstr ""
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr ""
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr ""
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr ""
+
+#: pager.c:1955
+msgid "Search: "
+msgstr ""
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr ""
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr ""
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr ""
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr ""
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr ""
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr ""
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr ""
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr ""
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr ""
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr ""
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr ""
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr ""
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr ""
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr ""
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr ""
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr ""
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr ""
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr ""
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr ""
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr ""
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr ""
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr ""
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr ""
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr ""
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr ""
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr ""
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr ""
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr ""
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+
+#: pgp.c:662
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr ""
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr ""
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr ""
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr ""
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr ""
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr ""
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr ""
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr ""
+
+#: pgpkey.c:486
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr ""
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr ""
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr ""
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr ""
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr ""
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr ""
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr ""
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr ""
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr ""
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr ""
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr ""
+
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr ""
+
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr ""
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr ""
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr ""
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr ""
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr ""
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr ""
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr ""
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr ""
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr ""
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr ""
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr ""
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr ""
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr ""
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr ""
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr ""
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr ""
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr ""
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr ""
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr ""
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr ""
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr ""
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr ""
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr ""
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr ""
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr ""
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr ""
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr ""
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr ""
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr ""
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr ""
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr ""
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr ""
+
+#: postpone.c:479
+msgid "Illegal S/MIME header"
+msgstr ""
+
+#: postpone.c:554
+msgid "Decryption failed."
+msgstr ""
+
+#: query.c:46
+msgid "New Query"
+msgstr ""
+
+#: query.c:47
+msgid "Make Alias"
+msgstr ""
+
+#: query.c:48
+msgid "Search"
+msgstr ""
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr ""
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr ""
+
+#: query.c:286
+msgid "Query"
+msgstr ""
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr ""
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr ""
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr ""
+
+#: recvattach.c:53
+msgid "Print"
+msgstr ""
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr ""
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr ""
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr ""
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr ""
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr ""
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr ""
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr ""
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr ""
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr ""
+
+#: recvattach.c:938
+msgid "Can't decrypt encrypted message!"
+msgstr ""
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr ""
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr ""
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr ""
+
+#: recvattach.c:1056
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr ""
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr ""
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr ""
+
+#: recvcmd.c:213
+msgid "Error bouncing message!"
+msgstr ""
+
+#: recvcmd.c:213
+msgid "Error bouncing messages!"
+msgstr ""
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr ""
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr ""
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr ""
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr ""
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr ""
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr ""
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+
+#: remailer.c:480
+msgid "Append"
+msgstr ""
+
+#: remailer.c:481
+msgid "Insert"
+msgstr ""
+
+#: remailer.c:482
+msgid "Delete"
+msgstr ""
+
+#: remailer.c:484
+msgid "OK"
+msgstr ""
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr ""
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr ""
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr ""
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr ""
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr ""
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr ""
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr ""
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr ""
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr ""
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr ""
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr ""
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr ""
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr ""
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr ""
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr ""
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr ""
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr ""
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr ""
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr ""
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr ""
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr ""
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr ""
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr ""
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr ""
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr ""
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr ""
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr ""
+
+#: send.c:1336
+msgid "Edit forwarded message?"
+msgstr ""
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr ""
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr ""
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr ""
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr ""
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr ""
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr ""
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr ""
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr ""
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr ""
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr ""
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr ""
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr ""
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr ""
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr ""
+
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr ""
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr ""
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr ""
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr ""
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr ""
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr ""
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr ""
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr ""
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr ""
+
+#: smime.c:303
+msgid "Verified  "
+msgstr ""
+
+#: smime.c:306
+msgid "Unverified"
+msgstr ""
+
+#: smime.c:309
+msgid "Expired   "
+msgstr ""
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr ""
+
+#: smime.c:315
+msgid "Invalid   "
+msgstr ""
+
+#: smime.c:318
+msgid "Unknown   "
+msgstr ""
+
+#: smime.c:347
+msgid "Enter keyID: "
+msgstr ""
+
+#: smime.c:370
+#, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr ""
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr ""
+
+#: smime.c:523 smime.c:592
+#, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr ""
+
+#: smime.c:526 smime.c:595
+#, c-format
+msgid "Use ID %s for %s ?"
+msgstr ""
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr ""
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr ""
+
+#: smime.c:1197
+msgid "no certfile"
+msgstr ""
+
+#: smime.c:1200
+msgid "no mbox"
+msgstr ""
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr ""
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr ""
+
+#: smime.c:1426
+msgid "Can't open OpenSSL subprocess!"
+msgstr ""
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr ""
+
+#: smime.c:1629 smime.c:1751
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+
+#: smime.c:1712 smime.c:1722
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr ""
+
+#: smime.c:1755
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr ""
+
+#: smime.c:1758
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr ""
+
+#: smime.c:1822
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+
+#: smime.c:1824
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr ""
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr ""
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr ""
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr ""
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr ""
diff --git a/po/nl.gmo b/po/nl.gmo
new file mode 100644 (file)
index 0000000..90c1495
Binary files /dev/null and b/po/nl.gmo differ
diff --git a/po/nl.po b/po/nl.po
new file mode 100644 (file)
index 0000000..654084e
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,4359 @@
+# $Id: nl.po,v 3.15 2003/11/12 14:01:03 roessler Exp $
+msgid ""
+msgstr ""
+"Project-Id-Version: Mutt 1.5.5.1\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2003-11-06\n"
+"Last-Translator: René Clerc <rene@clerc.nl>\n"
+"Language-Team: mutt-dev <mutt-dev@mutt.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "Gebruikersnaam voor %s: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "Wachtwoord voor %s@%s: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Afsluiten"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Wis"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Herstel"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Selecteren"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Hulp"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "Geen afkortingen opgegeven!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Afkortingen"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Afkorten als: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "U heeft al een afkorting onder die naam!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr "Waarschuwing: Deze afkorting kan niet werken.  Verbeteren?"
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Adres: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr "Fout: '%s' is een ongeldige IDN."
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Naam: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] Accepteren?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Opslaan als: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Adres toegevoegd."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Naamsjabloon kan niet worden ingevuld, doorgaan?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "\"compose\"-entry in mailcap vereist %%s."
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "Fout opgetreden bij het uitvoeren van \"%s\"!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Kan bestand niet openen om header te lezen."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Kan bestand niet openen om header te verwijderen."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "Geen \"compose\"-entry voor %s, een leeg bestand wordt aangemaakt."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "\"edit\"-entry in mailcap vereist %%s."
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "Geen \"edit\"-entry voor %s in mailcap."
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "Geen geschikte mailcap-entry gevonden.  Weergave als normale tekst."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "MIME type is niet gedefinieerd. Kan bijlage niet weergeven."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Filter kan niet worden aangemaakt."
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Kan filter niet aanmaken"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "Fout bij schrijven!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Ik weet niet hoe dit afgedrukt moet worden!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Wijzig directory"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Masker"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s is geen directory."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Mailfolders [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Geselecteerd [%s], Bestandsmasker: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Directory [%s], Bestandsmasker: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Directory kan niet worden getoond!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Geen bestanden waarop het masker past gevonden."
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Alleen IMAP folders kunnen aangemaakt worden"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Alleen IMAP folders kunnen verwijderd worden"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Mailfolder \"%s\" echt verwijderen?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "Mailfolder is verwijderd."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "Mailfolder is niet verwijderd."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Wisselen naar directory: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Fout opgetreden tijdens het analyseren van de directory."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Bestandsmasker: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr ""
+"Achteruit sorteren op (d)atum, bestands(g)rootte, (a)lfabet of (n)iet? "
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Sorteren op (d)atum, bestands(g)rootte, (a)lfabet of helemaal (n)iet?"
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "dagn"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Nieuwe bestandsnaam: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Directory kan niet worden getoond."
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Fout opgetreden tijdens het weergeven van bestand"
+
+#: buffy.c:442
+msgid "New mail in "
+msgstr "Nieuw bericht in "
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: Terminal ondersteunt geen kleur"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: onbekende kleur"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: Object onbekend"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: Commando alleen geldig voor index-objecten"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: Te weinig argumenten"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Argumenten afwezig."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: Te weinig argumenten."
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: Te weinig argumenten."
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: Attribuut onbekend"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "Te weinig argumenten"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "Te veel argumenten"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "standaard kleuren niet ondersteund"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "PGP-handtekening controleren?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Tijdelijk bestand kon niet worden aangelegd!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Display filter kan niet worden aangemaakt."
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "Bericht kon niet gekopiëerd worden."
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr "S/MIME handtekening is correct bevonden."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr "S/MIME certificaat eigenaar komt niet overeen met afzender."
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr "S/MIME handtekening kon NIET worden geverifiëerd."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "PGP handtekening is correct bevonden."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "PGP handtekening kon NIET worden geverifiëerd."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Commando: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Bericht doorsturen naar: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Gemarkeerde berichten doorsturen naar: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "Ongeldig adres!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr "Ongeldig IDN: '%s'"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Bericht doorsturen aan %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Berichten doorsturen aan %s"
+
+#: commands.c:294 recvcmd.c:192
+msgid "Message not bounced."
+msgstr "Bericht niet doorgestuurd."
+
+#: commands.c:294 recvcmd.c:192
+msgid "Messages not bounced."
+msgstr "Berichten niet doorgestuurd."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Bericht doorgestuurd."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Berichten doorgestuurd."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "Kan filter proces niet aanmaken"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Doorsluizen naar commando: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "Er is geen print commando gedefiniëerd."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "Bericht afdrukken?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Geselecteerde berichten uitprinten?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "Bericht afgedrukt"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Berichten afgedrukt"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "Bericht kon niet worden afgedrukt"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "Berichten konden niet worden afgedrukt"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Omgekeerd (d)atum/(v)an/o(n)tv/(o)nd/(a)an/(t)hread/(u)nsort/(g)rootte/(s)"
+"core?: "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Sorteren (d)atum/(v)an/o(n)tv/(o)nd/(a)an/(t)hread/(u)nsort/(g)rootte/(s)"
+"core?: "
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dvnoatugs"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Shell commando: "
+
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "Decoderen-opslaan%s in mailfolder"
+
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "Decoderen-kopiëren%s naar mailfolder"
+
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "Ontsleutelen-opslaan%s in mailfolder"
+
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "Ontsleutelen-kopiëren%s naar mailfolder"
+
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "Opslaan%s in mailfolder"
+
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "Kopiëren%s naar mailfolder"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " gemarkeerd"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Kopieren naar %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "Converteren naar %s bij versturen?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Content-Type veranderd naar %s."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "Karakterset veranderd naar %s; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "niet converteren"
+
+#: commands.c:914
+msgid "converting"
+msgstr "converteren"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Bericht bevat geen bijlage."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Versturen"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Afbreken"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Bijvoegen"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Omschrijving"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Ondertekenen, Versleutelen"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Versleutelen"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Ondertekenen"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Geen"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " ondertekenen als: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<standaard>"
+
+#: compose.c:149
+msgid "Encrypt with: "
+msgstr "Versleutelen met: "
+
+#: compose.c:165
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "PGP (v)ersleutel, (o)ndertekenen, ondert. (a)ls, (b)eiden, (g)een? "
+
+#: compose.c:166
+msgid "esabf"
+msgstr "voabg"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Ondertekenen als: "
+
+#: compose.c:227
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"S/MIME (v)ersleutel, (o)ndert, ondert (a)ls, (b)eiden, (m)ic selecteren, (g)"
+"een? "
+
+#: compose.c:228
+msgid "eswabf"
+msgstr "vomabg"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr "1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, of (g)een? "
+
+#: compose.c:238
+msgid "12345f"
+msgstr "12345g"
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] bestaat niet meer!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] werd veranderd. Codering aanpassen?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Bijlagen"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr "Waarschuwing: '%s' is een ongeldige IDN."
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Een bericht bestaat uit minimaal één gedeelte."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr "Ongeldige IDN in \"%s\": '%s'"
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "Opgegeven bestanden worden bijgevoegd..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "Kan %s niet bijvoegen!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Open mailfolder waaruit een bericht als bijlage toegevoegd wordt"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "Geen berichten in deze mailfolder."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Selecteer de berichten die u wilt bijvoegen!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Kan niet bijvoegen!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "Codering wijzigen is alleen van toepassing op bijlagen."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "Deze bijlage zal niet geconverteerd worden."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "Deze bijlage zal geconverteerd worden."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Ongeldige codering."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Een kopie van dit bericht maken?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Hernoemen naar: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "Kan %s niet statten: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Nieuw bestand: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Content-Type is van de vorm basis/subtype"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Onbekend Content-Type %s"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Kan bestand %s niet aanmaken"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "Het lukt niet helemaal met dat toevoegen. Het blijft moeilijk.."
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Bericht uitstellen?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Sla bericht op in mailfolder"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Bericht wordt opgeslagen in %s ..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "Bericht opgeslagen."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr "S/MIME al geselecteerd. Wissen & doorgaan ? "
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr "PGP al geselecteerd. Wissen & doorgaan ? "
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr " (huidige tijd: %c)"
+
+#: crypt.c:71
+#, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- %s uitvoer volgt%s --]\n"
+
+#: crypt.c:86
+msgid "Passphrase(s) forgotten."
+msgstr "Wachtwoord(en) zijn vergeten."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Geef PGP-wachtwoord in:"
+
+#: crypt.c:147
+msgid "Enter SMIME passphrase:"
+msgstr "Geef S/MIME-wachtwoord in:"
+
+#: crypt.c:192
+msgid "Create a traditional (inline) PGP message?"
+msgstr "Een traditioneel PGP bericht aanmaken?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "PGP wordt aangeroepen..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr ""
+"S/MIME berichten zonder aanwijzingen over inhoud zijn niet ondersteund."
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr "PGP sleutels onttrekken...\n"
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr "S/MIME certificaten onttrekken...\n"
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- Fout: Gebroken multipart/signed structuur! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- Fout: Onbekend multipart/signed protocol: %s! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Waarschuwing: %s/%s handtekeningen kunnen niet gecontroleerd worden --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- De volgende gegevens zijn ondertekend --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Waarschuwing: kan geen enkele handtekening vinden --]\n"
+"\n"
+
+#: crypt.c:924
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Einde van ondertekende gegevens --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "ja"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "nee"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Mutt afsluiten?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "onbekende fout"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Druk een willekeurige toets in..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " ('?' voor een overzicht): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Er is geen mailfolder geopend."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Er zijn geen berichten."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "Mailfolder is schrijfbeveiligd."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "Funktie wordt niet ondersteund in deze modus"
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "Geen zichtbare berichten"
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "Kan niet schrijven in een scrijfbeveiligde mailfolder!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr ""
+"Wijzigingen zullen worden weggeschreven bij het verlaten van de mailfolder."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Wijzigingen worden niet weggeschreven."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Einde"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Opslaan"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Sturen"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Antw."
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Groep"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "Mailfolder is extern veranderd. Markeringen kunnen onjuist zijn."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Nieuwe berichten in deze mailfolder."
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "Mailfolder is extern veranderd."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Geen gemarkeerde berichten."
+
+#: curs_main.c:653 menu.c:896
+msgid "Nothing to do."
+msgstr "Niets te doen."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Ga naar bericht: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "Argument moet een berichtennummer zijn."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Dit bericht is niet zichtbaar."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Ongeldig berichtennummer"
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Wis berichten volgens patroon: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "Er is geen beperkend patroon in werking."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Limiet: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Limiteer berichten volgens patroon: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Mutt afsluiten?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Berichten markeren volgens patroon: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Herstel berichten: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Verwijder markering volgens patroon: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Open mailfolder in schrijfbeveiligde modus"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Open mailfolder"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s is geen mailfolder."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Mutt verlaten zonder op te slaan?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "U bent bij het laatste bericht."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Alle berichten zijn gewist."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "U bent bij het eerste bericht."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "Zoekopdracht bovenaan begonnen."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "Zoekopdracht onderaan begonnen."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Geen nieuwe berichten"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Geen ongelezen berichten"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " in deze beperkte weergave."
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "Kan markering 'belangrijk' op POP server niet veranderen."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Geen verdere threads."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "U bent al bij de eerste thread."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "Het weergeven van threads is niet ingeschakeld."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "Thread bevat ongelezen berichten"
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "Kan bericht op POP server niet aanpassen."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tVoeg een regel in die begint met een enkele ~\n"
+"~b adressen\tVoeg adressen aan Bcc: veld toe\n"
+"~c adressen\tVoeg adressen aan Cc: veld toe\n"
+"~f berichten\tBerichten toevoegen\n"
+"~F berichten\tAls ~f, maar met header\n"
+"~h\t\tBewerk header\n"
+"~m berichten\tBerichten citeren\n"
+"~M berichten\tAls ~m, maar met header\n"
+"~p\t\tBericht afdrukken\n"
+"~q\t\tBericht opslaan en editor verlaten\n"
+"~r bestand\tBestand inlezen\n"
+"~t adressen\tVoeg adresen aan To: veld toe\n"
+"~u\t\tLaatste regel opnieuw bewerken\n"
+"~v\t\tBewerk bericht met alternatieve editor($visual)\n"
+"~w bestand\tSla bericht op in een bestand\n"
+"~x\t\tVerlaat de editor zonder wijzigingen te behouden\n"
+"~?\t\tDit bericht\n"
+".\t\tals enige inhoud van een regel beëndigt het invoegen\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: ongeldig berichtennummer.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Beëndig bericht met een . als enige inhoud van de regel)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "Geen mailfolder.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Bericht bevat:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(verder)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "Geen bestandsnaam opgegeven.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Bericht bevat geen regels.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr "Ongeldige IDN in %s: '%s'\n"
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: Onbekend editor-commando (~? voor hulp)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "Tijdelijke directory %s kan niet worden aangemaakt."
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "Tijdelijk bestand %s kan niet worden aangemaakt."
+
+#: editmsg.c:101
+#, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "tijdelijke bestand %s kan niet worden geknot."
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "Mailfolder is leeg!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "Bericht niet gewijzigd!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "Kan bestand %s niet openen."
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Kan bericht niet toevoegen aan mailfolder %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Fout opgetreden. Tijdelijk bestand opgeslagen als: %s"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Zet markering"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Verwijder markering"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[-- Fout: Kon geen enkel multipart/alternative gedeelte weergeven! --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Bijlage #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Type: %s/%s, Codering: %s, Grootte: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Automatische weergave met %s --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Commando wordt aangeroepen: %s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- Kan %s niet uitvoeren. --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Foutenuitvoer van %s --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr "[-- Fout: message/external-body heeft geen access-type paramter --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Deze %s/%s bijlage "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(grootte %s bytes) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "werd gewist --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- op %s --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- naam: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Deze %s/%s bijlage is niet bijgesloten, --]\n"
+
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+"[-- en de aangegeven externe bron --]\n"
+"[-- bestaat niet meer. --]\n"
+
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr "[-- en het access-type %s wordt niet ondersteund --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Fout: multipart/signed zonder protocol-parameter."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Fout: multipart/encrypted zonder protocol-parameter!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Tijdelijk bestand kon niet worden geopend!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s wordt niet ondersteund "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(gebruik '%s' om dit gedeelte weer te geven)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "('view-attachments' moet aan een toets gekoppeld zijn!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: kan bestand niet toevoegen"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "FOUT: Meldt deze bug!"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<onbekend>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Algemene toetsenbindingen:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Ongebonden functies:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Hulp voor %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: Kan geen unhook * doen binnen een hook."
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: onbekend type: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: Kan geen %s wissen binnen een %s."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "Geen authenticeerders beschikbaar"
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Authenticatie (anoniem)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "Anonieme verbinding mislukt."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Authenticatie (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "CRAM-MD5 authenticatie geweigerd."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Authenticatie (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "GSSAPI authenticatie geweigerd."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "LOGIN uitgeschakeld op deze server."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Aanmelden..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "Aanmelden mislukt..."
+
+#: imap/auth_sasl.c:112
+#, c-format
+msgid "Authenticating (%s)..."
+msgstr "Authenticeren (%s)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "SASL authenticatie geweigerd."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "%s is een ongeldig IMAP pad"
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "Namespace wordt overgehaald..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Mailfolder lijst wordt overgehaald..."
+
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "Niet bestaande mailfolder"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Mailfolder aanmaken: "
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "Mailfolder moet een naam hebben."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Mailfolder is aangemaakt."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "Mailfolder is gesloten."
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Kritieke fout.  Berichtenteller wijkt af!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "Verbinding met %s wordt gesloten..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Mutt kan niet overweg met deze antieke IMAP server."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr "Onverwacht antwoord ontvangen van de server: %s"
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "Beveiligde connectie met TLS?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "Kon TLS connectie niet onderhandelen"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "%s wordt uitgekozen..."
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "Er is een fout opgetreden tijdens het openen van de mailfolder"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "IMAP server laat het toevoegen van berichten niet toe"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "%s aanmaken?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Verbinding met IMAP-server wordt gesloten.."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "%d berichten worden gemarkeerd voor verwijdering..."
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "Verwijderen mislukt"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Berichten-status wordt opgeslagen... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Berichten op de server worden gewist..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbox: EXPUNGE mislukt"
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "CLOSE mislukt"
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "Verkeerde mailfolder naam"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "Aanmelden voor %s..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "Afmelden voor %s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "Kan berichtenoverzicht niet overhalen van deze IMAP server."
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "Tijdelijk bestand %s kon niet worden aangemaakt"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Headers worden gelezen... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Bericht wordt gelezen..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "The berichten index is niet correct. Probeer mailfolder te heropenen."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Bericht wordt verstuurd ..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "%d berichten worden gekopieerd naar %s..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "Bericht %d wordt gekopieerd naar %s ..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "Doorgaan?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "alias: Geen adres"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr "Waarschuwing: Ongeldige IDN '%s' in alias '%s'.\n"
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "my_hdr: Ongeldig veld in berichtenkop"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: onbekende sorteermethode"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): fout in reguliere expressie: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: onbekende variable"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "Prefix is niet toegestaan"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "Toekenning van een waarde is niet toegestaan"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s is gezet"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s is niet gezet"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: Ongeldig mailfolder-type"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: ongeldige waarde"
+
+#: init.c:1312
+#, c-format
+msgid "%s: Unknown type."
+msgstr "%s: Onbekend type."
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: onbekend type"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Kan %s niet statten: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s is geen normaal bestand."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Fout in %s, regel %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: fouten in %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: inlezen gestaakt vanwege te veel fouten in %s"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: fout bij %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: Te veel argumenten"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: onbekend commando"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Fout in opdrachtregel: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "Kan Home-directory niet achterhalen"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "Kan gebruikersnaam niet achterhalen"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Macro-lus gedetecteerd."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Toets is niet in gebruik."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Toets is niet in gebruik. Toets '%s' voor hulp."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: Te veel argumenten"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: Menu onbekend"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "lege toetsenvolgorde"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: Te veel argumenten"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: onbekende functie"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: Lege toetsenvolgorde"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: Te veel argumenten"
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: geen argumenten"
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s: onbekende functie"
+
+#: keymap.c:912
+msgid "Enter keys (^G to abort): "
+msgstr "Geef toetsen in (^G om af te breken): "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr "Karakter = %s, Octaal = %o, Decimaal = %d"
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "lege functie"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr "einde van conditionele uitvoering (noop)"
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "bijlage wordt noodgedwongen volgens mailcap weergegeven"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "toon bijlage als tekst"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "schakel weergeven van onderdelen aan/uit"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "naar het einde van deze pagina"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "bericht opnieuw versturen naar een andere gebruiker"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "kies een nieuw bestand in deze directory"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "toon bestand"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "toon de bestandsnaam van het huidige bestand"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "aanmelden voor huidige mailfolder (alleen met IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "afmelden voor huidige mailfolder (alleen met IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "omschakelen weergave alle/aangemelde mailfolders (alleen met IMAP)"
+
+#: keymap_alldefs.h:18
+msgid "list mailboxes with new mail"
+msgstr "toon mailfolders met nieuwe berichten."
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "verander directories"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "controleer mailfolders op nieuwe berichten"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "voeg bestand(en) aan dit bericht toe"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "voeg bericht(en) aan dit bericht toe"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "bewerk de Bcc-lijst"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "bewerk de Cc-lijst"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "bewerk de omschrijving van een bijlage"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "bewerk de transport-codering van een bijlage"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "kopieer bericht naar bestand"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "bewerk het bij te voegen bestand"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "bewerk het From-veld"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "bewerk het bericht (incl. header)"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "bewerk het bericht"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "bewerk bijlage volgens mailcap"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "bewerk Reply-To-veld"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "bewerk onderwerp (Subject) van dit bericht"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "bewerk ontvangers (To-veld)"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "maak een nieuwe mailfolder aan (alleen met IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "bewerk type van bijlage"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "maak een tijdelijke kopie van de bijlage"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "controleer spelling via ispell"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "maak nieuwe bijlage aan volgens mailcap"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "omschakelen decodering van de bijlage"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "sla dit bericht op om later te verzenden"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "hernoem/verplaats een toegevoegd bestand"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "verstuur het bericht"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "omschakelen weergave in bericht/als bijlage"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "kies of bestand na verzenden gewist wordt"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "controleer codering van een bijlage"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "schrijf een bericht naar een mailfolder"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "kopieer bericht naar bestand/mailfolder"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "maak een afkorting van de afzender"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "verplaats item naar onderkant van scherm"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "verplaats item naar midden van scherm"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "verplaats item naar bovenkant van scherm"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "maak gedecodeerde (text/plain) kopie"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "maak gedecodeerde kopie (text/plain) en verwijder"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "verwijder huidig item"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "verwijder de huidige mailfolder (alleen met IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "verwijder alle berichten in subthread"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "wis alle berichten in thread"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "toon adres van afzender"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "toon bericht met complete berichtenkop"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "toon bericht"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "bewerk het bericht"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "wis karakter voor de cursor"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "verplaats cursor een karakter naar links"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "verplaats cursor naar begin van het woord"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "ga naar begin van de regel"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "roteer door mailfolders"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "complete bestandsnaam of afkorting"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "compleet adres met vraag"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "wis karakter onder de cursor"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "ga naar regeleinde"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "beweeg de cursor een karakter naar rechts"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "beweeg de cursor naar het einde van het woord"
+
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr "ga omhoog in history lijst"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "ga omhoog in history list"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "wis alle karakters tot einde van de regel"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "wis alle karakters tot einde van het woord"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "wis regel"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "wis woord voor de cursor"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "voeg volgende toets onveranderd in"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "transponeer karakter onder cursor naar de vorige"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "begin het woord met een hoofdletter"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "verander het woord in kleine letters"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "verander het woord in hoofdletters"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "geef een muttrc commando in"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "geef bestandsmasker in"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "menu verlaten"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "filter bijlage door een shell commando"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "ga naar eerste item"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "markeer bericht als belangrijk"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "stuur bericht door met commentaar"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "selecteer het huidige item"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "antwoord aan alle ontvangers"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "ga 1/2 pagina naar beneden"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "ga 1/2 pagina omhoog"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "dit scherm"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "ga naar een index nummer"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "ga naar laatste item"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "stuur antwoord naar mailing-list"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "Voer macro uit"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "maak nieuw bericht aan"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "open een andere mailfolder"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "open een andere mailfolder in read-only mode"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "verwijder een status-vlag"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "verwijder berichten volgens patroon"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "forceer ophalen van mail vanaf IMAP-server"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "haal mail vanaf POP-server"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "spring naar eeste bericht"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "spring naar het laaste bericht"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "geef alleen berichten weer volgens patroon"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "spring naar het volgende nieuwe bericht"
+
+#: keymap_alldefs.h:113
+msgid "jump to the next new or unread message"
+msgstr "spring naar het volgende nieuwe of ongelezen bericht"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "spring naar de volgende subthread"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "spring naar de volgende thread"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "spring naar het volgende ongewiste bericht"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "spring naar het volgende ongelezen bericht"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "spring naar het vorige bericht in de thread"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "spring naar de vorige thread"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "spring naar de vorige subthread"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "spring naar het volgende ongewiste bericht"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "spring naar het vorige nieuwe bericht"
+
+#: keymap_alldefs.h:123
+msgid "jump to the previous new or unread message"
+msgstr "spring naar het vorige nieuwe of ongelezen bericht"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "spring naar het vorige ongelezen bericht"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "markeer de huidige thread als gelezen"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "markeer de huidige subthread als gelezen"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "zet een status-vlag in een bericht"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "sla wijzigingen in mailfolder op"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "markeer berichten volgens patroon"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "herstel berichten volgens patroon"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "verwijder markering volgens patroon"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "ga naar het midden van de pagina"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "ga naar het volgende item"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "ga een regel naar beneden"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "ga naar de volgende pagina"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "spring naar het einde van het bericht"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "schakel weergeven van geciteerde tekst aan/uit"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "sla geciteerde tekst over"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "spring naar het begin van het bericht"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "bewerk (pipe) bericht/bijlage met een shell-commando"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "ga naar het vorige item"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "ga een regel omhoog"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "ga naar de vorige pagina"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "druk het huidige item af"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "vraag een extern programma om adressen"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "voeg resultaten van zoekopdracht toe aan huidige resultaten"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "sla wijzigingen in de mailfolder op en verlaat Mutt"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "bewerk een uitgesteld bericht"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "wis scherm en bouw scherm opnieuw op"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "(intern)"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "beantwoord een bericht"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "gebruik het huidige bericht als template voor een nieuw bericht"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "sla bericht/bijlage op in een bestand"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "zoek naar een reguliere expressie"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "zoek achteruit naar een reguliere expressie"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "zoek volgende match"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "zoek achteruit naar volgende match"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "schakel inkleuren van zoekpatronen in/uit"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "roep een commando in een shell aan"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "sorteer berichten"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "sorteer berichten in omgekeerde volgorde"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "markeer huidig item"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "voer volgende functie uit op gemarkeerde berichten"
+
+#: keymap_alldefs.h:164
+msgid "apply next function ONLY to tagged messages"
+msgstr "voer volgende functie ALLEEN uit op gemarkeerde berichten"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "markeer de huidige subthread"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "markeer de huidige thread"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "zet/wis de 'nieuw'-markering van een bericht"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "schakel het opslaan van wijzigingen aan/uit"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "kies tussen doorlopen van mailfolders/alle bestanden"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "spring naar het begin van de pagina"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "verwijder wismarkering van huidig item"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "verwijder wismarkering van alle berichten in thread"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "verwijder wismarkering van alle berichten in subtread"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "geef de datum en het versienummer van Mutt weer"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "geef bijlage weer, zo nodig via mailcap"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "geef MIME-bijlagen weer"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr "toon de code voor een toets"
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "geef het momenteel actieve limietpatroon weer"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "comprimeer/expandeer huidige thread"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "comprimeer/expandeer alle threads"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "voeg een PGP publieke sleutel toe"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "geef PGP-opties weer"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "mail een PGP publieke sleutel"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "controleer een PGP publieke sleutel"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "geef User-ID van een sleutel weer"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "controleer klassieke pgp"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "Accepteer de gemaakte lijst"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "Voeg een remailer toe aan het einde van de lijst"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "Voeg een remailer toe in de lijst"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "Verwijder een remailer van de lijst"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "Kies het vorige item uit de lijst"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "Kies het volgende item uit de lijst"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "verstuur het bericht via een \"mixmaster remailer\" lijst"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "maak een gedecodeerde kopie en wis"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "maak een gedecodeerde kopie"
+
+#: keymap_alldefs.h:196
+msgid "wipe passphrase(s) from memory"
+msgstr "verwijder wachtwoord(en) uit geheugen"
+
+#: keymap_alldefs.h:197
+msgid "extract supported public keys"
+msgstr "extraheer ondersteunde publieke sleutels"
+
+#: keymap_alldefs.h:198
+msgid "show S/MIME options"
+msgstr "geef S/MIME-opties weer"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr "Integer overflow -- kan geen geheugen alloceren!"
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Onvoldoende geheugen!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"Stuur een bericht naar <mutt-dev@mutt.org> om de auteurs te bereiken.\n"
+"Gebruik de flea(1) om een programmafout te melden.\n"
+
+#: main.c:50
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins en anderen.\n"
+"Mutt komt ABSOLUUT ZONDER GARANTIE;  voor meer informatie `mutt -vv'.\n"
+"Mutt is vrije software, en u bent vrij om het te verspreiden\n"
+"onder bepaalde voorwaarden;  type `mutt -vv' voor meer informatie.\n"
+
+#: main.c:56
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"Vele anderen, hier niet genoemd, hebben veel code, verbeteringen\n"
+"en suggesties aangedragen.\n"
+"\n"
+"    Dit Programma is vrije software; U kan het verspreiden en/of wijzigen\n"
+"    onder de bepalingen van de GNU Algemene Publieke Licentie, zoals\n"
+"    uitgegeven door de Free Software Foundation; oftewel versie 2 van\n"
+"    de Licentie,of (naar vrije keuze) een latere versie.\n"
+"\n"
+"    Dit Programma is verspreid met de hoop dat het nuttig zal zijn maar\n"
+"    ZONDER EENDER WELKE GARANTIE; zelfs zonder de impliciete garantie van\n"
+"    VERKOOPBAARHEID of GESCHIKTHEID VOOR EEN BEPAALD DOEL. Zie de GNU\n"
+"    Algemene Publieke Licentie voor meer details.\n"
+"\n"
+"    U zou een kopie van de GNU Algemene Publieke Licentie ontvangen moeten\n"
+"    hebben samen met dit Programma; zoniet, schrijf naar de Free Software\n"
+"    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 "
+"USA.\n"
+
+#: main.c:94
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"gebruik: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"  -A <alias>\tgebruik een afkorting\n"
+"  -a <file>\tvoeg een bestand bij het bericht\n"
+"  -b <address>\tspecificeer een blind carbon-copy (BCC) adres\n"
+"  -c <address>\tspecificeer een carbon-copy (CC) adres\n"
+"  -e <opdracht>\tspecificeer een uit te voeren opdracht na initialisatie\n"
+"  -f <file>\tspecificeer de te lezen mailfolder\n"
+"  -F <file>\tspecificeer een alternatieve muttrc\n"
+"  -H <file>\tspecificeer een een bestand om de headers uit te lezen\n"
+"  -i <file>\tspecificeer een bestand dat Mutt moet bijsluiten in het "
+"antwoord\n"
+"  -m <type>\tspecificeer een standaard mailfolder type\n"
+"  -n\t\tzorgt dat Mutt niet de systeem Muttrc inleest\n"
+"  -p\t\troept een uitgesteld bericht op\n"
+"  -Q <variabele>\tvraagt de waarde van een configuratievariabele op\n"
+"  -R\t\topent de mailfolder met alleen-lezen rechten\n"
+"  -s <ond>\tspecificeer een onderwerp (tussen aanhalingstekens i.g.v. "
+"spaties)\n"
+"  -v\t\ttoont het versienummer en opties tijdens het compileren\n"
+"  -x\t\tsimuleert de mailx verstuurmodus\n"
+"  -y\t\tselecteert een mailfolder gespecificeerd in de `mailboxes' lijst\n"
+"  -z\t\tbeëindigt meteen als er geen berichten in de mailfolder staan\n"
+"  -Z\t\topent de eerste mailfolder met nieuwe berichten, eindigt indien "
+"geen\n"
+"  -h\t\tdit hulp bericht"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Opties tijdens compileren:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Kan terminal niet initialiseren."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Debug informatie level %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "DEBUG optie niet beschikbaar: deze wordt genegeerd.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s bestaat niet. Aanmaken?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "Kan bestand %s niet aanmaken: %s"
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Geen ontvangers opgegeven.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: kan bestand niet bijvoegen.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Geen mailfolder met nieuwe berichten."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Geen mailfolders opgegeven."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "Mailfolder is leeg."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Bezig met het lezen van %s... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "Mailfolder is beschadigd!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "Mailfolder was beschadigd!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Fatale fout! Kon mailfolder niet opnieuw openen!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Kan mailfolder niet claimen!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr "sync: mbox is gewijzigd, maar geen gewijzigde berichten gevonden!"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Berichten worden opgeslagen ... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "Wijzigingen doorvoeren..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Opslaan mislukt! Deel-mailfolder opgeslagen als %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "Kan mailfolder niet opnieuw openen!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Mailfolder wordt heropend.."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Ga naar: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Ongeldig Indexnummer."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Geen items"
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "U kunt niet verder naar beneden gaan."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "U kunt niet verder naar boven gaan."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "U bent op de laatste pagina."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "U bent op de eerste pagina."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "Het eerste item wordt weergegeven."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "Het laatste item wordt weergegeven."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "U bent op het laatste item."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "U bent op het eerste item."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Zoek naar: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Zoek achteruit naar: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Geen zoekpatroon."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Niet gevonden."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "Geen geselecteerde items."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "In dit menu kan niet worden gezocht."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "Verspringen is niet mogelijk in menu."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Markeren is niet ondersteund."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "Bezig met het lezen van %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr "maildir_commit_message(): kan bestandstijd niet zetten"
+
+#: muttlib.c:835
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "Bestand is een directory, daarin opslaan? [(j)a, (n)ee, (a)llen]"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr "jna"
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "Bestand is een directory, daarin opslaan?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Bestandsnaam in directory: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "Bestand bestaat, (o)verschrijven, (t)oevoegen, (a)nnuleren?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "ota"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "Kan het bericht niet opslaan in de POP mailfolder."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s is geen mailfolder!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Bericht aan %s toevoegen?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "Verbinding met %s beëindigd"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL is niet beschikbaar."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "Preconnect commando is mislukt."
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Verbinding met %s mislukt (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr "Ongeldige IDN \"%s\"."
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "%s aan het opzoeken..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Kan adres van server \"%s\" niet achterhalen"
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Bezig met verbinden met %s..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "Kan niet verbinden met %s (%s)."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "Te weinig entropie op uw systeem gevonden"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "Entropieverzameling aan het vullen: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s heeft onveilige rechten!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "SSL uitgeschakeld vanwege te weinig entropie"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "I/O fout"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "algemene protocolfout"
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "SSL mislukt: %s"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "Kan server certificaat niet verkrijgen"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "SSL verbinding via %s (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "Onbekende fout"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[kan niet berekend worden]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[ongeldige datum]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "Certificaat van de server is nog niet geldig"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "Certificaat van de server is verlopen"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Dit certificaat behoort aan:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Dit certificaat is uitgegeven door:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Dit certificaat is geldig"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "    van %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "      tot %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Handtekening: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "SSL certificaat controle"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(w)eigeren, (e)enmalig toelaten, (a)ltijd toelaten"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "wea"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(w)eigeren, (e)enmalig toelaten"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "we"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Einde "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Waarschuwing: certificaat kan niet bewaard worden"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "Certificaat wordt bewaard"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Claim-timeout overschreden, oude claim voor %s verwijderen?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "Kan %s niet claimen met \"dotlock\".\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "De fcntl-claim kon niet binnen de toegestane tijd worden verkregen."
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Wacht op fcntl-claim... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "de flock-claim kon niet binnen de toegestane tijd worden verkregen."
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Wacht op flock-poging... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "Kan %s niet claimen.\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "Bezig met het lezen van %s..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "Bezig met het schrijven van %s..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "Kan mailfolder %s niet synchronisieren!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Gelezen berichten naar %s verplaatsen?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "%d als gewist gemarkeerde berichten verwijderen?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "%d als gewist gemarkeerde berichten verwijderen?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Gelezen berichten worden naar %s verplaatst..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "Mailfolder is niet veranderd."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d bewaard, %d verschoven, %d gewist."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d bewaard, %d gewist."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr " Druk '%s' om schrijfmode aan/uit te schakelen"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "Gebruik 'toggle-write' om schrijven mogelijk te maken!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "De mailfolder is als schrijfbeveiligd gemarkeerd. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "Mailfolder is gecontroleerd."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Kan bericht niet wegschrijven"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr "Integer overflow -- kan geen geheugen alloceren!"
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "Optie niet beschikbaar in dit menu."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "Vorig.P"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "Volg.P"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Bijlagen tonen"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Volgend ber."
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "Einde van bericht is weergegeven."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "Begin van bericht is weergegeven."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Achteruit zoeken: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Zoeken: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "Hulp wordt al weergegeven."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "Geen verdere geciteerde text."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "Geen verdere eigen text na geciteerde text."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "Multi-part bericht heeft geen \"boundary\" parameter."
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Fout in expressie: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Ongeldige dag van de maand: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Ongeldige maand: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "Ongeldige maand: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "Fout in expressie"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "Fout in expressie bij: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: Ongeldig commando"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: Niet ondersteund in deze modus"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "Te weinig parameters"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "Haakjes kloppen niet: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "Leeg patroon"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "fout: onbekende operatie %d (interne fout)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Bezig met het compileren van patroon..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Commando wordt uitgevoerd..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "Geen berichten voldeden aan de criteria."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "Zoeken heeft einde bereikt zonder iets te vinden"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "Zoeken heeft begin bereikt zonder iets te vinden"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Zoeken onderbroken."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "PGP-wachtwoord is vergeten."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Fout: Kan geen PGP-proces starten! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- Einde van PGP uitvoer --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- BEGIN PGP BERICHT --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- BEGIN PGP PUBLIC KEY BLOK --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- BEGIN PGP ONDERTEKEND BERICHT --]\n"
+"\n"
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- EINDE PGP BERICHT --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- EINDE PGP PUBLIC KEY BLOK --]\n"
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- EINDE PGP ONDERTEKEND BERICHT --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Fout: Kon begin van PGP-bericht niet vinden! --]\n"
+"\n"
+
+#: pgp.c:662
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Interne fout.  Informeer <roessler@does-not-exist.org>."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Fout: Kon PGP-subproces niet starten! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Fout: Foutief PGP/MIME bericht! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Fout: Kon geen tijdelijk bestand aanmaken! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- De volgende gegevens zijn PGP/MIME versleuteld --]\n"
+"\n"
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- Einde van PGP/MIME versleutelde data --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "Kan PGP-Subproces niet starten!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "KeyID = \"%s\" gebruiken voor %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "KeyID voor %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "Kan PGP niet aanroepen"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "PGP sleutel wordt gelezen..."
+
+#: pgpkey.c:486
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "Alle overeenkomende sleutels zijn verlopen/ingetrokken."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Selecteer  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Controleer sleutel "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "PGP-sleutels voor <%s>."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "PGP-sleutels voor \"%s\"."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "Kan /dev/null niet openen"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Kan tijdelijk bestand niet aanmaken"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "Sleutel ID: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "Deze sleutel is onbruikbaar: verlopen/ingetrokken."
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "Dit ID is verlopen/uitgeschakeld/ingetrokken."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "Dit ID heeft ongedefiniëerde geldigheid."
+
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "Dit ID is niet geldig."
+
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "Dit ID is slechts marginaal vertrouwd."
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s Wilt U deze sleutel gebruiken?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Geef Key-ID in: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "PGP wordt aangeroepen..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "PGP-key %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Zoeken naar sleutels voor \"%s\"..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "Het TOP commando wordt niet door de server ondersteund."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "Kan de header niet naar een tijdelijk bestand wegschrijven!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "Het UIDL commando wordt niet door de server ondersteund."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "%s is een ongeldig POP pad"
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "Berichtenlijst ophalen..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "Kan het bericht niet naar een tijdelijk bestand wegschrijven"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "Controleren op nieuwe berichten..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "Er is geen POP-server gespecificeerd."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "Geen nieuwe berichten op de POP-server."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "Berichten op de server verwijderen?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Bezig met het lezen van nieuwe berichten (%d bytes)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "Er is een fout opgetreden tijdens het wegschrijven van de mailfolder!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d van de %d berichten gelezen]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "Server heeft verbinding gesloten!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Authenticatie (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Authenticatie (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "APOP authenticatie geweigerd."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "Het UIDL commando wordt niet door de server ondersteund."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "Niet in staat berichten op de server achter te laten."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "Fout tijdens verbinden met server: %s"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "Verbinding met POP-server wordt gesloten.."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Berichten index wordt geverifiëerd..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Verbinging verbroken. Opnieuw verbinden met POP server?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Uitgestelde Berichten"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "Geen uitgestelde berichten."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "Ongeldige PGP-Header"
+
+#: postpone.c:479
+msgid "Illegal S/MIME header"
+msgstr "Ongeldige S/MIME header"
+
+#: postpone.c:554
+msgid "Decryption failed."
+msgstr "Ontsleuteling mislukt."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Nieuwe query"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Afkorting maken"
+
+#: query.c:48
+msgid "Search"
+msgstr "Zoeken"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Wacht op antwoord..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Query-commando niet gedefinieerd."
+
+#: query.c:286
+msgid "Query"
+msgstr "Zoekopdracht"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Zoekopdracht: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Zoekopdracht '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Filteren"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Druk af"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Bezig met opslaan..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Bijlage opgeslagen."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "Waarschuwing! Bestand %s bestaat al. Overschrijven?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Bijlage gefilterd."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Filter door: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Doorgeven aan (pipe): "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "Kan %s bijlagen niet afdrukken!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Gemarkeerde bericht(en) afdrukken?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Bijlage afdrukken?"
+
+#: recvattach.c:938
+msgid "Can't decrypt encrypted message!"
+msgstr "Kan het versleutelde bericht niet ontsleutelen!"
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Bijlagen"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "Er zijn geen onderdelen om te laten zien!"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "Kan de bijlage niet van de POP server verwijderen."
+
+#: recvattach.c:1056
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr ""
+"Het wissen van bijlagen uit versleutelde berichten is niet ondersteund."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Kan alleen multipart-bijlagen wissen."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "U kunt alleen message/rfc882-gedeelten doorsturen!"
+
+#: recvcmd.c:213
+msgid "Error bouncing message!"
+msgstr "Fout opgetreden tijdens het doorsturen van het bericht!"
+
+#: recvcmd.c:213
+msgid "Error bouncing messages!"
+msgstr "Fout opgetreden tijdens het doorsturen van de berichten!"
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Kan tijdelijk bestand %s niet aanmaken."
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "Doorsturen als bijlagen?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr "Kan niet alle bijlagen decoderen. De rest doorsturen met MIME?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Doorsturen als MIME-bijlage?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "Kan bestand %s niet aanmaken."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Kan geen geselecteerde berichten vinden."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "Geen mailing-lists gevonden!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr "Kan niet alle bijlagen decoderen. De rest inpakken met MIME?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Toevoegen"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Invoegen"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Verwijderen"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "OK"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "Kan type2.list niet lezen van mixmaster."
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Selecteer een remailer lijster."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "Fout: %s kan niet gebruikt worden als laaste remailer van een lijst."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Mixmaster lijsten zijn beperkt tot %d items."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "De remailer lijst is al leeg."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "Het eerste lijst-item is al geselecteerd."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "Het laaste lijst-item is al geselecteerd."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Mixmaster laat geen Cc or Bcc headers toe."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr "De hostname variable moet ingesteld zijn voor mixmaster gebruik!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Externe fout %d opgetreden tijdens versturen van bericht.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Fout opgetreden tijdens het verzenden van het bericht."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "Ongeldig geformuleerde entry voor type %s in \"%s\", regel %d"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Geen mailcap-path opgegeven"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "Kan geen mailcap-entry voor %s vinden."
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: te weinig argumenten"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: te veel argumenten"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Geen onderwerp, afbreken?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Geen onderwerp. Operatie afgebroken."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Reactie sturen naar %s%s?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "Reactie sturen naar %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "Geen gemarkeerde berichten zichtbaar!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Bericht in antwoord citeren?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Geciteerde bericht wordt toegevoegd..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "Kon niet alle berichten citeren!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "Doorsturen als bijlage?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Voorbereiden door te sturen bericht..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Uigesteld bericht hervatten?"
+
+#: send.c:1336
+msgid "Edit forwarded message?"
+msgstr "Doorgestuurd bericht wijzigen?"
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Uitgesteld bericht afbreken?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Bericht werd niet veranderd. Operatie afgebroken."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "Bericht niet verstuurd."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Bericht uitgesteld."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Er zijn geen geadresseerden opgegeven!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Er werden geen geadresseerden opgegeven!"
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Geen onderwerp. Versturen afbreken?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Geen onderwerp."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Verstuur bericht..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Bericht kon niet verstuurd worden."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Bericht verstuurd."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Bericht wordt op de achtergrond verstuurd."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "Geen 'boundary parameter' gevonden! [meldt deze fout!]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s bestaat niet meer!"
+
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "%s is geen normaal bestand."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "Kan %s niet openen."
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Fout %d opgetreden tijdens versturen van bericht: %s"
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Uitvoer van het afleverings proces"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr "Ongeldige IDN %s tijdens maken resent-from header."
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s... Mutt wordt afgesloten.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "Signaal %s...\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Signaal %d...\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr "Vertrouwd    "
+
+#: smime.c:303
+msgid "Verified  "
+msgstr "Geverifieerd   "
+
+#: smime.c:306
+msgid "Unverified"
+msgstr "Niet geverifieerd"
+
+#: smime.c:309
+msgid "Expired   "
+msgstr "Verlopen    "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr "Herroepen    "
+
+#: smime.c:315
+msgid "Invalid   "
+msgstr "Ongeldig    "
+
+#: smime.c:318
+msgid "Unknown   "
+msgstr "Onbekend    "
+
+#: smime.c:347
+msgid "Enter keyID: "
+msgstr "Geef keyID: "
+
+#: smime.c:370
+#, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "S/MIME certficiaten voor \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr "ID %s is niet geverifieerd. Wilt u het gebruiken voor %s ?"
+
+#: smime.c:523 smime.c:592
+#, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "ID %s (niet vertrouwd!) gebruiken voor %s ?"
+
+#: smime.c:526 smime.c:595
+#, c-format
+msgid "Use ID %s for %s ?"
+msgstr "ID %s gebruiken voor %s ?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+"Waarschuwing: nog niet besloten om ID %s te vertrouwen. (druk op een toets)"
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr "Geen (geldig) certificaat gevonden voor %s."
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "Fout: kan geen OpenSSL subproces starten!"
+
+#: smime.c:1197
+msgid "no certfile"
+msgstr "geen certfile"
+
+#: smime.c:1200
+msgid "no mbox"
+msgstr "geen mbox"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr "Geen uitvoer van OpenSSL.."
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr "Waarschuwing: Tussentijds certificaat niet gevonden."
+
+#: smime.c:1426
+msgid "Can't open OpenSSL subprocess!"
+msgstr "Kan OpenSSL subproces niet starten!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr "Geen uitvoer van OpenSSL..."
+
+#: smime.c:1629 smime.c:1751
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- Einde van OpenSSL uitvoer --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Fout: Kan geen OpenSSL subproces starten! --]\n"
+
+#: smime.c:1755
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr ""
+"[-- De volgende gegevens zijn S/MIME versleuteld --]\n"
+"\n"
+
+#: smime.c:1758
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr ""
+"[-- De volgende gegevens zijn S/MIME ondertekend --]\n"
+"\n"
+
+#: smime.c:1822
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- Einde van S/MIME versleutelde data --]\n"
+
+#: smime.c:1824
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- Einde van S/MIME ondertekende gegevens --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Mailfolder wordt gesorteerd..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "Kan 'sorting function' niet vinden! [Meldt deze bug!]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(geen mailfolder)"
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "Vorig bericht niet zichtbaar in gelimiteerd overzicht."
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "Vorig bericht is niet beschikbaar."
+
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "OpenSSL wordt aangeroepen..."
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "Berichten aan %s doorsturen ?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "Berichten aan %s doorsturen ?"
+
+#~ msgid "ewsabf"
+#~ msgstr "voabmg"
+
+#~ msgid "Certificate *NOT* added."
+#~ msgstr "Certificaat *NIET* toegevoegd."
+
+#~ msgid "This ID's validity level is undefined."
+#~ msgstr "Het vertrouwensniveau van dit ID is niet gedefinieerd."
+
+#~ msgid "Decode-save"
+#~ msgstr "Gedecodeerd opslaan"
+
+#~ msgid "Decode-copy"
+#~ msgstr "Gedecodeerd kopieeren"
+
+#~ msgid "Decrypt-save"
+#~ msgstr "Gedecodeerd opslaan"
+
+#~ msgid "Decrypt-copy"
+#~ msgstr "Gedecodeerd kopieeren"
+
+#~ msgid "Copy"
+#~ msgstr "Kopieeren"
+
+#~ msgid "%s [%s]\n"
+#~ msgstr "%s [%s]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "[-- End of PGP output --]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "[-- Einde van PGP uitvoer --]\n"
+#~ "\n"
+
+#~ msgid "Can't stat %s."
+#~ msgstr "Kan %s niet statten."
+
+#~ msgid "%s: no such command"
+#~ msgstr "%s: Commando bestaat niet"
+
+#~ msgid "Authentication method is unknown."
+#~ msgstr "Authenticatiemethode onbekend."
+
+#~ msgid "MIC algorithm: "
+#~ msgstr "MIC-Algoritme: "
+
+#~ msgid "This doesn't make sense if you don't want to sign the message."
+#~ msgstr "Dit heeft geen zin als U het bericht niet wilt ondertekenen."
+
+#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160"
+#~ msgstr ""
+#~ "Onbekend MIC algoritme. Bekend zijn: pgp-md5, pgp-sha1 en pgp-rmd160"
+
+#~ msgid "POP Username: "
+#~ msgstr "POP-gebruikersnaam: "
+
+#~ msgid "Reading new message (%d bytes)..."
+#~ msgstr "Bezig met het lezen van nieuw bericht (%d bytes)..."
+
+#~ msgid "Error reading message!"
+#~ msgstr "Kan bericht niet lezen!"
+
+#~ msgid "%s [%d message read]"
+#~ msgstr "%s [%d bericht gelezen]"
+
+#~ msgid "Creating mailboxes is not yet supported."
+#~ msgstr "Aanmaken van mailfolders wordt niet ondersteund."
+
+#~ msgid "Reopening mailbox... %s"
+#~ msgstr "Mailfolder wordt heropend... %s"
+
+#~ msgid "Closing mailbox..."
+#~ msgstr "Mailfolder wordt gesloten..."
+
+#~ msgid "IMAP Username: "
+#~ msgstr "IMAP-gebruikersnaam: "
+
+#~ msgid "CRAM key for %s@%s: "
+#~ msgstr "CRAM sleutel voor %s@%s: "
+
+#~ msgid "Skipping CRAM-MD5 authentication."
+#~ msgstr "CRAM-MD5 authenticatie wordt overgeslagen."
+
+#~ msgid "[-- Error: unexpected end of file! --]\n"
+#~ msgstr "[-- Fout: Onverwacht einde van het bestand! --]\n"
+
+#~ msgid "Sending APPEND command ..."
+#~ msgstr "APPEND-commando wordt verstuurd..."
+
+#~ msgid "%d kept."
+#~ msgstr "%d bewaard."
+
+#~ msgid "POP Password: "
+#~ msgstr "POP-Wachtwoord:"
+
+#~ msgid "No POP username is defined."
+#~ msgstr "Er is geen POP-gebruikersnaam gespecificeerd."
+
+#~ msgid "Could not find address for host %s."
+#~ msgstr "Kan adres van server %s niet achterhalen."
+
+#~ msgid "Attachment saved"
+#~ msgstr "Bijlage opgeslagen."
+
+#~ msgid "Can't open %s: %s."
+#~ msgstr "Kan directory %s niet lezen: %s"
+
+#~ msgid "Error while recoding %s. Leave it unchanged."
+#~ msgstr "Fout bij aanpassen codering van %s. Codering is ongewijzigd."
+
+#~ msgid "Error while recoding %s. See %s for recovering your data."
+#~ msgstr ""
+#~ "Fout bij aanpassen codering van %s. Zie %s om het bestand te herstellen."
+
+#~ msgid "Can't change character set for non-text attachments!"
+#~ msgstr "Kan karakterset niet aanpassen voor binary bijlage!"
+
+#~ msgid "Enter character set: "
+#~ msgstr "Geef karakterset op: "
+
+#~ msgid "Recoding successful."
+#~ msgstr "Conversie is geslaagd."
+
+#~ msgid "change an attachment's character set"
+#~ msgstr "Wijzig de karakterset van een bijlage"
+
+#~ msgid "recode this attachment to/from the local charset"
+#~ msgstr "hercodeer dit attachment met de gebruikte karakterset"
+
+#~ msgid "Compose"
+#~ msgstr "Bericht schrijven"
+
+#~ msgid "We can't currently handle utf-8 at this point."
+#~ msgstr "UTF-8 opmaak wordt nog niet ondersteund."
+
+#~ msgid "UTF-8 encoding attachments has not yet been implemented."
+#~ msgstr "UTF-8 codering voor bijlagen is nog niet geïplementeerd."
+
+#~ msgid "We currently can't encode to utf-8."
+#~ msgstr "UTF-8 codering wordt nog niet ondersteund."
+
+#~ msgid "move to the last undelete message"
+#~ msgstr "Spring naar het laaste ongewiste bericht"
+
+#~ msgid "return to the main-menu"
+#~ msgstr "Ga terug naar het hoofdmenu"
+
+#~ msgid "ignoring empty header field: %s"
+#~ msgstr "Leeg Kop-veld %s wordt genegeerd."
+
+#~ msgid "imap_error(): unexpected response in %s: %s\n"
+#~ msgstr "imap_error(): Onbekend antwoord in %s:%s\n"
+
+#~ msgid "An unkown PGP version was defined for signing."
+#~ msgstr ""
+#~ "Een onbekende PGP versie werd gedefinieerd tijdens het ondertekenen."
+
+#~ msgid "Message edited. Really send?"
+#~ msgstr "Bericht veranderd. Werkelijk versturen?"
+
+#~ msgid "Unknown PGP version \"%s\"."
+#~ msgstr "Onbekende PGP-Versie \"%s\"."
+
+#~ msgid "Display message using mailcap?"
+#~ msgstr "Bericht weergeven volgens mailcap?"
+
+#~ msgid "Can't open your secret key ring!"
+#~ msgstr "Kan geheime sleutelhanger niet openen!"
+
+#~ msgid "===== Attachments ====="
+#~ msgstr "===== Bijlagen ====="
+
+#~ msgid "Please report this program error in the function mutt_mktime."
+#~ msgstr "Meldt deze programmafout in de functie mutt_mktime."
+
+#~ msgid "%s is a boolean var!"
+#~ msgstr "%s is een boolsche variable!"
+
+#~ msgid "Saved output of child process to %s.\n"
+#~ msgstr "Uitvoer van child proces opgeslagen in %s.\n"
+
+#~ msgid ""
+#~ "[-- Error: this message does not comply with the PGP/MIME specification! "
+#~ "--]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "[-- Fout: Dit bericht komt niet overeen met de PGP/MIME specificatie! "
+#~ "--]\n"
+
+#~ msgid "This encoding is deprecated.  Really use it?"
+#~ msgstr "Deze codering zou u eigenlijk niet moeten gebruiken. Toch doen?"
+
+#~ msgid "Confused when attempting to delete attachment, h & m can't be NULL"
+#~ msgstr "Interne fout."
+
+#~ msgid "Deleting non-multipart messages not yet supported"
+#~ msgstr "Alleen delen van multipart berichten kunnen gewist worden."
diff --git a/po/pl.gmo b/po/pl.gmo
new file mode 100644 (file)
index 0000000..9c56887
Binary files /dev/null and b/po/pl.gmo differ
diff --git a/po/pl.po b/po/pl.po
new file mode 100644 (file)
index 0000000..2756e5d
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,4155 @@
+# Polish messages for Mutt 1.5.xi
+# Polskie teksty dla Mutta 1.5.xi
+# 1998-2003 Pawe³ Dziekoñski <dzieko@pwr.wroc.pl>
+# 1998-2003 Sergiusz Paw³owicz <ser@hyperreal.art.pl>
+# Pre-translation had been done using PePeSza v0.9
+# get your own copy of PePeSza from http://www.ids.pl/~pkollegu/pepesza.html
+msgid ""
+msgstr ""
+"Project-Id-Version: mutt-1.5.5.1i\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2003-12-10\n"
+"Last-Translator: Pawe³ Dziekoñski <dzieko@pwr.wroc.pl>\n"
+"Language-Team: POLISH <pl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "Nazwa konta na %s: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "Has³o dla %s@%s: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Wyj¶cie"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Usuñ"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Odtwórz"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Wybierz"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Pomoc"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "Brak aliasów!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Aliasy"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Nazwa aliasu: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "Istnieje ju¿ tak nazwany alias!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr "Ostrze¿enie: alias o takiej nazwie mo¿e nie zadzia³aæ. Poprawiæ?"
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Adres: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr "B³±d: '%s' to b³êdny IDN."
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Nazwisko: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] Potwierdzasz?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Zapisz do pliku: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Alias dodany."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Nie pasuj±cy szablon nazwy, kontynuowaæ?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "Pole \"compose\" w pliku 'mailcap' wymaga %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "B³±d uruchomienia \"%s\"!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "B³±d otwarcia pliku podczas interpretacji nag³ówków."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "B³±d podczas próby otwarcia pliku w celu eliminacji nag³ówków."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "Brak pola \"compose\" dla %s w pliku 'mailcap', utworzono pusty plik."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "Pole \"Edit\" w pliku 'mailcap' wymaga %%s"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "Brak pola \"Edit\" dla %s w pliku 'mailcap'"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "Brak odpowiedniego wpisu w 'mailcap'. Wy¶wietlony jako tekst."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "Typ MIME nie zosta³ zdefiniowany. Nie mo¿na wy¶wietliæ za³±cznika."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Nie mo¿na utworzyæ filtru"
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Nie mo¿na utworzyæ filtra"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "B³±d zapisu!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Nie wiem jak to wydrukowaæ!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Zmieñ katalog"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Wzorzec"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s nie jest katalogiem."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Skrzynki [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Zapisane [%s], wzorzec nazw plików: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Katalog [%s], wzorzec nazw plików: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Za³±cznikiem nie mo¿e zostaæ katalog!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "¯aden plik nie pasuje do wzorca"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Tworzenie skrzynek jest obs³ugiwane tylko dla skrzynek IMAP"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Usuwanie skrzynek jest obs³ugiwane tylko dla skrzynek IMAP"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Naprawdê usun±æ skrzynkê \"%s\"?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "Skrzynka zosta³a usuniêta."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "Skrzynka nie zosta³a usuniêta."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Zmieñ katalog na: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "B³±d przegl±dania katalogu."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Wzorzec nazw plików: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Sortowanie odwrotne wg (d)aty, (a)lfabetu, (w)ielko¶ci, ¿ad(n)e?"
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Sortowanie wg (d)aty, (a)lfabetu, (w)ielko¶ci, ¿ad(n)e?"
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "dawn"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Nazwa nowego pliku: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Nie mo¿na przegl±daæ tego katalogu"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "B³±d podczas próby przegl±dania pliku"
+
+#: buffy.c:442
+msgid "New mail in "
+msgstr "Nowa poczta w "
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: kolor nie jest obs³ugiwany przez Twój terminal"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: nie ma takiego koloru"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: nie ma takiego obiektu"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: polecenia mog± dotyczyæ tylko obiektów indeksu"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: za ma³o argumentów"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Brakuje argumentów."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: za ma³o argumentów"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: za ma³o argumentów"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: nie ma takiego atrybutu"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "za ma³o argumentów"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "za du¿o argumentów"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "domy¶lnie ustalone kolory nie s± obs³ugiwane"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "Weryfikowaæ podpis PGP?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Nie mo¿na utworzyæ pliku tymczasowego!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Nie mo¿na utworzyæ filtru wy¶wietlania"
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "Nie mo¿na skopiowaæ listu"
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr "Podpis S/MIME zosta³ pomy¶lnie zweryfikowany."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr "W³a¶ciciel certyfikatu nie odpowiada nadawcy."
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr "Podpis S/MIME NIE mo¿e zostaæ zweryfikowany."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "Podpis PGP zosta³ pomy¶lnie zweryfikowany."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "Podpis PGP NIE mo¿e zostaæ zweryfikowany."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Wprowad¼ polecenie: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Wy¶lij kopiê listu do: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Wy¶lij kopie zaznaczonych listów do: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "B³±d interpretacji adresu!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr "B³êdny IDN: '%s'"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Wy¶lij kopiê listu do %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Wy¶lij kopie listów do %s"
+
+#: commands.c:294 recvcmd.c:192
+msgid "Message not bounced."
+msgstr "Kopia nie zosta³a wys³ana."
+
+#: commands.c:294 recvcmd.c:192
+msgid "Messages not bounced."
+msgstr "Kopie nie zosta³y wys³ane."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Kopia zosta³a wys³ana."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Kopie zosta³y wys³ane."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "Nie mo¿na utworzyæ procesu filtru"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Wy¶lij przez potok do polecenia: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "Polecenie drukowania nie zosta³o skonfigurowane."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "Wydrukowaæ list?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Wydrukowaæ zaznaczone listy?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "List zosta³ wydrukowany"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Listy zosta³y wydrukowane"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "List nie zosta³ wydrukowany "
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "Listy nie zosta³y wydrukowane"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Odwr-Sort (d)ata/(a)utor/o(t)rzym/t(e)mat/d(o)/(w)±tek/(b)ez/ro(z)miar/wa(g)"
+"a?: "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Sortuj (d)ata/(a)utor/o(t)rzym/t(e)mat/d(o)/(w)±tek/(b)ez/ro(z)miar/wa(g)a?: "
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dateowbzg"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Polecenie pow³oki: "
+
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "Dekoduj-zapisz%s do skrzynki"
+
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "Dekoduj-kopiuj%s do skrzynki"
+
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "Rozszyfruj-zapisz%s do skrzynki"
+
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "Rozszyfruj-kopiuj%s do skrzynki"
+
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "Zapisz%s do skrzynki"
+
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "Kopiuj%s do skrzynki"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " zaznaczone"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Kopiowanie do %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "Przekonwertowaæ do %s przy wysy³aniu?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Typ \"Content-Type\" zmieniono na %s."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "Zestaw znaków zosta³ zmieniony na %s; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "bez konwersji"
+
+#: commands.c:914
+msgid "converting"
+msgstr "konwertowanie"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Brak za³±czników."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Wy¶lij"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Anuluj"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Do³±cz plik"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Opis"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Podpisz i zaszyfruj"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Zaszyfruj"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Podpisz"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Bez jakiegokolwiek szyfrowania"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " podpisz jako: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<domy¶lnie>"
+
+#: compose.c:149
+msgid "Encrypt with: "
+msgstr "Zaszyfruj u¿ywaj±c: "
+
+#: compose.c:165
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "PGP: (z)aszyfruj, podpi(s)z, podpisz j(a)ko, o(b)a, b(e)z PGP? "
+
+#: compose.c:166
+msgid "esabf"
+msgstr "zsabe"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Podpisz jako: "
+
+#: compose.c:227
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"S/MIME: (z)aszyfruj, (p)odpisz, (m)etoda, podp. (j)ako, (o)ba, (a)nuluj?"
+
+#: compose.c:228
+msgid "eswabf"
+msgstr "zpmjoa"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr "1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, (a)nuluj? "
+
+#: compose.c:238
+msgid "12345f"
+msgstr "12345a"
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] ju¿ nie istnieje!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] zmieniony. Zaktualizowaæ kodowanie?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Za³±czniki"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr "Ostrze¿enie: '%s' to b³êdny IDN."
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Nie mo¿esz usun±æ jedynego za³±cznika."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr "B³êdny IDN w \"%s\": '%s'"
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "Do³±czanie wybranych listów..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "Nie mo¿na do³±czyæ %s!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Otwórz skrzynkê w celu do³±czenia listu"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "Brak listów w tej skrzynce."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Zaznacz listy do do³±czenia!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Nie mo¿na do³±czyæ!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "Tylko tekstowe za³±czniki mo¿na przekodowaæ."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "Bie¿±cy za³acznik nie zostanie przekonwertowany."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "Bie¿±cy za³acznik zostanie przekonwertowany."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "B³êdne kodowanie."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Zapisaæ kopiê tego listu?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Zmieñ nazwê na: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "Nie mo¿na ustaliæ stanu (stat) %s: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Nowy plik: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Typ \"Content-Type\" musi byæ w postaci podstawowy/po¶ledni"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Nieznany typ \"Content-Type\" %s"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Nie mo¿na utworzyæ %s"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "Mamy tu b³±d tworzenia za³±cznika"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Zachowaæ ten list do pó¼niejszej obróbki i ewentualnej wysy³ki?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Zapisz list do skrzynki"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Zapisywanie listu do %s ..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "List zosta³ zapisany."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr "Wybrano ju¿ S/MIME. Anulowaæ wybór S/MIME i kontynuowaæ? "
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr "Wybrano ju¿ PGP. Anulowaæ wybór PGP i kontynuowaæ? "
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr " (bie¿±ca data i czas: %c)"
+
+#: crypt.c:71
+#, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- Wynik dzia³ania %s %s --]\n"
+
+#: crypt.c:86
+msgid "Passphrase(s) forgotten."
+msgstr "Has³o(a) zosta³o(y) zapomniane."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Wprowad¼ has³o PGP:"
+
+#: crypt.c:147
+msgid "Enter SMIME passphrase:"
+msgstr "Wprowad¼ has³o SMIME:"
+
+#: crypt.c:192
+msgid "Create a traditional (inline) PGP message?"
+msgstr "Wstawiæ dane PGP w tre¶ci (inline) czy jako za³±cznik (MIME)?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "Wywo³ywanie PGP..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr "Listy S/MIME bez wskazówek co do zawarto¶ci nie s± obs³ugiwane."
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr "Próba skopiowania kluczy PGP...\n"
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr "Próba skopiowania kluczy S/MIME...\n"
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- B³±d: Niespójna struktura multipart/signed ! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- B³±d: Nieznany protokó³ multipart/signed %s! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Ostrze¿enie: nie mo¿na zweryfikowaæ podpisów %s/%s --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- Poni¿sze dane s± podpisane --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Ostrze¿enie: Nie znaleziono ¿adnych podpisów. --]\n"
+"\n"
+
+#: crypt.c:924
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Koniec podpisanych danych --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "tak"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "nie"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Wyj¶æ z Mutta?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "nieznany b³±d"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Naci¶nij dowolny klawisz by kontynuowaæ..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " (przyci¶niêcie '?' wy¶wietla listê): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Nie otwarto ¿adnej skrzynki."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Brak listów."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "Skrzynka jest tylko do odczytu."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "Funkcja niedostêpna w trybie za³±czania"
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "Brak widocznych listów."
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "Nie mo¿na zapisaæ do skrzynki oznaczonej jako 'tylko do odczytu'!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "Zmiany zostan± naniesione niezw³ocznie po wyj¶ciu ze skrzynki."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Zmiany w skrzynce nie zostan± naniesione."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Wyjd¼"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Zapisz"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Wy¶lij"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Odpowiedz"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Grupie"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "Skrzynka zosta³a zmodyfikowana z zewn±trz. Flagi mog± byæ nieaktualne."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Uwaga - w bie¿±cej skrzynce pojawi³a siê nowa poczta!"
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "Skrzynka zosta³a zmodyfikowana z zewn±trz."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Brak zaznaczonych listów."
+
+#: curs_main.c:653 menu.c:896
+msgid "Nothing to do."
+msgstr "Brak akcji do wykonania."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Skocz do listu: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "Jako argument wymagany jest numer listu."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Ten list nie jest widoczny."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "B³êdny numer listu."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Usuñ listy pasuj±ce do wzorca: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "Wzorzec ograniczaj±cy nie zosta³ okre¶lony."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Ograniczenie: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Ogranicz do pasuj±cych listów: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Wyj¶æ z Mutta?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Zaznacz pasuj±ce listy: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Odtwórz pasuj±ce listy: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Odznacz pasuj±ce listy: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Otwórz skrzynkê tylko do odczytu"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Otwórz skrzynkê"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s nie jest skrzynk±."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Wyj¶æ z Mutta bez zapisywania zmian?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "To jest ostatni list."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Brak odtworzonych listów."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "To jest pierwszy list."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "Kontynuacja poszukiwania od pocz±tku."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "Kontynuacja poszukiwania od koñca."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Brak nowych listów"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Przeczytano ju¿ wszystkie listy"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " w trybie ograniczonego przegl±dania"
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "Nie mo¿na zmieniæ flagi 'wa¿ne' na serwerze POP."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Nie ma wiêcej w±tków."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "To pierwszy w±tek."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "W±tkowanie nie zosta³o w³±czone."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "W±tek zawiera nieprzeczytane listy."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "Nie mo¿na edytowaæ listów na serwerze POP."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\twstaw liniê zaczynaj±c± siê pojedyñczym ~\n"
+"~b u¿ytkownicy\tdodaj u¿ytkowników do pola BCC:\n"
+"~c u¿ytkownicy\tdodaj u¿ytkowników do pola Cc:\n"
+"~f listy\tdo³±cz listy\n"
+"~F listy\tto samo co ~f ale do³±cz te¿ nag³ówki\n"
+"~h\t\tedytuj nag³ówki\n"
+"~m listy\tdodaj i komentuj listy\n"
+"~M listy\tto samo co ~m ale do³±cz te¿ nag³ówki\n"
+"~p\t\tdrukuj list\n"
+"~q\t\tzapisz plik i wyjd¼ z edytora\n"
+"~r plik\t\twczytaj plik do edytora\n"
+"~t u¿ytkownicy\tdodaj u¿ytkowników do pola To:\n"
+"~u\t\todtwórz poprzedni± liniê\n"
+"~v\t\tedytuj list edytorem $visual\n"
+"~w plik\t\tzapisz list do pliku\n"
+"~x\t\tporzuæ zmiany i wyjd¼ z edytora\n"
+"~?\t\tten list\n"
+".\t\tstoj±c sama w linii koñczy wpisywanie\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: b³êdny numer listu.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Zakoñcz list . (kropk±) w osobnej linii)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "Brak skrzynki.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "List zawiera:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(kontynuuj)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "brak nazwy pliku.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Pusty list.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr "B³êdny IDN w %s: '%s'\n"
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: nieznane polecenie edytora (~? wy¶wietla pomoc)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "nie mo¿na utworzyæ tymczasowej skrzynki: %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "nie mo¿na zapisaæ tymczasowej skrzynki: %s"
+
+#: editmsg.c:101
+#, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "nie mo¿na zmniejszyæ tymczasowej skrzynki: %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "Plik listu jest pusty!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "List nie zosta³ zmieniony!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "Nie mo¿na otworzyæ pliku listu: %s"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Nie mo¿na dopisaæ do skrzynki: %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "B³±d. Zachowano plik tymczasowy: %s"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Ustaw flagê"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Wyczy¶æ flagê"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[--B³±d: Nie mo¿na wy¶wietliæ ¿adnego z fragmentów Multipart/Alternative! "
+"--]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Za³±cznik #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Typ: %s/%s, Kodowanie: %s, Wielko¶æ: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Podgl±d za pomoc± %s --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Wywo³ywanie polecenia podgl±du: %s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- Nie mo¿na uruchomiæ %s. --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Komunikaty b³êdów %s --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- B³±d: message/external-body nie ma ustawionego rodzaju dostêpu --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Ten za³±cznik typu %s/%s "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(o wielko¶ci %s bajtów) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "zosta³ usuniêty --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- na %s --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- nazwa: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Ten za³±cznik typu %s/%s nie jest zawarty, --]\n"
+
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+"[-- a podane ¼ród³o zewnêtrzne jest --]\n"
+"[-- nieaktualne. --]\n"
+
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr "[-- a podany typ dostêpu %s nie jest obs³ugiwany --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "B³±d: multipart/signed nie ma protoko³u."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "B³±d: multipart/encrypted nie ma parametru protoko³u!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Nie mo¿na otworzyæ pliku tymczasowego!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- typ %s/%s nie jest obs³ugiwany "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(u¿yj '%s' do ogl±dania tego fragmentu)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "(przypisz 'view-attachments' do klawisza!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: nie mo¿na do³±czyæ pliku"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "B£¡D: zg³o¶, proszê, ten b³±d"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<NIEZNANY>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Standardowe przypisania klawiszy:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Nie przypisane klawiszom funkcje:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Pomoc dla menu %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: Nie mo¿na wykonaæ \"unhook *\" wewn±trz innego polecenia hook."
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: nieznany typ polecenia hook: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: Nie mo¿na skasowaæ %s z wewn±trz %s."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "¯adna z metod uwierzytelniania nie jest dostêpna"
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Uwierzytelnianie (anonymous)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "Uwierzytelnianie anonymous nie powiod³o siê."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Uwierzytelnianie (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "Uwierzytelnianie CRAM-MD5 nie powiod³o siê."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Uwierzytelnianie (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "Uwierzytelnianie GSSAPI nie powiod³o siê."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "LOGIN zosta³ wy³±czony na tym serwerze."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Logowanie..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "Zalogowanie nie powiod³o siê."
+
+#: imap/auth_sasl.c:112
+#, c-format
+msgid "Authenticating (%s)..."
+msgstr "Uwierzytelnianie (%s)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "Uwierzytelnianie SASL nie powiod³o siê."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "%s jest b³êdn± ¶cie¿k± IMAP"
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr ""
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Pobieranie listy skrzynek..."
+
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "Brak skrzynki"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Nazwa skrzynki: "
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "Skrzynka musi zostaæ nazwana."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Skrzynka zosta³a utworzona."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "Skrzynka zosta³a zamkniêta"
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "B³±d krytyczny. Niezidentyfikowana ilo¶æ listów!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "Zamykanie po³±czenia do %s..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Zbyt stara wersja serwera IMAP. Praca z tym serwerem nie jest mo¿liwa."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr "Otrzymano nieoczekiwan± odpowied¼ od serwera: %s"
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "Po³±czyæ u¿ywaj±c TLS?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "Po³±czenie TSL nie zosta³o wynegocjowane"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "Wybieranie %s..."
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "B³±d otwarcia skrzynki"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Nie mo¿na dopisaæ do skrzynek IMAP na tym serwerze"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "Utworzyæ %s?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Zamykanie po³±czenia z serwerem IMAP..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "Zaznaczanie %d listów jako skasowanych..."
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "Skasowanie nie powiod³o siê"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Zapisywanie stanu flag listów... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Kasowanie listów na serwerze... "
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbox: skasowanie nie powiod³o siê"
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "Polecenie CLOSE nie powiod³o siê"
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "B³êdna nazwa skrzynki"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "Subskrybowanie %s..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "Odsubskrybowanie %s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "Nie mo¿na pobraæ nag³ówków z serwera IMAP w tej wersji."
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "Nie mo¿na utworzyæ pliku tymczasowego %s"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Pobieranie nag³ówków listów... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Pobieranie listu..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "B³êdny indeks listów. Spróbuj ponownie otworzyæ skrzynkê."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "£adowanie listu ..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "Kopiowanie %d listów do %s..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "Kopiowanie listu %d do %s..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "Kontynuowaæ?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "alias: brak adresu"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr "Ostrze¿enie: b³êdny IDN '%s' w aliasie '%s'.\n"
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "nieprawid³owy nag³ówek"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: nieznana metoda sortowania"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): b³±d w wyra¿eniu regularnym: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: nieznana zmienna"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "reset: nieprawid³owy prefiks"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "reset: nieprawid³owa warto¶æ"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s ustawiony"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s nie jest ustawiony"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: nieprawid³owy typ skrzynki"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: nieprawid³owa warto¶æ"
+
+#: init.c:1312
+#, c-format
+msgid "%s: Unknown type."
+msgstr "%s: nieznany typ"
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: nieprawid³owy typ"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Nie mo¿na ustaliæ stanu (stat) %s: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s nie jest zwyk³ym plikiem."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "B³±d w %s, linia %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: b³êdy w %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: wczytywanie zaniechane z powodu zbyt wielu b³êdów w %s"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: b³êdy w %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: zbyt wiele argumentów"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: nieznane polecenie"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "B³±d w poleceniu: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "nie mo¿na ustaliæ po³o¿enia katalogu domowego"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "nie mo¿na ustaliæ nazwy u¿ytkownika"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Wykryto pêtlê w makrze."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Klawisz nie zosta³ przypisany."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Klawisz nie zosta³ przypisany. Aby uzyskaæ pomoc przyci¶nij '%s'."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: zbyt wiele argumentów"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: nie ma takiego menu"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "pusta sekwencja klawiszy"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: zbyt wiele argumentów"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: nie ma takiej funkcji"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: pusta sekwencja klawiszy"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: zbyt wiele argumentów"
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: brak argumentów"
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s: brak takiej funkcji"
+
+#: keymap.c:912
+msgid "Enter keys (^G to abort): "
+msgstr "Wprowad¼ klucze (^G aby przerwaæ): "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr "Znak = %s, ósemkowo = %o, dziesiêtnie = %d"
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "pusta operacja"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr "koniec wykonywania warunkowego (noop)"
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "wymusza obejrzenie za³±czników poprzez plik 'mailcap'"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "obejrzyj za³±cznik jako tekst"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "prze³±cza podgl±d pod-listów listów z³o¿onych"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "przejd¼ na koniec strony"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "wy¶lij ponownie do innego u¿ytkownika"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "wybierz nowy plik w tym katalogu"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "ogl±daj plik"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "wy¶wietl nazwy aktualnie wybranych plików"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "zasubskrybuj bie¿±c± skrzynkê (tylko IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "odsubskrybuj bie¿±c± skrzynkê (tylko IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr ""
+"zmieñ tryb przegl±dania skrzynek: wszystkie/zasubskrybowane (tylko IMAP)"
+
+#: keymap_alldefs.h:18
+msgid "list mailboxes with new mail"
+msgstr "poka¿ skrzynki z now± poczt±"
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "zmieñ katalog"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "szukaj nowych listów w skrzynkach"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "do³±cz plik(i) do tego listu"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "do³±cz list(y) do tego listu"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "podaj tre¶æ pola BCC"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "podaj tre¶æ pola CC"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "edytuj opis za³±cznika"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "podaj sposób zakodowania za³±cznika"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "podaj nazwê pliku, do którego ma byæ skopiowany list"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "podaj nazwê pliku za³±cznika"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "podaj tre¶æ pola From:"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "edytuj tre¶æ listu i nag³ówków"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "edytuj tre¶æ listu"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "edytuj za³±cznik u¿ywaj±c pliku 'mailcap'"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "podaj tre¶æ pola Reply-To:"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "podaj tytu³ listu"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "podaj tre¶æ listy TO"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "utwórz now± skrzynkê (tylko IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "podaj rodzaj typu \"Content-Type\" za³±cznika"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "we¼ tymczasow± kopiê za³±cznika"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "sprawd¼ poprawno¶æ pisowni listu"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "utwórz nowy za³±cznik u¿ywaj±c pliku 'mailcap'"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "zdecyduj czy za³±cznik ma byæ przekodowywany"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "zapisz list aby wys³aæ go pó¼niej"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "zmieñ nazwê lub przenie¶ do³±czony plik"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "wy¶lij list"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "ustala czy wstawiaæ w tre¶ci czy jako za³±cznik"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "ustala czy usun±æ plik po wys³aniu"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "zaktualizuj informacjê o kodowaniu za³±cznika"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "zapisz list do skrzynki"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "kopiuj list do pliku/skrzynki"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "utwórz alias dla nadawcy"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "przesuñ pozycjê kursora na dó³ ekranu"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "przesuñ pozycjê kursora na ¶rodek ekranu"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "przesuñ pozycjê kursora na górê ekranu"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "utwórz rozkodowan± (text/plain) kopiê"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "utwórz rozkodowan± kopiê (text/plain) i usuñ"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "usuñ bie¿±cy list"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "usuñ bie¿±c± skrzynkê (tylko IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "usuñ wszystkie listy w podw±tku"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "usuñ wszystkie listy w w±tku"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "wy¶wietl pe³ny adres nadawcy"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "wy¶wielt list ze wszystkimi nag³ówkami"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "wy¶wietl list"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "edytuj list z nag³owkami"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "usuñ znak przed kursorem"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "przesuñ kursor jeden znak w lewo"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "przesuñ kursor do pocz±tku s³owa"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "przeskocz do pocz±tku linii"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "kr±¿ pomiêdzy skrzynkami pocztowymi"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "uzupe³nij nazwê pliku lub alias"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "uzupe³nij adres poprzez zapytanie"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "usuñ znak pod kursorem"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "przeskocz do koñca linii"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "przesuñ kursor o znak w prawo"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "przesuñ kursor do koñca s³owa"
+
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr "przewijaj w dó³ listê wydanych poleceñ"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "przewijaj do góry listê wydanych poleceñ"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "usuñ znaki pocz±wszy od kursora a¿ do koñca linii"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "usuñ znaki pocz±wszy od kursora a¿ do koñca s³owa"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "usuñ wszystkie znaki w linii"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "usuñ s³owo z przodu kursora"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "zacytuj nastêpny wpisany znak"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "zamieñ znak pod kursorem ze znakiem poprzednim"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "zamieñ piewsz± literê s³owa na wielk±"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "zamieñ litery s³owa na ma³e"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "zamieñ litery s³owa na wielkie"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "wprowad¼ polecenie pliku startowego (muttrc)"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "wprowad¼ wzorzec nazwy pliku"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "opu¶æ niniejsze menu"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "przefiltruj za³±cznik przez polecenie pow³oki"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "przesuñ siê do pierwszej pozycji"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "w³±cz dla listu flagê 'wa¿ne!'"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "prze¶lij dalej list opatruj±c go uwagami"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "wska¿ obecn± pozycjê"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "odpowiedz wszystkim adresatom"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "przewiñ w dó³ o pó³ strony"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "przewiñ w górê o pó³ strony"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "niniejszy ekran"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "przeskocz do konkretnej pozycji w indeksie"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "przejd¼ do ostatniej pozycji"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "opowiedz na wskazan± listê pocztow±"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "wykonaj makropolecenie"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "zredaguj nowy list"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "otwórz inn± skrzynkê"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "otwórz inn± skrzynkê w trybie tylko do odczytu"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "usuñ flagê ze statusem wiadomo¶ci"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "usuñ listy pasuj±ce do wzorca"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "wymusz± pobranie poczty z serwera IMAP"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "pobierz pocztê z serwera POP"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "przejd¼ do pierwszego listu"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "przejd¼ do ostatniego listu"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "poka¿ tylko listy pasuj±ce do wzorca"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "przejd¼ do nastêpnego nowego listu"
+
+#: keymap_alldefs.h:113
+msgid "jump to the next new or unread message"
+msgstr "przejd¼ do nastêpnego nowego lub nie przeczytanego listu"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "przejd¼ do nastêpnego podw±tku"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "przejd¼ do nastêpnego w±tku"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "przejd¼ do nastêpnego nieusuniêtego listu"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "przejd¼ do nastêpnego nieprzeczytanego listu"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "przejd¼ na pocz±tek w±tku"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "przejd¼ do poprzedniego w±tku"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "przejd¼ do poprzedniego podw±tku"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "przejd¼ do poprzedniego nieusuniêtego listu"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "przejd¼ do poprzedniego nowego listu"
+
+#: keymap_alldefs.h:123
+msgid "jump to the previous new or unread message"
+msgstr "przejd¼ do poprzedniego nowego lub nie przeczytanego listu"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "przejd¼ do poprzedniego nieprzeczytanego listu"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "zaznacz obecny w±tek jako przeczytany"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "zaznacz obecny podw±tek jako przeczytany"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "ustaw flagê statusu listu"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "zapisz zmiany do skrzynki"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "zaznacz listy pasuj±ce do wzorca"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "odtwórz listy pasuj±ce do wzorca"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "odznacz listy pasuj±ce do wzorca"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "przejd¼ do po³owy strony"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "przejd¼ do nastêpnej pozycji"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "przewiñ w dó³ o liniê"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "przejd¼ do nastêpnej strony"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "przejd¼ na koniec listu"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "ustala sposób pokazywania zaznaczonego tekstu"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "przeskocz poza zaznaczony fragment tekstu"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "przejd¼ na pocz±tek listu"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "przekieruj list/za³±cznik do polecenia pow³oki"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "przejd¼ do poprzedniej pozycji"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "przewiñ w górê o liniê"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "przejd¼ do poprzedniej strony"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "wydrukuj obecn± pozycjê"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "zapytaj zewnêtrzny program o adres"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "dodaj rezultaty nowych poszukiwañ do obecnych"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "zapisz zmiany do skrzynki i opu¶æ program pocztowy"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "wywo³aj od³o¿ony list"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "wyczy¶æ i od¶wie¿ ekran"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{wewnêtrzne}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "odpowiedz na list"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "u¿yj bie¿±cego listu jako wzorca dla nowych wiadomo¶ci"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "zapisz list/za³±cznik do pliku"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "szukaj wyra¿enia regularnego"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "szukaj wstecz wyra¿enia regularnego"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "szukaj nastêpnego pozytywnego rezultatu"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "szukaj wstecz nastêpnego pozytywnego rezultatu"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "ustala czy szukana fraza ma byæ zaznaczona kolorem"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "wywo³aj polecenie w podpow³oce"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "uszereguj listy"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "uszereguj listy w odwrotnej kolejno¶ci"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "zaznacz bie¿±c± pozycjê"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "wykonaj nastêpne polecenie na zaznaczonych listach"
+
+#: keymap_alldefs.h:164
+msgid "apply next function ONLY to tagged messages"
+msgstr "wykonaj nastêpne polecenie TYLKO na zaznaczonych listach"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "zaznacz bie¿±cy podw±tek"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "zaznacz bie¿±cy w±tek"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "ustaw flagê listu na 'nowy'"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "ustala czy skrzynka bêdzie ponownie zapisana"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "ustala czy przegl±daæ skrzynki czy wszystkie pliki"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "przejd¼ na pocz±tek strony"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "odtwórz bie¿±c± pozycjê listy"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "odtwórz wszystkie listy z tego w±tku"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "odtwórz wszystkie listy z tego podw±tku"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "poka¿ wersjê i datê programu pocztowego Mutt"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "poka¿ za³±cznik u¿ywaj±c, je¶li to niezbêdne, pliku 'mailcap'"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "poka¿ za³±czniki MIME"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr "wy¶wietl kod wprowadzonego znaku"
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "poka¿ bie¿±cy wzorzec ograniczaj±cy"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "zwiñ/rozwiñ bie¿±cy w±tek"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "zwiñ/rozwiñ wszystkie w±tki"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "do³±cz w³asny klucz publiczny PGP"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "poka¿ opcje PGP"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "wy¶lij w³asny klucz publiczny PGP"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "zweryfikuj klucz publiczny PGP"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "obejrzyj identyfikator u¿ytkownika klucza"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "u¿yj starej wersji pgp"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "Potwierd¼ skonstruowany ³añcuch"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "Dodaj remailera do ³añcucha"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "Wprowadz remailera do ³añcucha"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "Usuñ remailera z ³añcucha"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "Wybierz poprzedni element ³añcucha"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "Wybierz nastepny element ³añcucha"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "przeslij list przez ³añcuch anonimowych remailerów typu mixmaster"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "utwórz rozszyfrowana± kopiê i usuñ orygina³"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "utwórz rozszyfrowan± kopiê"
+
+#: keymap_alldefs.h:196
+msgid "wipe passphrase(s) from memory"
+msgstr "wyma¿ has³o z pamiêci operacyjnej"
+
+#: keymap_alldefs.h:197
+msgid "extract supported public keys"
+msgstr "kopiuj klucze publiczne"
+
+#: keymap_alldefs.h:198
+msgid "show S/MIME options"
+msgstr "poka¿ opcje S/MIME"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Brak pamiêci!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"Aby powiadomiæ autorów, proszê pisaæ na <mutt-dev@mutt.org>.\n"
+"Aby zg³osiæ b³±d u¿yj programu flea(1).\n"
+
+#: main.c:50
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins i inni.\n"
+"Program nie jest objêty ¯ADN¡ gwarancj±; szczegó³y poznasz pisz±c 'mutt -"
+"vv'.\n"
+"Mutt jest darmowym oprogramowaniem, jeste¶ jak najbardziej uprawniony do\n"
+"jego redystrybucji pod pewnymi warunkami, szczegó³y poznasz pisz±c 'mutt -"
+"vv'.\n"
+
+#: main.c:56
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"Wielu innych twórców, nie wspomnianych tutaj,\n"
+"wnios³o wiele nowego kodu, poprawek i sugestii.\n"
+"\n"
+"   Ten program jest darmowy; mo¿esz rozprowadzaæ go i/lub modyfikowaæ\n"
+"   zachowuj±c warunki Powszechnej Licencji Publicznej GNU (General Public\n"
+"   Licence), opublikowanej przez Free Software Foundation, w wersji 2\n"
+"   lub wy¿szej.\n"
+"\n"
+"   Program ten jest rozprowadzany w nadziei, ¿e bêdzie przydatny,\n"
+"   ale BEZ ¯ADNYCH GWARANCJI, wyra¿onych wprost lub domy¶lnie nawet,\n"
+"   w tym gwarancji mo¿liwo¶ci SPRZEDA¯Y i PRZYDATNO¦CI DO KONKRETNYCH "
+"CELÓW.\n"
+"   Szczegó³y znajdziesz w Powszechnej Licencji Publicznej GNU.\n"
+"\n"
+"   W dokumentacji tego programu powinna znajdowaæ siê kopia Powszechnej\n"
+"   Licencji Publicznej GNU. Je¶li tak nie jest, napisz do Free Software\n"
+"   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n"
+
+#: main.c:94
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"u¿ycie: mutt [ -nRyzZ ] [ -e <polec> ] [ -F <plik> ] [ -m <typ> ] [ -f "
+"<plik> ]\n"
+"        mutt [ -nR ] [ -e <polec> ] [ -F <plik> ] -Q <pytanie> [ -Q "
+"<pytanie> ] [...]\n"
+"        mutt [ -nR ] [ -e <polec> ] [ -F <plik> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"        mutt [ -nx ] [ -e <polec> ] [ -F <plik> ] [ -a <plik> ] [ -H "
+"<plik> ] [ -i <plik> ] [ -s <tytu³> ] [ -b <adres> ] [ -c <adres> ] <adres> "
+"[ ... ]\n"
+"        mutt [ -n ]  [ -e <polec> ] [ -F <plik> ] -p\n"
+"        mutt -v[v]\n"
+"\n"
+"opcje:\n"
+"  -A <alias>\tu¿yj aliasu\n"
+"  -a <plik>\tdo³±cz plik do listu\n"
+"  -b <adres>\tpodaj adres blind carbon-copy (BCC)\n"
+"  -c <adres>\tpodaj adres carbon-copy (CC)\n"
+"  -e <polec>\tpodaj polecenie do wykonania po inicjalizacji\n"
+"  -f <plik>\totwórz najpierw t± skrzynkê\n"
+"  -F <plik>\tu¿yj alternatywnego pliku muttrc\n"
+"  -H <plik>\tczytaj nag³ówki z pliku\n"
+"  -i <plik>\twstaw ten plik w odpowiedzi\n"
+"  -m <typ>\tpodaj typ skrzynki\n"
+"  -n\t\tnie czytaj systemowego Muttrc\n"
+"  -p\t\tponownie edytuj zarzucony list\n"
+"  -Q <zmienna>\tpodaj warto¶æ zmiennej konfiguracyjnej\n"
+"  -R\t\totwórz skrzynkê w trybie tylko do odczytu\n"
+"  -s <tytu³>\tpodaj tytu³ (musi byæ w apostrofach, je¶li zawiera spacje)\n"
+"  -v\t\tpoka¿ wersjê i wkompilowane parametry\n"
+"  -x\t\tsymuluj zachowanie mailx\n"
+"  -y\t\twybierz skrzynkê podan± w twojej li¶cie `mailboxes'\n"
+"  -z\t\twyjd¼ natychmiast je¶li brak nowych listów w skrzynce\n"
+"  -Z\t\totwórz pierwsz± skrzynkê z nowym listem i wyjd¼ je¶li brak nowych\n"
+"  -h\t\tten tekst"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Parametry kompilacji:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "B³±d inicjalizacji terminala."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Diagnostyka b³êdów na poziomie %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "Diagnostyka b³êdów nie zosta³a wkompilowane. Zignorowano.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s nie istnieje. Utworzyæ?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "Nie mo¿na utworzyæ %s: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Nie wskazano adresatów listu.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: nie mo¿na do³±czyæ pliku.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Brak skrzynki z now± poczt±."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Nie zdefiniowano po³o¿enia skrzynek z now± poczt±."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "Skrzynka pocztowa jest pusta."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Czytanie %s... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "Skrzynka jest uszkodzona!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "Skrzynka pocztowa zosta³a uszkodzona!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "B³±d! Nie mo¿na ponownie otworzyæ skrzynki!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Nie mo¿na zablokowaæ skrzynki pocztowej!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+"sync: skrzynka zmodyfikowana, ale ¿aden z listów nie zosta³ zmieniony! "
+"(zg³o¶ ten b³±d)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Zapisywanie listów... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "Wprowadzanie zmian..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Zapis niemo¿liwy! Zapisano czê¶æ skrzynki do %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "Nie mo¿na ponownie otworzyæ skrzynki pocztowej!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Ponowne otwieranie skrzynki..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Przeskocz do: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Niew³a¶ciwy numer indeksu."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Brak pozycji."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Nie mo¿na ni¿ej przewin±æ."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Nie mo¿na wy¿ej przewin±æ."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "To jest ostatnia strona."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "To jest pierwsza strona."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "Pokazana jest pierwsza pozycja."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "Pokazana jest ostatnia pozycja."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "To jest ostatnia pozycja."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "To jest pierwsza pozycja."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Szukaj frazy: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Szukaj frazy w przeciwnym kierunku: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Nie ustalono wzorca poszukiwañ."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Nic nie znaleziono."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "Brak zaznaczonych pozycji listy."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "Poszukiwanie nie jest mo¿liwe w tym menu."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "Przeskakiwanie nie jest mo¿liwe w oknach dialogowych."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Zaznaczanie nie jest obs³ugiwane."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "Czytanie %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr "maildir_commit_message(): nie mo¿na nadaæ plikowi daty"
+
+#: muttlib.c:835
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "Ten plik jest katalogim, zapisaæ w nim? [(t)ak, (n)ie, (w)szystkie]"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr "tnw"
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "Ten plik jest katalogim, zapisaæ w nim?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Plik w katalogu: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "Plik istnieje: (n)adpisaæ, (d)o³±czyæ czy (a)nulowaæ?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "nda"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "Nie mo¿na zapisaæ listu w skrzynce POP."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s nie jest skrzynk±!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Dopisaæ listy do %s?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "Po³±czenie z %s zosta³o zakoñczone"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "Protokó³ SSL nie jest dostêpny."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "Polecenie 'preconnect' nie powiod³o siê."
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "B³±d komunikacji z %s (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr "B³êdny IDN \"%s\"."
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "Wyszukiwanie %s..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Host \"%s\" nie zosta³ znaleziony"
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "£±czenie z %s..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "Po³±czenie z %s (%s) nie zosta³o ustanowione."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "Zgromadzenie odpowiedniej ilo¶ci entropii nie powiod³o siê"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "Wype³nianie zbiornika entropii: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "Prawa dostêpu do %s mog± powodowaæ problemy z bezpieczeñstwem!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "Protokó³ SSL nie mo¿e zostaæ u¿yty ze wzglêdu na brak entropii"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "B³±d wej¶cia/wyj¶cia"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "nieznany b³±d protoko³u"
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "SSL nie powiod³o siê: %s"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "Nie mo¿na pobraæ certyfikatu z docelowego hosta"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "Po³±czenie SSL przy u¿yciu %s (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "Nieznany"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[niemo¿liwe do wyznaczenia]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[b³êdna data]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "Certyfikat serwera nie uzyska³ jeszcze wa¿no¶ci"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "Certyfikat serwera utraci³ wa¿no¶æ"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Ten certyfikat nale¿y do:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Ten certyfikat zosta³ wydany przez:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Ten certyfikat jest wa¿ny"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   od %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "     do %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Odcisk: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "sprawdzanie certyfikatu SSL"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(o)drzuæ, zaakceptuj (r)az, (a)kceptuj zawsze"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "ora"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(o)drzuæ, zaakceptuj (r)az"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "or"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Wyj¶cie  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Ostrze¿enie: Nie mo¿na zapisaæ certyfikatu"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "Certyfikat zosta³ zapisany"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Licznik blokad przekroczony, usun±æ blokadê %s?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "Nie mo¿na za³o¿yæ blokady na %s.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "Czas oczekiwania na blokadê typu 'fcntl' zosta³ przekroczony!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Oczekiwanie na blokadê typu 'fcntl'... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "Czas oczekiwania na blokadê typu 'flock' zosta³ przekroczony!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Oczekiwanie na blokadê typu 'flock'... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "Nie mo¿na zablokowaæ %s\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "Czytanie %s..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "Zapisywanie %s..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "Synchronizacja skrzynki %s nie powod³a siê!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Przenie¶æ przeczytane listy do %s?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Usun±æ NIEODWO£ALNIE %d zaznaczony list?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Usun±æ NIEODWO£ALNIE %d zaznaczone listy?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Przenoszenie przeczytanych listów do %s..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "Skrzynka pozosta³a niezmieniona."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d zapisano, %d przeniesiono, %d usuniêto."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d zapisano, %d usuniêto."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr " Naci¶nij '%s' aby zezwoliæ na zapisanie"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "U¿yj 'toggle-write' by ponownie w³±czyæ zapisanie!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "Skrzynka jest oznaczona jako niezapisywalna. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "Zmiany w skrzynce naniesiono."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Nie mo¿na zapisaæ listu"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "Nie ma takiego polecenia w tym menu."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "PoprzStr"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "NastStr"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Zobacz za³."
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Nastêpny"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "Pokazany jest koniec listu."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "Pokazany jest pocz±tek listu."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Szukaj w przeciwnym kierunku: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Szukaj: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "Pomoc jest w³a¶nie wy¶wietlana."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "Nie ma wiêcej cytowanego tekstu."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "Brak tekstu za cytowanym fragmentem."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "wieloczê¶ciowy list nie posiada wpisu ograniczaj±cego!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "B³±d w wyra¿eniu: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Niew³a¶ciwy dzieñ miesi±ca: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Niew³a¶ciwy miesi±c: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "B³êdna data wzglêdna: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "b³±d w wyra¿eniu"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "b³±d we wzorcu: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: b³êdne polecenie"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: nie obs³ugiwane w tym trybie"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "brakuj±cy parametr"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "niesparowane nawiasy: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "pusty wzorzec"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "b³±d: nieznany op %d (zg³o¶ ten b³±d)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Kompilacja wzorca poszukiwañ..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Wykonywanie polecenia na pasuj±cych do wzorca listach..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "¯aden z listów nie spe³nia kryteriów."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "Poszukiwanie dotar³o do koñca bez znalezienia frazy"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "Poszukiwanie dotar³o do pocz±tku bez znalezienia frazy"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Przeszukiwanie przerwano."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "Has³o PGP zosta³o zapomniane."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- B³±d: nie mo¿na utworzyæ podprocesu PGP! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- Koniec komunikatów PGP --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- POCZ¡TEK LISTU PGP --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- POCZ¡TEK KLUCZA PUBLICZNEGO PGP --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- POCZ¡TEK LISTU PODPISANEGO PGP --]\n"
+"\n"
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- KONIEC LISTU PGP --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- KONIEC PUBLICZNEGO KLUCZA PGP --]\n"
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- KONIEC LISTU PODPISANEGO PGP --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- B³±d: nie mo¿na odnale¼æ pocz±tku listu PGP! --]\n"
+"\n"
+
+#: pgp.c:662
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "B³±d wewnêtrzny. Zg³o¶ go pod adres <roessler@does-not-exist.org>."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- B³±d: nie mo¿na utworzyæ podprocesu PGP! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- B³±d: uszkodzony list PGP/MIME! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- B³±d: nie mo¿na utworzyæ pliku tymczasowego! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- Nastêpuj±ce dane s± zaszyfrowane PGP/MIME --]\n"
+"\n"
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- Koniec danych zaszyfrowanych PGP/MIME --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "Nie mo¿na otworzyæ podprocesu PGP!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "U¿yæ klucza numer \"%s\" dla %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "Wprowad¼ numer klucza dla %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "Nie mo¿na wywo³aæ PGP"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "Sprowadzam klucz PGP..."
+
+#: pgpkey.c:486
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "Wszystkie pasuj±ce klucze wygas³y, zosta³y wy³±czone lub wyprowadzone."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Wybór  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Sprawd¼ klucz  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "Klucze PGP dla <%s>."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "Klucze PGP dla \"%s\"."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "Nie mo¿na otworzyæ /dev/null"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Nie mo¿na utworzyæ pliku tymczasowego"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "Identyfikator klucza: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "Nie mo¿na u¿yæ tego klucza: wygas³, zosta³ wy³±czony lub wyprowadzony."
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "Identyfikator wygas³, zosta³ wy³±czony lub wyprowadzony."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "Poziom wa¿no¶ci tego identyfikatora nie zosta³ okre¶lony."
+
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "Nieprawid³owy identyfikator."
+
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "Ten identyfikator jest tylko czê¶ciowo wa¿ny."
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s Czy naprawdê chcesz u¿yæ tego klucza?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Podaj identyfikator klucza: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "Wywo³ywanie pgp..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "Klucz PGP %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Wyszukiwanie odpowiednich kluczy dla \"%s\"..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "Polecenie TOP nie jest obs³ugiwane przez serwer."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "Nie mo¿na zapisaæ nag³ówka do pliku tymczasowego!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "Polecenie UIDL nie jest obs³ugiwane przez serwer."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "%s jest b³êdn± ¶cie¿k± POP"
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "Pobieranie spisu listów..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "Nie mo¿na zapisaæ listu do pliku tymczasowego!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "Poszukiwanie nowej poczty..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "Serwer POP nie zosta³ wskazany."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "Brak nowej poczty w skrzynce POP."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "Usun±æ listy z serwera?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Czytanie nowych listów (%d bajtów)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "B³±d podczas zapisywania skrzynki!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [przeczytano %d spo¶ród %d listów]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "Serwer zamkn±³ po³±czenie!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Uwierzytelnianie (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Uwierzytelnianie (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "Uwierzytelnianie APOP nie powiod³o siê."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "Polecenie USER nie jest obs³ugiwane przez serwer."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "Nie mo¿na zostawiæ listów na serwerze."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "B³±d ³±czenia z serwerem: %s"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "Zamykanie po³±czenia z serwerem POP..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Sprawdzanie indeksów listów..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Po³±czenie z serwerem POP zosta³o zerwane. Po³±czyæ ponownie?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Od³o¿one listy"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "Brak od³o¿onych listów."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "Nieprawid³owy nag³ówek PGP"
+
+#: postpone.c:479
+msgid "Illegal S/MIME header"
+msgstr "Nieprawid³owy nag³ówek S/MIME"
+
+#: postpone.c:554
+msgid "Decryption failed."
+msgstr "Odszyfrowanie nie powiod³o siê."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Nowe pytanie"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Utwórz alias"
+
+#: query.c:48
+msgid "Search"
+msgstr "Szukaj"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Oczekiwanie na odpowied¼..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Pytanie nie zosta³o okre¶lone."
+
+#: query.c:286
+msgid "Query"
+msgstr "Pytanie"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Pytanie:"
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Pytanie '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Potok"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Drukuj"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Zapisywanie..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Za³±cznik zosta³ zapisany."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "UWAGA! Nadpisujesz plik %s, kontynuowaæ?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Za³±cznik przefiltrowany."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Przefiltruj przez: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Wy¶lij przez potok do: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "Nie wiem jak wydrukowaæ %s za³±czników!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Wydrukowaæ zaznaczony(e) za³±cznik(i)?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Wydrukowaæ za³±cznik?"
+
+#: recvattach.c:938
+msgid "Can't decrypt encrypted message!"
+msgstr "Nie mo¿na odszyfrowaæ zaszyfrowanego listu!"
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Za³±czniki"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "Brak pod-listów!"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "Nie mo¿na skasowaæ za³±cznika na serwerze POP."
+
+#: recvattach.c:1056
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "Usuwanie za³±czników z zaszyfrowanych listów jest niemo¿liwe."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Mo¿liwe jest jedynie usuwanie za³±czników multipart."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Mo¿esz wysy³aæ kopie tylko listów zgodnych z RFC 822."
+
+#: recvcmd.c:213
+msgid "Error bouncing message!"
+msgstr "B³±d wysy³ania kopii!"
+
+#: recvcmd.c:213
+msgid "Error bouncing messages!"
+msgstr "B³±d wysy³ania kopii!"
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Nie mo¿na otworzyæ pliku tymczasowego %s."
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "Przes³aæ dalej jako za³±czniki?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+"Nie mo¿na zdekodowaæ zaznaczonych za³. Przes³aæ pozosta³e dalej (MIME)?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Przes³aæ dalej w trybie MIME?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "Nie mo¿na utworzyæ %s."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Nie mo¿na znale¼æ ¿adnego z zaznaczonych listów."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "Nie znaleziono list pocztowych!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+"Nie mo¿na zdekodowaæ wszystkich wybranych za³. Za³±czyæ (MIME) pozosta³e?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Dodaj"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Wprowad¼"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Usuñ"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "OK"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "Nie mo¿na pobraæ type2.list mixmastera!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Wybierz ³añcuch remailera."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "B³±d: nie mo¿na u¿yæ %s jako finalnego remailera ³añcucha."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "£añcuchy mixmasterów mog± mieæ maks. %d elementów."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "£añcuch remailera jest pusty."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "Ju¿ zdefiniowano pierwszy element ³añcucha."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "Ju¿ zdefiniowano ostatni element ³añcucha."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Mixmaster nie akceptuje nag³ówków Cc i Bcc."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr "Ustaw poprawn± warto¶æ hostname je¶li chcesz u¿ywaæ mixmastera!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "B³±d podczas wysy³ania listu, proces potomny zwróci³ %d.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "B³±d podczas wysy³ania listu."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "B³êdnie sformatowane pole dla typu %s w \"%s\" linii %d"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Brak ¶cie¿ki do pliku specjalnego 'mailcap'"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "brak wpisu w 'mailcap' dla typu %s"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: za ma³o argumentów"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: zbyt wiele argumentów"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Brak tematu, zaniechaæ wys³ania?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Brak tematu, zaniechano wys³ania listy."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Odpowiedzieæ %s%s?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "Follow-up do %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "¯aden z zaznaczonych listów nie jest widoczny!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Zacytowaæ oryginalny list w odpowiedzi?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Wczytywanie cytowanego listu..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "Nie mo¿na do³±czyæ wszystkich wskazanych listów!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "Przes³aæ dalej jako za³±cznik?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Przygotowywanie listu do przes³ania dalej..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Wywo³aæ od³o¿ony list?"
+
+#: send.c:1336
+msgid "Edit forwarded message?"
+msgstr "Edytowaæ przesy³any list?"
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "List nie zosta³ zmieniony. Zaniechaæ wys³ania?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "List nie zosta³ zmieniony. Zaniechano wys³ania."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "List nie zosta³ wys³any."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "List od³o¿ono."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Nie wskazano adresatów!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Nie wskazano adresatów!"
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Brak tematu, zaniechaæ wys³ania?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Brak tematu."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Wysy³anie listu..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Wys³anie listu nie powiod³o siê."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Poczta zosta³a wys³ana."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Wysy³anie w tle."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "Brak parametru granicznego! (zg³o¶ ten b³±d)"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s ju¿ nie istnieje!"
+
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "%s nie jest zwyk³ym plikiem."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "Nie mo¿na otworzyæ %s"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "B³±d podczas wysy³ania listu, proces potomny zwróci³ %d (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Wynik procesu dostarczania"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr "B³êdny IDN %s w trakcie przygotowywania resent-from."
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s... Koniec pracy.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "Otrzymano sygna³ %s... Koniec pracy.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Otrzymano sygna³ %d... Koniec pracy.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr "Zaufany   "
+
+#: smime.c:303
+msgid "Verified  "
+msgstr "Zweryfikowany  "
+
+#: smime.c:306
+msgid "Unverified"
+msgstr "Niezweryfikowany"
+
+#: smime.c:309
+msgid "Expired   "
+msgstr "Wygas³y   "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr "Wyprowadzony   "
+
+#: smime.c:315
+msgid "Invalid   "
+msgstr "B³êdny   "
+
+#: smime.c:318
+msgid "Unknown   "
+msgstr "Nieznany   "
+
+#: smime.c:347
+msgid "Enter keyID: "
+msgstr "Podaj numer klucza: "
+
+#: smime.c:370
+#, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "Certyfikat S/MIME dla \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr "Identyfikator %s nie zosta³ zweryfikowany. Mimo to u¿yæ dla %s ?"
+
+#: smime.c:523 smime.c:592
+#, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "U¿yæ nie zaufanego identyfikatora %s dla %s ?"
+
+#: smime.c:526 smime.c:595
+#, c-format
+msgid "Use ID %s for %s ?"
+msgstr "U¿yæ identyfikatora %s dla %s ?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+"Ostrze¿enie: nie oke¶lono poziomu zaufania dla %s (dow. klawisz by "
+"kontynuowaæ)."
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr "Brak (poprawnych) certyfikatów dla %s."
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "B³±d: nie mo¿na wywo³aæ podprocesu OpenSSL!"
+
+#: smime.c:1197
+msgid "no certfile"
+msgstr "brak certyfikatu"
+
+#: smime.c:1200
+msgid "no mbox"
+msgstr "brak skrzynki"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr "Brak wyników dzia³ania OpenSSL..."
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr "Ostrze¿enie: nie znaleziono certyfikatu po¶redniego CA."
+
+#: smime.c:1426
+msgid "Can't open OpenSSL subprocess!"
+msgstr "B³±d: nie mo¿na wywo³aæ podprocesu OpenSSL!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr "Brak wyników dzia³ania OpenSSL..."
+
+#: smime.c:1629 smime.c:1751
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- Koniec komunikatów OpenSSL --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- B³±d: nie mo¿na utworzyæ podprocesu OpenSSL! --]\n"
+
+#: smime.c:1755
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr "[-- Nastêpuj±ce dane s± zaszyfrowane S/MIME --]\n"
+
+#: smime.c:1758
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr "[-- Poni¿sze dane s± podpisane S/MIME --]\n"
+
+#: smime.c:1822
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- Koniec danych zaszyfrowanych S/MIME. --]\n"
+
+#: smime.c:1824
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- Koniec danych podpisanych S/MIME. --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Sortowanie poczty w skrzynce..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "Nie znaleziono funkcji sortowania! (zg³o¶ ten b³±d)"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(brak skrzynki)"
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr ""
+"Pierwszy list w±tku nie jest widoczny w trybie ograniczonego przegl±dania."
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "Pierwszy list tego w±tku nie jest dostêpny."
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
new file mode 100644 (file)
index 0000000..6ba375e
Binary files /dev/null and b/po/pt_BR.gmo differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644 (file)
index 0000000..9434d35
--- /dev/null
@@ -0,0 +1,4566 @@
+# Mutt 0.95.6
+msgid ""
+msgstr ""
+"Project-Id-Version: 1.1.5i\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2000-03-05 01:14-0300\n"
+"Last-Translator: Marcus Brito <marcus@visaotec.com.br>\n"
+"Language-Team: LIE-BR (http://lie-br.conectiva.com.br)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding:\n"
+
+#: account.c:144
+#, fuzzy, c-format
+msgid "Username at %s: "
+msgstr "Renomear para: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "Senha para %s@%s: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Sair"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Apagar"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Restaurar"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Escolher"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Ajuda"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "Você não tem apelidos!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Apelidos"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Apelidar como: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "Você já tem um apelido definido com aquele nome!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr ""
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Endereço: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr ""
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Nome pessoal:"
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s =%s] Aceita?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Salvar em arquivo:"
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Apelido adicionado."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Não pude casar o nome, continuo?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "Entrada de composição no mailcap requer %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "Erro ao executar \"%s\"!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Erro ao abrir o arquivo para interpretar os cabeçalhos."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Erro ao abrir o arquivo para retirar cabeçalhos."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr ""
+"Nenhuma entrada de composição no mailcap para %s, criando entrada vazia."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "Entrada de edição no mailcap requer %%s"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "Nenhuma entrada de edição no mailcap para %s"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "Nenhuma entrada no mailcap de acordo encontrada. Exibindo como texto."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "Tipo MIME não definido. Não é possível visualizar o anexo."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Não é possível criar o filtro."
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Não foi possível criar um filtro"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "Erro de gravação!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Eu não sei como imprimir isto!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Diretório"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Máscara"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s não é um diretório."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Caixas [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "[%s] assinada, Máscara de arquivos: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Diretório [%s], Máscara de arquivos: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Não é possível anexar um diretório"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Nenhum arquivo casa com a máscara"
+
+#: browser.c:856
+#, fuzzy
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "A remoção só é possível para caixar IMAP"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "A remoção só é possível para caixar IMAP"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Deseja mesmo remover a caixa \"%s\"?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "Caixa de correio removida."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "Caixa de correio não removida."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Mudar para: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Erro ao examinar diretório."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Máscara de arquivos: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Ordem inversa por (d)ata, (a)lfa, (t)amanho ou (n)ão ordenar? "
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Ordenar por (d)ata, (a)lfa, (t)amanho ou (n)ão ordenar? "
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "datn"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Nome do novo arquivo: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Não é possível visualizar um diretório"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Erro ao tentar exibir arquivo"
+
+#: buffy.c:442
+#, fuzzy
+msgid "New mail in "
+msgstr "Novas mensagens em %s"
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: o terminal não aceita cores"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: não existe tal cor"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: não existe tal objeto"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: comando válido apenas para o objeto índice"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: poucos argumentos"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Faltam argumentos."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: poucos argumentos"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: poucos argumentos"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: não existe tal atributo"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "poucos argumentos"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "muitos argumentos"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "cores pré-definidas não suportadas"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "Verificar assinatura de PGP?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Não foi possível criar um arquivo temporário!"
+
+#: commands.c:126
+#, fuzzy
+msgid "Cannot create display filter"
+msgstr "Não é possível criar o filtro."
+
+#: commands.c:146
+#, fuzzy
+msgid "Could not copy message"
+msgstr "Não foi possível enviar a mensagem."
+
+#: commands.c:182
+#, fuzzy
+msgid "S/MIME signature successfully verified."
+msgstr "Assinatura PGP verificada com sucesso."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr ""
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+#, fuzzy
+msgid "S/MIME signature could NOT be verified."
+msgstr "Assinatura PGP verificada com sucesso."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "Assinatura PGP verificada com sucesso."
+
+#: commands.c:200
+#, fuzzy
+msgid "PGP signature could NOT be verified."
+msgstr "Assinatura PGP verificada com sucesso."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Comando: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Repetir mensagem para: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Repetir mensagens marcadas para: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "Erro ao interpretar endereço!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr ""
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Repetir mensagem para %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Repetir mensagens para %s"
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Message not bounced."
+msgstr "Mensagem repetida."
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Messages not bounced."
+msgstr "Mensagens repetidas."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Mensagem repetida."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Mensagens repetidas."
+
+#: commands.c:381 commands.c:415 commands.c:432
+#, fuzzy
+msgid "Can't create filter process"
+msgstr "Não foi possível criar um filtro"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Passar por cano ao comando: "
+
+#: commands.c:478
+#, fuzzy
+msgid "No printing command has been defined."
+msgstr "Nenhuma caixa de mensagem para recebimento definida."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "Imprimir mensagem?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Imprimir mensagens marcadas?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "Mensagem impressa"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Mensagens impressas"
+
+#: commands.c:494
+#, fuzzy
+msgid "Message could not be printed"
+msgstr "Mensagem impressa"
+
+#: commands.c:495
+#, fuzzy
+msgid "Messages could not be printed"
+msgstr "Mensagens impressas"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Ordem-Rev (d)ata/(f)rm/(r)eceb/(a)sst/(p)ara/dis(c)/de(s)ord/(t)am/r(e)fs?: "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Ordem (d)ata/(f)rm/(r)eceb/(a)sst/(p)ara/dis(c)/de(s)ord/(t)am/r(e)fs?: "
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dfrapcste"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Comando do shell: "
+
+#: commands.c:701
+#, fuzzy, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "%s%s para caixa de mensagens"
+
+#: commands.c:702
+#, fuzzy, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "%s%s para caixa de mensagens"
+
+#: commands.c:703
+#, fuzzy, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "%s%s para caixa de mensagens"
+
+#: commands.c:704
+#, fuzzy, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "%s%s para caixa de mensagens"
+
+#: commands.c:705
+#, fuzzy, c-format
+msgid "Save%s to mailbox"
+msgstr "%s%s para caixa de mensagens"
+
+#: commands.c:705
+#, fuzzy, c-format
+msgid "Copy%s to mailbox"
+msgstr "%s%s para caixa de mensagens"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " marcada"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Copiando para %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr ""
+
+#: commands.c:910
+#, fuzzy, c-format
+msgid "Content-Type changed to %s."
+msgstr "Conectando a %s..."
+
+#: commands.c:912
+#, fuzzy, c-format
+msgid "Character set changed to %s; %s."
+msgstr "O conjunto de caracteres %s é desconhecido."
+
+#: commands.c:914
+msgid "not converting"
+msgstr ""
+
+#: commands.c:914
+msgid "converting"
+msgstr ""
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Não há anexos."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Enviar"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Cancelar"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Anexar arquivo"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Descrição"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Assinar, Encriptar"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Encriptar"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Assinar"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Nada"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " assinar como: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<padrão>"
+
+#: compose.c:149
+#, fuzzy
+msgid "Encrypt with: "
+msgstr "Encriptar"
+
+#: compose.c:165
+#, fuzzy
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"(e)ncripa, a(s)sina, assina (c)omo, (a)mbos, escolhe (m)ic, ou es(q)uece? "
+
+#: compose.c:166
+#, fuzzy
+msgid "esabf"
+msgstr "escamq"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Assinar como: "
+
+#: compose.c:227
+#, fuzzy
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"(e)ncripa, a(s)sina, assina (c)omo, (a)mbos, escolhe (m)ic, ou es(q)uece? "
+
+#: compose.c:228
+#, fuzzy
+msgid "eswabf"
+msgstr "escamq"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+
+#: compose.c:238
+msgid "12345f"
+msgstr ""
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] não existe mais!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] modificado. Atualizar codificação?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Anexos"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr ""
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Você não pode apagar o único anexo."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr ""
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "Anexando os arquivos escolhidos..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "Não foi possível anexar %s!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Abrir caixa para anexar mensagem de"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "Nenhuma mensagem naquela pasta."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Marque as mensagens que você quer anexar!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Não foi possível anexar!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "A gravação só afeta os anexos de texto."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "O anexo atual não será convertido."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "O anexo atual será convertido"
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Codificação inválida"
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Salvar uma cópia desta mensagem?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Renomear para: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, fuzzy, c-format
+msgid "Can't stat %s: %s"
+msgstr "Impossível consultar: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Novo arquivo: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Content-Type é da forma base/sub"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Content-Type %s desconhecido"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Não é possível criar o arquivo %s"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "O que temos aqui é uma falha ao criar um anexo"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Adiar esta mensagem?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Gravar mensagem na caixa"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Gravando mensagem em %s..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "Mensgem gravada."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr ""
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr ""
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr ""
+
+#: crypt.c:71
+#, fuzzy, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- Saída do PGP a seguir (hora atual: "
+
+#: crypt.c:86
+#, fuzzy
+msgid "Passphrase(s) forgotten."
+msgstr "Senha do PGP esquecida."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Entre a senha do PGP:"
+
+#: crypt.c:147
+#, fuzzy
+msgid "Enter SMIME passphrase:"
+msgstr "Entre a senha do PGP:"
+
+#: crypt.c:192
+#, fuzzy
+msgid "Create a traditional (inline) PGP message?"
+msgstr "Criar uma mensagem application/pgp?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "Executando PGP..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr ""
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr ""
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr ""
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- Erro: Estrutura multipart/signed inconsistente! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- Erro: Protocolo multipart/signed %s desconhecido! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Aviso: Não foi possível verificar %s de %s assinaturas. --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+#, fuzzy
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- Os dados a seguir estão assinados --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Aviso: Não foi possível encontrar nenhuma assinatura. --]\n"
+"\n"
+
+#: crypt.c:924
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Fim dos dados assinados --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "sim"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "não"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Sair do Mutt?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "erro desconhecido"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Pressione qualquer tecla para continuar..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " ('?' para uma lista): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Nenhuma caixa aberta."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Não há mensagens."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "Esta caixa é somente para leitura."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "Função não permitida no modo anexar-mensagem."
+
+#: curs_main.c:51
+#, fuzzy
+msgid "No visible messages."
+msgstr "Nenhuma mensagem nova"
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "Não é possível ativar escrita em uma caixa somente para leitura!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "Mudanças na pasta serão escritas na saída."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Mudanças na pasta não serão escritas"
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Sair"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Salvar"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Msg"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Responder"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Grupo"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "A caixa foi modificada externamente. As marcas podem estar erradas."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Novas mensagens nesta caixa."
+
+#: curs_main.c:499
+#, fuzzy
+msgid "Mailbox was externally modified."
+msgstr "A caixa foi modificada externamente. As marcas podem estar erradas."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Nenhuma mensagem marcada."
+
+#: curs_main.c:653 menu.c:896
+#, fuzzy
+msgid "Nothing to do."
+msgstr "Conectando a %s..."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Pular para mensagem: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "O argumento deve ser um número de mensagem."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Aquela mensagem não está visível."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Número de mensagem inválido."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Apagar mensagens que casem com: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "Nenhum padrão limitante está em efeito."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Limitar: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Limitar a mensagens que casem com: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Sair do Mutt?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Marcar mensagens que casem com: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Restaurar mensagens que casem com: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Desmarcar mensagens que casem com: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Abrir caixa somente para leitura"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Abrir caixa de correio"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s não é uma caixa de correio."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Sair do Mutt sem salvar alterações?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Você está na última mensagem."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Nenhuma mensagem não removida."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Você está na primeira mensagem."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "A pesquisa voltou ao início."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "A pesquisa passou para o final."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Nenhuma mensagem nova"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Nenhuma mensagem não lida"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " nesta visão limitada"
+
+#: curs_main.c:1405 pager.c:2337
+#, fuzzy
+msgid "Can't change 'important' flag on POP server."
+msgstr "Apagando mensagens do servidor..."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Nenhuma discussão restante."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Você está na primeira discussão."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "Separar discussões não está ativado."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "A discussão contém mensagens não lidas."
+
+#: curs_main.c:1802
+#, fuzzy
+msgid "Can't edit message on POP server."
+msgstr "Apagando mensagens do servidor..."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tinsere uma linha com um único ~\n"
+"~b usuários\tadiciona os usuários ao campo Bcc:\n"
+"~c usuários\tadiciona os usuários ao campo Cc:\n"
+"~f mensagens\tinclui as mensagens\n"
+"~F mensagens\to mesmo que ~f, mas também inclui os cabeçalhos\n"
+"~h\t\tedita o cabeçalho da mensagem\n"
+"~m mensagens\tinclui e cita as mensagens\n"
+"~M mensagens\to mesmo que ~m, mas também inclui os cabeçalhos\n"
+"~p\t\timprime a mensagem\n"
+"~q\t\tgrava o arquivo e sai do editor\n"
+"~r arquivo\tlê um arquivo no editor\n"
+"~t usuários\tadiciona os usuários ao campo To:\n"
+"~u\t\tvolta à linha anterior\n"
+"~w arquivo\tescreve a mensagem no arquivo\n"
+"~x\t\tcancela as mudanças e sai do editor\n"
+"?\t\testa mensagagem\n"
+".\t\tsozinho em uma linha termina a mensagem\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: número de mensagem iválido.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Termine a mensagem com um . sozinho em uma linha)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "Nenhuma caixa de mensagens.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Mensagem contém:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(continuar)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "falta o nome do arquivo.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Nenhuma linha na mensagem.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr ""
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: comando de editor desconhecido (~? para ajuda)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "Não foi possível criar o arquivo temporário: %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "Não foi possível criar a caixa temporária: %s"
+
+#: editmsg.c:101
+#, fuzzy, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "Não foi possível criar a caixa temporária: %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "O arquivo de mensagens está vazio."
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "Mensagem não modificada!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "Não é possível abrir o arquivo de mensagens: %s"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Não é possível anexar à pasta: %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Erro. Preservando o arquivo temporário: %s"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Atribui marca"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Limpa marca"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[-- Erro: Não foi possível exibir nenhuma parte de Multipart/Aternative! "
+"--]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Anexo No.%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Tipo: %s/%s, Codificação: %s, Tamanho: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Autovisualizar usando %s --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Executando comando de autovisualização: %s"
+
+#: handler.c:1560
+#, fuzzy, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- em %s --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Saída de erro da autovisualização de %s --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- Erro: message/external-body não tem nenhum parâmetro access-type --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Este anexo %s/%s "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(tamanho %s bytes) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "foi apagado --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- em %s --]\n"
+
+#: handler.c:1674
+#, fuzzy, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- em %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, fuzzy, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Este anexo %s/%s "
+
+#: handler.c:1689
+#, fuzzy
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+"[-- Este anexo %s/%s não está includído, e --]\n"
+"[-- a fonte externa indicada já expirou.   --]\n"
+
+#: handler.c:1707
+#, fuzzy, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr ""
+"[-- Este anexo %s/%s não está incluído, e o --]\n"
+"[-- tipo de acesso %s não é aceito.         --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Erro: multipart/signed não tem protocolo."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Erro: multipart/encrypted não tem nenhum parâmetro de protocolo!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Não foi possível abrir o arquivo temporário!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s não é aceito "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(use '%s' para ver esta parte)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "('view-attachments' precisa estar associado a uma tecla!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: não foi possível anexar o arquivo"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "ERRO: por favor relate este problema"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<DESCONHECIDO>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Associações genéricas:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Funções sem associação:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Ajuda para %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr ""
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: tipo de gancho desconhecido: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr ""
+
+#: imap/auth.c:104 pop_auth.c:411
+#, fuzzy
+msgid "No authenticators available"
+msgstr "Autenticação GSSAPI falhou."
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Autenticando (anônimo)..."
+
+#: imap/auth_anon.c:69
+#, fuzzy
+msgid "Anonymous authentication failed."
+msgstr "Autenticação anônima não é aceita."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Autenticando (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "Autenticação CRAM-MD5 falhou."
+
+#. now begin login
+#: imap/auth_gss.c:104
+#, fuzzy
+msgid "Authenticating (GSSAPI)..."
+msgstr "Autenticando (CRAM-MD5)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "Autenticação GSSAPI falhou."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr ""
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Efetuando login..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "Login falhou."
+
+#: imap/auth_sasl.c:112
+#, fuzzy, c-format
+msgid "Authenticating (%s)..."
+msgstr "Autenticando (CRAM-MD5)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+#, fuzzy
+msgid "SASL authentication failed."
+msgstr "Autenticação GSSAPI falhou."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr ""
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "Obtendo espaços de nomenclatura..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Obtendo lista de pastas..."
+
+#: imap/browse.c:219
+#, fuzzy
+msgid "No such folder"
+msgstr "%s: não existe tal cor"
+
+#: imap/browse.c:277
+#, fuzzy
+msgid "Create mailbox: "
+msgstr "Abrir caixa de correio"
+
+#: imap/browse.c:282
+#, fuzzy
+msgid "Mailbox must have a name."
+msgstr "A caixa de mensagens não sofreu mudanças"
+
+#: imap/browse.c:290
+#, fuzzy
+msgid "Mailbox created."
+msgstr "Caixa de correio removida."
+
+#: imap/command.c:290
+#, fuzzy
+msgid "Mailbox closed"
+msgstr "Caixa de correio removida."
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Erro fatal. O número de mensagens está fora de sincronia!"
+
+#: imap/imap.c:147
+#, fuzzy, c-format
+msgid "Closing connection to %s..."
+msgstr "Fechando a conexão com o servidor IMAP..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Este servidor IMAP é pré-histórico. Mutt não funciona com ele."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr ""
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr ""
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "Selecionando %s..."
+
+#: imap/imap.c:690
+#, fuzzy
+msgid "Error opening mailbox"
+msgstr "Erro ao gravar a caixa!"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Não é possível anexar a caixas IMAP neste servidor"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "Criar %s?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Fechando a conexão com o servidor IMAP..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "Marcando %d mensagens como removidas..."
+
+#: imap/imap.c:961
+#, fuzzy
+msgid "Expunge failed"
+msgstr "Login falhou."
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Salvando marcas de estado das mensagens... [%d de %d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Apagando mensagens do servidor..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr ""
+
+#: imap/imap.c:1099
+#, fuzzy
+msgid "CLOSE failed"
+msgstr "Login falhou."
+
+#: imap/imap.c:1342
+#, fuzzy
+msgid "Bad mailbox name"
+msgstr "Abrir caixa de correio"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "Assinando %s..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "Cancelando assinatura de %s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "Não foi possível obter cabeçalhos da versão deste servidor IMAP."
+
+#: imap/message.c:84
+#, fuzzy, c-format
+msgid "Could not create temporary file %s"
+msgstr "Não foi possível criar um arquivo temporário!"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Obtendo cabeçalhos das mensagens... [%d de %d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Obtendo mensagem..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr ""
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Enviando mensagem ..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "Copiando %d mensagens para %s..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "Copiando mensagem %d para %s..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "Continuar?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "apelido: sem endereço"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr ""
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "campo de cabeçalho inválido"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: método de ordenação desconhecido"
+
+#: init.c:879
+#, fuzzy, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default: erro na expressão regular: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: variável desconhecida"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "prefixo é ilegal com reset"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "valor é ilegal com reset"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s está atribuída"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s não está atribuída"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: tipo de caixa inválido"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: valor inválido"
+
+#: init.c:1312
+#, fuzzy, c-format
+msgid "%s: Unknown type."
+msgstr "%s: tipo inválido"
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: tipo inválido"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Impossível consultar: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s não é uma caixa de correio."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Erro em %s, linha %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: erros em %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr ""
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: erro em %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: muitos argumentos"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: comando desconhecido"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Erro na linha de comando: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "não foi possível determinar o diretório do usuário"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "não foi possível determinar o nome do usuário"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Laço de macro detectado."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Tecla não associada."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Tecla não associada. Pressione '%s' para ajuda."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: muitos argumentos"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: não existe tal menu"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "seqüência de teclas nula"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: muitos argumentos"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: não existe tal função no mapa"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: seqüência de teclas vazia"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: muitos argumentos"
+
+#: keymap.c:871
+#, fuzzy
+msgid "exec: no arguments"
+msgstr "exec: poucos argumentos"
+
+#: keymap.c:891
+#, fuzzy, c-format
+msgid "%s: no such function"
+msgstr "%s: não existe tal função no mapa"
+
+#: keymap.c:912
+#, fuzzy
+msgid "Enter keys (^G to abort): "
+msgstr "Entre a keyID para %s: "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr ""
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "operação nula"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "forçar a visualizaçãdo do anexo usando o mailcap"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "ver anexo como texto"
+
+#: keymap_alldefs.h:9
+#, fuzzy
+msgid "Toggle display of subparts"
+msgstr "troca entre mostrar texto citado ou não"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "anda até o fim da página"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "re-envia uma mensagem para outro usuário"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "escolhe um novo arquivo neste diretório"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "vê arquivo"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "mostra o nome do arquivo atualmente selecionado"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "assina à caixa de correio atual (só para IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "cancela assinatura da caixa atual (só para IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "troca ver todas as caixas/só as inscritas (só para IMAP)"
+
+#: keymap_alldefs.h:18
+#, fuzzy
+msgid "list mailboxes with new mail"
+msgstr "Nenhuma caixa com novas mensagens."
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "muda de diretório"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "verifica se há novas mensagens na caixa"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "anexa um(ns) arquivo(s) à esta mensagem"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "anexa uma(s) mensagem(ns) à esta mensagem"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "edita a lista de Cópias Escondidas (BCC)"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "edita a lista de Cópias (CC)"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "edita a descrição do anexo"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "edita o código de transferência do anexo"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "informe um arquivo no qual salvar uma cópia desta mensagem"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "edita o arquivo a ser anexado"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "edita o campo From"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "edita a mensagem e seus cabeçalhos"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "edita a mensagem"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "edita o anexo usando sua entrada no mailcap"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "edita o campo Reply-To"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "edita o assunto desta mensagem"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "edita a lista de Destinatários (To)"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "cria uma nova caixa de correio (só para IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "edita o tipo de anexo"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "obtém uma cópia temporária do anexo"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "executa o ispell na mensagem"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "compõe um novo anexo usando a entrada no mailcap"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "ativa/desativa recodificação deste anexo"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "salva esta mensagem para ser enviada depois"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "renomeia/move um arquivo anexado"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "envia a mensagem"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "troca a visualização de anexos/em linha"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "troca entre apagar o arquivo após enviá-lo ou não"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "atualiza a informação de codificação de um anexo"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "grava a mensagem em uma pasta"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "copia uma mensagem para um arquivo/caixa"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "cria um apelido a partir do remetente de uma mensagem"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "move a entrada para o fundo da tela"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "move a entrada para o meio da tela"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "move a entrada para o topo da tela"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "cria uma cópia decodificada (text/plain)"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "cria uma cópia decodificada (text/plain) e apaga"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "apaga a entrada atual"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "apaga a caixa de correio atual (só para IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "apaga todas as mensagens na sub-discussão"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "apaga todas as mensagens na discussão"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "mostra o endereço completo do remetente"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "mostra a mensagem e ativa/desativa poda de cabeçalhos"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "mostra uma mensagem"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "edita a mensagem pura"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "apaga o caractere na frente do cursor"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "move o cursor um caractere para a esquerda"
+
+#: keymap_alldefs.h:66
+#, fuzzy
+msgid "move the cursor to the beginning of the word"
+msgstr "pula para o início da linha"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "pula para o início da linha"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "circula entre as caixas de mensagem"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "completa um nome de arquivo ou apelido"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "completa um endereço com uma pesquisa"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "apaga o caractere sob o cursor"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "pula para o final da linha"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "move o cursor um caractere para a direita"
+
+#: keymap_alldefs.h:74
+#, fuzzy
+msgid "move the cursor to the end of the word"
+msgstr "move o cursor um caractere para a direita"
+
+#: keymap_alldefs.h:75
+#, fuzzy
+msgid "scroll down through the history list"
+msgstr "volta uma página no histórico"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "volta uma página no histórico"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "apaga os caracteres a partir do cursor até o final da linha"
+
+#: keymap_alldefs.h:78
+#, fuzzy
+msgid "delete chars from the cursor to the end of the word"
+msgstr "apaga os caracteres a partir do cursor até o final da linha"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "apaga todos os caracteres na linha"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "apaga a palavra em frente ao cursor"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "põe a próxima tecla digitada entre aspas"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr ""
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr ""
+
+#: keymap_alldefs.h:84
+#, fuzzy
+msgid "convert the word to lower case"
+msgstr "anda até o fim da página"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr ""
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "entra um comando do muttrc"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "entra uma máscara de arquivos"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "sai deste menu"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "filtra o anexo através de um comando do shell"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "anda até a primeira entrada"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "troca a marca 'importante' da mensagem"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "encaminha uma mensagem com comentários"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "seleciona a entrada atual"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "responde a todos os destinatários"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "passa meia página"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "volta meia página"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "esta tela"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "pula para um número de índice"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "anda até a última entrada"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "responde à lista de email especificada"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "executa um macro"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "compõe uma nova mensagem eletrônica"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "abre uma pasta diferente"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "abre uma pasta diferente somente para leitura"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "retira uma marca de estado de uma mensagem"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "apaga mensagens que casem com um padrão"
+
+#: keymap_alldefs.h:107
+#, fuzzy
+msgid "force retrieval of mail from IMAP server"
+msgstr "obtém mensagens do servidor POP"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "obtém mensagens do servidor POP"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "anda até a primeira mensagem"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "anda até a última mensagem"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "mostra somente mensagens que casem com um padrão"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "pula para a próxima mensagem nova"
+
+#: keymap_alldefs.h:113
+#, fuzzy
+msgid "jump to the next new or unread message"
+msgstr "pula para a próxima mensagem não lida"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "pula para a próxima sub-discussão"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "pula para a próxima discussão"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "anda até a próxima mensagem não apagada"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "pula para a próxima mensagem não lida"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "pula para a mensagem pai na discussão"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "pula para a discussão anterior"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "pula para a sub-discussão anterior"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "anda até a mensagem não apagada anterior"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "pula para a mensagem nova anterior"
+
+#: keymap_alldefs.h:123
+#, fuzzy
+msgid "jump to the previous new or unread message"
+msgstr "pula para a mensagem não lida anterior"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "pula para a mensagem não lida anterior"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "marca a discussão atual como lida"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "marca a sub-discussão atual como lida"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "atribui uma marca de estado em uma mensagem"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "salva as mudanças à caixa"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "marca mensagens que casem com um padrão"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "restaura mensagens que casem com um padrão"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "desmarca mensagens que casem com um padrão"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "anda até o meio da página"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "anda até a próxima entrada"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "desce uma linha"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "anda até a próxima página"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "pula para o fim da mensagem"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "troca entre mostrar texto citado ou não"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "pula para depois do texto citado"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "volta para o início da mensagem"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "passa a mensagem/anexo para um comando do shell através de um cano"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "anda até a entrada anterior"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "sobe uma linha"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "anda até a página anterior"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "imprime a entrada atual"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "executa uma busca por um endereço através de um programa externo"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "anexa os resultados da nova busca aos resultados atuais"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "salva mudanças à caixa e sai"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "edita uma mensagem adiada"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "limpa e redesenha a tela"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{interno}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "responde a uma mensagem"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "usa a mensagem atual como modelo para uma nova mensagem"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "salva mensagem/anexo em um arquivo"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "procura por uma expressão regular"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "procura de trás para a frente por uma expressão regular"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "procura pelo próximo resultado"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "procura pelo próximo resultado na direção oposta"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "troca entre mostrar cores nos padrões de busca ou não"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "executa um comando em um subshell"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "ordena mensagens"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "ordena mensagens em ordem reversa"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "marca a entrada atual"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "aplica a próxima função às mensagens marcadas"
+
+#: keymap_alldefs.h:164
+#, fuzzy
+msgid "apply next function ONLY to tagged messages"
+msgstr "aplica a próxima função às mensagens marcadas"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "marca a sub-discussão atual"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "marca a discussão atual"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "troca a marca 'nova' de uma mensagem"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "troca entre reescrever a caixa ou não"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "troca entre pesquisar em caixas ou em todos os arquivos"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "anda até o topo da página"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "restaura a entrada atual"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "restaura todas as mensagens na discussão"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "restaura todas as mensagens na sub-discussão"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "mostra o número e a data da versão do Mutt"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "vê anexo usando sua entrada no mailcap se necessário"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "mostra anexos MIME"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr ""
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "mostra o padrão limitante atualmente ativado"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "abre/fecha a discussão atual"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "abre/fecha todas as discussões"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "anexa uma chave pública do PGP"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "mostra as opções do PGP"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "envia uma chave pública do PGP"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "verifica uma chave pública do PGP"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "vê a identificação de usuário da chave"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr ""
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "Aceita a sequência construída"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "Anexa um reenviador à sequência"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "Insere um reenviador à sequência"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "Remove um reenviador da sequência"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "Seleciona o elemento anterior da sequência"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "Seleciona o próximo elemento da sequência"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "envia a mensagem através de uma sequência de reenviadores mixmaster"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "cria cópia desencriptada e apaga"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "cria cópia desencriptada"
+
+#: keymap_alldefs.h:196
+#, fuzzy
+msgid "wipe passphrase(s) from memory"
+msgstr "retira a senha do PGP da memória"
+
+#: keymap_alldefs.h:197
+#, fuzzy
+msgid "extract supported public keys"
+msgstr "extrai chaves públicas do PGP"
+
+#: keymap_alldefs.h:198
+#, fuzzy
+msgid "show S/MIME options"
+msgstr "mostra as opções do PGP"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Acabou a memória!"
+
+#: main.c:46
+#, fuzzy
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"Para contactar os programadores, envie uma mensagem para <mutt-dev@mutt."
+"org>.\n"
+"Para relatar um problema, por favor use o programa muttbug.\n"
+
+#: main.c:50
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-2000 Michael R. Elkins e outros.\n"
+"Mutt vem sem NENHUMA GARANTIA; para mais detalhes digite `mutt -vv'.\n"
+"Mutt é um programa livre, e você é encorajado a redistribuí-lo\n"
+"sob certas condições; digite `mutt -vv' para os detalhes.\n"
+"\n"
+"Tradução para a língua portuguesa:\n"
+"Marcus Brito <marcus@visaotec.com.br>\n"
+
+#: main.c:56
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-2000 Michael R. Elkins <me@cs.hmc.edu>\n"
+"Copyright (C) 1996-2000 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2000 Thomas Roessler <roessler@guug.de>\n"
+"Copyright (C) 1998-2000 Werner Kock     <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2000 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2000 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"\n"
+"Tradução para a Língua Portuguesa por:\n"
+"Marcus Brito <marcus@visaotec.com.br>\n"
+"\n"
+"Muitos outros não mencionados aqui contribuíram com bastante código,\n"
+"ajustes e sugestões.\n"
+"\n"
+"    Este programa é software livre; você pode redistribuí-lo e/ou\n"
+"    modificá-lo sob os termos da Licença Pública Geral GNU como publicada\n"
+"    pela Free Software Foundation, tanto na versão 2 da Licença ou (à sua\n"
+"    escolha) qualquer outra versão posterior.\n"
+"\n"
+"    Este programa é distribuído na esperança de que ele seja útil, mas\n"
+"    SEM NENHUMA GARANTIA, nem mesmo a garantia implícita de "
+"COMERCIABILIDADE\n"
+"    ou FUNCIONALIDADE PARA UM DETERMINADO PROPÓSITO. Veja a Licença Pública\n"
+"    Geral da GNU para mais detalhes.\n"
+"\n"
+"    Você deve ter recebido uma cópia da Licença Pública Geral da GNU junto\n"
+"    com este programa; caso contrário, escreva para Free Software\n"
+"    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02138, USA.\n"
+
+#: main.c:94
+#, fuzzy
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"uso: mutt [ -nRzZ ] [ -e <cmd> ] [ -F <arq> ] [ -m <tipo> ] [ -f <arq> ]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <arq> ] [ -F <arq> ] [ -H <arq> ] [ -i "
+"<arq> ] [ -s <asst> ] [ -b <end> ] [ -c <end> ] <end> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <arq> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"opções:\n"
+"  -a <arquivo>\tanexa um arquivo à mensagem\n"
+"  -b <endereço>\tespecifica um endereço de cópia escondica (BCC)\n"
+"  -c <endereço>\tespecifica um endereço de cópia (CC)\n"
+"  -e <comando>\tespecifica um comando a ser executado depois a "
+"inicialização\n"
+"  -f <arquivo>\tespecifica qual caixa de mensagens abrir\n"
+"  -F <arquivo>\tespecifica um arquivo muttrc alternativo\n"
+"  -H <arquivo>\tespecifica um rascunho de onde ler cabeçalhos\n"
+"  -i <arquivo>\tespecifica um arquivo que o Mutt deve incluir na resposta\n"
+"  -m <tipo>\tespecifica o tipo padrão de caixa de mensagens\n"
+"  -n\t\tfaz com que o Mutt não leia o Muttrc do sistema\n"
+"  -p\t\tedita uma mensagem adiada\n"
+"  -R\t\tabre a caixa de mensagens em modo de somente leitura\n"
+"  -s <assunto>\tespecifica um assunto (entre aspas se tiver espaços)\n"
+"  -v\t\tmostra a versão e definições de compilação\n"
+"  -x\t\tsimula o modo de envio do mailx\n"
+"  -y\t\tescolhe uma caixa na sua lista `mailboxes'\n"
+"  -z\t\tsai imediatamente se não houverem mensagens na caixa\n"
+"  -Z\t\tabre a primeira pasta com novas mensagens, sai se não houver\n"
+"  -h\t\testa mensagem de ajuda"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Opções de compilação:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Erro ao inicializar terminal."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Depurando no nível %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "DEBUG não foi definido durante a compilação. Ignorado.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s não existe. Devo criá-lo?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "Não é possível criar %s: %s"
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Nenhum destinatário foi especificado.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: não foi possível anexar o arquivo.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Nenhuma caixa com novas mensagens."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Nenhuma caixa de mensagem para recebimento definida."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "A caixa de mensagens está vazia."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Lendo %s... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "A caixa de mensagens está corrompida!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "A caixa de mensagens foi corrompida!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Erro fatal! Não foi posssível reabrir a caixa de mensagens!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Não foi possível travar a caixa de mensagens!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+"sync: mbox modificada, mas nenhuma mensagem modificada! (relate este "
+"problema)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Gravando mensagens... %d(%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+#, fuzzy
+msgid "Committing changes..."
+msgstr "Compilando padrão de busca..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Erro de gravação! Caixa parcial salva em %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "Não foi possível reabrir a caixa de mensagens!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Reabrindo caixa de mensagens..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Pular para: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Número de índice inválido."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Nenhuma entrada."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Você não pode mais descer."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Você não pode mais subir"
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Você está na última página."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Você está na primeira página"
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "A primeira entrada está sendo mostrada."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "A última entrada está sendo mostrada."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Você está na última entrada."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Você está na primeira entrada."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Procurar por: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Procurar de trás para frente por: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Nenhum padrão de procura."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Não encontrado."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "Nenhuma entrada marcada."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "A busca não está implementada neste menu."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "O pulo não está implementado em diálogos."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Não é possível marcar."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "Lendo %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr ""
+
+#: muttlib.c:835
+#, fuzzy
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "O arquivo é um diretório, salvar lá?"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "O arquivo é um diretório, salvar lá?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Arquivo no diretório: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "Arquivo existe, (s)obrescreve, (a)nexa ou (c)ancela?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "sac"
+
+#: muttlib.c:1171
+#, fuzzy
+msgid "Can't save message to POP mailbox."
+msgstr "Gravar mensagem na caixa"
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s não é uma caixa de mensagens!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Anexa mensagens a %s?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, fuzzy, c-format
+msgid "Connection to %s closed"
+msgstr "Conectando a %s..."
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr ""
+
+#: mutt_socket.c:292
+#, fuzzy
+msgid "Preconnect command failed."
+msgstr "comando de pré-conexão falhou"
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, fuzzy, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Conectando a %s"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr ""
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, fuzzy, c-format
+msgid "Looking up %s..."
+msgstr "Copiando para %s..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, fuzzy, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Não foi possível encontrar o endereço do servidor %s."
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Conectando a %s..."
+
+#: mutt_socket.c:519
+#, fuzzy, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "Não foi possível abrir %s"
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr ""
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr ""
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr ""
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr ""
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr ""
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr ""
+
+#: mutt_ssl.c:324
+#, fuzzy, c-format
+msgid "SSL failed: %s"
+msgstr "Login falhou."
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "Não foi possível obter o certificado do servidor remoto"
+
+#: mutt_ssl.c:341
+#, fuzzy, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "Conexão SSL usando %s"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[impossível calcular]"
+
+#: mutt_ssl.c:424
+#, fuzzy
+msgid "[invalid date]"
+msgstr "%s: valor inválido"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr ""
+
+#: mutt_ssl.c:506
+#, fuzzy
+msgid "Server certificate has expired"
+msgstr "Este certificado foi emitido por:"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Este certificado pertence a:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Este certificado foi emitido por:"
+
+#: mutt_ssl.c:601
+#, fuzzy
+msgid "This certificate is valid"
+msgstr "Este certificado foi emitido por:"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr ""
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr ""
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Impressão digital: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "Verificação de certificado SSL"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(r)ejeitar, (a)ceitar uma vez, aceitar (s)empre"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "ras"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(r)ejeitar, (a)ceitar uma vez"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "ra"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Sair  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Aviso: Não foi possível salvar o certificado"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "Certificado salvo"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Limite de travas excedido, remover a trava para %s?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "Não é possível travar %s.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "Limite de tempo excedido durante uma tentativa de trava com fcntl!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Esperando pela trava fcntl... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "Limite de tempo excedido durante uma tentativa trava com flock!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Esperando pela tentativa de flock... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "Não foi possível travar %s\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "Lendo %s..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "Gravando %s..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "Não foi possível sincronizar a caixa %s!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Mover mensagens lidas para %s?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Remover %d mensagem apagada?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Remover %d mensagens apagadas?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Movendo mensagens lidas para %s..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "A caixa de mensagens não sofreu mudanças"
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d mantidas, %d movidas, %d apagadas."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d mantidas, %d apagadas."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr " Pressione '%s' para trocar entre gravar ou não"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "Use 'toggle-write' para reabilitar a gravação!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "A caixa está marcada como não gravável. %s"
+
+#: mx.c:1181
+#, fuzzy
+msgid "Mailbox checkpointed."
+msgstr "Caixa de correio removida."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Não foi possível gravar a mensagem"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "Não disponível neste menu."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "PagAnt"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "ProxPag"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Ver Anexo"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Prox"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "O fim da mensagem está sendo mostrado."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "O início da mensagem está sendo mostrado."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Busca reversa: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Busca: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "A ajuda está sendo mostrada."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "Não há mais texto citado."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "Não há mais texto não-citado após o texto citado."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "mensagem multiparte não tem um parâmetro de fronteiras!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Erro na expressão: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Dia do mês inválido: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Mês inválido: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, fuzzy, c-format
+msgid "Invalid relative date: %s"
+msgstr "Mês inválido: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "erro na expressão"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "erro no padrão em: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: comando inválido"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: não é possível neste modo"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "faltam parâmetros"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "parêntese sem um corresponente: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "padrão vazio"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "erro: operação %d desconhecida (relate este erro)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Compilando padrão de busca..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Executando comando nas mensagens que casam..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "Nenhuma mensagem casa com o critério"
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "A busca chegou ao fim sem encontrar um resultado"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "A busca chegou ao início sem encontrar um resultado"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Busca interrompida."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "Senha do PGP esquecida."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Erro: não foi possível criar o subprocesso do PGP! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- Fim da saída do PGP --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- INÍCIO DE MENSAGEM DO PGP --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- INÍCIO DE BLOCO DE CHAVE PÚBLICA DO PGP --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- INÍCIO DE MENSAGEM ASSINADA POR PGP --]\n"
+"\n"
+
+#: pgp.c:381
+#, fuzzy
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr ""
+"\n"
+"[-- FIM DE MENSAGEM DO PGP --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- FIM DE BLOCO DE CHAVE PÚBLICA DO PGP --]\n"
+
+#: pgp.c:385
+#, fuzzy
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr ""
+"\n"
+"[-- FIM DE MENSAGEM ASSINADA POR PGP --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Erro: não foi possível encontrar o início da mensagem do PGP! --]\n"
+
+#: pgp.c:662
+#, fuzzy
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Erro interno. Informe <roessler@guug.de>."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Erro: não foi possível criar um subprocesso para o PGP! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Erro: mensagem PGP/MIME mal formada! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Erro: não foi possível criar um arquivo temporário! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- Os dados a seguir estão encriptados com PGP/MIME --]\n"
+"\n"
+
+#: pgp.c:863
+#, fuzzy
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr ""
+"\n"
+"[-- Fim dos dados encriptados com PGP/MIME --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "Não foi possível abrir o subprocesso do PGP!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "Usar keyID = \"%s\" para %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "Entre a keyID para %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "Não foi possível executar o PGP"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "Obtendo chave PGP..."
+
+#: pgpkey.c:486
+#, fuzzy
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "Esta chave não pode ser usada: expirada/desabilitada/revogada."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Escolher  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Verificar chave  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "Chaves do PGP que casam com <%s>. "
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "Chaves do PGP que casam com \"%s\"."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "Não foi possível abrir /dev/null"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Não foi possível criar um arquivo temporário"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "Key ID: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "Esta chave não pode ser usada: expirada/desabilitada/revogada."
+
+#: pgpkey.c:608
+#, fuzzy
+msgid "ID is expired/disabled/revoked."
+msgstr "Esta chave não pode ser usada: expirada/desabilitada/revogada."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr ""
+
+#: pgpkey.c:615
+#, fuzzy
+msgid "ID is not valid."
+msgstr "Este ID não é de confiança."
+
+#: pgpkey.c:618
+#, fuzzy
+msgid "ID is only marginally valid."
+msgstr "Este ID é de baixa confiança."
+
+#: pgpkey.c:622
+#, fuzzy, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s Você realmente quer usá-lo?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Por favor entre o key ID: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "Executando PGP..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "Chave do PGP %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Procurando por chaves que casam com \"%s\"..."
+
+#: pop.c:86 pop_lib.c:197
+#, fuzzy
+msgid "Command TOP is not supported by server."
+msgstr "Não é possível marcar."
+
+#: pop.c:113
+#, fuzzy
+msgid "Can't write header to temporary file!"
+msgstr "Não foi possível criar um arquivo temporário"
+
+#: pop.c:194 pop_lib.c:199
+#, fuzzy
+msgid "Command UIDL is not supported by server."
+msgstr "Não é possível marcar."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr ""
+
+#: pop.c:274
+#, fuzzy
+msgid "Fetching list of messages..."
+msgstr "Obtendo mensagem..."
+
+#: pop.c:411
+#, fuzzy
+msgid "Can't write message to temporary file!"
+msgstr "Não foi possível criar um arquivo temporário"
+
+#: pop.c:513 pop.c:578
+#, fuzzy
+msgid "Checking for new messages..."
+msgstr "Preparando mensagem encaminhada..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "Servidor POP não está definido."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "Nenhuma mensagem nova no servidor POP."
+
+#: pop.c:613
+#, fuzzy
+msgid "Delete messages from server?"
+msgstr "Apagando mensagens do servidor..."
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Lendo novas mensagens (%d bytes)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "Erro ao gravar a caixa!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d de %d mensagens lidas]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "O servidor fechou a conexão!"
+
+#: pop_auth.c:89
+#, fuzzy
+msgid "Authenticating (SASL)..."
+msgstr "Autenticando (CRAM-MD5)..."
+
+#: pop_auth.c:205
+#, fuzzy
+msgid "Authenticating (APOP)..."
+msgstr "Autenticando (CRAM-MD5)..."
+
+#: pop_auth.c:229
+#, fuzzy
+msgid "APOP authentication failed."
+msgstr "Autenticação GSSAPI falhou."
+
+#: pop_auth.c:264
+#, fuzzy
+msgid "Command USER is not supported by server."
+msgstr "Não é possível marcar."
+
+#: pop_lib.c:195
+#, fuzzy
+msgid "Unable to leave messages on server."
+msgstr "Apagando mensagens do servidor..."
+
+#: pop_lib.c:225
+#, fuzzy, c-format
+msgid "Error connecting to server: %s"
+msgstr "Conectando a %s"
+
+#: pop_lib.c:370
+#, fuzzy
+msgid "Closing connection to POP server..."
+msgstr "Fechando a conexão com o servidor IMAP..."
+
+#: pop_lib.c:536
+#, fuzzy
+msgid "Verifying message indexes..."
+msgstr "Gravando mensagem em %s..."
+
+#: pop_lib.c:560
+#, fuzzy
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Fechando a conexão com o servidor IMAP..."
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Mensagens Adiadas"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "Nenhuma mensagem adiada."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "Cabeçalho de PGP ilegal"
+
+#: postpone.c:479
+#, fuzzy
+msgid "Illegal S/MIME header"
+msgstr "Cabeçalho de PGP ilegal"
+
+#: postpone.c:554
+#, fuzzy
+msgid "Decryption failed."
+msgstr "Login falhou."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Nova Consulta"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Criar Apelido"
+
+#: query.c:48
+msgid "Search"
+msgstr "Busca"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Agurdando pela resposta..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Comando de consulta não definido."
+
+#: query.c:286
+msgid "Query"
+msgstr "Consulta"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Consulta: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Consulta '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Cano"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Imprimir"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Salvando..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Anexo salvo."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "AVISO! Você está prestes a sobrescrever %s, continuar?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Anexo filtrado."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Filtrar através de: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Passar por cano a: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "Eu não sei como imprimir anexos %s!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Imprimir anexo(s) marcado(s)?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Imprimir anexo?"
+
+#: recvattach.c:938
+#, fuzzy
+msgid "Can't decrypt encrypted message!"
+msgstr "Não foi encontrada nenhuma mensagem marcada."
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Anexos"
+
+#: recvattach.c:987
+#, fuzzy
+msgid "There are no subparts to show!"
+msgstr "Não há anexos."
+
+#: recvattach.c:1048
+#, fuzzy
+msgid "Can't delete attachment from POP server."
+msgstr "obtém mensagens do servidor POP"
+
+#: recvattach.c:1056
+#, fuzzy
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "Deleção de anexos de mensagens PGP não é suportada"
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Somente a deleção de anexos multiparte é suportada."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Você só pode repetir partes message/rfc822"
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing message!"
+msgstr "Erro ao enviar mensagem."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing messages!"
+msgstr "Erro ao enviar mensagem."
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Não foi possível abrir o arquivo temporário %s."
+
+#: recvcmd.c:444
+#, fuzzy
+msgid "Forward as attachments?"
+msgstr "mostra anexos MIME"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+"Não foi possível decodificar todos os anexos marcados.\n"
+"Encaminhar os demais através de MIME?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Encaminhar encapsulado em MIME?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "Não é possível criar %s."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Não foi encontrada nenhuma mensagem marcada."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "Nenhuma lista de email encontrada!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+"Não foi possível decodificar todos os anexos marcados.\n"
+"Encapsular os demais através de MIME?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Anexar"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Inserir"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Remover"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "OK"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "Não foi possível obter o type2.list do mixmaster!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Escolha uma sequência de reenviadores."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "Erro: %s não pode ser usado como reenviador final de uma sequência."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Sequências do mixmaster são limitadas a %d elementos."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "A sequência de reenviadores já está vazia."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "O primeiro elemento da sequência já está selecionado."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "O último elemento da sequência já está selecionado."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "O mixmaster não aceita cabeçalhos Cc ou Bcc."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr ""
+"Por favor, defina a variável hostname para um valor adequado quando for\n"
+"usar o mixmaster!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Erro ao enviar mensagem, processo filho terminou com código %d\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Erro ao enviar mensagem."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "Entrada mal formatada para o tipo %s em \"%s\" linha %d"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Nenhum caminho de mailcap especificado"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "entrada no mailcap para o tipo %s não foi encontrada."
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: poucos argumentos"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: muitos argumentos"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Sem assunto, cancelar?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Sem assunto, cancelado."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Responder para %s%s?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "Responder para %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "Nenhuma mensagem marcada está visível!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Incluir mensagem na resposta?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Enviando mensagem citada..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "Não foi possível incluir todas as mensagens solicitadas!"
+
+#: send.c:762
+#, fuzzy
+msgid "Forward as attachment?"
+msgstr "Imprimir anexo?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Preparando mensagem encaminhada..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Editar mensagem adiada?"
+
+#: send.c:1336
+#, fuzzy
+msgid "Edit forwarded message?"
+msgstr "Preparando mensagem encaminhada..."
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Cancelar mensagem não modificada?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Mensagem não modificada cancelada."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "Mensagem não enviada."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Mensagem adiada."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Nenhum destinatário está especificado!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Nenhum destinatário foi especificado."
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Sem assunto, cancelar envio?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Nenhum assunto especificado."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Enviando mensagem..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Não foi possível enviar a mensagem."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Mensagem enviada."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Enviando em segundo plano."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "Nenhum parâmetro de fronteira encontrado! [relate este erro]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s não mais existe!"
+
+#: sendlib.c:916
+#, fuzzy, c-format
+msgid "%s isn't a regular file."
+msgstr "%s não é uma caixa de correio."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "Não foi possível abrir %s"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Erro ao enviar a mensagem, processo filho saiu com código %d"
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Saída do processo de entrega"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr ""
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s... Saindo.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "%s recebido... Saindo.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Sinal %d recebido... Saindo.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr ""
+
+#: smime.c:303
+msgid "Verified  "
+msgstr ""
+
+#: smime.c:306
+msgid "Unverified"
+msgstr ""
+
+#: smime.c:309
+#, fuzzy
+msgid "Expired   "
+msgstr "Sair  "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr ""
+
+#: smime.c:315
+#, fuzzy
+msgid "Invalid   "
+msgstr "Mês inválido: %s"
+
+#: smime.c:318
+#, fuzzy
+msgid "Unknown   "
+msgstr "Desconhecido"
+
+#: smime.c:347
+#, fuzzy
+msgid "Enter keyID: "
+msgstr "Entre a keyID para %s: "
+
+#: smime.c:370
+#, fuzzy, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "Chaves do PGP que casam com \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr ""
+
+#: smime.c:523 smime.c:592
+#, fuzzy, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "Usar keyID = \"%s\" para %s?"
+
+#: smime.c:526 smime.c:595
+#, fuzzy, c-format
+msgid "Use ID %s for %s ?"
+msgstr "Usar keyID = \"%s\" para %s?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr ""
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+#, fuzzy
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "[-- Erro: não foi possível criar o subprocesso do PGP! --]\n"
+
+#: smime.c:1197
+#, fuzzy
+msgid "no certfile"
+msgstr "Não é possível criar o filtro."
+
+#: smime.c:1200
+#, fuzzy
+msgid "no mbox"
+msgstr "(nenhuma caixa de mensagens)"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr ""
+
+#: smime.c:1381
+#, fuzzy
+msgid "Warning: Intermediate certificate not found."
+msgstr "Aviso: Não foi possível salvar o certificado"
+
+#: smime.c:1426
+#, fuzzy
+msgid "Can't open OpenSSL subprocess!"
+msgstr "Não foi possível abrir o subprocesso do PGP!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr ""
+
+#: smime.c:1629 smime.c:1751
+#, fuzzy
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- Fim da saída do PGP --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+#, fuzzy
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Erro: não foi possível criar o subprocesso do PGP! --]\n"
+
+#: smime.c:1755
+#, fuzzy
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr ""
+"[-- Os dados a seguir estão encriptados com PGP/MIME --]\n"
+"\n"
+
+#: smime.c:1758
+#, fuzzy
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr ""
+"[-- Os dados a seguir estão assinados --]\n"
+"\n"
+
+#: smime.c:1822
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- Fim dos dados encriptados com PGP/MIME --]\n"
+
+#: smime.c:1824
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- Fim dos dados assinados --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Ordenando caixa..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr ""
+"Não foi possível encontrar a função de ordenação! [relate este problema]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(nenhuma caixa de mensagens)"
+
+#: thread.c:1081
+#, fuzzy
+msgid "Parent message is not visible in this limited view."
+msgstr "A mensagem pai não está visível nesta visão limitada"
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "A mensagem pai não está disponível."
+
+#, fuzzy
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "Executando PGP..."
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "Repetir mensagem para %s...?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "Repetir mensagens para %s...?"
+
+#, fuzzy
+#~ msgid "ewsabf"
+#~ msgstr "escamq"
+
+#, fuzzy
+#~ msgid "Certificate *NOT* added."
+#~ msgstr "Certificado salvo"
+
+#, fuzzy
+#~ msgid "This ID's validity level is undefined."
+#~ msgstr "O nível de confiança deste ID é indeterminado."
+
+#~ msgid "Decode-save"
+#~ msgstr "Decodificar-salvar"
+
+#~ msgid "Decode-copy"
+#~ msgstr "Decodificar-copiar"
+
+#~ msgid "Decrypt-save"
+#~ msgstr "Desencriptar-salvar"
+
+#~ msgid "Decrypt-copy"
+#~ msgstr "Desencriptar-copiar"
+
+#~ msgid "Copy"
+#~ msgstr "Copiar"
+
+#~ msgid "%s [%s]\n"
+#~ msgstr "%s [%s]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "[-- End of PGP output --]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "[-- Fim da saída do PGP --]\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "Can't stat %s."
+#~ msgstr "Impossível consultar: %s"
+
+#~ msgid "%s: no such command"
+#~ msgstr "%s: não existe tal comando"
+
+#, fuzzy
+#~ msgid "Authentication method is unknown."
+#~ msgstr "Autenticação GSSAPI falhou."
+
+#~ msgid "MIC algorithm: "
+#~ msgstr "Algoritmo MIC: "
+
+#~ msgid "This doesn't make sense if you don't want to sign the message."
+#~ msgstr "Isto não faz sentido se você não quer assinar a mensagem."
+
+#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160"
+#~ msgstr "Algoritmo MIC desconhecido, use pgp-md5, pgp-sha1 ou pgp-rmd160"
+
+#~ msgid ""
+#~ "\n"
+#~ "SHA1 implementation Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft."
+#~ "com>\n"
+#~ "\n"
+#~ "    Redistribution and use in source and binary forms, with or without\n"
+#~ "    modification, are permitted under certain conditions.\n"
+#~ "\n"
+#~ "    The SHA1 implementation comes AS IS, and ANY EXPRESS OR IMPLIED\n"
+#~ "    WARRANTIES, including, but not limited to, the implied warranties of\n"
+#~ "    merchantability and fitness for a particular purpose ARE DISCLAIMED.\n"
+#~ "\n"
+#~ "    You should have received a copy of the full distribution terms\n"
+#~ "    along with this program; if not, write to the program's developers.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Implementação de SHA1 Copyright (C) 1995-1997 Eric A. Young "
+#~ "<eay@cryptsoft.com>\n"
+#~ "\n"
+#~ "    Redistribuição e uso em forma binária ou código fonte, com ou sem\n"
+#~ "    modificações, são permitidas sob certas condições.\n"
+#~ "\n"
+#~ "    A implementação de SHA1 vem COMO ESTÁ, e QUALQUER GARANTIA, EXPRESSA\n"
+#~ "    OU IMPLÍCITA, incluindo, mas não se limitando a, as garantias "
+#~ "implícitas\n"
+#~ "    de comerciabilidade e funcionalidade para um determinado propósito, "
+#~ "ESTÃO\n"
+#~ "    REVOGADAS.\n"
+#~ "\n"
+#~ "    Você deve ter recebido uma cópia dos termos de distribuição "
+#~ "completos\n"
+#~ "    junto com este programa; caso contrário, escreva para os "
+#~ "desenvolvedores\n"
+#~ "    do programa.\n"
+
+#, fuzzy
+#~ msgid "POP Username: "
+#~ msgstr "Nome do usuário IMAP: "
+
+#~ msgid "Reading new message (%d bytes)..."
+#~ msgstr "Lendo nova mensagem (%d bytes)..."
+
+#~ msgid "Error reading message!"
+#~ msgstr "Erro ao ler mensagem!"
+
+#~ msgid "%s [%d message read]"
+#~ msgstr "%s [%d mensagem lida]"
+
+#~ msgid "Creating mailboxes is not yet supported."
+#~ msgstr "Ainda não é possível criar caixas de correio."
+
+#~ msgid "Reopening mailbox... %s"
+#~ msgstr "Reabrindo a caixa... %s"
+
+#~ msgid "Closing mailbox..."
+#~ msgstr "Fechando caixa de mensagens..."
+
+#~ msgid "IMAP Username: "
+#~ msgstr "Nome do usuário IMAP: "
+
+#~ msgid "CRAM key for %s@%s: "
+#~ msgstr "Chave CRAM para %s@%s: "
+
+#~ msgid "Skipping CRAM-MD5 authentication."
+#~ msgstr "Pulando a autenticação CRAM-MD5."
+
+#~ msgid "[-- Error: unexpected end of file! --]\n"
+#~ msgstr "[-- Erro: fim de arquivo inesperado! --]\n"
+
+#~ msgid "Sending APPEND command ..."
+#~ msgstr "Enviando o comando APPEND..."
+
+#~ msgid "%d kept."
+#~ msgstr "%d mantidas."
+
+#~ msgid "POP Password: "
+#~ msgstr "Senha POP: "
+
+#~ msgid "No POP username is defined."
+#~ msgstr "Nenhum nome de usuário POP definido."
+
+#~ msgid "Could not find address for host %s."
+#~ msgstr "Não foi possível encontrar o endereço do servidor %s."
+
+#~ msgid "Attachment saved"
+#~ msgstr "Anexo salvo"
+
+#~ msgid "Can't open %s: %s."
+#~ msgstr "Não foi possível abrir %s: %s."
+
+#, fuzzy
+#~ msgid "Error while recoding %s. Leave it unchanged."
+#~ msgstr "Erro ao gravar %s. Veja %s para recuperar seus dados."
+
+#~ msgid "Error while recoding %s. See %s for recovering your data."
+#~ msgstr "Erro ao gravar %s. Veja %s para recuperar seus dados."
+
+#~ msgid "Can't change character set for non-text attachments!"
+#~ msgstr ""
+#~ "Não é possível mudar o conjunto de caracteres para anexos não-texto!"
+
+#~ msgid "Enter character set: "
+#~ msgstr "Informe o conjunto de caracteres: "
+
+#~ msgid "Recoding successful."
+#~ msgstr "Gravação bem sucedida."
+
+#~ msgid "change an attachment's character set"
+#~ msgstr "muda o conjunto de caracteres do anexo"
+
+#~ msgid "recode this attachment to/from the local charset"
+#~ msgstr "recodifica este anexo para/de o conjunto de caracteres local"
+
+#~ msgid "Compose"
+#~ msgstr "Compor"
+
+#~ msgid "We can't currently handle utf-8 at this point."
+#~ msgstr "Ainda não posso manipular UTF-8."
+
+#~ msgid "UTF-8 encoding attachments has not yet been implemented."
+#~ msgstr "Anexos codificados como UTF-8 ainda não funcionam."
+
+#~ msgid "We currently can't encode to utf-8."
+#~ msgstr "Ainda não é possível codificar como UTF-8"
+
+#~ msgid "move to the last undelete message"
+#~ msgstr "anda até a última mensagem não apagada"
+
+#~ msgid "return to the main-menu"
+#~ msgstr "retorna ao menu principal"
+
+#~ msgid "Sending CREATE command ..."
+#~ msgstr "Enviando o comando CREATE..."
+
+#~ msgid "Can't open your secret key ring!"
+#~ msgstr "Não foi possível abrir seu chaveiro secreto!"
+
+#~ msgid "An unkown PGP version was defined for signing."
+#~ msgstr "Uma versão desconhecida do PGP foi definida para assinatura."
+
+#~ msgid "===== Attachments ====="
+#~ msgstr "===== Anexos ====="
+
+#~ msgid "imap_error(): unexpected response in %s: %s\n"
+#~ msgstr "imap_error(): resposta inesperada em %s: %s\n"
+
+#~ msgid "ignoring empty header field: %s"
+#~ msgstr "ignorando campo de cabeçalho vazio: %s"
+
+#~ msgid "Unknown PGP version \"%s\"."
+#~ msgstr "Versão \"%s\" do PGP desconhecida."
+
+#~ msgid ""
+#~ "[-- Error: this message does not comply with the PGP/MIME specification! "
+#~ "--]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "[-- Erro: esta mensagem não está de acordo com a especificação PGP/MIME! "
+#~ "--]\n"
+#~ "\n"
+
+#~ msgid "reserved"
+#~ msgstr "reservado"
+
+#~ msgid "Encrypted Session Key"
+#~ msgstr "Chave de Sessão Encriptada"
+
+#~ msgid "Signature Packet"
+#~ msgstr "Pacote de Assinatura"
+
+#~ msgid "Conventionally Encrypted Session Key Packet"
+#~ msgstr "Pacote de Chaves de Sessão Convencionalmente Ecriptado"
+
+#~ msgid "One-Pass Signature Packet"
+#~ msgstr "Pacote de Assinatura de Um Passo"
+
+#~ msgid "Secret Key Packet"
+#~ msgstr "Pacote de Chave Secreta"
+
+#~ msgid "Public Key Packet"
+#~ msgstr "Pacote de Chave Pública"
+
+#~ msgid "Secret Subkey Packet"
+#~ msgstr "Pacote de Subchave Secreta"
+
+#~ msgid "Compressed Data Packet"
+#~ msgstr "Pacotes de Dados Compactado"
+
+#~ msgid "Symmetrically Encrypted Data Packet"
+#~ msgstr "Pacote de Dados Simetricamente Encriptado"
+
+#~ msgid "Marker Packet"
+#~ msgstr "Pacote de Marcação"
+
+#~ msgid "Literal Data Packet"
+#~ msgstr "Pacotes de Dados Literais"
+
+#~ msgid "Trust Packet"
+#~ msgstr "Pacote de Confiança"
+
+#~ msgid "Name Packet"
+#~ msgstr "Pacote de Nome"
+
+#~ msgid "Subkey Packet"
+#~ msgstr "Pacote de Subchave"
+
+#~ msgid "Reserved"
+#~ msgstr "Reservado"
+
+#~ msgid "Comment Packet"
+#~ msgstr "Pacote de Comentário"
+
+#~ msgid "Message edited. Really send?"
+#~ msgstr "Mensagem editada. Realmente enviar?"
+
+#~ msgid "Saved output of child process to %s.\n"
+#~ msgstr "Saída do processo filho salva em %s.\n"
diff --git a/po/ru.gmo b/po/ru.gmo
new file mode 100644 (file)
index 0000000..8c22498
Binary files /dev/null and b/po/ru.gmo differ
diff --git a/po/ru.po b/po/ru.po
new file mode 100644 (file)
index 0000000..72a1ce4
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,4170 @@
+# This file was prepared by (in alphabetical order):
+#
+#   Alexey Vyskubov (alexey@pepper.spb.ru)
+#   Andrew W. Nosenko (awn@bcs.zp.ua)
+#   Michael Sobolev (mss@transas.com)
+#   Vsevolod Volkov (vvv@mutt.org.ua)
+#
+# To contact translators, please use mutt-ru mailing list:
+#   http://woe.spb.ru/mailman/listinfo/mutt-ru
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mutt-1.5.5.1i\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2003-11-06 12:34+0200\n"
+"Last-Translator: mutt-ru@woe.spb.ru\n"
+"Language-Team: RUSSIAN <mutt-ru@woe.spb.ru>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=koi8-r\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "éÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ %s: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "ðÁÒÏÌØ ÄÌÑ %s@%s: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "÷ÙÈÏÄ"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "õÄÁÌÉÔØ"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "÷ÏÓÓÔÁÎÏ×ÉÔØ"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "÷ÙÂÒÁÔØ"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "ðÏÍÏÝØ"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "óÐÉÓÏË ÐÓÅ×ÄÏÎÉÍÏ× ÏÔÓÕÔÓÔ×ÕÅÔ!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "ðÓÅ×ÄÏÎÉÍÙ"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "ðÓÅ×ÄÏÎÉÍ: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "ôÁËÏÊ ÐÓÅ×ÄÏÎÉÍ ÕÖÅ ÐÒÉÓÕÔÓÔ×ÕÅÔ!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: üÔÏÔ ÐÓÅ×ÄÏÎÉÍ ÍÏÖÅÔ ÎÅ ÒÁÂÏÔÁÔØ. éÓÐÒÁ×ÉÔØ?"
+
+#: alias.c:279
+msgid "Address: "
+msgstr "áÄÒÅÓ: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr "ïÛÉÂËÁ: '%s' ÎÅ Ñ×ÌÑÅÔÓÑ ËÏÒÒÅËÔÎÙÍ IDN."
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "ðÏÌÎÏÅ ÉÍÑ: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] ðÒÉÎÑÔØ?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "óÏÈÒÁÎÉÔØ × ÆÁÊÌ: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "ðÓÅ×ÄÏÎÉÍ ÓÏÚÄÁÎ."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "îÅ ÕÄÁÌÏÓØ ÒÁÚÏÂÒÁÔØ ÉÍÑ. ðÒÏÄÏÌÖÉÔØ?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "õËÁÚÁÎÎÙÊ × mailcap ÓÐÏÓÏ ÓÏÚÄÁÎÉÑ ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÑ ÐÁÒÁÍÅÔÒÁ %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "ïÛÉÂËÁ ×ÙÐÏÌÎÅÎÉÑ \"%s\"!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ÆÁÊÌ ÄÌÑ ÒÁÚÂÏÒÁ ÚÁÇÏÌÏ×ËÏ×."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ÆÁÊÌ ÄÌÑ ÕÄÁÌÅÎÉÑ ÚÁÇÏÌÏ×ËÏ×."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "÷ mailcap ÎÅ ÏÐÒÅÄÅÌÅΠÓÐÏÓÏ ÓÏÚÄÁÎÉÑ ÄÌÑ %s; ÓÏÚÄÁΠÐÕÓÔÏÊ ÆÁÊÌ."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr ""
+"õËÁÚÁÎÎÙÊ × mailcap ÓÐÏÓÏ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÑ ÐÁÒÁÍÅÔÒÁ %%s"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "÷ mailcap ÎÅ ÏÐÒÅÄÅÌÅΠÓÐÏÓÏ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÄÌÑ %s"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "ðÏÄÈÏÄÑÝÁÑ ÚÁÐÉÓØ × mailcap ÎÅ ÎÁÊÄÅÎÁ; ÐÒÏÓÍÏÔÒ ËÁË ÔÅËÓÔÁ."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "MIME-ÔÉРÎÅ ÏÐÒÅÄÅÌÅÎ.  îÅ×ÏÚÍÏÖÎÏ ÐÒÏÓÍÏÔÒÅÔØ ×ÌÏÖÅÎÉÅ."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÆÉÌØÔÒ"
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÆÉÌØÔÒ"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "îÅÉÚ×ÅÓÔÎÏ, ËÁË ÜÔÏ ÐÅÞÁÔÁÔØ!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "ðÅÒÅÊÔÉ ×: "
+
+#: browser.c:42
+msgid "Mask"
+msgstr "íÁÓËÁ"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ËÁÔÁÌÏÇÏÍ."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "ðÏÞÔÏ×ÙÅ ÑÝÉËÉ [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "ðÏÄËÌÀÞÅÎÉÅ [%s], ÍÁÓËÁ ÆÁÊÌÁ: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "ëÁÔÁÌÏÇ [%s], ÍÁÓËÁ ÆÁÊÌÁ: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "÷ÌÏÖÅÎÉÅ ËÁÔÁÌÏÇÏ× ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "îÅÔ ÆÁÊÌÏ×, ÕÄÏ×ÌÅÔ×ÏÒÑÀÝÉÈ ÄÁÎÎÏÊ ÍÁÓËÅ"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "óÏÚÄÁÎÉÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÔÏÌØËÏ ÄÌÑ ÐÏÞÔÏ×ÙÈ ÑÝÉËÏ× ÎÁ IMAP-ÓÅÒ×ÅÒÁÈ"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "õÄÁÌÅÎÉÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÔÏÌØËÏ ÄÌÑ ÐÏÞÔÏ×ÙÈ ÑÝÉËÏ× ÎÁ IMAP-ÓÅÒ×ÅÒÁÈ"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "õÄÁÌÉÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË \"%s\"?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÕÄÁÌÅÎ."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÎÅ ÕÄÁÌÅÎ."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "ðÅÒÅÊÔÉ ×: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "ïÛÉÂËÁ ÐÒÏÓÍÏÔÒÁ ËÁÔÁÌÏÇÁ."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "íÁÓËÁ ÆÁÊÌÁ: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "ïÂÒÁÔÎÙÊ ÐÏÒÑÄÏË ÐÏ (d)ÄÁÔÅ, (a)ÉÍÅÎÉ, (z)ÒÁÚÍÅÒÕ ÉÌÉ (n)ÏÔÓÕÔÓÔ×ÕÅÔ?"
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "õÐÏÒÑÄÏÞÉÔØ ÐÏ (d)ÄÁÔÅ, (a)ÉÍÅÎÉ, (z)ÒÁÚÍÅÒÕ ÉÌÉ (n)ÏÔÓÕÔÓÔ×ÕÅÔ?"
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "dazn"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "îÏ×ÏÅ ÉÍÑ ÆÁÊÌÁ: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "îÅ ÕÄÁÌÏÓØ ÐÒÏÓÍÏÔÒÅÔØ ËÁÔÁÌÏÇ"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "ïÛÉÂËÁ ÐÒÉ ÐÏÐÙÔËÅ ÐÒÏÓÍÏÔÒÁ ÆÁÊÌÁ"
+
+#: buffy.c:442
+msgid "New mail in "
+msgstr "îÏ×ÁÑ ÐÏÞÔÁ × "
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: Ã×ÅÔ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÔÅÒÍÉÎÁÌÏÍ"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: ÎÅÔ ÔÁËÏÇÏ Ã×ÅÔÁ"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: ÎÅÔ ÔÁËÏÇÏ ÏÂßÅËÔÁ"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: ËÏÍÁÎÄÁ ÄÏÓÔÕÐÎÁ ÔÏÌØËÏ ÄÌÑ ÉÎÄÅËÓÁ"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: ÓÌÉÛËÏÍ ÍÁÌÏ ÁÒÇÕÍÅÎÔÏ×"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "îÅÏÂÈÏÄÉÍÙÅ ÁÒÇÕÍÅÎÔÙ ÏÔÓÕÔÓÔ×ÕÀÔ."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: ÓÌÉÛËÏÍ ÍÁÌÏ ÁÒÇÕÍÅÎÔÏ×"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: ÓÌÉÛËÏÍ ÍÁÌÏ ÁÒÇÕÍÅÎÔÏ×"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: ÎÅÔ ÔÁËÏÇÏ ÁÔÒÉÂÕÔÁ"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "ÓÌÉÛËÏÍ ÍÁÌÏ ÁÒÇÕÍÅÎÔÏ×"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ×"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "Ã×ÅÔÁ ÐÏ ÕÍÏÌÞÁÎÉÀ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "ðÒÏ×ÅÒÉÔØ PGP-ÐÏÄÐÉÓØ?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÆÉÌØÔÒ ÐÒÏÓÍÏÔÒÁ"
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "îÅ ÕÄÁÌÏÓØ ÓËÏÐÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÅ"
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr "S/MIME-ÐÏÄÐÉÓØ ÐÒÏ×ÅÒÅÎÁ."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr "ïÔÐÒÁ×ÉÔÅÌØ ÓÏÏÂÝÅÎÉÑ ÎÅ Ñ×ÌÑÅÔÓÑ ×ÌÁÄÅÌØÃÅÍ S/MIME-ÓÅÒÔÉÆÉËÁÔÁ."
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr "S/MIME-ÐÏÄÐÉÓØ ÐÒÏ×ÅÒÉÔØ îå ÕÄÁÌÏÓØ."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "PGP-ÐÏÄÐÉÓØ ÐÒÏ×ÅÒÅÎÁ."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "PGP-ÐÏÄÐÉÓØ ÐÒÏ×ÅÒÉÔØ îå ÕÄÁÌÏÓØ."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "ëÏÍÁÎÄÁ: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "ðÅÒÅÎÁÐÒÁ×ÉÔØ ÓÏÏÂÝÅÎÉÅ: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "ðÅÒÅÎÁÐÒÁ×ÉÔØ ÓÏÏÂÝÅÎÉÑ: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "ïÛÉÂËÁ ÒÁÚÂÏÒÁ ÁÄÒÅÓÁ!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr "îÅËÏÒÒÅËÔÎÙÊ IDN: '%s'"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "ðÅÒÅÎÁÐÒÁ×ÉÔØ ÓÏÏÂÝÅÎÉÅ %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "ðÅÒÅÎÁÐÒÁ×ÉÔØ ÓÏÏÂÝÅÎÉÑ %s"
+
+#: commands.c:294 recvcmd.c:192
+msgid "Message not bounced."
+msgstr "óÏÏÂÝÅÎÉÅ ÎÅ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÏ."
+
+#: commands.c:294 recvcmd.c:192
+msgid "Messages not bounced."
+msgstr "óÏÏÂÝÅÎÉÑ ÎÅ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÙ."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "óÏÏÂÝÅÎÉÅ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÏ."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "óÏÏÂÝÅÎÉÑ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÙ."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÐÒÏÃÅÓÓ ÆÉÌØÔÒÁ"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "ðÅÒÅÄÁÔØ ÐÒÏÇÒÁÍÍÅ: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "ëÏÍÁÎÄÁ ÄÌÑ ÐÅÞÁÔÉ ÎÅ ÏÐÒÅÄÅÌÅÎÁ."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "îÁÐÅÞÁÔÁÔØ ÓÏÏÂÝÅÎÉÅ?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "îÁÐÅÞÁÔÁÔØ ÏÔÍÅÞÅÎÎÙÅ ÓÏÏÂÝÅÎÉÑ?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "óÏÏÂÝÅÎÉÅ ÎÁÐÅÞÁÔÁÎÏ"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "óÏÏÂÝÅÎÉÑ ÎÁÐÅÞÁÔÁÎÙ"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "îÅ ÕÄÁÌÏÓØ ÎÁÐÅÞÁÔÁÔØ ÓÏÏÂÝÅÎÉÅ"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "îÅ ÕÄÁÌÏÓØ ÎÁÐÅÞÁÔÁÔØ ÓÏÏÂÝÅÎÉÑ"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"ïÂÒ.ÐÏÒ.:(d)ÄÁÔÁ/(f)ÏÔ/(r)ÐÏÌÕÞ/(s)ÔÅÍÁ/(o)ËÏÍÕ/(t)ÄÉÓË/(u)ÂÅÚ/(z)ÒÁÚÍ/(c)"
+"ËÏÎÔ?"
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"ðÏÒÑÄÏË:(d)ÄÁÔÁ/(f)ÏÔ/(r)ÐÏÌÕÞ/(s)ÔÅÍÁ/(o)ËÏÍÕ/(t)ÄÉÓË/(u)ÂÅÚ/(z)ÒÁÚÍ/(c)"
+"ËÏÎÔ?"
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dfrsotuzc"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "ðÒÏÇÒÁÍÍÁ: "
+
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "äÅËÏÄÉÒÏ×ÁÔØ É ÓÏÈÒÁÎÉÔØ%s × ÐÏÞÔÏ×ÙÊ ÑÝÉË"
+
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "äÅËÏÄÉÒÏ×ÁÔØ É ËÏÐÉÒÏ×ÁÔØ%s × ÐÏÞÔÏ×ÙÊ ÑÝÉË"
+
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "òÁÓÛÉÆÒÏ×ÁÔØ É ÓÏÈÒÁÎÉÔØ%s × ÐÏÞÔÏ×ÙÊ ÑÝÉË"
+
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "òÁÓÛÉÆÒÏ×ÁÔØ É ËÏÐÉÒÏ×ÁÔØ%s × ÐÏÞÔÏ×ÙÊ ÑÝÉË"
+
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "óÏÈÒÁÎÉÔØ%s × ÐÏÞÔÏ×ÙÊ ÑÝÉË"
+
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "ëÏÐÉÒÏ×ÁÔØ%s × ÐÏÞÔÏ×ÙÊ ÑÝÉË"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " ÐÏÍÅÞÅÎÎÏÅ"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "ëÏÐÉÒÕÅÔÓÑ × %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "ðÅÒÅËÏÄÉÒÏ×ÁÔØ × %s ÐÒÉ ÏÔÐÒÁ×ËÅ?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "úÎÁÞÅÎÉÅ Content-Type ÉÚÍÅÎÅÎÏ ÎÁ %s."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "õÓÔÁÎÏ×ÌÅÎÁ ÎÏ×ÁÑ ËÏÄÉÒÏ×ËÁ: %s; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "ÎÅ ÐÅÒÅËÏÄÉÒÏ×ÁÔØ"
+
+#: commands.c:914
+msgid "converting"
+msgstr "ÐÅÒÅËÏÄÉÒÏ×ÁÔØ"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "÷ÌÏÖÅÎÉÊ ÎÅÔ."
+
+#: compose.c:84
+msgid "Send"
+msgstr "ïÔÐÒÁ×ÉÔØ"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "ðÒÅÒ×ÁÔØ"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "÷ÌÏÖÉÔØ ÆÁÊÌ"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "ïÐÉÓÁÎÉÅ"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "ðÏÄÐÉÓÁÔØ É ÚÁÛÉÆÒÏ×ÁÔØ"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "úÁÛÉÆÒÏ×ÁÔØ"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "ðÏÄÐÉÓÁÔØ"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "îÅ ÐÒÉÍÅÎÑÔØ"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " ÐÏÄÐÉÓÁÔØ ËÁË: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<ÐÏ ÕÍÏÌÞÁÎÉÀ>"
+
+#: compose.c:149
+msgid "Encrypt with: "
+msgstr "úÁÛÉÆÒÏ×ÁÔØ: "
+
+#: compose.c:165
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "PGP (e)ÛÉÆÒ, (s)ÐÏÄÐÉÓØ, (a)ÐÏÄÐÉÓØ ËÁË, (b)ÏÂÁ, (f)ÏÔËÁÚÁÔØÓÑ? "
+
+#: compose.c:166
+msgid "esabf"
+msgstr "esabf"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "ðÏÄÐÉÓÁÔØ ËÁË: "
+
+#: compose.c:227
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"S/MIME (e)ÛÉÆÒ, (s)ÐÏÄÐÉÓØ, (w)ÛÉÆÒ ËÁË, (a)ÐÏÄÐÉÓØ ËÁË, (b)ÏÂÁ, (f)ÏÔËÁÚ? "
+
+#: compose.c:228
+msgid "eswabf"
+msgstr "eswabf"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, (f)ÏÔËÁÚÁÔØÓÑ? "
+
+#: compose.c:238
+msgid "12345f"
+msgstr "12345f"
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] ÕÖÅ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] ÉÚÍÅÎÅÎ.  ïÂÎÏ×ÉÔØ ËÏÄÉÒÏ×ËÕ?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- ÷ÌÏÖÅÎÉÑ"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: '%s' ÎÅ Ñ×ÌÑÅÔÓÑ ËÏÒÒÅËÔÎÙÍ IDN."
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "÷Ù ÎÅ ÍÏÖÅÔÅ ÕÄÁÌÉÔØ ÅÄÉÎÓÔ×ÅÎÎÏÅ ×ÌÏÖÅÎÉÅ."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr "îÅËÏÒÒÅËÔÎÙÊ IDN × \"%s\": '%s'."
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "÷ËÌÁÄÙ×ÁÀÔÓÑ ÐÏÍÅÞÅÎÎÙÅ ÆÁÊÌÙ..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "îÅ ÕÄÁÌÏÓØ ×ÌÏÖÉÔØ %s!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "÷ÌÏÖÉÔØ ÓÏÏÂÝÅÎÉÅ ÉÚ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "÷ ÜÔÏÍ ÐÏÞÔÏ×ÏÍ ÑÝÉËÅ/ÆÁÊÌÅ ÎÅÔ ÓÏÏÂÝÅÎÉÊ."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "ðÏÍÅÔØÔÅ ÓÏÏÂÝÅÎÉÑ, ËÏÔÏÒÙÅ ×Ù ÈÏÔÉÔÅ ×ÌÏÖÉÔØ!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ×ÌÏÖÅÎÉÅ!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "ðÅÒÅËÏÄÉÒÏ×ÁÎÉÅ ÄÏÐÕÓÔÉÍÏ ÔÏÌØËÏ ÄÌÑ ÔÅËÓÔÏ×ÙÈ ×ÌÏÖÅÎÉÊ."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "ôÅËÕÝÅÅ ×ÌÏÖÅÎÉÅ ÎÅ ÂÕÄÅÔ ÐÅÒÅËÏÄÉÒÏ×ÁÎÏ."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "ôÅËÕÝÅÅ ×ÌÏÖÅÎÉÅ ÂÕÄÅÔ ÐÅÒÅËÏÄÉÒÏ×ÁÎÏ."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "îÅ×ÅÒÎÁÑ ËÏÄÉÒÏ×ËÁ."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "óÏÈÒÁÎÉÔØ ËÏÐÉÀ ÜÔÏÇÏ ÓÏÏÂÝÅÎÉÑ?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "ðÅÒÅÉÍÅÎÏ×ÁÔØ ×: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "îÅ ÕÄÁÌÏÓØ ÐÏÌÕÞÉÔØ ÉÎÆÏÒÍÁÃÉÀ Ï %s: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "îÏ×ÙÊ ÆÁÊÌ: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "ðÏÌÅ Content-Type ÄÏÌÖÎÏ ÉÍÅÔØ ×ÉÄ ÔÉÐ/ÐÏÄÔÉÐ"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "îÅÉÚ×ÅÓÔÎÏÅ ÚÎÁÞÅÎÉÅ ÐÏÌÑ Content-Type: %s"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÆÁÊÌ %s"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ×ÌÏÖÅÎÉÅ"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "ïÔÌÏÖÉÔØ ÜÔÏ ÓÏÏÂÝÅÎÉÅ?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "úÁÐÉÓÁÔØ ÓÏÏÂÝÅÎÉÅ × ÐÏÞÔÏ×ÙÊ ÑÝÉË"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "óÏÏÂÝÅÎÉÅ ÚÁÐÉÓÙ×ÁÅÔÓÑ × %s..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "óÏÏÂÝÅÎÉÅ ÚÁÐÉÓÁÎÏ."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr "S/MIME ÕÖÅ ÉÓÐÏÌØÚÕÅÔÓÑ. ïÞÉÓÔÉÔØ É ÐÒÏÄÏÌÖÉÔØ? "
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr "PGP ÕÖÅ ÉÓÐÏÌØÚÕÅÔÓÑ. ïÞÉÓÔÉÔØ É ÐÒÏÄÏÌÖÉÔØ? "
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr " (ÔÅËÕÝÅÅ ×ÒÅÍÑ: %c)"
+
+#: crypt.c:71
+#, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- òÅÚÕÌØÔÁÔ ÒÁÂÏÔÙ ÐÒÏÇÒÁÍÍÙ %s%s --]\n"
+
+#: crypt.c:86
+msgid "Passphrase(s) forgotten."
+msgstr "æÒÁÚÙ-ÐÁÒÏÌÉ ÕÄÁÌÅÎÙ ÉÚ ÐÁÍÑÔÉ."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "÷×ÅÄÉÔÅ PGP ÆÒÁÚÕ-ÐÁÒÏÌØ:"
+
+#: crypt.c:147
+msgid "Enter SMIME passphrase:"
+msgstr "÷×ÅÄÉÔÅ S/MIME ÆÒÁÚÕ-ÐÁÒÏÌØ:"
+
+#: crypt.c:192
+msgid "Create a traditional (inline) PGP message?"
+msgstr "óÏÚÄÁÔØ PGP-ÓÏÏÂÝÅÎÉÅ × ÔÅËÓÔÏ×ÏÍ ÆÏÒÍÁÔÅ?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "úÁÐÕÓËÁÅÔÓÑ ÐÒÏÇÒÁÍÍÁ PGP..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr "S/MIME-ÓÏÏÂÝÅÎÉÑ ÂÅÚ ÕËÁÚÁÎÉÑ ÔÉÐÁ ÓÏÄÅÒÖÉÍÏÇÏ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ."
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr "ðÏÐÙÔËÁ ÉÚ×ÌÅÞØ PGP ËÌÀÞÉ...\n"
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr "ðÏÐÙÔËÁ ÉÚ×ÌÅÞØ S/MIME ÓÅÒÔÉÆÉËÁÔÙ...\n"
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- ïÛÉÂËÁ: ÎÁÒÕÛÅÎÁ ÓÔÒÕËÔÕÒÁ multipart/signed-ÓÏÏÂÝÅÎÉÑ! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- ïÛÉÂËÁ: ÎÅÉÚ×ÅÓÔÎÙÊ multipart/signed ÐÒÏÔÏËÏÌ %s! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅ ÕÄÁÌÏÓØ ÐÒÏ×ÅÒÉÔØ %s/%s ÐÏÄÐÉÓÉ. --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- îÁÞÁÌÏ ÐÏÄÐÉÓÁÎÎÙÈ ÄÁÎÎÙÈ --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅ ÎÁÊÄÅÎÏ ÎÉ ÏÄÎÏÊ ÐÏÄÐÉÓÉ. --]\n"
+"\n"
+
+#: crypt.c:924
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- ëÏÎÅàÐÏÄÐÉÓÁÎÎÙÈ ÄÁÎÎÙÈ --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "ÄÁ"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "ÎÅÔ"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "úÁ×ÅÒÛÉÔØ ÒÁÂÏÔÕ Ó Mutt?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "þÔÏÂÙ ÐÒÏÄÏÌÖÉÔØ, ÎÁÖÍÉÔÅ ÌÀÂÕÀ ËÌÁ×ÉÛÕ..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " ('?' -- ÓÐÉÓÏË): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "îÅÔ ÏÔËÒÙÔÏÇÏ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "óÏÏÂÝÅÎÉÊ ÎÅÔ."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÎÅÍÏÄÉÆÉÃÉÒÕÅÍ."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "÷ ÒÅÖÉÍÅ \"×ÌÏÖÉÔØ ÓÏÏÂÝÅÎÉÅ\" ÆÕÎËÃÉÑ ÎÅÄÏÓÔÕÐÎÁ."
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "îÅÔ ×ÉÄÉÍÙÈ ÓÏÏÂÝÅÎÉÊ."
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "îÅ ÍÏÇÕ ÒÁÚÒÅÛÉÔØ ÚÁÐÉÓØ × ÐÏÞÔÏ×ÙÊ ÑÝÉË, ÏÔËÒÙÔÙÊ ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "éÚÍÅÎÅÎÉÑ × ÓÏÓÔÏÑÎÉÅ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ ÂÕÄÕÔ ×ÎÅÓÅÎÙ ÐÒÉ ÅÇÏ ÚÁËÒÙÔÉÉ."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "éÚÍÅÎÅÎÉÑ × ÓÏÓÔÏÑÎÉÅ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ ÎÅ ÂÕÄÕÔ ×ÎÅÓÅÎÙ."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "÷ÙÈÏÄ"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "óÏÈÒÁÎÉÔØ"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "óÏÚÄÁÔØ"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "ïÔ×ÅÔÉÔØ"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "÷ÓÅÍ"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr ""
+"ñÝÉË ÂÙÌ ÉÚÍÅÎÅΠ×ÎÅÛÎÅÊ ÐÒÏÇÒÁÍÍÏÊ.  úÎÁÞÅÎÉÑ ÆÌÁÇÏ× ÍÏÇÕÔ ÂÙÔØ ÎÅËÏÒÒÅËÔÎÙ."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "îÏ×ÁÑ ÐÏÞÔÁ × ÜÔÏÍ ÑÝÉËÅ."
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "ñÝÉË ÂÙÌ ÉÚÍÅÎÅΠ×ÎÅÛÎÅÊ ÐÒÏÇÒÁÍÍÏÊ."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "îÅÔ ÏÔÍÅÞÅÎÎÙÈ ÓÏÏÂÝÅÎÉÊ."
+
+#: curs_main.c:653 menu.c:896
+msgid "Nothing to do."
+msgstr "îÅÔ ÐÏÍÅÞÅÎÎÙÈ ÓÏÏÂÝÅÎÉÊ."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "ðÅÒÅÊÔÉ Ë ÓÏÏÂÝÅÎÉÀ: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "áÒÇÕÍÅÎÔ ÄÏÌÖÅΠÂÙÔØ ÎÏÍÅÒÏÍ ÓÏÏÂÝÅÎÉÑ."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "üÔÏ ÓÏÏÂÝÅÎÉÅ ÎÅ×ÉÄÉÍÏ."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "îÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÓÏÏÂÝÅÎÉÑ."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "õÄÁÌÉÔØ ÓÏÏÂÝÅÎÉÑ ÐÏ ÏÂÒÁÚÃÕ: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "ûÁÂÌÏΠÏÇÒÁÎÉÞÅÎÉÑ ÓÐÉÓËÁ ÏÔÓÕÔÓÔ×ÕÅÔ."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "ûÁÂÌÏΠÏÇÒÁÎÉÞÅÎÉÑ: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "ïÇÒÁÎÉÞÉÔØÓÑ ÓÏÏÂÝÅÎÉÑÍÉ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÍÉ: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "÷ÙÊÔÉ ÉÚ Mutt?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "ðÏÍÅÔÉÔØ ÓÏÏÂÝÅÎÉÑ ÐÏ ÏÂÒÁÚÃÕ: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "÷ÏÓÓÔÁÎÏ×ÉÔØ ÓÏÏÂÝÅÎÉÑ ÐÏ ÏÂÒÁÚÃÕ: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "óÎÑÔØ ÐÏÍÅÔËÕ Ó ÓÏÏÂÝÅÎÉÊ ÐÏ ÏÂÒÁÚÃÕ: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "ïÔËÒÙÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "ïÔËÒÙÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÐÏÞÔÏ×ÙÍ ÑÝÉËÏÍ."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "÷ÙÊÔÉ ÉÚ Mutt ÂÅÚ ÓÏÈÒÁÎÅÎÉÑ ÉÚÍÅÎÅÎÉÊ?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "üÔÏ ÐÏÓÌÅÄÎÅÅ ÓÏÏÂÝÅÎÉÅ."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "îÅÔ ×ÏÓÓÔÁÎÏ×ÌÅÎÎÙÈ ÓÏÏÂÝÅÎÉÊ."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "üÔÏ ÐÅÒ×ÏÅ ÓÏÏÂÝÅÎÉÅ."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "äÏÓÔÉÇÎÕÔ ËÏÎÅÃ; ÐÒÏÄÏÌÖÁÅÍ ÐÏÉÓË Ó ÎÁÞÁÌÁ."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "äÏÓÔÉÇÎÕÔÏ ÎÁÞÁÌÏ; ÐÒÏÄÏÌÖÁÅÍ ÐÏÉÓË Ó ËÏÎÃÁ."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "îÅÔ ÎÏ×ÙÈ ÓÏÏÂÝÅÎÉÊ"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "îÅÔ ÎÅÐÒÏÞÉÔÁÎÎÙÈ ÓÏÏÂÝÅÎÉÊ"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " ÐÒÉ ÐÒÏÓÍÏÔÒÅ Ó ÏÇÒÁÎÉÞÅÎÉÅÍ"
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "éÚÍÅÎÅÎÉÅ ÆÌÁÇÁ '×ÁÖÎÏÅ' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ POP-ÓÅÒ×ÅÒÏÍ."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "îÅÔ ÂÏÌØÛÅ ÄÉÓËÕÓÓÉÊ."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "üÔÏ ÐÅÒ×ÁÑ ÄÉÓËÕÓÓÉÑ"
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "çÒÕÐÐÉÒÏ×ËÁ ÐÏ ÄÉÓËÕÓÓÉÑÍ ÎÅ ×ËÌÀÞÅÎÁ."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "÷ ÄÉÓËÕÓÓÉÉ ÐÒÉÓÕÔÓÔ×ÕÀÔ ÎÅÐÒÏÞÉÔÁÎÎÙÅ ÓÏÏÂÝÅÎÉÑ."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "òÅÄÁËÔÉÒÏ×ÁÎÉÅ ÓÏÏÂÝÅÎÉÊ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ POP-ÓÅÒ×ÅÒÏÍ."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\t\t××ÅÓÔÉ ÓÔÒÏËÕ, ÎÁÞÉÎÁÀÝÕÀÓÑ Ó ÓÉÍ×ÏÌÁ ~\n"
+"~b ÐÏÌØÚÏ×ÁÔÅÌÉ\tÏÔÐÒÁ×ÉÔØ ÄÁÎÎÙÍ ÐÏÌØÚÏ×ÁÔÅÌÑÍ \"ÓÌÅÐÕÀ\" ËÏÐÉÀ\n"
+"~c ÐÏÌØÚÏ×ÁÔÅÌÉ\tÏÔÐÒÁ×ÉÔØ ÄÁÎÎÙÍ ÐÏÌØÚÏ×ÁÔÅÌÑÍ ËÏÐÉÀ\n"
+"~f ÓÏÏÂÝÅÎÉÑ\t\t×ËÌÀÞÉÔØ ÄÁÎÎÙÅ ÓÏÏÂÝÅÎÉÑ\n"
+"~F ÓÏÏÂÝÅÎÉÑ\t\t×ËÌÀÞÉÔØ ÄÁÎÎÙÅ ÓÏÏÂÝÅÎÉÑ É ÉÈ ÚÁÇÏÌÏ×ËÉ\n"
+"~h\t\t\tÒÅÄÁËÔÉÒÏ×ÁÔØ ÚÁÇÏÌÏ×ËÉ ÓÏÏÂÝÅÎÉÑ\n"
+"~m ÓÏÏÂÝÅÎÉÑ\t\tÐÒÏÃÉÔÉÒÏ×ÁÔØ ÄÁÎÎÙÅ ÓÏÏÂÝÅÎÉÑ\n"
+"~M ÓÏÏÂÝÅÎÉÑ\t\tÐÒÏÃÉÔÉÒÏ×ÁÔØ ÄÁÎÎÙÅ ÓÏÏÂÝÅÎÉÑ É ÉÈ ÚÁÇÏÌÏ×ËÉ\n"
+"~p\t\t\tÎÁÐÅÞÁÔÁÔØ ÜÔÏ ÓÏÏÂÝÅÎÉÅ\n"
+"~q\t\t\tÚÁÐÉÓÁÔØ ÆÁÊÌ É ×ÙÊÔÉ ÉÚ ÒÅÄÁËÔÏÒÁ\n"
+"~r ÆÁÊÌ\t\t×ËÌÀÞÉÔØ ÄÁÎÎÙÊ ÆÁÊÌ\n"
+"~t ÐÏÌØÚÏ×ÁÔÅÌÉ\tÄÏÂÁ×ÉÔØ ÄÁÎÎÙÈ ÐÏÌØÚÏ×ÁÔÅÌÅÊ × ÓÐÉÓÏË ÁÄÒÅÓÁÔÏ×\n"
+"~u\t\t\tÉÓÐÏÌØÚÏ×ÁÔØ ÐÒÅÄÙÄÕÝÕÀ ÓÔÒÏËÕ\n"
+"~v\t\t\tÒÅÄÁËÔÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÅ ÐÒÉ ÐÏÍÏÝÉ ×ÎÅÛÎÅÇÏ ÒÅÄÁËÔÏÒÁ\n"
+"~w ÆÁÊÌ\t\tÓÏÈÒÁÎÉÔØ ÓÏÏÂÝÅÎÉÅ × ÆÁÊÌÅ\n"
+"~x\t\t\tÏÔËÁÚÁÔØÓÑ ÏÔ ÉÚÍÅÎÅÎÉÊ É ×ÙÊÔÉ ÉÚ ÒÅÄÁËÔÏÒÁ\n"
+"~?\t\t\t×Ù×ÅÓÔÉ ÜÔÏ ÓÏÏÂÝÅÎÉÅ\n"
+".\t\t\tÓÔÒÏËÁ, ÓÏÄÅÒÖÁÝÁÑ ÔÏÌØËÏ ÔÏÞËÕ, ÚÁËÁÎÞÉ×ÁÅÔ ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: ÎÅÄÏÐÕÓÔÉÍÙÊ ÎÏÍÅÒ ÓÏÏÂÝÅÎÉÑ.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(äÌÑ ÚÁ×ÅÒÛÅÎÉÑ ××ÅÄÉÔÅ ÓÔÒÏËÕ, ÓÏÄÅÒÖÁÝÕÀ ÔÏÌØËÏ .)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "îÅÔ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "óÏÏÂÝÅÎÉÅ ÓÏÄÅÒÖÉÔ:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(ÐÒÏÄÏÌÖÉÔØ)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ ÉÍÑ ÆÁÊÌÁ.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "ôÅËÓÔ ÓÏÏÂÝÅÎÉÑ ÏÔÓÕÔÓÔ×ÕÅÔ.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr "îÅËÏÒÒÅËÔÎÙÊ IDN × %s: '%s'\n"
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÁÑ ËÏÍÁÎÄÁ ÒÅÄÁËÔÏÒÁ (××ÅÄÉÔÅ ~? ÄÌÑ ÓÐÒÁ×ËÉ)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÙÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË: %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "ÏÛÉÂËÁ ÚÁÐÉÓÉ ×Ï ×ÒÅÍÅÎÎÙÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË: %s"
+
+#: editmsg.c:101
+#, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ÕÓÅÞØ ×ÒÅÍÅÎÎÙÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË: %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "æÁÊÌ ÓÏÏÂÝÅÎÉÑ ÐÕÓÔ!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "óÏÏÂÝÅÎÉÅ ÎÅ ÉÚÍÅÎÉÌÏÓØ!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ÆÁÊÌ ÓÏÏÂÝÅÎÉÑ: %s"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "îÅ ÕÄÁÌÏÓØ ÄÏÂÁ×ÉÔØ Ë ÐÏÞÔÏ×ÏÍÕ ÑÝÉËÕ: %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "ïÛÉÂËÁ. ÷ÒÅÍÅÎÎÙÊ ÆÁÊÌ ÏÓÔÁ×ÌÅÎ: %s"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "õÓÔÁÎÏ×ÉÔØ ÆÌÁÇ"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "óÂÒÏÓÉÔØ ÆÌÁÇ"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[-- ïÛÉÂËÁ: ÎÅ ÕÄÁÌÏÓØ ÐÏËÁÚÁÔØ ÎÉ ÏÄÎÕ ÉÚ ÞÁÓÔÅÊ Multipart/Alternative! "
+"--]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- ÷ÌÏÖÅÎÉÅ #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- ôÉÐ: %s/%s, ËÏÄÉÒÏ×ËÁ: %s, ÒÁÚÍÅÒ: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- á×ÔÏÐÒÏÓÍÏÔÒ; ÉÓÐÏÌØÚÕÅÔÓÑ %s --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "úÁÐÕÓËÁÅÔÓÑ ÐÒÏÇÒÁÍÍÁ Á×ÔÏÐÒÏÓÍÏÔÒÁ: %s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- îÅ ÕÄÁÌÏÓØ ×ÙÐÏÌÎÉÔØ %s. --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- á×ÔÏÐÒÏÓÍÏÔÒ ÓÔÁÎÄÁÒÔÎÏÇÏ ÐÏÔÏËÁ ÏÛÉÂÏË %s --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- ïÛÉÂËÁ: ÔÉРmessage/external ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÅ ÐÁÒÁÍÅÔÒÁ access-type --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- üÔÏ ×ÌÏÖÅÎÉÅ ÔÉÐÁ %s/%s "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(ÒÁÚÍÅÒ %s ÂÁÊÔÏ×) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "ÂÙÌÏ ÕÄÁÌÅÎÏ --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- %s --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- ÉÍÑ: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- üÔÏ ×ÌÏÖÅÎÉÅ ÔÉÐÁ %s/%s ÎÅ ÂÙÌÏ ×ËÌÀÞÅÎÏ --]\n"
+
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+"[-- × ÓÏÏÂÝÅÎÉÅ, É ÂÏÌÅÅ ÎÅ ÓÏÄÅÒÖÉÔÓÑ × ÕËÁÚÁÎÎÏÍ --]\n"
+"[-- ×ÎÅÛÎÅÍ ÉÓÔÏÞÎÉËÅ. --]\n"
+
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr "[-- × ÓÏÏÂÝÅÎÉÅ, É ÚÎÁÞÅÎÉÅ access-type %s ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "ïÛÉÂËÁ: ÔÉРmultipart/signed ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÑ ÐÁÒÁÍÅÔÒÁ protocol."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "ïÛÉÂËÁ: ÔÉРmultipart/encrypted ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÑ ÐÁÒÁÍÅÔÒÁ protocol!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- ÔÉР%s/%s ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(ÉÓÐÏÌØÚÕÊÔÅ '%s' ÄÌÑ ÐÒÏÓÍÏÔÒÁ ÜÔÏÊ ÞÁÓÔÉ)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "(ÆÕÎËÃÉÑ 'view-attachments' ÎÅ ÎÁÚÎÁÞÅÎÁ ÎÉ ÏÄÎÏÊ ËÌÁ×ÉÛÅ!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: ÎÅ ÕÄÁÌÏÓØ ×ÌÏÖÉÔØ ÆÁÊÌ"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "ïûéâëá: ÐÏÖÁÌÕÊÓÔÁ. ÓÏÏÂÝÉÔÅ Ï ÎÅÊ"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<îåéú÷åóôîï>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"óÔÁÎÄÁÒÔÎÙÅ ÎÁÚÎÁÞÅÎÉÑ:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"îÅÎÁÚÎÁÞÅÎÎÙÅ ÆÕÎËÃÉÉ:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "óÐÒÁ×ËÁ ÄÌÑ %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ unhook * ÉÚ ËÏÍÁÎÄÙ hook."
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: ÎÅÉÚ×ÅÓÔÎÙÊ ÔÉРÓÏÂÙÔÉÑ: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ %s ÉÚ ËÏÍÁÎÄÙ %s."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "îÅÔ ÄÏÓÔÕÐÎÙÈ ÍÅÔÏÄÏ× ÁÕÔÅÎÔÉÆÉËÁÃÉÉ."
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "áÕÔÅÎÔÉÆÉËÁÃÉÑ (ÁÎÏÎÉÍÎÁÑ)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "ïÛÉÂËÁ ÁÎÏÎÉÍÎÏÊ ÁÕÔÅÎÔÉÆÉËÁÃÉÉ."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "áÕÔÅÎÔÉÆÉËÁÃÉÑ (ÍÅÔÏÄ CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "ïÛÉÂËÁ CRAM-MD5-ÁÕÔÅÎÔÉÆÉËÁÃÉÉ."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "áÕÔÅÎÔÉÆÉËÁÃÉÑ (ÍÅÔÏÄ GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "ïÛÉÂËÁ GSSAPI-ÁÕÔÅÎÔÉÆÉËÁÃÉÉ."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "ëÏÍÁÎÄÁ LOGIN ÚÁÐÒÅÝÅÎÁ ÎÁ ÜÔÏÍ ÓÅÒ×ÅÒÅ."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "òÅÇÉÓÔÒÁÃÉÑ..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "òÅÇÉÓÔÒÁÃÉÑ ÎÅ ÕÄÁÌÁÓØ."
+
+#: imap/auth_sasl.c:112
+#, c-format
+msgid "Authenticating (%s)..."
+msgstr "áÕÔÅÎÔÉÆÉËÁÃÉÑ (%s)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "ïÛÉÂËÁ SASL-ÁÕÔÅÎÔÉÆÉËÁÃÉÉ."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "îÅ×ÅÒÎÏ ÕËÁÚÁÎÏ ÉÍÑ IMAP-ÑÝÉËÁ: %s"
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "ðÏÌÕÞÅÎÉÅ ÓÐÉÓËÁ ÐÒÏÓÔÒÁÎÓÔ× ÉÍÅÎ..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "ðÏÌÕÞÅÎÉÅ ÓÐÉÓËÁ ÐÏÞÔÏ×ÙÈ ÑÝÉËÏ×..."
+
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "îÅÔ ÔÁËÏÇÏ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "óÏÚÄÁÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË: "
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÄÏÌÖÅΠÉÍÅÔØ ÉÍÑ."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÓÏÚÄÁÎ."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÚÁËÒÙÔ"
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "ëÒÉÔÉÞÅÓËÁÑ ÏÛÉÂËÁ.  óÂÏÊ ÓÉÎÈÒÏÎÉÚÁÃÉÉ ÓÞÅÔÞÉËÁ ÓÏÏÂÝÅÎÉÊ!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "úÁËÒÙÔÉÅ ÓÏÅÄÉÎÅÎÉÑ Ó ÓÅÒ×ÅÒÏÍ %s..."
+
+# "mutt ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ ×ÅÒÓÉÀ ÐÒÏÔÏËÏÌÁ, ÉÓÐÏÌØÚÕÅÍÙÊ ÎÁ ÜÔÏÍ ÓÅÒ×ÅÒÅ"
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr ""
+"üÔÏÔ IMAP-ÓÅÒ×ÅÒ ÉÓÐÏÌØÚÕÅÔ ÕÓÔÁÒÅ×ÛÉÊ ÐÒÏÔÏËÏÌ. Mutt ÎÅ ÓÍÏÖÅÔ ÒÁÂÏÔÁÔØ Ó "
+"ÎÉÍ."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr "ðÏÌÕÞÅΠÎÅÐÒÅÄ×ÉÄÅÎÎÙÊ ÏÔ×ÅÔ Ó ÓÅÒ×ÅÒÁ: %s"
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "éÓÐÏÌØÚÏ×ÁÔØ ÂÅÚÏÐÁÓÎÏÅ TLS-ÓÏÅÄÉÎÅÎÉÅ?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "îÅ ÕÄÁÌÏÓØ ÕÓÔÁÎÏ×ÉÔØ TLS-ÓÏÅÄÉÎÅÎÉÅ"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "÷ÙÂÉÒÁÅÔÓÑ %s..."
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "ïÛÉÂËÁ ÏÔËÒÙÔÉÑ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "îÅ ÕÄÁÌÏÓØ ÄÏÂÁ×ÉÔØ ÓÏÏÂÝÅÎÉÅ × IMAP-ÑÝÉË ÎÁ ÜÔÏÍ ÓÅÒ×ÅÒÅ!"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "óÏÚÄÁÔØ %s?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "úÁËÒÙÔÉÅ ÓÏÅÄÉÎÅÎÉÑ Ó ÓÅÒ×ÅÒÏÍ IMAP..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "%d ÓÏÏÂÝÅÎÉÊ ÐÏÍÅÞÁÀÔÓÑ ËÁË ÕÄÁÌÅÎÎÙÅ..."
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "îÅ ÕÄÁÌÏÓØ ÏÞÉÓÔÉÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "óÏÈÒÁÎÅÎÉÅ ÆÌÁÇÏ× ÓÏÓÔÏÑÎÉÑ ÓÏÏÂÝÅÎÉÊ... [%d ÉÚ %d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "õÄÁÌÅÎÉÅ ÓÏÏÂÝÅÎÉÊ Ó ÓÅÒ×ÅÒÁ..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbox: ÏÛÉÂËÁ ×ÙÐÏÌÎÅÎÉÑ ËÏÍÁÎÄÙ EXPUNGE"
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "ïÛÉÂËÁ ×ÙÐÏÌÎÅÎÉÑ ËÏÍÁÎÄÙ CLOSE"
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "îÅÄÏÐÕÓÔÉÍÏÅ ÉÍÑ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "ðÏÄËÌÀÞÅÎÉÅ Ë %s..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "ïÔËÌÀÞÅÎÉÅ ÏÔ %s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "ðÏÌÕÞÅÎÉÅ ÓÐÉÓËÁ ÚÁÇÏÌÏ×ËÏ× ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÜÔÉÍ IMAP-ÓÅÒ×ÅÒÏÍ."
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ %s"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "ðÏÌÕÞÅÎÉÅ ÚÁÇÏÌÏ×ËÏ× ÓÏÏÂÝÅÎÉÊ... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "ðÏÌÕÞÅÎÉÅ ÓÏÏÂÝÅÎÉÑ..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr ""
+"îÕÍÅÒÁÃÉÑ ÓÏÏÂÝÅÎÉÊ ÉÚÍÅÎÉÌÁÓØ. ôÒÅÂÕÅÔÓÑ ÐÏ×ÔÏÒÎÏ ÏÔËÒÙÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË."
+
+# ÉÌÉ "ÎÁ ÓÅÒ×ÅÒ" ÕÂÒÁÔØ??
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "óÏÏÂÝÅÎÉÅ ÚÁÇÒÕÖÁÅÔÓÑ ÎÁ ÓÅÒ×ÅÒ..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "%d ÓÏÏÂÝÅÎÉÊ ËÏÐÉÒÕÀÔÓÑ × %s..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "óÏÏÂÝÅÎÉÅ %d ËÏÐÉÒÕÅÔÓÑ × %s..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "ðÒÏÄÏÌÖÉÔØ?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "ÐÓÅ×ÄÏÎÉÍ: ÏÔÓÕÔÓÔ×ÕÅÔ ÁÄÒÅÓ"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅËÏÒÒÅËÔÎÙÊ IDN '%s' × ÐÓÅ×ÄÏÎÉÍÅ '%s'.\n"
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "ÎÅÄÏÐÕÓÔÉÍÏÅ ÐÏÌÅ × ÚÁÇÏÌÏ×ËÅ"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÍÅÔÏÄ ÓÏÒÔÉÒÏ×ËÉ"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): ÏÛÉÂËÁ × ÒÅÇÕÌÑÒÎÏÍ ×ÙÒÁÖÅÎÉÉ: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÁÑ ÐÅÒÅÍÅÎÎÁÑ"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "ÐÒÅÆÉËÓ ÎÅÄÏÐÕÓÔÉÍ ÐÒÉ ÓÂÒÏÓÅ ÚÎÁÞÅÎÉÊ"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "ÚÎÁÞÅÎÉÅ ÎÅÄÏÐÕÓÔÉÍÏ ÐÒÉ ÓÂÒÏÓÅ ÚÎÁÞÅÎÉÊ"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s: ÚÎÁÞÅÎÉÅ ÕÓÔÁÎÏ×ÌÅÎÏ"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s: ÚÎÁÞÅÎÉÅ ÎÅ ÏÐÒÅÄÅÌÅÎÏ"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÙÊ ÔÉРÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÏÅ ÚÎÁÞÅÎÉÅ"
+
+#: init.c:1312
+#, c-format
+msgid "%s: Unknown type."
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ."
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "îÅ ÕÄÁÌÏÓØ ÐÏÌÕÞÉÔØ ÉÎÆÏÒÍÁÃÉÀ Ï %s: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÆÁÊÌÏÍ."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "ïÛÉÂËÁ × %s: ÓÔÒÏËÁ %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: ÏÛÉÂËÉ × %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: ÞÔÅÎÉÅ ÐÒÅÒ×ÁÎÏ ÉÚ-ÚÁ ÂÏÌØÛÏÇÏ ËÏÌÉÞÅÓÔ×Á ÏÛÉÂÏË × %s"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: ÏÛÉÂËÁ × %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ×"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÁÑ ËÏÍÁÎÄÁ"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "ïÛÉÂËÁ × ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ÏÐÒÅÄÅÌÉÔØ ÄÏÍÁÛÎÉÊ ËÁÔÁÌÏÇ"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ÏÐÒÅÄÅÌÉÔØ ÉÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "ïÂÎÁÒÕÖÅΠÃÉËÌ × ÏÐÒÅÄÅÌÅÎÉÉ ÍÁËÒÏÓÁ."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "ëÌÁ×ÉÛÅ ÎÅ ÎÁÚÎÁÞÅÎÁ ÎÉËÁËÁÑ ÆÕÎËÃÉÑ."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "ëÌÁ×ÉÛÅ ÎÅ ÎÁÚÎÁÞÅÎÁ ÎÉËÁËÁÑ ÆÕÎËÃÉÑ. äÌÑ ÓÐÒÁ×ËÉ ÉÓÐÏÌØÚÕÊÔÅ '%s'."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ×"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: ÎÅÔ ÔÁËÏÇÏ ÍÅÎÀ"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ËÌÁ×ÉÛ ÐÕÓÔÁ"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ×"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: ÎÅÔ ÔÁËÏÊ ÆÕÎËÃÉÉ"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: ÐÕÓÔÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ËÌÁ×ÉÛ"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ×"
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: ÎÅÔ ÁÒÇÕÍÅÎÔÏ×"
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s: ÎÅÔ ÔÁËÏÊ ÆÕÎËÃÉÉ"
+
+#: keymap.c:912
+msgid "Enter keys (^G to abort): "
+msgstr "÷×ÅÄÉÔÅ ËÌÀÞÉ (^G - ÐÒÅÒÙ×ÁÎÉÅ ××ÏÄÁ): "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr "óÉÍ×ÏÌ = %s, ×ÏÓØÍÉÒÉÞÎÙÊ = %o, ÄÅÓÑÔÉÞÎÙÊ = %d"
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "ÐÕÓÔÁÑ ÏÐÅÒÁÃÉÑ"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr "ÚÁ×ÅÒÛÅÎÉÅ ×ÙÐÏÌÎÅÎÉÑ ÐÏ ÕÓÌÏ×ÉÀ"
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "ÆÏÒÓÉÒÏ×ÁÔØ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÂÁÚÙ mailcap ÄÌÑ ÐÒÏÓÍÏÔÒÁ ×ÌÏÖÅÎÉÑ"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "ÐÏËÁÚÁÔØ ×ÌÏÖÅÎÉÅ ËÁË ÔÅËÓÔ"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "òÁÚÒÅÛÉÔØ/ÚÁÐÒÅÔÉÔØ ÏÔÏÂÒÁÖÅÎÉÅ ÞÁÓÔÅÊ ÄÁÊÄÖÅÓÔÁ"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "ËÏÎÅàÓÔÒÁÎÉÃÙ"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "ÐÅÒÅÓÌÁÔØ ÓÏÏÂÝÅÎÉÅ ÄÒÕÇÏÍÕ ÐÏÌØÚÏ×ÁÔÅÌÀ"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "ÕËÁÚÁÔØ ÎÏ×ÙÊ ÆÁÊÌ × ÜÔÏÍ ËÁÔÁÌÏÇÅ"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "ÐÒÏÓÍÏÔÒÅÔØ ÆÁÊÌ"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "ÐÏËÁÚÁÔØ ÉÍÑ ÔÅËÕÝÅÇÏ ÆÁÊÌÁ"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "ÐÏÄËÌÀÞÉÔØÓÑ Ë ÔÅËÕÝÅÍÕ ÐÏÞÔÏ×ÏÍÕ ÑÝÉËÕ (ÔÏÌØËÏ IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "ÏÔËÌÀÞÉÔØÓÑ ÏÔ ÔÅËÕÝÅÇÏ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ (ÔÏÌØËÏ IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr ""
+"ÐÅÒÅËÌÀÞÉÔØÓÑ ÍÅÖÄÕ ÒÅÖÉÍÁÍÉ ÐÒÏÓÍÏÔÒÁ ×ÓÅÈ/ÐÏÄËÌÀÞÅÎÎÙÈ ÐÏÞÔÏ×ÙÈ ÑÝÉËÏ× "
+"(ÔÏÌØËÏ IMAP)"
+
+#: keymap_alldefs.h:18
+msgid "list mailboxes with new mail"
+msgstr "ÓÐÉÓÏË ÐÏÞÔÏ×ÙÈ ÑÝÉËÏ× Ó ÎÏ×ÏÊ ÐÏÞÔÏÊ"
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "ÉÚÍÅÎÉÔØ ËÁÔÁÌÏÇ"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "ÐÒÏ×ÅÒÉÔØ ÐÏÞÔÏ×ÙÅ ÑÝÉËÉ ÎÁ ÎÁÌÉÞÉÅ ÎÏ×ÏÊ ÐÏÞÔÙ"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "×ÌÏÖÉÔØ ÆÁÊÌÙ × ÜÔÏ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "×ÌÏÖÉÔØ ÓÏÏÂÝÅÎÉÑ × ÜÔÏ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "ÉÚÍÅÎÉÔØ ÓÐÉÓÏË 'BCC:'"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "ÉÚÍÅÎÉÔØ ÓÐÉÓÏË 'CC:'"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "ÉÚÍÅÎÉÔØ ÏÐÉÓÁÎÉÅ ×ÌÏÖÅÎÉÑ"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "ÉÚÍÅÎÉÔØ ÔÒÁÎÓÐÏÒÔÎÕÀ ËÏÄÉÒÏ×ËÕ ÄÌÑ ×ÌÏÖÅÎÉÑ"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "ÕËÁÖÉÔÅ ÆÁÊÌ, × ËÏÔÏÒÏÍ ÂÕÄÅÔ ÓÏÈÒÁÎÅÎÁ ËÏÐÉÑ ÜÔÏÇÏ ÓÏÏÂÝÅÎÉÑ"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "ÉÚÍÅÎÉÔØ ×ÌÏÖÅÎÎÙÊ ÆÁÊÌ"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "ÉÚÍÅÎÉÔØ ÐÏÌÅ 'From:'"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "ÒÅÄÁËÔÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÅ ×ÍÅÓÔÅ Ó ÚÁÇÏÌÏ×ËÁÍÉ"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "ÒÅÄÁËÔÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "ÒÅÄÁËÔÉÒÏ×ÁÔØ ×ÌÏÖÅÎÉÅ × ÓÏÏÔ×ÅÔÓÔ×ÉÉ Ó ÚÁÐÉÓØÀ × mailcap"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "ÉÚÍÅÎÉÔØ ÐÏÌÅ 'Reply-To:'"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "ÒÅÄÁËÔÉÒÏ×ÁÔØ ÔÅÍÕ ÓÏÏÂÝÅÎÉÑ"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "ÉÚÍÅÎÉÔØ ÓÐÉÓÏË 'To:'"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "ÓÏÚÄÁÔØ ÎÏ×ÙÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË (ÔÏÌØËÏ IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "ÉÚÍÅÎÉÔØ ÔÉР×ÌÏÖÅÎÉÑ (content-type)"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÕÀ ËÏÐÉÀ ×ÌÏÖÅÎÉÑ"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "ÐÒÏ×ÅÒÉÔØ ÐÒÁ×ÏÐÉÓÁÎÉÅ"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "ÓÏÚÄÁÔØ ÎÏ×ÏÅ ×ÌÏÖÅÎÉÅ × ÓÏÏÔ×ÅÔÓÔ×ÉÉ Ó ÚÁÐÉÓØÀ × mailcap"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "×ËÌÀÞÉÔØ/×ÙËÌÀÞÉÔØ ÐÅÒÅËÏÄÉÒÏ×ÁÎÉÅ ×ÌÏÖÅÎÉÑ"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "ÓÏÈÒÁÎÉÔØ ÜÔÏ ÓÏÏÂÝÅÎÉÅ ÄÌÑ ÏÔÐÒÁ×ËÉ ÐÏÚÄÎÅÅ"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "ÐÅÒÅÉÍÅÎÏ×ÁÔØ/ÐÅÒÅÍÅÓÔÉÔØ ×ÌÏÖÅÎÎÙÊ ÆÁÊÌ"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "ÏÔÐÒÁ×ÉÔØ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "ÕÓÔÁÎÏ×ÉÔØ ÐÏÌÅ disposition × inline/attachment"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "ÕÄÁÌÉÔØ/ÏÓÔÁ×ÉÔØ ÆÁÊÌ ÐÏÓÌÅ ÏÔÐÒÁ×ËÉ"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "ÏÂÎÏ×ÉÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ËÏÄÉÒÏ×ËÅ ×ÌÏÖÅÎÉÑ"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "ÚÁÐÉÓÁÔØ ÓÏÏÂÝÅÎÉÅ × ÆÁÊÌ/ÐÏÞÔÏ×ÙÊ ÑÝÉË"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "ËÏÐÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÅ × ÆÁÊÌ/ÐÏÞÔÏ×ÙÊ ÑÝÉË"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "ÓÏÚÄÁÔØ ÐÓÅ×ÄÏÎÉÍ ÄÌÑ ÏÔÐÒÁ×ÉÔÅÌÑ ÓÏÏÂÝÅÎÉÑ"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "ÐÏÍÅÓÔÉÔØ ÚÁÐÉÓØ × ÎÉÚ ÜËÒÁÎÁ"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "ÐÏÍÅÓÔÉÔØ ÚÁÐÉÓØ × ÓÅÒÅÄÉÎÕ ÜËÒÁÎÁ"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "ÐÏÍÅÓÔÉÔØ ÚÁÐÉÓØ × ×ÅÒÈ ÜËÒÁÎÁ"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "ÓÏÚÄÁÔØ ÄÅËÏÄÉÒÏ×ÁÎÎÕÀ (text/plain) ËÏÐÉÀ"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "ÓÏÚÄÁÔØ ÄÅËÏÄÉÒÏ×ÁÎÎÕÀ (text/plain) ËÏÐÉÀ É ÕÄÁÌÉÔØ ÏÒÉÇÉÎÁÌ"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "ÕÄÁÌÉÔØ ÔÅËÕÝÕÀ ÚÁÐÉÓØ"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "ÕÄÁÌÉÔØ ÔÅËÕÝÉÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË (ÔÏÌØËÏ IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "ÕÄÁÌÉÔØ ×ÓÅ ÓÏÏÂÝÅÎÉÑ × ÐÏÄÄÉÓËÕÓÓÉÉ"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "ÕÄÁÌÉÔØ ×ÓÅ ÓÏÏÂÝÅÎÉÑ × ÄÉÓËÕÓÓÉÉ"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "ÐÏËÁÚÁÔØ ÐÏÌÎÙÊ ÁÄÒÅÓ ÏÔÐÒÁ×ÉÔÅÌÑ"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "ÐÏËÁÚÁÔØ ÓÏÏÂÝÅÎÉÅ ÓÏ ×ÓÅÍÉ ÚÁÇÏÌÏ×ËÁÍÉ"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "ÐÏËÁÚÁÔØ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "\"ÎÉÚËÏÕÒÏ×ÎÅ×ÏÅ\" ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ ÓÏÏÂÝÅÎÉÑ"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "ÕÄÁÌÉÔØ ÓÉÍ×ÏÌ ÐÅÒÅÄ ËÕÒÓÏÒÏÍ"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "ÐÅÒÅÄ×ÉÎÕÔØ ËÕÒÓÏÒ ×ÌÅ×Ï ÎÁ ÏÄÉΠÓÉÍ×ÏÌ"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "ÐÅÒÅÄ×ÉÎÕÔØ ËÕÒÓÏÒ × ÎÁÞÁÌÏ ÓÌÏ×Á"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "ÐÅÒÅÊÔÉ × ÎÁÞÁÌÏ ÓÔÒÏËÉ"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "ÐÅÒÅËÌÀÞÉÔØÓÑ ÍÅÖÄÕ ÐÏÞÔÏ×ÙÍÉ ÑÝÉËÁÍÉ ÓÏ ×ÈÏÄÑÝÉÍÉ ÐÉÓØÍÁÍÉ"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "ÄÏÐÉÓÁÔØ ÉÍÑ ÆÁÊÌÁ ÉÌÉ ÐÓÅ×ÄÏÎÉÍÁ"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "ÄÏÐÉÓÁÔØ ÁÄÒÅÓ, ÉÓÐÏÌØÚÕÑ ×ÎÅÛÎÀÀ ÐÒÏÇÒÁÍÍÕ"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "ÕÄÁÌÉÔØ ÓÉÍ×ÏÌ ÐÏÄ ËÕÒÓÏÒÏÍ"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "ÐÅÒÅÊÔÉ × ËÏÎÅàÓÔÒÏËÉ"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "ÐÅÒÅÄ×ÉÎÕÔØ ËÕÒÓÏÒ ÎÁ ÏÄÉΠÓÉÍ×ÏÌ ×ÐÒÁ×Ï"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "ÐÅÒÅÄ×ÉÎÕÔØ ËÕÒÓÏÒ × ËÏÎÅàÓÌÏ×Á"
+
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr "ÐÒÏËÒÕÔÉÔØ ×ÎÉÚ ÓÐÉÓÏË ÉÓÔÏÒÉÉ"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "ÐÒÏËÒÕÔÉÔØ ××ÅÒÈ ÓÐÉÓÏË ÉÓÔÏÒÉÉ"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "ÕÄÁÌÉÔØ ÓÉÍ×ÏÌÙ ÏÔ ËÕÒÓÏÒÁ É ÄÏ ËÏÎÃÁ ÓÔÒÏËÉ"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "ÕÄÁÌÉÔØ ÓÉÍ×ÏÌÙ ÏÔ ËÕÒÓÏÒÁ É ÄÏ ËÏÎÃÁ ÓÌÏ×Á"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "ÕÄÁÌÉÔØ ×ÓÅ ÓÉÍ×ÏÌÙ × ÓÔÒÏËÅ"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "ÕÄÁÌÉÔØ ÓÌÏ×Ï ÐÅÒÅÄ ËÕÒÓÏÒÏÍ"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "××ÅÓÔÉ ÓÌÅÄÕÀÝÕÀ ÎÁÖÁÔÕÀ ËÌÁ×ÉÛÕ \"ËÁË ÅÓÔØ\""
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "ÐÏÍÅÎÑÔØ ÓÉÍ×ÏÌ ÐÏÄ ËÕÒÓÏÒÏÍ Ó ÐÒÅÄÙÄÕÝÉÍ"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr ""
+"ÐÅÒÅ×ÅÓÔÉ ÐÅÒ×ÕÀ ÂÕË×Õ ÓÌÏ×Á × ×ÅÒÈÎÉÊ ÒÅÇÉÓÔÒ, Á ÏÓÔÁÌØÎÙÅ -- × ÎÉÖÎÉÊ"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÔØ ÓÌÏ×Ï × ÎÉÖÎÉÊ ÒÅÇÉÓÔÒ"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÔØ ÓÌÏ×Ï × ×ÅÒÈÎÉÊ ÒÅÇÉÓÔÒ"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "××ÅÓÔÉ ËÏÍÁÎÄÕ muttrc"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "××ÅÓÔÉ ÍÁÓËÕ ÆÁÊÌÁ"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "×ÙÊÔÉ ÉÚ ÜÔÏÇÏ ÍÅÎÀ"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "ÐÅÒÅÄÁÔØ ×ÌÏÖÅÎÉÅ ×ÎÅÛÎÅÊ ÐÒÏÇÒÁÍÍÅ"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "ÐÅÒ×ÁÑ ÚÁÐÉÓØ"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "ÕÓÔÁÎÏ×ÉÔØ/ÓÂÒÏÓÉÔØ ÆÌÁÇ '×ÁÖÎÏÅ' ÄÌÑ ÓÏÏÂÝÅÎÉÑ"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "ÐÅÒÅÓÌÁÔØ ÓÏÏÂÝÅÎÉÅ Ó ËÏÍÍÅÎÔÁÒÉÑÍÉ"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "×ÙÂÒÁÔØ ÔÅËÕÝÕÀ ÚÁÐÉÓØ"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "ÏÔ×ÅÔÉÔØ ×ÓÅÍ ÁÄÒÅÓÁÔÁÍ"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "ÎÁ ÐÏÌÓÔÒÁÎÉÃÙ ×ÐÅÒÅÄ"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "ÎÁ ÐÏÌÓÔÒÁÎÉÃÙ ÎÁÚÁÄ"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "ÜÔÏÔ ÔÅËÓÔ"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "ÐÅÒÅÊÔÉ ÐÏ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÍÕ ÎÏÍÅÒÕ"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "ÐÏÓÌÅÄÎÑÑ ÚÁÐÉÓØ"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "ÏÔ×ÅÔÉÔØ × ÕËÁÚÁÎÎÙÊ ÓÐÉÓÏË ÒÁÓÓÙÌËÉ"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "×ÙÐÏÌÎÉÔØ ÍÁËÒÏÓ"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "ÓÏÚÄÁÔØ ÎÏ×ÏÅ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "ÏÔËÒÙÔØ ÄÒÕÇÏÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË/ÆÁÊÌ"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "ÏÔËÒÙÔØ ÄÒÕÇÏÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË/ÆÁÊÌ × ÒÅÖÉÍÅ \"ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ\""
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "ÓÂÒÏÓÉÔØ Õ ÓÏÏÂÝÅÎÉÑ ÆÌÁÇ ÓÏÓÔÏÑÎÉÑ"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "ÕÄÁÌÉÔØ ÓÏÏÂÝÅÎÉÑ ÐÏ ÏÂÒÁÚÃÕ"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "ÚÁÂÒÁÔØ ÐÏÞÔÕ Ó IMAP-ÓÅÒ×ÅÒÁ"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "ÚÁÂÒÁÔØ ÐÏÞÔÕ Ó POP-ÓÅÒ×ÅÒÁ"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "ÐÅÒ×ÏÅ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "ÐÏÓÌÅÄÎÅÅ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "ÐÏËÁÚÙ×ÁÔØ ÔÏÌØËÏ ÓÏÏÂÝÅÎÉÑ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÅ ÏÂÒÁÚÃÕ"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "ÓÌÅÄÕÀÝÅÅ ÎÏ×ÏÅ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:113
+msgid "jump to the next new or unread message"
+msgstr "ÓÌÅÄÕÀÝÅÅ ÎÏ×ÏÅ ÉÌÉ ÎÅÐÒÏÞÉÔÁÎÎÏÅ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "ÓÌÅÄÕÀÝÁÑ ÐÏÄÄÉÓËÕÓÓÉÑ"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "ÓÌÅÄÕÀÝÁÑ ÄÉÓËÕÓÓÉÑ"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "ÓÌÅÄÕÀÝÅÅ ÎÅÕÄÁÌÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "ÓÌÅÄÕÀÝÅÅ ÎÅÐÒÏÞÉÔÁÎÎÏÅ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "ÐÅÒÅÊÔÉ Ë ÒÏÄÉÔÅÌØÓËÏÍÕ ÓÏÏÂÝÅÎÉÀ ÄÉÓËÕÓÓÉÉ"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "ÐÒÅÄÙÄÕÝÁÑ ÄÉÓËÕÓÓÉÑ"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "ÐÒÅÄÙÄÕÝÁÑ ÐÏÄÄÉÓËÕÓÓÉÑ"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "ÐÒÅÄÙÄÕÝÅÅ ÎÅÕÄÁÌÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "ÐÒÅÄÙÄÕÝÅÅ ÎÏ×ÏÅ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:123
+msgid "jump to the previous new or unread message"
+msgstr "ÐÒÅÄÙÄÕÝÅÅ ÎÏ×ÏÅ ÉÌÉ ÎÅÐÒÏÞÉÔÁÎÎÏÅ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "ÐÒÅÄÙÄÕÝÅÅ ÎÅÐÒÏÞÉÔÁÎÎÏÅ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "ÐÏÍÅÔÉÔØ ÔÅËÕÝÕÀ ÄÉÓËÕÓÓÉÀ ËÁË ÐÒÏÞÉÔÁÎÎÕÀ"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "ÐÏÍÅÔÉÔØ ÔÅËÕÝÕÀ ÐÏÄÄÉÓËÕÓÓÉÀ ËÁË ÐÒÏÞÉÔÁÎÎÕÀ"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "ÕÓÔÁÎÏ×ÉÔØ ÆÌÁÇ ÓÏÓÔÏÑÎÉÑ ÄÌÑ ÓÏÏÂÝÅÎÉÑ"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "ÓÏÈÒÁÎÉÔØ ÉÚÍÅÎÅÎÉÑ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "ÐÏÍÅÔÉÔØ ÓÏÏÂÝÅÎÉÑ ÐÏ ÏÂÒÁÚÃÕ"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "×ÏÓÓÔÁÎÏ×ÉÔØ ÓÏÏÂÝÅÎÉÑ ÐÏ ÏÂÒÁÚÃÕ"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "ÓÎÑÔØ ÐÏÍÅÔËÕ Ó ÓÏÏÂÝÅÎÉÊ ÐÏ ÏÂÒÁÚÃÕ"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "ÓÅÒÅÄÉÎÁ ÓÔÒÁÎÉÃÙ"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "ÓÌÅÄÕÀÝÁÑ ÚÁÐÉÓØ"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "×ÎÉÚ ÎÁ ÏÄÎÕ ÓÔÒÏËÕ"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "ÓÌÅÄÕÀÝÁÑ ÓÔÒÁÎÉÃÁ"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "ËÏÎÅàÓÏÏÂÝÅÎÉÑ"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "ÒÁÚÒÅÛÉÔØ/ÚÁÐÒÅÔÉÔØ ÏÔÏÂÒÁÖÅÎÉÅ ÃÉÔÉÒÕÅÍÏÇÏ ÔÅËÓÔÁ"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "ÐÒÏÐÕÓÔÉÔØ ÃÉÔÉÒÕÅÍÙÊ ÔÅËÓÔ"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "× ÎÁÞÁÌÏ ÓÏÏÂÝÅÎÉÑ"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "ÐÅÒÅÄÁÔØ ÓÏÏÂÝÅÎÉÅ/×ÌÏÖÅÎÉÅ ×ÎÅÛÎÅÊ ÐÒÏÇÒÁÍÍÅ"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "ÐÒÅÄÙÄÕÝÁÑ ÚÁÐÉÓØ"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "××ÅÒÈ ÎÁ ÏÄÎÕ ÓÔÒÏËÕ"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "ÐÒÅÄÙÄÕÝÁÑ ÓÔÒÁÎÉÃÁ"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "ÎÁÐÅÞÁÔÁÔØ ÔÅËÕÝÕÀ ÚÁÐÉÓØ"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "ÚÁÐÒÏÓÉÔØ ÁÄÒÅÓÁ Õ ×ÎÅÛÎÅÊ ÐÒÏÇÒÁÍÍÙ"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "ÄÏÂÁ×ÉÔØ ÒÅÚÕÌØÔÁÔÙ ÎÏ×ÏÇÏ ÚÁÐÒÏÓÁ Ë ÔÅËÕÝÉÍ ÒÅÚÕÌØÔÁÔÁÍ"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "ÓÏÈÒÁÎÉÔØ ÉÚÍÅÎÅÎÉÑ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ É ×ÙÊÔÉ"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "ÐÒÏÄÏÌÖÉÔØ ÏÔÌÏÖÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "ÏÞÉÓÔÉÔØ É ÐÅÒÅÒÉÓÏ×ÁÔØ ÜËÒÁÎ"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{×ÎÕÔÒÅÎÎÉÊ}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "ÏÔ×ÅÔÉÔØ ÎÁ ÓÏÏÂÝÅÎÉÅ"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "ÉÓÐÏÌØÚÏ×ÁÔØ ÔÅËÕÝÅÅ ÓÏÏÂÝÅÎÉÅ × ËÁÞÅÓÔ×Å ÛÁÂÌÏÎÁ ÄÌÑ ÎÏ×ÏÇÏ"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "ÓÏÈÒÁÎÉÔØ ÓÏÏÂÝÅÎÉÅ/×ÌÏÖÅÎÉÅ × ÆÁÊÌ"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "ÐÏÉÓË ÐÏ ÏÂÒÁÚÃÕ"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "ÏÂÒÁÔÎÙÊ ÐÏÉÓË ÐÏ ÏÂÒÁÚÃÕ"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "ÐÏÉÓË ÓÌÅÄÕÀÝÅÇÏ ÓÏ×ÐÁÄÅÎÉÑ"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "ÐÏÉÓË ÐÒÅÄÙÄÕÝÅÇÏ ÓÏ×ÐÁÄÅÎÉÑ"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "ÕÓÔÁÎÏ×ÉÔØ/ÓÂÒÏÓÉÔØ ÒÅÖÉÍ ×ÙÄÅÌÅÎÉÑ ÏÂÒÁÚÃÁ Ã×ÅÔÏÍ"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "ÚÁÐÕÓÔÉÔØ ×ÎÅÛÎÀÀ ÐÒÏÇÒÁÍÍÕ"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "ÓÏÒÔÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÑ"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "ÓÏÒÔÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÑ × ÏÂÒÁÔÎÏÍ ÐÏÒÑÄËÅ"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "ÐÏÍÅÔÉÔØ ÔÅËÕÝÕÀ ÚÁÐÉÓØ"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "ÐÒÉÍÅÎÉÔØ ÓÌÅÄÕÀÝÕÀ ÆÕÎËÃÉÀ Ë ÐÏÍÅÞÅÎÎÙÍ ÓÏÏÂÝÅÎÉÑÍ"
+
+#: keymap_alldefs.h:164
+msgid "apply next function ONLY to tagged messages"
+msgstr "×ÙÐÏÌÎÉÔØ ÏÐÅÒÁÃÉÀ ôïìøëï ÄÌÑ ÐÏÍÅÞÅÎÎÙÈ ÓÏÏÂÝÅÎÉÊ"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "ÐÏÍÅÔÉÔØ ÔÅËÕÝÕÀ ÐÏÄÄÉÓËÕÓÓÉÀ"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "ÐÏÍÅÔÉÔØ ÔÅËÕÝÕÀ ÄÉÓËÕÓÓÉÀ"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "ÕÓÔÁÎÏ×ÉÔØ/ÓÂÒÏÓÉÔØ ÆÌÁÇ 'ÎÏ×ÏÅ' ÄÌÑ ÓÏÏÂÝÅÎÉÑ"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "ÒÁÚÒÅÛÉÔØ/ÚÁÐÒÅÔÉÔØ ÐÅÒÅÚÁÐÉÓØ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr ""
+"ÐÅÒÅËÌÀÞÉÔØÓÑ ÍÅÖÄÕ ÒÅÖÉÍÁÍÉ ÐÒÏÓÍÏÔÒÁ ×ÓÅÈ ÆÁÊÌÏ× É ÐÒÏÓÍÏÔÒÁ ÐÏÞÔÏ×ÙÈ "
+"ÑÝÉËÏ×"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "ÎÁÞÁÌÏ ÓÔÒÁÎÉÃÙ"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "×ÏÓÓÔÁÎÏ×ÉÔØ ÔÅËÕÝÕÀ ÚÁÐÉÓØ"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "×ÏÓÓÔÁÎÏ×ÉÔØ ×ÓÅ ÓÏÏÂÝÅÎÉÑ × ÄÉÓËÕÓÓÉÉ"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "×ÏÓÓÔÁÎÏ×ÉÔØ ×ÓÅ ÓÏÏÂÝÅÎÉÑ × ÐÏÄÄÉÓËÕÓÓÉÉ"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "×Ù×ÅÓÔÉ ÎÏÍÅÒ ×ÅÒÓÉÉ Mutt É ÄÁÔÕ"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "ÐÒÏÓÍÏÔÒÅÔØ ×ÌÏÖÅÎÉÅ, ÉÓÐÏÌØÚÕÑ ÐÒÉ ÎÅÏÂÈÏÄÉÍÏÓÔÉ mailcap"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "ÐÏËÁÚÁÔØ ×ÌÏÖÅÎÉÑ"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr "ÐÏËÁÚÁÔØ ËÏÄ ÎÁÖÁÔÏÊ ËÌÁ×ÉÛÉ"
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "ÐÏËÁÚÁÔØ ÔÅËÕÝÉÊ ÛÁÂÌÏΠÏÇÒÁÎÉÞÅÎÉÑ"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "Ó×ÅÒÎÕÔØ/ÒÁÚ×ÅÒÎÕÔØ ÔÅËÕÝÕÀ ÄÉÓËÕÓÓÉÀ"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "Ó×ÅÒÎÕÔØ/ÒÁÚ×ÅÒÎÕÔØ ×ÓÅ ÄÉÓËÕÓÓÉÉ"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "×ÌÏÖÉÔØ ÏÔËÒÙÔÙÊ PGP-ËÌÀÞ"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "×Ù×ÅÓÔÉ ÐÁÒÁÍÅÔÒÙ PGP"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "ÏÔÐÒÁ×ÉÔØ ÏÔËÒÙÔÙÊ PGP-ËÌÀÞ"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "ÐÒÏ×ÅÒÉÔØ ÏÔËÒÙÔÙÊ PGP-ËÌÀÞ"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "ÐÏËÁÚÁÔØ ÉÄÅÎÔÉÆÉËÁÔÏÒ ×ÌÁÄÅÌØÃÁ ËÌÀÞÁ"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "ÐÒÏ×ÅÒÉÔØ PGP-ÓÏÏÂÝÅÎÉÅ × ÔÅËÓÔÏ×ÏÍ ÆÏÒÍÁÔÅ"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "éÓÐÏÌØÚÏ×ÁÔØ ÓÏÚÄÁÎÎÕÀ ÃÅÐÏÞËÕ"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "äÏÂÁ×ÉÔØ remailer × ÃÅÐÏÞËÕ"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "÷ÓÔÁ×ÉÔØ remailer × ÃÅÐÏÞËÕ"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "õÄÁÌÉÔØ remailer ÉÚ ÃÅÐÏÞËÉ"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "÷ÙÂÒÁÔØ ÐÒÅÄÙÄÕÝÉÊ ÜÌÅÍÅÎÔ × ÃÅÐÏÞËÅ"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "÷ÙÂÒÁÔØ ÓÌÅÄÕÀÝÉÊ ÜÌÅÍÅÎÔ × ÃÅÐÏÞËÅ"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "ÐÏÓÌÁÔØ ÓÏÏÂÝÅÎÉÅ ÞÅÒÅÚ ÃÅÐÏÞËÕ remailer"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "ÓÏÚÄÁÔØ ÒÁÓÛÉÆÒÏ×ÁÎÎÕÀ ËÏÐÉÀ É ÕÄÁÌÉÔØ ÏÒÉÇÉÎÁÌ"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "ÓÏÚÄÁÔØ ÒÁÓÛÉÆÒÏ×ÁÎÎÕÀ ËÏÐÉÀ"
+
+#: keymap_alldefs.h:196
+msgid "wipe passphrase(s) from memory"
+msgstr "ÕÄÁÌÉÔØ ÆÒÁÚÙ-ÐÁÒÏÌÉ ÉÚ ÐÁÍÑÔÉ"
+
+#: keymap_alldefs.h:197
+msgid "extract supported public keys"
+msgstr "ÉÚ×ÌÅÞØ ÐÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÏÔËÒÙÔÙÅ ËÌÀÞÉ"
+
+#: keymap_alldefs.h:198
+msgid "show S/MIME options"
+msgstr "×Ù×ÅÓÔÉ ÐÁÒÁÍÅÔÒÙ S/MIME"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr "ðÅÒÅÐÏÌÎÅÎÉÅ -- ÎÅ ÕÄÁÌÏÓØ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ!"
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "îÅÈ×ÁÔËÁ ÐÁÍÑÔÉ!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"þÔÏÂÙ Ó×ÑÚÁÔØÓÑ Ó ÒÁÚÒÁÂÏÔÞÉËÁÍÉ, ÉÓÐÏÌØÚÕÊÔÅ ÁÄÒÅÓ <mutt-dev@mutt.org>.\n"
+"þÔÏÂÙ ÓÏÏÂÝÉÔØ Ï ÏÛÉÂËÅ, ÉÓÐÏÌØÚÕÊÔÅ ÐÒÏÇÒÁÍÍÕ flea(1).\n"
+
+#: main.c:50
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins É ÄÒÕÇÉÅ.\n"
+"Mutt ÒÁÓÐÒÏÓÔÒÁÎÑÅÔÓÑ âåú ëáëéè-ìéâï çáòáîôéê; ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÂÏÌÅÅ\n"
+"ÐÏÄÒÏÂÎÏÊ ÉÎÆÏÒÍÁÃÉÉ ××ÅÄÉÔÅ `mutt -vv'.\n"
+"Mutt Ñ×ÌÑÅÔÓÑ Ó×ÏÂÏÄÎÙÍ ÐÒÏÇÒÁÍÍÎÙÍ ÏÂÅÓÐÅÞÅÎÉÅÍ.  ÷Ù ÍÏÖÅÔÅ\n"
+"ÒÁÓÐÒÏÓÔÒÁÎÑÔØ ÅÇÏ ÐÒÉ ÓÏÂÌÀÄÅÎÉÉ ÏÐÒÅÄÅÌÅÎÎÙÈ ÕÓÌÏ×ÉÊ; ÄÌÑ ÐÏÌÕÞÅÎÉÑ\n"
+"ÂÏÌÅÅ ÐÏÄÒÏÂÎÏÊ ÉÎÆÏÒÍÁÃÉÉ ××ÅÄÉÔÅ `mutt -vv'.\n"
+
+#: main.c:56
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@cs.hmc.edu>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@guug.de>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"íÎÏÇÉÅ ÞÁÓÔÉ ËÏÄÁ, ÉÓÐÒÁ×ÌÅÎÉÑ É ÐÒÅÄÌÏÖÅÎÉÑ ÂÙÌÉ ÓÄÅÌÁÎÙ ÎÅÕÐÏÍÑÎÕÔÙÍÉ\n"
+"ÚÄÅÓØ ÌÀÄØÍÉ.\n"
+"\n"
+"   üÔÁ ÐÒÏÇÒÁÍÍÁ -- Ó×ÏÂÏÄÎÏÅ ÐÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ.  ÷Ù ÍÏÖÅÔÅ\n"
+"   ÒÁÓÐÒÏÓÔÒÁÎÑÔØ É/ÉÌÉ ÉÚÍÅÎÑÔØ ÅÅ ÐÒÉ ÓÏÂÌÀÄÅÎÉÉ ÕÓÌÏ×ÉÊ GNU General\n"
+"   Piblic License, ÏÐÕÂÌÉËÏ×ÁÎÎÏÊ Free Software Foundation, ×ÅÒÓÉÉ 2 ÉÌÉ\n"
+"   (ÎÁ ×ÁÛÅ ÕÓÍÏÔÒÅÎÉÅ) ÌÀÂÏÊ ÂÏÌÅÅ ÐÏÚÄÎÅÊ ×ÅÒÓÉÉ.\n"
+"\n"
+"   üÔÁ ÐÒÏÇÒÁÍÍÁ ÒÁÓÐÒÏÓÔÒÁÎÑÅÔÓÑ Ó ÎÁÄÅÖÄÏÊ, ÞÔÏ ÏÎÁ ÏËÁÖÅÔÓÑ ÐÏÌÅÚÎÏÊ,\n"
+"   ÎÏ âåú ëáëéè-ìéâï çáòáîôéê. ïÓÏÂÏ ÏÔÍÅÔÉÍ, ÞÔÏ ÏÔÓÕÔÓÔ×ÕÅÔ çáòáîôéñ\n"
+"   ðòéçïäîïóôé äìñ ÷ùðïìîåîéñ ïðòåäåìåîîùè úáäáþ. âÏÌÅÅ ÐÏÄÒÏÂÎÕÀ\n"
+"   ÉÎÆÏÒÍÁÃÉÀ ×Ù ÍÏÖÅÔÅ ÎÁÊÔÉ × GNU General Public License.\n"
+"\n"
+"   ÷Ù ÄÏÌÖÎÙ ÂÙÌÉ ÐÏÌÕÞÉÔØ ËÏÐÉÀ GNU General Public License ×ÍÅÓÔÅ Ó\n"
+"   ÜÔÏÊ ÐÒÏÇÒÁÍÍÏÊ. åÓÌÉ ×Ù ÅÅ ÎÅ ÐÏÌÕÞÉÌÉ, ÏÂÒÁÔÉÔÅÓØ ×Ï Free Software\n"
+"   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n"
+
+#: main.c:94
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"ÚÁÐÕÓË: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"ÐÁÒÁÍÅÔÒÙ:\n"
+"  -A <alias>\tÒÁÓËÒÙÔØ ÄÁÎÎÙÊ ÐÓÅ×ÄÏÎÉÍ\n"
+"  -a <file>\t×ÌÏÖÉÔØ ÆÁÊÌ × ÓÏÏÂÝÅÎÉÅ\n"
+"  -b <address>\tÕËÁÚÁÔØ blind carbon-copy (BCC) ÁÄÒÅÓ\n"
+"  -c <address>\tÕËÁÚÁÔØ carbon-copy (CC) ÁÄÒÅÓ\n"
+"  -e <command>\tÕËÁÚÁÔØ ËÏÍÁÎÄÕ, ËÏÔÏÒÁÑ ÂÕÄÅÔ ×ÙÐÏÌÎÅÎÁ ÐÏÓÌÅ "
+"ÉÎÉÃÉÁÌÉÚÁÃÉÉ\n"
+"  -f <file>\tÕËÁÚÁÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË ÄÌÑ ÒÁÂÏÔÙ\n"
+"  -F <file>\tÕËÁÚÁÔØ ÁÌØÔÅÒÎÁÔÉ×ÎÙÊ muttrc\n"
+"  -H <file>\tÕËÁÚÁÔØ ÆÁÊÌ, ÓÏÄÅÒÖÁÝÉÊ ÛÁÂÌÏΠÚÁÇÏÌÏ×ËÁ\n"
+"  -i <file>\tÕËÁÚÁÔØ ÆÁÊÌ ÄÌÑ ×ÓÔÁ×ËÉ × ÏÔ×ÅÔ\n"
+"  -m <ÔÉÐ>\tÕËÁÚÁÔØ ÔÉРÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ ÐÏ ÕÍÏÌÞÁÎÉÀ\n"
+"  -n\t\tÚÁÐÒÅÔÉÔØ ÞÔÅÎÉÅ ÓÉÓÔÅÍÎÏÇÏ Muttrc\n"
+"  -p\t\tÐÒÏÄÏÌÖÉÔØ ÏÔÌÏÖÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ\n"
+"  -Q <ÉÍÑ>\t×Ù×ÅÓÔÉ ÚÎÁÞÅÎÉÅ ÐÅÒÅÍÅÎÎÏÊ ËÏÎÆÉÇÕÒÁÃÉÉ\n"
+"  -R\t\tÏÔËÒÙÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË × ÒÅÖÉÍÅ \"ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ\"\n"
+"  -s <ÔÅÍÁ>\tÕËÁÚÁÔØ ÔÅÍÕ ÓÏÏÂÝÅÎÉÑ (ÄÏÌÖÎÁ ÂÙÔØ × ËÁ×ÙÞËÁÈ, ÅÓÌÉ "
+"ÐÒÉÓÕÔÓÔ×ÕÀÔ ÐÒÏÂÅÌÙ)\n"
+"  -v\t\t×Ù×ÅÓÔÉ ÎÏÍÅÒ ×ÅÒÓÉÉ É ÐÁÒÁÍÅÔÒÙ ËÏÍÐÉÌÑÃÉÉ\n"
+"  -x\t\tÜÍÕÌÉÒÏ×ÁÔØ ÒÅÖÉÍ ÐÏÓÙÌËÉ ËÏÍÁÎÄÙ mailx\n"
+"  -y\t\t×ÙÂÒÁÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË ÉÚ ÓÐÉÓËÁ `mailboxes'\n"
+"  -z\t\t×ÙÊÔÉ ÎÅÍÅÄÌÅÎÎÏ ÅÓÌÉ × ÐÏÞÔÏ×ÏÍ ÑÝÉËÅ ÏÔÓÕÔÓÔ×ÕÅÔ ÎÏ×ÁÑ ÐÏÞÔÁ\n"
+"  -Z\t\tÏÔËÒÙÔØ ÐÅÒ×ÙÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË Ó ÎÏ×ÏÊ ÐÏÞÔÏÊ, ×ÙÊÔÉ ÎÅÍÅÄÌÅÎÎÏ ÅÓÌÉ "
+"ÔÁËÏ×ÁÑ ÏÔÓÕÔÓÔ×ÕÅÔ\n"
+"  -h\t\tÔÅËÓÔ ÜÔÏÊ ÐÏÄÓËÁÚËÉ"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"ðÁÒÁÍÅÔÒÙ ËÏÍÐÉÌÑÃÉÉ:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "ïÛÉÂËÁ ÉÎÉÃÉÁÌÉÚÁÃÉÉ ÔÅÒÍÉÎÁÌÁ."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "ïÔÌÁÄËÁ ÎÁ ÕÒÏ×ÎÅ %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "óÉÍ×ÏÌ DEBUG ÎÅ ÂÙÌ ÏÐÒÅÄÅÌÅΠÐÒÉ ËÏÍÐÉÌÑÃÉÉ.  éÇÎÏÒÉÒÕÅÔÓÑ.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "ëÁÔÁÌÏÇ %s ÎÅ ÓÕÝÅÓÔ×ÕÅÔ.  óÏÚÄÁÔØ?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ %s: %s"
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "áÄÒÅÓÁÔÙ ÎÅ ÕËÁÚÁÎÙ.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: ÎÅ ÕÄÁÌÏÓØ ×ÌÏÖÉÔØ ÆÁÊÌ.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "îÅÔ ÐÏÞÔÏ×ÙÈ ÑÝÉËÏ× Ó ÎÏ×ÏÊ ÐÏÞÔÏÊ."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "îÅ ÏÐÒÅÄÅÌÅÎÏ ÎÉ ÏÄÎÏÇÏ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ ÓÏ ×ÈÏÄÑÝÉÍÉ ÐÉÓØÍÁÍÉ."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÐÕÓÔ."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "þÉÔÁÅÔÓÑ %s... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÐÏ×ÒÅÖÄÅÎ!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÂÙÌ ÐÏ×ÒÅÖÄÅÎ!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "ëÒÉÔÉÞÅÓËÁÑ ÏÛÉÂËÁ!  îÅ ÕÄÁÌÏÓØ ÚÁÎÏ×Ï ÏÔËÒÙÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "îÅ ÕÄÁÌÏÓØ ÚÁÂÌÏËÉÒÏ×ÁÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr "sync: ÐÏÞÔÏ×ÙÊ ÑÝÉË ÉÚÍÅÎÅÎ, ÎÏ ÉÚÍÅÎÅÎÎÙÅ ÓÏÏÂÝÅÎÉÑ ÏÔÓÕÔÓÔ×ÕÀÔ!"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "úÁÐÉÓØ... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "óÏÈÒÁÎÅÎÉÅ ÉÚÍÅÎÅÎÉÊ..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "úÁÐÉÓØ ÎÅ ÕÄÁÌÁÓØ!  îÅÐÏÌÎÙÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË ÓÏÈÒÁÎÅΠנ%s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "îÅ ÕÄÁÌÏÓØ ÚÁÎÏ×Ï ÏÔËÒÙÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "ðÏ×ÔÏÒÎÏÅ ÏÔËÒÙÔÉÅ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "ðÅÒÅÊÔÉ Ë: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "îÅ×ÅÒÎÙÊ ÉÎÄÅËÓ."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "úÁÐÉÓÉ ÏÔÓÕÔÓÔ×ÕÀÔ."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "äÁÌØÎÅÊÛÁÑ ÐÒÏËÒÕÔËÁ ÎÅ×ÏÚÍÏÖÎÁ."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "äÁÌØÎÅÊÛÁÑ ÐÒÏËÒÕÔËÁ ÎÅ×ÏÚÍÏÖÎÁ."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "÷Ù ÕÖÅ ÎÁ ÐÏÓÌÅÄÎÅÊ ÓÔÒÁÎÉÃÅ."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "÷Ù ÕÖÅ ÎÁ ÐÅÒ×ÏÊ ÓÔÒÁÎÉÃÅ."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "ðÅÒ×ÁÑ ÚÁÐÉÓØ ÕÖÅ ÎÁ ÜËÒÁÎÅ."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "ðÏÓÌÅÄÎÑÑ ÚÁÐÉÓØ ÕÖÅ ÎÁ ÜËÒÁÎÅ."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "÷Ù ÕÖÅ ÎÁ ÐÏÓÌÅÄÎÅÊ ÚÁÐÉÓÉ."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "÷Ù ÕÖÅ ÎÁ ÐÅÒ×ÏÊ ÚÁÐÉÓÉ."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "ðÏÉÓË: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "ïÂÒÁÔÎÙÊ ÐÏÉÓË: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "îÅÔ ÏÂÒÁÚÃÁ ÐÏÉÓËÁ."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "îÅ ÎÁÊÄÅÎÏ."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "îÅÔ ÏÔÍÅÞÅÎÎÙÈ ÚÁÐÉÓÅÊ."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "÷ ÜÔÏÍ ÍÅÎÀ ÐÏÉÓË ÎÅ ÒÅÁÌÉÚÏ×ÁÎ."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "äÌÑ ÄÉÁÌÏÇÏ× ÐÅÒÅÈÏÄ ÐÏ ÎÏÍÅÒÕ ÓÏÏÂÝÅÎÉÑ ÎÅ ÒÅÁÌÉÚÏ×ÁÎ."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "÷ÏÚÍÏÖÎÏÓÔØ ÐÏÍÅÔËÉ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "þÉÔÁÅÔÓÑ %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr "maildir_commit_message(): ÎÅ ÕÄÁÌÏÓØ ÕÓÔÁÎÏ×ÉÔØ ×ÒÅÍÑ ÆÁÊÌÁ"
+
+#: muttlib.c:835
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "õËÁÚÁÎÎÙÊ ÆÁÊÌ -- ÜÔÏ ËÁÔÁÌÏÇ. óÏÈÒÁÎÉÔØ × ÎÅÍ?[(y)ÄÁ, (n)ÎÅÔ, (a)×ÓÅ]"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr "yna"
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "õËÁÚÁÎÎÙÊ ÆÁÊÌ -- ÜÔÏ ËÁÔÁÌÏÇ. óÏÈÒÁÎÉÔØ × ÎÅÍ?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "éÍÑ ÆÁÊÌÁ × ËÁÔÁÌÏÇÅ: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "æÁÊÌ ÓÕÝÅÓÔ×ÕÅÔ, (o)ÐÅÒÅÐÉÓÁÔØ, (a)ÄÏÂÁ×ÉÔØ, (Ó)ÏÔËÁÚ?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "oac"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "úÁÐÉÓØ ÓÏÏÂÝÅÎÉÊ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ POP-ÓÅÒ×ÅÒÏÍ."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÐÏÞÔÏ×ÙÍ ÑÝÉËÏÍ!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "äÏÂÁ×ÉÔØ ÓÏÏÂÝÅÎÉÑ Ë %s?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "óÏÅÄÉÎÅÎÉÅ Ó %s ÚÁËÒÙÔÏ"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL-ÐÒÏÔÏËÏÌ ÎÅÄÏÓÔÕÐÅÎ."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "ëÏÍÁÎÄÁ, ÐÒÅÄÛÅÓÔ×ÕÀÝÁÑ ÓÏÅÄÉÎÅÎÉÀ, ÚÁ×ÅÒÛÉÌÁÓØ Ó ÏÛÉÂËÏÊ."
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "ïÛÉÂËÁ ÐÒÉ ×ÚÁÉÍÏÄÅÊÓÔ×ÉÉ Ó %s (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr "îÅËÏÒÒÅËÔÎÙÊ IDN \"%s\"."
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "ïÐÒÅÄÅÌÑÅÔÓÑ ÁÄÒÅÓ ÓÅÒ×ÅÒÁ %s..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "îÅ ÕÄÁÌÏÓØ ÏÐÒÅÄÅÌÉÔØ ÁÄÒÅÓ ÓÅÒ×ÅÒÁ \"%s\""
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "õÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ ÓÏÅÄÉÎÅÎÉÅ Ó %s..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "îÅ ÕÄÁÌÏÓØ ÕÓÔÁÎÏ×ÉÔØ ÓÏÅÄÉÎÅÎÉÅ Ó %s (%s)."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "îÅÄÏÓÔÁÔÏÞÎÏ ÜÎÔÒÏÐÉÉ"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "îÁËÏÐÌÅÎÉÅ ÜÎÔÒÏÐÉÉ: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s ÉÍÅÅÔ ÎÅÂÅÚÏÐÁÓÎÙÊ ÒÅÖÉÍ ÄÏÓÔÕÐÁ!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ SSL-ÐÒÏÔÏËÏÌÁ ÎÅ×ÏÚÍÏÖÎÏ ÉÚ-ÚÁ ÎÅÄÏÓÔÁÔËÁ ÜÎÔÒÏÐÉÉ"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "ÏÛÉÂËÁ ××ÏÄÁ/×Ù×ÏÄÁ"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "ÏÛÉÂËÁ ÐÒÏÔÏËÏÌÁ"
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "îÅ ÕÄÁÌÏÓØ ÕÓÔÁÎÏ×ÉÔØ SSL-ÓÏÅÄÉÎÅÎÉÅ: %s"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "îÅ ÕÄÁÌÏÓØ ÐÏÌÕÞÉÔØ ÓÅÒÔÉÆÉËÁÔ ÓÅÒ×ÅÒÁ"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "SSL-ÓÏÅÄÉÎÅÎÉÅ ÕÓÔÁÎÏ×ÌÅÎÏ; ÁÌÇÏÒÉÔÍ ÛÉÆÒÏ×ÁÎÉÑ %s (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "îÅÉÚ×ÅÓÔÎÏ"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[ÏÛÉÂËÁ ×ÙÞÉÓÌÅÎÉÊ]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[ÎÅÄÏÐÕÓÔÉÍÁÑ ÄÁÔÁ]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "óÅÒÔÉÆÉËÁÔ ×ÓÅ ÅÝÅ ÎÅÄÅÊÓÔ×ÉÔÅÌÅÎ"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "óÒÏË ÄÅÊÓÔ×ÉÑ ÓÅÒÔÉÆÉËÁÔÁ ÉÓÔÅË"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "äÁÎÎÙÊ ÓÅÒÔÉÆÉËÁÔ ÐÒÉÎÁÄÌÅÖÉÔ:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "äÁÎÎÙÊ ÓÅÒÔÉÆÉËÁÔ ÂÙÌ ×ÙÄÁÎ:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "äÁÎÎÙÊ ÓÅÒÔÉÆÉËÁÔ ÄÅÊÓÔ×ÉÔÅÌÅÎ"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   Ó %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "     ÐÏ %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "ïÔÐÅÞÁÔÏË ÐÁÌØÃÁ: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "ðÒÏ×ÅÒËÁ SSL-ÓÅÒÔÉÆÉËÁÔÁ"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(r)ÏÔ×ÅÒÇÎÕÔØ, (o)ÐÒÉÎÑÔØ, (a)ÐÒÉÎÑÔØ É ÓÏÈÒÁÎÉÔØ"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "roa"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(r)ÏÔ×ÅÒÇÎÕÔØ, (o)ÐÒÉÎÑÔØ"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "ro"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "÷ÙÈÏÄ "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅ ÕÄÁÌÏÓØ ÓÏÈÒÁÎÉÔØ ÓÅÒÔÉÆÉËÁÔ"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "óÅÒÔÉÆÉËÁÔ ÓÏÈÒÁÎÅÎ"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÚÁÂÌÏËÉÒÏ×ÁÔØ ÆÁÊÌ, ÕÄÁÌÉÔØ ÆÁÊÌ ÂÌÏËÉÒÏ×ËÉ ÄÌÑ %s?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "dotlock: ÎÅ ÕÄÁÌÏÓØ ÚÁÂÌÏËÉÒÏ×ÁÔØ %s.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "ôÁÊÍ-ÁÕÔ fcntl-ÂÌÏËÉÒÏ×ËÉ!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "ðÏÐÙÔËÁ fcntl-ÂÌÏËÉÒÏ×ËÉ ÆÁÊÌÁ... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "ôÁÊÍ-ÁÕÔ flock-ÂÌÏËÉÒÏ×ËÉ!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "ðÏÐÙÔËÁ flock-ÂÌÏËÉÒÏ×ËÉ ÆÁÊÌÁ... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "îÅ ÕÄÁÌÏÓØ ÚÁÂÌÏËÉÒÏ×ÁÔØ %s\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "þÉÔÁÅÔÓÑ %s..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "ðÉÛÅÔÓÑ %s..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "îÅ ÕÄÁÌÏÓØ ÓÉÎÈÒÏÎÉÚÉÒÏ×ÁÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË %s!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "ðÅÒÅÍÅÓÔÉÔØ ÐÒÏÞÉÔÁÎÎÙÅ ÓÏÏÂÝÅÎÉÑ × %s?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "÷ÙÞÉÓÔÉÔØ %d ÕÄÁÌÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "÷ÙÞÉÓÔÉÔØ %d ÕÄÁÌÅÎÎÙÈ ÓÏÏÂÝÅÎÉÊ?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "ðÒÏÞÉÔÁÎÎÙÅ ÓÏÏÂÝÅÎÉÑ ÐÅÒÅÍÅÝÁÀÔÓÑ × %s..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÎÅ ÉÚÍÅÎÉÌÓÑ."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "ïÓÔÁ×ÌÅÎÏ: %d, ÐÅÒÅÍÅÝÅÎÏ: %d, ÕÄÁÌÅÎÏ: %d."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "ïÓÔÁ×ÌÅÎÏ: %d, ÕÄÁÌÅÎÏ: %d."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr " éÓÐÏÌØÚÕÊÔÅ '%s' ÄÌÑ ÒÁÚÒÅÛÅÎÉÑ/ÚÁÐÒÅÝÅÎÉÑ ÚÁÐÉÓÉ"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "éÓÐÏÌØÚÕÊÔÅ ËÏÍÁÎÄÕ 'toggle-write' ÄÌÑ ÒÁÚÒÅÛÅÎÉÑ ÚÁÐÉÓÉ!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÓÔÁÌ ÄÏÓÔÕÐÅΠÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÏÂÎÏ×ÌÅÎ."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ ÓÏÏÂÝÅÎÉÑ"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr "ðÅÒÅÐÏÌÎÅÎÉÅ -- ÎÅ ÕÄÁÌÏÓØ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ."
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "÷ ÜÔÏÍ ÍÅÎÀ ÎÅÄÏÓÔÕÐÎÏ."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "îÁÚÁÄ"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "÷ÐÅÒÅÄ"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "÷ÌÏÖÅÎÉÑ"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "óÌÅÄÕÀÝÉÊ"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "ðÏÓÌÅÄÎÑÑ ÓÔÒÏËÁ ÓÏÏÂÝÅÎÉÑ ÕÖÅ ÎÁ ÜËÒÁÎÅ."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "ðÅÒ×ÁÑ ÓÔÒÏËÁ ÓÏÏÂÝÅÎÉÑ ÕÖÅ ÎÁ ÜËÒÁÎÅ."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "ïÂÒÁÔÎÙÊ ÐÏÉÓË: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "ðÏÉÓË: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "ðÏÄÓËÁÚËÁ ÕÖÅ ÐÅÒÅÄ ×ÁÍÉ."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "îÅÔ ÂÏÌØÛÅ ÃÉÔÉÒÕÅÍÏÇÏ ÔÅËÓÔÁ."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "úÁ ÃÉÔÉÒÕÅÍÙÍ ÔÅËÓÔÏÍ ÂÏÌØÛÅ ÎÅÔ ÏÓÎÏ×ÎÏÇÏ ÔÅËÓÔÁ."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "óÏÓÔÁ×ÎÏÅ ÓÏÏÂÝÅÎÉÅ ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÑ ÐÁÒÁÍÅÔÒÁ boundary!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "ïÛÉÂËÁ × ×ÙÒÁÖÅÎÉÉ: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "îÅ×ÅÒÎÙÊ ÄÅÎØ ÍÅÓÑÃÁ: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "îÅ×ÅÒÎÏÅ ÎÁÚ×ÁÎÉÅ ÍÅÓÑÃÁ: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "îÅ×ÅÒÎÏ ÕËÁÚÁÎÁ ÏÔÎÏÓÉÔÅÌØÎÁÑ ÄÁÔÁ: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "ÏÛÉÂËÁ × ×ÙÒÁÖÅÎÉÉ"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "ÏÛÉÂËÁ × ÏÂÒÁÚÃÅ: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: ÎÅÄÏÐÕÓÔÉÍÁÑ ËÏÍÁÎÄÁ"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: × ÜÔÏÍ ÒÅÖÉÍÅ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "ÐÒÏÐÕÝÅΠÐÁÒÁÍÅÔÒ"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "ÐÒÏÐÕÝÅÎÁ ÓËÏÂËÁ: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "ÐÕÓÔÏÊ ÏÂÒÁÚÅÃ"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "ÏÛÉÂËÁ: ÎÅÉÚ×ÅÓÔÎÁÑ ÏÐÅÒÁÃÉÑ %d (ÓÏÏÂÝÉÔÅ Ï ÜÔÏÊ ÏÛÉÂËÅ)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "ïÂÒÁÚÅàÐÏÉÓËÁ ËÏÍÐÉÌÉÒÕÅÔÓÑ..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "éÓÐÏÌÎÑÅÔÓÑ ËÏÍÁÎÄÁ ÄÌÑ ÐÏÄÈÏÄÑÝÉÈ ÓÏÏÂÝÅÎÉÊ..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "îÉ ÏÄÎÏ ÓÏÏÂÝÅÎÉÅ ÎÅ ÐÏÄÈÏÄÉÔ ÐÏÄ ËÒÉÔÅÒÉÊ."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "ðÏÉÓË ÄÏÛÅÌ ÄÏ ËÏÎÃÁ, ÎÅ ÎÁÊÄÑ ÎÉÞÅÇÏ ÐÏÄÈÏÄÑÝÅÇÏ"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "ðÏÉÓË ÄÏÛÅÌ ÄÏ ÎÁÞÁÌÁ, ÎÅ ÎÁÊÄÑ ÎÉÞÅÇÏ ÐÏÄÈÏÄÑÝÅÇÏ"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "ðÏÉÓË ÐÒÅÒ×ÁÎ."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "PGP ÆÒÁÚÁ-ÐÁÒÏÌØ ÕÄÁÌÅÎÁ ÉÚ ÐÁÍÑÔÉ."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- ïÛÉÂËÁ: ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ PGP-ÐÏÄÐÒÏÃÅÓÓ! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- ëÏÎÅà×Ù×ÏÄÁ ÐÒÏÇÒÁÍÍÙ PGP --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- îÁÞÁÌÏ PGP-ÓÏÏÂÝÅÎÉÑ --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- îÁÞÁÌÏ ÂÌÏËÁ ÏÔËÒÙÔÏÇÏ PGP-ËÌÀÞÁ --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- îÁÞÁÌÏ ÓÏÏÂÝÅÎÉÑ, ÐÏÄÐÉÓÁÎÎÏÇÏ PGP --]\n"
+"\n"
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- ëÏÎÅàPGP-ÓÏÏÂÝÅÎÉÑ --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- ëÏÎÅàÂÌÏËÁ ÏÔËÒÙÔÏÇÏ PGP-ËÌÀÞÁ --]\n"
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- ëÏÎÅàÓÏÏÂÝÅÎÉÑ, ÐÏÄÐÉÓÁÎÎÏÇÏ PGP --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- ïÛÉÂËÁ: ÎÅ ÕÄÁÌÏÓØ ÎÁÊÔÉ ÎÁÞÁÌÏ PGP-ÓÏÏÂÝÅÎÉÑ! --]\n"
+"\n"
+
+#: pgp.c:662
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr ""
+"÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ. óÏÏÂÝÉÔÅ Ï ÎÅÊ ÐÏ ÁÄÒÅÓÕ <roessler@does-not-exist.org>."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- ïÛÉÂËÁ: ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ PGP-ÐÏÄÐÒÏÃÅÓÓ! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- ïÛÉÂËÁ: ÆÏÒÍÁÔ ÓÏÏÂÝÅÎÉÑ ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÓÔÁÎÄÁÒÔÕ PGP/MIME --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- ïÛÉÂËÁ: ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- îÁÞÁÌÏ ÄÁÎÎÙÈ, ÚÁÛÉÆÒÏ×ÁÎÎÙÈ × ÆÏÒÍÁÔÅ PGP/MIME --]\n"
+"\n"
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- ëÏÎÅàÄÁÎÎÙÈ, ÚÁÛÉÆÒÏ×ÁÎÎÙÈ × ÆÏÒÍÁÔÅ PGP/MIME --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ PGP-ÐÏÄÐÒÏÃÅÓÓ!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "éÓÐÏÌØÚÏ×ÁÔØ ËÌÀÞ \"%s\" ÄÌÑ %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "÷×ÅÄÉÔÅ ÉÄÅÎÔÉÆÉËÁÔÏÒ ËÌÀÞÁ ÄÌÑ %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "îÅ ÕÄÁÌÏÓØ ÚÁÐÕÓÔÉÔØ ÐÒÏÇÒÁÍÍÕ PGP"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "ðÏÌÕÞÅÎÉÅ PGP-ËÌÀÞÁ..."
+
+#: pgpkey.c:486
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr ""
+"÷ÓÅ ÐÏÄÈÏÄÑÝÉÅ ËÌÀÞÉ ÐÏÍÅÞÅÎÙ ËÁË ÐÒÏÓÒÏÞÅÎÎÙÅ, ÏÔÏÚ×ÁÎÎÙÅ ÉÌÉ ÚÁÐÒÅÝ£ÎÎÙÅ."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "÷ÙÂÒÁÔØ "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "ôÅÓÔ ËÌÀÞÁ "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "PGP-ËÌÀÞÉ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÅ <%s>."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "PGP-ËÌÀÞÉ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÅ \"%s\"."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ /dev/null"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "éÄÅÎÔÉÆÉËÁÔÏÒ ËÌÀÞÁ: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "üÔÏÔ ËÌÀÞ ÎÅ ÍÏÖÅÔ ÂÙÔØ ÉÓÐÏÌØÚÏ×ÁÎ: ÐÒÏÓÒÏÞÅÎ, ÚÁÐÒÅÝÅΠÉÌÉ ÏÔÏÚ×ÁÎ."
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "ID ÐÒÏÓÒÏÞÅÎ, ÚÁÐÒÅÝÅΠÉÌÉ ÏÔÏÚ×ÁÎ."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "óÔÅÐÅÎØ ÄÏ×ÅÒÉÑ ÄÌÑ ID ÎÅ ÏÐÒÅÄÅÌÅÎÁ."
+
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "ID ÎÅÄÅÊÓÔ×ÉÔÅÌÅÎ."
+
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "ID ÄÅÊÓÔ×ÉÔÅÌÅΠÔÏÌØËÏ ÞÁÓÔÉÞÎÏ."
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s éÓÐÏÌØÚÏ×ÁÔØ ÜÔÏÔ ËÌÀÞ?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "÷×ÅÄÉÔÅ, ÐÏÖÁÌÕÊÓÔÁ, ÉÄÅÎÔÉÆÉËÁÔÏÒ ËÌÀÞÁ: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "úÁÐÕÓËÁÅÔÓÑ ÐÒÏÇÒÁÍÍÁ PGP..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "PGP-ËÌÀÞ %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "ðÏÉÓË ËÌÀÞÅÊ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÈ \"%s\"..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "ëÏÍÁÎÄÁ TOP ÓÅÒ×ÅÒÏÍ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ ÚÁÇÏÌÏ×ËÁ ×Ï ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "ëÏÍÁÎÄÁ UIDL ÓÅÒ×ÅÒÏÍ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "îÅ×ÅÒÎÏ ÕËÁÚÁÎÏ ÉÍÑ POP-ÑÝÉËÁ: %s"
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "ðÏÌÕÞÅÎÉÅ ÓÐÉÓËÁ ÓÏÏÂÝÅÎÉÊ..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ ÓÏÏÂÝÅÎÉÑ ×Ï ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "ðÒÏ×ÅÒËÁ ÎÁÌÉÞÉÑ ÎÏ×ÙÈ ÓÏÏÂÝÅÎÉÊ..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "POP-ÓÅÒ×ÅÒ ÎÅ ÏÐÒÅÄÅÌÅÎ."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "îÅÔ ÎÏ×ÏÊ ÐÏÞÔÙ × POP-ÑÝÉËÅ."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "õÄÁÌÉÔØ ÓÏÏÂÝÅÎÉÑ Ó ÓÅÒ×ÅÒÁ?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "þÉÔÁÀÔÓÑ ÎÏ×ÙÅ ÓÏÏÂÝÅÎÉÑ (ÂÁÊÔÏ×: %d)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [ÓÏÏÂÝÅÎÉÊ ÐÒÏÞÉÔÁÎÏ: %d ÉÚ %d]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "óÅÒ×ÅÒ ÚÁËÒÙÌ ÓÏÅÄÉÎÅÎÉÅ!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "áÕÔÅÎÔÉÆÉËÁÃÉÑ (ÍÅÔÏÄ SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "áÕÔÅÎÔÉÆÉËÁÃÉÑ (ÍÅÔÏÄ APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "ïÛÉÂËÁ APOP-ÁÕÔÅÎÔÉÆÉËÁÃÉÉ."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "ëÏÍÁÎÄÁ USER ÓÅÒ×ÅÒÏÍ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÓÔÁ×ÉÔØ ÓÏÏÂÝÅÎÉÑ ÎÁ ÓÅÒ×ÅÒÅ."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "ïÛÉÂËÁ ÐÒÉ ÕÓÔÁÎÏ×ÌÅÎÉÉ ÓÏÅÄÉÎÅÎÉÑ: %s"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "úÁËÒÙÔÉÅ ÓÏÅÄÉÎÅÎÉÑ Ó POP-ÓÅÒ×ÅÒÏÍ..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "ðÒÏ×ÅÒËÁ ÎÏÍÅÒÏ× ÓÏÏÂÝÅÎÉÊ..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "óÏÅÄÉÎÅÎÉÅ ÐÏÔÅÒÑÎÏ. õÓÔÁÎÏ×ÉÔØ ÓÏÅÄÉÎÅÎÉÅ ÐÏ×ÔÏÒÎÏ?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "ïÔÌÏÖÅÎÎÙÅ ÓÏÏÂÝÅÎÉÑ"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "îÅÔ ÏÔÌÏÖÅÎÎÙÈ ÓÏÏÂÝÅÎÉÊ."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "îÅ×ÅÒÎÙÊ PGP-ÚÁÇÏÌÏ×ÏË"
+
+#: postpone.c:479
+msgid "Illegal S/MIME header"
+msgstr "îÅ×ÅÒÎÙÊ S/MIME-ÚÁÇÏÌÏ×ÏË"
+
+#: postpone.c:554
+msgid "Decryption failed."
+msgstr "òÁÓÛÉÆÒÏ×ÁÔØ ÎÅ ÕÄÁÌÁÓØ."
+
+#: query.c:46
+msgid "New Query"
+msgstr "îÏ×ÙÊ ÚÁÐÒÏÓ"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "óÏÚÄÁÔØ ÐÓÅ×ÄÏÎÉÍ"
+
+#: query.c:48
+msgid "Search"
+msgstr "éÓËÁÔØ"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "ïÖÉÄÁÅÔÓÑ ÏÔ×ÅÔ..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "ëÏÍÁÎÄÁ ÚÁÐÒÏÓÁ ÎÅ ÏÐÒÅÄÅÌÅÎÁ."
+
+#: query.c:286
+msgid "Query"
+msgstr "úÁÐÒÏÓ"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "úÁÐÒÏÓ: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "úÁÐÒÏÓ '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "ðÅÒÅÄÁÔØ ÐÒÏÇÒÁÍÍÅ"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "îÁÐÅÞÁÔÁÔØ"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "óÏÈÒÁÎÑÅÔÓÑ..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "÷ÌÏÖÅÎÉÅ ÓÏÈÒÁÎÅÎÏ."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "ðòåäõðòåöäåîéå: ×Ù ÓÏÂÉÒÁÅÔÅÓØ ÐÅÒÅÚÁÐÉÓÁÔØ %s. ðÒÏÄÏÌÖÉÔØ?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "÷ÌÏÖÅÎÉÅ ÏÂÒÁÂÏÔÁÎÏ."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "ðÒÏÐÕÓÔÉÔØ ÞÅÒÅÚ: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "ðÅÒÅÄÁÔØ ÐÒÏÇÒÁÍÍÅ: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "îÅÉÚ×ÅÓÔÎÏ ËÁË ÐÅÞÁÔÁÔØ %s ×ÌÏÖÅÎÉÑ!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "îÁÐÅÞÁÔÁÔØ ÏÔÍÅÞÅÎÎÙÅ ×ÌÏÖÅÎÉÑ?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "îÁÐÅÞÁÔÁÔØ ×ÌÏÖÅÎÉÅ?"
+
+#: recvattach.c:938
+msgid "Can't decrypt encrypted message!"
+msgstr "îÅ ÕÄÁÌÏÓØ ÒÁÓÛÉÆÒÏ×ÁÔØ ÚÁÛÉÆÒÏ×ÁÎÎÏÅ ÓÏÏÂÝÅÎÉÅ!"
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "÷ÌÏÖÅÎÉÑ"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "äÁÊÄÖÅÓÔ ÎÅ ÓÏÄÅÒÖÉÔ ÎÉ ÏÄÎÏÊ ÞÁÓÔÉ!"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "õÄÁÌÅÎÉÅ ×ÌÏÖÅÎÉÊ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ POP-ÓÅÒ×ÅÒÏÍ."
+
+#: recvattach.c:1056
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "õÄÁÌÅÎÉÅ ×ÌÏÖÅÎÉÊ ÉÚ ÚÁÛÉÆÒÏ×ÁÎÎÙÈ ÓÏÏÂÝÅÎÉÊ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "äÌÑ ÓÏÓÔÁ×ÎÙÈ ×ÌÏÖÅÎÉÊ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÔÏÌØËÏ ÕÄÁÌÅÎÉÅ."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "÷Ù ÍÏÖÅÔÅ ÐÅÒÅÎÁÐÒÁ×ÌÑÔØ ÔÏÌØËÏ ÞÁÓÔÉ ÔÉÐÁ message/rfc822."
+
+#: recvcmd.c:213
+msgid "Error bouncing message!"
+msgstr "ïÛÉÂËÁ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÑ ÓÏÏÂÝÅÎÉÑ!"
+
+#: recvcmd.c:213
+msgid "Error bouncing messages!"
+msgstr "ïÛÉÂËÁ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÑ ÓÏÏÂÝÅÎÉÊ!"
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ %s."
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "ðÅÒÅÓÌÁÔØ ËÁË ×ÌÏÖÅÎÉÑ?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+"õÄÁÌÏÓØ ÒÁÓËÏÄÉÒÏ×ÁÔØ ÎÅ ×ÓÅ ×ÌÏÖÅÎÉÑ. ðÅÒÅÓÌÁÔØ ÏÓÔÁÌØÎÙÅ × ×ÉÄÅ MIME?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "ðÅÒÅÓÌÁÔØ ÉÎËÁÐÓÕÌÉÒÏ×ÁÎÎÙÍ × MIME?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ %s."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "ðÏÍÅÞÅÎÎÙÅ ÓÏÏÂÝÅÎÉÑ ÏÔÓÕÔÓÔ×ÕÀÔ."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "óÐÉÓËÏ× ÒÁÓÓÙÌËÉ ÎÅ ÎÁÊÄÅÎÏ!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+"õÄÁÌÏÓØ ÒÁÓËÏÄÉÒÏ×ÁÔØ ÎÅ ×ÓÅ ×ÌÏÖÅÎÉÑ. éÎËÁÐÓÕÌÉÒÏ×ÁÔØ ÏÓÔÁÌØÎÙÅ × MIME?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "äÏÂÁ×ÉÔØ"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "÷ÓÔÁ×ÉÔØ"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "õÄÁÌÉÔØ"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "OK"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "îÅ ÕÄÁÌÏÓØ ÐÏÌÕÞÉÔØ type2.list mixmaster!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "÷ÙÂÒÁÔØ ÃÅÐÏÞËÕ remailer"
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "ïÛÉÂËÁ: %s ÎÅ ÍÏÖÅÔ ÂÙÔØ ÉÓÐÏÌØÚÏ×ÁΠËÁË ÐÏÓÌÅÄÎÉÊ remailer"
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "ãÅÐÏÞËÉ mixmaster ÉÍÅÀÔ ÏÇÒÁÎÉÞÅÎÎÏÅ ËÏÌÉÞÅÓÔ×Ï ÜÌÅÍÅÎÔÏ×: %d"
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "ãÅÐÏÞËÁ remailer ÕÖÅ ÐÕÓÔÁÑ."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "÷Ù ÕÖÅ ÐÏÍÅÔÉÌÉ ÐÅÒ×ÙÊ ÜÌÅÍÅÎÔ ÃÅÐÏÞËÉ."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "÷Ù ÕÖÅ ÐÏÍÅÔÉÌÉ ÐÏÓÌÅÄÎÉÊ ÜÌÅÍÅÎÔ ÃÅÐÏÞËÉ."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Mixmaster ÎÅ ÐÏÚ×ÏÌÑÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÚÁÇÏÌÏ×ËÉ Cc É Bcc."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr "õÓÔÁÎÏ×ÉÔÅ ÚÎÁÞÅÎÉÅ ÐÅÒÅÍÅÎÎÏÊ hostname ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ mixmaster!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "óÏÏÂÝÅÎÉÅ ÏÔÐÒÁ×ÉÔØ ÎÅ ÕÄÁÌÏÓØ, ÐÒÏÃÅÓÓ-ÐÏÔÏÍÏË ×ÅÒÎÕÌ %d.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "ïÛÉÂËÁ ÏÔÐÒÁ×ËÉ ÓÏÏÂÝÅÎÉÑ."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "îÅËÏÒÒÅËÔÎÏ ÏÔÆÏÒÍÁÔÉÒÏ×ÁÎÎÁÑ ÚÁÐÉÓØ ÄÌÑ ÔÉÐÁ %s × \"%s\", ÓÔÒÏËÁ %d"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "ðÕÔØ Ë ÆÁÊÌÕ mailcap ÎÅ ÕËÁÚÁÎ"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "ÄÌÑ ÔÉÐÁ %s ÎÅ ÎÁÊÄÅÎÏ ÚÁÐÉÓÉ × ÆÁÊÌÅ mailcap"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: ÓÌÉÛËÏÍ ÍÁÌÏ ÁÒÇÕÍÅÎÔÏ×"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ×"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "îÅÔ ÔÅÍÙ ÐÉÓØÍÁ, ÏÔËÁÚÁÔØÓÑ?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "îÅÔ ÔÅÍÙ ÐÉÓØÍÁ, ÏÔËÁÚ."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "ïÔ×ÅÞÁÔØ ÐÏ %s%s?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "ïÔ×ÅÞÁÔØ ÐÏ %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "îÉ ÏÄÎÏ ÉÚ ÐÏÍÅÞÅÎÎÙÈ ÓÏÏÂÝÅÎÉÊ ÎÅ Ñ×ÌÑÅÔÓÑ ×ÉÄÉÍÙÍ!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "÷ÓÔÁ×ÉÔØ ÓÏÏÂÝÅÎÉÅ × ÏÔ×ÅÔ?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "÷ËÌÀÞÁÅÔÓÑ ÃÉÔÉÒÕÅÍÏÅ ÓÏÏÂÝÅÎÉÅ..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "îÅ ÕÄÁÌÏÓØ ×ÓÔÁ×ÉÔØ ×ÓÅ ÚÁÔÒÅÂÏ×ÁÎÎÙÅ ÓÏÏÂÝÅÎÉÑ!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "ðÅÒÅÓÌÁÔØ ËÁË ×ÌÏÖÅÎÉÅ?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "ðÏÄÇÏÔÏ×ËÁ ÐÅÒÅÓÙÌÁÅÍÏÇÏ ÓÏÏÂÝÅÎÉÑ..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "ðÒÏÄÏÌÖÉÔØ ÏÔÌÏÖÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ?"
+
+#: send.c:1336
+msgid "Edit forwarded message?"
+msgstr "òÅÄÁËÔÉÒÏ×ÁÔØ ÐÅÒÅÓÙÌÁÅÍÏÅ ÓÏÏÂÝÅÎÉÅ?"
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "ïÔËÁÚÁÔØÓÑ ÏÔ ÎÅÉÚÍÅÎÅÎÎÏÇÏ ÓÏÏÂÝÅÎÉÑ?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "óÏÏÂÝÅÎÉÅ ÎÅ ÉÚÍÅÎÉÌÏÓØ, ÏÔËÁÚ."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "ðÉÓØÍÏ ÎÅ ÏÔÐÒÁ×ÌÅÎÏ."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "óÏÏÂÝÅÎÉÅ ÏÔÌÏÖÅÎÏ."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "îÅ ÕËÁÚÁÎÏ ÎÉ ÏÄÎÏÇÏ ÁÄÒÅÓÁÔÁ!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "îÅ ÂÙÌÏ ÕËÁÚÁÎÏ ÎÉ ÏÄÎÏÇÏ ÁÄÒÅÓÁÔÁ."
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "îÅÔ ÔÅÍÙ ÓÏÏÂÝÅÎÉÑ, ÐÒÅÒ×ÁÔØ ÏÔÐÒÁ×ËÕ?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "ôÅÍÁ ÓÏÏÂÝÅÎÉÑ ÎÅ ÕËÁÚÁÎÁ."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "óÏÏÂÝÅÎÉÅ ÏÔÐÒÁ×ÌÑÅÔÓÑ..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "óÏÏÂÝÅÎÉÅ ÏÔÐÒÁ×ÉÔØ ÎÅ ÕÄÁÌÏÓØ."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "óÏÏÂÝÅÎÉÅ ÏÔÐÒÁ×ÌÅÎÏ."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "óÏÏÂÝÅÎÉÅ ÏÔÐÒÁ×ÌÑÅÔÓÑ × ÆÏÎÏ×ÏÍ ÒÅÖÉÍÅ."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "ðÁÒÁÍÅÔÒ boundary ÎÅ ÎÁÊÄÅÎ! (óÏÏÂÝÉÔÅ Ï ÜÔÏÊ ÏÛÉÂËÅ)"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s ÂÏÌØÛÅ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ!"
+
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÆÁÊÌÏÍ."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ %s"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "óÏÏÂÝÅÎÉÅ ÏÔÐÒÁ×ÉÔØ ÎÅ ÕÄÁÌÏÓØ, ÐÒÏÃÅÓÓ-ÐÏÔÏÍÏË ×ÅÒÎÕÌ %d (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "òÅÚÕÌØÔÁÔ ÒÁÂÏÔÙ ÐÒÏÇÒÁÍÍÙ ÄÏÓÔÁ×ËÉ ÐÏÞÔÙ"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr "îÅËÏÒÒÅËÔÎÙÊ IDN %s ÐÒÉ ÐÏÄÇÏÔÏ×ËÅ Resent-From."
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s...  úÁ×ÅÒÛÅÎÉÅ ÒÁÂÏÔÙ.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "ðÏÌÕÞÅΠÓÉÇÎÁÌ %s...  úÁ×ÅÒÛÅÎÉÅ ÒÁÂÏÔÙ.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "ðÏÌÕÞÅΠÓÉÇÎÁÌ %d...  úÁ×ÅÒÛÅÎÉÅ ÒÁÂÏÔÙ.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr "äÏ×ÅÒÅÎÎÙÊ    "
+
+#: smime.c:303
+msgid "Verified  "
+msgstr "ðÒÏ×ÅÒÅÎÎÙÊ  "
+
+#: smime.c:306
+msgid "Unverified"
+msgstr "îÅÐÒÏ×ÅÒÅÎÎÙÊ"
+
+#: smime.c:309
+msgid "Expired   "
+msgstr "ðÒÏÓÒÏÞÅÎÎÙÊ "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr "ïÔÏÚ×ÁÎÎÙÊ   "
+
+#: smime.c:315
+msgid "Invalid   "
+msgstr "îÅÐÒÁ×ÉÌØÎÙÊ "
+
+#: smime.c:318
+msgid "Unknown   "
+msgstr "îÅÉÚ×ÅÓÔÎÙÊ  "
+
+#: smime.c:347
+msgid "Enter keyID: "
+msgstr "÷×ÅÄÉÔÅ ÉÄÅÎÔÉÆÉËÁÔÏÒ ËÌÀÞÁ: "
+
+#: smime.c:370
+#, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "S/MIME-ÓÅÒÔÉÆÉËÁÔÙ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÅ \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr "ëÌÀÞ %s ÎÅ ÐÒÏ×ÅÒÅÎ. ÷Ù ÖÅÌÁÅÔÅ ÅÇÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÄÌÑ %s?"
+
+#: smime.c:523 smime.c:592
+#, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "éÓÐÏÌØÚÏ×ÁÔØ (ÎÅÄÏ×ÅÒÅÎÎÙÊ!) ËÌÀÞ %s ÄÌÑ %s?"
+
+#: smime.c:526 smime.c:595
+#, c-format
+msgid "Use ID %s for %s ?"
+msgstr "éÓÐÏÌØÚÏ×ÁÔØ ËÌÀÞ %s ÄÌÑ %s?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÷Ù ÅÝ£ ÎÅ ÒÅÛÉÌÉ, ÄÏ×ÅÒÑÔØ ÌÉ ËÌÀÞÕ %s. (ðÒÏÄÏÌÖÉÔØ)"
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr "îÅ ÎÁÊÄÅÎÏ (ÐÒÁ×ÉÌØÎÏÇÏ) ÓÅÒÔÉÆÉËÁÔÁ ÄÌÑ %s."
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "ïÛÉÂËÁ: ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ OpenSSL-ÐÏÄÐÒÏÃÅÓÓ!"
+
+#: smime.c:1197
+msgid "no certfile"
+msgstr "ÎÅÔ ÆÁÊÌÁ ÓÅÒÔÉÆÉËÁÔÁ"
+
+#: smime.c:1200
+msgid "no mbox"
+msgstr "ÎÅÔ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr "îÅÔ ×Ù×ÏÄÁ ÏÔ ÐÒÏÇÒÁÍÍÙ OpenSSL.."
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÐÒÏÍÅÖÕÔÏÞÎÙÊ ÓÅÒÔÉÆÉËÁÔ ÎÅ ÎÁÊÄÅÎ."
+
+#: smime.c:1426
+msgid "Can't open OpenSSL subprocess!"
+msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ OpenSSL-ÐÏÄÐÒÏÃÅÓÓ!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr "îÅÔ ×Ù×ÏÄÁ ÏÔ ÐÒÏÇÒÁÍÍÙ OpenSSL..."
+
+#: smime.c:1629 smime.c:1751
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- ëÏÎÅà×Ù×ÏÄÁ ÐÒÏÇÒÁÍÍÙ OpenSSL --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- ïÛÉÂËÁ: ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ OpenSSL-ÐÏÄÐÒÏÃÅÓÓ! --]\n"
+
+#: smime.c:1755
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr "[-- îÁÞÁÌÏ ÄÁÎÎÙÈ, ÚÁÛÉÆÒÏ×ÁÎÎÙÈ × ÆÏÒÍÁÔÅ S/MIME --]\n"
+
+#: smime.c:1758
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr "[-- îÁÞÁÌÏ ÄÁÎÎÙÈ, ÐÏÄÐÉÓÁÎÎÙÈ × ÆÏÒÍÁÔÅ S/MIME --]\n"
+
+#: smime.c:1822
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- ëÏÎÅàÄÁÎÎÙÈ, ÚÁÛÉÆÒÏ×ÁÎÎÙÈ × ÆÏÒÍÁÔÅ S/MIME --]\n"
+
+#: smime.c:1824
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- ëÏÎÅàÄÁÎÎÙÈ, ÐÏÄÐÉÓÁÎÎÙÈ × ÆÏÒÍÁÔÅ S/MIME --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÓÏÒÔÉÒÕÅÔÓÑ..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "îÅ ÕÄÁÌÏÓØ ÎÁÊÔÉ ÆÕÎËÃÉÀ ÓÏÒÔÉÒÏ×ËÉ! (ÓÏÏÂÝÉÔÅ Ï ÜÔÏÊ ÏÛÉÂËÅ)"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(ÎÅÔ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ)"
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "òÏÄÉÔÅÌØÓËÏÅ ÓÏÏÂÝÅÎÉÅ ÎÅ ×ÉÄÉÍÏ ÐÒÉ ÐÒÏÓÍÏÔÒÅ Ó ÏÇÒÁÎÉÞÅÎÉÅÍ."
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "òÏÄÉÔÅÌØÓËÏÅ ÓÏÏÂÝÅÎÉÅ ÎÅÄÏÓÔÕÐÎÏ."
diff --git a/po/sk.gmo b/po/sk.gmo
new file mode 100644 (file)
index 0000000..628e1c8
Binary files /dev/null and b/po/sk.gmo differ
diff --git a/po/sk.po b/po/sk.po
new file mode 100644 (file)
index 0000000..292dd7a
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,4533 @@
+# MUTT
+# Copyright (C) 1998 Free Software Foundation, Inc.
+# Miroslav Vasko <vasko@ies.sk>, 1998.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 0.95.6i\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 1999-07-29 00:00+0100\n"
+"Last-Translator: Miroslav Vasko <vasko@ies.sk>\n"
+"Language-Team: Slovak <sk@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: account.c:144
+#, fuzzy, c-format
+msgid "Username at %s: "
+msgstr "Premenova» na: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "Heslo pre %s@%s: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Koniec"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Zma¾"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Odma¾"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Oznaèi»"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Pomoc"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "Nemáte ¾iadnych zástupcov!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Zástupci"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Zástupca ako: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "Zástupcu s týmto menom u¾ máte definovaného!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr ""
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Adresa: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr ""
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Vlastné meno: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] Akceptova»?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Ulo¾i» do súboru: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Pridal som zástupcu."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Nena¹iel som ¹ablónu názvu, pokraèova»?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "Zostavovacia polo¾ka mailcap-u vy¾aduje %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, fuzzy, c-format
+msgid "Error running \"%s\"!"
+msgstr "Chyba pri analýze adresy!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Nemo¾no otvori» súbor na analýzu hlavièiek."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Nemo¾no otvori» súbor na odstránenie hlavièiek."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "®iadna zostavovacia polo¾ka mailcap-u pre %s, vytváram prázdny súbor."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "Vstupná polo¾ka mailcap-u vy¾aduje %%s"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "®iadna vstupná polo¾ka mailcap-u pre %s"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "®iadna polo¾ka mailcap-u nebola nájdená. Prezerám ako text."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "MIME typ nie je definovaný. Nemo¾no zobrazi» pripojené dáta."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Nemo¾no vytvori» filter."
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Nemo¾no vytvori» filter"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "Chyba zápisu!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Neviem, ako vytlaèi» dáta!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Zmena adresára"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Maska"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s nie je adresár."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Schránky [%d]"
+
+#: browser.c:504
+#, fuzzy, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Adresár [%s], maska súboru: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Adresár [%s], maska súboru: %s"
+
+#: browser.c:520
+#, fuzzy
+msgid "Can't attach a directory!"
+msgstr "Nemo¾no prezera» adresár"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Maske nevyhovujú ¾iadne súbory"
+
+#: browser.c:856
+#, fuzzy
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Táto operácia nie je podporovaná pre PGP správy."
+
+#: browser.c:876
+#, fuzzy
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Táto operácia nie je podporovaná pre PGP správy."
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr ""
+
+#: browser.c:898
+#, fuzzy
+msgid "Mailbox deleted."
+msgstr "Bola zistená sluèka v makre."
+
+#: browser.c:904
+#, fuzzy
+msgid "Mailbox not deleted."
+msgstr "Po¹ta nebola odoslaná."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Zmeò adresár na: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Chyba pri èítaní adresára."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Maska súborov: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Spätné triedenie podµa (d)átumu, zn(a)kov, (z)-veµkosti, (n)etriedi»? "
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Triedenie podµa (d)átumu, zn(a)kov, (z)-veµkosti, alebo (n)etriedi»? "
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "dazn"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Nové meno súboru: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Nemo¾no prezera» adresár"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Chyba pri prezeraní súboru"
+
+#: buffy.c:442
+#, fuzzy
+msgid "New mail in "
+msgstr "Nová po¹ta v %s."
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: terminál túto farbu nepodporuje"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: nenájdená farba"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: nenájdený objekt"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: príkaz je platný iba pre indexovaný objekt"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: príli¹ málo parametrov"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Chýbajúce parametre."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "farba: príli¹ málo parametrov"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: príli¹ málo parametrov"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: vlastnos» nenájdená"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "príli¹ málo argumentov"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "príli¹ veµa argumentov"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "¹tandardné farby nepodporované"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "Overi» PGP podpis?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Nemo¾no vytvori» doèasný súbor!"
+
+#: commands.c:126
+#, fuzzy
+msgid "Cannot create display filter"
+msgstr "Nemo¾no vytvori» filter."
+
+#: commands.c:146
+#, fuzzy
+msgid "Could not copy message"
+msgstr "Nemo¾no posla» správu."
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr ""
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr ""
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr ""
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr ""
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr ""
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Príkaz: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Presmerova» správu do: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Presmerova» oznaèené správy do: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "Chyba pri analýze adresy!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr ""
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Presmerova» správu do %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Presmerova» správy do %s"
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Message not bounced."
+msgstr "Správa bola presmerovaná."
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Messages not bounced."
+msgstr "Správy boli presmerované."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Správa bola presmerovaná."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Správy boli presmerované."
+
+#: commands.c:381 commands.c:415 commands.c:432
+#, fuzzy
+msgid "Can't create filter process"
+msgstr "Nemo¾no vytvori» filter"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Po¹li do rúry príkazu: "
+
+#: commands.c:478
+#, fuzzy
+msgid "No printing command has been defined."
+msgstr "cykluj medzi schránkami s príchodzími správami"
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "Vytlaèi» správu?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Vytlaèi» oznaèené správy?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "Správa bola vytlaèené"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Správy boli vytlaèené"
+
+#: commands.c:494
+#, fuzzy
+msgid "Message could not be printed"
+msgstr "Správa bola vytlaèené"
+
+#: commands.c:495
+#, fuzzy
+msgid "Messages could not be printed"
+msgstr "Správy boli vytlaèené"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Spät.tried.(d)át/(f)-od/p(r)í/(s)-pred/k(o)mu/(t)-re»/(u)-ne/(z)-veµ/(c)-"
+"skóre: "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Tried. (d)át/(f)-od/p(r)í/(s)-pred/k(o)mu/(t)-re»/(u)-ne/(z)-veµ/(c)-skó:"
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dfrsotuzc"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Príkaz shell-u: "
+
+#: commands.c:701
+#, fuzzy, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "%s%s do schránky"
+
+#: commands.c:702
+#, fuzzy, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "%s%s do schránky"
+
+#: commands.c:703
+#, fuzzy, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "%s%s do schránky"
+
+#: commands.c:704
+#, fuzzy, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "%s%s do schránky"
+
+#: commands.c:705
+#, fuzzy, c-format
+msgid "Save%s to mailbox"
+msgstr "%s%s do schránky"
+
+#: commands.c:705
+#, fuzzy, c-format
+msgid "Copy%s to mailbox"
+msgstr "%s%s do schránky"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " oznaèené"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Kopírujem do %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr ""
+
+#: commands.c:910
+#, fuzzy, c-format
+msgid "Content-Type changed to %s."
+msgstr "Spájam sa s %s..."
+
+#: commands.c:912
+#, fuzzy, c-format
+msgid "Character set changed to %s; %s."
+msgstr "Spájam sa s %s..."
+
+#: commands.c:914
+msgid "not converting"
+msgstr ""
+
+#: commands.c:914
+msgid "converting"
+msgstr ""
+
+#: compose.c:42
+#, fuzzy
+msgid "There are no attachments."
+msgstr "Vlákno obsahuje neèítané správy."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Posla»"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Preru¹i»"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Pripoj súbor"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Popísa»"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Podpí¹, za¹ifruj"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Za¹ifruj"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Podpísa»"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Vyèisti»"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " podpí¹ ako: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<¹td>"
+
+#: compose.c:149
+#, fuzzy
+msgid "Encrypt with: "
+msgstr "Za¹ifruj"
+
+#: compose.c:165
+#, fuzzy
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"(e)-¹ifr, (s)-podp, podp (a)ko, o(b)e, oznaè alg. mi(c), alebo (f)-zabudnú» "
+"na to? "
+
+#: compose.c:166
+#, fuzzy
+msgid "esabf"
+msgstr "esabmf"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Podpí¹ ako: "
+
+#: compose.c:227
+#, fuzzy
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"(e)-¹ifr, (s)-podp, podp (a)ko, o(b)e, oznaè alg. mi(c), alebo (f)-zabudnú» "
+"na to? "
+
+#: compose.c:228
+#, fuzzy
+msgid "eswabf"
+msgstr "esabmf"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+
+#: compose.c:238
+msgid "12345f"
+msgstr ""
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] u¾ neexistuje!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] bolo zmenené. Aktualizova» kódovanie?"
+
+#: compose.c:402
+#, fuzzy
+msgid "-- Attachments"
+msgstr "Prílohy"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr ""
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Nemô¾ete zmaza» jediné pridané dáta."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr ""
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr ""
+
+#: compose.c:814
+#, fuzzy, c-format
+msgid "Unable to attach %s!"
+msgstr "Nemo¾no pripoji»!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Otvor schránku, z ktorej sa bude pridáva» správa"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "V tejto zlo¾ke nie sú správy."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Oznaète správy, ktoré chcete prida»!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Nemo¾no pripoji»!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr ""
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr ""
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr ""
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Neplatné kódovanie."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Ulo¾i» kópiu tejto správy?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Premenova» na: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, fuzzy, c-format
+msgid "Can't stat %s: %s"
+msgstr "Nemo¾no zisti» stav: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Nový súbor: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Content-Type je formy základ/pod"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Neznáme Content-Type %s"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Nemo¾no vytvori» súbor %s"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "Nemo¾no vytvori» pripojené dáta"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Odlo¾i» túto správu?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Zapísa» správu do schránky"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Zapisujem správu do %s ..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "Správa bola zapísaná."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr ""
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr ""
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr ""
+
+#: crypt.c:71
+#, fuzzy, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- Nasleduje výstup PGP (aktuálny èas: "
+
+#: crypt.c:86
+#, fuzzy
+msgid "Passphrase(s) forgotten."
+msgstr "Fráza hesla PGP bola zabudnutá."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Zadajte frázu hesla PGP:"
+
+#: crypt.c:147
+#, fuzzy
+msgid "Enter SMIME passphrase:"
+msgstr "Zadajte frázu hesla PGP:"
+
+#: crypt.c:192
+#, fuzzy
+msgid "Create a traditional (inline) PGP message?"
+msgstr "vytvori» zástupcu z odosielateµa správy"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "Spú¹»am PGP..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr ""
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr ""
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr ""
+
+#: crypt.c:838
+#, fuzzy
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr "Chyba: multipart/signed nemá protokol."
+
+#: crypt.c:860
+#, fuzzy, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr "Chyba: multipart/signed nemá protokol."
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+
+#. Now display the signed body
+#: crypt.c:912
+#, fuzzy
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- Nasledujúce dáta sú podpísané s PGP/MIME --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+
+#: crypt.c:924
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Koniec dát s podpisom PGP/MIME --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "y-áno"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "nie"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Opusti» Mutt?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "neznáma chyba"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Stlaète kláves pre pokraèovanie..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " ('?' pre zoznam): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Nie je otvorená ¾iadna schránka."
+
+#: curs_main.c:48
+#, fuzzy
+msgid "There are no messages."
+msgstr "Vlákno obsahuje neèítané správy."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "Schránka je iba na èítanie."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+#, fuzzy
+msgid "Function not permitted in attach-message mode."
+msgstr "%c: nepodporovaný v tomto móde"
+
+#: curs_main.c:51
+#, fuzzy
+msgid "No visible messages."
+msgstr "®iadne nové správy"
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "Nemo¾no prepnú» zápis na schránke urèenej iba na èítanie!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "Zmeny v zlo¾ke budú zapísané, keï ho opustíte."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Zmeny v zlo¾ke nebudú zapísané."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Koniec"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Ulo¾i»"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Napí¹"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Odpovedz"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Skupina"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "Schránka bola zmenená zvonku. Príznaky mô¾u by» nesprávne."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "V tejto schránke je nová po¹ta."
+
+#: curs_main.c:499
+#, fuzzy
+msgid "Mailbox was externally modified."
+msgstr "Schránka bola zmenená zvonku. Príznaky mô¾u by» nesprávne."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "®iadne oznaèené správy."
+
+#: curs_main.c:653 menu.c:896
+#, fuzzy
+msgid "Nothing to do."
+msgstr "Spájam sa s %s..."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Skoèi» na správu: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "Parameter musí by» èíslo správy."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Táto správa nie je viditeµná."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Neplatné èíslo správy."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Zmaza» správy zodpovedajúce: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "®iadny limitovací vzor nie je aktívny."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Limit: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Limituj správy zodpovedajúce: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Ukonèi» Mutt?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Oznaè správy zodpovedajúce: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Odma¾ správy zodpovedajúce: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Odznaè správy zodpovedajúce: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Otvor schránku iba na èítanie"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Otvor schránku"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s nie je schránka"
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Ukonèi» Mutt bey ulo¾enia?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Ste na poslednej správe."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "®iadne odmazané správy."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Ste na prvej správe."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "Vyhµadávanie pokraèuje z vrchu."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "Vyhµadávanie pokraèuje zo spodu."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "®iadne nové správy"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "®iadne neèítané správy"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " v tomto obmedzenom zobrazení"
+
+#: curs_main.c:1405 pager.c:2337
+#, fuzzy
+msgid "Can't change 'important' flag on POP server."
+msgstr "Vymazávam správy zo serveru..."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "®iadne ïaµ¹ie vlákna."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Ste na prvom vlákne."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "Vláknenie nie je povolené."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "Vlákno obsahuje neèítané správy."
+
+#: curs_main.c:1802
+#, fuzzy
+msgid "Can't edit message on POP server."
+msgstr "Vymazávam správy zo serveru..."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tvlo¾ riadok zaèínajúci s jednoduchým znakom ~\n"
+"~b u¾ívatelia\tpridaj pou¾ívateµov do poµa Bcc:\n"
+"~c u¾ívatelia\tpridaj pou¾ívateµov do poµa Cc:\n"
+"~f správy\tpridaj správy\n"
+"~F správy\ttak isto ako ~f, ale pridá aj hlavièky\n"
+"~h\t\tuprav hlavièku správy\n"
+"~m správy\tvlo¾ a cituj správy\n"
+"~M správy\ttak isto ako ~m, ale vlo¾ aj hlavièky\n"
+"~p\t\tvytlaè správu\n"
+"~q\t\tzapí¹ správu a ukonèi editor\n"
+"~r súbor\t\tnaèítaj do editoru súbor\n"
+"~t u¾ívatelia\tpridaj pou¾ívateµov do poµa To:\n"
+"~u\t\tvyvolaj predchádzajúci riadok\n"
+"~v\t\tuprav správu s editorom $visual\n"
+"~w súbor\t\tzapí¹ správo do súboru súbor\n"
+"~x\t\tzru¹ zmeny a ukonèi editor\n"
+"~?\t\ttáto pomoc\n"
+".\t\tsamotná bodka na riadku ukonèí vstup\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: neplatné èíslo správy.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Ukonèite správu so samotnou bodkou na riadku)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "®iadna schránka.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Správa obsahuje:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(pokraèova»)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "chýbajúci názov súboru.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Správa neobsahuje ¾iadne riadky.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr ""
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: neznámy príkaz editoru (~? pre nápovedu)\n"
+
+#: editmsg.c:74
+#, fuzzy, c-format
+msgid "could not create temporary folder: %s"
+msgstr "Nemo¾no vytvori» doèasný súbor!"
+
+#: editmsg.c:84
+#, fuzzy, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "Nemo¾no vytvori» doèasný súbor!"
+
+#: editmsg.c:101
+#, fuzzy, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "Nemo¾no vytvori» doèasný súbor!"
+
+#: editmsg.c:116
+#, fuzzy
+msgid "Message file is empty!"
+msgstr "Schránka je prázdna."
+
+#: editmsg.c:123
+#, fuzzy
+msgid "Message not modified!"
+msgstr "Správa bola vytlaèené"
+
+#: editmsg.c:131
+#, fuzzy, c-format
+msgid "Can't open message file: %s"
+msgstr "Nemo¾no vytvori» súbor %s"
+
+#: editmsg.c:138 editmsg.c:165
+#, fuzzy, c-format
+msgid "Can't append to folder: %s"
+msgstr "Nemo¾no vytvori» súbor %s"
+
+#: editmsg.c:196
+#, fuzzy, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Nemo¾no vytvori» doèasný súbor"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Nastavi» príznak"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Vymaza» príznak"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr "[-- Chyba: Nemo¾no zobrazi» ¾iadnu èas» z Multipart/Alternative! --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Príloha #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Typ: %s/%s, Kódovanie: %s, Veµkos»: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Autoprezeranie pou¾itím %s --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Vyvolávam príkaz na automatické prezeranie: %s"
+
+#: handler.c:1560
+#, fuzzy, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- na %s --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Chyba pri automatickom prezeraní (stderr) %s --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- Chyba: message/external-body nemá vyplnený parameter access-type --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Príloha %s/%s "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(veµkos» %s bytov) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "bola zmazaná --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- na %s --]\n"
+
+#: handler.c:1674
+#, fuzzy, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- na %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, fuzzy, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Príloha %s/%s "
+
+#: handler.c:1689
+#, fuzzy
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+"[-- Príloha %s/%s nie je vlo¾ená v správe, --]\n"
+"[-- a oznaèenému externému zdroju --]\n"
+"[-- vypr¹ala platnos». --]\n"
+
+#: handler.c:1707
+#, fuzzy, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr ""
+"[-- Príloha %s/%s nie je vlo¾ená v správe, --]\n"
+"[-- a oznaèený typ prístupu %s nie je podporovaný --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Chyba: multipart/signed nemá protokol."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Chyba: multipart/encrypted nemá vyplnený parameter protokolu!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Nemo¾no otvori» doèasný súbor!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s nie je podporovaný "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(pou¾ite '%s' na prezeranie tejto èasti)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "(potrebujem 'view-attachments' priradené na klávesu!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: súbor nemo¾no pripoji»"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "CHYBA: prosím oznámte túto chybu"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<NEZNÁMY>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"V¹eobecné väzby:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Neviazané funkcie:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Pomoc pre %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr ""
+
+#: hook.c:254
+#, fuzzy, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "%s: neznáma hodnota"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr ""
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr ""
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr ""
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr ""
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr ""
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr ""
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr ""
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr ""
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr ""
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Prihlasujem sa..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "Prihlasovanie zlyhalo."
+
+#: imap/auth_sasl.c:112
+#, fuzzy, c-format
+msgid "Authenticating (%s)..."
+msgstr "Vyberám %s..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr ""
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr ""
+
+#: imap/browse.c:81
+#, fuzzy
+msgid "Getting namespaces..."
+msgstr "Vyvolávam správu..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr ""
+
+#: imap/browse.c:219
+#, fuzzy
+msgid "No such folder"
+msgstr "%s: nenájdená farba"
+
+#: imap/browse.c:277
+#, fuzzy
+msgid "Create mailbox: "
+msgstr "Otvor schránku"
+
+#: imap/browse.c:282
+#, fuzzy
+msgid "Mailbox must have a name."
+msgstr "Schránka nie je zmenená."
+
+#: imap/browse.c:290
+#, fuzzy
+msgid "Mailbox created."
+msgstr "Bola zistená sluèka v makre."
+
+#: imap/command.c:290
+#, fuzzy
+msgid "Mailbox closed"
+msgstr "Bola zistená sluèka v makre."
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Fatálna chyba. Poèet správ nie je zosynchronizovaný!"
+
+#: imap/imap.c:147
+#, fuzzy, c-format
+msgid "Closing connection to %s..."
+msgstr "Zatváram spojenie s IMAP serverom..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Tento IMAP server je starý. Mutt s ním nevie pracova»."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr ""
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr ""
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "Vyberám %s..."
+
+#: imap/imap.c:690
+#, fuzzy
+msgid "Error opening mailbox"
+msgstr "Chyba pri zapisovaní do schránky!"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Nemo¾no pridáva» k IMAP schránkam na tomto serveri"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "Vytvori» %s?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Zatváram spojenie s IMAP serverom..."
+
+#: imap/imap.c:952 pop.c:461
+#, fuzzy, c-format
+msgid "Marking %d messages deleted..."
+msgstr "Èítam %d nových správ (%d bytov)..."
+
+#: imap/imap.c:961
+#, fuzzy
+msgid "Expunge failed"
+msgstr "Prihlasovanie zlyhalo."
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Ukladám stavové príznaky správy... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Vymazávam správy zo serveru..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr ""
+
+#: imap/imap.c:1099
+#, fuzzy
+msgid "CLOSE failed"
+msgstr "Prihlasovanie zlyhalo."
+
+#: imap/imap.c:1342
+#, fuzzy
+msgid "Bad mailbox name"
+msgstr "Otvor schránku"
+
+#: imap/imap.c:1354
+#, fuzzy, c-format
+msgid "Subscribing to %s..."
+msgstr "Kopírujem do %s..."
+
+#: imap/imap.c:1356
+#, fuzzy, c-format
+msgid "Unsubscribing to %s..."
+msgstr "Spájam sa s %s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "Nemo¾no získa» hlavièky z tejto verzie IMAP serveru."
+
+#: imap/message.c:84
+#, fuzzy, c-format
+msgid "Could not create temporary file %s"
+msgstr "Nemo¾no vytvori» doèasný súbor!"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Vyvolávam hlavièky správ... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Vyvolávam správu..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr ""
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Odsúvam správu ..."
+
+#: imap/message.c:576
+#, fuzzy, c-format
+msgid "Copying %d messages to %s..."
+msgstr "Presúvam preèítané správy do %s..."
+
+#: imap/message.c:580
+#, fuzzy, c-format
+msgid "Copying message %d to %s..."
+msgstr "Zapisujem správu do %s ..."
+
+#: imap/util.c:239
+#, fuzzy
+msgid "Continue?"
+msgstr "(pokraèova»)\n"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "zástupca: ¾iadna adresa"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr ""
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "neplatná polo¾ka hlavièky"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: neznáma metóda triedenia"
+
+#: init.c:879
+#, fuzzy, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default: chyba v regvýr: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: neznáma premenná"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "prefix je neplatný s vynulovaním"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "hodnota je neplatná s vynulovaním"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s je nastavené"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s je nenastavené"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: neplatný typ schránky"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: neplatná hodnota"
+
+#: init.c:1312
+#, fuzzy, c-format
+msgid "%s: Unknown type."
+msgstr "%s: neznáma hodnota"
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: neznáma hodnota"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Nemo¾no zisti» stav: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s nie je schránka"
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Chyba v %s, riadok %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "zdroj: chyby v %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr ""
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "zdroj: chyba na %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "zdroj: príli¹ veµa argumentov"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: neznámy príkaz"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Chyba v príkazovom riadku: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "nemo¾no urèi» domáci adresár"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "nemo¾no urèi» meno pou¾ívateµa"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Bola zistená sluèka v makre."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Klávesa nie je viazaná."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Klávesa nie je viazaná. Stlaète '%s' pre nápovedu."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: príli¹ veµa parametrov"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: také menu neexistuje"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "prázdna postupnos» kláves"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: príli¹ veµa parametrov"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: v tabuµke neexistuje taká funkcia"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: prázdna postupnos» kláves"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "makro: príli¹ veµa parametrov"
+
+#: keymap.c:871
+#, fuzzy
+msgid "exec: no arguments"
+msgstr "exec: príli¹ málo parametrov"
+
+#: keymap.c:891
+#, fuzzy, c-format
+msgid "%s: no such function"
+msgstr "%s: v tabuµke neexistuje taká funkcia"
+
+#: keymap.c:912
+#, fuzzy
+msgid "Enter keys (^G to abort): "
+msgstr "Zadajte ID kµúèa pre %s: "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr ""
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "prázdna operácia"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "prinúti» zobrazovanie príloh pou¾íva» mailcap-u"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "prezri prílohu ako text"
+
+#: keymap_alldefs.h:9
+#, fuzzy
+msgid "Toggle display of subparts"
+msgstr "prepnú» zobrazovanie citovaného textu"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "presunú» na vrch stránky"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "znovu po¹li správu inému pou¾ívateµovi"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "oznaè nový súbor v tomto adresári"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "prezrie» súbor"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "zobraz meno aktuálne oznaèeného súboru"
+
+#: keymap_alldefs.h:15
+#, fuzzy
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "zmaza» "
+
+#: keymap_alldefs.h:16
+#, fuzzy
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "zmaza» "
+
+#: keymap_alldefs.h:17
+#, fuzzy
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "zmaza» "
+
+#: keymap_alldefs.h:18
+#, fuzzy
+msgid "list mailboxes with new mail"
+msgstr "®iadna schránka s novými správami."
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "zmeni» adresáre"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "skontroluj nové správy v schránkach"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "prilo¾i» súbor(y) k tejto správe"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "prilo¾i» správu/y k tejto správe"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "upravi» zoznam BCC"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "upravi» zoznam CC"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "upravi» popis prílohy"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "upravi» kódovanie dát prílohy"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "vlo¾te súbor na ulo¾enie kópie tejto správy"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "upravi» prikladaný súbor"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "upravi» pole 'from'"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "upravi» správu s hlavièkami"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "upravi» správu"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "upravi» prílohu s pou¾itím polo¾ky mailcap-u"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "upravi» pole Reply-To"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "upravi» predmet tejto správy"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "upravi» zoznam TO"
+
+#: keymap_alldefs.h:36
+#, fuzzy
+msgid "create a new mailbox (IMAP only)"
+msgstr "zmaza» "
+
+#: keymap_alldefs.h:37
+#, fuzzy
+msgid "edit attachment content type"
+msgstr "upravi» typ prílohy"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "získa» doèasnú kópiu prílohy"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "spusti na správu ispell"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "zostavi» novú prílohu pou¾ijúc polo¾ku mailcap-u"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr ""
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "ulo¾i» túto správu a posla» neskôr"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "premenova»/presunú» prilo¾ený súbor"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "posla» správu"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr ""
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "prepnú» príznak, èi zmaza» správu po odoslaní"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "obnovi» informáciu o zakódovaní prílohy"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "zapísa» správu do zlo¾ky"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "skopírova» správu do súboru/schránky"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "vytvori» zástupcu z odosielateµa správy"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "presunú» polo¾ku na spodok obrazovky"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "presunú» polo¾ku do stredu obrazovky"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "preunú» polo¾ku na vrch obrazovky"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "urobi» dekódovanú (text/plain) kópiu"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "urobi» dekódovanú (text/plain) kópiu a zmaza»"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "zmaza» "
+
+#: keymap_alldefs.h:57
+#, fuzzy
+msgid "delete the current mailbox (IMAP only)"
+msgstr "zmaza» "
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "zmaza» v¹etky polo¾ky v podvlákne"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "zmaza» v¹etky polo¾ky vo vlákne"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "zobrazi» plnú adresu odosielateµa"
+
+#: keymap_alldefs.h:61
+#, fuzzy
+msgid "display message and toggle header weeding"
+msgstr "zobrazi» správu so v¹etkými hlavièkami"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "zobrazi» správu"
+
+#: keymap_alldefs.h:63
+#, fuzzy
+msgid "edit the raw message"
+msgstr "upravi» správu"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "zmaza» znak pred kurzorom"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "zmaza» jeden znak vµavo od kurzoru"
+
+#: keymap_alldefs.h:66
+#, fuzzy
+msgid "move the cursor to the beginning of the word"
+msgstr "skoèi» na zaèiatok riadku"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "skoèi» na zaèiatok riadku"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "cykluj medzi schránkami s príchodzími správami"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "doplò názov súboru alebo zástupcu"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "doplò adresu s otázkou"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "zmaza» znak pod kurzorom"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "skoèi» na koniec riadku"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "presunú» kurzor o jeden znak vpravo"
+
+#: keymap_alldefs.h:74
+#, fuzzy
+msgid "move the cursor to the end of the word"
+msgstr "presunú» kurzor o jeden znak vpravo"
+
+#: keymap_alldefs.h:75
+#, fuzzy
+msgid "scroll down through the history list"
+msgstr "rolova» hore po zozname histórie"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "rolova» hore po zozname histórie"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "zmaza» znaky od kurzoru do konca riadku"
+
+#: keymap_alldefs.h:78
+#, fuzzy
+msgid "delete chars from the cursor to the end of the word"
+msgstr "zmaza» znaky od kurzoru do konca riadku"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "zmaza» v¹etky znaky v riadku"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "zmaza» slovo pred kurzorom"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "uvies» nasledujúcu stlaèenú klávesu"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr ""
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr ""
+
+#: keymap_alldefs.h:84
+#, fuzzy
+msgid "convert the word to lower case"
+msgstr "presunú» na vrch stránky"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr ""
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "vlo¾te príkaz muttrc"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "vlo¾te masku súborov"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "ukonèi» toto menu"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "filtrova» prílohy príkazom shell-u"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "presunú» sa na prvú polo¾ku"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "prepnú» príznak dôle¾itosti správy"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "posunú» správu inému pou¾ívateµovi s poznámkami"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "oznaèi» aktuálnu polo¾ku"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "odpoveda» v¹etkým príjemcom"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "rolova» dolu o 1/2 stránky"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "rolova» hore o 1/2 stránky"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "táto obrazovka"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "skoèi» na index èíslo"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "presunú» sa na poslednú polo¾ku"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "odpoveda» do ¹pecifikovaného po¹tového zoznamu"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "vykona» makro"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "zostavi» novú po¹tovú správu"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "otvori» odli¹nú zlo¾ku"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "otvori» odli¹nú zlo¾ku iba na èítanie"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "vymaza» stavový príznak zo správy"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "zmaza» správy zodpovedajúce vzorke"
+
+#: keymap_alldefs.h:107
+#, fuzzy
+msgid "force retrieval of mail from IMAP server"
+msgstr "vybra» po¹tu z POP serveru"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "vybra» po¹tu z POP serveru"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "presunú» sa na prvú správu"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "presunú» sa na poslednú správu"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "ukáza» iba správy zodpovedajúce vzorke"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "skoèi» na nasledovnú novú správu"
+
+#: keymap_alldefs.h:113
+#, fuzzy
+msgid "jump to the next new or unread message"
+msgstr "skoèi» na nasledujúcu neèítanú správu"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "skoèi» na ïaµ¹ie podvlákno"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "skoèi» na nasledujúce vlákno"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "presunú» sa na nasledujúcu odmazanú správu"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "skoèi» na nasledujúcu neèítanú správu"
+
+#: keymap_alldefs.h:118
+#, fuzzy
+msgid "jump to parent message in thread"
+msgstr "odmaza» v¹etky správy vo vlákne"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "skoèi» na predchádzajúce vlákno"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "skoèi» na predchádzajúce podvlákno"
+
+#: keymap_alldefs.h:121
+#, fuzzy
+msgid "move to the previous undeleted message"
+msgstr "presunú» sa na nasledujúcu odmazanú správu"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "skoèi» na predchádzajúcu novú správo"
+
+#: keymap_alldefs.h:123
+#, fuzzy
+msgid "jump to the previous new or unread message"
+msgstr "skoèi» na predchádzajúcu neèítanú správu"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "skoèi» na predchádzajúcu neèítanú správu"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "oznaèi» aktuálne vlákno ako èítané"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "oznaèi» aktuálne podvlákno ako èítané"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "nastavi» stavový príznak na správe"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "ulo¾i» zmeny do schránky"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "oznaèi» správy zodpovedajúce vzoru"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "odmaza» správy zodpovedajúce vzoru"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "odznaèi» správy zodpovedajúce vzoru"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "presunú» do stredu stránky"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "presunú» sa na ïaµ¹iu polo¾ku"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "rolova» o riadok dolu"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "presunú» sa na ïaµ¹iu stránku"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "skoèi» na koniec správy"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "prepnú» zobrazovanie citovaného textu"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "preskoèi» za citovaný text"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "skoèi» na zaèiatok správy"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "zre»azi» výstup do príkazu shell-u"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "presunú» sa na predchádzajúcu polo¾ku"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "rolova» o riadok hore"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "presunú» sa na predchádzajúcu stránku"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "tlaèi» aktuálnu polo¾ku"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "opýta» sa externého programu na adresy"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "prida» nové výsledky opýtania k teraj¹ím"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "ulo¾i» zmeny v schránke a ukonèi»"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "vyvola» odlo¾enú správu"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "vymaza» a prekresli» obrazovku"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{interné}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "odpoveda» na správu"
+
+#: keymap_alldefs.h:152
+#, fuzzy
+msgid "use the current message as a template for a new one"
+msgstr "upravi» správu na znovu-odoslanie"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "ulo¾i» správu/prílohu do súboru"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "hµada» podµa regulérneho výrazu"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "hµada» podµa regulérneho výrazu dozadu"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "hµada» ïaµ¹í výskyt"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "hµada» ïaµ¹í výskyt v opaènom smere"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "prepnú» farby hµadaného výrazu"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "vyvola» príkaz v podriadenom shell-e"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "triedi» správy"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "triedi» správy v opaènom poradí"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "oznaèi» aktuálnu polo¾ku"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "pou¾i» ïaµ¹iu funkciu na oznaèené správy"
+
+#: keymap_alldefs.h:164
+#, fuzzy
+msgid "apply next function ONLY to tagged messages"
+msgstr "pou¾i» ïaµ¹iu funkciu na oznaèené správy"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "oznaèi» aktuálne podvlákno"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "oznaèi» akuálne vlákno"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "prepnú» príznak 'nová' na správe"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "prepnú» príznak mo¾nosti prepísania schránky"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "prepnú», èi prezera» schránky alebo v¹etky súbory"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "presunú» sa na zaèiatok stránky"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "odmaza» aktuálnu polo¾ku"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "odmaza» v¹etky správy vo vlákne"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "odmaza» v¹etky správy v podvlákne"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "zobrazi» verziu a dátum vytvorenia Mutt"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "zobrazi» prílohu pou¾ijúc polo¾ku mailcap-u, ak je to nevyhnutné"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "zobrazi» prílohy MIME"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr ""
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "zobrazi» práve aktívny limitovací vzor"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "zabaµ/rozbaµ aktuálne vlákno"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "zabaµ/rozbaµ v¹etky vlákna"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "prida» verejný kµúè PGP"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "zobrazi» mo¾nosti PGP"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "posla» verejný kµúè PGP po¹tou"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "overi» verejný kµúè PGP"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "zobrazi» ID pou¾ívateµa tohoto kµúèu"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr ""
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr ""
+
+#: keymap_alldefs.h:188
+#, fuzzy
+msgid "Append a remailer to the chain"
+msgstr "zmaza» v¹etky znaky v riadku"
+
+#: keymap_alldefs.h:189
+#, fuzzy
+msgid "Insert a remailer into the chain"
+msgstr "zmaza» v¹etky znaky v riadku"
+
+#: keymap_alldefs.h:190
+#, fuzzy
+msgid "Delete a remailer from the chain"
+msgstr "zmaza» v¹etky znaky v riadku"
+
+#: keymap_alldefs.h:191
+#, fuzzy
+msgid "Select the previous element of the chain"
+msgstr "zmaza» v¹etky znaky v riadku"
+
+#: keymap_alldefs.h:192
+#, fuzzy
+msgid "Select the next element of the chain"
+msgstr "zmaza» v¹etky znaky v riadku"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr ""
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "urobi» de¹ifrovanú kópiu a vymaza»"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "urobi» de¹ifrovanú kópiu"
+
+#: keymap_alldefs.h:196
+#, fuzzy
+msgid "wipe passphrase(s) from memory"
+msgstr "vyma¾ frázu hesla PGP z pamäte"
+
+#: keymap_alldefs.h:197
+#, fuzzy
+msgid "extract supported public keys"
+msgstr "extrahuj verejné kµúèe PGP"
+
+#: keymap_alldefs.h:198
+#, fuzzy
+msgid "show S/MIME options"
+msgstr "zobrazi» mo¾nosti PGP"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Nedostatok pamäte!"
+
+#: main.c:46
+#, fuzzy
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr "Ak chcete kontaktova» vývojárov, napí¹te na <mutt-dev@mutt.org>.\n"
+
+#: main.c:50
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-8 Michael R. Elkins a ostatní.\n"
+"Mutt neprichádza so ®IADNOU ZÁRUKOU; pre detaily napí¹te `mutt -vv'.\n"
+"Mutt je voµný program, a ste vítaný ¹íri» ho\n"
+"za urèitých podmienok; napí¹te `mutt -vv' pre detaily.\n"
+
+#: main.c:56
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-8 Michael R. Elkins <me@cs.hmc.edu>\n"
+"Copyright (C) 1997-8 Thomas Roessler <roessler@guug.de>\n"
+"Copyright (C) 1998   Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1998   Ruslan Ermilov <ru@ucb.crimea.ua>\n"
+"\n"
+"Veµa ostatných tu nespomenutých prispelo mno¾stvom kódu,\n"
+"opráv, a nápadov.\n"
+"\n"
+"    Tento program je voµný, mô¾ete ho ¹íri» a/alebo upravova»\n"
+"    podµa podmienok licencie GNU General Public License, ako bola\n"
+"    publikovaná nadáciou Free Software Foundation; pod verziou 2,\n"
+"    alebo (podµa Vá¹ho výberu) pod akoukoµvek neskor¹ou verziou.\n"
+"\n"
+"    Tento program je ¹írený v nádeji, ¾e bude u¾itoèný,\n"
+"    ale BEZ AKEJKO¥VEK ZÁRUKY; dokonca bez implicitnej OBCHODNEJ\n"
+"    záruky alebo VHODNOSTI PRE URÈITÝ CIE¥. Viï GNU General Public\n"
+"    License pre viac podrobností.\n"
+"\n"
+"    Mali by ste obdr¾a» kópiu GNU General Public License spolu s týmto\n"
+"    programom; ak nie, napí¹te do Free Software Foundation, Inc.,\n"
+"    59 Temple Place - Suite 330, Boston, MA  02111, USA.\n"
+
+#: main.c:94
+#, fuzzy
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"pou¾itie: mutt [ -nRzZ ] [ -e <prík> ] [ -F <súb> ] [ -m <typ> ] [ -f "
+"<súb> ]\n"
+"       mutt [ -nx ] [ -e <prík> ] [ -a <súb> ] [ -F <súb> ] [ -H <súb> ] [ -"
+"i <súb> ] [ -s <predm> ] [ -b <adr> ] [ -c <adr> ] <adr> [ ... ]\n"
+"       mutt [ -n ] [ -e <prík> ] [ -F <súb> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"prepínaèe:\n"
+"  -a <súbor>\tpripoji» súbor do správy\n"
+"  -b <adresa>\tuvies» adresy pre slepé kópie (BCC)\n"
+"  -c <adresa>\tuvies» adresy pre kópie (CC)\n"
+"  -e <príkaz>\tuvies» príkaz, ktorý sa vykoná po inicializácii\n"
+"  -f <súbor>\tuvies», ktorá schránka sa bude èíta»\n"
+"  -F <súbor>\tuvies» alternatívny súbor muttrc\n"
+"  -H <súbor>\tuvies» súbor s návrhom, z ktorého sa preèíta hlavièka\n"
+"  -i <súbor>\tuvies» súbor, ktorý má Mutt vlo¾i» do odpovede\n"
+"  -m <typ>\tuvies» ¹tandardný typ schránky\n"
+"  -n\t\tspôsobuje, ¾e Mutt neèíta systémový súbor Muttrc\n"
+"  -p\t\tvyvola» a odlo¾enú správu\n"
+"  -R\t\totvori» schránku len na èítanie\n"
+"  -s <predm>\tuvies» predmet (musí by» v úvodzovkách, ak obsahuje medzery)\n"
+"  -v\t\tzobrazi» verziu a definície z èasu kompilácie\n"
+"  -x\t\tsimulova» mód posielania typický pre mailx\n"
+"  -y\t\tvybra» schránku uvedenú vo Va¹om zozname 'mailbox'\n"
+"  -z\t\tukonèi» okam¾ite, ak v schránke nie sú ¾iadne správy\n"
+"  -Z\t\totvori» prvú zlo¾ku s novými správami, okam¾ite skonèi», ak ¾iadne "
+"nie sú\n"
+"  -h\t\ttáto pomoc"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Nastavenia kompilácie:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Chyba pri inicializácii terminálu."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Ladenie na úrovni %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "DEBUG nebol definovaný pri kompilácii. Ignorované.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr ""
+
+#: main.c:710
+#, fuzzy, c-format
+msgid "Can't create %s: %s."
+msgstr "Nemo¾no vytvori» súbor %s"
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Neboli uvedení ¾iadni príjemcovia.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: neschopný pripoji» súbor.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "®iadna schránka s novými správami."
+
+#: main.c:870
+#, fuzzy
+msgid "No incoming mailboxes defined."
+msgstr "cykluj medzi schránkami s príchodzími správami"
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "Schránka je prázdna."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Èítam %s... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "Schránka je poru¹ená!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "Schránka bola poru¹ená!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Fatálna chyba! Nemo¾no znovu otvori» schránku!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Nemo¾no uzamknú» schránku!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+"sync: schránka zmenená, ale ¾iadne zmenené správy! (oznámte túto chybu)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Zapisujem správy... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+#, fuzzy
+msgid "Committing changes..."
+msgstr "Kompilujem vyhµadávací vzor..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Zápis zlyhal! Schránka bola èiastoène ulo¾ená do %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "Nemo¾no znovu otvori» schránku!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Znovuotváram schránku..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Skoè do: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Neplatné èíslo indexu."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "®iadne polo¾ky."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Nemô¾te rolova» ïalej dolu."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Nemô¾te rolova» ïalej hore."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Ste na poslednej stránke."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Ste na prvej stránke."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "Je zobrazená prvá polo¾ka."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "Je zobrazená posledná polo¾ka."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Ste na poslednej polo¾ke."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Ste na prvej polo¾ke."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Hµada»: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Hµada» spätne: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "®iadny vzor pre hµadanie."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Nenájdené."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "®iadne oznaèené polo¾ky."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "Hµadanie nie je implementované pre toto menu."
+
+#: menu.c:995
+#, fuzzy
+msgid "Jumping is not implemented for dialogs."
+msgstr "Hµadanie nie je implementované pre toto menu."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Oznaèovanie nie je podporované."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "Èítam %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr ""
+
+#: muttlib.c:835
+#, fuzzy
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "Súbor je adresár, ulo¾i» v òom?"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "Súbor je adresár, ulo¾i» v òom?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Súbor v adresári: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "Súbor existuje, (o)-prepísa», prid(a)» alebo (c)-zru¹i»?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "oac"
+
+#: muttlib.c:1171
+#, fuzzy
+msgid "Can't save message to POP mailbox."
+msgstr "Zapísa» správu do schránky"
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s nie je schránka!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Prida» správy do %s?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, fuzzy, c-format
+msgid "Connection to %s closed"
+msgstr "Spájam sa s %s..."
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr ""
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr ""
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, fuzzy, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Pripájam sa na %s"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr ""
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, fuzzy, c-format
+msgid "Looking up %s..."
+msgstr "Kopírujem do %s..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, fuzzy, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Nemo¾no nájs» adresu pre hostiteµa %s."
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Spájam sa s %s..."
+
+#: mutt_socket.c:519
+#, fuzzy, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "Nemo¾no otvori» %s"
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr ""
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr ""
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr ""
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr ""
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr ""
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr ""
+
+#: mutt_ssl.c:324
+#, fuzzy, c-format
+msgid "SSL failed: %s"
+msgstr "Prihlasovanie zlyhalo."
+
+#: mutt_ssl.c:333
+#, fuzzy
+msgid "Unable to get certificate from peer"
+msgstr "nemo¾no urèi» domáci adresár"
+
+#: mutt_ssl.c:341
+#, fuzzy, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "Pripájam sa na %s"
+
+#: mutt_ssl.c:381
+#, fuzzy
+msgid "Unknown"
+msgstr "neznáma chyba"
+
+#: mutt_ssl.c:406
+#, fuzzy
+msgid "[unable to calculate]"
+msgstr "%s: súbor nemo¾no pripoji»"
+
+#: mutt_ssl.c:424
+#, fuzzy
+msgid "[invalid date]"
+msgstr "%s: neplatná hodnota"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr ""
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr ""
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr ""
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr ""
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr ""
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr ""
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr ""
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr ""
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr ""
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr ""
+
+#: mutt_ssl.c:616
+#, fuzzy
+msgid "roa"
+msgstr "oac"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr ""
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr ""
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Koniec  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr ""
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr ""
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Poèet zámkov prekroèený, vymaza» zámok pre %s?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "Nemo¾no zisti» stav: %s.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "Vypr¹al èas na uzamknutie pomocou fcntl!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Èakám na zámok od fcntl... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "Vypr¹al èas na uzamknutie celého súboru!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Èakám na uzamknutie súboru... %d"
+
+#: mx.c:591
+#, fuzzy, c-format
+msgid "Couldn't lock %s\n"
+msgstr "Nemo¾no zisti» stav: %s.\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "Èítam %s..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "Zapisujem %s..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "Nemo¾no zosynchronizova» schránku %s!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Presunú» preèítané správy do %s?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Odstráni» %d zmazané správy?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Odstráni» %d zmazaných správ?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Presúvam preèítané správy do %s..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "Schránka nie je zmenená."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d ostalo, %d presunutých, %d vymazaných."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d ostalo, %d vymazaných."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr " Stlaète '%s' na prepnutie zápisu"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "Pou¾ite 'prepnú»-zápis' na povolenie zápisu!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "Schránka je oznaèená len na èítanie. %s"
+
+#: mx.c:1181
+#, fuzzy
+msgid "Mailbox checkpointed."
+msgstr "Bola zistená sluèka v makre."
+
+#: mx.c:1490
+#, fuzzy
+msgid "Can't write message"
+msgstr "upravi» správu"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#: pager.c:53
+#, fuzzy
+msgid "Not available in this menu."
+msgstr "V tejto schránke je nová po¹ta."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "PredSt"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "Ïaµ¹St"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Pozri prílohu"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Ïaµ¹í"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "Spodok správy je zobrazený."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "Vrch správy je zobrazený."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Spätné hµadanie: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Hµada»: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "Pomoc sa akurát zobrazuje."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "Nie je ïaµ¹í citovaný text."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "®iadny ïaµ¹í necitovaný text za citátom."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "viaczlo¾ková správa nemá parameter ohranièenia (boundary)!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Chyba vo výraze: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Neplatný deò v mesiaci: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Neplatný mesiac: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, fuzzy, c-format
+msgid "Invalid relative date: %s"
+msgstr "Neplatný mesiac: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "chyba vo výraze"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "chyba vo vzore na: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: neplatný príkaz"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: nepodporovaný v tomto móde"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "chýbajúci parameter"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "nespárované zátvorky: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "prázdny vzor"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "chyba: neznámy operand %d (oznámte túto chybu)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Kompilujem vyhµadávací vzor..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Vykonávam príkaz na nájdených správach..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "®iadne správy nesplnili kritérium."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "Hµadanie narazilo na spodok bez nájdenia zhody"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "Hµadanie narazilo na vrchol bez nájdenia zhody"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Hµadanie bolo preru¹ené."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "Fráza hesla PGP bola zabudnutá."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Chyba: nemo¾no vytvori» podproces PGP! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- Koniec výstupu PGP --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- ZAÈIATOK SPRÁVY PGP --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- ZAÈIATOK BLOKU VEREJNÉHO K¥ÚÈA PGP --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- ZAÈIATOK SPRÁVY PODPÍSANEJ S PGP --]\n"
+"\n"
+
+#: pgp.c:381
+#, fuzzy
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr ""
+"\n"
+"[-- KONIEC SPRÁVY PGP --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- KONIEC BLOKU VEREJNÉHO K¥ÚÈA PGP --]\n"
+
+#: pgp.c:385
+#, fuzzy
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr ""
+"\n"
+"[-- KONIEC SPRÁVY PODPÍSANEJ S PGP --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Chyba: nemo¾no nájs» zaèiatok správy PGP! --]\n"
+"\n"
+
+#: pgp.c:662
+#, fuzzy
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Interná chyba. Informujte <roessler@guug.de>"
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Chyba: nemo¾no vytvori» podproces PGP! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Chyba: poru¹ení správa PGP/MIME! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Chyba: nemo¾no vytvori» doèasný súbor! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- Nasledujúce dáta sú ¹ifrované pomocou PGP/MIME --]\n"
+"\n"
+
+#: pgp.c:863
+#, fuzzy
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr ""
+"\n"
+"[-- Koniec dát ¹ifrovaných pomocou PGP/MIME --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "Nemo¾no otvori» podproces PGP!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "Pou¾i» ID kµúèa = \"%s\" pre %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "Zadajte ID kµúèa pre %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr ""
+
+#: pgpinvoke.c:303
+#, fuzzy
+msgid "Fetching PGP key..."
+msgstr "Vyvolávam správu..."
+
+#: pgpkey.c:486
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr ""
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Oznaèi»  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Skontrolova» kµúè  "
+
+#: pgpkey.c:528
+#, fuzzy, c-format
+msgid "PGP keys matching <%s>."
+msgstr "Kµúèe PGP zhodujúce sa "
+
+#: pgpkey.c:530
+#, fuzzy, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "Kµúèe PGP zhodujúce sa "
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "Nemo¾no otvori» /dev/null"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Nemo¾no vytvori» doèasný súbor"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "ID kµúèa: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr ""
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr ""
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr ""
+
+#: pgpkey.c:615
+#, fuzzy
+msgid "ID is not valid."
+msgstr "Toto ID nie je dôveryhodné."
+
+#: pgpkey.c:618
+#, fuzzy
+msgid "ID is only marginally valid."
+msgstr "Toto ID je dôveryhodné iba nepatrne."
+
+#: pgpkey.c:622
+#, fuzzy, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s Chcete to naozaj pou¾i»?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Prosím zadajte ID kµúèa: "
+
+#: pgpkey.c:748
+#, fuzzy
+msgid "Invoking pgp..."
+msgstr "Spú¹»am PGP..."
+
+#: pgpkey.c:773
+#, fuzzy, c-format
+msgid "PGP Key %s."
+msgstr "PGP kµúè 0x%s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr ""
+
+#: pop.c:86 pop_lib.c:197
+#, fuzzy
+msgid "Command TOP is not supported by server."
+msgstr "Oznaèovanie nie je podporované."
+
+#: pop.c:113
+#, fuzzy
+msgid "Can't write header to temporary file!"
+msgstr "Nemo¾no vytvori» doèasný súbor"
+
+#: pop.c:194 pop_lib.c:199
+#, fuzzy
+msgid "Command UIDL is not supported by server."
+msgstr "Oznaèovanie nie je podporované."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr ""
+
+#: pop.c:274
+#, fuzzy
+msgid "Fetching list of messages..."
+msgstr "Vyvolávam správu..."
+
+#: pop.c:411
+#, fuzzy
+msgid "Can't write message to temporary file!"
+msgstr "Nemo¾no vytvori» doèasný súbor"
+
+#: pop.c:513 pop.c:578
+#, fuzzy
+msgid "Checking for new messages..."
+msgstr "Odsúvam správu ..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "Hostiteµ POP nie je definovaný."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "®iadna nová po¹ta v schránke POP."
+
+#: pop.c:613
+#, fuzzy
+msgid "Delete messages from server?"
+msgstr "Vymazávam správy zo serveru..."
+
+#: pop.c:615
+#, fuzzy, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Èítam %d nových správ (%d bytov)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "Chyba pri zapisovaní do schránky!"
+
+#: pop.c:661
+#, fuzzy, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [preèítaných správ: %d]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "Server uzavrel spojenie!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr ""
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr ""
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr ""
+
+#: pop_auth.c:264
+#, fuzzy
+msgid "Command USER is not supported by server."
+msgstr "Oznaèovanie nie je podporované."
+
+#: pop_lib.c:195
+#, fuzzy
+msgid "Unable to leave messages on server."
+msgstr "Vymazávam správy zo serveru..."
+
+#: pop_lib.c:225
+#, fuzzy, c-format
+msgid "Error connecting to server: %s"
+msgstr "Pripájam sa na %s"
+
+#: pop_lib.c:370
+#, fuzzy
+msgid "Closing connection to POP server..."
+msgstr "Zatváram spojenie s IMAP serverom..."
+
+#: pop_lib.c:536
+#, fuzzy
+msgid "Verifying message indexes..."
+msgstr "Zapisujem správu do %s ..."
+
+#: pop_lib.c:560
+#, fuzzy
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Zatváram spojenie s IMAP serverom..."
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Odlo¾ené správy"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "®iadne odlo¾ené správy."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "Neplatná hlavièka PGP"
+
+#: postpone.c:479
+#, fuzzy
+msgid "Illegal S/MIME header"
+msgstr "Neplatná hlavièka PGP"
+
+#: postpone.c:554
+#, fuzzy
+msgid "Decryption failed."
+msgstr "Prihlasovanie zlyhalo."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Nová otázka"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Urobi» alias"
+
+#: query.c:48
+msgid "Search"
+msgstr "Hµada»"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Èakám na odpoveï..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Príkaz otázky nie je definovaný."
+
+#: query.c:286
+msgid "Query"
+msgstr "Otázka"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Otázka: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Otázka '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Presmerova»"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Tlaèi»"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Ukladám..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Pripojené dáta boli ulo¾ené."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "VAROVANIE! Mô¾ete prepísa» %s, pokraèova»?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Príloha bola prefiltrovaná."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Filtrova» cez: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Presmerova» do: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "Neviem ako tlaèi» prílohy %s!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Vytlaèi» oznaèené prílohy?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Vytlaèi» prílohu?"
+
+#: recvattach.c:938
+#, fuzzy
+msgid "Can't decrypt encrypted message!"
+msgstr "pou¾i» ïaµ¹iu funkciu na oznaèené správy"
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Prílohy"
+
+#: recvattach.c:987
+#, fuzzy
+msgid "There are no subparts to show!"
+msgstr "Vlákno obsahuje neèítané správy."
+
+#: recvattach.c:1048
+#, fuzzy
+msgid "Can't delete attachment from POP server."
+msgstr "vybra» po¹tu z POP serveru"
+
+#: recvattach.c:1056
+#, fuzzy
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "Mazanie príloh z PGP správ nie je podporované."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "je podporované iba mazanie viaczlo¾kových príloh."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Presmerova» mô¾ete iba èasti message/rfc822."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing message!"
+msgstr "Chyba pri posielaní správy."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing messages!"
+msgstr "Chyba pri posielaní správy."
+
+#: recvcmd.c:413
+#, fuzzy, c-format
+msgid "Can't open temporary file %s."
+msgstr "Nemo¾no vytvori» doèasný súbor"
+
+#: recvcmd.c:444
+#, fuzzy
+msgid "Forward as attachments?"
+msgstr "zobrazi» prílohy MIME"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Posunú» vo formáte MIME encapsulated?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, fuzzy, c-format
+msgid "Can't create %s."
+msgstr "Nemo¾no vytvori» súbor %s"
+
+#: recvcmd.c:724
+#, fuzzy
+msgid "Can't find any tagged messages."
+msgstr "pou¾i» ïaµ¹iu funkciu na oznaèené správy"
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "Nenájdené ¾iadne po¹tové zoznamy!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+
+#: remailer.c:480
+#, fuzzy
+msgid "Append"
+msgstr "Posla»"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr ""
+
+#: remailer.c:482
+#, fuzzy
+msgid "Delete"
+msgstr "Oznaèi»"
+
+#: remailer.c:484
+msgid "OK"
+msgstr ""
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr ""
+
+#: remailer.c:538
+#, fuzzy
+msgid "Select a remailer chain."
+msgstr "zmaza» v¹etky znaky v riadku"
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr ""
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr ""
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr ""
+
+#: remailer.c:661
+#, fuzzy
+msgid "You already have the first chain element selected."
+msgstr "Ste na prvej správe."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr ""
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr ""
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr ""
+
+#: remailer.c:768
+#, fuzzy, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Chyba pri posielaní správy, dcérsky proces vrátil %d (%s).\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Chyba pri posielaní správy."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "Nesprávne formátovaná polo¾ka pre typ %s v \"%s\", riadok %d"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Ne¹pecifikovaná cesta k mailcap"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "polo¾ka mailcap-u pre typ %s nenájdená"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: príli¹ málo parametrov"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: príli¹ veµa parametrov"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "®iadny predmet, ukonèi»?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "®iadny predmet, ukonèujem."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Odpoveda» na adresu %s%s?"
+
+#: send.c:517
+#, fuzzy, c-format
+msgid "Follow-up to %s%s?"
+msgstr "Odpoveda» na adresu %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "®iadna z oznaèených správ nie je viditeµná!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Prilo¾i» správu do odpovede?"
+
+#: send.c:738
+#, fuzzy
+msgid "Including quoted message..."
+msgstr "Posielam správu..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "Nemo¾no pripoji» v¹etky po¾adované správy!"
+
+#: send.c:762
+#, fuzzy
+msgid "Forward as attachment?"
+msgstr "Vytlaèi» prílohu?"
+
+#: send.c:766
+#, fuzzy
+msgid "Preparing forwarded message..."
+msgstr "Odsúvam správu ..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Vyvola» odlo¾enú správu?"
+
+#: send.c:1336
+#, fuzzy
+msgid "Edit forwarded message?"
+msgstr "Odsúvam správu ..."
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Zru¹i» nezmenenú správu?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Nezmenená správa bola zru¹ená."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "Po¹ta nebola odoslaná."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Správa bola odlo¾ená."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Nie sú uvedení ¾iadni príjemcovia!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Neboli uvedení ¾iadni príjemcovia!"
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "®iadny predmet, zru¹i» posielanie?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Nebol uvedený predmet."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Posielam správu..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Nemo¾no posla» správu."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Správa bola odoslaná."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr ""
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "Nenájdený parameter ohranièenia (boundary)! [ohláste túto chybu]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s u¾ viac neexistuje!"
+
+#: sendlib.c:916
+#, fuzzy, c-format
+msgid "%s isn't a regular file."
+msgstr "%s nie je schránka"
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "Nemo¾no otvori» %s"
+
+#: sendlib.c:2053
+#, fuzzy, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Chyba pri posielaní správy, dcérsky proces vrátil %d (%s).\n"
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr ""
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr ""
+
+#: signal.c:39
+#, fuzzy, c-format
+msgid "%s...  Exiting.\n"
+msgstr "Zachytené %s... Konèím.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "Zachytené %s... Konèím.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Zachytený signál %d... Konèím.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr ""
+
+#: smime.c:303
+msgid "Verified  "
+msgstr ""
+
+#: smime.c:306
+msgid "Unverified"
+msgstr ""
+
+#: smime.c:309
+#, fuzzy
+msgid "Expired   "
+msgstr "Koniec  "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr ""
+
+#: smime.c:315
+#, fuzzy
+msgid "Invalid   "
+msgstr "Neplatný mesiac: %s"
+
+#: smime.c:318
+#, fuzzy
+msgid "Unknown   "
+msgstr "neznáma chyba"
+
+#: smime.c:347
+#, fuzzy
+msgid "Enter keyID: "
+msgstr "Zadajte ID kµúèa pre %s: "
+
+#: smime.c:370
+#, fuzzy, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "Kµúèe PGP zhodujúce sa "
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr ""
+
+#: smime.c:523 smime.c:592
+#, fuzzy, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "Pou¾i» ID kµúèa = \"%s\" pre %s?"
+
+#: smime.c:526 smime.c:595
+#, fuzzy, c-format
+msgid "Use ID %s for %s ?"
+msgstr "Pou¾i» ID kµúèa = \"%s\" pre %s?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr ""
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+#, fuzzy
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "[-- Chyba: nemo¾no vytvori» podproces PGP! --]\n"
+
+#: smime.c:1197
+#, fuzzy
+msgid "no certfile"
+msgstr "Nemo¾no vytvori» filter."
+
+#: smime.c:1200
+#, fuzzy
+msgid "no mbox"
+msgstr "(¾iadna schránka)"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr ""
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr ""
+
+#: smime.c:1426
+#, fuzzy
+msgid "Can't open OpenSSL subprocess!"
+msgstr "Nemo¾no otvori» podproces PGP!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr ""
+
+#: smime.c:1629 smime.c:1751
+#, fuzzy
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- Koniec výstupu PGP --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+#, fuzzy
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Chyba: nemo¾no vytvori» podproces PGP! --]\n"
+
+#: smime.c:1755
+#, fuzzy
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr ""
+"[-- Nasledujúce dáta sú ¹ifrované pomocou PGP/MIME --]\n"
+"\n"
+
+#: smime.c:1758
+#, fuzzy
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr ""
+"[-- Nasledujúce dáta sú podpísané s PGP/MIME --]\n"
+"\n"
+
+#: smime.c:1822
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- Koniec dát ¹ifrovaných pomocou PGP/MIME --]\n"
+
+#: smime.c:1824
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- Koniec dát s podpisom PGP/MIME --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Triedim schránku..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "Nemo¾no nájs» triediacu funkciu! [oznámte túto chybu]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(¾iadna schránka)"
+
+#: thread.c:1081
+#, fuzzy
+msgid "Parent message is not visible in this limited view."
+msgstr "Táto správa nie je viditeµná."
+
+#: thread.c:1087
+#, fuzzy
+msgid "Parent message is not available."
+msgstr "Táto správa nie je viditeµná."
+
+#, fuzzy
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "Spú¹»am PGP..."
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "Presmerova» správu do %s...?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "Presmerova» správy do %s...?"
+
+#, fuzzy
+#~ msgid "ewsabf"
+#~ msgstr "esabmf"
+
+#, fuzzy
+#~ msgid "This ID's validity level is undefined."
+#~ msgstr "Táto úroveò dôvery identifikaèného kµúèa je nedefinovaná."
+
+#~ msgid "Decode-save"
+#~ msgstr "Dekóduj-ulo¾"
+
+#~ msgid "Decode-copy"
+#~ msgstr "Dekóduj-kopíruj"
+
+#~ msgid "Decrypt-save"
+#~ msgstr "De¹ifr-ulo¾"
+
+#~ msgid "Decrypt-copy"
+#~ msgstr "De¹ifr-kopíruj"
+
+#~ msgid "Copy"
+#~ msgstr "Kopírova»"
+
+#~ msgid ""
+#~ "\n"
+#~ "[-- End of PGP output --]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "[-- Koniec výstupu PGP --]\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "Can't stat %s."
+#~ msgstr "Nemo¾no zisti» stav: %s"
+
+#~ msgid "%s: no such command"
+#~ msgstr "%s: príkaz nenájdený"
+
+#~ msgid "MIC algorithm: "
+#~ msgstr "Algoritmus MIC: "
+
+#~ msgid "This doesn't make sense if you don't want to sign the message."
+#~ msgstr "Toto nemá zmysel ak nechcete podpísa» správu."
+
+#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160"
+#~ msgstr "Neznámy algoritmus MIC, platné sú: pgp-md5, pgp-sha1, pgp-rmd160"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "SHA1 implementation Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft."
+#~ "com>\n"
+#~ "\n"
+#~ "    Redistribution and use in source and binary forms, with or without\n"
+#~ "    modification, are permitted under certain conditions.\n"
+#~ "\n"
+#~ "    The SHA1 implementation comes AS IS, and ANY EXPRESS OR IMPLIED\n"
+#~ "    WARRANTIES, including, but not limited to, the implied warranties of\n"
+#~ "    merchantability and fitness for a particular purpose ARE DISCLAIMED.\n"
+#~ "\n"
+#~ "    You should have received a copy of the full distribution terms\n"
+#~ "    along with this program; if not, write to the program's developers.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "SHA1 implementácia Copyright (C) 1995-7 Eric A. Young <eay@cryptsoft."
+#~ "com>\n"
+#~ "\n"
+#~ "    Redistribúcia a pou¾itie v zdrojovej a binárnej forme, s alebo bez\n"
+#~ "    modifikácie, sú umo¾nené pod urèenými podmienkami.\n"
+#~ "\n"
+#~ "    Implementácia SHA1 prichádza AKO JE, a HOCIAKÉ VYJADRENÉ ALEBO "
+#~ "IMPLICITNÉ\n"
+#~ "    ZÁRUKY, vrátane, ale nie limitované na, implicitnú obchodnú záruku\n"
+#~ "    a vhodnos» pre urèitý cieµ SÚ ODMIETNUTÉ.\n"
+#~ "\n"
+#~ "    Mali by ste obdr¾a» kópiu plných distribuèných podmienok\n"
+#~ "    spolu s týmto programom; ak nie, napí¹te vývojárom programu.\n"
+
+#, fuzzy
+#~ msgid "POP Username: "
+#~ msgstr "Meno pou¾ívateµa IMAPu:"
+
+#, fuzzy
+#~ msgid "Reading new message (%d bytes)..."
+#~ msgstr "Èítam %d nové správy (%d bytov)..."
+
+#~ msgid "Error reading message!"
+#~ msgstr "Chyba pri èítaní správy!"
+
+#, fuzzy
+#~ msgid "%s [%d message read]"
+#~ msgstr "%s [preèítaných správ: %d]"
+
+#, fuzzy
+#~ msgid "Creating mailboxes is not yet supported."
+#~ msgstr "Oznaèovanie nie je podporované."
+
+#~ msgid "Reopening mailbox... %s"
+#~ msgstr "Znovuotváram schránku... %s"
+
+#~ msgid "Closing mailbox..."
+#~ msgstr "Zatváram schránku..."
+
+#~ msgid "IMAP Username: "
+#~ msgstr "Meno pou¾ívateµa IMAPu:"
+
+#, fuzzy
+#~ msgid "CRAM key for %s@%s: "
+#~ msgstr "Zadajte ID kµúèa pre %s: "
+
+#~ msgid "[-- Error: unexpected end of file! --]\n"
+#~ msgstr "[-- Chyba: neoèakávaný koniec súboru! --]\n"
+
+#~ msgid "Sending APPEND command ..."
+#~ msgstr "Posielam príkaz APPEND..."
+
+#~ msgid "POP Password: "
+#~ msgstr "Heslo POP: "
+
+#~ msgid "No POP username is defined."
+#~ msgstr "Meno pou¾ívateµa POP nie je definované."
+
+#~ msgid "Could not find address for host %s."
+#~ msgstr "Nemo¾no nájs» adresu pre hostiteµa %s."
+
+#~ msgid "Attachment saved"
+#~ msgstr "Príloha bola ulo¾ená"
+
+#, fuzzy
+#~ msgid "Can't open %s: %s."
+#~ msgstr "Nemo¾no zisti» stav: %s"
+
+#~ msgid "Compose"
+#~ msgstr "Zlo¾i»"
+
+#~ msgid "move to the last undelete message"
+#~ msgstr "presunú» sa na poslednú odmazanú správu"
+
+#~ msgid "return to the main-menu"
+#~ msgstr "vráti» sa do hlavného menu"
+
+#~ msgid "ignoring empty header field: %s"
+#~ msgstr "ignorujem prázdnu polo¾ku hlavièky: %s"
+
+#~ msgid "imap_error(): unexpected response in %s: %s\n"
+#~ msgstr "Imap_error(): neoèakávaná odpoveï v %s: %s\n"
+
+#~ msgid "An unkown PGP version was defined for signing."
+#~ msgstr "Pre podpis bol definovaný podpis PGP neznámej verzie."
+
+#~ msgid "Message edited. Really send?"
+#~ msgstr "Správa bola upravená. Naozaj posla»?"
+
+#~ msgid "Can't open your secret key ring!"
+#~ msgstr "Nemo¾no otvori» Vá¹ kruh tajného kµúèa!"
+
+#~ msgid "===== Attachments ====="
+#~ msgstr "===== Prídavné dáta ====="
+
+#~ msgid "Unknown PGP version \"%s\"."
+#~ msgstr "Neznáma verzia PGP\"%s\"."
+
+#~ msgid ""
+#~ "[-- Error: this message does not comply with the PGP/MIME specification! "
+#~ "--]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "[-- Chyba: táto správa nespåòa ¹pecifikáciu PGP/MIME! --]\n"
+#~ "\n"
+
+#~ msgid "reserved"
+#~ msgstr "rezervované"
+
+#~ msgid "Encrypted Session Key"
+#~ msgstr "Zakódovaný kµúè sedenia"
+
+#~ msgid "Signature Packet"
+#~ msgstr "Blok podpisu"
+
+#~ msgid "Conventionally Encrypted Session Key Packet"
+#~ msgstr "Blok konvenène zakódovaného kµúèa sedenia"
+
+#~ msgid "One-Pass Signature Packet"
+#~ msgstr "Jednoprechodový blok podpisu"
+
+#~ msgid "Secret Key Packet"
+#~ msgstr "Blok tajného kµúèa"
+
+#~ msgid "Public Key Packet"
+#~ msgstr "Blok verejného kµúèa"
+
+#~ msgid "Secret Subkey Packet"
+#~ msgstr "Blok tajného podkµúèa"
+
+#~ msgid "Compressed Data Packet"
+#~ msgstr "Blok komprimovaných dát"
+
+#~ msgid "Symmetrically Encrypted Data Packet"
+#~ msgstr "Blok symetricky ¹ifrovaných dát"
+
+#~ msgid "Marker Packet"
+#~ msgstr "Znaèkovací blok"
+
+#~ msgid "Literal Data Packet"
+#~ msgstr "Blok literálnych dát"
+
+#~ msgid "Trust Packet"
+#~ msgstr "Blok dôveryhodnosti"
+
+#~ msgid "Name Packet"
+#~ msgstr "Blok mena"
+
+#~ msgid "Subkey Packet"
+#~ msgstr "Blok podkµúèa"
+
+#~ msgid "Reserved"
+#~ msgstr "Rezervované"
+
+#~ msgid "Comment Packet"
+#~ msgstr "Blok komentára"
+
+#~ msgid "Saved output of child process to %s.\n"
+#~ msgstr "Výstup dcérskeho procesu bol ulo¾ený do %s.\n"
+
+#~ msgid "Display message using mailcap?"
+#~ msgstr "Zobrazi» správu pou¾itím mailcap-u?"
+
+#~ msgid "Please report this program error in the function mutt_mktime."
+#~ msgstr "Prosím, oznámte túto chybu vo funkcii mutt_mktime."
+
+#~ msgid "%s is a boolean var!"
+#~ msgstr "%s je logická premenná!"
diff --git a/po/sv.gmo b/po/sv.gmo
new file mode 100644 (file)
index 0000000..119d0d0
Binary files /dev/null and b/po/sv.gmo differ
diff --git a/po/sv.po b/po/sv.po
new file mode 100644 (file)
index 0000000..8189c3b
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,4311 @@
+# $Id: sv.po,v 3.11 2003/11/05 20:09:36 roessler Exp $
+msgid ""
+msgstr ""
+"Project-Id-Version: Mutt 1.5.1\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2002-05-02 21:18+02:00\n"
+"Last-Translator: Jörgen Tegnér <jorgen.tegner@telia.se>\n"
+"Language-Team: Swedish <mutt-po@mutt.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "Användarnamn på %s: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "Lösenord för %s@%s: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Avsluta"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Ta bort"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Återställ"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Välj"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Hjälp"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "Du saknar alias!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Alias"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Alias: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "Du har redan definierat ett alias med det namnet!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr ""
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Adress: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr ""
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Namn: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] Godkänn?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Spara i fil: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Lade till alias."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "Kan inte para ihop namnmall, fortsätt?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "'compose' i 'mailcap' kräver %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "Ett fel uppstod när \"%s\" kördes!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Kunde inte öppna fil för att tolka brevhuvuden."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Kunde inte öppna fil för att ta bort brevhuvuden."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "Saknar 'compose' i mailcap för %s, skapar en tom fil."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "'edit' i 'mailcap' kräver %%s"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "'mailcap' saknar 'edit' för %s"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "Hittade ingen passande beskrivning i 'mailcap'. Visar som text."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "MIME-typ är inte definierad. Kan inte visa bilaga."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Kan inte skapa filter"
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Kan inte skapa filter"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "Ett fel uppstod vid skrivning!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Jag vet inte hur det här ska skrivas ut!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Ändra katalog"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Mask"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s är inte en katalog."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "Brevlådor [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Prenumererar på [%s], filmask: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Katalog [%s], filmask: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Kan inte bifoga en katalog!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Ingen fil passar med filmasken"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Endast brevlådor av IMAP-typ kan skapas"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Endast brevlådor av IMAP-typ kan tas bort"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Ta bort brevlådan '%s'?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "Brevlådan har tagits bort."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "Brevlådan togs inte bort."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Ändra katalog till: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Ett fel uppstod när katalogen skulle läsas."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Filmask: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Sortera omvänt efter (d)atum, (a)lpha, (s)torlek eller i(n)te alls? "
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "Sortera efter (d)atum, (a)lpha, (s)torlek eller i(n)te alls? "
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "dasn"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Nytt filnamn: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Kan inte visa katalogen"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Ett fel uppstod när filen skulle visas"
+
+#: buffy.c:442
+#, fuzzy
+msgid "New mail in "
+msgstr "Nytt brev i %s."
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: färgen stöds inte av terminalen"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: färgen saknas"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: objektet finns inte"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: kommandot är endast giltigt för index-objekt"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: för få argument"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Saknar argument."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: för få argument"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: för få argument"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: attributet finns inte"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "för få argument"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "för många argument"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "standardfärgerna stöds inte"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "Verifiera PGP-signatur?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Kunde inte skapa tillfällig fil!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Kan inte skapa filter för visning"
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "Kunde inte kopiera meddelandet"
+
+#: commands.c:182
+msgid "S/MIME signature successfully verified."
+msgstr "Signaturen för S/MIME verifierades framgångsrikt."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr "Ägarens certifikat (S/MIME) matchar inte avsändarens."
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+msgid "S/MIME signature could NOT be verified."
+msgstr "Signaturen för S/MIME kunde INTE verifieras."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "PGP-signaturen verifierades framgångsrikt."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "PGP-signaturen kunde INTE verifieras."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Kommando: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Återsänd meddelandet till: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Återsänd märkta meddelanden till: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "Ett fel uppstod när adressen skulle nycklas upp!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr ""
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Återsänd meddelande till %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Återsänd meddelanden till %s"
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Message not bounced."
+msgstr "Meddelande har återsänts."
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Messages not bounced."
+msgstr "Meddelanden har återsänts."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Meddelande har återsänts."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Meddelanden har återsänts."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "Kan inte skapa filterprocess"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Öppna rör till kommando: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "Inget utskriftskommando är definierat."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "Skriv ut meddelande?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Skriv ut märkta meddelanden?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "Meddelande har skrivits ut"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Meddelanden har skrivits ut"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "Meddelandet kunde inte skrivas ut"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "Meddelanden kunde inte skrivas ut"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Omvänt (d)atum/(f)rån/(m)ot./(ä)re./(t)ill/t(r)åd/(o)sor./(s)tor./(p)oäng?:"
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Sortera (d)atum/(f)rån/(m)ot./(ä)re./(t)ill/t(r)åd/(o)sor./(s)tor./(p)oäng?:"
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "dfmätrosp"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Skalkommando: "
+
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "Avkoda-spara%s i brevlåda"
+
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "Avkoda-kopiera%s till brevlåda"
+
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "Dekryptera-spara%s i brevlåda"
+
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "Dekryptera-kopiera%s till brevlåda"
+
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "Spara%s i brevlåda"
+
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "Kopiera%s till brevlåda"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " märkt"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "Kopierar till %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "Konvertera till %s vid sändning?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Ändrade 'Content-Type' till %s."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "Teckenuppsättningen ändrad till %s; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "konverterar inte"
+
+#: commands.c:914
+msgid "converting"
+msgstr "konverterar"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Det finns inga bilagor."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Skicka"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Avbryt"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Bifoga fil"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Beskriv"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Signera, Kryptera"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Kryptera"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Signera"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Klartext"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " signera som: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<standard>"
+
+#: compose.c:149
+msgid "Encrypt with: "
+msgstr "Kryptera med: "
+
+#: compose.c:165
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "PGP: (k)ryptera, (s)ignera, signera s(o)m, (b)åda, eller sk(i)ppa det?"
+
+#: compose.c:166
+msgid "esabf"
+msgstr "ksobi"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Signera som: "
+
+#: compose.c:227
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"S/MIME: (k)ryptera, (s)ignera, signera s(o)m, (b)åda, eller sk(i)ppa det?"
+
+#: compose.c:228
+#, fuzzy
+msgid "eswabf"
+msgstr "ksobi"
+
+#: compose.c:236
+#, fuzzy
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128 eller (g)löm det?"
+
+#: compose.c:238
+msgid "12345f"
+msgstr "12345g"
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] finns inte mer!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] har modifierats. Uppdatera kodning?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Bilagor"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr ""
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Du kan inte ta bort den sista bilagan."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr ""
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "Bifogar valda filer..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "Kunde inte bifoga %s!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Öppna brevlåda att bifoga meddelande från"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "Inga meddelanden i den foldern."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Märk de meddelanden som du vill bifoga!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Kunde inte bifoga!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "Kodar endast om berörda textbilagor."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "Den aktiva bilagan kommer inte att bli konverterad."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "Den aktiva bilagan kommer att bli konverterad."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Ogiltig kodning."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Spara en kopia av meddelandet?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Byt namn till: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "Kan inte ta status på %s: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Ny fil: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "'Content-Type' har formen bas/undertyp"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Okänd 'Content-Type' %s"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Kan inte skapa filen %s"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "Vad vi har här är en oförmåga att skapa en bilaga"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Skjut upp meddelandet?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Skriv meddelandet till brevlåda"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Skriver meddelandet till %s ..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "Meddelandet skrevs."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr "S/MIME har redan valts. Rensa och fortsätt?"
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr "PGP har redan valts. Rensa och fortsätt?"
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr " (aktuell tid: %c)"
+
+#: crypt.c:71
+#, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- %s utdata följer%s --]\n"
+
+#: crypt.c:86
+msgid "Passphrase(s) forgotten."
+msgstr "Lösenfrasen är glömd."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "Mata in lösenfras för PGP:"
+
+#: crypt.c:147
+msgid "Enter SMIME passphrase:"
+msgstr "Mata in lösenfras för S/MIME:"
+
+#: crypt.c:192
+#, fuzzy
+msgid "Create a traditional (inline) PGP message?"
+msgstr "Skapa ett infogat PGP-meddelande?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "Startar PGP..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr "S/MIME-meddelanden utan ledtrådar på sammanhanget stöds inte."
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr "Försöker extrahera PGP-nycklar...\n"
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr "Försöker extrahera S/MIME-certifikat...\n"
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- Fel: Inkonsistent struktur på multipart/signed! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- Fel: Okänt 'multipart/signed' protokoll %s! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Varning: Signaturer %s/%s kan inte verifieras. --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- Följande data är signerat --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[--Varning: Kan inte hitta några signaturer. --]\n"
+"\n"
+
+#: crypt.c:924
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Slut på signerat data --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "ja"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "nej"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Avsluta Mutt?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "okänt fel"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Tryck på valfri tangent för att fortsätta..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " ('?' för lista): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Ingen brevlåda är öppen."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Inga meddelanden."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "Brevlådan kan endast läsas."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "Otillåten funktion i läget 'bifoga-meddelande'."
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "Inga synliga meddelanden."
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "Kan inte växla till skrivläge för en brevlåda utan skrivrättigheter!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "Ändringar i brevlådan skrivs när den lämnas."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Ändringar i brevlådan kommer inte att skrivas."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Avsluta"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Spara"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Brev"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Svara"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Grupp"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "Brevlådan har ändrats utanför programmet. Flaggor kan vara felaktiga."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Nya brev i den här brevlådan."
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "Brevlådan har ändrats utanför programmet."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Inga märkta meddelanden."
+
+#: curs_main.c:653 menu.c:896
+#, fuzzy
+msgid "Nothing to do."
+msgstr "Ansluter till %s..."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Gå till meddelande: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "Argumentet måste vara ett meddelandes nummer."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Det meddelandet är inte synligt."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Otillåtet meddelandenummer."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Radera meddelanden som passar: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "Inget begränsande mönster är aktivt."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Gräns: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Begränsa till meddelanden som passar: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Avsluta Mutt?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Märk meddelanden som passar: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Återställ meddelanden som passar : "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Avmarkera meddelanden som passar: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Öppna brevlåda i läsläge"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "Öppna brevlåda"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s är inte en brevlåda."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Avsluta Mutt utan att spara?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Det här är det sista meddelandet i listan."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Inga återställda meddelanden."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Det här är första meddelandet i listan."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "Sökning fortsatte i början."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "Sökning fortsatte i slutet."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Inga nya meddelanden"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Inga olästa meddelanden"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " i den här begränsade vyn"
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "Kan inte ändra flaggan 'viktigt' på POP-servern."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Inga fler trådar."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Du ser den första tråden."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "Trådning är inte aktiverad."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "Tråden har olästa meddelanden."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "Kan inte ändra meddelande på POP-servern."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tinfoga en rad som börjar med en ~\n"
+"~b adresser\tlägg till adresser till Bcc-listan\n"
+"~c adresser\tlägg till adresser till Cc-listan\n"
+"~f meddelande\tbifoga meddelande\n"
+"~F meddelande\tsom ~f, samt inkludera alla brevhuvuden\n"
+"~h\t\tändra i brevhuvuden\n"
+"~m meddelande\tinkludera och citera meddelande\n"
+"~M meddelande\tsom ~m, samt inkludera alla brevhuvuden\n"
+"~p\t\tskriv ut meddelandet\n"
+"~q\t\tskriv ut meddelandet och avsluta\n"
+"~r fil\tskicka en fil till editorn\n"
+"~t adresser\tlägg till adresser till To-listan\n"
+"~u\t\thämta föregående rad\n"
+"~v\t\tändra i meddelande med editorn ($visual)\n"
+"~w file\tskriv meddelande till fil\n"
+"~x\t\tavbryt ändring och avsluta editorn\n"
+"~?\t\tdet här meddelandet\n"
+".\t\tensam på en rad avslutar inmatning\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: otillåtet meddelandenummer.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Avsluta meddelande med en '.' på en egen rad)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "Ingen brevlåda.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Meddelande innehåller:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(fortsätt)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "saknar filnamn.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Ingen text i meddelande.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr ""
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: okänt kommando i editorn (~? för hjälp)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "kunde inte skapa tillfällig katalog: %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "kunde inte skapa tillfällig brevlåda: %s"
+
+#: editmsg.c:101
+#, fuzzy, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "kunde inte skapa tillfällig brevlåda: %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "Filen för meddelandet är tom!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "Meddelandet är inte ändrat!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "Kan inte öppna meddelandefil: %s"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "Kan inte lägga till brevlådan: %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Fel. Sparar tillfällig fil: %s"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Sätt flagga"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Ta bort flagga"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr "[-- Fel : Kan inte visa någon del av 'Multipart/Alternative'! --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Bilaga #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Typ: %s/%s, Kodning: %s, Storlek: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Automatisk visning med %s --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Startar kommando för automatisk visning: %s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- Kan inte köra %s. --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- Automatisk visning av standard fel gällande %s --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr "[-- Fel: 'message/external-body' har ingen parameter för åtkomst --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Den här %s/%s bilagan "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(storlek %s byte)"
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "har raderats --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- på %s --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- namn: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Den här %s/%s bilagan är inte inkluderad, --]\n"
+
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+"[-- och den angivna externa källan är --]\n"
+"[-- utgången. --]\n"
+
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr "[-- och den angivna åtkomsttypen %s stöds inte --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Fel: 'multipart/signed' saknar protokoll."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Fel: 'multipart/encrypted' saknar parameter för protokoll!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Kunde inte öppna tillfällig fil!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s stöds inte "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(använd '%s' för att visa den här delen)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "('view-attachments' måste knytas till tangent!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: kan inte bifoga fil"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "FEL: var vänlig rapportera det här felet!"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<OKÄND>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"Allmänna knytningar:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"Oknutna funktioner:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "Hjälp för %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "'unhook': Kan inte göra 'unhook *'inifrån en 'hook'."
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "'unhook': okänd sorts 'hook': %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "'unhook': Kan inte ta bort en %s inifrån en %s."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "Ingen verifieringsmetod tillgänglig"
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Verifierar (anonym)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "Anonym verifiering misslyckades."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Verifierar (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "Verifiering med CRAM-MD5 misslyckades."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Verifierar (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "Verifiering med GSSAPI misslyckades."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "LOGIN är inte aktiverad på den här servern."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Ansluter..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "Anslutning misslyckades."
+
+#: imap/auth_sasl.c:112
+#, fuzzy, c-format
+msgid "Authenticating (%s)..."
+msgstr "Verifierar (APOP)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "Verifiering med SASL misslyckades."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "%s är en ogiltig IMAP-sökväg"
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "Hämtar namnmängder..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Hämtar lista med brevlådor..."
+
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "Foldern saknas"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Skapa brevlåda: "
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "Brevlådan måste ha ett namn."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Brevlådan har skapats."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "Brevlådan har stängts."
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Fatalt fel. Meddelanderäknaren är inte synkroniserad!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "Stänger förbindelse till %s..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr ""
+"Den här versionen av IMAP är uråldrig. Mutt fungerar inte tillsammans med "
+"den."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "Säker förbindelse med TLS?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "Kunde inte förhandla fram en TLS-förbindelse"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "Väljer %s..."
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "Fel när brevlådan öppnades"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Kunde inte skriva till brevlådor i den här IMAP-servern"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "Skapa %s?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "Stänger förbindelse till IMAP-server..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "Märker %d meddelanden som slängda..."
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "Radering misslyckades"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Sparar statusflagga för meddelanden... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Tar bort meddelanden från server..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbox: EXPUNGE misslyckades"
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "CLOSE misslyckades."
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "Ogiltigt namn på brevlådan"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "Prenumerera på %s..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "Avslutar prenumeration på %s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "Kunde inte hämta brevhuvuden från den versionen av IMAP-servern."
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "Kunde inte skapa tillfällig fil %s"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Hämtar brevhuvuden för meddelanden... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Hämtar meddelande..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "Brevets index är fel. Försök att öppna brevlådan igen."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Skickar meddelande ..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "Kopierar %d meddelanden till %s..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "Kopierar meddelande %d till %s...<"
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "Fortsätt?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "alias: ingen adress"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr ""
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "ogiltigt fält i brevhuvud"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: okänd metod för sortering"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): fel i mönster: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: okänd variabel"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "prefix är inte tillåtet med 'reset'"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "värde är inte tillåtet med 'reset'"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s är satt"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s är inte satt"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: ogiltig typ av brevlåda"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: ogiltigt värde"
+
+#: init.c:1312
+#, fuzzy, c-format
+msgid "%s: Unknown type."
+msgstr "%s: okänd typ"
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: okänd typ"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Kan inte ta status på %s: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s är inte en normal fil."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "Fel i %s, rad %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: fel i %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: läsningen avbruten pga för många fel i %s"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: fel vid %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: för många parametrar"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: okänt kommando"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Fel i kommandorad: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "kan inte avgöra var hemkatalogen är"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "kan inte avgöra användarnamn"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "Har upptäckt en oändlig slinga i ett macro."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Tangent är inte knuten."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Tangent är inte knuten. Tryck '%s' för hjälp."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: för många parametrar"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: meny saknas"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "tom sekvens av tangenttryckningar"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: för många parametrar"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: ingen sån funktion finns i tabellen"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: tom sekvens av tangenttryckningar"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: för många parametrar"
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: parametrar saknas"
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s: funktionen saknas"
+
+#: keymap.c:912
+#, fuzzy
+msgid "Enter keys (^G to abort): "
+msgstr "Ange nyckel-ID för %s: "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr ""
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "operation utan effekt"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "tvinga visning av bilagor med hjälp av 'mailcap'"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "visa bilaga som text"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "Toggla visning av delar"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "flytta till slutet av sidan"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "återsänd ett meddelande till en annan användare"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "välj en ny fil i den här katalogen"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "visa fil"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "visa namnet på vald fil"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "prenumerera på vald brevlåda (endast IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "avsluta prenumereration på vald brevlåda (endast IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "toggla vy av all prenumererade brevlådor (endast IMAP)"
+
+#: keymap_alldefs.h:18
+#, fuzzy
+msgid "list mailboxes with new mail"
+msgstr "Ingen brevlåda har nya brev."
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "byt katalog"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "sök efter nya brev i brevlådorna"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "bifoga en eller flera filer till det här meddelandet"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "bifoga meddelande(n) till det här meddelandet"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "ändra i BCC-listan"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "ändra i CC-listan"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "ändra beskrivning av bilaga"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "ändra transportkodning för bilagan"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "ange filnamn att kopiera det här meddelandet till"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "ändra i filen som ska bifogas"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "ändra avsändarfältet"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "ändra i meddelandet, även brevhuvud"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "ändra i meddelandet"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "ändra i bilaga med hjälp av informationen i 'mailcap'"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "ändra fältet Reply-To"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "ändra meddelandets ärende"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "ändra mottagares addresser"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "Skapa ny brevlåda (endast IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "ändra typ för bilaga"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "hämta en tillfällig kopia av en bilaga"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "låt 'ispell' kontrollera meddelandet stavning"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "skapa ny bilaga med hjälp av informationen i 'mailcap'"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "toggla omkodning av den här bilagan"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "spara meddelandet för att skicka det senare"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "byt namn på/flytta bifogad fil"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "skicka meddelandet"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "skifta status mellan integrerat och bifogat"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "toggla huruvida fil ska tas bort efter att den har sänts"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "uppdatera bilagans kodningsinformation"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "skriv meddelandet till en mapp"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "kopiera ett meddelande till en fil/brevlåda"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "skapa ett alias från ett meddelandes avsändare"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "flytta brev till slutet av skärmen"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "flytta brev till mitten av skärmen"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "flytta brev till början av skärmen"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "skapa avkodad kopia (text/plain)"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "skapa avkodad kopia (text/plain) och släng"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "släng bort aktivt meddelande"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "ta bort aktiv brevlåda (endast för IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "släng bort alla meddelanden i undertråd"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "släng bort alla meddelanden i tråd"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "visa fullständing avsändaradress"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "visa meddelande och toggla rensning av brevhuvud"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "visa ett meddelande"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "ändra i meddelandet"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "ta bort tecknet före markören"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "flytta markören ett tecken till vänster"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "flytta markören till början av ordet"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "gå till början av raden"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "rotera bland brevlådor"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "komplettera filnamn eller alias"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "komplettera adress med fråga"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "ta bort tecknet under markören"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "gå till radens slut"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "flytta markören ett tecken åt höger"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "flytta markören till slutet av ordet"
+
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr "rulla ner genom historielistan"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "rulla upp genom historielistan"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "ta bort tecknen mellan markören och radens slut"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "ta bort tecknen mellan markören och ordets slut"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "ta bort alla tecken på raden"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "ta bort ordet framför markören"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "skriv efterföljande tangentkombination i klartext"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "byt tecken under markören mot föregående tecken"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "skriv ordet med stor begynnelsebokstav"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "ändra ordet till gemener"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "ändra ordet till versaler"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "ge ett kommando med syntax som i muttrc"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "ge en mask för filnamn"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "avsluta menyn"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "filtrera bilagan genom ett skalkommando"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "gå till första meddelandet"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "toggla ett meddelandes flagga för betydelse"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "vidarebefordra ett meddelande med kommentarer"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "välj det aktiva meddelandet"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "svara till alla mottagare"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "rulla ner en halv sida"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "rulla upp en halv sida"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "den här skärmen"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "gå till index"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "gå till sista meddelandet"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "svara till angiven sändlista"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "kör ett makro"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "skapa ett nytt brev"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "öppna en annan brevlåda"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "öppna en annan brevlåda utan skrivåtkomst"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "rensa en statusflagga från ett meddelande"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "släng bort meddelanden som passar ett mönster"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "tvinga hämtning av brev från en IMAP-server"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "hämta brev från en POP-server"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "flytta till första meddelandet"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "flytta till sista meddelandet"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "visa endast meddelanden som passar ett mönster"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "hoppa till nästa nya meddelande"
+
+#: keymap_alldefs.h:113
+#, fuzzy
+msgid "jump to the next new or unread message"
+msgstr "hoppa till nästa olästa meddelande"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "hoppa till nästa undertråd"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "hoppa till nästa tråd"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "hoppa till nästa icke slängda meddelande"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "hoppa till nästa olästa meddelande"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "gå till första meddelande i tråden"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "hoppa till föregående tråd"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "hoppa till föregående undertråd"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "hoppa till föregående icke borttagna meddelande"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "hoppa till föregående nya meddelande"
+
+#: keymap_alldefs.h:123
+#, fuzzy
+msgid "jump to the previous new or unread message"
+msgstr "hoppa till föregående olästa meddelande"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "hoppa till föregående olästa meddelande"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "märk aktiv tråd som läst"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "märk aktiv undertråd som läst"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "sätt en statusflagga för ett meddelande"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "spara ändringar i brevlåda"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "märk meddelanden som passar ett mönster"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "återställ meddelanden som passar ett mönster"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "avmarkera meddelanden som passar ett mönster"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "gå till mitten av sidan"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "gå till nästa brev"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "rulla ner en rad"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "gå till nästa sida"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "hoppa till slutet av meddelandet"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "toggla huruvida citerad text ska visas"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "hoppa över citerad text"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "hoppa till början av meddelandet"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "skicka meddelandet/bilagan till ett skalkommando"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "gå till föregående brev"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "rulla upp en rad"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "gå till föregående sida"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "skriv ut aktivt meddelande"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "fråga ett externt program efter adresser"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "lägg till resultat av ny fråga till aktivt resultat"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "spara ändringar till brevlåda och avsluta"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "återkalla ett uppskjutet meddelande"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "rensa och rita om skärmen"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{internt}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "svara på ett meddelande"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "använd aktivt meddelande som mall för ett nytt"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "spara meddelande/bilaga till fil"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "leta efter ett reguljärt uttryck"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "leta bakåt efter ett reguljärt uttryck"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "leta efter nästa passning"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "leta efter nästa passning i omvänd ordning"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "toggla färg på sökmönster"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "starta ett kommando i ett underskal"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "sortera meddelanden"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "sortera meddelanden i omvänd ordning"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "märk aktivt meddelande"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "använd nästa funktion på ett märkta meddelanden"
+
+#: keymap_alldefs.h:164
+#, fuzzy
+msgid "apply next function ONLY to tagged messages"
+msgstr "använd nästa funktion på ett märkta meddelanden"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "märk aktiv undertråd"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "märk aktiv tråd"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "toggla 'ny' för ett meddelande"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "toggla huruvida en brevlåda ska skrivas om"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "välj om alla filer skall visas eller bara brevlådor"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "gå till början av sidan"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "ta inte bort det aktuella meddelandet"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "återställ all meddelanden i en tråd"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "återställ alla meddelanden i en undertråd"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "visa Mutts versionsnummer och datum"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "visa bilaga med hjälp av informationen i 'mailcap' om nödvändigt"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "visa MIME-bilagor"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr ""
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "visa aktivt begränsande mönster"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "komprimera/expandera aktiv tråd"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "komprimera/expandera alla trådar"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "bifoga an öppen nyckel (PGP)"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "visa val för PGP"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "skicka en öppen nyckel (PGP)"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "verifiera en öppen nyckel (PGP)"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "visa nyckelns användaridentitet"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "leta efter klassisk pgp"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "Godkänn den konstruerade kedjan"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "Lägg till en 'remailer' till kedjan"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "Lägg in en 'remailer' i kedjan"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "Ta bort en 'remailer' från kedjan"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "Välj föregående brev i kedjan"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "Välj nästa brev i kedjan"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "skicka meddelandet genom en återpostarkedja (mixmaster)"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "skapa avkodad kopia och ta bort"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "skapa avkrypterad kopia"
+
+#: keymap_alldefs.h:196
+msgid "wipe passphrase(s) from memory"
+msgstr "rensa lösenfrasen från minnet."
+
+#: keymap_alldefs.h:197
+msgid "extract supported public keys"
+msgstr "extrahera stödda öppna nycklar"
+
+#: keymap_alldefs.h:198
+msgid "show S/MIME options"
+msgstr "visa val för S/MIME"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Slut på minne!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"För att kontakta utvecklarna, var vänlig skicka ett brev till <mutt-dev@mutt."
+"org>.\n"
+"För att rapportera ett fel, var vänlig använd programmet flea(1).\n"
+
+#: main.c:50
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Upphovsrätt (C) 1996-2001 Michael R. Elkins med flera.\n"
+"Mutt levereras HELT UTAN GARANTI; för detaljer kör `mutt -vv'.\n"
+"Mutt är ett fritt program, och du är välkommen att sprida det vidare\n"
+"under vissa villkor; kör `mutt -vv' för detaljer.\n"
+
+#: main.c:56
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Upphovsrätt (C) 1996-2001 Michael R. Elkins <me@cs.hmc.edu>\n"
+"Upphovsrätt (C) 1996-2001 Brandon Long <blong@fiction.net>\n"
+"Upphovsrätt (C) 1997-2001 Thomas Roessler <roessler@guug.de>\n"
+"Upphovsrätt (C) 1998-2001 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Upphovsrätt (C) 1999-2001 Brendan Cully <brendan@kublai.com>\n"
+"Upphovsrätt (C) 1999-2001 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Upphovsrätt (C) 2000-2001 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"Många ej nämnda personer har bidragit med kod, fixar och förslag.\n"
+"\n"
+"    Följande text är en informell översättning som enbart tillhandahålls i\n"
+"    informativt syfte. För alla juridiska tolkningar gäller den engelska\n"
+"    originaltexten.\n"
+"\n"
+"    Detta program är fri programvara.  Du kan distribuera det och/eller\n"
+"    modifiera det under villkoren i GNU General Public License, publicerad\n"
+"    av Free Software Foundation, antingen version 2 eller (om du så vill)\n"
+"    någon senare version.\n"
+"\n"
+"    Detta program distribueras i hopp om att det ska vara användbart, men\n"
+"    UTAN NÅGON SOM HELST GARANTI, även utan underförstådd garanti om\n"
+"    SÄLJBARHET eller LÄMPLIGHET FÖR NÅGOT SPECIELLT ÄNDAMÅL. Se GNU\n"
+"    General Public License för ytterligare information.\n"
+"    Du bör ha fått en kopia av GNU General Public License\n"
+"    tillsammans med detta program. Om inte, skriv till Free Software \n"
+"    Foundation,Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, "
+"USA.\n"
+
+#: main.c:94
+#, fuzzy
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"användning: mutt [ -nRyzZ ] [ -e <kommando> ] [ -F <fil> ] [ -m <typ> ] [ -f "
+"<fil> ]\n"
+"            mutt [ -nR ] [ -e <kommando> ] [ -F <fil> ] -Q <variabel> [ -Q "
+"<variabel> ]\n"
+"            mutt [ -nx ] [ -e <kommando> ] [ -a <fil> ] [ -F <fil> ] [ -H "
+"<fil> ] [\n"
+"             -i <fil> ] [ -s <ärende> ] [ -b <adress> ] [ -c <adress> ] "
+"<adress> [ ... ]\n"
+"            mutt [ -n ] [ -e <kommando> ] [ -F <fil> ] -p\n"
+"            mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -a <fil>\tbifoga en fil till meddelandet\n"
+"  -b <adress>\tange en adress för 'blind carbon-copy' (BCC)\n"
+"  -c <adress>\tange en adress för 'carbon-copy' (CC)\n"
+"  -e <kommando>\tange ett kommando att köra efter initiering\n"
+"  -f <fil>\tange en brevlåda att läsa\n"
+"  -F <fil>\tange en alternativ muttrc-fil\n"
+"  -H <fil>\tange en fil som mall att läsa brevhuvud från\n"
+"  -i <fil>\tange en fil som Mutt skall inkludera i svaret\n"
+"  -m <typ>\tange typen för den normala brevlådan\n"
+"  -n\t\thindrar Mutt att läsa systemets Muttrc\n"
+"  -p\t\tåterkalla ett uppskjutet meddelande\n"
+"  -Q <variabel>\tbegär värdet av en konfigurationsvariabel\n"
+"  -R\t\töppna brevlåda med endast läsmöjligheter\n"
+"  -s <ärende>\tange ett ärende (måste ha citationstecken om det innehåller "
+"blanksteg)\n"
+"  -v\t\tvisa version och definitioner för kompileringen\n"
+"  -x\t\tsimulera mailx's sändläge\n"
+"  -y\t\tvälj en från listan med brevlådor\n"
+"  -z\t\tavsluta omedelbart om det inte finns några nya meddelanden i "
+"brevlådan\n"
+"  -Z\t\töppna den första brevlådan med ett nytt meddelande, avsluta "
+"omedelbart om inget nytt finns\n"
+"  -h\t\tvisa den här hjälptexten"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Inkompilerade val:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Fel vid initiering av terminalen."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "Avlusningsnivån är %d.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "DEBUG var inte valt vid kompilering.  Ignoreras.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s finns inte. Vill du skapa den?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "Kan inte skapa %s: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Inga mottagare angivna.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: kan inte bifoga fil.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Ingen brevlåda har nya brev."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Inga brevlådor för inkommande post är definierade."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "Brevlådan är tom."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "Läser %s... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "Brevlådan är trasig!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "Brevlådan skadades!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Fatalt fel! Kunde inte återöppna brevlåda!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Kan inte låsa brevlåda!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+"sync: mbox är ändrad, men inga meddelanden är ändrade. [Var vänlig "
+"rapportera det här felet]."
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Skriver meddelanden... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "Skriver ändringar..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Skrivning misslyckades! Sparade del av brevlåda i %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "Kunde inte återöppna brevlådan!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Återöppnar brevlådan..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Hoppa till: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Ogiltigt index."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Inga brev."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Du kan inte rulla längre ner."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Du kan inte rulla längre upp."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Du är på sista sidan."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Du är på första sidan."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "Första meddelandet visas."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "Sista meddelandet visas."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Du är på sista meddelandet."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Du är på första meddelandet."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Leta efter: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Leta efter i omvänd ordning: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Inget mönster för sökning."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Hittades inte."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "Inga märkta brev."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "Sökning kan inte göras från den här menyn."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "Hopp stöds inte för dialoger."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Märkning stöds inte."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "Läser %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr ""
+
+#: muttlib.c:835
+#, fuzzy
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "Filen är en katalog, spar i den?"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "Filen är en katalog, spar i den?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Fil i katalog: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "Filen finns, skriv (ö)ver, (l)ägg till, eller (a)vbryt?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "öla"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "Kan inte spara meddelandet till POP-brevlådan."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s är inte en brevlåda!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Lägg till meddelanden till %s?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "Anslutning till %s stängd."
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL finns inte."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "Kommandot preconnect misslyckades."
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "Ett fel uppstod med förbindelsen till %s (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr ""
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "Slår upp %s..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Kunde inte hitta servern \"%s\""
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "Ansluter till %s..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "Kunde inte öppna förbindelse med %s (%s)."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "Kunde inte hitta tillräckligt bra slumptal"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "Fyller på i slumptalsreserven: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "Rättigheterna för %s är inte säkra!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "SSL avstängd på grund av brist på bra slumptal"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "I/O-fel"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "ospecificerat protokollfel"
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "SSL misslyckades: %s"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "Kan inte hämta certifikat från 'peer'"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "Ansluter (SSL) med hjälp av %s (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "Okänd"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[kan inte beräkna]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[ogiltigt datum]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "Certifikatet är inte giltigt än"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "Certifikatet är inte längre giltigt"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Certifikatet tillhör:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Certifikatet utfärdat av:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Certifikatet är giltigt"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   från %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "     till %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Fingeravtryck: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "Kontroll av SSL-certifikat"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(f)örkasta, (g)odkänn den här gången, godkänn (v)arje gång"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "fgv"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(f)örkasta, (g)odkänn den här gången"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "fg"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Avsluta "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Varning: kunde inte spara certifikat"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "Certifikat sparat"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Antal låsningar är för många, ta bort låsning av %s?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "Kan inte köra 'dotlock' på %s.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "Tiden löpte ut när låsning med 'fcntl' provades!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Väntar på lås (fcntl)... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "Tiden löpte ut när låsning med 'flock' provades!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Väntar på låsningsförsök (flock)... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "Kunde inte låsa %s\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "Läser %s..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "Skriver %s..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "Kunde inte synkronisera brevlådan %s!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Flytta lästa meddelanden till %s?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Rensa %d slängt meddelande?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Rensa %d slängda meddelanden?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Flyttar lästa meddelanden till %s..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "Brevlådan är oförändrad."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d behölls, %d flyttades, %d slängdes."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d behölls, %d slängdes."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr " Tryck '%s' för att toggla skrivning"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "Använd 'toggle-write' för att ge åtkomst för skrivning!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "Brevlådan är märkt som ej skrivbar. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "Brevlådan är synkroniserad."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Kan inte skriva meddelandet"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "Finns inte i den här menyn."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "Föreg. sida"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "Nästa sida"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Visa bilaga"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Nästa"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "Slutet av meddelande visas."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "Början av meddelande visas."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Sök i omvänd ordning: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Sök: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "Hjälp visas just nu."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "ingen mer citerad text."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "Ingen mer ociterad text efter citerad text."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "Avgränsande parameter saknas för flerpartsmeddelande!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Fel i uttryck: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Ogiltig dag i månaden: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Ogiltig månad: %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "Ogiltigt relativt datum: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "fel i uttryck"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "fel i mönster vid: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: ogiltigt kommando"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c: stöds inte i det här läget"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "parameter saknas"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "parentes kan inte paras ihop: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "tomt mönster"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "fel: okänd operation %d (var vänlig rappportera felet)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Kompilerar sökmönster..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "Kör kommando på passande meddelanden..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "Inga meddelanden passade kriteriet."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "Sökningen nådde slutet utan att hitta något"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "Sökningen nådde början utan att hitta något"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Sökningen avbröts."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "Har glömt lösenfras för PGP."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Fel: kunde inte starta PGP-process! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- Slut på utdata från PGP --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- MEDDELANDE KRYPTERAT MED PGP BÖRJAR --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- BLOCK MED PGP-NYCKEL BÖRJAR --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- MEDDELANDE SIGNERAT MED PGP BÖRJAR --]\n"
+"\n"
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- SLUT PÅ MEDDELANDE KRYPTERAT MED PGP --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- SLUT PÅ BLOCK MED PGP-NYCKEL --]\n"
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- SLUT PÅ MEDDELANDE SIGNERAT MED PGP --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Fel: kunde inte hitta början av PGP-meddelande! --]\n"
+"\n"
+
+#: pgp.c:662
+#, fuzzy
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Internt fel.  Informera <roessler@guug.de>."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Fel: kunde inte starta PGP-process! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Fel: missformat PGP/MIME-meddelande! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Fel: kunde inte skapa tillfällig fil! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- Följande data är krypterad enligt PGP/MIME --]\n"
+"\n"
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- Slut på data krypterad enligt PGP/MIME --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "Kan inte starta PGP-process!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "Använd nyckel med ID = \"%s\" för %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "Ange nyckel-ID för %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "Kan inte starta PGP"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "Hämtar nyckel för PGP..."
+
+#: pgpkey.c:486
+#, fuzzy
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "Alla passande nycklar är markerade som utgångna/återkallade."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Välj  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Kontrollera nyckel "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "PGP-nycklar som passar <%s>."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "PGP-nycklar som passar \"%s\"."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "Kan inte öppna /dev/null"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Kan inte skapa tillfällig fil"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "Nyckel-ID: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "Den här nyckeln kan inte användas: utgången/spärrad/återkallad."
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "ID:t är utgånget/spärrat/återkallat."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "ID:t har odefinierad giltighet."
+
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "ID:t är inte giltigt."
+
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "ID:t är endast marginellt betrott."
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s Vill du verkligen använda nyckeln?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Ange nyckel-ID: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "Startar PGP..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "PGP-nyckel %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "Letar efter nycklar som passar \"%s\"..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "Kommandot TOP stöds inte av servern."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "Kan inte skriva brevhuvud till den tillfälliga filen!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "Kommandot UIDL stöds inte av servern."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "%s är en ogilitig POP-sökväg"
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "Hämtar lista över meddelanden..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "Kan inte skriva meddelande till den tillfälliga filen!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "Söker efter nya brev..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "Server för POP är inte angiven."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "Inga nya brev i brevlådan på POP-servern."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "Ta bort meddelanden från server?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Läser nya meddelanden (%d byte)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "Fel när brevlådan skrevs!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d utav %d meddelanden lästa]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "Servern stängde förbindelsen!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Verifierar (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Verifierar (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "Verifiering med APOP misslyckades."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "Kommandot USER stöds inte av servern."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "Kunde inte lämna meddelanden på server."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "Ett fel uppstod när förbindelse till servern %s försöktes."
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "Stänger förbindelse till POP-servern..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Verifierar meddelandeindex..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Förbindelse tappades. Kontakta POP-servern igen?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Uppskjutna meddelanden"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "Inga uppskjutna meddelanden."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "Otillåtet brevhuvud för PGP"
+
+#: postpone.c:479
+msgid "Illegal S/MIME header"
+msgstr "Otillåtet brevhuvud för S/MIME"
+
+#: postpone.c:554
+#, fuzzy
+msgid "Decryption failed."
+msgstr "Anslutning misslyckades."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Ny sökning"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Skapa alias"
+
+#: query.c:48
+msgid "Search"
+msgstr "Sök"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Väntar på svar..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Sökkommando är inte definierat."
+
+#: query.c:286
+msgid "Query"
+msgstr "Sökning"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Sökning: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Sökning '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Rör"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Skriv ut"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Sparar..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Bilaga sparad."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "VARNING! Du kommer att skriva över %s. Fortsätt?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Bilaga filtrerad."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Filtrera genom: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Skicka genom rör till: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "Vet inte hur en bilaga av typ %s ska skrivas ut!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Skriv ut märkta bilagor?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Skriv ut bilaga?"
+
+#: recvattach.c:938
+msgid "Can't decrypt encrypted message!"
+msgstr "Kan inte avkryptera de krypterade meddelandena."
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Bilagor"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "Det finns inga delar att visa!"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "Kan inte ta bort meddelanden från POP-servern."
+
+#: recvattach.c:1056
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "Stöd saknas att ta bort bilagor från krypterade meddelanden."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Endast multipart-bilagor kan tas bort."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Du kan bara återsända 'message/rfc822 parts'"
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing message!"
+msgstr "Fel när meddelande sändes."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing messages!"
+msgstr "Fel när meddelande sändes."
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Kan inte skapa tillfällig fil %s."
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "Vidarebefordra som bilagor?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+"Kan inte avkoda alla märkta bilagor. Vidarebefordra övriga som MIME-bilagor?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "Vidarebefordra som MIME-bilaga?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "Kan inte skapa %s."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Kan inte hitta några märkta meddelanden."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "Inga sändlistor hittades!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr "Kan inte avkoda alla märkta bilagor. 'MIME-encapsulate' de övriga?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Skicka"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Lägg in"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Ta bort"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "OK"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "Kan inte hämta mixmasters type2.list!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "Välj en återpostarkedja."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "Fel: %s kan inte användas som en kedjas sista återpostare."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Mixmaster-kedjor kan bara ha %d länkar."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "Återpostarkedjan är redan tom."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "Det har redan valt den första länken i kedjan."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "Det har redan valt den sista länken i kedjan."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Mixmaster accepterar inte Cc eller Bcc i brevhuvudet."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr ""
+"Sätt variabeln 'hostname' till ett passande värde vid användande av "
+"mixmaster!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Fel vid sändning av meddelande, delprocess returnerade %d.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Fel när meddelande sändes."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "Felaktigt formatterad del för type %s i \"%s\", rad %d"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "Ingen 'mailcap' angiven"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "Hittade ingen beskrivning av %s i 'mailcap'"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: för få parametrar"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: för många parametrar"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Inget ärende, avbryt?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Inget ärende, avbryter."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Svara till %s%s?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "Svara till %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "Inga märkta meddelanden syns!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Citera meddelande i svar?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Inkluderar citerat meddelande..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "Kunde inte inkludera alla begärda meddelanden!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "Vidarebefordra som bilaga?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Förbereder vidarebefordrat meddelande..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Återkalla uppskjutet meddelande?"
+
+#: send.c:1336
+#, fuzzy
+msgid "Edit forwarded message?"
+msgstr "Förbereder vidarebefordrat meddelande..."
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Meddelandet har inte ändrats. Avbryt?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Meddelandet har inte ändrats. Avbröt."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "Brevet skickades inte."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Meddelande uppskjutet."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Inga mottagare angivna!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Inga mottagare angavs."
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Ärende saknas, avbryt sändning?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Ärende saknas."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Skickar meddelande..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Kunde inte skicka meddelandet."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "Brevet har skickats."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Skickar i bakgrunden."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "Ingen begränsningsparameter funnen! [Rapportera det här felet]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s finns inte längre!"
+
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "%s är inte en normal fil."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "Kunde inte öppna %s"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Fel vid sändning av meddelande, delprocess returnerade %d (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Utdata från sändprogrammet"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr ""
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s...  Avslutar.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "Fångade %s...  Avslutar.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Fångade signal %d...  Avslutar.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr "Betrodd   "
+
+#: smime.c:303
+msgid "Verified  "
+msgstr "Verifierad   "
+
+#: smime.c:306
+msgid "Unverified"
+msgstr "Overifierad   "
+
+#: smime.c:309
+msgid "Expired   "
+msgstr "Utgången   "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr "Återkallad   "
+
+#: smime.c:315
+msgid "Invalid   "
+msgstr "Ogiltig   "
+
+#: smime.c:318
+msgid "Unknown   "
+msgstr "Okänd   "
+
+#: smime.c:347
+msgid "Enter keyID: "
+msgstr "Ange nyckel-ID: "
+
+#: smime.c:370
+#, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "S/MIME-nycklar som passar \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr "ID %s är overifierad. Vill du använda det till %s?"
+
+#: smime.c:523 smime.c:592
+#, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "Använd ID (som vi inte litar på) %s till %s?"
+
+#: smime.c:526 smime.c:595
+#, c-format
+msgid "Use ID %s for %s ?"
+msgstr "Använd ID %s till %s?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+"Varning: du har ännu inte valt att lita på ID %s. (forstätt med valfri "
+"tangent)"
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr "Inga (giltiga) certifikat hittades för %s."
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "Fel: kunde inte skapa S/MIME-process!"
+
+#: smime.c:1197
+msgid "no certfile"
+msgstr "ingen certifikatfil"
+
+#: smime.c:1200
+msgid "no mbox"
+msgstr "ingen mbox"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr "Inget resultat från OpenSSL..."
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr "Varning: temporärt certifikat kunde inte hittas."
+
+#: smime.c:1426
+msgid "Can't open OpenSSL subprocess!"
+msgstr "Kan inte starta S/MIME-process!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr "Inget resultat från OpenSSL..."
+
+#: smime.c:1629 smime.c:1751
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- Slut på utdata från S/MIME --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Fel: kunde inte starta S/MIME-process! --]\n"
+
+#: smime.c:1755
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr ""
+"[-- Följande data är krypterad enligt S/MIME --]\n"
+"\n"
+
+#: smime.c:1758
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr ""
+"[-- Följande data är signerat enlift S/MIME --]\n"
+"\n"
+
+#: smime.c:1822
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- Slut på data krypterad enligt S/MIME --]\n"
+
+#: smime.c:1824
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- Slut på signerat data enligt S/MIME --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Sorterar brevlåda..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr ""
+"Kunde inte hitta sorteringsfunktion! [Var vänlig rapportera det här felet]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(ingen brevlåda)"
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "Första meddelandet är inte synligt med begränsad vy"
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "Första meddelandet är inte tillgängligt."
+
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "Startar OpenSSL..."
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "Återsänd meddelande till %s...?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "Återsänd meddelanden till %s...?"
+
+#~ msgid "ewsabf"
+#~ msgstr "ksobi"
+
+#, fuzzy
+#~ msgid "Certificate *NOT* added."
+#~ msgstr "Certifikat sparat"
+
+#~ msgid "This ID's validity level is undefined."
+#~ msgstr "Förtroendenivån för det här ID'et är odefinierat."
+
+#~ msgid "Decode-save"
+#~ msgstr "Avkoda och spara"
+
+#~ msgid "Decode-copy"
+#~ msgstr "Avkoda och kopiera"
+
+#~ msgid "Decrypt-save"
+#~ msgstr "Avkryptera och spara"
+
+#~ msgid "Decrypt-copy"
+#~ msgstr "Avkryptera och kopiera"
+
+#~ msgid "Copy"
+#~ msgstr "Kopiera"
+
+#~ msgid "%s [%s]\n"
+#~ msgstr "%s [%s]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "[-- End of PGP output --]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "[-- Slut på utdata från PGP --]\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "Can't stat %s."
+#~ msgstr "Kan inte ta status på filen %s"
+
+#~ msgid "%s: no such command"
+#~ msgstr "%s: kommandot saknas"
+
+#~ msgid "Authentication method is unknown."
+#~ msgstr "Metod för verifiering är okänd."
+
+#~ msgid "MIC algorithm: "
+#~ msgstr "MIC-algoritm: "
+
+#~ msgid "This doesn't make sense if you don't want to sign the message."
+#~ msgstr "Det här saknar relevans om du inte vill signera meddelandet."
+
+#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160"
+#~ msgstr ""
+#~ "Okänd MIC-algoritm, följande är kända: pgp-md5, pgp-sha1 och pgp-rmd160"
+
+#~ msgid ""
+#~ "\n"
+#~ "SHA1 implementation Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft."
+#~ "com>\n"
+#~ "\n"
+#~ "    Redistribution and use in source and binary forms, with or without\n"
+#~ "    modification, are permitted under certain conditions.\n"
+#~ "\n"
+#~ "    The SHA1 implementation comes AS IS, and ANY EXPRESS OR IMPLIED\n"
+#~ "    WARRANTIES, including, but not limited to, the implied warranties of\n"
+#~ "    merchantability and fitness for a particular purpose ARE DISCLAIMED.\n"
+#~ "\n"
+#~ "    You should have received a copy of the full distribution terms\n"
+#~ "    along with this program; if not, write to the program's developers.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "SHA1 implementering, upphovsrätt (C) 1995-1997 Eric A. Young "
+#~ "<eay@cryptsoft.com>\n"
+#~ "\n"
+#~ "    Följande text är en informell översättning som enbart tillhandahålls "
+#~ "i\n"
+#~ "    informativt syfte. För alla juridiska tolkningar gäller den engelska\n"
+#~ "    originaltexten.\n"
+#~ "\n"
+#~ "    Spridning och användning av källkod och binära former, med eller "
+#~ "utan\n"
+#~ "    modifieringar, är tillåtna under vissa villkor.\n"
+#~ "\n"
+#~ "    Implementeringen av SHA1 distribueras i hopp om att det ska vara \n"
+#~ "    användbart, men UTAN NÅGON SOM HELST GARANTI, även utan "
+#~ "underförstådd \n"
+#~ "    garanti om SÄLJBARHET eller LÄMPLIGHET FÖR NÅGOT SPECIELLT ÄNDAMÅL.\n"
+#~ "\n"
+#~ "    Du skall ha fått en kopia av de fullständiga villkoren för "
+#~ "distribution\n"
+#~ "    tillsammans med programmet; om inte, skriv till programmets "
+#~ "utvecklare.\n"
+
+#~ msgid "POP Username: "
+#~ msgstr "Användarnamn för POP: "
+
+#~ msgid "Reading new message (%d bytes)..."
+#~ msgstr "Läser nytt meddelande (%d byte)..."
+
+#~ msgid "Error reading message!"
+#~ msgstr "Fel när meddelande lästes!"
+
+#~ msgid "%s [%d message read]"
+#~ msgstr "%s [%d meddelanden lästa]"
+
+#~ msgid "Creating mailboxes is not yet supported."
+#~ msgstr "Skapande av brevlådor stöds inte än."
+
+#~ msgid "IMAP Username: "
+#~ msgstr "Användarnamn för IMAP: "
+
+#~ msgid "CRAM key for %s@%s: "
+#~ msgstr "Ange CRAM-nyckel för %s@%s: "
+
+#~ msgid "Skipping CRAM-MD5 authentication."
+#~ msgstr "Hoppar över verifiering med CRAM-MD5."
+
+#~ msgid "Reopening mailbox... %s"
+#~ msgstr "Öppnar brevlåda en gång till... %s"
+
+#~ msgid "Closing mailbox..."
+#~ msgstr "Stänger brevlåda..."
diff --git a/po/tr.gmo b/po/tr.gmo
new file mode 100644 (file)
index 0000000..440b4b9
Binary files /dev/null and b/po/tr.gmo differ
diff --git a/po/tr.po b/po/tr.po
new file mode 100644 (file)
index 0000000..1295376
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,4274 @@
+# Turkish translation of mutt.
+# (C) 2001 the Free Software Foundation.
+# Fatih Demir <kabalak@gtranslator.org>, 2001.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: mutt 1.4i\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2001-06-12 12:47+0200\n"
+"Last-Translator: Fatih Demir <kabalak@gtranslator.org>\n"
+"Language-Team: Turkish <gnome-turk@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-9\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "%s'deki kullanýcý adý: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "%s@%s için parola: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "Çýk"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "Sil"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "Kurtar"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Seç"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "Yardým"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "Hýc bir lakabýn yok!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "Lakaplar"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "Farklý lakap yarat: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "Bu isimli bir lakap zaten tanýmlanmýþ!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr ""
+
+#: alias.c:279
+msgid "Address: "
+msgstr "Adres:"
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr ""
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "Þahsi isim: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[ %s = %s] Kabul ediliyor mu?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "Dosyaya kaydet: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "Lakap eklendi."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr ""
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "Mailcap düzenleme birimi %%s gerektiriyor"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "\"%s\" çalýþtýrýlýrken bir hata oluþtu!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "Dosyayý baþlýklarýný taramak için açamadým."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "Dosyayý baþlýklarýný ayýrmak için açamadým."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "%s için mailcap yazma birimi yok, boþ dosya yaratýlýyor."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "Mailcap düzenleme birimi %%s gerektiriyor"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "%s için mailcap düzenleme birimi yok"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "Uyan mailcap birimi bulunamadý. Metin olarak gösteriliyor."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "MIME tipi belirlenmemiþ. Eklenti gösterilemiyor."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "Filtrayý yaratamadým"
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "Filtrayý yaratamadým"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "Yazma hatasý!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "Bunu nasýl yazdýracaðýmý bilinmiyor!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "Dizine geç"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "Maske"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s bir dizin deðil."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "%d eposta kutusu "
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "Abone [%s], Dosya maskesi: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Dizin [%s], Dosya maskesi: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "Bir dizini topyekun ekleyenmiyor!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "Dosya maskesine uyan dosya yok"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Yaratma sadece IMAP eposta kutularý için destekleniyor"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Silme sadece IMAP eposta kutularý için destekleniyor"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "Vallahi mi eposta kutusu \"%s\"'yi sileyim mi?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "eposta kutusu silindi."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "eposta kutusu silinmedi."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "Dizine geç: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "Dizin taranýrken hata oldu."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "Dosya aðý: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "(t)arih, (a)lfabetik,(b)oyuta yada (h)iç mi terse sýralayým?"
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "(t)arih, (a)lfabetik,(b)oyuta yada (h)iç mi sýralayým? "
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "tabh"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "Yeni dosya ismi: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "Bir dizini gösterilmiyor"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "Dosyayý göstermeye uðraþýrken hata oldu"
+
+#: buffy.c:442
+#, fuzzy
+msgid "New mail in "
+msgstr "%s'de yeni eposta var."
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s : renk komuta tarafýndan desteklenmiyor"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s : böyle bir renk yok"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s : böyle bir þey yok"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s : komuta sadece indeks nesneleri için geçerlidir"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s : çok az argüman verilmiþ"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "Eksik argümanlar."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "renkli : eksik argüman"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "siyah-beyaz : eksik argüman"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "böyle bir ayar yok : %s"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "çok az seçenek"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "çok fazla seçenek"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "varsayýlan renkler desteklenmiyor"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "PGP imzasý doðrulansýn mý?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "Geçici dosyayý yaratamadým!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "Gösterim filtrasýný yaratamadým"
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "Iletiyi kopyalamayadým."
+
+#: commands.c:182
+#, fuzzy
+msgid "S/MIME signature successfully verified."
+msgstr "PGP imzasý baþarýyla doðrulandý."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr ""
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+#, fuzzy
+msgid "S/MIME signature could NOT be verified."
+msgstr "PGP imzasý doðrulanamadý."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "PGP imzasý baþarýyla doðrulandý."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "PGP imzasý doðrulanamadý."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Komuta: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Iletiyi ilet:"
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "Iþaretli iletileri ilet:"
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "Adresi tararken hata oldu!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr ""
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "Iletiyi %s'e ilet"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "Iletileri %s'e ilet"
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Message not bounced."
+msgstr "Ileti iletildi."
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Messages not bounced."
+msgstr "Iletiler iletildi."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "Ileti iletildi."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "Iletiler iletildi."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "Filtra iþlemi yaratýlamadý"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "Komutaya ver: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "Yazdýrma komutasý belirlenmemiþ."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "Ileti yazdýrýlsýn mý?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "Iþaretli iletiler yazdýrýlsýn mý?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "Ileti yazdýrýldi"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "Iletiler yazdýrýldi"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "Ileti yazdýrýlýmadý"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "Iletiler yazdýrýlýmadý"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Ters sýralama tipi: (t)arih/(g)önderen/(a)lan/(k)onu/gönder(i)len/k(o)num/dü"
+"(z)enmemiþ/(b)oyut/(p)uan: "
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"Sýralama tipi: (t)arih/(g)önderen/(a)lan/(k)onu/gönder(i)len/k(o)num/dü(z)"
+"enlenmemiþ/(b)oyut/(p)uan?"
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "tgakiozbp"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Komuta komutasý: "
+
+#: commands.c:701
+#, fuzzy, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "eposta kutusuna %s%s"
+
+#: commands.c:702
+#, fuzzy, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "eposta kutusuna %s%s"
+
+#: commands.c:703
+#, fuzzy, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "eposta kutusuna %s%s"
+
+#: commands.c:704
+#, fuzzy, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "eposta kutusuna %s%s"
+
+#: commands.c:705
+#, fuzzy, c-format
+msgid "Save%s to mailbox"
+msgstr "eposta kutusuna %s%s"
+
+#: commands.c:705
+#, fuzzy, c-format
+msgid "Copy%s to mailbox"
+msgstr "eposta kutusuna %s%s"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " iþaretli "
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "%s'e kopyalanýyor..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "Gönderirken %s'ye dönüþtürülsün mü?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Içerik tipi %s iye deðiþtirildi."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "Karakter kümesi deðiþtirildi: %s -> %s"
+
+#: commands.c:914
+msgid "not converting"
+msgstr "dönüþtürülmüyor"
+
+#: commands.c:914
+msgid "converting"
+msgstr "dönüþtürülüyor"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "Eklemler yok."
+
+#: compose.c:84
+msgid "Send"
+msgstr "Gönder"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "Iptal"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "Dosya ekle"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "Anlatým"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Imzala ve þifrele"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "Þifrele"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Imzala"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Temizle"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " farklý imzala: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<varsayýlan>"
+
+#: compose.c:149
+#, fuzzy
+msgid "Encrypt with: "
+msgstr "Þifrele"
+
+#: compose.c:165
+#, fuzzy
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"þ(i)frele, i(m)zala, (f)arklý imzala, i(k)isi de, mi(c) algoritmini seç "
+"yoksa i(p)talmý? "
+
+#: compose.c:166
+msgid "esabf"
+msgstr "imfkcp"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Farklý imzala: "
+
+#: compose.c:227
+#, fuzzy
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"þ(i)frele, i(m)zala, (f)arklý imzala, i(k)isi de, mi(c) algoritmini seç "
+"yoksa i(p)talmý? "
+
+#: compose.c:228
+#, fuzzy
+msgid "eswabf"
+msgstr "imfkcp"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+
+#: compose.c:238
+msgid "12345f"
+msgstr ""
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] yok!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] deðiþtirildi. Þekillenmeyi yenileyim mi?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- Eklentiler"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr ""
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Geriye kalan tek eklentii silemezsin."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr ""
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "Seçili dosyalar ekleniyor..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "%s'yi ekleyemedim!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "Iletiye eklenecek iletiyi seçilecek eposta kutusunu seç"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "Bu klasörde ileti yok."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Eklemek istediðin iletiler iþaretlenecektir!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "Eklenemedi!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr ""
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "Geçerli eklenti dönüþtürülmeyecektir."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "Geçerli eklenti dönüþtürülecektir."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "Geçersiz þekillendirme."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "Bu iletinin bir kopyasýný kaydedeyim mi?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "Adýný deðiþtir: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, fuzzy, c-format
+msgid "Can't stat %s: %s"
+msgstr "Stat edemedim : %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "Yeni dosya: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Içerik-tipi temel/altçeþit þeklindedir"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "Bilinmeyen içerik tipi %s"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "Dosya %s yaratýlamadý"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "Eklenti yaparak burada bir hata oluþtu"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "Iletiyi kaydediyem mi?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "Iletiye eposta kutuma yaz"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "Ileti %s iye yazýlýyor..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "Ileti yazýldý."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr ""
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr ""
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr ""
+
+#: crypt.c:71
+#, fuzzy, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- PGP geri verisi (geçerli zaman: %c) --]\n"
+
+#: crypt.c:86
+#, fuzzy
+msgid "Passphrase(s) forgotten."
+msgstr "PGP parolasý unutuldu."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "PGP parolasýný verin:"
+
+#: crypt.c:147
+#, fuzzy
+msgid "Enter SMIME passphrase:"
+msgstr "PGP parolasýný verin:"
+
+#: crypt.c:192
+#, fuzzy
+msgid "Create a traditional (inline) PGP message?"
+msgstr "application/pgp iletisi yaratýlsýn mý?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "PGP'yi çaðýrýlýyor..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr ""
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr ""
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr ""
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- Hata: Hatalý multipart/signed þekili! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- Hata: Bilinmeyen multipart/signed protokolu %s! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Ikaz: %s/%s imzalarý doðrulanamýyor. --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+#, fuzzy
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- Bu bilgi imzalanmýþtýr --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- Ikaz: Hiç bir imza bulunmamýþtýr. --]\n"
+"\n"
+
+#: crypt.c:924
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Imzalanmýþ bilginin sonu --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr "evet"
+
+#: curs_lib.c:158
+msgid "no"
+msgstr "hayýr"
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "Mutt'tan çýkýlsýn mý?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "bilinmeyen hata"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "Devam etmek için bir tuþa bas..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " (sýralama için '?' iye bas): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "Hiç bir eposta kutusu açýk deðil."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "Ileti yok."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "eposta kutusu salt-okunur."
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "Iþlev ileti eklentie mödüsünde yasaktýr."
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "Görünebilir ileti yok."
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "Salt-okunur bir eposta kutusu yazýlabilir yapýlamaz!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "Klasöre olan deðiþiklikler çýkýþta kaydedilecektir."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "Klasöre olan deðiþiklikler kaydedilmeyecektir."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "Çýk"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "Kaydet"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Gönder"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "Cevap"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "K. Cevap"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "Eposta kutusu deðiþtirilmiþ. Bazý iþaretlet hatalý olabilir."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Yeni eposta var!"
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "Eposta kutusu deðiþtirilmiþ."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "Iþaretli ileti yok."
+
+#: curs_main.c:653 menu.c:896
+#, fuzzy
+msgid "Nothing to do."
+msgstr "%s'e baðlanýlýyor..."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Iletiye geç: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "Argüman bir ileti numarasý olmak zorunda."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Bu ileti görünemez."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "Geçersiz ileti numarasý."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "Tabire uyan iletileri sil: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "Sýnýrlandýrma tabiri kullanýmda deðildir."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "Sýnýr : %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "Tabire uyan iletilere sýnýrla: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "Mutt'tan çýkýlsýn mý?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "Tabire uyan iletileri iþaretle: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "Tabire uyan iletileri kurtar: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "Tabire uyan iletilerden iþareti sil: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "Eposta kutusunu salt-okunur aç"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "eposta kutusunu aç"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s bir eposta kutusu deðildir!"
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "Mutt'tan kaydedilmeden çýkýlsýn mý?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "Son iletidesiniz."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "Kurtarýlan ileti yok."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "Ilk iletidesiniz."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "Arama baþa döndü."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "Arama sona ulaþtý."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "Yeni ileti yok"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "Okunmamýþ ileti yok"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " bu sýnýrlandýrýlmýþ bakýþta"
+
+#: curs_main.c:1405 pager.c:2337
+#, fuzzy
+msgid "Can't change 'important' flag on POP server."
+msgstr "Ileti POP sunucusunda deðiþtirilenemedi."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "Daha fazla konum yok."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "Ilk konumdasýnýz."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "Konumlaþtýrma kapalýdýr."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "Konum okunmamýþ ileti içeriyor."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "Ileti POP sunucusunda deðiþtirilenemedi."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\ttek bir ~ içeren bir satýrý baþa ekle\n"
+"~b isimler\tisimleri görünmez kopya listesine (BCC) ekle\n"
+"~c isimler\tisimleri görünür kopya listesine (CC) ekle\n"
+"~f iletiler\tiletileri içer\n"
+"~F iletiler\t~f'ye benzer fakat bu seçenek baþlýklarý da içerir\n"
+"~h\t\tileti baþlýðýný deðiþtir\n"
+"~m iletiler\tiletileri içer ve cevap ver\n"
+"~M iletiler\t~m gibi fakat bu seçenek baþlýklarý da içerir\n"
+"~p\t\tiletiyi yazdýrýr\n"
+"~q\t\tdosyayý kaydedip editörden çýk\n"
+"~r dosya\t\tdosyayý editörle aç\n"
+"~t isimler\tisimleri gönderilenler listesine ekle\n"
+"~u\t\tson satýrý tekrar et\n"
+"~v\t\tiletiyi $visual editörüyle düzenle\n"
+"~w dosya\t\tiletiyi dosyaya kaydet\n"
+"~x\t\tdeðiþiklikleri iptal et ve editörden çýk\n"
+"~?\t\tbu ileti\n"
+".\t\tsatýrda tek bir . iþlevi bitirir\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d : geçersiz ileti numarasý.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(Iletiyi '.' içerikli bir satýrla bitir)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "Eposta kutusu yok.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Ileti içeriði:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(devam et)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "eksik dosya ismi.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "Iletide satýr yok.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr ""
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s : bilinmeyen editör komutasý (~?'le yardým iste)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "geçici dizini yaratamadým : %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "geçici eposta dizinini yaratamadým : %s"
+
+#: editmsg.c:101
+#, fuzzy, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "geçici eposta dizinini yaratamadým : %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "Ileti dosyasý boþ!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "Ileti deðiþtirilmedi!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "Ileti dosyasý %s'yi açamadým"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "%s dizinine eklenemiyor"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "Hata. Geçici dosya %s korunmaya alýndý"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "Iþareti otur"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Iþareti temizle"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[-- Hata:  Multipart/Alternative bölümlerinin hiç bir bölümü gösterilemiyor! "
+"--]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- Eklenti #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- Tip: %s/%s, Þekillendirme: %s, Boyut: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- %s ile gösteriliyor --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Otomatik gösterme komuatasý: %s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- %s çalýþtýrýlamadý --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- %s ile otomatik gösterme hatasý --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr "[-- Hata: message/external-bods hiç bir eriþim tipi belirlemiyor --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- Bu %s/%s eklentisi"
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(boyut %s bayt) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "silinmiþtir --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- %s'de --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- isim: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, fuzzy, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- Bu %s/%s eklentisi"
+
+#: handler.c:1689
+#, fuzzy
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+"[-- Bu %s/%s eklentisi içerilmiyor, --]\n"
+"[-- ve ima edilen kaynaðýn geçerliliði --]\n"
+"[-- de bitti. --]\n"
+
+#: handler.c:1707
+#, fuzzy, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr ""
+"[-- Bu %s/%s eklentisi içerilmiyor, --]\n"
+"[-- ve ima edilen eriþme tipi %s de desteklenmiyor --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "Hata: multipart/signed protokolu yok."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "Hata: multipart/encrypted protokol verisi yok!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "Geçici dosyayý açamadým!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s desteklenmiyor "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "('%s' ile bu bölüme bakabilirsiniz)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr ""
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: dosyayý eklenemiyor"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "HATA: bu hatayý lütfen rapor edin"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<BILINMIYOR>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "%s yardýmý"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr ""
+
+#: hook.c:254
+#, fuzzy, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "%s: bilinmeyen tip"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr ""
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "Doðrulamacýlar eriþilir deðil"
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "Doðrulanýyor (anonim)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "Anonim doðrulama baþarýsýz oldu."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "Doðrulanýyor (CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "CRAM-MD5 doðrulamasý baþarýsýz oldu."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "Doðrulanýyor (GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "GSSAPI doðrulamasý baþarýsýz oldu."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "Bu sunucuda LOGIN kapalýdýr."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "Giriþ yapýlýyor..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "Giriþ baþarýsýz oldu."
+
+#: imap/auth_sasl.c:112
+#, fuzzy, c-format
+msgid "Authenticating (%s)..."
+msgstr "Doðrulanýyor (APOP)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "SASL doðrulamasý baþarasýz oldu."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr ""
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "Isim yüzeyleri alýnýyor..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "Dizin listesi alýnýyor..."
+
+#: imap/browse.c:219
+#, fuzzy
+msgid "No such folder"
+msgstr "%s : böyle bir renk yok"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "Eposta kutusunu yarat:"
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "Her eposta kutusunun ismi olmak zorunda."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "Eposta kutusu yaratýldý."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "Eposta kutusu kapatýldý"
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "Aðýr hata. Ileti sayýlarý karýþtý!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "Baðlantý %s kapatýlýyor..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Bu IMAP sunucusu çok eski. Mutt bu sunucuyla çalýþmaz."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "TLS ile güvenli baðlanýlsýn mý?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "TLS baðlantýsý kurulamadý"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "%s seçiliyor..."
+
+#: imap/imap.c:690
+#, fuzzy
+msgid "Error opening mailbox"
+msgstr "Eposta kutusunu yazarken hata oldu!"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "Bu sunucudaki IMAP eposta kutularýna ileti eklenemiyor"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "%s yaratýlsýn mý?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "IMAP sunucusuna varolan baðlantý kapatýlýyor..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "%d ileti silinmek için iþaretlenmiþ..."
+
+#: imap/imap.c:961
+#, fuzzy
+msgid "Expunge failed"
+msgstr "CLOSE baþarýsýz oldu"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "Ileti durum iþaretleri kaydediliyor... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "Iletileri sunucudan sil..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr ""
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "CLOSE baþarýsýz oldu"
+
+#: imap/imap.c:1342
+#, fuzzy
+msgid "Bad mailbox name"
+msgstr "Eposta kutusunu yarat:"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "%s'e abone olunuyor..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "%s'deki abonelik feshediliyor..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "Bu IMAP sunucu neslinden baþlýklarý alýnamýyor."
+
+#: imap/message.c:84
+#, fuzzy, c-format
+msgid "Could not create temporary file %s"
+msgstr "Geçici dosyayý yaratamadým!"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "Ileti baþlýklarýný alýnýyor... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "Ileti alýnýyor..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "Ileti sayýsý yanlýþtýr. Eposta kutusu yeniden açilmasý denenebilir."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "Ileti yükleniyor..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "%d ileti %s'e kopyalanýyor..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "%d ileti %s'e kopyalanýyor..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "Devam edilsin mi?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "alias: adres yok"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr ""
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "geçersiz baþlýk birimi"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: bilinmeyen sýralama tipi"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): tabirde hata var: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: bilinmeyen veri"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr ""
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr ""
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s oturtulmuþtur"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s oturtulamamýþtýr"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: geçersiz eposta tipi"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: geçersiz deðer"
+
+#: init.c:1312
+#, fuzzy, c-format
+msgid "%s: Unknown type."
+msgstr "%s: bilinmeyen tip"
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: bilinmeyen tip"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "Stat edemedim : %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s bir eposta kutusu deðildir!"
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "%s'de hata var, satýr %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: %s'de hatalar var"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: %s'de oluþan çok fazla hatadan dolayý okuma iptal edildi"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: %s'de hata var"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: çok fazla argüman"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: bilinmeyen komuta"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Komuta satrýnda hata: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "baþlangýç dizini belirlenemedi"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "kullanýcý adý belirlenemedi"
+
+#: keymap.c:455
+#, fuzzy
+msgid "Macro loop detected."
+msgstr "eposta kutusu silindi."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Tuþ ayarlanmamýþ."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Tuþ ayarlanmamýþ. Yardým için lütfen '%s' basýnýz."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: çok fazla argüman"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s: böyle bir mönü yoktur"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "boþ tuþ metni"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: çok fazla argüman"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s: haritada öyle bir iþlev yoktur"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: boþ tuþ metni"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: çok fazla argüman"
+
+#: keymap.c:871
+#, fuzzy
+msgid "exec: no arguments"
+msgstr "exec: yetersiz argüman sayýsý"
+
+#: keymap.c:891
+#, fuzzy, c-format
+msgid "%s: no such function"
+msgstr "%s: haritada öyle bir iþlev yoktur"
+
+#: keymap.c:912
+#, fuzzy
+msgid "Enter keys (^G to abort): "
+msgstr "%s için anahtar numarasýný belirleyin: "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr ""
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "belirlenmemiþ iþlem"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "mailcap birimlerini kullanarak eklentiyi zarureten göster"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "eklentiyi metin olarak göster"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "Altbölümlerin gösterilmesini aç/kapat"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "sayfanýn sonuna geç"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "iletiyi baþka bir kullanýcýya yeniden gönder"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "bu dizinde yeni bir dosya seç"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "dosyayý göster"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "seçili dosyanýn ismini göster"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "geçerli eposta kutusuna abone ol (sadece IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "geçerli eposta kutusuna varolan aboneliði fehset (sadece IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "yekin/abone olunan eposta kutusu bakýþlarý arasýnda geç (sadece IMAP)"
+
+#: keymap_alldefs.h:18
+#, fuzzy
+msgid "list mailboxes with new mail"
+msgstr "Yeni epostalý eposta kutusu yoktur."
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "dizin deðiþtir"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "eposta kutularýný yeni eposta için kontrol et"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "bu iletiye dosya ekle"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "bu iletiye ileti ekle"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "BCC listesini düzenle"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "CC listesini düzenle"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "eklenti anlatýmýný düzenle"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "eklenti þekillendirmesini düzenle"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "bu iletinin bir kopyasý kaydedilecek olan dosyayý belirt"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "eklenecek dosyayý düzenle"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "gönderen birimini düzenle"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "iletiyi baþlýklarýyla düzenle"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "iletiyi düzenle"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "eklentiyi mailcap birimi sayesinde düzenle"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "Reply-To birimini düzenle"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "bu iletini konusunu düzenle"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "gönderilen listesini düzenle"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "yeni bir eposta kutusu yarat (sadece IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "eklenti içerik tipini düzenle"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "bir eklentinin geçici bir kopyasýný elde et"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "iletiye ispell komutasýný uygula"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "mailcap birimlerini kullanarak yeni bir eklenti düzenle"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr ""
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "bu iletiyi sonra göndermek üzere kaydet"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "eklenmiþ bir dosyayý yeniden adlandýr/taþý"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "iletiyi gönder"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr ""
+
+#: keymap_alldefs.h:46
+#, fuzzy
+msgid "toggle whether to delete file after sending it"
+msgstr "sadece eposta kutularýný mý yoksa yekin dosyalarý gezmesini aç/kapat"
+
+#: keymap_alldefs.h:47
+#, fuzzy
+msgid "update an attachment's encoding info"
+msgstr "eklenti þekillendirmesini düzenle"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "iletiyi bir klasöre yaz"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "bir iletiyi bir dosyaya/eposta kutusuna kopyala"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "gönderenden yola çýkarak bir lakap yarat"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "birimi ekran sonuna taþý"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "birimi ekran ortasýna taþý"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "birimi ekran baþýna taþý"
+
+#: keymap_alldefs.h:54
+#, fuzzy
+msgid "make decoded (text/plain) copy"
+msgstr "çözülmüþ kopya yarat"
+
+#: keymap_alldefs.h:55
+#, fuzzy
+msgid "make decoded copy (text/plain) and delete"
+msgstr "çözülmüþ kopyasýný yarat ve sil"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "geçerli birimi sil"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "geçerli eposta kutusunu sil (sadece IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "altkonumdaki yekin iletileri sil"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "konumdaki yekin iletileri sil"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "gönderenin tam adresini göster"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr ""
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "bir iletiyi göster"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "kaynak iletiyi düzenle"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "imleçin önündeki harfi sil"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "imleçi bir harf sola taþý"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "imleçi kelime baþýna taþý"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "satýr baþýna geç"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "eposta kutularý arasýnda gezin"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "dosya adýný yada lakabý tamamla"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "adresi bir sorgulamayla tamamla"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "imleçin altýndaki harfi sil"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "satýr sonuna geç"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "imleçi bir harf saða taþý"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "imleçi kelime sonuna taþý"
+
+#: keymap_alldefs.h:75
+#, fuzzy
+msgid "scroll down through the history list"
+msgstr "geçmiþler listesinde yukarý çýk"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "geçmiþler listesinde yukarý çýk"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "imleçten satýr sonuna kadar olan harfleri sil"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "imleçten kelime sonuna kadar olan harfleri sil"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "satýrdaki yekin harfleri sil"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "imleçin önündeki kelimeyi sil"
+
+#: keymap_alldefs.h:81
+#, fuzzy
+msgid "quote the next typed key"
+msgstr "önümüzdeki konuma geç"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr ""
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "kelimeyi büyük yaz"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "kelimeyi ufak yazýlýma geçir"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "kelimeyi büyük yazýlýma geçir"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "bir muttrc komutasý belirle"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "bir dosya maskesi belirle"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "bu mönüden çýk"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "eklentii bir komuta yoluyla filtrala"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "ilk birime geç"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "iletinin 'önemli' durumunu aç/kapat"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "bir iletiyi anlatýmlarla ilet"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "geçerli iletiye geç"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "yekin alýcýlara cevap ver"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "yarým sayfa aþaða geç"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "yarým sayfa yukarý geç"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "bu ekran"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "endeks sayýsýna geç"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "son birime geç"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "belirlenmiþ eposta listesine cevap ver"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "bir macro çalýþtýr"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "yeni bir eposta iletisi yarat"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "baþka bir dizin yarat"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "baþka bir dizini salt okunur aç"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "iletinin durumunu temizle"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "tabire uyan iletileri sil"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "IMAP sunucularýndan eposta alýmýný zorla"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "POP sunucusundan epostalarý al"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "ilk iletiye geç"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "son iletiye geç"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "sadece tabire uyan iletileri göster"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "önümüzdeki yeni iletiye geç"
+
+#: keymap_alldefs.h:113
+#, fuzzy
+msgid "jump to the next new or unread message"
+msgstr "önümüzdeki okunmamýþ iletiye geç"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "önümüzdeki alt-konuma geç"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "önümüzdeki konuma geç"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "önümüzdeki silinmemiþ iletiye geç"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "önümüzdeki okunmamýþ iletiye geç"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "konumdaki ana iletiye geç"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "önceki konuma geç"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "önceki alt-konuma geç"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "önceki silinmemiþ iletiye geç"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "önceki yeni iletiye geç"
+
+#: keymap_alldefs.h:123
+#, fuzzy
+msgid "jump to the previous new or unread message"
+msgstr "önceki okunmamýþ iletiye geç"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "önceki okunmamýþ iletiye geç"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "geçerli konumu okunmuþ olarak iþaretle"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "geçerli alt-konumu okunmuþ olarak iþaretle"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "bir iletinin durumunu belirle"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "eposta kutusuna yapýlan deðiþiklikleri kaydet"
+
+#: keymap_alldefs.h:129
+#, fuzzy
+msgid "tag messages matching a pattern"
+msgstr "tabire uyan iletileri sil"
+
+#: keymap_alldefs.h:130
+#, fuzzy
+msgid "undelete messages matching a pattern"
+msgstr "tabire uyan iletileri sil"
+
+#: keymap_alldefs.h:131
+#, fuzzy
+msgid "untag messages matching a pattern"
+msgstr "tabire uyan iletileri sil"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "sayfanýn ortasýna geç"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "önümüzdeki birime geç"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "bir satýr aþaða in"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "önümüzdeki sayfaya geç"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "iletinin sonuna geç"
+
+#: keymap_alldefs.h:137
+#, fuzzy
+msgid "toggle display of quoted text"
+msgstr "Altbölümlerin gösterilmesini aç/kapat"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr ""
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "iletinin baþýna geç"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "ileti/eklentii bir komutaya boru yoluyla filtrala"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "önceki birime geç"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "bir satýr yukarý çýk"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "önceki sayfaya geç"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "geçerli birimi yazdýrt"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "adresler için baþka bir uygulamayý sorgula"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "yeni sorgulama sonuçlarýný geçerli sonuçlara ekle"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "eposta kutusuna yapýlan deðiþiklikleri kaydet ve çýk"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "kenara býrakýlmýþ iletiyi yeniden düzenle"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "ekraný tamizle ve yeniden göster"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{iç kullaným}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "bir iletiye cevap ver"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "geçerli iletiyi yeni bir ileti için örnek olarak kullan"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "iletiyi/eklentiyi dosyaya kaydet"
+
+#: keymap_alldefs.h:154
+#, fuzzy
+msgid "search for a regular expression"
+msgstr "tabirde hata var"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr ""
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "önümüzdeki eþleþimi ara"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "önümüzdeki eþleþimi ters yönden ara"
+
+#: keymap_alldefs.h:158
+#, fuzzy
+msgid "toggle search pattern coloring"
+msgstr "Arama tabiri yok."
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "bir alt-kabukta bir komuta çalýþtýr"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "iletileri sýralandýr"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "iletileri ters sýrala"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "geçerli birimi iþaretle"
+
+#: keymap_alldefs.h:163
+#, fuzzy
+msgid "apply next function to tagged messages"
+msgstr "Iþaretli hýc bir ileti yok."
+
+#: keymap_alldefs.h:164
+#, fuzzy
+msgid "apply next function ONLY to tagged messages"
+msgstr "Iþaretli hýc bir ileti yok."
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "geçerli alt-konumu iþaretle"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "geçerli konumu iþaretle"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "bir iletinin 'yeni' iþaretini aç/kapat"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "eposta kutusunun yeniden yazýlmasýný aç/kapat"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "sadece eposta kutularýný mý yoksa yekin dosyalarý gezmesini aç/kapat"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "sayfanýn baþýna geç"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "geçerli birimi kurtar"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "konumdaki yekin iletileri kurtar"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "alt-konumdaki yekin iletileri kurtar"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "Mutt sürümünü ve tarihini göster ve çýk"
+
+#: keymap_alldefs.h:175
+#, fuzzy
+msgid "view attachment using mailcap entry if necessary"
+msgstr "eklentiyi mailcap birimi sayesinde düzenle"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "MIME eklentileri göster"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr ""
+
+#: keymap_alldefs.h:178
+#, fuzzy
+msgid "show currently active limit pattern"
+msgstr "sadece tabire uyan iletileri göster"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "geçerli konumu göster/gizle"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "yekin konumlarý göster/gizle"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "bir PGP resmi anahtarý ekle"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "PGP ayarlarýný göster"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "bir PGP resmi anahtarý gönder"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "bir PGP resmi anahtarý doðrula"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "anahtarýn kullanýcý numarasýný göster"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "klasik pgp için ara"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr ""
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr ""
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr ""
+
+#: keymap_alldefs.h:190
+#, fuzzy
+msgid "Delete a remailer from the chain"
+msgstr "satýrdaki yekin harfleri sil"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr ""
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr ""
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr ""
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "çözülmüþ kopyasýný yarat ve sil"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "çözülmüþ kopya yarat"
+
+#: keymap_alldefs.h:196
+#, fuzzy
+msgid "wipe passphrase(s) from memory"
+msgstr "PGP parolasý unutuldu."
+
+#: keymap_alldefs.h:197
+#, fuzzy
+msgid "extract supported public keys"
+msgstr "PGP resmi anahtarlarý çýkar"
+
+#: keymap_alldefs.h:198
+#, fuzzy
+msgid "show S/MIME options"
+msgstr "PGP ayarlarýný göster"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "Bellek iflasý ,-)"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"Yazarlara ulaþmak içim lütfen <mutt-dev@mutt.org> listesine eposta "
+"gönderin.\n"
+"Bir hata raporunu göndermek için lütfen flea(1) uygulamasýný kullanýn.\n"
+
+#: main.c:50
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Telif hakký (C) 1996-2001 Michal R. Elkins ve baþkalarý.\n"
+"Mutt hiçbir garantiyle gelmez; daha fazla bilgi için 'mutt -vv' çalýþtýr.\n"
+"Mutt GPL lisansý altýnda yayýnlanmýþtýr ve daha fazla\n"
+"bilgi için 'mutt -vv' çalýþtýrabilirsiniz.\n"
+
+#: main.c:56
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+
+#: main.c:94
+#, fuzzy
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"yardým:mutt [ -nRyzZ ] [ -e <komuta> ] [ -F <dosya> ] [ -m <tip> ] [ -f "
+"<dosya ]\n"
+"\tmutt [ -nx ] [ -e <komuta> ] [ -a <dosya> ] [ -F <dosya> ] [ -H <dosya> ] "
+"[-i <dosya> ] [ -s <konu> ] [ -b <adres> ] [ -c <adres> ] <adres> [ ... ]\n"
+"\tmutt [ -n ] [ -e  <komuta> ] [ -F <dosya> ] -p\n"
+"\tmutt -v[v]\n"
+"\n"
+"seçenekler:\n"
+"  -a <dosya>\tiletiye bir dosya ekle\n"
+"  -b <adres>\tbir görünmez kopya adresi (BCC) belirler\n"
+"  -c <adres>\tbir kopya adresi (CC) belirler\n"
+"  -e <komuta>\tbaþlangýçta çalýþtýrýlacak bir komuta belirler\n"
+"  -f <dosya>\tokunacak eposta kutusunu belirler\n"
+"  -F <dosya>\tvarsayýlan muttrc dosyasýna rakip bir dosya belirler\n"
+"  -H <dosya>\tbaþlýðýn okunacak olduðu örnek bir dosya\n"
+"  -i <dosya>\ther cevapta içerilecek bir eklentiyi belirler\n"
+"  -m <tip>\teposta kutularýnýn varsayýlan tipini belirler\n"
+"  -n\t\tMutt'ý sistemdeki Muttrc dosyasýný okumasýndan men eder\n"
+"  -p\t\tbir kaydedilmiþ/býrakýlmýþ iletiyi belirtler\n"
+"  -R\t\teposta kutusunu salt-okunur açar\n"
+"  -s <konu>\tkonuyu belirler\n"
+"  -v\t\tnesil ve denetleme bilgilerini gösterir\n"
+"  -x\t\tmailx gönderme modüsünü taklit et\n"
+"  -y\t\t'mailboxes' listesinde belirtilen bir eposta kutusunu belirler\n"
+"  -z\t\teposta kutusunda ileti yoksa, hemen çýk\n"
+"  -Z\t\tyeni ileti içeren ilk klasörü göster, yeni ileti yoksa hemen çýk\n"
+"  -h\t\tbu yardým iletisini göster"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"Denetleme seçenekleri:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "Komutayý baþlatýrken hata oldu."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "%d seviyesinde bilgilendirme iletileri gösteriliyor.\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "DEBUG (bilgilendir iletileri) derleme sýrasýnda belirlenmemiþ.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s yok. Yaratýlsýn mý?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "%s: %s yaratýlanamadý."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "Alýcýlar belirlenmedi.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: dosya eklenemedi.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "Yeni epostalý eposta kutusu yoktur."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "Gelen kutularý belirlenmedi."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "Eposta kutusu boþtur."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "%s okunuyor... %d (%%%d)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "Eposta kutusu bozuktur!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "Eposta kutusu bozulmuþtur!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "Aðýr hata! Eposta kutusunu yeniden açamadým!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "Eposta kutusunu kilitleyemedim!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr ""
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "Iletiler yazýlýyor... %d (%%%d)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+#, fuzzy
+msgid "Committing changes..."
+msgstr "Arama tabiri denetleniyor..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "Yazma baþarýsýz oldu! Eposta kutusunun bir bölümü %s'ye yazýlmýþtýr"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "Eposta kutusu yeniden açýlanamadý!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "Eposta kutusu yeniden açýlýyor..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Geç: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "Geçersiz sýralama numarasý."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "Birim yok."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "Daha alta geçmek mümkün deðildir."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "Daga yukarýya geçmek mümkün deðildir."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "Son sayfadasýnýz."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "Ilk sayfadasýnýz."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "Ilk birim gösteriliyor."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "son birim gösteriliyor."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "Son birimdesiniz."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "Ilk birimdesiniz."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "Ara: "
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "Ters ara: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "Arama tabiri yok."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "Bulunmadý."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "Iþaretlenmiþ birim yok."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "Bu mönüde arama þimdilik mümkün deðildir."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "Diyaloklar için hýzlý geçiþ þimdilik mümkün deðildir."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "Iþaretleme desteklenmiyor."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "%s okunuyor... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr ""
+
+#: muttlib.c:835
+#, fuzzy
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "Dosya bir dizin, dizin altýnda kaydedilsin mi?"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "Dosya bir dizin, dizin altýnda kaydedilsin mi?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "Dosyayý dizin altýnda kaydet: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "Dosya zaten var, ü(s)tüne yaz, (e)kle yoksa i(p)tal mý?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "sep"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "Ileti POP eposta kutusuna kaydedilmiyor."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s bir eposta kutusu deðil!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "Iletiler %s'e eklensin mi?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "%s'ye varolan baðlantý kapatýldý"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL eriþilir deðil."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "Önceden baðlanma komutasý baþarýsýz oldu."
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "%s'le konuþurken hata oldu (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr ""
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "%s aranýyor..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "Sunucu \"%s\" bulunamýyor."
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "%s'e baðlanýlýyor..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "%s (%s)'e baðlanýlýnamadý."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr ""
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr ""
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s güvenilir eriþim haklarýna sahip deðildir"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr ""
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr ""
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr ""
+
+#: mutt_ssl.c:324
+#, fuzzy, c-format
+msgid "SSL failed: %s"
+msgstr "CLOSE baþarýsýz oldu"
+
+#: mutt_ssl.c:333
+#, fuzzy
+msgid "Unable to get certificate from peer"
+msgstr "baþlangýç dizini belirlenemedi"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "%s (%s) kullanarak SSL baðlantýsý kuruluyor"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "Bilinmiyor"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[hesaplanamýyor]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[geçersiz tarih]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "Sunucu sertifikasý daha geçerli deðildir"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "Sunucu sertifikasýnýn süresi bitmiþtir"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "Sertifikanýn sahibi kuruluþ:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "Sertifikayý veren kuruluþ:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "Bu sertifika geçerlidir"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   %s'den"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "     %s'e"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "Parmak izi: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "SSL sertifika doðrulamasý"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(r)ed'et, (s)adece bu defa , (h)erzaman kabul et"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "rsh"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(r)ed'et, (s)adece bu defalýðýna kabul et"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "rs"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "Çýk  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "Ikaz: Sertifika kaydedilemedi"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "Sertifika kaydedildi"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Kilit sýnýrlandýrmasý aþýldý, %s için varolan kilit silinsin mi?"
+
+#: mx.c:128
+#, fuzzy, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "%s kilitlenemedi\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr ""
+
+#: mx.c:192
+#, fuzzy, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "Cevap bekleniyor..."
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr ""
+
+#: mx.c:227
+#, fuzzy, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "Cevap bekleniyor..."
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "%s kilitlenemedi\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "%s okunuyor..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "%s yazýlýyor..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "Eposta kutusu %s'yi eþitlenemedi!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "Okunan iletiler %s'e taþýnsýn mý?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Silmek için iþaretlenmiþ %d ileti silinsin mi?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Silmek için iþaretlenmiþ %d ileti silinsin mi?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "Okunan iletiler %s'e taþýnýyor..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "eposta kutusu deðiþtirilmedi."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d kaldý, %d taþýndý, %d silindi."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d kaldý, %d silindi."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr " Yazabilir yapmak icýn '%s'e basýlýr"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "'toggle-write' ile yeniden yazýlabilir yapabilinir!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "eposta kutusu yazýlamayabilir yapýldý. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "Eposta kutusu kontrol edildi."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "Iletiyi yazamadým"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "Bu mönüde yoktur."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "Sa. Geri"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "Sa. Ileri"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "Eklenti göster"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "Ileri"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "Iletinin sonu gösteriliyor."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "Iletinin baþý gösteriliyor."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "Geriye dönük ara: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "Ara: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "Yardým þu an gösteriliyor."
+
+#: pager.c:2104
+#, fuzzy
+msgid "No more quoted text."
+msgstr "Daha fazla konum yok."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr ""
+
+#: parse.c:597
+#, fuzzy
+msgid "multipart message has no boundary parameter!"
+msgstr "Hata: multipart/encrypted protokol verisi yok!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "Tabirde hata var: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "Geçersiz ay günü: %s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "Geçersiz ay : %s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "Geçersiz rölatif tarih: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "tabirde hata var"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "tabirde %s'de hata var"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c : geçersiz komuta"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c : bu türde desteklenmiyor"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "eksik argüman"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "hatalý parantez : %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "boþ tabir"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr ""
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "Arama tabiri denetleniyor..."
+
+#: pattern.c:1134
+#, fuzzy
+msgid "Executing command on matching messages..."
+msgstr "Yeni ileti için bakýlýyor..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "Tabire uygun ileti yok."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr ""
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr ""
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "Arama iptal edildi."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "PGP parolasý unutuldu."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- Hata: PGP altiþlemi yaratýlamadý! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- PGP geri verisi sonu --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PGP ILETISI BAÞI --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- PGP RESMI ANAHTAR BÖLÜMÜ BAÞI --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PGP IMZALANMIÞ ILETI BAÞI --]\n"
+"\n"
+
+#: pgp.c:381
+#, fuzzy
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr ""
+"\n"
+"[-- PGP ILETI SONU --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- PGP RESMI ANAHTAR BÖLÜMÜ SONU --]\n"
+
+#: pgp.c:385
+#, fuzzy
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr ""
+"\n"
+"[-- PGP IMZALANMIÞ ILETI SONU --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- Hata: PGP iletisinin baþýný bulamadým! --]\n"
+"\n"
+
+#: pgp.c:662
+#, fuzzy
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "Iç hata. Thomas R. <roessler@guug.de>'ye haber ver."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- Hata: PGP altiþlemini yaratamadým! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- Hata: Hatalý PGP/MIME iletisi! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- Hata: geçici dosya yaratýlamýyor! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- Bu bilgi PGP/MIME ile þifrelenmiþtir --]\n"
+"\n"
+
+#: pgp.c:863
+#, fuzzy
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr ""
+"\n"
+"[-- PGP/MIME ile þifrelenmiþ bilgi sonu --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "PGP altiþlemi açýlamýyor!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "%s için anahtar numara = \"%s\" kullanýlsýn mý?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "%s için anahtar numarasýný belirleyin: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "PGP çalýþtýrýlamýyor"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "PGP anahtarý alýnýyor..."
+
+#: pgpkey.c:486
+#, fuzzy
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "Yekin uyan anahtarlarýn süresi bitti yada geri alýndý."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Seç  "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "Anahtarý kontrol et  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "<%s>'e uyan PGP anahtarlarý."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "\"%s\"'e uyan PGP anahtarlarý."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "/dev/null'ý açamadým"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "Geçici dosyayý yaratamadým"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "Anahtar numara: 0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "Bu anahtar kullanýlamaz: süresi bitti/kapalý/geriye alýndý."
+
+#: pgpkey.c:608
+#, fuzzy
+msgid "ID is expired/disabled/revoked."
+msgstr "Bu anahtarýn süresi bitti/kapalý/geriye alýndý."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr ""
+
+#: pgpkey.c:615
+#, fuzzy
+msgid "ID is not valid."
+msgstr "Bu anahtar numarasýna güvenilmiyor."
+
+#: pgpkey.c:618
+#, fuzzy
+msgid "ID is only marginally valid."
+msgstr "Bu anahtar numarasýna çok az güveniliyor."
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s Gerçekten bu anahtarý kullanmak ister misiniz?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "Anahtar numarasýný belirle: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "Pgp çalýþtýrýlýyor...."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "PGP anahtarý %s."
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "\"%s\" tabirine uyan anahtarlar aranýyor..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "TOP komutasý sunucu tarafýndan desteklenmiyor."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "Baþlýðý geçici bir dosyaya yazamadým!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "UIDL komutasý sunucu tarafýndan desteklenmiyor."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr ""
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "Ileti listesi alýnýyor..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "iletiyi geçici bir dosyaya yazýlamadý!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "Yeni ileti için bakýlýyor..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "POP sunucusu belirlenmedi."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "POP eposta kutusunda yeni eposta yok."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "Iletiler sunucudan silinsin mi?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "Yeni iletileri okunuyor (%d bayt)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "Eposta kutusunu yazarken hata oldu!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%1$s [ %3$d iletiden %2$d ileti okundu]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "Sunucu baðlantýyý kesti!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "Doðrulanýyor (SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "Doðrulanýyor (APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "APOP doðrulamasý baþarýsýz oldu."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "Sunucu USER komutasýný desteklentiiyor."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "Iletiler sunucuda býrakýlamýyor."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "%s'e baðlanýlýrken hata oldu"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "POP sunucuya varolan baðlantý kapatýlýyor..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "Ileti sayýsýný doðrula..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "Baðlantý kayboldu. Yeniden POP sunucusuna baðlanýlsýn mý?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "Kaydedilmiþ iletiler"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "Kaydedilmiþ ileti yok."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "Geçersiz PGP baþlýðý"
+
+#: postpone.c:479
+#, fuzzy
+msgid "Illegal S/MIME header"
+msgstr "Geçersiz PGP baþlýðý"
+
+#: postpone.c:554
+#, fuzzy
+msgid "Decryption failed."
+msgstr "Giriþ baþarýsýz oldu."
+
+#: query.c:46
+msgid "New Query"
+msgstr "Yeni sorgulama"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "Lakap yarat"
+
+#: query.c:48
+msgid "Search"
+msgstr "Ara"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "Cevap bekleniyor..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "Sorgulama komutasý belirlenmedi."
+
+#: query.c:286
+msgid "Query"
+msgstr "Sorgula"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "Sorgulama: "
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "Sorgulama '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "Boru"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "Yazdýr"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "Kaydediliyor..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "Eklenti kaydedildi."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "IKAZ!   %s'nin üstüne yazmak üzeresin, devam edilsin mi?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "Eklentiler filtra edildi."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "Filtra: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "Borula: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "%s eklentilerinin nasýl yazdýrýlacaðý bilinmiyor!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "Iþaretli ileti(leri) yazýlsýn mý?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "Eklenti yazdýrýlsýn mý?"
+
+#: recvattach.c:938
+#, fuzzy
+msgid "Can't decrypt encrypted message!"
+msgstr "Iþaretli hýc bir ileti yok."
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "Eklentiler"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "Gösterilecek altbölümler yok!"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "Eklenti POP sunucusundan silinemiyor."
+
+#: recvattach.c:1056
+#, fuzzy
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "PGP iletilerinin eklentilerinin silinmesi desteklenmiyor."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr ""
+"Sadece birden fazla bölümden oluþan eklentilerin silinmesi destekleniyor."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "Sadece ileti yada RFC822 bölümleri iletilebilir."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing message!"
+msgstr "Iletiyi gönderirken hata oldu."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing messages!"
+msgstr "Iletiyi gönderirken hata oldu."
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "Geçici dosya %s'yi açamadým."
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "Eklenti olarak iletilsin mi?"
+
+#: recvcmd.c:458
+#, fuzzy
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+"Yekin iþaretlenmiþ eklentiler çözülemiyor. Geriye kalanlar MIME'yle "
+"þekillendirilsin mi?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr ""
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "%s yaratýlamadý."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "Iþaretli hýc bir ileti yok."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "Eposta listesi bulunamadý!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+"Yekin iþaretlenmiþ eklentiler çözülemiyor. Geriye kalanlar MIME'yle "
+"þekillendirilsin mi?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "Ekle"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "Içer"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "Sil"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "Oldu"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr ""
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr ""
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr ""
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr ""
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr ""
+
+#: remailer.c:661
+#, fuzzy
+msgid "You already have the first chain element selected."
+msgstr "Ilk iletidesiniz."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr ""
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Mixmaster Cc yada Bcc baþlýklarý kabul etmez."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr "Mixmaster kullanýrken yerel makina adý doðru belirtilmesi lazým!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "Iletiyi gönderirken hata oldu, altiþlem %d ile bitirildi.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "Iletiyi gönderirken hata oldu."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "\"%2$s\"'de satýr %3$d'de tip %1$s için hatalý birim vardýr"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "mailcap dizini belirlenmedi"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "%s için mailcap birimi bulunamadý"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "puan: yeterinden az argüman"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "puan: çok fazla argüman"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "Konu yok, iptal edilsin mi?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "Konu yok, iptal ediliyor."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "%s%s iye cevap verilsin mi?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "%s%s iye cevap gönderilsin mi?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "Hiç bir iþaretlenmiþ ileti gözükmüyor ki!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "Ileti cevap da içerilsin mi?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "Esas metin cevap bazý olarak kullanýlýyor..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "Istenilen her ileti içerilenemedi!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "Eklenti olarak iletilsin mi?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "Iletilmiþ ileti hazýrlanýyor..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Kaydedilmiþ ileti açýlsýn mý?"
+
+#: send.c:1336
+#, fuzzy
+msgid "Edit forwarded message?"
+msgstr "Iletilmiþ ileti hazýrlanýyor..."
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "Deðiþtirilmemiþ ileti iptal edilsin mi?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "Deðiþtirilmemiþ ileti iptal edildi."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "eposta gönderilmedi."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Ileti kaydedildi."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "Alýcý belirlenmemiþ!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "Alýcýlar belirlenmemiþ."
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "Konu yok, gönderme iptal edilsin mi?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "Konu belirlenmemiþ."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "Ileti gönderiliyor..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "Ileti gönderilemedi."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "eposta gönderildi."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "Ardalanda gönderiliyor."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "Sýnýrlandýrma verisi bulunamadý! [bu hata rapor edilmesi gerek]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s daha yok!"
+
+#: sendlib.c:916
+#, fuzzy, c-format
+msgid "%s isn't a regular file."
+msgstr "%s bir eposta kutusu deðildir!"
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "%s açýlanamadý"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "Ileti gönderilirken hata oldu, altiþlem %d ile iptal bitirildi (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Gönderme iþleminin geri verisi"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr ""
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s... Çýkýlýyor.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "%s yakalýnýyor... Çýkýlýyor.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "Sinyal %d alýndý... Çýkýlýyor.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr ""
+
+#: smime.c:303
+msgid "Verified  "
+msgstr ""
+
+#: smime.c:306
+msgid "Unverified"
+msgstr ""
+
+#: smime.c:309
+#, fuzzy
+msgid "Expired   "
+msgstr "Çýk  "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr ""
+
+#: smime.c:315
+#, fuzzy
+msgid "Invalid   "
+msgstr "Geçersiz ay : %s"
+
+#: smime.c:318
+#, fuzzy
+msgid "Unknown   "
+msgstr "Bilinmiyor"
+
+#: smime.c:347
+#, fuzzy
+msgid "Enter keyID: "
+msgstr "%s için anahtar numarasýný belirleyin: "
+
+#: smime.c:370
+#, fuzzy, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "\"%s\"'e uyan PGP anahtarlarý."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr ""
+
+#: smime.c:523 smime.c:592
+#, fuzzy, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "%s için anahtar numara = \"%s\" kullanýlsýn mý?"
+
+#: smime.c:526 smime.c:595
+#, fuzzy, c-format
+msgid "Use ID %s for %s ?"
+msgstr "%s için anahtar numara = \"%s\" kullanýlsýn mý?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr ""
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+#, fuzzy
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "[-- Hata: PGP altiþlemi yaratýlamadý! --]\n"
+
+#: smime.c:1197
+#, fuzzy
+msgid "no certfile"
+msgstr "Filtrayý yaratamadým"
+
+#: smime.c:1200
+#, fuzzy
+msgid "no mbox"
+msgstr "(eposta kutusu yok)"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr ""
+
+#: smime.c:1381
+#, fuzzy
+msgid "Warning: Intermediate certificate not found."
+msgstr "Ikaz: Sertifika kaydedilemedi"
+
+#: smime.c:1426
+#, fuzzy
+msgid "Can't open OpenSSL subprocess!"
+msgstr "PGP altiþlemi açýlamýyor!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr ""
+
+#: smime.c:1629 smime.c:1751
+#, fuzzy
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- PGP geri verisi sonu --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+#, fuzzy
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- Hata: PGP altiþlemi yaratýlamadý! --]\n"
+
+#: smime.c:1755
+#, fuzzy
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr ""
+"[-- Bu bilgi PGP/MIME ile þifrelenmiþtir --]\n"
+"\n"
+
+#: smime.c:1758
+#, fuzzy
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr ""
+"[-- Bu bilgi imzalanmýþtýr --]\n"
+"\n"
+
+#: smime.c:1822
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- PGP/MIME ile þifrelenmiþ bilgi sonu --]\n"
+
+#: smime.c:1824
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- Imzalanmýþ bilginin sonu --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "Eposta kutusu sýralanýyor..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "Sýralama iþlevi bulunamadý! [hata raporu yaz]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(eposta kutusu yok)"
+
+#: thread.c:1081
+#, fuzzy
+msgid "Parent message is not visible in this limited view."
+msgstr "Sýnýrlandýrýlmýþ bakýþta ana ileti görünemez."
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "Kök iletisi yok."
+
+#, fuzzy
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "Pgp çalýþtýrýlýyor...."
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "Ileti %s'e iletilsin mi...?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "Iletiler %s'e iletilsin mi...?"
+
+#, fuzzy
+#~ msgid "ewsabf"
+#~ msgstr "imfkcp"
+
+#, fuzzy
+#~ msgid "Certificate *NOT* added."
+#~ msgstr "Sertifika kaydedildi"
+
+#, fuzzy
+#~ msgid "This ID's validity level is undefined."
+#~ msgstr "Bu anahtar numarasýna olan güven belirlenmemiþ."
+
+#~ msgid "Decode-save"
+#~ msgstr "Çöz-kaydet"
+
+#~ msgid "Decode-copy"
+#~ msgstr "Çöz-kopyala"
+
+#~ msgid "Decrypt-save"
+#~ msgstr "Deþifre et-kaydet"
+
+#~ msgid "Decrypt-copy"
+#~ msgstr "Deþifre et-kopyala"
+
+#~ msgid "Copy"
+#~ msgstr "Kopyala"
+
+#~ msgid "%s [%s]\n"
+#~ msgstr "%s [%s]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "[-- End of PGP output --]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "[-- PGP geri veri sonu --]\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "Can't stat %s."
+#~ msgstr "Stat edemedim : %s"
+
+#~ msgid "%s: no such command"
+#~ msgstr "%s: böyle bir komuta yoktur"
+
+#~ msgid "Authentication method is unknown."
+#~ msgstr "Doðrulama metodu bilinmiyor."
diff --git a/po/uk.gmo b/po/uk.gmo
new file mode 100644 (file)
index 0000000..9b4f91f
Binary files /dev/null and b/po/uk.gmo differ
diff --git a/po/uk.po b/po/uk.po
new file mode 100644 (file)
index 0000000..d60d185
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,4336 @@
+# Ukrainian translation for Mutt.
+# Copyright (C) 1998 Free Software Foundation, Inc.
+# Andrej N. Gritsenko <andrej@lucky.net>, 1998-2001.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 1.3.27/1.4\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2002-01-23 15:14+0200\n"
+"Last-Translator: Andrej N. Gritsenko <andrej@lucky.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=koi8-u\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "ëÏÒÉÓÔÕ×ÁÞ Õ %s: "
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "ðÁÒÏÌØ ÄÌÑ %s@%s: "
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "÷ÉȦÄ"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "÷ÉÄ."
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "÷¦ÄÎ."
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "÷ɦÒ"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "ð¦ÄËÁÚËÁ"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "÷É ÎÅ ÍÁ¤ÔÅ ÖÏÄÎÏÇÏ ÐÓÅ×ÄÏΦÍÕ!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "ðÓÅ×ÄÏΦÍÉ"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "ðÓÅ×ÄÏΦ͠ÑË: "
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "÷É ×ÖÅ ÍÁ¤ÔÅ ÐÓÅ×ÄÏΦ͠ÎÁ ÃÅ ¦Í'Ñ!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr ""
+
+#: alias.c:279
+msgid "Address: "
+msgstr "áÄÒÅÓÁ: "
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr ""
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "ðÏ×ÎÅ ¦Í'Ñ: "
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] ÷¦ÒÎÏ?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "÷ÎÅÓÔÉ ÄÏ ÆÁÊÌÕ: "
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "ðÓÅ×ÄÏΦ͠ÄÏÄÁÎÏ."
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "îÅÍÁ¤ ×¦ÄÐÏצÄÎÏÇÏ ¦ÍÅΦ, ÄÁ̦?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "ëÏÍÐÏÎÕ×ÁÎÎÑ, ×ËÁÚÁÎÅ Õ mailcap, ÐÏÔÒÅÂÕ¤ %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "ðÏÍÉÌËÁ ×ÉËÏÎÁÎÎÑ \"%s\"!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "îÅ ×ÉÊÛÌϠצÄËÒÉÔÉ ÆÁÊÌ ÄÌÑ ÒÏÚÂÏÒÕ ÚÁÇÏÌÏ×ËÕ."
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "îÅ ×ÉÊÛÌϠצÄËÒÉÔÉ ÆÁÊÌ ÄÌÑ ÕÒ¦ÚÁÎÎÑ ÚÁÇÏÌÏ×ËÕ."
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "÷ mailcap ÎÅ ×ÉÚÎÁÞÅÎÏ ËÏÍÐÏÎÕ×ÁÎÎÑ %s, ÓÔ×ÏÒÅÎÏ ÐÏÒÏÖΦʠÆÁÊÌ."
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "òÅÄÁÇÕ×ÁÎÎÑ, ×ËÁÚÁÎÅ Õ mailcap, ÐÏÔÒÅÂÕ¤ %%s"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "÷ mailcap ÎÅ ×ÉÚÎÁÞÅÎÏ ÒÅÄÁÇÕ×ÁÎÎÑ %s"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "îÅ ÚÎÁÊÄÅÎϠצÄÏÍÏÓÔÅÊ Õ mailcap. ðÏËÁÚÁÎÏ ÑË ÔÅËÓÔ."
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "ôÉРMIME ÎÅ ×ÉÚÎÁÞÅÎÏ. îÅÍÏÖÌÉ×Ï ÐÏÂÁÞÉÔÉ ÄÏÄÁÔÏË."
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔɠƦÌØÔÒ"
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔɠƦÌØÔÒ"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "ú¦ʠÚÁÐÉÓÕ!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "îÅ ÚÎÁÀ, ÑË ÃÅ ÄÒÕËÕ×ÁÔÉ!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "ëÁÔÁÌÏÇ"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "íÁÓËÁ"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s ÎÅ ¤ ËÁÔÁÌÏÇÏÍ."
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "ðÏÛÔÏצ ÓËÒÉÎØËÉ [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "ð¦ÄÐÉÓÁΦ [%s] Ú ÍÁÓËÏÀ: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "ëÁÔÁÌÏÇ [%s] Ú ÍÁÓËÏÀ: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "îÅÍÏÖÌÉ×Ï ÄÏÄÁÔÉ ËÁÔÁÌÏÇ!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "îÅÍÁ¤ ÆÁÊ̦×, ÝϠצÄÐÏצÄÁÀÔØ ÍÁÓæ"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "óÔ×ÏÒÅÎÎѠЦÄÔÒÉÍÕ¤ÔØÓÑ ÌÉÛÅ ÄÌÑ ÓËÒÉÎØÏË IMAP"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "÷ÉÄÁÌÅÎÎѠЦÄÔÒÉÍÕ¤ÔØÓÑ ÌÉÛÅ ÄÌÑ ÓËÒÉÎØÏË IMAP"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "÷ÐÅ×ÎÅΦ Õ ×ÉÄÁÌÅÎΦ ÓËÒÉÎØËÉ \"%s\"?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ×ÉÄÁÌÅÎÏ."
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÎÅ ×ÉÄÁÌÅÎÏ."
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "ðÅÒÅÊÔÉ ÄÏ: "
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "ëÁÔÁÌÏÇ ÎÅ ÓËÁÎÕ¤ÔØÓÑ."
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "íÁÓËÁ: "
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "ú×ÏÒÏÔÎØÏ ÓÏÒÔÕ×ÁÔÉ ÚÁ ÄÁÔÏÀ(d), Ì¦ÔÅÒÏÀ(a), ÒÏÚͦÒÏÍ(s), ÞɠΦ(n)?"
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "óÏÒÔÕ×ÁÔÉ ÚÁ ÄÁÔÏÀ(d), Ì¦ÔÅÒÏÀ(a), ÒÏÚͦÒÏÍ(s), ÞɠΦ(n)?"
+
+#: browser.c:1049
+msgid "dazn"
+msgstr ""
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "¶Í'Ñ ÎÏ×ÏÇÏ ÆÁÊÌÕ: "
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "îÅÍÏÖÌÉ×Ï ÐÏÂÁÞÉÔÉ ËÁÔÁÌÏÇ"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "îÅÍÏÖÌÉ×Ï ÐÏÂÁÞÉÔÉ ÆÁÊÌ"
+
+#: buffy.c:442
+#, fuzzy
+msgid "New mail in "
+msgstr "îÏ×Á ÐÏÛÔÁ × %s."
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s: ËÏ̦ҠΊЦÄÔÒÉÍÕ¤ÔØÓÑ term"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s: ÔÁËÏÇÏ ËÏÌØÏÒÕ ÎÅÍÁ¤"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s: ÔÁËÏÇÏ ÏÂ'¤ËÔÕ ÎÅÍÁ¤"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s: ËÏÍÁÎÄÁ ÍÏÖÌÉ×Á Ô¦ÌØËÉ Õ ÓÐÉÓËÏצ ÌÉÓÔ¦×"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s: ÄÕÖÅ ÍÁÌÏ ÁÒÇÕÍÅÎÔ¦×"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "îÅÄÏÓÔÁÔÎØÏ ÁÒÇÕÍÅÎÔ¦×."
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "color: ÄÕÖÅ ÍÁÌÏ ÁÒÇÕÍÅÎÔ¦×"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "mono: ÄÕÖÅ ÍÁÌÏ ÁÒÇÕÍÅÎÔ¦×"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s: ÔÁËÏÇÏ ÁÔÒ¦ÂÕÔÕ ÎÅÍÁ¤"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "ÄÕÖÅ ÍÁÌÏ ÁÒÇÕÍÅÎÔ¦×"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "ÄÕÖÅ ÂÁÇÁÔÏ ÁÒÇÕÍÅÎÔ¦×"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "ËÏ̦Ҡdefault ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "ðÅÒÅצÒÉÔɠЦÄÐÉÓ PGP?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "îÅ ×ÉÊÛÌÏ ÓÔ×ÏÒÉÔÉ ÔÉÍÞÁÓÏ×ÉÊ ÆÁÊÌ!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔɠƦÌØÔҠצÄÏÂÒÁÖÅÎÎÑ"
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "îÅ ×ÉÊÛÌÏ ÓËÏЦÀ×ÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ"
+
+#: commands.c:182
+#, fuzzy
+msgid "S/MIME signature successfully verified."
+msgstr "ð¦ÄÐÉÓ PGP ÐÅÒÅצÒÅÎÏ."
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr ""
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+#, fuzzy
+msgid "S/MIME signature could NOT be verified."
+msgstr "ð¦ÄÐÉÓ PGP ÐÅÒÅצÒÉÔÉ ÎÅÍÏÖÌÉ×Ï."
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "ð¦ÄÐÉÓ PGP ÐÅÒÅצÒÅÎÏ."
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "ð¦ÄÐÉÓ PGP ÐÅÒÅצÒÉÔÉ ÎÅÍÏÖÌÉ×Ï."
+
+#: commands.c:223
+msgid "Command: "
+msgstr "ëÏÍÁÎÄÁ: "
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "îÁĦÓÌÁÔÉ ËÏЦÀ ÌÉÓÔÁ: "
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "îÁĦÓÌÁÔÉ ËÏЦ§ ×ÉĦÌÅÎÉÈ ÌÉÓÔ¦×: "
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "ðÏÍÉÌËÁ ÒÏÚÂÏÒÕ ÁÄÒÅÓÉ!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr ""
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "îÁĦÓÌÁÔÉ ËÏЦÀ ÌÉÓÔÁ %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "îÁĦÓÌÁÔÉ ËÏЦ§ ÌÉÓԦנ%s"
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Message not bounced."
+msgstr "ëÏЦÀ ÌÉÓÔÁ ÐÅÒÅÓÌÁÎÏ."
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Messages not bounced."
+msgstr "ëÏЦ§ ÌÉÓԦנÐÅÒÅÓÌÁÎÏ."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "ëÏЦÀ ÌÉÓÔÁ ÐÅÒÅÓÌÁÎÏ."
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "ëÏЦ§ ÌÉÓԦנÐÅÒÅÓÌÁÎÏ."
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ ÐÒÏÃÅӠƦÌØÔÒÕ"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "ðÅÒÅÄÁÔÉ ÄÏ ÐÒÏÇÒÁÍÉ: "
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "ëÏÍÁÎÄÕ ÄÌÑ ÄÒÕËÕ ÎÅ ×ÉÚÎÁÞÅÎÏ."
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "äÒÕËÕ×ÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "äÒÕËÕ×ÁÔÉ ×ÉĦÌÅΦ ÐÏצÄÏÍÌÅÎÎÑ?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "ðÏצÄÏÍÌÅÎÎÑ ÎÁÄÒÕËÏ×ÁÎÏ"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "ðÏצÄÏÍÌÅÎÎÑ ÎÁÄÒÕËÏ×ÁÎÏ"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "ðÏצÄÏÍÌÅÎÎÑ ÎÅ ÍÏÖÅ ÂÕÔÉ ÎÁÄÒÕËÏ×ÁÎÏ"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "ðÏצÄÏÍÌÅÎÎÑ ÎÅ ÍÏÖÕÔØ ÂÕÔÉ ÎÁÄÒÕËÏ×ÁΦ"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr ""
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "ëÏÍÁÎÄÁ ÓÉÓÔÅÍÉ: "
+
+#: commands.c:701
+#, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "òÏÚËÏÄÕ×ÁÔÉ-ÐÅÒÅÎÅÓÔÉ%s ÄÏ ÓËÒÉÎØËÉ"
+
+#: commands.c:702
+#, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "òÏÚËÏÄÕ×ÁÔÉ-ËÏЦÀ×ÁÔÉ%s ÄÏ ÓËÒÉÎØËÉ"
+
+#: commands.c:703
+#, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "òÏÚÛÉÆÒÕ×ÁÔÉ-ÐÅÒÅÎÅÓÔÉ%s ÄÏ ÓËÒÉÎØËÉ"
+
+#: commands.c:704
+#, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "òÏÚÛÉÆÒÕ×ÁÔÉ-ËÏЦÀ×ÁÔÉ%s ÄÏ ÓËÒÉÎØËÉ"
+
+#: commands.c:705
+#, c-format
+msgid "Save%s to mailbox"
+msgstr "ðÅÒÅÎÅÓÔÉ%s ÄÏ ÓËÒÉÎØËÉ"
+
+#: commands.c:705
+#, c-format
+msgid "Copy%s to mailbox"
+msgstr "ëÏЦÀ×ÁÔÉ%s ÄÏ ÓËÒÉÎØËÉ"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " ×ÉĦÌÅΦ"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "ëÏЦÀ×ÁÎÎÑ ÄÏ %s..."
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "ðÅÒÅÔ×ÏÒÉÔÉ ÎÁ %s ÐÒÉ ÎÁÄÓÉÌÁÎΦ?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "ôÉРÄÏÄÁÔËÕ ÚͦÎÅÎÏ ÎÁ %s."
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "ëÏÄÕ×ÁÎÎÑ ÚͦÎÅÎÏ ÎÁ %s; %s."
+
+#: commands.c:914
+msgid "not converting"
+msgstr "ÎÅ ÐÅÒÅÔ×ÏÒÅÎÏ"
+
+#: commands.c:914
+msgid "converting"
+msgstr "ÐÅÒÅÔ×ÏÒÅÎÏ"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "äÏÄÁÔ˦נÎÅÍÁ¤."
+
+#: compose.c:84
+msgid "Send"
+msgstr "óÌÁÔÉ"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "÷¦ÄͦÎÁ"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "äÏÄÁÔÉ ÆÁÊÌ"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "ðÏÑÓÎ."
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "ð¦ÄÐÉÓ, ÛÉÆÒÕ×ÁÎÎÑ"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "ûÉÆÒÕ×ÁÎÎÑ"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "ð¦ÄÐÉÓ"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "îÅ ÚÁÓÔÏÓÏ×Õ×ÁÔÉ"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " Ð¦ÄÐÉÓ ÑË:"
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<ÚÁ ÚÍÏ×ÞÁÎÎÑÍ>"
+
+#: compose.c:149
+#, fuzzy
+msgid "Encrypt with: "
+msgstr "ûÉÆÒÕ×ÁÎÎÑ"
+
+#: compose.c:165
+#, fuzzy
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "ÛÉÆÒ.(e), Ð¦ÄÐ.(s), Ð¦ÄÐ. ÑË(a), ÕÓÅ(b) ÞɠצÄͦÎÁ(f)? "
+
+#: compose.c:166
+msgid "esabf"
+msgstr ""
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "ð¦ÄÐÉÓ ÑË: "
+
+#: compose.c:227
+#, fuzzy
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "ÛÉÆÒ.(e), Ð¦ÄÐ.(s), Ð¦ÄÐ. ÑË(a), ÕÓÅ(b) ÞɠצÄͦÎÁ(f)? "
+
+#: compose.c:228
+msgid "eswabf"
+msgstr ""
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+
+#: compose.c:238
+msgid "12345f"
+msgstr ""
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] Â¦ÌØÛÅ ÎÅ ¦ÓÎÕ¤!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] ÚͦÎÅÎÏ. úͦÎÉÔÉ ËÏÄÕ×ÁÎÎÑ?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- äÏÄÁÔËÉ"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr ""
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "ãÅ ¤ÄÉÎÁ ÞÁÓÔÉÎÁ ÌÉÓÔÁ, §§ ÎÅ ÍÏÖÎÁ ×ÉÄÁÌÑÔÉ."
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr ""
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "äÏÄÁ×ÁÎÎÑ ×ÉÂÒÁÎÉÈ ÆÁÊ̦×..."
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "îÅÍÏÖÌÉ×Ï ÄÏÄÁÔÉ %s!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "óËÒÉÎØËÁ, Ú ÑËϧ ÄÏÄÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "ãÑ ÓËÒÉÎØËÁ ÚÏ×Ӧ͠ÐÏÒÏÖÎÑ."
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "÷ÉĦ̦ÔØ ÐÏצÄÏÍÌÅÎÎÑ, ÝÏ ÄÏÄÁ¤ÔÅ!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "îÅÍÏÖÌÉ×Ï ÄÏÄÁÔÉ!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "ðÅÒÅËÏÄÕ×ÁÎÎÑ ÍÏÖÅ ÂÕÔÉ ÚÁÓÔÏÓÏ×ÁÎÅ Ô¦ÌØËÉ ÄÏ ÔÅËÓÔÏ×ÉÈ ÄÏÄÁÔ˦×."
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "ðÏÔÏÞÎÉÊ ÄÏÄÁÔÏË ÎÅ ÂÕÄÅ ÐÅÒÅÔ×ÏÒÅÎÏ."
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "ðÏÔÏÞÎÉÊ ÄÏÄÁÔÏË ÂÕÄÅ ÐÅÒÅÔ×ÏÒÅÎÏ."
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "îÅצÒÎÅ ËÏÄÕ×ÁÎÎÑ."
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "úÂÅÒÅÇÔÉ ËÏЦÀ ÃØÏÇÏ ÐÏצÄÏÍÌÅÎÎÑ?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "ðÅÒÅÊÍÅÎÕ×ÁÔÉ Õ: "
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, c-format
+msgid "Can't stat %s: %s"
+msgstr "îÅÍÏÖÌÉ×Ï ÏÔÒÉÍÁÔÉ ÄÁΦ %s: %s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "îÏ×ÉÊ ÆÁÊÌ: "
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Content-Type ÐÏ ÆÏÒͦ base/sub"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "îÅצÄÏÍÉÊ Content-Type %s"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ ÆÁÊÌ %s"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "îÅ ×ÉÊÛÌÏ ÓÔ×ÏÒÉÔÉ ÄÏÄÁÔÏË"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "úÁÌÉÛÉÔÉ ÌÉÓÔ ÄÏ ÐÏÄÁÌØÛÏÇÏ ÒÅÄÁÇÕ×ÁÎÎÑ ÔÁ ×¦ÄÐÒÁ×ËÉ?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "úÁÐÉÓÁÔÉ ÌÉÓÔ ÄÏ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "úÁÐÉÓ ÌÉÓÔÁ ÄÏ %s..."
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "ìÉÓÔ ÚÁÐÉÓÁÎÏ."
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr ""
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr ""
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr ""
+
+#: crypt.c:71
+#, fuzzy, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- ÔÅËÓÔ ÎÁ ×ÉÈÏĦ PGP (ÞÁÓ: %c) --]\n"
+
+#: crypt.c:86
+#, fuzzy
+msgid "Passphrase(s) forgotten."
+msgstr "ëÏÄÏ×Õ ÆÒÁÚÕ PGP ÚÁÂÕÔÏ."
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "÷×ÅĦÔØ ËÏÄÏ×Õ ÆÒÁÚÕ PGP:"
+
+#: crypt.c:147
+#, fuzzy
+msgid "Enter SMIME passphrase:"
+msgstr "÷×ÅĦÔØ ËÏÄÏ×Õ ÆÒÁÚÕ PGP:"
+
+#: crypt.c:192
+#, fuzzy
+msgid "Create a traditional (inline) PGP message?"
+msgstr "óÔ×ÏÒÉÔÉ application/pgp ÌÉÓÔ?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "÷ÉËÌÉË PGP..."
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr ""
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr ""
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr ""
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- ðÏÍÉÌËÁ: ÎÅÓÕͦÓÎÁ ÓÔÒÕËÔÕÒÁ multipart/signed! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- ðÏÍÉÌËÁ: ÎÅצÄÏÍÉÊ ÐÒÏÔÏËÏÌ multipart/signed %s! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- ðÏÐÅÒÅÄÖÅÎÎÑ: ÎÅÍÏÖÌÉ×Ï ÐÅÒÅצÒÑÔÉ %s/%s Ð¦ÄÐÉÓÉ. --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+#, fuzzy
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- îÁÓÔÕÐΦ ÄÁΦ Ð¦ÄÐÉÓÁÎÏ --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- ðÏÐÅÒÅÄÖÅÎÎÑ: ÎÅÍÏÖÌÉ×Ï ÚÎÁÊÔÉ ÖÏÄÎÏÇϠЦÄÐÉÓÕ. --]\n"
+"\n"
+
+#: crypt.c:924
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr "[-- ë¦ÎÅÃؠЦÄÐÉÓÁÎÉÈ ÄÁÎÉÈ --]\n"
+
+#: curs_lib.c:157
+msgid "yes"
+msgstr ""
+
+#: curs_lib.c:158
+msgid "no"
+msgstr ""
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "ðÏËÉÎÕÔÉ Mutt?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "ÎÅצÄÏÍÁ ÐÏÍÉÌËÁ"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "îÁÔÉÓΦÔØ ÂÕÄØ-ÑËÕ ËÌÁצÛÕ..."
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " ('?' - ÐÅÒÅ̦Ë): "
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "îÅÍÁ¤ ×¦ÄËÒÉÔϧ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ."
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "öÏÄÎÏÇÏ ÐÏצÄÏÍÌÅÎÎÑ ÎÅÍÁ¤."
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "ðÏÛÔÏ×Á ÓËÒÉÎØËÁ ×¦ÄËÒÉÔÁ Ô¦ÌØËÉ ÄÌÑ ÞÉÔÁÎÎÑ"
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "æÕÎËæÀ ÎÅ ÄÏÚ×ÏÌÅÎÏ × ÒÅÖÉͦ ÄÏÄÁ×ÁÎÎÑ ÐÏצÄÏÍÌÅÎÎÑ."
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "öÏÄÎÏÇÏ ÐÏצÄÏÍÌÅÎÎÑ ÎÅ ×ÉÄÎÏ."
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "÷צÍËÎÕÔÉ ÚÁÐÉÓ ÓËÒÉÎØËÉ, ÝÏ Ô¦ÌØËÉ ÄÌÑ ÞÉÔÁÎÎÑ, ÎÅÍÏÖÌÉ×Ï!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "úͦÎÉ Õ ÓËÒÉÎØæ ÂÕÄÅ ÚÁÐÉÓÁÎÏ ÐÏ ×ÉÈÏÄÕ Ú Îŧ."
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "úͦÎÉ Õ ÓËÒÉÎØæ ÎÅ ÂÕÄÅ ÚÁÐÉÓÁÎÏ."
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "÷ÉÊÔÉ"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "úÂÅÒ."
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "ìÉÓÔ"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "÷¦ÄÐ."
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "÷Ó¦Í"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÚͦÎÉÌÁ ÚÏ×ΦÛÎÑ ÐÒÏÇÒÁÍÁ. æÌÁÇÉ ÍÏÖÕÔØ ÂÕÔÉ ÚͦÎÅΦ."
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "îÏ×Á ÐÏÛÔÁ Õ Ã¦Ê ÐÏÛÔÏצʠÓËÒÉÎØæ."
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÚͦÎÉÌÁ ÚÏ×ΦÛÎÑ ÐÒÏÇÒÁÍÁ."
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "öÏÄÎÏÇÏ ÌÉÓÔÁ ÎÅ ×ÉĦÌÅÎÏ."
+
+#: curs_main.c:653 menu.c:896
+#, fuzzy
+msgid "Nothing to do."
+msgstr "ú'¤ÄÎÁÎÎÑ Ú %s..."
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "ðÅÒÅÊÔÉ ÄÏ ÌÉÓÔÁ: "
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "áÒÇÕÍÅÎÔ ÐÏ×ÉÎÅΠÂÕÔÉ ÎÏÍÅÒÏÍ ÌÉÓÔÁ."
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "ãÅÊ ÌÉÓÔ ÎÅ ÍÏÖÎÁ ÐÏÂÁÞÉÔÉ."
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "îÅצÒÎÉÊ ÎÏÍÅÒ ÌÉÓÔÁ."
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "÷ÉÄÁÌÉÔÉ ÌÉÓÔÉ ÚÁ ÛÁÂÌÏÎÏÍ: "
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "îÅ ×ÓÔÁÎÏ×ÌÅÎÏ ÏÂÍÅÖÅÎØ."
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "ïÂÍÅÖÅÎÎÑ: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "ïÂÍÅÖÉÔÉÓØ ÐÏצÄÏÍÌÅÎÎÑÍÉ ÚÁ ÛÁÂÌÏÎÏÍ: "
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "÷ÉÊÔÉ Ú Mutt?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "÷ÉĦÌÉÔÉ ÌÉÓÔÉ ÚÁ ÛÁÂÌÏÎÏÍ: "
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "÷¦ÄÎÏ×ÉÔÉ ÌÉÓÔÉ ÚÁ ÛÁÂÌÏÎÏÍ: "
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "úÎÑÔÉ ×ÉĦÌÅÎÎÑ Ú ÌÉÓԦנÚÁ ÛÁÂÌÏÎÏÍ: "
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "÷¦ÄËÒÉÔÉ ÓËÒÉÎØËÕ ÌÉÛÅ ÄÌÑ ÞÉÔÁÎÎÑ"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "÷¦ÄËÒÉÔÉ ÓËÒÉÎØËÕ"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s ÎÅ ¤ ÐÏÛÔÏ×ÏÀ ÓËÒÉÎØËÏÀ."
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "ðÏËÉÎÕÔÉ Mutt ÂÅÚ ÚÂÅÒÅÖÅÎÎÑ ÚͦÎ?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "ãÅ ÏÓÔÁÎΦʠÌÉÓÔ."
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "÷Ó¦ ÌÉÓÔÉ ×ÉÄÁÌÅÎÏ."
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "ãÅ ÐÅÒÛÉÊ ÌÉÓÔ."
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "äÏÓÑÇÎÕÔϠ˦ÎÅÃØ. ðÏÛÕË ÐÅÒÅÎÅÓÅÎÏ ÎÁ ÐÏÞÁÔÏË."
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "äÏÓÑÇÎÕÔÏ ÐÏÞÁÔÏË. ðÏÛÕË ÐÅÒÅÎÅÓÅÎÏ ÎÁ Ë¦ÎÅÃØ."
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "îÅÍÁ¤ ÎÏ×ÉÈ ÌÉÓÔ¦×"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "îÅÍÁ¤ ÎÅÞÉÔÁÎÉÈ ÌÉÓÔ¦×"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " Õ ÃÉÈ ÍÅÖÁÈ ÏÇÌÑÄÕ"
+
+#: curs_main.c:1405 pager.c:2337
+msgid "Can't change 'important' flag on POP server."
+msgstr "îÅÍÏÖÌÉ×Ï ÚͦÎÉÔÉ ÆÌÁÇ '×ÁÖÌÉ×Å' ÎÁ POP ÓÅÒ×ÅÒ¦."
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "âÅӦĠ¦ÌØÛ ÎÅÍÁ."
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "ãÅ ÐÅÒÛÁ ÂÅÓ¦ÄÁ."
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "óÛÉ×ÁÎÎÑ ÎÅÄÏÓÔÕÐÎÅ."
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "âÅÓ¦ÄÁ ÍÁ¤ ÎÅÞÉÔÁΦ ÌÉÓÔÉ."
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "îÅÍÏÖÌÉ×Ï ÒÅÄÁÇÕ×ÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ ÎÁ POP ÓÅÒ×ÅÒ¦."
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\tÄÏÄÁÔÉ ÒÑÄÏË, ÝÏ ÐÏÞÉÎÁ¤ÔØÓÑ Ú ¤ÄÉÎϧ ~\n"
+"~b ÁÄÒÅÓÉ\tÄÏÄÁÔÉ ÁÄÒÅÓÉ ÄÏ Bcc:\n"
+"~c ÁÄÒÅÓÉ\tÄÏÄÁÔÉ ÁÄÒÅÓÉ ÄÏ Cc:\n"
+"~f ÌÉÓÔÉ\tÄÏÄÁÔÉ ÌÉÓÔÉ\n"
+"~F ÌÉÓÔÉ\tÔÅ Ö ÓÁÍÅ, ÝÏ Ê ~f, ÚÁ ×ÉÎÑÔËÏÍ ÚÁÇÏÌÏ×˦×\n"
+"~h\t\tÒÅÄÁÇÕ×ÁÔÉ ÚÁÇÏÌÏ×ÏË ÌÉÓÔÁ\n"
+"~m ÌÉÓÔÉ\tÄÏÄÁÔÉ ÌÉÓÔÉ, ÑË ÃÉÔÕ×ÁÎÎÑ\n"
+"~M ÌÉÓÔÉ\tÔÅ Ö ÓÁÍÅ, ÝÏ Ê ~m, ÚÁ ×ÉÎÑÔËÏÍ ÚÁÇÏÌÏ×˦×\n"
+"~p\t\tÄÒÕËÕ×ÁÔÉ ÌÉÓÔ\n"
+"~q\t\tÚÁÐÉÓÁÔÉ ÆÁÊÌ ÔÁ ×ÉÊÔÉ Ú ÒÅÄÁËÔÏÒÁ\n"
+"~r ÆÁÊÌ\t\tÄÏÄÁÔÉ ÔÅËÓÔ Ú ÆÁÊÌÕ × ÌÉÓÔ\n"
+"~t ÁÄÒÅÓÉ\tÄÏÄÁÔÉ ÁÄÒÅÓÉ ÄÏ To:\n"
+"~u\t\tÐÏ×ÔÏÒÉÔÉ ÐÏÐÅÒÅÄΦʠÒÑÄÏË\n"
+"~v\t\tÒÅÄÁÇÕ×ÁÔÉ ÌÉÓÔ ÒÅÄÁËÔÏÒÏÍ $visual\n"
+"~w ÆÁÊÌ\t\tÚÁÐÉÓÁÔÉ ÌÉÓÔ ÄÏ ÆÁÊÌÕ\n"
+"~x\t\tצÄͦÎÉÔÉ ÚͦÎÉ ÔÁ ×ÉÊÔÉ Ú ÒÅÄÁËÔÏÒÁ\n"
+"~?\t\tÃÅ ÐÏצÄÏÍÌÅÎÎÑ\n"
+".\t\tÒÑÄÏË Ú ÏÄΦ¤§ ËÒÁÐËÉ - ÐÒÉÚÎÁˠ˦ÎÃÑ ××ÏÄÕ\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d: ÎÅצÒÎÉÊ ÎÏÍÅÒ ÌÉÓÔÁ.\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(úÁ˦ÎÞ¦ÔØ ÌÉÓÔ ÒÑÄËÏÍ, ÝÏ ÓËÌÁÄÁ¤ÔØÓÑ Ú ÏÄΦ¤§ . )\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "îÅ ÐÏÛÔÏ×Á ÓËÒÉÎØËÁ.\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "ìÉÓԠͦÓÔÉÔØ:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(ÄÁ̦)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "ÎÅÍÁ¤ ¦ÍÅΦ ÆÁÊÌÕ.\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "÷ ÌÉÓÔ¦ - ÖÏÄÎÏÇÏ ÒÑÄËÕ.\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr ""
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s: ÎÅצÄÏÍÁ ËÏÍÁÎÄÁ ÒÅÄÁËÔÏÒÁ (~? - Ð¦ÄËÁÚËÁ)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "ÎÅ ×ÉÊÛÌÏ ÓÔ×ÏÒÉÔÉ ÔÉÍÞÁÓÏ×Õ ÓËÒÉÎØËÕ: %s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "ÎÅ ×ÉÊÛÌÏ ÚÁÐÉÓÁÔÉ ÔÉÍÞÁÓÏ×Õ ÓËÒÉÎØËÕ: %s"
+
+#: editmsg.c:101
+#, fuzzy, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "ÎÅ ×ÉÊÛÌÏ ÚÁÐÉÓÁÔÉ ÔÉÍÞÁÓÏ×Õ ÓËÒÉÎØËÕ: %s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "æÁÊÌ ÐÏצÄÏÍÌÅÎØ ÐÏÒÏÖΦÊ!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "ðÏצÄÏÍÌÅÎÎÑ ÎÅ ÚͦÎÅÎÏ!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "îÅÍÏÖÌÉ×ϠצÄËÒÉÔÉ ÆÁÊÌ ÐÏצÄÏÍÌÅÎÎÑ: %s"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "îÅÍÏÖÌÉ×Ï ÄÏÄÁÔÉ ÄÏ ÓËÒÉÎØËÉ: %s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "ðÏÍÉÌËÁ. òÅÚÅÒ×Õ×ÁÎÎÑ ÔÉÍÞÁÓÏ×ÏÇÏ ÆÁÊÌÕ: %s"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "÷ÓÔÁÎÏ×ÉÔÉ ÆÌÁÇ"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "úÎÑÔÉ ÆÌÁÇ"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr ""
+"[-- ðÏÍÉÌËÁ: ÖÏÄÎÕ ÞÁÓÔÉÎÕ Multipart/Alternative ÎÅ ×ÉÊÛÌÏ ÐÏÂÁÞÉÔÉ! --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- äÏÄÁÔÏË ÎÏÍÅÒ %d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- ôÉÐ: %s/%s, ËÏÄÕ×ÁÎÎÑ: %s, ÒÏÚͦÒ: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- á×ÔÏÐÒÏÇÌÑÄÁÎÎÑ ÚÁ ÄÏÐÏÍÏÇÏÀ %s --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "÷ÉËÌÉË ËÏÍÁÎÄÉ Á×ÔÏÍÁÔÉÞÎÏÇÏ ÐÒÏÇÌÑÄÁÎÎÑ: %s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- îÅÍÏÖÌÉ×Ï ×ÉËÏÎÁÔÉ %s. --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- ðÒÏÇÒÁÍÍÁ ÐÒÏÇÌÑÄÁÎÎÑ %s ÐÏצÄÏÍÉÌÁ ÐÏÍÉÌËÕ --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr "[-- ðÏÍÉÌËÁ: message/external-body ÎÅ ÍÁ¤ ÐÁÒÁÍÅÔÒÕ ÔÉÐÕ ÄÏÓÔÕÐÕ --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- ãÅÊ %s/%s ÄÏÄÁÔÏË "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(ÒÏÚÍ. %s ÂÁÊÔ) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "ÂÕÌÏ ×ÉÄÁÌÅÎÏ --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- %s --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- ¦Í'Ñ: %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- ãÅÊ %s/%s ÄÏÄÁÔÏË ÎÅ ×ËÌÀÞÅÎÏ, --]\n"
+
+#: handler.c:1689
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr "[-- ×¦ÄÐÏצÄÎÅ ÚÏ×ΦÛΤ ÄÖÅÒÅÌÏ ×ÉÄÁÌÅÎÏ ÚÁ ÄÁ×ΦÓÔÀ. --]\n"
+
+#: handler.c:1707
+#, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr "[-- ×¦ÄÐÏצÄÎÉÊ ÔÉРÄÏÓÔÕÐÕ %s ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "ðÏÍÉÌËÁ: ÎÅÍÁ¤ ÐÒÏÔÏËÏÌÕ ÄÌÑ multipart/signed."
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "ðÏÍÉÌËÁ: ÎÅÍÁ¤ ÐÁÒÁÍÅÔÒÕ ÐÒÏÔÏËÏÌÕ ÄÌÑ multipart/encrypted!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "îÅÍÏÖÌÉ×ϠצÄËÒÉÔÉ ÔÉÍÞÁÓÏ×ÉÊ ÆÁÊÌ!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(×ÉËÏÒÉÓÔÏ×ÕÊÔÅ '%s' ÄÌѠ椧 ÞÁÓÔÉÎÉ)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "(ÔÒÅÂÁ ÐÒÉÚÎÁÞÉÔÉ ËÌÁצÛÕ ÄÏ 'view-attachments'!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s: ÎÅÍÏÖÌÉ×Ï ÄÏÄÁÔÉ ÆÁÊÌ"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "ðïíéìëá: ÂÕÄØ ÌÁÓËÁ, ÐÏצÄÏÍÔÅ ÐÒÏ ÃÅÊ ÎÅÄÏ̦Ë"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr ""
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"âÁÚÏצ ÐÒÉÚÎÁÞÅÎÎÑ:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"îÅ ÐÒÉÚÎÁÞÅΦ ÆÕÎËæ§:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "ð¦ÄËÁÚËÁ ÄÏ %s"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: îÅÍÏÖÌÉ×Ï ÚÒÏÂÉÔÉ unhook * Ú hook."
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook: ÎÅצÄÏÍÉÊ ÔÉРhook: %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook: îÅÍÏÖÌÉ×Ï ×ÉÄÁÌÉÔÉ %s Ú %s."
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "áÕÔÅÎÔÉƦËÁÔÏҦנÎÅÍÁ¤."
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "áÕÔÅÎÔÉƦËÁæѠ(anonymous)..."
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "ðÏÍÉÌËÁ ÁÎÏΦÍÎϧ ÁÕÔÅÎÔÉƦËÁæ§."
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "áÕÔÅÎÔÉƦËÁæѠ(CRAM-MD5)..."
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "ðÏÍÉÌËÁ ÁÕÔÅÎÔÉƦËÁ槠CRAM-MD5."
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "áÕÔÅÎÔÉƦËÁæѠ(GSSAPI)..."
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "ðÏÍÉÌËÁ ÁÕÔÅÎÔÉƦËÁ槠GSSAPI."
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "LOGIN ÎÅÄÏÓÔÕÐÅΠÎÁ ÃØÏÍÕ ÓÅÒ×ÅÒ¦."
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "òŤÓÔÒÁæÑ..."
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "ðÏÍÉÌËÁ ÒŤÓÔÒÁæ§."
+
+#: imap/auth_sasl.c:112
+#, fuzzy, c-format
+msgid "Authenticating (%s)..."
+msgstr "áÕÔÅÎÔÉƦËÁæѠ(APOP)..."
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "ðÏÍÉÌËÁ ÁÕÔÅÎÔÉƦËÁ槠SASL."
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr "%s - ÎÅÐÒÉÐÕÓÔÉÍÉÊ ÛÌÑÈ IMAP"
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "ïÔÒÉÍÁÎÎÑ ÐÒÏÓÔÏÒÕ ¦ÍÅÎ..."
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "ïÔÒÉÍÁÎÎÑ ÐÅÒÅ̦ËÕ ÓËÒÉÎØÏË..."
+
+#: imap/browse.c:219
+msgid "No such folder"
+msgstr "ôÁËϧ ÓËÒÉÎØËÉ ÎÅÍÁ¤"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "óÔ×ÏÒÉÔÉ ÓËÒÉÎØËÕ: "
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "ðÏÛÔÏ×Á ÓËÒÉÎØËÁ ÍÕÓÉÔØ ÍÁÔÉ ¦Í'Ñ."
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÓÔ×ÏÒÅÎÏ."
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÚÁËÒÉÔÏ"
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "æÁÔÁÌØÎÁ ÐÏÍÉÌËÁ. ì¦ÞÉÌØÎÉË ÌÉÓԦנÎÅÍÏÖÌÉ×Ï Ó¦ÎÈÒÏΦÚÕ×ÁÔÉ!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "úÁËÒÉÔÔÑ Ú'¤ÄÎÁÎÎÑ Ú %s..."
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "ãÅÊ ÓÅÒ×ÅÒ IMAP ÎÁÄÔÏ ÄÁ×ΦÊ. Mutt ÎÅ ÍÏÖÅ ÐÒÁÃÀ×ÁÔÉ Ú ÎÉÍ."
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "ëÏÄÏ×ÁÎÅ Ú'¤ÄÎÁÎÎÑ Ú TLS?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "îÅ ×ÉÊÛÌÏ ÄÏÍÏ×ÉÔÉÓØ ÐÒÏ TLS Ú'¤ÄÎÁÎÎÑ"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "÷ɦҠ%s..."
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "ðÏÍÉÌËÁ ×¦ÄËÒÉÔÔÑ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "îÅÍÏÖÌÉ×Ï ÄÏÄÁ×ÁÔÉ ÄÏ ÓËÒÉÎØÏË IMAP ÎÁ ÃØÏÍÕ ÓÅÒ×ÅÒ¦"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "óÔ×ÏÒÉÔÉ %s?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "úÁËÒÉÔÔÑ Ú'¤ÄÎÁÎÎÑ Ú ÓÅÒ×ÅÒÏÍ IMAP..."
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "íÁÒËÕ×ÁÎÎÑ %d ÎÏ×ÉÈ ÐÏצÄÏÍÌÅÎØ ×ÉÄÁÌÅÎÉÍÉ..."
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "ðÏÍÉÌËÁ ×ÉÄÁÌÅÎÎÑ"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "úÂÅÒÅÖÅÎÎÑ ÆÌÁǦנÓÔÁÔÕÓÕ ÌÉÓÔÁ... [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "÷ÉÄÁÌÅÎÎÑ ÐÏצÄÏÍÌÅÎØ Ú ÓÅÒ×ÅÒÕ..."
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr "imap_sync_mailbox: ÐÏÍÉÌËÁ EXPUNGE"
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "ðÏÍÉÌËÁ CLOSE"
+
+#: imap/imap.c:1342
+msgid "Bad mailbox name"
+msgstr "ðÏÇÁÎÅ ¦Í'Ñ ÄÌÑ ÓËÒÉÎØËÉ"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "ð¦ÄÐÉÓÕ×ÁÎÎÑ ÄÏ %s..."
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "÷¦ÄÐÉÓÕ×ÁÎÎѠצĠ%s..."
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "ú ÓÅÒ×ÅÒÕ IMAP Ã¦¤§ ×ÅÒÓ¦§ ÏÔÒÉÍÁÔÉ ÚÁÇÏÌÏ×ËÉ ÎÅÍÏÖÌÉ×Ï."
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "îÅ ×ÉÊÛÌÏ ÓÔ×ÏÒÉÔÉ ÔÉÍÞÁÓÏ×ÉÊ ÆÁÊÌ %s"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "ïÔÒÉÍÁÎÎÑ ÚÁÇÏÌÏ×˦נÌÉÓÔ¦×... [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "ïÔÒÉÍÁÎÎÑ ÌÉÓÔÁ..."
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "îÅËÏÒÅËÔÎÉÊ ÎÏÍÅÒ ÐÏצÄÏÍÌÅÎÎÑ. óÐÒÏÂÕÊÔŠצÄËÒÉÔÉ ÓËÒÉÎØËÕ ÝÅ ÒÁÚ."
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "÷¦ÄÐÒÁ×ÌÅÎÎÑ ÌÉÓÔÁ..."
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "ëÏЦÀ×ÁÎÎÑ %d ÌÉÓԦנÄÏ %s..."
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "ëÏЦÀ×ÁÎÎÑ %d ÌÉÓÔÁ ÄÏ %s..."
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "äÁ̦?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "alias: ÁÄÒÅÓÉ ÎÅÍÁ¤"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr ""
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "ÎÅצÒÎÅ ÐÏÌÅ ÚÁÇÏÌÏ×ËÕ"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s: ÎÅצÄÏÍÉÊ ÍÅÔÏÄ ÓÏÒÔÕ×ÁÎÎÑ"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_default(%s): ÐÏÍÉÌËÁ ×ÉÒÁÚÕ: %s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s: ÎÅצÄÏÍÁ ÚͦÎÎÁ"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "ÐÒÅƦËÓ ÎÅÐÒÉÐÕÓÔÉÍÉÊ ÄÌÑ ÓËÉÄÁÎÎÑ"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "ÚÎÁÞÅÎÎÑ ÎÅÐÒÉÐÕÓÔÉÍÅ ÄÌÑ ÓËÉÄÁÎÎÑ"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s ×ÓÔÁÎÏ×ÌÅÎÏ"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s ÎÅ ×ÓÔÁÎÏ×ÌÅÎÏ"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s: ÎÅצÒÎÉÊ ÔÉРÓËÒÉÎØËÉ"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s: ÎÅצÒÎÅ ÚÎÁÞÅÎÎÑ"
+
+#: init.c:1312
+#, fuzzy, c-format
+msgid "%s: Unknown type."
+msgstr "%s: ÎÅצÄÏÍÉÊ ÔÉÐ"
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s: ÎÅצÄÏÍÉÊ ÔÉÐ"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "îÅÍÏÖÌÉ×Ï ÏÔÒÉÍÁÔÉ ÄÁΦ %s: %s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s ÎÅ ¤ Ú×ÉÞÁÊÎÉÍ ÆÁÊÌÏÍ."
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "ðÏÍÉÌËÁ × %s, ÒÑÄÏË %d: %s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source: ÐÏÍÉÌËÉ × %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: ÞÉÔÁÎÎÑ ÚÁ×ÅÒÛÅÎÏ, ÄÕÖÅ ÂÁÇÁÔÏ ÐÏÍÉÌÏË Õ %s"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source: ÐÏÍÉÌËÁ × %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source: ÄÕÖÅ ÂÁÇÁÔÏ ÁÒÇÕÍÅÎÔ¦×"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s: ÎÅצÄÏÍÁ ËÏÍÁÎÄÁ"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "ðÏÍÉÌËÁ ËÏÍÁÎÄÎÏÇÏ ÒÑÄËÕ: %s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "ÎÅÍÏÖÌÉ×Ï Ú'ÑÓÕ×ÁÔÉ ÄÏÍÁÛΦʠËÁÔÁÌÏÇ"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "ÎÅÍÏÖÌÉ×Ï Ú'ÑÓÕ×ÁÔÉ ¦Í'Ñ ËÏÒÉÓÔÕ×ÁÞÁ"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "úÎÁÊÄÅÎÏ ÚÁÃÉËÌÅÎÎÑ ÍÁËÒÏÓÕ."
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "ëÌÁצÛÕ ÎÅ ÐÒÉÚÎÁÞÅÎÏ."
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "ëÌÁצÛÕ ÎÅ ÐÒÉÚÎÁÞÅÎÏ. îÁÔÉÓΦÔØ '%s' ÄÌѠЦÄËÁÚËÉ."
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push: ÄÕÖÅ ÂÁÇÁÔÏ ÁÒÇÕÍÅÎÔ¦×"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "ÍÅÎÀ '%s' ÎÅ ¦ÓÎÕ¤"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "ÐÏÒÏÖÎÑ ÐÏÓ̦ÄÏ×ΦÓÔØ ËÌÁצÛ"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind: ÄÕÖÅ ÂÁÇÁÔÏ ÁÒÇÕÍÅÎÔ¦×"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "ÆÕÎËæѠ'%s' ÎÅ ¦ÓÎÕ¤ × ËÁÒÔ¦"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro: ÐÏÒÏÖÎÑ ÐÏÓ̦ÄÏ×ΦÓÔØ ËÌÁצÛ"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro: ÄÕÖÅ ÂÁÇÁÔÏ ÁÒÇÕÍÅÎÔ¦×"
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec: ÎÅÍÁ¤ ÁÒÇÕÍÅÎÔ¦×"
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "ÆÕÎËæѠ'%s' ÎÅ ¦ÓÎÕ¤"
+
+#: keymap.c:912
+#, fuzzy
+msgid "Enter keys (^G to abort): "
+msgstr "÷×ÅĦÔØ keyID ÄÌÑ %s: "
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr ""
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "ÐÏÒÏÖÎÑ ÏÐÅÒÁæÑ"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "ÐÒÉÍÕÓÏ×Å ÐÒÏÇÌÑÄ. Ú ×ÉËÏÒÉÓÔÁÎÎÑÍ mailcap"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "ÄÉ×ÉÔÉÓØ ÄÏÄÁÔÏË ÑË ÔÅËÓÔ"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "×ÉÍË./×צÍËÎ. ×¦ÄÏÂÒÁÖÅÎÎѠЦÄÞÁÓÔÉÎ"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "ÐÅÒÅÊÔÉ ÄϠ˦ÎÃÑ ÓÔÏÒ¦ÎËÉ"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "ÎÁĦÓÌÁÔÉ ËÏЦÀ ÌÉÓÔÁ ¦ÎÛÏÍÕ ÁÄÒÅÓÁÔÕ"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "×ÉÂÒÁÔÉ ÎÏ×ÉÊ ÆÁÊÌ × ÃØÏÍÕ ËÁÔÁÌÏÚ¦"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "ÐÒÏÇÌÑÎÕÔÉ ÆÁÊÌ"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "ÐÏËÁÚÁÔÉ ¦Í'Ñ ×ÉÂÒÁÎÏÇÏ ÆÁÊÌÕ"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "ЦÄÐÉÓÁÔÉÓØ ÄϠ椧 ÓËÒÉÎØËÉ (ÌÉÛÅ IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "צÄÐÉÓÁÔÉÓؠצĠ椧 ÓËÒÉÎØËÉ (ÌÉÛÅ IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "×ÉÂÒÁÔÉ: ÐÅÒÅ̦ˠ×Ó¦È/ЦÄÐÉÓÁÎÉÈ (ÌÉÛÅ IMAP)"
+
+#: keymap_alldefs.h:18
+#, fuzzy
+msgid "list mailboxes with new mail"
+msgstr "îÅÍÁ¤ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ Ú ÎÏ×ÏÀ ÐÏÛÔÏÀ."
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "ÚͦÎÉÔÉ ËÁÔÁÌÏÇ"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "ÐÅÒÅצÒÉÔÉ ÎÁÑ×ΦÓÔØ ÎÏ×ϧ ÐÏÛÔÉ Õ ÓËÒÉÎØËÁÈ"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "ÐÒɤÄÎÁÔÉ ÆÁÊÌ(É) ÄÏ ÃØÏÇÏ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "ÐÒɤÄÎÁÔÉ ÌÉÓÔ(É) ÄÏ ÃØÏÇÏ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "ÚͦÎÉÔÉ ÐÅÒÅ̦ˠBcc"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "ÚͦÎÉÔÉ ÐÅÒÅ̦ˠCc"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "ÚͦÎÉÔÉ ÐÏÑÓÎÅÎÎÑ ÄÏ ÄÏÄÁÔËÕ"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "ÚͦÎÉÔÉ ÓÐÏӦ ËÏÄÕ×ÁÎÎÑ ÄÏÄÁÔËÕ"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "××ÅÓÔÉ ¦Í'Ñ ÆÁÊÌÕ, ËÕÄÉ ÄÏÄÁÔÉ ËÏЦÀ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "ÒÅÄÁÇÕ×ÁÔÉ ÆÁÊÌ, ÝÏ ÐÒɤÄÎÕ¤ÔØÓÑ"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "ÚͦÎÉÔÉ ÐÏÌÅ From"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "ÒÅÄÁÇÕ×ÁÔÉ ÌÉÓÔ Ú ÚÁÇÏÌÏ×ËÏÍ"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "ÒÅÄÁÇÕ×ÁÔÉ ÌÉÓÔ"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "ÒÅÄÁÇÕ×ÁÔÉ ÄÏÄÁÔÏË, ×ÉËÏÒÉÓÔÏ×ÕÀÞÉ mailcap"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "ÚͦÎÉÔÉ ÐÏÌÅ Reply-To"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "ÒÅÄÁÇÕ×ÁÔÉ ÔÅÍÕ ÃØÏÇÏ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "ÚͦÎÉÔÉ ÐÅÒÅ̦ˠTo"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "ÓÔ×ÏÒÉÔÉ ÎÏ×Õ ÐÏÛÔÏ×Õ ÓËÒÉÎØËÕ (ÌÉÛÅ IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "ÚͦÎÉÔÉ ÔÉРÄÏÄÁÔËÕ"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "ÏÔÒÉÍÁÔÉ ÔÉÍÞÁÓÏ×Õ ËÏЦÀ ÄÏÄÁÔËÕ"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "ÐÅÒÅצÒÉÔÉ ÇÒÁÍÁÔÉËÕ Õ ÌÉÓÔ¦"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "ËÏÍÐÏÎÕ×ÁÔÉ ÎÏ×ÉÊ ÄÏÄÁÔÏË, ×ÉËÏÒÉÓÔ. mailcap"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "×ÉÍËÎÕÔÉ/×צÍËÎÕÔÉ ÐÅÒÅËÏÄÏ×Õ×ÁÎÎÑ ÄÏÄÁÔËÕ"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "ÚÂÅÒÅÇÔÉ ÃÅÊ ÌÉÓÔ, ÁÂɠצĦÓÌÁÔɠЦÚΦÛÅ"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "ÐÅÒÅÊÍÅÎÕ×ÁÔÉ ÐÒɤÄÎÁÎÉÊ ÆÁÊÌ"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "צĦÓÌÁÔÉ ÌÉÓÔ"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "ÚͦÎÉÔÉ inline ÎÁ attachment ÁÂÏ ÎÁ×ÐÁËÉ"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "×ÉÂÒÁÔÉ, ÞÉ ÔÒÅÂÁ ×ÉÄÁÌÑÔÉ ÆÁÊ̠ЦÓÌѠצÄÐÒ."
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "ÏÂÎÏ×ÉÔɠצÄÏÍÏÓÔ¦ ÐÒÏ ËÏÄÕ×ÁÎÎÑ ÄÏÄÁÔËÕ"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "ÄÏÄÁÔÉ ÌÉÓÔ ÄÏ ÓËÒÉÎØËÉ"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "ËÏЦÀ×ÁÔÉ ÌÉÓÔ ÄÏ ÆÁÊÌÕ/ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "ÓÔ×ÏÒÉÔÉ Á̦ÁÓ ÎÁ ×¦ÄÐÒÁ×ÉÔÅÌÑ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "ÐÅÒÅÓÕÎÕÔÉ ÐÏÚÉæÀ ÄÏÎÉÚÕ ÅËÒÁÎÕ"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "ÐÅÒÅÓÕÎÕÔÉ ÐÏÚÉæÀ ÄÏÓÅÒÅÄÉÎÉ ÅËÒÁÎÕ"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "ÐÅÒÅÓÕÎÕÔÉ ÐÏÚÉæÀ ÄÏÇÏÒÉ ÅËÒÁÎÕ"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "ÚÒÏÂÉÔÉ ÄÅËÏÄÏ×ÁÎÕ (ÐÒÏÓÔÉÊ ÔÅËÓÔ) ËÏЦÀ"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "ÚÒÏÂÉÔÉ ÄÅËÏÄÏ×ÁÎÕ (ÔÅËÓÔ) ËÏЦÀ ÔÁ ×ÉÄÁÌÉÔÉ"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "×ÉÄÁÌÉÔÉ ÐÏÔÏÞÎÕ ÐÏÚÉæÀ"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "×ÉÄÁÌÉÔÉ ÐÏÔÏÞÎÕ ÓËÒÉÎØËÕ (ÌÉÛÅ IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "×ÉÄÁÌÉÔÉ ×Ó¦ ÌÉÓÔɠЦÄÂÅÓ¦ÄÉ"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "×ÉÄÁÌÉÔÉ ×Ó¦ ÌÉÓÔÉ ÂÅÓ¦ÄÉ"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "ÐÏËÁÚÁÔÉ ÐÏ×ÎÕ ÁÄÒÅÓՠצÄÐÒÁ×ÉÔÅÌÑ"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "ÐÏËÁÚÁÔÉ ÌÉÓÔ Ê ×ÉÍËÎ./×צÍËÎ. ÕÖÉÍÁÎÎÑ ÚÁÇ."
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "ÐÏËÁÚÁÔÉ ÌÉÓÔ"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "ÒÅÄÁÇÕ×ÁÔÉ ÌÉÓÔ"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "×ÉÄÁÌÉÔÉ ÓÉÍ×ÏÌ ÐÅÒÅÄ ËÕÒÓÏÒÏÍ"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "ÐÅÒÅÓÕÎÕÔÉ ËÕÒÓÏÒ ÎÁ ÏÄÉΠÓÉÍ×ÏÌ ×̦×Ï"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "ÐÅÒÅÓÕÎÕÔÉ ËÕÒÓÏÒ ÄÏ ÐÏÞÁÔËÕ ÓÌÏ×Á"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÞÁÔËÕ ÒÑÄËÕ"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "ÐÅÒÅÊÔÉ ÐÏ ×ȦÄÎÉÈ ÐÏÛÔÏ×ÉÈ ÓËÒÉÎØËÁÈ"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "ÄÏÐÏ×ÎÉÔÉ ¦Í'Ñ ÆÁÊÌÕ ÞÉ Á̦ÁÓ"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "ÐÏÓ̦ÄÏ×ÎÏ ÄÏÐÏ×ÎÉÔÉ ÁÄÒÅÓÕ"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "×ÉÄÁÌÉÔÉ ÓÉÍ×ÏÌ ÎÁ Í¦Óæ ËÕÒÓÏÒÕ"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "ÐÅÒÅÊÔÉ ÄϠ˦ÎÃÑ ÒÑÄËÕ"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "ÐÅÒÅÓÕÎÕÔÉ ËÕÒÓÏÒ ÎÁ ÏÄÉΠÓÉÍ×ÏÌ ×ÐÒÁ×Ï"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "ÐÅÒÅÓÕÎÕÔÉ ËÕÒÓÏÒ ÄϠ˦ÎÃÑ ÓÌÏ×Á"
+
+#: keymap_alldefs.h:75
+msgid "scroll down through the history list"
+msgstr "ÐÒÏÇÏÒÎÕÔÉ ¦ÓÔÏÒ¦À ××ÏÄÕ ÄÏÎÉÚÕ"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "ÐÒÏÇÏÒÎÕÔÉ ¦ÓÔÏÒ¦À ××ÏÄÕ ÎÁÇÏÒÕ"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "×ÉÄÁÌÉÔɠצĠËÕÒÓÏÒÕ ÄϠ˦ÎÃÑ ÒÑÄËÕ"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "×ÉÄÁÌÉÔɠצĠËÕÒÓÏÒÕ ÄϠ˦ÎÃÑ ÓÌÏ×Á"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "ÓÐÏÒÏÖÎÉÔÉ ÒÑÄÏË"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "×ÉÄÁÌÉÔÉ ÓÌÏ×Ï ÐÅÒÅÄ ËÕÒÓÏÒÏÍ"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "ÓÐÒÉÊÎÑÔÉ ÎÁÓÔÕÐÎÉÊ ÓÉÍ×ÏÌ, ÑË ¤"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "ÐÅÒÅÓÕÎÕÔÉ ÐÏÔÏÞÎÉÊ ÓÉÍ×ÏÌ ÄÏ ÐÏÐÅÒÅÄÎØÏÇÏ"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "ÎÁÐÉÓÁÔÉ ÓÌÏ×Ï Ú ×ÅÌÉËϧ Ì¦ÔÅÒÉ"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "ÐÅÒÅÔ×ÏÒÉÔɠ̦ÔÅÒÉ ÓÌÏ×Á ÄÏ ÓÔÒÏËÏ×ÉÈ"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "ÐÅÒÅÔ×ÏÒÉÔɠ̦ÔÅÒÉ ÓÌÏ×Á ÄÏ ÚÁÇÏÌÏ×ÎÉÈ"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "××ÅÓÔÉ ËÏÍÁÎÄÕ muttrc"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "××ÅÓÔÉ ÍÁÓËÕ ÆÁÊ̦×"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "×ÉÊÔÉ Ú ÃØÏÇÏ ÍÅÎÀ"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "ƦÌØÔÒÕ×ÁÔÉ ÄÏÄÁÔÏË ÞÅÒÅÚ ËÏÍÁÎÄÕ shell"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÅÒÛϧ ÐÏÚÉæ§"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "ÚͦÎÉÔÉ ÆÌÁÇ ×ÁÖÌÉ×ÏÓÔ¦ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "ÐÅÒÅÓÌÁÔÉ ÌÉÓÔ Ú ËÏÍÅÎÔÁÒÅÍ"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "×ÉÂÒÁÔÉ ÐÏÔÏÞÎÕ ÐÏÚÉæÀ"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "צÄÐÏצÓÔÉ ×Ӧ͠ÁÄÒÅÓÁÔÁÍ"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "ÐÒÏÇÏÒÎÕÔÉ ÎÁ Ð¦×ÓÔÏÒ¦ÎËÉ ÄÏÎÉÚÕ"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "ÐÒÏÇÏÒÎÕÔÉ ÎÁ Ð¦×ÓÔÏÒ¦ÎËÉ ÄÏÇÏÒÉ"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "ÃÅÊ ÅËÒÁÎ"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÚÉ槠ڠÎÏÍÅÒÏÍ"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÏÓÔÁÎÎØϧ ÐÏÚÉæ§"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "צÄÐÏצÓÔÉ ÄÏ ×ËÁÚÁÎϧ ÒÏÚÓÉÌËÉ"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "×ÉËÏÎÁÔÉ ÍÁËÒÏÓ"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "ËÏÍÐÏÎÕ×ÁÔÉ ÎÏ×ÉÊ ÌÉÓÔ"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "צÄËÒÉÔÉ ¦ÎÛÕ ÐÏÛÔÏ×Õ ÓËÒÉÎØËÕ"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "צÄËÒÉÔÉ ¦ÎÛÕ ÓËÒÉÎØËÕ Ô¦ÌØËÉ ÄÌÑ ÞÉÔÁÎÎÑ"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "ÓËÉÎÕÔÉ ÆÌÁÇ ÓÔÁÔÕÓÕ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "×ÉÄÁÌÉÔÉ ÌÉÓÔÉ, ÝϠͦÓÔÑÔØ ×ÉÒÁÚ"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "ÐÒÉÍÕÓÏ×Ï ÏÔÒÉÍÁÔÉ ÐÏÛÔÕ Ú ÓÅÒ×ÅÒÁ IMAP"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "ÏÔÒÉÍÁÔÉ ÐÏÛÔÕ Ú ÓÅÒ×ÅÒÁ POP"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÅÒÛÏÇÏ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÏÓÔÁÎÎØÏÇÏ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "ÐÏËÁÚÁÔÉ ÌÉÛÅ ÌÉÓÔÉ, ÝϠͦÓÔÑÔØ ×ÉÒÁÚ"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎÏÇÏ ÎÏ×ÏÇÏ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:113
+#, fuzzy
+msgid "jump to the next new or unread message"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎÏÇÏ ÎÅÞÉÔÁÎÏÇÏ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎϧ Ð¦ÄÂÅÓ¦ÄÉ"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎϧ ÂÅÓ¦ÄÉ"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎÏÇÏ ÎÅ×ÉÄÁÌÅÎÏÇÏ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎÏÇÏ ÎÅÞÉÔÁÎÏÇÏ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ \"ÂÁÔØ˦×ÓØËÏÇÏ\" ÌÉÓÔÁ Õ ÂÅӦĦ"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÐÅÒÅÄÎØϧ ÂÅÓ¦ÄÉ"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÐÅÒÅÄÎØϧ Ð¦ÄÂÅÓ¦ÄÉ"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎÏÇÏ ÎÅ×ÉÄÁÌÅÎÏÇÏ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÐÅÒÅÄÎØÏÇÏ ÎÏ×ÏÇÏ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:123
+#, fuzzy
+msgid "jump to the previous new or unread message"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÐÅÒÅÄÎØÏÇÏ ÎÅÞÉÔÁÎÏÇÏ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÐÅÒÅÄÎØÏÇÏ ÎÅÞÉÔÁÎÏÇÏ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "צÄͦÔÉÔÉ ÐÏÔÏÞÎÕ ÂÅÓ¦ÄÕ ÑË ÞÉÔÁÎÕ"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "צÄͦÔÉÔÉ ÐÏÔÏÞÎՠЦÄÂÅÓ¦ÄÕ ÑË ÞÉÔÁÎÕ"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "×ÓÔÁÎÏ×ÉÔÉ ÆÌÁÇ ÓÔÁÔÕÓÕ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "ÚÁÐÉÓÁÔÉ ÚͦÎÉ ÄÏ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "×ÉĦÌÉÔÉ ÌÉÓÔÉ, ÝϠͦÓÔÑÔØ ×ÉÒÁÚ"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "צÄÎÏ×ÉÔÉ ÌÉÓÔÉ, ÝϠͦÓÔÑÔØ ×ÉÒÁÚ"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "ÚÎÑÔÉ ×ÉĦÌÅÎÎÑ Ú ÌÉÓÔ¦×, ÝϠͦÓÔÑÔØ ×ÉÒÁÚ"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÓÅÒÅÄÉÎÉ ÓÔÏÒ¦ÎËÉ"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎϧ ÐÏÚÉæ§"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "ÐÒÏÇÏÒÎÕÔÉ ÎÁ ÒÑÄÏË ÄÏÎÉÚÕ"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎϧ ÓÔÏÒ¦ÎËÉ"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "ÐÅÒÅÊÔÉ ÄϠ˦ÎÃÑ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "×ÉÍË./×צÍËÎ. ×¦ÄÏÂÒÁÖÅÎÎÑ ÃÉÔÏ×ÁÎÏÇÏ ÔÅËÓÔÕ"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "ÐÒÏÐÕÓÔÉÔÉ ÃÉÔÏ×ÁÎÉÊ ÔÅËÓԠæÌËÏÍ"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÞÁÔËÕ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "צÄÄÁÔÉ ÌÉÓÔ/ÄÏÄÁÔÏË Õ ËÏÎ׍ҠËÏÍÁÎĦ shell"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÐÅÒÅÄÎØϧ ÐÏÚÉç§"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "ÐÒÏÇÏÒÎÕÔÉ ÎÁ ÒÑÄÏË ÄÏÇÏÒÉ"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÐÅÒÅÄÎØϧ ÓÔÏÒ¦ÎËÉ"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "ÄÒÕËÕ×ÁÔÉ ÐÏÔÏÞÎÕ ÐÏÚÉæÀ"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "ÚÁÐÉÔ ÚÏ×ΦÛÎØϧ ÐÒÏÇÒÁÍÉ ÐÏ ÁÄÒÅÓÉ"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "ÄÏÄÁÔÉ ÒÅÚÕÌØÔÁÔÉ ÎÏ×ÏÇÏ ÚÁÐÉÔÕ ÄÏ ÐÏÔÏÞÎÉÈ"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "ÚÂÅÒÅÇÔÉ ÚͦÎÉ ÓËÒÉÎØËÉ ÔÁ ×ÉÊÔÉ"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "×ÉËÌÉËÁÔÉ ÚÁÌÉÛÅÎÉÊ ÌÉÓÔ"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "ÏÞÉÓÔÉÔÉ ÔÁ ÐÅÒÅÍÁÌÀ×ÁÔÉ ÅËÒÁÎ"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{×ÎÕÔÒ¦ÛÎÑ}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "צÄÐÏצÓÔÉ ÎÁ ÌÉÓÔ"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "×ÚÑÔÉ ÃÅÊ ÌÉÓÔ × ÑËÏÓÔ¦ ÛÁÂÌÏÎÕ ÄÌÑ ÎÏ×ÏÇÏ"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "ÚÂÅÒÅÇÔÉ ÌÉÓÔ/ÄÏÄÁÔÏË Õ ÆÁÊ̦"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "ÐÏÛÕË ×ÉÒÁÚÕ × ÎÁÐÒÑÍËÕ ÕÐÅÒÅÄ"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "ÐÏÛÕË ×ÉÒÁÚÕ × ÎÁÐÒÑÍËÕ ÎÁÚÁÄ"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "ÐÏÛÕË ÎÁÓÔÕÐÎϧ ×¦ÄÐÏצÄÎÏÓÔ¦"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "ÐÏÛÕË ÎÁÓÔÕÐÎÏÇÏ × Ú×ÏÒÏÔÎØÏÍÕ ÎÁÐÒÑÍËÕ"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "×ÉÍË./×צÍËÎÕÔÉ ×ÉĦÌÅÎÎÑ ×ÉÒÁÚÕ ÐÏÛÕËÕ"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "×ÉËÌÉËÁÔÉ ËÏÍÁÎÄÕ × shell"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "ÓÏÒÔÕ×ÁÔÉ ÌÉÓÔÉ"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "ÓÏÒÔÕ×ÁÔÉ ÌÉÓÔÉ × Ú×ÏÒÏÔÎØÏÍÕ ÎÁÐÒÑÍËÕ"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "×ÉĦÌÉÔÉ ÐÏÔÏÞÎÕ ÐÏÚÉæÀ"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "×ÉËÏÒÉÓÔÁÔÉ ÎÁÓÔÕÐÎÕ ÆÕÎËæÀ ÄÏ ×ÉĦÌÅÎÏÇÏ"
+
+#: keymap_alldefs.h:164
+#, fuzzy
+msgid "apply next function ONLY to tagged messages"
+msgstr "×ÉËÏÒÉÓÔÁÔÉ ÎÁÓÔÕÐÎÕ ÆÕÎËæÀ ÄÏ ×ÉĦÌÅÎÏÇÏ"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "×ÉĦÌÉÔÉ ÐÏÔÏÞÎՠЦÄÂÅÓ¦ÄÕ"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "×ÉĦÌÉÔÉ ÐÏÔÏÞÎÕ ÂÅÓ¦ÄÕ"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "ÚͦÎÉÔÉ ÆÌÁÇ ÎÏ×ÏÇÏ ÌÉÓÔÁ"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "×ÉÍËÎÕÔÉ/×צÍËÎÕÔÉ ÐÅÒÅÚÁÐÉÓÕ×ÁÎÎÑ ÓËÒÉÎØËÉ"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "×ɦҠÐÒÏÇÌÑÄÁÎÎÑ ÓËÒÉÎØÏË/×ӦȠÆÁÊ̦×"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÞÁÔËÕ ÓÔÏÒ¦ÎËÉ"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "צÄÎÏ×ÉÔÉ ÐÏÔÏÞÎÕ ÐÏÚÉæÀ"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "צÄÎÏ×ÉÔÉ ×Ó¦ ÌÉÓÔÉ ÂÅÓ¦ÄÉ"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "צÄÎÏ×ÉÔÉ ×Ó¦ ÌÉÓÔɠЦÄÂÅÓ¦ÄÉ"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "ÐÏËÁÚÁÔÉ ×ÅÒÓ¦À ÔÁ ÄÁÔÕ Mutt"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "ÐÒÏÇÌÑÎÕÔÉ ÚÁ ÄÏÐÏÍÏÇÏÀ mailcap ÐÒÉ ÐÏÔÒŦ"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "ÐÏËÁÚÁÔÉ ÄÏÄÁÔËÉ MIME"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr ""
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "ÐÏËÁÚÁÔÉ ÐÏÔÏÞÎÉÊ ×ÉÒÁÚ ÏÂÍÅÖÅÎÎÑ"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "ÚÇÏÒÎÕÔÉ/ÒÏÚÇÏÒÎÕÔÉ ÐÏÔÏÞÎÕ ÂÅÓ¦ÄÕ"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "ÚÇÏÒÎÕÔÉ/ÒÏÚÇÏÒÎÕÔÉ ×Ó¦ ÂÅÓ¦ÄÉ"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "ÐÒɤÄÎÁÔÉ ÚÁÇÁÌØÎÉÊ ËÌÀÞ PGP"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "ÐÏËÁÚÁÔÉ ÐÁÒÁÍÅÔÒÉ PGP"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "צĦÓÌÁÔÉ ÚÁÇÁÌØÎÉÊ ËÌÀÞ PGP"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "ÐÅÒÅצÒÉÔÉ ÚÁÇÁÌØÎÉÊ ËÌÀÞ PGP"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "ÐÏÂÁÞÉÔÉ ¦ÄÅÎԦƦËÁÔÏÒ ËÏÒÉÓÔÕ×ÁÞÁ ËÌÀÞÁ"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "ÐÅÒÅצÒËÁ ÎÁ ËÌÁÓÉÞÎÅ pgp"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "ðÒÉÊÎÑÔÉ ÓËÏÓÔÒÕÊÏ×ÁÎÉÊ ÌÁÎÃÀÖÏË"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "äÏÄÁÔÉ remailer ÄÏ ÌÁÎÃÀÖËÕ"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "÷ÓÔÁ×ÉÔÉ remailer × ÌÁÎÃÀÖÏË"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "÷ÉÄÁÌÉÔÉ remailer Ú ÌÁÎÃÀÖËÕ"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "÷ÉÂÒÁÔÉ ÐÏÐÅÒÅÄΦʠÅÌÅÍÅÎÔ ÌÁÎÃÀÖËÕ"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "÷ÉÂÒÁÔÉ ÎÁÓÔÕÐÎÉÊ ÅÌÅÍÅÎÔ ÌÁÎÃÀÖËÕ"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "צĦÓÌÁÔÉ ÌÉÓÔ ÞÅÒÅÚ ÌÁÎËÕ mixmaster remailer"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "ÚÒÏÂÉÔÉ ÒÏÚÛÉÆÒÏ×ÁÎÕ ËÏЦÀ ÔÁ ×ÉÄÁÌÉÔÉ"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "ÚÒÏÂÉÔÉ ÒÏÚÛÉÆÒÏ×ÁÎÕ ËÏЦÀ"
+
+#: keymap_alldefs.h:196
+#, fuzzy
+msgid "wipe passphrase(s) from memory"
+msgstr "ÚÎÉÝÉÔÉ ÐÁÒÏÌØ PGP Õ ÐÁÍ'ÑÔ¦"
+
+#: keymap_alldefs.h:197
+#, fuzzy
+msgid "extract supported public keys"
+msgstr "ÒÏÚÐÁËÕ×ÁÔÉ ÚÁÇÁÌØÎÉÊ ËÌÀÞ PGP"
+
+#: keymap_alldefs.h:198
+#, fuzzy
+msgid "show S/MIME options"
+msgstr "ÐÏËÁÚÁÔÉ ÐÁÒÁÍÅÔÒÉ PGP"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "îÅ ×ÉÓÔÁÞÁ¤ ÐÁÍ'ÑÔ¦!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"äÌÑ Ú×'ÑÚËÕ Ú ÒÏÚÒÏÂÎÉËÁÍÉ, Û̦ÔØ ÌÉÓÔ ÄÏ <mutt-dev@mutt.org>.\n"
+"äÌÑ ÐÏצÄÏÍÌÅÎÎÑ ÐÒÏ ×ÁÄÕ, ×ÉËÏÒÉÓÔÏ×ÕÊÔÅ ÐÒÏÇÒÁÍÕ flea(1).\n"
+
+#: main.c:50
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+
+#: main.c:56
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+
+#: main.c:94
+#, fuzzy
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"×ÉËÏÒÉÓÔÁÎÎÑ: mutt [ -nRyzZ ] [ -e <ËÍÄ> ] [ -F <ÆÁÊÌ> ] [ -m <ÔÉÐ> ] [ -f "
+"<ÆÁÊÌ> ]\n"
+"       mutt [ -nx ] [ -e <ËÍÄ> ] [ -a <ÆÁÊÌ> ] [ -F <ÆÁÊÌ> ] [ -H <ÆÁÊÌ> ] "
+"[ -i <ÆÁÊÌ> ] [ -s <ÔÅÍÁ> ] [ -b <ÁÄÒ> ] [ -c <ÁÄÒ> ] <ÁÄÒ> [ ... ]\n"
+"       mutt [ -n ] [ -e <ËÍÄ> ] [ -F <ÆÁÊÌ> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"ÐÁÒÁÍÅÔÒÉ:\n"
+"  -a <ÆÁÊÌ>\tÐÒɤÄÎÁÔÉ ÆÁÊÌ ÄÏ ÌÉÓÔÁ\n"
+"  -b <ÁÄÒÅÓÉ>\t×ËÁÚÁÔÉ ÁÄÒÅÓÉ ÏÔÒÉÍÕ×ÁަנÎÅÐÏͦÔÎÉÈ ËÏЦʠ(Bcc)\n"
+"  -c <ÁÄÒÅÓÉ>\t×ËÁÚÁÔÉ ÁÄÒÅÓÉ ÏÔÒÉÍÕ×ÁަנËÏЦʠ(Cc)\n"
+"  -e <ËÏÍÁÎÄÁ>\t×ËÁÚÁÔÉ ËÏÍÁÎÄÕ, ÝÏ §§ ×ÉËÏÎÁÔɠЦÓÌÑ ¦Î¦Ã¦Á̦ÚÁæ§\n"
+"  -f <ÆÁÊÌ>\t×ËÁÚÁÔÉ, ÑËÕ ÐÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÞÉÔÁÔÉ\n"
+"  -F <ÆÁÊÌ>\t×ËÁÚÁÔÉ ÁÌØÔÅÒÎÁÔÉ×ÎÉÊ ÆÁÊÌ muttrc\n"
+"  -H <ÆÁÊÌ>\t×ËÁÚÁÔÉ ÆÁÊÌ, ÝϠͦÓÔÉÔØ ÛÁÂÌÏΠÚÁÇÏÌÏ×ËÕ\n"
+"  -i <ÆÁÊÌ>\t×ËÁÚÁÔÉ ÆÁÊÌ, ÝÏ ÊÏÇÏ ÔÒÅÂÁ ×ËÌÀÞÉÔɠՠצÄÐÏצÄØ\n"
+"  -m <ÔÉÐ>\t×ËÁÚÁÔÉ ÔÉРÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ\n"
+"  -n\t\t×ËÁÚÕ¤ Mutt ÎÅ ÞÉÔÁÔÉ ÓÉÓÔÅÍÎÉÊ Muttrc\n"
+"  -p\t\t×ÉËÌÉËÁÔÉ ÚÁÌÉÛÅÎÉÊ ÌÉÓÔ\n"
+"  -R\t\tצÄËÒÉÔÉ ÐÏÛÔÏ×Õ ÓËÒÉÎØËÕ Ô¦ÌØËÉ ÄÌÑ ÞÉÔÁÎÎÑ\n"
+"  -s <ÔÅÍÁ>\t×ËÁÚÁÔÉ ÔÅÍÕ (× ÐÏÄצÊÎÉÈ ÌÁÐËÁÈ, ÑËÝϠͦÓÔÉÔØ ÐÒϦÌÉ)\n"
+"  -v\t\tÐÏËÁÚÁÔÉ ×ÅÒÓ¦À ÔÁ ÐÁÒÁÍÅÔÒÉ ËÏÍЦÌÑæ§\n"
+"  -x\t\tÓÉÍÕÌÀ×ÁÔɠצÄÐÒÁ×ËÕ mailx\n"
+"  -y\t\t×ÉÂÒÁÔÉ ÐÏÛÔÏ×Õ ÓËÒÉÎØËÕ Ú-ÐÏͦ֠×ËÁÚÁÎÉÈ Õ `mailboxes'\n"
+"  -z\t\tÏÄÒÁÚÕ ×ÉÊÔÉ, ÑËÝÏ × ÐÏÛÔÏצʠÓËÒÉÎØæ ÎÅÍÁ¤ ÖÏÄÎÏÇÏ ÌÉÓÔÁ\n"
+"  -Z\t\tצÄËÒÉÔÉ ÐÅÒÛÕ ÓËÒÉÎØËÕ Ú ÎÏ×ÉÍ ÌÉÓÔÏÍ, ÑËÝÏ ÎÅÍÁ¤ - ÏÄÒÁÚÕ ×ÉÊÔÉ\n"
+"  -h\t\tÃѠЦÄËÁÚËÁ"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"ðÁÒÁÍÅÔÒÉ ËÏÍЦÌÑæ§:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "ðÏÍÉÌËÁ ¦Î¦Ã¦Á̦ÚÁ槠ÔÅÒͦÎÁÌÕ."
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr ""
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "DEBUG ÎÅ ×ËÁÚÁÎϠЦĠÞÁÓ ËÏÍЦÌÑæ§. ¶ÇÎÏÒÕ¤ÔØÓÑ.\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s ÎÅ ¦ÓÎÕ¤. óÔ×ÏÒÉÔÉ ÊÏÇÏ?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ %s: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "ïÔÒÉÍÕ×ÁަנÎÅ ×ËÁÚÁÎÏ.\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s: ÎÅÍÏÖÌÉ×Ï ÄÏÄÁÔÉ ÆÁÊÌ.\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "îÅÍÁ¤ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ Ú ÎÏ×ÏÀ ÐÏÛÔÏÀ."
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "÷ȦÄÎÉÈ ÐÏÛÔÏ×ÉÈ ÓËÒÉÎØÏË ÎÅ ×ËÁÚÁÎÏ."
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "ðÏÛÔÏ×Á ÓËÒÉÎØËÁ ÐÏÒÏÖÎÑ."
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "þÉÔÁÎÎÑ %s... %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ Ú¦ÐÓÏ×ÁÎÏ!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÂÕÌÏ Ú¦ÐÓÏ×ÁÎÏ!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "æÁÔÁÌØÎÁ ÐÏÍÉÌËÁ! îÅ ×ÉÊÛÌϠצÄËÒÉÔÉ ÐÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÚÎÏ×Õ!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "ðÏÛÔÏ×Á ÓËÒÉÎØËÁ ÎÅ ÂÌÏËÕ¤ÔØÓÑ!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr "sync: ÓËÒÉÎØËÕ ÚͦÎÅÎÏ, ÁÌÅ ÎÅÍÁ¤ ÚͦÎÅÎÉÈ ÌÉÓÔ¦×! (ÐÏצÄÏÍØÔÅ ÐÒÏ ÃÅ)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "úÁÐÉÓ ÌÉÓÔ¦×... %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "÷ÎÅÓÅÎÎÑ ÚͦÎ..."
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "ú¦ʠÚÁÐÉÓÕ! þÁÓÔËÏ×Õ ÓËÒÉÎØËÕ ÚÂÅÒÅÖÅÎÏ Õ %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "îÅ ×ÉÊÛÌϠצÄËÒÉÔÉ ÐÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÚÎÏ×Õ!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "ðÏ×ÔÏÒΊצÄËÒÉÔÔÑ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ..."
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "ðÅÒÅÊÔÉ ÄÏ: "
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "îÅצÒÎÉÊ ÎÏÍÅÒ ÐÅÒÅ̦ËÕ."
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "öÏÄÎϧ ÐÏÚÉç§."
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "äÁ̦ ÎÉÖÞÅ ÐÒÏËÒÕÞÕ×ÁÔÉ ÎÅ ÍÏÖÎÁ."
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "äÁ̦ ×ÉÝÅ ÐÒÏËÒÕÞÕ×ÁÔÉ ÎÅ ÍÏÖÎÁ."
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "ãÅ ÏÓÔÁÎÎÑ ÓÔÏÒ¦ÎËÁ."
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "ãÅ ÐÅÒÛÁ ÓÔÏÒ¦ÎËÁ."
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "÷É ÂÁÞÉÔÅ ÐÅÒÛÕ ÐÏÚÉæÀ."
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "÷É ÂÁÞÉÔÅ ÏÓÔÁÎÎÀ ÐÏÚÉæÀ."
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "ãÅ ÏÓÔÁÎÎÑ ÐÏÚÉæÑ."
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "ãÅ ÐÅÒÛÁ ÐÏÚÉæÑ."
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "ûÕËÁÔÉ ×ÉÒÁÚ:"
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "ú×ÏÒÏÔΦʠÐÏÛÕË ×ÉÒÁÚÕ: "
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "îÅÍÁ¤ ×ÉÒÁÚÕ ÐÏÛÕËÕ."
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "îÅ ÚÎÁÊÄÅÎÏ."
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "öÏÄÎϧ ÐÏÚÉ槠ÎÅ ×ÉÂÒÁÎÏ."
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "ðÏÛÕË Õ ÃØÏÍÕ ÍÅÎÀ ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ."
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "ðÅÒÅȦĠՠÃØÏÍՠĦÁÌÏÚ¦ ÎŠЦÄÒÉÍÕ¤ÔØÓÑ."
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "÷ÉĦÌÅÎÎѠΊЦÄÔÒÉÍÕ¤ÔØÓÑ."
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "þÉÔÁÎÎÑ %s... %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr ""
+
+#: muttlib.c:835
+#, fuzzy
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "æÁÊÌ ¤ ËÁÔÁÌÏÇÏÍ, ÚÂÅÒÅÇÔÉ Õ ÎØÏÍÕ?"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "æÁÊÌ ¤ ËÁÔÁÌÏÇÏÍ, ÚÂÅÒÅÇÔÉ Õ ÎØÏÍÕ?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "æÁÊÌ Õ ËÁÔÁÌÏÚ¦: "
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "æÁÊÌ ¦ÓÎÕ¤, (o)ÐÅÒÅÐÉÓÁÔÉ, (a)ÄÏÄÁÔÉ ÄÏ ÎØÏÇÏ ÞÉ (c)צÄÍÏ×ÉÔÉ?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr ""
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "îÅÍÏÖÌÉ×Ï ÚÁÐÉÓÁÔÉ ÌÉÓÔ ÄÏ ÓËÒÉÎØËÉ POP."
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s ÎÅ ¤ ÐÏÛÔÏ×ÏÀ ÓËÒÉÎØËÏÀ!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "äÏÄÁÔÉ ÌÉÓÔÉ ÄÏ %s?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "ú'¤ÄÎÁÎÎÑ Ú %s ÚÁËÒÉÔÏ"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "SSL ÎÅÄÏÓÑÖÎÅ."
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "ðÏÍÉÌËÁ ËÏÍÁÎÄÉ, ÐÏÐÅÒÅÄÎØϧ Ú'¤ÄÎÁÎÎÀ."
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "ðÏÍÉÌËÁ Õ Ú'¤ÄÎÁÎΦ Ú ÓÅÒ×ÅÒÏÍ %s (%s)"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr ""
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "ðÏÛÕË %s..."
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "îÅ ×ÉÊÛÌÏ ÚÎÁÊÔÉ ÁÄÒÅÓÕ \"%s\"."
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "ú'¤ÄÎÁÎÎÑ Ú %s..."
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "îÅ ×ÉÊÛÌÏ Ú'¤ÄÎÁÔÉÓÑ Ú %s (%s)."
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr "îÅ ×ÄÁÌÏÓÑ ÚÎÁÊÔÉ ÄÏÓÔÑÔÎØÏ ÅÎÔÒÏЦ§ ÎÁ ×ÁۦʠÓÉÓÔÅͦ"
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr "úÁÐÏ×ÎÅÎÎÑ ÐÕÌÕ ÅÎÔÒÏЦ§: %s...\n"
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s ÍÁ¤ ÎÅÓÅËÒÅÔΦ ÐÒÁ×Á ÄÏÓÔÕÐÕ!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr "SSL ÎÅÄÏÓÑÖÎÅ ÚÁ×ÄÑËÉ ×ÔÒÁÔ¦ ÅÎÔÒÏЦ§"
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr "ÐÏÍÉÌËÁ ××ÏÄÕ-×É×ÏÄÕ"
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr "ÎÅ×ÉÚÎÁÞÅÎÁ ÐÏÍÉÌËÁ ÐÒÏÔÏËÏÌÕ"
+
+#: mutt_ssl.c:324
+#, c-format
+msgid "SSL failed: %s"
+msgstr "ðÏÍÉÌËÁ SSL: %s"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "îÅÍÏÖÌÉ×Ï ÏÔÒÉÍÁÔÉ ÓÅÒÔÉƦËÁÔ"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "ú'¤ÄÎÁÎÎÑ SSL Ú ×ÉËÏÒÉÓÔÁÎÎÑÍ %s (%s)"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "îÅצÄÏÍÅ"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "[ÎÅÍÏÖÌÉ×Ï ÏÂÞÉÓÌÉÔÉ]"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "[ÐÏÍÉÌËÏ×Á ÄÁÔÁ]"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "óÅÒÔÉƦËÁÔ ÓÅÒ×ÅÒÕ ÝŠΊĦÊÓÎÉÊ"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "óÅÒÔÉƦËÁÔ ÓÅÒ×ÅÒÕ ×ÉÄÁÌÅÎÏ ÚÁ ÄÁ×ΦÓÔÀ"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "ãÅÊ ÓÅÒÔÉƦËÁÔ ÎÁÌÅÖÉÔØ:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "ãÅÊ ÓÅÒÔÉƦËÁÔ ×ÉÄÁÎÏ:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "ãÅÊ ÓÅÒÔÉƦËÁԠĦÊÓÎÉÊ"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   ×¦Ä %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "     ÄÏ %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "÷¦ÄÂÉÔÏË: %s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "ðÅÒÅצÒËÁ ÓÅÒÔÉƦËÁÔÕ SSL"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(r)ÎÅ ÐÒÉÊÍÁÔÉ, ÐÒÉÊÎÑÔÉ (o)ÏÄÎÏÒÁÚÏ×Ï ÁÂÏ (a)ÚÁ×ÖÄÉ"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr ""
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(r)ÎÅ ÐÒÉÊÍÁÔÉ, (o)ÐÒÉÊÎÑÔÉ ÏÄÎÏÒÁÚÏ×Ï"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr ""
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "÷ÉȦĠ "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "ðÏÐÅÒÅÄÖÅÎÎÑ: ÎÅÍÏÖÌÉ×Ï ÚÂÅÒÅÇÔÉ ÓÅÒÔÉƦËÁÔ"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "óÅÒÔÉƦËÁÔ ÚÂÅÒÅÖÅÎÏ"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "÷Ó¦ ÓÐÒÏÂÉ ÂÌÏËÕ×ÁÎÎÑ ×ÉÞÅÒÐÁÎÏ, ÚÎÁÔÉ ÂÌÏËÕ×ÁÎÎÑ Ú %s?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "îÅ ×ÉÊÛÌÏ ÚÁÂÌÏËÕ×ÁÔÉ %s.\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "÷ÉÞÅÒÐÁÎÏ ÞÁÓ ÓÐÒÏÂÉ ÂÌÏËÕ×ÁÎÎÑ ÞÅÒÅÚ fctnl!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "þÅËÁÎÎÑ ÂÌÏËÕ×ÁÎÎÑ ÞÅÒÅÚ fctnl... %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "÷ÉÞÅÒÐÁÎÏ ÞÁÓ ÓÐÒÏÂÉ ÂÌÏËÕ×ÁÎÎÑ ÞÅÒÅÚ flock"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "þÅËÁÎÎÑ ÂÌÏËÕ×ÁÎÎÑ ÞÅÒÅÚ flock... %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "îÅ ×ÉÊÛÌÏ ÚÁÂÌÏËÕ×ÁÔÉ %s\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "þÉÔÁÎÎÑ %s..."
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "úÁÐÉÓ %s..."
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "îÅ ×ÉÊÛÌÏ Ó¦ÎÈÒÏΦÚÕ×ÁÔÉ ÐÏÛÔÏ×Õ ÓËÒÉÎØËÕ %s!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "ðÅÒÅÎÅÓÔÉ ÞÉÔÁΦ ÌÉÓÔÉ ÄÏ %s?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "úÎÉÝÉÔÉ %d ×ÉÄÁÌÅÎÉÊ ÌÉÓÔ?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "úÎÉÝÉÔÉ %d ×ÉÄÁÌÅÎÉÈ ÌÉÓÔ¦×?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "ðÅÒÅÎÏÓ ÞÉÔÁÎÉÈ ÌÉÓԦנÄÏ %s..."
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÎÅ ÚͦÎÅÎÏ."
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d ÚÂÅÒÅÖÅÎÏ, %d ÐÅÒÅÎÅÓÅÎÏ, %d ÚÎÉÝÅÎÏ."
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d ÚÂÅÒÅÖÅÎÏ, %d ÚÎÉÝÅÎÏ."
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr "îÁÔÉÓΦÔØ '%s' ÄÌÑ ÚͦÎÉ ÍÏÖÌÉ×ÏÓÔ¦ ÚÁÐÉÓÕ"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "úÒϦÔØ 'toggle-write' ÄÌÑ ×צÍËÎÅÎÎÑ ÚÁÐÉÓÕ!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "óËÒÉÎØËÕ ÐÏͦÞÅÎÏ ÎÅÚͦÎÀ×ÁÎÏÀ. %s"
+
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÐÅÒÅצÒÅÎÏ."
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "îÅÍÏÖÌÉ×Ï ÚÁÐÉÓÁÔÉ ÌÉÓÔ"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "îÅÍÏÖÌÉ×Ï Õ ÃØÏÍÕ ÍÅÎÀ."
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "ðÏÐóÔ"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "îÁÓÔóÔ"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "äÏÄÁÔËÉ"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "îÁÓÔ"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "÷É ÂÁÞÉÔŠ˦ÎÅÃØ ÌÉÓÔÁ."
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "÷É ÂÁÞÉÔÅ ÐÏÞÁÔÏË ÌÉÓÔÁ."
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "ú×ÏÒÏÔΦʠÐÏÛÕË: "
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "ðÏÛÕË: "
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "ð¦ÄËÁÚËÕ ÚÁÒÁÚ ÐÏËÁÚÁÎÏ."
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "ãÉÔÏ×ÁÎÏÇÏ ÔÅËÓÔՠ¦ÌØÛ ÎÅÍÁ¤."
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "ð¦ÓÌÑ ÃÉÔÏ×ÁÎÏÇÏ ÔÅËÓÔՠΦÞÏÇÏ ÎÅÍÁ¤."
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "âÁÇÁÔÏÞÁÓÔÉÎÎÉÊ ÌÉÓÔ ÎÅ ÍÁ¤ ÐÁÒÁÍÅÔÒÕ ÍÅÖ¦!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "ðÏÍÉÌËÁ Õ ×ÉÒÁÚÕ: %s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "äÅÎØ '%s' × Í¦ÓÑæ ÎÅ ¦ÓÎÕ¤"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "í¦ÓÑÃØ '%s' ÎÅ ¦ÓÎÕ¤"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "îÅÍÏÖÌÉ×Á ×¦ÄÎÏÓÎÁ ÄÁÔÁ: %s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "ÐÏÍÉÌËÁ Õ ×ÉÒÁÚÕ"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "ÐÏÍÉÌËÁ Õ ×ÉÒÁÚÕ: %s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c: ÎÅצÒÎÁ ËÏÍÁÎÄÁ"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "× ÃØÏÍÕ ÒÅÖÉÍÏצ '%c' ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "צÄÓÕÔΦʠÐÁÒÁÍÅÔÒ"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "צÄÓÕÔÎÑ ÄÕÖËÁ: %s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "ÐÏÒÏÖΦʠ×ÉÒÁÚ"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "ÐÏÍÉÌËÁ: ÎÅצÄÏÍÅ op %d (ÐÏצÄÏÍØÔÅ ÃÀ ÐÏÍÉÌËÕ)."
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "ëÏÍЦÌÑæѠ×ÉÒÁÚÕ ÐÏÛÕËÕ..."
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "÷ÉËÏÎÁÎÎÑ ËÏÍÁÎÄÉ ÄϠצÄÐÏצÄÎÉÈ ÌÉÓÔ¦×..."
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "ìÉÓÔ¦×, ÝϠצÄÐÏצÄÁÀÔØ ËÒÉÔÅÒ¦À, ÎÅ ÚÎÁÊÄÅÎÏ."
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "ðÏÛÕˠĦÊÛÏ× ÄϠ˦ÎÃÑ, ÁÌÅ ÎÅ ÚÎÁÊÄÅÎϠΦÞÏÇÏ"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "ðÏÛÕˠĦÊÛÏ× ÄÏ ÐÏÞÁÔËÕ, ÁÌÅ ÎÅ ÚÎÁÊÄÅÎϠΦÞÏÇÏ"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "ðÏÛÕË ÐÅÒÅÒ×ÁÎÏ."
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "ëÏÄÏ×Õ ÆÒÁÚÕ PGP ÚÁÂÕÔÏ."
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- ðÏÍÉÌËÁ: ÎÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔɠЦÄÐÒÏÃÅÓ PGP! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- ë¦ÎÅÃØ ÔÅËÓÔÕ ÎÁ ×ÉÈÏĦ PGP --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- ðÏÞÁÔÏË ÐÏצÄÏÍÌÅÎÎÑ PGP --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- ðÏÞÁÔÏË ÂÌÏËՠצÄËÒÉÔÏÇÏ ËÌÀÞÁ PGP --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- ðÏÞÁÔÏË ÐÏצÄÏÍÌÅÎÎÑ Ú PGP Ð¦ÄÐÉÓÏÍ --]\n"
+"\n"
+
+#: pgp.c:381
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr "[-- ë¦ÎÅÃØ ÐÏצÄÏÍÌÅÎÎÑ PGP --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- ë¦ÎÅÃØ ÂÌÏËՠצÄËÒÉÔÏÇÏ ËÌÀÞÁ PGP --]\n"
+
+#: pgp.c:385
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr "[-- ë¦ÎÅÃØ ÐÏצÄÏÍÌÅÎÎÑ Ú PGP Ð¦ÄÐÉÓÏÍ --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- ðÏÍÉÌËÁ: ÎÅ ×ÉÊÛÌÏ ÚÎÁÊÔÉ ÐÏÞÁÔÏË ÐÏצÄÏÍÌÅÎÎÑ PGP! --]\n"
+"\n"
+
+#: pgp.c:662
+#, fuzzy
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "÷ÎÕÔÒ¦ÛÎÑ ÐÏÍÉÌËÁ. ðÏצÄÏÍØÔÅ <roessler@guug.de>."
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- ðÏÍÉÌËÁ: ÎÅ ×ÉÊÛÌÏ ÓÔ×ÏÒÉÔɠЦÄÐÒÏÃÅÓ PGP! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- ðÏÍÉÌËÁ: ÎÅÓÆÏÒÍÏ×ÁÎÉÊ ÌÉÓÔ PGP/MIME! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- ðÏÍÉÌËÁ: ÎÅ ×ÉÊÛÌÏ ÓÔ×ÏÒÉÔÉ ÔÉÍÞÁÓÏ×ÉÊ ÆÁÊÌ! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- îÁÓÔÕÐΦ ÄÁΦ ÚÁÛÉÆÒÏ×ÁÎÏ PGP/MIME --]\n"
+"\n"
+
+#: pgp.c:863
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr "[-- ë¦ÎÅÃØ ÄÁÎÉÈ, ÚÁÛÉÆÒÏ×ÁÎÉÈ PGP/MIME --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "îÅÍÏÖÌÉ×ϠצÄËÒÉÔɠЦÄÐÒÏÃÅÓÓ PGP!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "÷ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ keyID = \"%s\" ÄÌÑ %s?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "÷×ÅĦÔØ keyID ÄÌÑ %s: "
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "îÅ ×ÉÊÛÌÏ ×ÉËÌÉËÁÔÉ PGP"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "ïÔÒÉÍÁÎÎÑ ËÌÀÞÁ PGP..."
+
+#: pgpkey.c:486
+#, fuzzy
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "÷Ó¦ ×¦ÄÐÏצÄΦ ËÌÀÞ¦ ÄÁ×Φ/ÚÁͦÎÅΦ."
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "÷ɦҠ "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "ðÅÒÅצÒËÁ  "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "PGP ËÌÀÞ¦, ÝϠצÄÐÏצÄÁÀÔØ <%s>."
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "PGP ËÌÀÞ¦, ÝϠצÄÐÏצÄÁÀÔØ \"%s\"."
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "îÅÍÏÖÌÉ×ϠצÄËÒÉÔÉ /dev/null"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ ÔÉÍÞÁÓÏ×ÉÊ ÆÁÊÌ"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr ""
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "ãÅÊ ËÌÀÞ ÎÅÍÏÖÌÉ×Ï ×ÉËÏÒÉÓÔÁÔÉ: ÄÁ×ΦÊ/×ÉÍËÎÅÎÉÊ/ÚÁͦÎÅÎÉÊ."
+
+#: pgpkey.c:608
+msgid "ID is expired/disabled/revoked."
+msgstr "ID ÄÁ×ΦÊ/×ÉÍËÎÅÎÉÊ/ÚÁͦÎÅÎÉÊ."
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr "ä¦ÊÓΦÓÔØ ID ÎÅ ×ÉÚÎÁÞÅÎÁ."
+
+#: pgpkey.c:615
+msgid "ID is not valid."
+msgstr "ID ÎÅĦÊÓÎÉÊ."
+
+#: pgpkey.c:618
+msgid "ID is only marginally valid."
+msgstr "ID Ä¦ÊÓÎÉÊ ÌÉÛÅ ÞÁÓÔËÏ×Ï."
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s ÷É ÓÐÒÁ×Ħ ÂÁÖÁ¤ÔÅ ×ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ ËÌÀÞ?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "âÕÄØ ÌÁÓËÁ, ××ÅĦÔØ ID ËÌÀÞÁ: "
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "÷ÉËÌÉË PGP..."
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr ""
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "ðÏÛÕË ËÌÀÞ¦×, ÝϠצÄÐÏצÄÁÀÔØ \"%s\"..."
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "ëÏÍÁÎÄÁ TOP ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ ÓÅÒ×ÅÒÏÍ."
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "îÅÍÏÖÌÉ×Ï ÚÁÐÉÓÁÔÉ ÚÁÇÏÌÏ×ÏË ÄÏ ÔÉÍÞÁÓÏ×ÏÇÏ ÆÁÊÌÕ!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "ëÏÍÁÎÄÁ UIDL ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ ÓÅÒ×ÅÒÏÍ."
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr "%s - ÎÅÐÒÉÐÕÓÔÉÍÉÊ ÛÌÑÈ POP"
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "ïÔÒÉÍÁÎÎÑ ÐÅÒÅ̦ËÕ ÐÏצÄÏÍÌÅÎØ..."
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "îÅÍÏÖÌÉ×Ï ÚÁÐÉÓÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ ÄÏ ÔÉÍÞÁÓÏ×ÏÇÏ ÆÁÊÌÕ!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "ðÅÒÅצÒËÁ ÎÁÑ×ÎÏÓÔ¦ ÎÏ×ÉÈ ÐÏצÄÏÍÌÅÎØ..."
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "POP host ÎÅ ×ÉÚÎÁÞÅÎÏ."
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "÷ ÐÏÛÔÏצʠÓËÒÉÎØæ POP ÎÅÍÁ¤ ÎÏ×ÉÈ ÌÉÓÔ¦×."
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "÷ÉÄÁÌÉÔÉ ÐÏצÄÏÍÌÅÎÎÑ Ú ÓÅÒ×ÅÒÕ?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "þÉÔÁÎÎÑ ÎÏ×ÉÈ ÐÏצÄÏÍÌÅÎØ (%d ÂÁÊÔ)..."
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "ðÏÍÉÌËÁ Ð¦Ä ÞÁÓ ÚÁÐÉÓÕ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [%d Ú %d ÌÉÓԦנÐÒÏÞÉÔÁÎÏ]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "óÅÒ×ÅÒ ÚÁËÒÉ× Ú'¤ÄÎÁÎÎÑ!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "áÕÔÅÎÔÉƦËÁæѠ(SASL)..."
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "áÕÔÅÎÔÉƦËÁæѠ(APOP)..."
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "ðÏÍÉÌËÁ ÁÕÔÅÎÔÉƦËÁ槠APOP."
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "ëÏÍÁÎÄÁ USER ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ ÓÅÒ×ÅÒÏÍ."
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "îÅÍÏÖÌÉ×Ï ÚÁÌÉÛÉÔÉ ÐÏצÄÏÍÌÅÎÎÑ ÎÁ ÓÅÒ×ÅÒ¦."
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "ðÏÍÉÌËÁ Ú'¤ÄÎÁÎÎÑ Ú ÓÅÒ×ÅÒÏÍ: %s"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "úÁËÒÉÔÔÑ Ú'¤ÄÎÁÎÎÑ Ú ÓÅÒ×ÅÒÏÍ POP..."
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "ðÅÒÅצÒËÁ ¦ÎÄÅËӦנÐÏצÄÏÍÌÅÎØ..."
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "ú'¤ÄÎÁÎÎÑ ÚÁÇÕÂÌÅÎÏ. ÷¦ÄÎÏ×ÉÔÉ Ú×'ÑÚÏË Ú ÓÅÒ×ÅÒÏÍ POP?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "úÁÌÉÛÅΦ ÌÉÓÔÉ"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "öÏÄÎÏÇÏ ÌÉÓÔÁ ÎÅ ÚÁÌÉÛÅÎÏ."
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "îÅצÒÎÉÊ ÚÁÇÏÌÏ×ÏË PGP"
+
+#: postpone.c:479
+#, fuzzy
+msgid "Illegal S/MIME header"
+msgstr "îÅצÒÎÉÊ ÚÁÇÏÌÏ×ÏË PGP"
+
+#: postpone.c:554
+#, fuzzy
+msgid "Decryption failed."
+msgstr "ðÏÍÉÌËÁ ÒŤÓÔÒÁæ§."
+
+#: query.c:46
+msgid "New Query"
+msgstr "îÏ×ÉÊ ÚÁÐÉÔ"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "óÔ×ÏÒÉÔÉ Á̦ÁÓ"
+
+#: query.c:48
+msgid "Search"
+msgstr "ðÏÛÕË"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "þÅËÁÊÔŠצÄÐÏצĦ..."
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "ëÏÍÁÎÄÕ ÚÁÐÉÔÕ ÎÅ ×ÉÚÎÁÞÅÎÏ."
+
+#: query.c:286
+msgid "Query"
+msgstr "úÁÐÉÔ"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "úÁÐÉÔ:"
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "úÁÐÉÔ '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "ëÏÎ×."
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "äÒÕË"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "úÂÅÒÅÖÅÎÎÑ..."
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "äÏÄÁÔÏË ÚÁÐÉÓÁÎÏ."
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "ïâåòåöîï! ÷É ÚÎÉÝÉÔÅ ¦ÓÎÕÀÞÉÊ %s ÐÒÉ ÚÁÐÉÓÕ. ÷É ÐÅ×Φ?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "äÏÄÁÔÏË ÏÔƦÌØÔÒÏ×ÁÎÏ."
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "æ¦ÌØÔÒÕ×ÁÔÉ ÞÅÒÅÚ: "
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "ðÅÒÅÄÁÔÉ Õ ËÏÎ׍ҠËÏÍÁÎĦ: "
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "ñ ÎÅ ÚÎÁÀ, ÑË ÄÒÕËÕ×ÁÔÉ ÄÏÄÁÔËÉ ÔÉÐÕ %s!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "äÒÕËÕ×ÁÔÉ ×ÉĦÌÅΦ ÄÏÄÁÔËÉ?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "äÒÕËÕ×ÁÔÉ ÄÏÄÁÔÏË?"
+
+#: recvattach.c:938
+#, fuzzy
+msgid "Can't decrypt encrypted message!"
+msgstr "îÅ ÚÎÁÊÄÅÎÏ ×ÉĦÌÅÎÉÈ ÌÉÓÔ¦×."
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "äÏÄÁÔËÉ"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "îÅÍÁ¤ Ð¦ÄÞÁÓÔÉΠÄÌÑ ÐÒÏÇÌÑÄÁÎÎÑ!"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "îÅÍÏÖÌÉ×Ï ×ÉÄÁÌÉÔÉ ÄÏÄÁÔÏË Ú ÓÅÒ×ÅÒÁ POP."
+
+#: recvattach.c:1056
+#, fuzzy
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "÷ÉÄÁÌÅÎÎÑ ÄÏÄÁÔ˦נڠÌÉÓԦנڠPGP ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ."
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "ð¦ÄÔÒÉÍÕ¤ÔØÓÑ Ô¦ÌØËÉ ×ÉÄÁÌÅÎÎÑ × ÂÁÇÁÔÏÞÁÓÔÉÎÎÉÈ ÌÉÓÔÁÈ."
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "÷É ÍÏÖÅÔÅ ÎÁÄÓÉÌÁÔÉ Ô¦ÌØËÉ ËÏЦ§ ÞÁÓÔÉΠmessage/rfc822."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing message!"
+msgstr "ðÏÍÉÌËÁ ÐÒɠצÄÐÒÁ×æ."
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing messages!"
+msgstr "ðÏÍÉÌËÁ ÐÒɠצÄÐÒÁ×æ."
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "îÅÍÏÖÌÉ×ϠצÄËÒÉÔÉ ÔÉÍÞÁÓÏ×ÉÊ ÆÁÊÌ %s."
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "ðÅÒÅÓÌÁÔÉ ÑË ÄÏÄÁÔËÉ?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr "îÅÍÏÖÌÉ×Ï ÄÅËÏÄÕ×ÁÔÉ ×Ó¦ ×ÉĦÌÅΦ ÄÏÄÁÔËÉ. ðÅÒÅÓÉÌÁÔÉ §È MIME?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "ðÅÒÅÓÌÁÔÉ ÅÎËÁÐÓÕÌØÏ×ÁÎÉ͠ՠצÄÐÏצÄÎÏÓÔ¦ ÄÏ MIME?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ %s."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "îÅ ÚÎÁÊÄÅÎÏ ×ÉĦÌÅÎÉÈ ÌÉÓÔ¦×."
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "îÅ ÚÎÁÊÄÅÎÏ ÓÐÉÓ˦נÒÏÚÓÉÌËÉ!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr "îÅÍÏÖÌÉ×Ï ÄÅËÏÄÕ×ÁÔÉ ×Ó¦ ×ÉĦÌÅΦ ÄÏÄÁÔËÉ. ëÁÐÓÕÌÀ×ÁÔÉ §È Õ MIME?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "äÏÄÁÔÉ"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "÷ÓÔÁ×."
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "÷ÉÄÁÌ."
+
+#: remailer.c:484
+msgid "OK"
+msgstr ""
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "îÅÍÏÖÌÉ×Ï ÏÔÒÉÍÁÔÉ type2.list mixmaster'Á!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "÷ÅÂÅÒ¦ÔØ ÌÁÎÃÀÖÏË remailer."
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "ðÏÍÉÌËÁ: %s ÎÅÍÏÖÌÉ×Ï ×ÉËÏÒÉÓÔÁÔÉ ÑË ÏÓÔÁÎΦʠremailer ÌÁÎÃÀÖËÕ."
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "ìÁÎÃÀÖÏË ÎÅ ÍÏÖÅ ÂÕÔɠ¦ÌØÛÉÍ ÚÁ %d ÅÌÅÍÅÎÔ¦×."
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "ìÁÎÃÀÖÏË remailer'Á ×ÖÅ ÐÏÒÏÖΦÊ."
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "ðÅÒÛÉÊ ÅÌÅÍÅÎÔ ÌÁÎÃÀÖËÕ ×ÖÅ ×ÉÂÒÁÎÏ."
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "ïÓÔÁÎΦʠÅÌÅÍÅÎÔ ÌÁÎÃÀÖËÕ ×ÖÅ ×ÉÂÒÁÎÏ."
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Mixmaster ÎÅ ÐÒÉÊÍÁ¤ ÚÁÇÏÌÏ×ËÉ Cc ÔÁ Bcc."
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr ""
+"ôÒÅÂÁ ×ÓÔÁÎÏ×ÉÔɠצÄÐÏצÄÎÅ ÚÎÁÞÅÎÎÑ hostname ÄÌÑ ×ÉËÏÒÉÓÔÁÎÎÑ mixmaster!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "ðÏÍÉÌËÁ ×¦ÄÐÒÁ×ËÉ, ËÏÄ ÐÏ×ÅÒÎÅÎÎÑ %d.\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "ðÏÍÉÌËÁ ÐÒɠצÄÐÒÁ×æ."
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "îÅצÒÎÏ ÆÏÒÍÁÔÏ×ÁÎÉÊ ÚÁÐÉÓ ÄÌÑ ÔÉÐÕ %s × \"%s\", ÒÑÄÏË %d"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "ûÌÑÈ ÄÏ mailcap ÎÅ ×ËÁÚÁÎÏ"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "ÚÁÐÉÓÕ ÄÌÑ ÔÉÐÕ %s × mailcap ÎÅ ÚÎÁÊÄÅÎÏ"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "score: ÄÕÖÅ ÍÁÌÏ ÁÒÇÕÍÅÎÔ¦×"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "score: ÄÕÖÅ ÂÁÇÁÔÏ ÁÒÇÕÍÅÎÔ¦×"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "ôÅÍÉ ÎÅÍÁ¤, ×¦ÄͦÎÉÔÉ?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "ôÅÍÉ ÎÅÍÁ¤, ×¦ÄͦÎÅÎÏ."
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "÷¦ÄÐÏצÓÔÉ %s%s?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "ðÅÒÅÓÌÁÔÉ %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "îÅ ×ÉÄÎÏ ×ÉĦÌÅÎÉÈ ÌÉÓÔ¦×!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "äÏÄÁÔÉ ÌÉÓÔ ÄϠצÄÐÏצĦ?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "ãÉÔÕ¤ÔØÓÑ ÐÏצÄÏÍÌÅÎÎÑ..."
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "îÅ ×ÉÊÛÌÏ ÄÏÄÁÔÉ ×Ó¦ ÂÁÖÁΦ ÌÉÓÔÉ!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "ðÅÒÅÓÌÁÔÉ ÑË ÄÏÄÁÔÏË?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "ð¦ÄÇÏÔÕ×ÁÎÎÑ ÌÉÓÔÁ ÄÌÑ ÐÅÒÅÓÉÌÁÎÎÑ..."
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "÷ÉËÌÉËÁÔÉ ÚÁÌÉÛÅÎÉÊ ÌÉÓÔ?"
+
+#: send.c:1336
+#, fuzzy
+msgid "Edit forwarded message?"
+msgstr "ð¦ÄÇÏÔÕ×ÁÎÎÑ ÌÉÓÔÁ ÄÌÑ ÐÅÒÅÓÉÌÁÎÎÑ..."
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "÷¦ÄͦÎÉÔɠצÄÐÒÁ×ËÕ ÎÅ ÚͦÎÅÎÏÇÏ ÌÉÓÔÁ?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "ìÉÓÔ ÎÅ ÚͦÎÅÎÏ, ÔÏÍՠצÄÐÒÁ×ËՠצÄͦÎÅÎÏ."
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "ìÉÓԠΊצÄÐÒÁ×ÌÅÎÏ."
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "ìÉÓÔ ÚÁÌÉÛÅÎÏ ÄÌÑ ÐÏÄÁÌØÛϧ ×¦ÄÐÒÁ×ËÉ.."
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "îÅ ×ËÁÚÁÎÏ ÏÔÒÉÍÕ×ÁÞ¦×!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "ïÔÒÉÍÕ×ÁަנÎÅ ÂÕÌÏ ×ËÁÚÁÎÏ."
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "ôÅÍÉ ÎÅÍÁ¤, ×¦ÄͦÎÉÔɠצÄÐÒÁ×ËÕ?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "ôÅÍÉ ÎÅ ×ËÁÚÁÎÏ."
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "ìÉÓԠצÄÐÒÁ×ÌѤÔØÓÑ..."
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "îÅ ×ÉÊÛÌϠצÄÐÒÁ×ÉÔÉ ÌÉÓÔ."
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "ìÉÓÔ ÐÏÓÌÁÎÏ."
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "æÏÎÏ×Á ×¦ÄÐÒÁ×ËÁ."
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "îÅÍÁ¤ ÐÁÒÁÍÅÔÒÕ ÍÅÖ¦! [ÓÐÏצÓÔ¦ÔØ ÐÒÏ ÃÀ ÐÏÍÉÌËÕ]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s Â¦ÌØÛÅ ÎÅ ¦ÓÎÕ¤!"
+
+#: sendlib.c:916
+#, c-format
+msgid "%s isn't a regular file."
+msgstr "%s ÎÅ ¤ Ú×ÉÞÁÊÎÉÍ ÆÁÊÌÏÍ."
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "îÅ ×ÉÊÛÌϠצÄËÒÉÔÉ %s"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "ðÏÍÉÌËÁ ×¦ÄÐÒÁ×ËÉ, ËÏÄ ÐÏ×ÅÒÎÅÎÎÑ %d (%s)."
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "÷ÉȦĠÐÒÏÃÅÓÕ ÄÏÓÔÁ×ËÉ"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr ""
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s...  ÷ÉÈÏÄÖÕ.\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "ïÔÒÉÍÁÎÏ %s...  ÷ÉÈÏÄÖÕ.\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "ïÔÒÉÍÁÎÏ ÓÉÇÎÁÌ %d...  ÷ÉÈÏÄÖÕ.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr ""
+
+#: smime.c:303
+msgid "Verified  "
+msgstr ""
+
+#: smime.c:306
+msgid "Unverified"
+msgstr ""
+
+#: smime.c:309
+#, fuzzy
+msgid "Expired   "
+msgstr "÷ÉȦĠ "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr ""
+
+#: smime.c:315
+#, fuzzy
+msgid "Invalid   "
+msgstr "í¦ÓÑÃØ '%s' ÎÅ ¦ÓÎÕ¤"
+
+#: smime.c:318
+#, fuzzy
+msgid "Unknown   "
+msgstr "îÅצÄÏÍÅ"
+
+#: smime.c:347
+#, fuzzy
+msgid "Enter keyID: "
+msgstr "÷×ÅĦÔØ keyID ÄÌÑ %s: "
+
+#: smime.c:370
+#, fuzzy, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "PGP ËÌÀÞ¦, ÝϠצÄÐÏצÄÁÀÔØ \"%s\"."
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr ""
+
+#: smime.c:523 smime.c:592
+#, fuzzy, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "÷ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ keyID = \"%s\" ÄÌÑ %s?"
+
+#: smime.c:526 smime.c:595
+#, fuzzy, c-format
+msgid "Use ID %s for %s ?"
+msgstr "÷ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ keyID = \"%s\" ÄÌÑ %s?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr ""
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+#, fuzzy
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "[-- ðÏÍÉÌËÁ: ÎÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔɠЦÄÐÒÏÃÅÓ PGP! --]\n"
+
+#: smime.c:1197
+#, fuzzy
+msgid "no certfile"
+msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔɠƦÌØÔÒ"
+
+#: smime.c:1200
+#, fuzzy
+msgid "no mbox"
+msgstr "(ÓËÒÉÎØËÉ ÎÅÍÁ¤)"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr ""
+
+#: smime.c:1381
+#, fuzzy
+msgid "Warning: Intermediate certificate not found."
+msgstr "ðÏÐÅÒÅÄÖÅÎÎÑ: ÎÅÍÏÖÌÉ×Ï ÚÂÅÒÅÇÔÉ ÓÅÒÔÉƦËÁÔ"
+
+#: smime.c:1426
+#, fuzzy
+msgid "Can't open OpenSSL subprocess!"
+msgstr "îÅÍÏÖÌÉ×ϠצÄËÒÉÔɠЦÄÐÒÏÃÅÓÓ PGP!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr ""
+
+#: smime.c:1629 smime.c:1751
+#, fuzzy
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- ë¦ÎÅÃØ ÔÅËÓÔÕ ÎÁ ×ÉÈÏĦ PGP --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+#, fuzzy
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- ðÏÍÉÌËÁ: ÎÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔɠЦÄÐÒÏÃÅÓ PGP! --]\n"
+
+#: smime.c:1755
+#, fuzzy
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr ""
+"[-- îÁÓÔÕÐΦ ÄÁΦ ÚÁÛÉÆÒÏ×ÁÎÏ PGP/MIME --]\n"
+"\n"
+
+#: smime.c:1758
+#, fuzzy
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr ""
+"[-- îÁÓÔÕÐΦ ÄÁΦ Ð¦ÄÐÉÓÁÎÏ --]\n"
+"\n"
+
+#: smime.c:1822
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr "[-- ë¦ÎÅÃØ ÄÁÎÉÈ, ÚÁÛÉÆÒÏ×ÁÎÉÈ PGP/MIME --]\n"
+
+#: smime.c:1824
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr "[-- ë¦ÎÅÃؠЦÄÐÉÓÁÎÉÈ ÄÁÎÉÈ --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "óÏÒÔÕ×ÁÎÎÑ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ..."
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "îÅ ÚÎÁÊÄÅÎÏ ÆÕÎËæÀ ÓÏÒÔÕ×ÁÎÎÑ! [ÓÐÏצÓÔÉÔØ ÐÒÏ ÃÅ]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(ÓËÒÉÎØËÉ ÎÅÍÁ¤)"
+
+#: thread.c:1081
+msgid "Parent message is not visible in this limited view."
+msgstr "\"âÁÔØ˦×ÓØËÉÊ\" ÌÉÓÔ ÎÅ ÍÏÖÎÁ ÐÏÂÁÞÉÔÉ ÐÒÉ ÃØÏÍÕ ÏÂÍÅÖÅÎΦ."
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "\"âÁÔØ˦×ÓØËÉÊ\" ÌÉÓÔ ÎÅ ÍÏÖÎÁ ÐÏÂÁÞÉÔÉ."
+
+#, fuzzy
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "÷ÉËÌÉË PGP..."
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "îÁĦÓÌÁÔÉ ËÏЦÀ ÐÏצÄÏÍÌÅÎÎÑ %s...?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "îÁĦÓÌÁÔÉ ËÏЦ§ ÐÏצÄÏÍÌÅÎØ %s...?"
+
+#, fuzzy
+#~ msgid "Certificate *NOT* added."
+#~ msgstr "óÅÒÔÉƦËÁÔ ÚÂÅÒÅÖÅÎÏ"
+
+#~ msgid "This ID's validity level is undefined."
+#~ msgstr "ò¦×ÅÎØ ÄÏצÒÉ ÄÏ ÃØÏÇÏ ID ÎÅ ×ÉÚÎÁÞÅÎÏ."
+
+#~ msgid "Decode-save"
+#~ msgstr "òÏÚËÏÄ. Ê ÚÎÉÝ."
+
+#~ msgid "Decode-copy"
+#~ msgstr "òÏÚËÏÄÕ×ÁÔÉ"
+
+#~ msgid "Decrypt-save"
+#~ msgstr "òÏÚÛÉÆÒ. Ê ÚÎÉÝ."
+
+#~ msgid "Decrypt-copy"
+#~ msgstr "òÏÚÛÉÆÒÕ×ÁÔÉ"
+
+#~ msgid "Copy"
+#~ msgstr "ëÏÐ."
+
+#~ msgid ""
+#~ "\n"
+#~ "[-- End of PGP output --]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "[-- ë¦ÎÅÃØ ÔÅËÓÔÕ ÎÁ ×ÉÈÏĦ PGP --]\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "Can't stat %s."
+#~ msgstr "îÅÍÏÖÌÉ×Ï ÏÔÒÉÍÁÔÉ ÄÁΦ: %s"
+
+#~ msgid "%s: no such command"
+#~ msgstr "ËÏÍÁÎÄÁ '%s' ÎÅ ¦ÓÎÕ¤"
+
+#~ msgid "Authentication method is unknown."
+#~ msgstr "îÅצÄÏÍÉÊ ÍÅÔÏÄ ÁÕÔÅÎÔÉƦËÁæ§."
+
+#~ msgid "MIC algorithm: "
+#~ msgstr "áÌÇÏÒ¦ÔÍ MIC: "
+
+#~ msgid "This doesn't make sense if you don't want to sign the message."
+#~ msgstr "îÅÍÁ¤ ÓÅÎÓÕ ÃÅ ÒÏÂÉÔÉ, ÑËÝÏ ×ɠΊЦÄÐÉÓÕ¤ÔÅ ÐÏצÄÏÍÌÅÎÎÑ."
+
+#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160"
+#~ msgstr "îÅצÄÏÍÉÊ ÁÌÇÏÒ¦ÔÍ MIC, ÍÏÖÌÉצ ÌÉÛÅ: pgp-md5, pgp-sha1, pgp-rmd160"
+
+#~ msgid "Reading new message (%d bytes)..."
+#~ msgstr "þÉÔÁÎÎÑ ÎÏ×ÏÇÏ ÐÏצÄÏÍÌÅÎÎÑ (%d ÂÁÊÔ)..."
+
+#~ msgid "Error reading message!"
+#~ msgstr "ðÏÍÉÌËÁ ÞÉÔÁÎÎÑ ÌÉÓÔÁ!"
+
+#~ msgid "%s [%d message read]"
+#~ msgstr "%s [%d ÌÉÓÔ ÐÒÏÞÉÔÁÎÏ]"
+
+#~ msgid "Creating mailboxes is not yet supported."
+#~ msgstr "óÔ×ÏÒÅÎÎÑ ÐÏÛÔÏ×ÉÈ ÓËÒÉÎØÏË ÐÏËÉ ÝϠΊЦÄÔÒÉÍÕ¤ÔØÓÑ."
+
+#~ msgid "Reopening mailbox... %s"
+#~ msgstr "ðÏ×ÔÏÒΊצÄËÒÉÔÔÑ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ... %s"
+
+#~ msgid "Closing mailbox..."
+#~ msgstr "úÁËÒÉÔÔÑ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ..."
+
+#~ msgid "IMAP Username: "
+#~ msgstr "¶Í'Ñ ËÏÒÉÓÔÕ×ÁÞÁ IMAP: "
+
+#~ msgid "CRAM key for %s@%s: "
+#~ msgstr "CRAM key ÄÌÑ %s@%s: "
+
+#~ msgid "Skipping CRAM-MD5 authentication."
+#~ msgstr "áÕÔÅÎÔÉƦËÁæÀ CRAM-MD5 ÐÒÏÐÕÝÅÎÏ."
+
+#~ msgid "[-- Error: unexpected end of file! --]\n"
+#~ msgstr "[-- ðÏÍÉÌËÁ: Ë¦ÎÅÃØ ÆÁÊÌÕ ÎÅ ÚÎÁÊÄÅÎÏ! --]\n"
+
+#~ msgid "Sending APPEND command ..."
+#~ msgstr "îÁÄÓÉÌÁÎÎÑ ËÏÍÁÎÄÉ APPEND..."
+
+#~ msgid "%d kept."
+#~ msgstr "%d ÚÂÅÒÅÖÅÎÏ."
+
+#~ msgid "POP Password: "
+#~ msgstr "ðÁÒÏÌØ POP: "
+
+#~ msgid "No POP username is defined."
+#~ msgstr "¶Í'Ñ ËÏÒÉÓÔÕ×ÁÞÁ POP ÎÅ ×ÉÚÎÁÞÅÎÏ."
+
+#~ msgid "Could not find address for host %s."
+#~ msgstr "îÅ ×ÉÊÛÌÏ ÚÎÁÊÔÉ ÁÄÒÅÓÕ ÄÌÑ %s."
+
+#~ msgid "Attachment saved"
+#~ msgstr "äÏÄÁÔÏË ÚÂÅÒÅÖÅÎÏ"
+
+#~ msgid "Can't open %s: %s."
+#~ msgstr "îÅ ×ÉÊÛÌϠצÄËÒÉÔÉ %s: %s"
+
+#~ msgid "Error while recoding %s. Leave it unchanged."
+#~ msgstr "ðÏÍÉÌËÁ ÐÒÉ ÒÅËÏÄÕ×ÁÎΦ %s. úÁÌÉÛÅÎÏ ÂÅÚ ÚͦÎ."
+
+#~ msgid "Error while recoding %s. See %s for recovering your data."
+#~ msgstr "ðÏÍÉÌËÁ ÐÒÉ ÒÅËÏÄÕ×ÁÎΦ %s. äÉצÔØÓÑ %s ÄÌѠצÄÎÏ×ÌÅÎÎÑ."
+
+#~ msgid "Can't change character set for non-text attachments!"
+#~ msgstr "îÅ ÍÏÖÎÁ ÚͦÎÉÔÉ ËÏÄÕ×ÁÎÎÑ ÄÌÑ ÎÅÔÅËÓÔÏ×ÉÈ ÄÏÄÁÔ˦×!"
+
+#~ msgid "Enter character set: "
+#~ msgstr "÷×ÅĦÔØ ÎÁÚ×Õ ËÏÄÕ×ÁÎÎÑ: "
+
+#~ msgid "Recoding successful."
+#~ msgstr "ðÅÒÅËÏÄÕ×ÁÎÎÑ ×ÉËÏÎÁÎÏ."
+
+#~ msgid "change an attachment's character set"
+#~ msgstr "×ÉÂÒÁÔÉ ËÏÄÕ×ÁÎÎÑ ÄÏÄÁÔËÕ"
+
+#~ msgid "recode this attachment to/from the local charset"
+#~ msgstr "ÐÅÒÅËÏÄÕ×ÁÔÉ ÄÏÄÁÔÏË ÄÏ/Ú ÌÏËÁÌØÎÏÇÏ ËÏÄÕ×ÁÎÎÑ"
+
+#~ msgid "Compose"
+#~ msgstr "ëÏÍÐÏÎÕ×ÁÎÎÑ"
+
+#~ msgid "We can't currently handle utf-8 at this point."
+#~ msgstr "õ ÃØÏÍՠͦÓæ utf-8 ÐÏËÉ ÝϠΊЦÄÔÒÉÍÕ¤ÔØÓÑ."
+
+#~ msgid "UTF-8 encoding attachments has not yet been implemented."
+#~ msgstr "ëÏÄÕ×ÁÎÎÑ ÄÏÄÁÔ˦נÄÏ UTF-8 ÐÏËÉ ÝϠΊЦÄÔÒÉÍÕ¤ÔØÓÑ."
+
+#~ msgid "We currently can't encode to utf-8."
+#~ msgstr "ëÏÄÕ×ÁÎÎÑ ÄÏ utf-8 ÐÏËÉ ÝÏ ÎÅÍÏÖÌÉ×Å."
+
+#~ msgid "move to the last undelete message"
+#~ msgstr "ÐÅÒÅÓÕÎÕÔÉ ÄÏ ÏÓÔÁÎÎØÏÇÏ ÎÅ×ÉÄÁÌÅÎÏÇÏ ÌÉÓÔÁ"
+
+#~ msgid "return to the main-menu"
+#~ msgstr "ÐÏ×ÅÒÎÅÎÎÑ ÄÏ ÏÓÎÏ×ÎÏÇÏ ÍÅÎÀ"
+
+#~ msgid "ignoring empty header field: %s"
+#~ msgstr "ÐÏÒÏÖΤ ÐÏÌÅ ÚÁÇÏÌÏ×ËÕ '%s' ¦ÇÎÏÒÏ×ÁÎÏ"
+
+#~ msgid "imap_error(): unexpected response in %s: %s\n"
+#~ msgstr "imap_error(): ÎÅÖÄÁÎÁ ×¦ÄÐÏצÄØ × %s: %s\n"
+
+#~ msgid "An unkown PGP version was defined for signing."
+#~ msgstr "÷ËÁÚÁÎÁ ×ÅÒӦѠPGP ÄÌѠЦÄÐÉÓÕ ÎÅצÄÏÍÁ."
+
+#~ msgid "Message edited. Really send?"
+#~ msgstr "ìÉÓÔ ÚͦÎÅÎÏ. óÐÒÁ×Ħ ×¦ÄÓÉÌÁÔÉ?"
+
+#~ msgid "Unknown PGP version \"%s\"."
+#~ msgstr "îÅצÄÏÍÁ ×ÅÒӦѠPGP \"%s\"."
+
+#~ msgid "Display message using mailcap?"
+#~ msgstr "÷¦ÄÏÂÒÁÚÉÔÉ ÌÉÓÔ Ú ×ÉËÏÒÉÓÔÁÎÎÑÍ mailcap?"
+
+#~ msgid "Can't open your secret key ring!"
+#~ msgstr "îŠצÄËÒÉ×Á¤ÔÓÑ ÓÅËÒÅÔÎÉÊ ËÌÀÞ!"
+
+#~ msgid "%s is a boolean var!"
+#~ msgstr "%s - ÌÏǦÞÎÁ ÚͦÎÎÁ!"
+
+#~ msgid "Saved output of child process to %s.\n"
+#~ msgstr "÷É×ÏÄ ÐÏÒÏÄÖÅÎÏÇÏ ÐÒÏÃÅÓÕ ÚÂÅÒÅÖÅÎÏ × %s.\n"
+
+#~ msgid ""
+#~ "[-- Error: this message does not comply with the PGP/MIME specification! "
+#~ "--]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "[-- ðÏÍÉÌËÁ: ÃÅÊ ÌÉÓԠΊצÄÐÏצÄÁ¤ ÓÐÅÃÉƦËÁ秠PGP/MIME --]\n"
+#~ "\n"
+
+#~ msgid "This encoding is deprecated.  Really use it?"
+#~ msgstr "ãÅ ËÏÄÕ×ÁÎÎÑ ÚÁÓÔÁÒ¦ÌÅ. ä¦ÊÓÎÏ ×ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ?"
+
+#~ msgid "Deleting non-multipart messages not yet supported"
+#~ msgstr "÷ÉÄÁÌÅÎÎÑ ÌÉÓÔÁ, ÝÏ ÍÁ¤ ÏÄÎÕ ÞÁÓÔÉÎÕ, ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
new file mode 100644 (file)
index 0000000..810c028
Binary files /dev/null and b/po/zh_CN.gmo differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644 (file)
index 0000000..6c554ff
--- /dev/null
@@ -0,0 +1,4568 @@
+# Translation for mutt in Traditional Chinese, Big5 encoding.
+#
+# Copyright  Cd Chen <cdchen@mail.cynix.com.tw>, Weichung Chau <weichung@mail.cynix.com.tw>, Anthony Wong <ypwong@debian.org>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Mutt 1.1.2\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 1999-12-20 20:41+0800\n"
+"Last-Translator: Anthony Wong <ypwong@debian.org>\n"
+"Language-Team: Chinese <zh@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=gb2312\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: account.c:144
+#, fuzzy, c-format
+msgid "Username at %s: "
+msgstr "¸ü¸ÄÃû³ÆΪ£º"
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "%s@%s µÄÃÜÂ룺"
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "À뿪"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "ɾ³ý"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "·´É¾³ý"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "Ñ¡Ôñ"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "°ïÖú"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "ÄúûÓбðÃû×ÊÁÏ£¡"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "±ðÃû"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "È¡±ðÃûΪ£º"
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "ÄúÒѾ­ÎªÕâ¸öÃû×Ö¶¨ÒåÁ˱ðÃûÀ²£¡"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr ""
+
+#: alias.c:279
+msgid "Address: "
+msgstr "µØÖ·£º"
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr ""
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "¸öÈËÐÕÃû£º"
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] ½ÓÊÜ?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "´æµ½Îļþ£º"
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "±ðÃûÒѾ­Ôö¼Ó¡£"
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "ÎÞ·¨Æ¥ÅäÃû³ÆÄ£°å£¬¼ÌÐø£¿"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "Mailcap ±à¼­ÏîÄ¿ÐèÒª %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "Ö´ÐР\"%s\" Ê±·¢Éú´íÎó£¡"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "´ò¿ªÎļþÀ´·ÖÎöÎļþͷʧ°Ü¡£"
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "´ò¿ªÎļþʱȥ³ýÎļþ±êͷʧ°Ü¡£"
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "ûÓР%s µÄ mailcap ×é³ÉµÇ¼£¬ÕýÔÚ½¨Á¢¿ÕµÄÎļþ¡£"
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "±à¼­ Mailcap ÏîĿʱÐèÒª %%s"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "ûÓР%s µÄ mailcap ±à¼­µÇ¼"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "ûÓз¢ÏÖÅäºÏ mailcap µÄµÇ¼¡£½«ÒÔÎÄ×Öµµ·½Ê½ä¯ÀÀ¡£"
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "MIME ÐÎʽδ±»¶¨Òå. ÎÞ·¨ÏÔʾ¸½¼þÄÚÈÝ¡£"
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "ÎÞ·¨½¨Á¢¹ýÂËÆ÷"
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "ÎÞ·¨½¨Á¢¹ýÂË"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "дÈëʧ°Ü£¡"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "ÎÒ²»ÖªµÀÒªÈçºÎ´òÓ¡Ëü£¡"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "¸Ä±äĿ¼"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "ÕÚÕÖ"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s ²»ÊÇÒ»¸öĿ¼"
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "ÐÅÏä [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "ÒѶ©ÔÄ [%s], ÎļþÕÚÕÖ: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "Ŀ¼ [%s], ÎļþÕÚÕÖ: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "ÎÞ·¨¸½´øĿ¼£¡"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "ûÓÐÎļþÓëÎļþÕÚÕÖÏà·û"
+
+#: browser.c:856
+#, fuzzy
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "Ö»ÓРIMAP ÓÊÏä²ÅÖ§³Öɾ³ý"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "Ö»ÓРIMAP ÓÊÏä²ÅÖ§³Öɾ³ý"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "ÕæµÄҪɾ³ý \"%s\" ÓÊÏ䣿"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "ÓÊÏäÒÑɾ³ý¡£"
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "ÓÊÏäδ±»É¾³ý¡£"
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "¸Ä±äĿ¼µ½£º"
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "ÎÞ·¨É¨ÃèĿ¼¡£"
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "ÎļþÕÚÕÖ£º"
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "·´ÏòÅÅÐò (d)ÈÕÆÚ, (a)×ÖÔª, (z)´óС »ò (n)²»ÅÅÐò ? "
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "ÒÀÕÕ (d)ÈÕÆÚ (a)×ÖÔª (z)´óС À´ÅÅÐò£¬»ò(n)²»ÅÅÐò ? "
+
+#: browser.c:1049
+msgid "dazn"
+msgstr ""
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "еµÃû£º"
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "ÎÞ·¨ÏÔʾĿ¼"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "ÎÞ·¨ÊÔÖøÏÔʾÎļþ"
+
+#: buffy.c:442
+#, fuzzy
+msgid "New mail in "
+msgstr "ÔÚ %s ÓÐÐÂÐżþ¡£"
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s£ºÖն˻úÎÞ·¨ÏÔʾɫ²Ê"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s£ºÃ»ÓÐÕâÖÖÑÕÉ«"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s£ºÃ»ÓÐÕâ¸öÎï¼þ"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s£ºÃüÁîÖ»ÌṩË÷ÒýÎï¼þ"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s£ºÌ«ÉÙ²ÎÊý"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "ȱÉÙ²ÎÊý¡£"
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "É«²Ê£ºÌ«ÉÙ²ÎÊý"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "µ¥É«£ºÌ«ÉÙ²ÎÊý"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s£ºÃ»ÓÐÕâ¸öÊôÐÔ"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "Ì«ÉÙ²ÎÊý"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "Ì«¶à²ÎÊý"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "²»Ö§³ÖÔ¤ÉèµÄÉ«²Ê"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "¼ì²é PGP Ç©Ãû?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ£¡"
+
+#: commands.c:126
+#, fuzzy
+msgid "Cannot create display filter"
+msgstr "ÎÞ·¨½¨Á¢¹ýÂËÆ÷"
+
+#: commands.c:146
+#, fuzzy
+msgid "Could not copy message"
+msgstr "ÎÞ·¨¼Ä³öÐżþ¡£"
+
+#: commands.c:182
+#, fuzzy
+msgid "S/MIME signature successfully verified."
+msgstr "PGP Ç©ÃûÑéÖ¤³É¹¦¡£"
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr ""
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+#, fuzzy
+msgid "S/MIME signature could NOT be verified."
+msgstr "PGP Ç©ÃûÑéÖ¤³É¹¦¡£"
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "PGP Ç©ÃûÑéÖ¤³É¹¦¡£"
+
+#: commands.c:200
+#, fuzzy
+msgid "PGP signature could NOT be verified."
+msgstr "PGP Ç©ÃûÑéÖ¤³É¹¦¡£"
+
+#: commands.c:223
+msgid "Command: "
+msgstr "Ö¸Á"
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "Ö±½Ó´«ËÍÓʼþµ½£º"
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "ÎÞ·¨´«ËÍÒѱê¼ÇµÄÓʼþÖÁ£º"
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "ÎÞ·¨·ÖÎöλַ£¡"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr ""
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "°ÑÓʼþÖ±½Ó´«ËÍÖÁ %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "°ÑÓʼþÖ±½Ó´«ËÍÖÁ %s"
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Message not bounced."
+msgstr "ÓʼþÒѱ»´«ËÍ¡£"
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Messages not bounced."
+msgstr "ÓʼþÒÑ´«ËÍ¡£"
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "ÓʼþÒѱ»´«ËÍ¡£"
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "ÓʼþÒÑ´«ËÍ¡£"
+
+#: commands.c:381 commands.c:415 commands.c:432
+#, fuzzy
+msgid "Can't create filter process"
+msgstr "ÎÞ·¨½¨Á¢¹ýÂË"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "ÓùܵÀÊä³öÖÁÃüÁ"
+
+#: commands.c:478
+#, fuzzy
+msgid "No printing command has been defined."
+msgstr "Ȧѡ½øÈëµÄÓÊͲ"
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "´òÓ¡Ðżþ£¿"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "´òÓ¡Òѱê¼ÇµÄÐżþ£¿"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "ÐżþÒÑÓ¡³ö"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "ÐżþÒÑÓ¡³ö"
+
+#: commands.c:494
+#, fuzzy
+msgid "Message could not be printed"
+msgstr "ÐżþÒÑÓ¡³ö"
+
+#: commands.c:495
+#, fuzzy
+msgid "Messages could not be printed"
+msgstr "ÐżþÒÑÓ¡³ö"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"·´·½Ïò d)ÈÕÆÚ,f)·¢ÐÅÈË,r)ÊÕÐÅʱ¼ä,s)±êÌâ,o)ÊÕÐÅÈË,t)ÐòÁÐ,u)²»ÅÅ,z)´óС,c)·Ö"
+"Êý:"
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"ÅÅÐò d)ÈÕÆÚ,f)·¢ÐÅÈË,r)ÊÕÐÅʱ¼ä,s)±êÌâ,o)ÊÕÐÅÈË,t)ÐòÁÐ,u)²»ÅÅÐò,z)´óС,c)·Ö"
+"Êý:"
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr ""
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Shell Ö¸Á"
+
+#: commands.c:701
+#, fuzzy, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "%s%s µ½ÐÅÏä"
+
+#: commands.c:702
+#, fuzzy, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "%s%s µ½ÐÅÏä"
+
+#: commands.c:703
+#, fuzzy, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "%s%s µ½ÐÅÏä"
+
+#: commands.c:704
+#, fuzzy, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "%s%s µ½ÐÅÏä"
+
+#: commands.c:705
+#, fuzzy, c-format
+msgid "Save%s to mailbox"
+msgstr "%s%s µ½ÐÅÏä"
+
+#: commands.c:705
+#, fuzzy, c-format
+msgid "Copy%s to mailbox"
+msgstr "%s%s µ½ÐÅÏä"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " Òѱê¼Ç"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "¿½±´µ½ %s¡­"
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr ""
+
+#: commands.c:910
+#, fuzzy, c-format
+msgid "Content-Type changed to %s."
+msgstr "ÕýÁ¬½Óµ½ %s¡­"
+
+#: commands.c:912
+#, fuzzy, c-format
+msgid "Character set changed to %s; %s."
+msgstr "²»Ã÷µÄ×Ö·û¼¯ %s¡£"
+
+#: commands.c:914
+msgid "not converting"
+msgstr ""
+
+#: commands.c:914
+msgid "converting"
+msgstr ""
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "ûÓи½¼þ¡£"
+
+#: compose.c:84
+msgid "Send"
+msgstr "¼Ä³ö"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "ÖжÏ"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "¸½¼ÓÎļþ"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "ÐðÊö"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "Ç©Ãû£¬¼ÓÃÜ"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "¼ÓÃÜ"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "Ç©Ãû"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "Çå³ý"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " Ç©ÃûµÄÉí·ÝÊÇ£º "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<Ô¤ÉèÖµ>"
+
+#: compose.c:149
+#, fuzzy
+msgid "Encrypt with: "
+msgstr "¼ÓÃÜ"
+
+#: compose.c:165
+#, fuzzy
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"(e)¼ÓÃÜ, (s)Ç©Ãû, (a)ÓñðµÄÉí·ÝÇ©, (b)Á½Õß½ÔÒª, Ñ¡Ôñ (m)ic ÑÝËã·¨ »ò (f)·Å"
+"Æú£¿"
+
+#: compose.c:166
+msgid "esabf"
+msgstr ""
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "Ç©ÃûµÄÉí·ÝÊÇ£º"
+
+#: compose.c:227
+#, fuzzy
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr ""
+"(e)¼ÓÃÜ, (s)Ç©Ãû, (a)ÓñðµÄÉí·ÝÇ©, (b)Á½Õß½ÔÒª, Ñ¡Ôñ (m)ic ÑÝËã·¨ »ò (f)·Å"
+"Æú£¿"
+
+#: compose.c:228
+msgid "eswabf"
+msgstr ""
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+
+#: compose.c:238
+msgid "12345f"
+msgstr ""
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] ÒѲ»´æÔÚ!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] ÒÑÐ޸ġ£¸üбàÂ룿"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- ¸½¼þ"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr ""
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "Äú²»¿ÉÒÔɾ³ýΨһµÄ¸½¼þ¡£"
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr ""
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "ÕýÔÚ¸½¼ÓÑ¡È¡Á˵ÄÎļþ¡­"
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "ÎÞ·¨¸½¼Ó %s£¡"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "´ò¿ªÐÅÏä²¢´ÓËüÑ¡Ôñ¸½¼ÓµÄÐżþ"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "Îļþ¼ÐÖÐûÓÐÐżþ¡£"
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "Çë±ê¼ÇÄúÒª¸½¼ÓµÄÐżþ£¡"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "ÎÞ·¨¸½¼Ó£¡"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "Ö»ÖØбàÂëÊÜÓ°ÏìµÄÎÄ×Ö¸½¼þ"
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "Õâ¸ö¸½¼þ²»»á±»×ª»»¡£"
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "Õâ¸ö¸½¼þ»á±»×ª»»¡£"
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "ÎÞЧµÄ±àÂë¡£"
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "´¢´æÕâ·âÐżþµÄ¿½±´Âð£¿"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "¸ü¸ÄÃû³ÆΪ£º"
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, fuzzy, c-format
+msgid "Can't stat %s: %s"
+msgstr "ÎÞ·¨¶ÁÈ¡£º%s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "½¨Á¢Ðµµ£º"
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Content-Type µÄ¸ñʽÊÇ base/sub"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "²»Ã÷µÄ Content-Type %s"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "ÎÞ·¨½¨Á¢Îļþ %s"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "ÎÒÃÇÎÞ·¨¼ÓÉϸ½¼þ"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "ÑӳټijöÕâ·âÐżþ£¿"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "½«ÐżþдÈëµ½ÐÅÏä"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "дÈëÐżþµ½ %s ¡­"
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "ÐżþÒÑдÈë¡£"
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr ""
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr ""
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr ""
+
+#: crypt.c:71
+#, fuzzy, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- ÒÔÏÂΪ PGP Êä³öµÄ×ÊÁÏ£¨ÏÖÔÚʱ¼ä£º "
+
+#: crypt.c:86
+#, fuzzy
+msgid "Passphrase(s) forgotten."
+msgstr "ÒÑÍü¼Ç PGP Í¨ÐÐÃÜÂë¡£"
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "ÇëÊäÈë PGP Í¨ÐÐÃÜÂ룺"
+
+#: crypt.c:147
+#, fuzzy
+msgid "Enter SMIME passphrase:"
+msgstr "ÇëÊäÈë PGP Í¨ÐÐÃÜÂ룺"
+
+#: crypt.c:192
+#, fuzzy
+msgid "Create a traditional (inline) PGP message?"
+msgstr "½¨Á¢Ò»·â application/pgp µÄÐżþ£¿"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "Æô¶¯ PGP¡­"
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr ""
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr ""
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr ""
+
+#: crypt.c:838
+#, fuzzy
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- ´íÎ󣺲»Ò»ÖµĠmultipart/signed ½á¹¹£¡ --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- ´íÎ󣺲»Ã÷µÄ multipart/signed Ð­¶¨ %s£¡ --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- ¾¯¸æ£ºÎÒÃDz»ÄÜ֤ʵ %s/%s Ç©Ãû¡£ --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+#, fuzzy
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- ÒÔϵÄ×ÊÁÏÒѱ»Ç©Êð --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- ¾¯¸æ£ºÕÒ²»µ½ÈκεÄÇ©Ãû¡£ --]\n"
+"\n"
+
+#: crypt.c:924
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- Ç©ÊðµÄ×ÊÁϽáÊø --]\n"
+
+# Don't translate this!!
+#: curs_lib.c:157
+msgid "yes"
+msgstr ""
+
+# Don't translate this!!
+#: curs_lib.c:158
+msgid "no"
+msgstr ""
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "À뿪 Mutt£¿"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "²»Ã÷µÄ´íÎó"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "°´ÏÂÈκÎÒ»¸ö¼ü¼ÌÐø¡­"
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " (Óà'?' ÏÔʾÁбí)£º"
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "ûÓÐÒÑ´ò¿ªÐÅÏä¡£"
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "ûÓÐÐżþ¡£"
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "ÐÅÏäÊÇÖ»¶ÁµÄ¡£"
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "¹¦ÄÜÔÚ attach-message Ä£Ê½Ï²»±»Ö§³Ö¡£"
+
+#: curs_main.c:51
+#, fuzzy
+msgid "No visible messages."
+msgstr "ûÓÐÐÂÐżþ"
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "ÎÞ·¨Ð´Èëµ½Ò»¸öÖ»¶ÁµÄÐÅÏ䣡"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "ÔÚÀ뿪֮ºó½«»á°Ñ¸Ä±äдÈë×ÊÁϼС£"
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "½«²»»á°Ñ¸Ä±äдÈë×ÊÁϼС£"
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "À뿪"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "´¢´æ"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "Ðżþ"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "»Ø¸²"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "Ⱥ×é"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "ÐÅÏäÒѱ»ÆäËû;¾¶¸Ä±ä¹ý¡£Æì±ê¿ÉÄÜÓдíÎó¡£"
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "Õâ¸öÐÅÏäÖÐÓÐÐÂÐżþ¡£"
+
+#: curs_main.c:499
+#, fuzzy
+msgid "Mailbox was externally modified."
+msgstr "ÐÅÏäÒѱ»ÆäËû;¾¶¸Ä±ä¹ý¡£Æì±ê¿ÉÄÜÓдíÎó¡£"
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "ûÓбê¼ÇÁ˵ÄÐżþ¡£"
+
+#: curs_main.c:653 menu.c:896
+#, fuzzy
+msgid "Nothing to do."
+msgstr "ÕýÁ¬½Óµ½ %s¡­"
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "Ìøµ½Ðżþ£º"
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "ÐèÒªÒ»¸öÐżþ±àºÅµÄ²ÎÊý¡£"
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "Õâ·âÐżþÎÞ·¨ÏÔʾ¡£"
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "ÎÞЧµÄÐżþ±àºÅ¡£"
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "ɾ³ý·ûºÏÕâÑùʽµÄÐżþ£º"
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "ûÓÐÏÞÖÆÑùʽÊÇÓÐЧµÄ¡£"
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "ÏÞÖÆ: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "ÏÞÖÆÖ»·ûºÏÕâÑùʽµÄÐżþ£º"
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "À뿪 Mutt£¿"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "±ê¼ÇÐżþµÄÌõ¼þ£º"
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "·´É¾³ýÐżþµÄÌõ¼þ£º"
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "·´±ê¼ÇÐżþµÄÌõ¼þ£º"
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "ÓÃÖ»¶Áģʽ´ò¿ªÐÅÏä"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "´ò¿ªÐÅÏä"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s ²»ÊÇÐÅÏä¡£"
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "²»´¢´æ±ãÀ뿪 Mutt Âð£¿"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "ÄúÒѾ­ÔÚ×îºóÒ»·âÐÅÁË¡£"
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "ûÓÐÒª·´É¾³ýµÄÐżþ¡£"
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "ÄúÒѾ­ÔÚµÚÒ»·âÐÅÁË¡£"
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "ËÑÑ°ÖÁ¿ªÍ·¡£"
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "ËÑÑ°ÖÁ½áβ¡£"
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "ûÓÐÐÂÐżþ"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "ûÓÐÉÐδ¶ÁÈ¡µÄÐżþ"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " ÔÚÕâÏÞ¶¨µÄä¯ÀÀÖÐ"
+
+#: curs_main.c:1405 pager.c:2337
+#, fuzzy
+msgid "Can't change 'important' flag on POP server."
+msgstr "ÕýÔÚɾ³ýËÅ·þÆ÷ÉϵÄÐżþ¡­"
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "ûÓиü¶àµÄÐòÁÐ"
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "ÄúÒѾ­ÔÚµÚÒ»¸öÐòÁÐÉÏ¡£"
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "ÐòÁй¦ÄÜÉÐδÆô¶¯¡£"
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "ÐòÁÐÖÐÓÐÉÐδ¶ÁÈ¡µÄÐżþ¡£"
+
+#: curs_main.c:1802
+#, fuzzy
+msgid "Can't edit message on POP server."
+msgstr "ÕýÔÚɾ³ýËÅ·þÆ÷ÉϵÄÐżþ¡­"
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\t²åÈëÒÔ ~ ·ûºÅ¿ªÍ·µÄÒ»ÐÐ\n"
+"~b »§¿Ú\tÐÂÔö»§¿Úµ½ Bcc: À¸Î»\n"
+"~c »§¿Ú\tÐÂÔö»§¿Úµ½ Cc: À¸Î»\n"
+"~f Ðżþ\t°üº¬Ðżþ\n"
+"~F Ñ¶Ï¢\tÀàËÆ ~f, ²»°üÀ¨Ðżþ±êÍ·\n"
+"~h\t\t±à¼­ÐżþµÄ±êÍ·\n"
+"~m Ñ¶Ï¢\t°üÀ¨ÒýÑÔ\n"
+"~M Ñ¶Ï¢\tÀàËÆ ~m, ²»°üÀ¨Ðżþ±êÍ·\n"
+"~p\t\t´òÓ¡Õâ·âÐżþ\n"
+"~q\t\t´æµµ²¢ÇÒÀ뿪±à¼­Æ÷\n"
+"~r Îļþ\t\t½«Îļþ¶ÁÈë±à¼­Æ÷\n"
+"~t »§¿Ú\tÐÂÔö»§¿Úµ½ To: À¸Î»\n"
+"~u\t\t»½»Ø֮ǰÄÇÒ»ÐÐ\n"
+"~v\t\tʹÓà$visual ±à¼­Æ÷±à¼­Ñ¶Ï¢\n"
+"~w Îļþ\t\t½«Ñ¶Ï¢Ð´ÈëÎļþ\n"
+"~x\t\tÍ£Ö¹Ð޸IJ¢À뿪±à¼­Æ÷\n"
+"~?\t\tÕâѶϢ\n"
+".\t\tÈç¹ûÊÇÒ»ÐÐÀïµÄΨһ×Ö·û£¬Ôò´ú±í½áÊøÊäÈë\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d£ºÎÞЧµÄÐżþºÅÂë¡£\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "£¨ÔÚÒ»ÐÐÀïÊäÈëÒ»¸ö . ·ûºÅÀ´½áÊøÐżþ£©\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "ûÓÐÐÅÏä¡£\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "Ðżþ°üº¬£º\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "£¨¼ÌÐø£©\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "ÒÅʧÁ˵µÃû¡£\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "ÎÄÕÂÖÐûÓÐÎÄ×Ö¡£\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr ""
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s£º²»Ã÷µÄ±à¼­Æ÷Ö¸Á~? ÇóÖú£©\n"
+
+#: editmsg.c:74
+#, fuzzy, c-format
+msgid "could not create temporary folder: %s"
+msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ£¡"
+
+#: editmsg.c:84
+#, fuzzy, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ£¡"
+
+#: editmsg.c:101
+#, fuzzy, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ£¡"
+
+#: editmsg.c:116
+#, fuzzy
+msgid "Message file is empty!"
+msgstr "ÐÅÏäÄÚ¿ÕÎÞÒ»Îï¡£"
+
+#: editmsg.c:123
+#, fuzzy
+msgid "Message not modified!"
+msgstr "ÐżþÒÑÓ¡³ö"
+
+#: editmsg.c:131
+#, fuzzy, c-format
+msgid "Can't open message file: %s"
+msgstr "ÎÞ·¨½¨Á¢Îļþ %s"
+
+#: editmsg.c:138 editmsg.c:165
+#, fuzzy, c-format
+msgid "Can't append to folder: %s"
+msgstr "ÎÞ·¨½¨Á¢Îļþ %s"
+
+#: editmsg.c:196
+#, fuzzy, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "É趨Æì±ê"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "Çå³ýÆì±ê"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr "[-- ´íÎ󣺠ÎÞ·¨ÏÔʾ Multipart/Alternative£¡ --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- ¸½¼þ #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- ÐÎ̬:  %s%s, ±àÂë: %s, ´óС: %s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- Ê¹Óà%s ×Ô¶¯ÏÔʾ --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "Ö´ÐÐ×Ô¶¯ÏÔʾָÁ%s"
+
+#: handler.c:1560
+#, fuzzy, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- ÔÚ %s --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- ×Ô¶¯ÏÔʾµÄ %s µÄ stderr ÄÚÈÝ --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr "[-- ´íÎó: message/external-body Ã»ÓдæÈ¡ÀàÐ͵IJÎÊý --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- %s/%s ¸½¼þ "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(%s Î»Ôª×é) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "ÒѾ­±»É¾³ýÁË --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- ÔÚ %s --]\n"
+
+#: handler.c:1674
+#, fuzzy, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- ÔÚ %s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, fuzzy, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- %s/%s ¸½¼þ "
+
+#: handler.c:1689
+#, fuzzy
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+"[-- %s/%s ¸½¼þÎÞ·¨±»¸½ÉÏ, --]\n"
+"[-- ²¢ÇÒ±»Ö¸Ê¾µÄÍⲿԭʼµµÒÑ --]\n"
+"[-- ¹ýÆÚ¡£ --]\n"
+
+#: handler.c:1707
+#, fuzzy, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr ""
+"[-- %s/%s ¸½¼þÎÞ·¨±»¸½ÉÏ, --]\n"
+"[-- ²¢ÇÒ±»Ö¸Ê¾µÄ´æÈ¡ÀàÐÍ %s ²»±»Ö§³Ö --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "´íÎó£ºmultipart/signed Ã»ÓÐͨѶЭ¶¨¡£"
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "´íÎó£ºmultipart/encrypted Ã»ÓÐÈκÎͨѶЭ¶¨²ÎÊý£¡"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "ÎÞ·¨´ò¿ªÔÝ´æµµ£¡"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s ÉÐδ֧³Ö "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "£¨Ê¹Óà'%s' À´ÏÔʾÕⲿ·Ý£©"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "£¨ÐèÒª¶¨ÒåÒ»¸ö¼ü¸ø 'view-attachments' lä¯ÀÀ¸½¼þ)£¡)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s£ºÎÞ·¨¸½´øÎļþ"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "´íÎó£ºÇë»Ø±¨Õâ¸öÎÊÌâ"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<²»Ã÷µÄ>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"±ê×¼¹¦Äܶ¨Ò壺\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"δ±»¶¨ÒåµÄ¹¦ÄÜ£º\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "%s µÄÇóÖú"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr ""
+
+#: hook.c:254
+#, fuzzy, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "%s£º²»Ã÷µÄÖÖÀà"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr ""
+
+#: imap/auth.c:104 pop_auth.c:411
+#, fuzzy
+msgid "No authenticators available"
+msgstr "GSSAPI Ñé֤ʧ°Ü¡£"
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "ÑéÖ¤ÖР(ÄäÃû)¡­"
+
+#: imap/auth_anon.c:69
+#, fuzzy
+msgid "Anonymous authentication failed."
+msgstr "²»Ö§³ÖÄäÃûÑéÖ¤¡£"
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "ÑéÖ¤ÖР(CRAM-MD5)¡­"
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "CRAM-MD5 Ñé֤ʧ°Ü¡£"
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "ÑéÖ¤ÖР(GSSAPI)¡­"
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "GSSAPI Ñé֤ʧ°Ü¡£"
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr ""
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "µÇÈëÖС­"
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "µÇÈëʧ°Ü¡£"
+
+#: imap/auth_sasl.c:112
+#, fuzzy, c-format
+msgid "Authenticating (%s)..."
+msgstr "ÑéÖ¤ÖР(GSSAPI)¡­"
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+#, fuzzy
+msgid "SASL authentication failed."
+msgstr "GSSAPI Ñé֤ʧ°Ü¡£"
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr ""
+
+#: imap/browse.c:81
+#, fuzzy
+msgid "Getting namespaces..."
+msgstr "¼Ä³öÐżþÖС­"
+
+#: imap/browse.c:90
+#, fuzzy
+msgid "Getting folder list..."
+msgstr "ÒѽӴ¥ËÅ·þÆ÷£¬ÕýÄÃȡĿ¼±í¡­"
+
+#: imap/browse.c:219
+#, fuzzy
+msgid "No such folder"
+msgstr "%s£ºÃ»ÓÐÕâÖÖÑÕÉ«"
+
+#: imap/browse.c:277
+#, fuzzy
+msgid "Create mailbox: "
+msgstr "´ò¿ªÐÅÏä"
+
+#: imap/browse.c:282
+#, fuzzy
+msgid "Mailbox must have a name."
+msgstr "ÐÅÏäûÓиı䡣"
+
+#: imap/browse.c:290
+#, fuzzy
+msgid "Mailbox created."
+msgstr "ÓÊÏäÒÑɾ³ý¡£"
+
+#: imap/command.c:290
+#, fuzzy
+msgid "Mailbox closed"
+msgstr "ÓÊÏäÒÑɾ³ý¡£"
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "ÑÏÖØ´íÎó¡£ÐżþÊýÁ¿²»Ð­µ÷£¡"
+
+#: imap/imap.c:147
+#, fuzzy, c-format
+msgid "Closing connection to %s..."
+msgstr "ÕýÔڹرÕÓë IMAP ËÅ·þÆ÷µÄÁ¬Ïß¡­"
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "Õâ¸ö IMAP ËÅ·þÆ÷Òѹýʱ£¬Mutt ÎÞ·¨Ê¹ÓÃËü¡£"
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr ""
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr ""
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "Ñ¡Ôñ %s ÖС­"
+
+#: imap/imap.c:690
+#, fuzzy
+msgid "Error opening mailbox"
+msgstr "дÈëÐÅÏäʱ·¢Éú´íÎó£¡"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "ÎÞ·¨¸½¼ÓÔÚÕâ¸öËÅ·þÆ÷ÉϵĠIMAP ÐÅÏä"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "½¨Á¢ %s£¿"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "ÕýÔڹرÕÓë IMAP ËÅ·þÆ÷µÄÁ¬Ïß¡­"
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "±êÇ©Á˵Ġ%d ·âÐżþɾȥÁË¡­"
+
+#: imap/imap.c:961
+#, fuzzy
+msgid "Expunge failed"
+msgstr "µÇÈëʧ°Ü¡£"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "ÕýÔÚ´¢´æÐżþ״̬Æì±ê¡­ [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "ÕýÔÚɾ³ýËÅ·þÆ÷ÉϵÄÐżþ¡­"
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr ""
+
+#: imap/imap.c:1099
+#, fuzzy
+msgid "CLOSE failed"
+msgstr "µÇÈëʧ°Ü¡£"
+
+#: imap/imap.c:1342
+#, fuzzy
+msgid "Bad mailbox name"
+msgstr "´ò¿ªÐÅÏä"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "¶©ÔÄ %s¡­"
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "È¡Ïû¶©ÔÄ %s¡­"
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "ÎÞ·¨È¡»ØʹÓÃÕâ¸ö IMAP ËÅ·þÆ÷°æ±¾µÄÓʼþµÄ±êÍ·¡£"
+
+#: imap/message.c:84
+#, fuzzy, c-format
+msgid "Could not create temporary file %s"
+msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ£¡"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "ÕýÔÚÈ¡»ØÐżþ±êÍ·¡­ [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+#, fuzzy
+msgid "Fetching message..."
+msgstr "¼Ä³öÐżþÖС­"
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr ""
+
+#: imap/message.c:466
+#, fuzzy
+msgid "Uploading message ..."
+msgstr "¼Ä³öÐżþÖС­"
+
+#: imap/message.c:576
+#, fuzzy, c-format
+msgid "Copying %d messages to %s..."
+msgstr "ÕýÔÚ°áÒÆÒѾ­¶ÁÈ¡µÄÐżþµ½ %s ¡­"
+
+#: imap/message.c:580
+#, fuzzy, c-format
+msgid "Copying message %d to %s..."
+msgstr "дÈëÐżþµ½ %s ¡­"
+
+#: imap/util.c:239
+#, fuzzy
+msgid "Continue?"
+msgstr "£¨¼ÌÐø£©\n"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "±ðÃû£ºÃ»Óеç×ÓÓʼþλַ"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr ""
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "ÎÞЧµÄ±êÍ·À¸Î»"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s£º²»Ã÷µÄÅÅÐò·½Ê½"
+
+#: init.c:879
+#, fuzzy, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_defualt£º´íÎóµÄÕý¹æ±íʾʽ£º%s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s£º²»Ã÷µÄ±äÁ¿"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "ÖØÐÂÉèÖúó×ÖÊ×ÈÔ²»ºÏ¹æ¶¨"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "ÖØÐÂÉèÖúóÖµÈÔ²»ºÏ¹æ¶¨"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s Òѱ»É趨"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s Ã»Óб»É趨"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s£ºÎÞЧµÄÐÅÏäÖÖÀà"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s£ºÎÞЧµÄÖµ"
+
+#: init.c:1312
+#, fuzzy, c-format
+msgid "%s: Unknown type."
+msgstr "%s£º²»Ã÷µÄÖÖÀà"
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s£º²»Ã÷µÄÖÖÀà"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "ÎÞ·¨¶ÁÈ¡£º%s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s ²»ÊÇÐÅÏä¡£"
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "%s ·¢Éú´íÎó£¬ÐкŠ%d£º%s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source£º´íÎó·¢ÉúÔÚ %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr ""
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source£º´íÎó·¢ÉúÔÚ %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source£ºÌ«¶à²ÎÊý"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s£º²»Ã÷µÄÖ¸Áî"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "Ö¸ÁîÐÐÓÐ´í£º%s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "ÎÞ·¨¾ö¶¨ home Ä¿Â¼"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "ÎÞ·¨¾ö¶¨Ê¹ÓÃÕßÃû³Æ"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "¼ì²âµ½¾Þ¼¯ÖÐÓлØȦ¡£"
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "Õâ¸ö¼ü»¹Î´±»¶¨Ò幦ÄÜ¡£"
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "Õâ¸ö¼ü»¹Î´±»¶¨Ò幦ÄÜ¡£ °´ '%s' ÒÔÈ¡µÃ˵Ã÷¡£"
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push£ºÌ«¶à²ÎÊý"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s£ºÃ»ÓÐÕâ¸öÑ¡µ¥"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "¿ÕµÄ¼üÖµÐòÁÐ"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind£ºÌ«¶à²ÎÊý"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s£ºÔÚ¶ÔÓ³±íÖÐûÓÐÕâÑùµÄº¯Êý"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro£º¿ÕµÄ¼üÖµÐòÁÐ"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro£º²ÎÊýÌ«¶à"
+
+#: keymap.c:871
+#, fuzzy
+msgid "exec: no arguments"
+msgstr "exec£º²ÎÊýÌ«ÉÙ"
+
+#: keymap.c:891
+#, fuzzy, c-format
+msgid "%s: no such function"
+msgstr "%s£ºÔÚ¶ÔÓ³±íÖÐûÓÐÕâÑùµÄº¯Êý"
+
+#: keymap.c:912
+#, fuzzy
+msgid "Enter keys (^G to abort): "
+msgstr "ÇëÊäÈë %s µÄÔ¿³× ID£º"
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr ""
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "¿ÕµÄÔËËã"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "Ç¿ÆÈʹÓàmailcap ä¯ÀÀ¼Ðµµ"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "ÓÃÎÄ×Ö·½Ê½ÏÔʾ¸½¼þÄÚÈÝ"
+
+#: keymap_alldefs.h:9
+#, fuzzy
+msgid "Toggle display of subparts"
+msgstr "Çл»ÒýÑÔÏÔʾ"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "ÒƵ½±¾Ò³µÄ×îºóÃæ"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "ÖØмÄПøÁíÍâÒ»¸öʹÓÃÕß"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "ÇëÑ¡Ôñ±¾Ä¿Â¼ÖÐÒ»¸öеÄÎļþ"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "ÏÔʾÎļþ"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "ÏÔʾËùÑ¡ÔñµÄÎļþ"
+
+#: keymap_alldefs.h:15
+#, fuzzy
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "¶©ÔÄÕâ¸öÓÊÏä (Ö»ÊÊÓÃÓÚ IMAP)"
+
+#: keymap_alldefs.h:16
+#, fuzzy
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "È¡Ïû¶©ÔÄÕâ¸öÓÊÏä (Ö»ÊÊÓÃÓÚ IMAP)"
+
+#: keymap_alldefs.h:17
+#, fuzzy
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "Çл»ÏÔʾ È«²¿/ÒѶ©ÔÄ µÄÓÊÏä (Ö»ÊÊÓÃÓÚ IMAP)"
+
+#: keymap_alldefs.h:18
+#, fuzzy
+msgid "list mailboxes with new mail"
+msgstr "ûÓÐÐÅÏäÓÐÐÂÐżþ¡£"
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "¸Ä±äĿ¼"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "¼ì²éÐÅÏäÊÇ·ñÓÐÐÂÐżþ"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "ÔÚÕâ·âÐżþÖмдøÎļþ"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "ÔÚÕâ·âÐżþÖмдøÐżþ"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "±à¼­ BCC Áбí"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "±à¼­ CC Áбí"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "±à¼­¼ÐµµµÄ˵Ã÷"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "±à¼­¼ÐµµµÄ´«Êä±àÂë·¨Ôò"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "ÇëÊäÈëÓÃÀ´´¢´æÕâ·âÐżþ¿½±´µÄÎļþÃû³Æ"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "±à¼­Òª±»¼Ð´øµÄÎļþÃû³Æ"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "±à¼­·¢ÐÅÈËÀ¸Î»"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "±à¼­ÐżþµÄ±êÍ·"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "±à¼­ÐżþÄÚÈÝ"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "ʹÓàmailcap ±à¼­¼Ðµµ"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "±à¼­ Reply-To À¸Î»"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "±à¼­ÐżþµÄ±êÌâ"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "±à¼­ TO Áбí"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "ÖÆÔìÐÂÓÊÏä (Ö»ÊÊÓÃÓÚ IMAP)"
+
+#: keymap_alldefs.h:37
+#, fuzzy
+msgid "edit attachment content type"
+msgstr "±à¼­¸½¼þµÄµÄ content type"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "È¡µÃ¸½¼þµÄÔݴ濽±´"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "Õâ·âÐżþÖ´ÐРispell"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "ʹÓàmailcap À´×éºÏеļеµ"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "Çл»ÊÇ·ñÔÙΪ¸½¼þÖØбàÂë"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "´¢´æÐżþÒÔ±ãÉÔºó¼Ä³ö"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "¸ü¸ÄµµÃû/ÒƳý Ò»¸ö¼Ð´øµÄÎļþ"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "¼Ä³öÐżþ"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr ""
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "¼Ä³öºóÇл»ÖÁÊÇ·ñɾ³ýÎļþ"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "¸üи½¼þµÄ±àÂë×ÊѶ"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "´æÈëÒ»·âÐżþµ½Ä³¸öÎļþ¼Ð"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "¿½±´Ò»·âÐżþµ½Ä³¸öÎļþ»òÐÅÏä"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "½¨Á¢Ä³·âÐżþ¼ÄÐÅÈ˵ıðÃû"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "ÒÆÖÁÓ©Ä»½áβ"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "ÒÆÖÁÓ©Ä»ÖÐÑë"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "ÒÆÖÁÓ©Ä»¿ªÍ·"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "ÖÆ×÷¿É½âÂëµÄ (text/plain) ¿½±´"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "ÖÆ×÷¿É½âÂëµÄ¿½±´ (text/plain) ²¢ÇÒɾ³ýÖ®"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "ɾ³ýËùÔÚµÄÐżþ×ÊÁÏ"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "ɾ³ýÕâ¸öÓÊÏä (Ö»ÊÊÓÃÓÚ IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "ɾ³ýËùÓÐÔÚ×ÓÐòÁÐÖеÄÐżþ"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "ɾ³ýËùÓÐÔÚÐòÁÐÖеÄÐżþ"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "ÏÔʾ¼ÄÐÅÈ˵ÄÍêÕûλַ"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "ÏÔʾÐżþ²¢Çл»Ñ¹ÒÖ±êÍ·×ÊÁÏÏÔʾ"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "ÏÔʾһ·âÐżþ"
+
+#: keymap_alldefs.h:63
+#, fuzzy
+msgid "edit the raw message"
+msgstr "±à¼­ÐżþÄÚÈÝ"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "ɾ³ýÓαêËùÔÚλÖÃ֮ǰµÄ×Öĸ"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "Ïò×óÒƶ¯Ò»¸ö×ÖÔª"
+
+#: keymap_alldefs.h:66
+#, fuzzy
+msgid "move the cursor to the beginning of the word"
+msgstr "Ìøµ½ÐÐÊ×"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "Ìøµ½ÐÐÊ×"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "Ȧѡ½øÈëµÄÓÊͲ"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "ÍêÕûµÄµµÃû»ò±ðÃû"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "¸½ÉÏÍêÕûµÄλַ²éѯ"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "ɾ³ýÓαêËùÔÚµÄ×Öĸ"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "Ìøµ½ÐÐβ"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "ÏòÓαêÏòÓÒÒƶ¯Ò»¸ö×ÖÔª"
+
+#: keymap_alldefs.h:74
+#, fuzzy
+msgid "move the cursor to the end of the word"
+msgstr "ÏòÓαêÏòÓÒÒƶ¯Ò»¸ö×ÖÔª"
+
+#: keymap_alldefs.h:75
+#, fuzzy
+msgid "scroll down through the history list"
+msgstr "ÏòÉÏ¾í¶¯Ê¹ÓüͼÇåµ¥"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "ÏòÉÏ¾í¶¯Ê¹ÓüͼÇåµ¥"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "ÓÉÓαêËùÔÚλÖÃɾ³ýÖÁÐÐβËùÓеÄ×ÖÔª"
+
+#: keymap_alldefs.h:78
+#, fuzzy
+msgid "delete chars from the cursor to the end of the word"
+msgstr "ÓÉÓαêËùÔÚλÖÃɾ³ýÖÁÐÐβËùÓеÄ×ÖÔª"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "ɾ³ýijÐÐÉÏËùÓеÄ×Öĸ"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "ɾ³ýÓαê֮ǰµÄ×Ö"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "ÓÃÏÂÒ»¸öÊäÈëµÄ¼üÖµ×÷ÒýÑÔ"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr ""
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr ""
+
+#: keymap_alldefs.h:84
+#, fuzzy
+msgid "convert the word to lower case"
+msgstr "ÒƵ½±¾Ò³µÄ×îºóÃæ"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr ""
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "ÊäÈë muttrc Ö¸Áî"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "ÊäÈëÎļþÕÚÕÖ"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "À뿪Õâ¸öÑ¡µ¥"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "͸¹ý shell Ö¸ÁîÀ´¹ýÂ˸½¼þ"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "ÒƵ½µÚÒ»Ïî×ÊÁÏ"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "Çл»Ä³·âÐżþµÄ 'ÖØÒª' Æì±ê"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "ת¼ÄѶϢ²¢¼ÓÉ϶îÍâÎÄ×Ö"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "Ñ¡ÔñËùÔÚµÄ×ÊÁϼǼ"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "»Ø¸²¸øËùÓÐÊÕ¼þÈË"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "ÏòÏÂ¾í¶¯°ëÒ³"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "ÏòÉÏ¾í¶¯°ëÒ³"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "Õâ¸öÆÁÄ»"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "Ìøµ½Ä³Ò»¸öË÷ÒýºÅÂë"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "Òƶ¯µ½×îºóÒ»Ïî×ÊÁÏ"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "»Ø¸²¸øijһ¸öÖ¸¶¨µÄÓʼþÁбí"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "Ö´ÐÐÒ»¸ö¾Þ¼¯"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "׫дһ·âеÄÐżþ"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "´ò¿ªÁíÒ»¸öÎļþ¼Ð"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "ÓÃÖ»¶Áģʽ´ò¿ªÁíÒ»¸öÎļþ¼Ð"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "Çå³ýij·âÐżþÉϵÄ״̬Æì±ê"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "ɾ³ý·ûºÏij¸ö¸ñʽµÄÐżþ"
+
+#: keymap_alldefs.h:107
+#, fuzzy
+msgid "force retrieval of mail from IMAP server"
+msgstr "È¡»Ø POP ËÅ·þÆ÷ÉϵÄÐżþ"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "È¡»Ø POP ËÅ·þÆ÷ÉϵÄÐżþ"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "Òƶ¯µ½µÚÒ»·âÐżþ"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "Òƶ¯µ½×îºóÒ»·âÐżþ"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "Ö»ÏÔʾ·ûºÏij¸ö¸ñʽµÄÐżþ"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "Ìøµ½ÏÂÒ»·âеÄÐżþ"
+
+#: keymap_alldefs.h:113
+#, fuzzy
+msgid "jump to the next new or unread message"
+msgstr "Ìøµ½ÏÂÒ»¸öδ¶ÁÈ¡µÄÐżþ"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "Ìøµ½ÏÂÒ»¸ö×ÓÐòÁÐ"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "Ìøµ½ÏÂÒ»¸öÐòÁÐ"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "Òƶ¯µ½ÏÂÒ»¸öδɾ³ýµÄÐżþ"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "Ìøµ½ÏÂÒ»¸öδ¶ÁÈ¡µÄÐżþ"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "Ìøµ½Õâ¸öÐòÁеÄÖ÷Ðżþ"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "Ìøµ½ÉÏÒ»¸öÐòÁÐ"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "Ìøµ½ÉÏÒ»¸ö×ÓÐòÁÐ"
+
+#: keymap_alldefs.h:121
+#, fuzzy
+msgid "move to the previous undeleted message"
+msgstr "Òƶ¯µ½ÏÂÒ»¸öδɾ³ýµÄÐżþ"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "Ìøµ½ÉÏÒ»¸öеÄÐżþ"
+
+#: keymap_alldefs.h:123
+#, fuzzy
+msgid "jump to the previous new or unread message"
+msgstr "Ìøµ½ÉÏÒ»¸öδ¶ÁÈ¡µÄÐżþ"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "Ìøµ½ÉÏÒ»¸öδ¶ÁÈ¡µÄÐżþ"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "±ê¼ÇÏÖÔÚµÄÐòÁÐΪÒѶÁÈ¡"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "±ê¼ÇÏÖÔÚµÄ×ÓÐòÁÐΪÒѶÁÈ¡"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "É趨ijһ·âÐżþµÄ״̬Æì±ê"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "´¢´æ±ä¶¯µ½ÐÅÏä"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "±ê¼Ç·ûºÏij¸ö¸ñʽµÄÐżþ"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "·´É¾³ý·ûºÏij¸ö¸ñʽµÄÐżþ"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "·´±ê¼Ç·ûºÏij¸ö¸ñʽµÄÐżþ"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "Òƶ¯µ½±¾Ò³µÄÖмä"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "Òƶ¯µ½ÏÂÒ»Ïî×ÊÁÏ"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "ÏòÏÂ¾í¶¯Ò»ÐÐ"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "ÒƵ½ÏÂÒ»Ò³"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "Ìøµ½ÐżþµÄ×îºóÃæ"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "Çл»ÒýÑÔÏÔʾ"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "Ìø¹ýÒýÑÔ"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "Ìøµ½ÐżþµÄ×îÉÏÃæ"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "Êä³öµ¼Ïò Ñ¶Ï¢/¸½¼þ ÖÁÃüÁî½âÒëÆ÷"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "ÒƵ½ÉÏÒ»Ïî×ÊÁÏ"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "ÏòÉÏ¾í¶¯Ò»ÐÐ"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "ÒƵ½ÉÏÒ»Ò³"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "´òÓ¡ÏÖÔÚµÄ×ÊÁÏ"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "ÀûÓÃÍⲿӦÓóÌÐò²éѯµØÖ·"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "¸½¼ÓеIJéѯ½á¹ûÖÁÏÖ½ñµÄ²éѯ½á¹û"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "´¢´æ±ä¶¯¹ýµÄ×ÊÁϵ½ÐÅÏä²¢ÇÒÀ뿪"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "ÖØнгöÒ»·â±»ÑӳټijöµÄÐżþ"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "Çå³ý²¢ÖØлæÖÆÆÁÄ»"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{ÄÚ²¿µÄ}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "»Ø¸²Ò»·âÐżþ"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "ÓÃÕâ·âÐżþ×÷ΪÐÂÐżþµÄÄ£°å"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "´¢´æÐżþ/¸½¼þµ½Ä³¸öÎļþ"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "ÓÃÕý¹æ±íʾʽѰÕÒ"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "ÏòºóËÑÑ°Ò»¸öÕý¹æ±íʾʽ"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "Ñ°ÕÒÏÂÒ»¸ö·ûºÏµÄ×ÊÁÏ"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "·µ·½ÏòËÑÑ°ÏÂÒ»¸ö·ûºÏµÄ×ÊÁÏ"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "Çл»ËÑÑ°¸ñʽµÄÑÕÉ«"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "ÔÚ×Ó shell Ö´ÐÐÖ¸Áî"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "ÐżþÅÅÐò"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "ÒÔÏà·´µÄ´ÎÐòÀ´×öѶϢÅÅÐò"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "±ê¼ÇÏÖÔڵļǼ"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "Ó¦ÓÃÏÂÒ»¸ö¹¦Äܵ½Òѱê¼ÇµÄѶϢ"
+
+#: keymap_alldefs.h:164
+#, fuzzy
+msgid "apply next function ONLY to tagged messages"
+msgstr "Ó¦ÓÃÏÂÒ»¸ö¹¦Äܵ½Òѱê¼ÇµÄѶϢ"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "±ê¼ÇÄ¿Ç°µÄ×ÓÐòÁÐ"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "±ê¼ÇÄ¿Ç°µÄÐòÁÐ"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "Çл»½«Ñ¶Ï¢Çл»Îª 'new' Æì±ê"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "Çл»ÊÇ·ñÖØÐÂдÈëÓÊͲÖÐ"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "Çл»ÊÇ·ñä¯ÀÀÓÊͲ»òËùÓеÄÎļþ"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "ÒƵ½Ò³Ê×"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "·´É¾³ýÏÖÔڵļǼ"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "·´É¾³ýÕâ¸öÐòÁÐÖеÄËùÓÐÐżþ"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "·´É¾³ýÕâ¸ö×ÓÐòÁÐÖеÄËùÓÐÐżþ"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "ÏÔʾ Mutt µÄ°æ±¾ºÅÂëÓëÈÕÆÚ"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "Èç¹ûÐèÒªµÄ»°Ê¹Óàmailcap ä¯ÀÀ¸½¼þ"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "ÏÔʾ MIME ¸½¼þ"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr ""
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "ÏÔʾĿǰÓÐ×÷ÓõÄÏÞÖÆÑùʽ"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "´ò¿ª/¹Ø±Õ Ä¿Ç°µÄÐòÁÐ"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "´ò¿ª/¹Ø±Õ ËùÓеÄÐòÁÐ"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "¸½´øÒ»°Ñ PGP ¹«¹²Ô¿³×"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "ÏÔʾ PGP Ñ¡Ïî"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "¼Ä³ö PGP ¹«¹²Ô¿³×"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "¼ìÑé PGP ¹«¹²Ô¿³×"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "¼ìÔÄÕâ°ÑÔ¿³×µÄʹÓÃÕß id"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr ""
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr ""
+
+#: keymap_alldefs.h:188
+#, fuzzy
+msgid "Append a remailer to the chain"
+msgstr "ɾ³ýijÐÐÉÏËùÓеÄ×Öĸ"
+
+#: keymap_alldefs.h:189
+#, fuzzy
+msgid "Insert a remailer into the chain"
+msgstr "ɾ³ýijÐÐÉÏËùÓеÄ×Öĸ"
+
+#: keymap_alldefs.h:190
+#, fuzzy
+msgid "Delete a remailer from the chain"
+msgstr "ɾ³ýijÐÐÉÏËùÓеÄ×Öĸ"
+
+#: keymap_alldefs.h:191
+#, fuzzy
+msgid "Select the previous element of the chain"
+msgstr "ɾ³ýijÐÐÉÏËùÓеÄ×Öĸ"
+
+#: keymap_alldefs.h:192
+#, fuzzy
+msgid "Select the next element of the chain"
+msgstr "ɾ³ýijÐÐÉÏËùÓеÄ×Öĸ"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr ""
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "ÖÆ×÷½âÃܵĿ½±´²¢ÇÒɾ³ýÖ®"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "ÖÆ×÷Ò»·Ý½âÃܵĿ½±´"
+
+#: keymap_alldefs.h:196
+#, fuzzy
+msgid "wipe passphrase(s) from memory"
+msgstr "Çå³ý¼ÇÒäÌåÖеĠPGP Í¨ÐÐÃÜÂë"
+
+#: keymap_alldefs.h:197
+#, fuzzy
+msgid "extract supported public keys"
+msgstr "ߢȡ PGP ¹«¹²Ô¿³×"
+
+#: keymap_alldefs.h:198
+#, fuzzy
+msgid "show S/MIME options"
+msgstr "ÏÔʾ PGP Ñ¡Ïî"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "¼ÇÒäÌå²»×㣡"
+
+#: main.c:46
+#, fuzzy
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr "ÒªÓëÑз¢ÈËÔ±Á¬Â磬Çë¼ÄПø <mutt-dev@mutt.org>¡£\n"
+
+#: main.c:50
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"Copyright (C) 1996-2000 Michael R. Elkins and others.\n"
+"Mutt ²»ÌṩÈκα£Ö¤£ºÐèÒª¸üÏêϸµÄ×ÊÁÏ£¬Çë¼üÈë `mutt -vv'¡£\n"
+"Mutt ÊÇÒ»¸ö×ÔÓÉÈí¼þ, »¶Ó­ÄúÔÚijЩȷ¶¨µÄÌõ¼þÉÏ£¬ÖØеķ¢ÐÐËü\n"
+"ÈôÐèÒª¸üÏêϸµÄ×ÊÁÏ, Çë¼üÈë `mutt -vv'\n"
+
+#: main.c:56
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"Copyright (C) 1996-2000 Michael R. Elkins <me@cs.hmc.edu>\n"
+"Copyright (C) 1996-2000 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2000 Thomas Roessler <roessler@guug.de>\n"
+"Copyright (C) 1998-2000 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2000 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2000 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"\n"
+"»¹ÓÐÐí¶àÔÚÕâÀïûÓÐÌá¼°µ½µÄÈËÊË£¬ËûÃÇÔøÌṩ³ÌÐòÂ룬ÐÞÕý£¬ºÍÒâ¼û¡£\n"
+"\n"
+"    Õâ¸öÓ¦ÓóÌÐòÊÇ×ÔÓÉÈí¼þ£»Äú¿ÉÒÔÔÚ×ÔÓÉÈí¼þ»ù½ð»áµÄ GNU Ò»°ã¹«¹²\n"
+"    ÊÚȨÊ飨°æ±¾ 2£¬»òiËæÄãϲºÃʹÓÃÒÔºóµÄ°æ±¾£©ÏÂÖظ´É¢²¼²¢/»òÐÞ\n"
+"    ÕýËü¡£\n"
+"\n"
+"    ·¢²¼Õâ¸öÓ¦ÓóÌÐòµÄÄ¿µÄÊÇÏ£ÍûËü»á¶ÔÄãÓÐÓ㬵«¾ø²»°üÀ¨Èκα£Ö¤£»\n"
+"    ¾ÍÁ¬ÏúÊÛÐÔºÍÊÊÓÚÌض¨Ä¿µÄÖ®°µÊ¾µ£±£ÒàÈ»¡£ÔÚ GNU Ò»°ã¹«¹²ÊÚȨÊé\n"
+"    Öн«»á»ñµÃ¸ü¶à×ÊÁÏ¡£\n"
+"\n"
+"    ÄúÓ¦ÒÑÁ¬Í¬Ó¦ÓóÌÐòÊÕµ½Ò»·Ý GNU Ò»°ã¹«¹²ÊÚȨÊ飻Èç¹ûûÓУ¬ÇëдÐÅ\n"
+"    ÖÁ Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, "
+"MA  02111, USA.\n"
+
+#: main.c:94
+#, fuzzy
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"Ó÷¨: mutt [ -nRzZ ] [ -e <ÃüÁî> ] [ -F <Îļþ> ] [ -m <ÀàÐÍ> ] [ -f <Îļþ"
+"> ]\n"
+"        mutt [ -nx ] [ -e <ÃüÁî> ] [ -a <Îļþ> ] [ -F <Îļþ> ] [ -H <Îļþ> ] "
+"[ -i <Îļþ> ] [ -s <Ö÷Ìâ> ] [ -b <µØÖ·> ] [ -c <µØÖ·> ] <µØÖ·> [ ... ]\n"
+"        mutt [ -n ] [ -e <ÃüÁî> ] [ -F <Îļþ> ] -p\n"
+"        mutt -v[v]\n"
+"\n"
+"²ÎÊý£º\n"
+"  -a <Îļþ>     ½«Îļþ¸½ÔÚÐżþÖÐ\n"
+"  -b <µØÖ·>     Ö¸¶¨Ò»¸ö ÃØÃܸ´ÖÆ (BCC) µÄµØÖ·\n"
+"  -c <µØÖ·>     Ö¸¶¨Ò»¸ö ¸´ÖÆ (CC) µÄµØÖ·\n"
+"  -e <ÃüÁî>     Ö¸¶¨Ò»¸ö³õʼ»¯ºóÒª±»Ö´ÐеÄÃüÁî\n"
+"  -f <Îļþ>     Ö¸¶¨ÒªÔĶÁÄÇÒ»¸öÓÊͲ\n"
+"  -F <Îļþ>     Ö¸¶¨ÁíÒ»¸ö muttrc Îļþ\n"
+"  -H <Îļþ>     Ö¸¶¨Ò»¸öÄ£°åÎļþÒÔ¶ÁÈ¡±êÌâÀ´Ô´\n"
+"  -i <Îļþ>     Ö¸¶¨Ò»¸ö°üÀ¨Ôڻظ²ÖеÄÎļþ\n"
+"  -m <ÀàÐÍ>     Ö¸¶¨Ò»¸öÔ¤ÉèµÄÓÊͲÀàÐÍ\n"
+"  -n            Ê¹ Mutt ²»È¥¶ÁȡϵͳµÄ Muttrc µµ\n"
+"  -p            ½Ð»ØÒ»¸öÑÓºó¼ÄË͵ÄÐżþ\n"
+"  -R            ÒÔÖ»¶Áģʽ´ò¿ªÓÊͲ\n"
+"  -s <Ö÷Ìâ>     Ö¸¶¨Ò»¸öÖ÷Ìâ (Èç¹ûÓпհ׵Ļ°±ØÐë±»°üÀ¨ÔÚÒýÑÔÖÐ)\n"
+"  -v            ÏÔʾ°æ±¾ºÍ±àÒëʱËù¶¨ÒåµÄ²ÎÊý\n"
+"  -x            Ä£Äâ mailx ¼ÄËÍģʽ\n"
+"  -y            Ñ¡ÔñÒ»¸ö±»Ö¸¶¨ÔÚÄúÓÊͲÇåµ¥ÖеÄÓÊͲ\n"
+"  -z            Èç¹ûûÓÐѶϢÔÚÓÊͲÖеĻ°£¬Á¢¼´À뿪\n"
+"  -Z            ´ò¿ªµÚÒ»¸ö¸½ÓÐÐÂÓʼþµÄ×ÊÁϼУ¬Èç¹ûûÓеĻ°Á¢¼´À뿪\n"
+"  -h            Õâ¸ö˵Ã÷ѶϢ"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"±àÒëÑ¡Ï"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "ÎÞ·¨³õʼ»¯Öն˻ú¡£"
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "³ý´íģʽÔÚµÚ %d ²ã¡£\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "ÔÚ±àÒëʱºòûÓж¨Òå DEBUG¡£·ÅÆúÖ´ÐС£\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s ²»´æÔÚ¡£ÖÆÔìÂð£¿"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "ÎÞ·¨½¨Á¢ %s: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "ûÓÐÖ¸¶¨½ÓÊÜÕß¡£\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s£ºÎÞ·¨¸½´øÎļþ¡£\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "ûÓÐÐÅÏäÓÐÐÂÐżþ¡£"
+
+#: main.c:870
+#, fuzzy
+msgid "No incoming mailboxes defined."
+msgstr "Ȧѡ½øÈëµÄÓÊͲ"
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "ÐÅÏäÄÚ¿ÕÎÞÒ»Îï¡£"
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "¶ÁÈ¡ %s ÖС­ %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "ÐÅÏäÒÑËð»µÁË£¡"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "ÐÅÏäÒÑËð»µ!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "ÑÏÖØ´íÎó£¡ÎÞ·¨ÖØдò¿ªÐÅÏ䣡"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "ÎÞ·¨ËøסÐÅÏ䣡"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr "ͬ²½£ºÐÅÏäÒѱ»Ð޸ģ¬µ«Ã»Óб»Ð޸ĹýµÄÐżþ£¡£¨Çë»Ø±¨Õâ¸ö´íÎó£©"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "дÈëÐżþÖС­ %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+#, fuzzy
+msgid "Committing changes..."
+msgstr "±àÒëËÑÑ°ÑùʽÖС­"
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "дÈëʧ°Ü£¡ÒѰѲ¿·ÖµÄÐÅÏä´¢´æÖÁ %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "ÎÞ·¨ÖØ¿ªÐÅÏ䣡"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "ÖØдò¿ªÐÅÏäÖС­"
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "Ìøµ½£º"
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "ÎÞЧµÄË÷Òý±àºÅ¡£"
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "ûÓÐ×ÊÁÏ¡£"
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "ÄúÎÞ·¨ÔÙÏòÏÂ¾í¶¯ÁË¡£"
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "ÄúÎÞ·¨ÔÙÏòÉÏ¾í¶¯ÁË¡£"
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "ÄúÏÖÔÚÔÚ×îºóÒ»Ò³¡£"
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "ÄúÏÖÔÚÔÚµÚÒ»Ò³¡£"
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "ÕýÔÚÏÔʾµÚÒ»Ïî¡£"
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "ÕýÔÚÏÔʾ×îºóÒ»Ïî¡£"
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "ÄúÏÖÔÚÔÚ×îºóÒ»Ïî¡£"
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "ÄúÏÖÔÚÔÚµÚÒ»Ïî¡£"
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "ËÑÑ°£º"
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "·µÏòËÑÑ°£º"
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "ûÓÐËÑÑ°¸ñʽ¡£"
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "ûÓÐÕÒµ½¡£"
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "ûÓÐÒѱê¼ÇµÄ¼Ç¼¡£"
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "Õâ¸öÑ¡µ¥ÖÐûÓÐËÑÑ°¹¦ÄÜ¡£"
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "¶Ô»°Ä£Ê½Öв»Ö§³ÖÌøÔ¾¹¦ÄÜ¡£"
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "²»Ö§³Ö±ê¼Ç¹¦ÄÜ¡£"
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "¶ÁÈ¡ %s¡­ %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr ""
+
+#: muttlib.c:835
+#, fuzzy
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "ÎļþÊÇÒ»¸öĿ¼, ´¢´æÔÚËüÏÂÃæ ?"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "ÎļþÊÇÒ»¸öĿ¼, ´¢´æÔÚËüÏÂÃæ ?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "ÔÚĿ¼µ×ϵÄÎļþ£º"
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "ÎļþÒѾ­´æÔÚ, (o)¸²¸Ç, (a)¸½¼Ó, »òÊÇ (c)È¡Ïû ?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr ""
+
+#: muttlib.c:1171
+#, fuzzy
+msgid "Can't save message to POP mailbox."
+msgstr "½«ÐżþдÈëµ½ÐÅÏä"
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s ²»ÊÇÐÅÏ䣡"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "¸½¼ÓÐżþµ½ %s ?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, fuzzy, c-format
+msgid "Connection to %s closed"
+msgstr "ÕýÁ¬½Óµ½ %s¡­"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr ""
+
+#: mutt_socket.c:292
+#, fuzzy
+msgid "Preconnect command failed."
+msgstr "Ô¤ÏÈÁ¬½ÓÖ¸Áîʧ°Ü"
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, fuzzy, c-format
+msgid "Error talking to %s (%s)"
+msgstr "ÕýÁ¬Ïßµ½ %s"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr ""
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, fuzzy, c-format
+msgid "Looking up %s..."
+msgstr "¿½±´µ½ %s¡­"
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, fuzzy, c-format
+msgid "Could not find the host \"%s\""
+msgstr "ÕÒ²»µ½Ö÷»ú %s µÄλַ¡£"
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "ÕýÁ¬½Óµ½ %s¡­"
+
+#: mutt_socket.c:519
+#, fuzzy, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "ÎÞ·¨´ò¿ª %s"
+
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr ""
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr ""
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr ""
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr ""
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr ""
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr ""
+
+#: mutt_ssl.c:324
+#, fuzzy, c-format
+msgid "SSL failed: %s"
+msgstr "µÇÈëʧ°Ü¡£"
+
+#: mutt_ssl.c:333
+#, fuzzy
+msgid "Unable to get certificate from peer"
+msgstr "ÎÞ·¨¾ö¶¨ home Ä¿Â¼"
+
+#: mutt_ssl.c:341
+#, fuzzy, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "ÕýÁ¬Ïßµ½ %s"
+
+#: mutt_ssl.c:381
+#, fuzzy
+msgid "Unknown"
+msgstr "²»Ã÷µÄ´íÎó"
+
+#: mutt_ssl.c:406
+#, fuzzy
+msgid "[unable to calculate]"
+msgstr "%s£ºÎÞ·¨¸½´øÎļþ"
+
+#: mutt_ssl.c:424
+#, fuzzy
+msgid "[invalid date]"
+msgstr "%s£ºÎÞЧµÄÖµ"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr ""
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr ""
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr ""
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr ""
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr ""
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr ""
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr ""
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr ""
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr ""
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr ""
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr ""
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr ""
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr ""
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "À뿪  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr ""
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr ""
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "Ëø½øÊýÁ¿³¬¹ýÏ޶½« %s µÄËøÒƳý£¿"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "ÎÞ·¨Óàdotlock Ëøס %s¡£\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "³¢ÊÔ fcntl µÄËø¶¨Ê±³¬¹ýʱ¼ä!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "ÕýÔڵȴý fcntl µÄËø¶¨¡­ %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "³¢ÊÔ flock Ê±³¬¹ýʱ¼ä£¡"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "ÕýÔڵȴý flock Ö´Ðгɹ¦¡­ %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "ÎÞ·¨Ëøס %s¡£\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "¶ÁÈ¡ %s ÖС­"
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "дÈë %s ÖС­"
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "ÎÞ·¨Óë %s ÐÅÏäͬ²½£¡"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "°áÒÆÒѶÁÈ¡µÄÐżþµ½ %s£¿"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "Çå³ý %d ·âÒѾ­±»É¾³ýµÄÐżþ£¿"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "Çå³ý %d ·âÒѱ»É¾³ýµÄÐżþ£¿"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "ÕýÔÚ°áÒÆÒѾ­¶ÁÈ¡µÄÐżþµ½ %s ¡­"
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "ÐÅÏäûÓиı䡣"
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d ·âÐżþ±»±£Áô, %d ·âÐżþ±»°áÒÆ, %d ·âÐżþ±»É¾³ý¡£"
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d ·âÐżþ±»±£Áô, %d ·âÐżþ±»É¾³ý¡£"
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr " Çë°´Ï '%s' À´Çл»Ð´Èëģʽ"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "ÇëʹÓà'toggle-write' À´ÖØÐÂÆô¶¯Ð´È빦ÄÜ!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "ÐÅÏä±»±ê¼Ç³ÉΪÎÞ·¨Ð´ÈëµÄ. %s"
+
+#: mx.c:1181
+#, fuzzy
+msgid "Mailbox checkpointed."
+msgstr "ÓÊÏäÒÑɾ³ý¡£"
+
+#: mx.c:1490
+#, fuzzy
+msgid "Can't write message"
+msgstr "±à¼­ÐżþÄÚÈÝ"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "ÔÚÕâ¸ö²Ëµ¥ÖÐûÓÐÕâ¸ö¹¦ÄÜ¡£"
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "ÉÏÒ»Ò³"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "ÏÂÒ»Ò³"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "ÏÔʾ¸½¼þ¡£"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "ÏÂÒ»¸ö"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "ÏÖÕýÏÔʾ×îÏÂÃæµÄÐżþ¡£"
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "ÏÖÕýÏÔʾ×îÉÏÃæµÄÐżþ¡£"
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "·´ÏòËÑÑ°£º"
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "ËÑÑ°£º"
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "ÏÖÕýÏÔʾ˵Ã÷Îļþ¡£"
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "²»ÄÜÓÐÔÙ¶àµÄÒýÑÔ¡£"
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "ÔÚÒýÑÔºóÓйý¶àµÄ·ÇÒýÑÔÎÄ×Ö¡£"
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "¶à²¿·ÝÓʼþûÓзָôµÄ²ÎÊý!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "±í´ïʽÓдíÎó£º%s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "ÎÞЧµÄÈÕ×Ó£º%s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "ÎÞЧµÄÔ·ݣº%s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, fuzzy, c-format
+msgid "Invalid relative date: %s"
+msgstr "ÎÞЧµÄÔ·ݣº%s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "±í´ïʽÓдíÎó"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "ÔÚÑùʽÉÏÓдíÎó£º%s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c£ºÎÞЧµÄÖ¸Áî"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c£ºÔÚÕâ¸öģʽ²»Ö§³Ö"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "´íʧ²ÎÊý"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "²»¶Ô³ÆµÄÀ¨»¡£º%s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "¿ÕµÄ¸ñʽ"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "´íÎ󣺲»Ã÷µÄ op %d (Çë»Ø±¨Õâ¸ö´íÎó)¡£"
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "±àÒëËÑÑ°ÑùʽÖС­"
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "ÕýÔÚ¶Ô·ûºÏµÄÓʼþÖ´ÐÐÃüÁî¡­"
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "ûÓÐÓʼþ·ûºÏÒªÇó¡£"
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "ÒÑËÑÑ°ÖÁ½á⣬²¢Ã»Óз¢ÏÖÈκηûºÏ"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "ÒÑËÑÑ°ÖÁ¿ªÍ·£¬²¢Ã»Óз¢ÏÖÈκηûºÏ"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "ËÑÑ°Òѱ»Öжϡ£"
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "ÒÑÍü¼Ç PGP Í¨ÐÐÃÜÂë¡£"
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- ´íÎó£ºÎÞ·¨½¨Á¢ PGP ×Ó³ÌÐò£¡ --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- PGP Êä³ö²¿·Ý½áÊø --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PGP Ðżþ¿ªÊ¼ --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- PGP ¹«¹²Ô¿³×Çø¶Î¿ªÊ¼ --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PGP Ç©ÃûµÄÐżþ¿ªÊ¼ --]\n"
+"\n"
+
+#: pgp.c:381
+#, fuzzy
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr ""
+"\n"
+"[-- PGP Ðżþ½áÊø --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- PGP ¹«¹²Ô¿³×Çø¶Î½áÊø --]\n"
+
+#: pgp.c:385
+#, fuzzy
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr ""
+"\n"
+"[-- PGP Ç©ÃûµÄÐżþ½áÊø --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- ´íÎó£ºÕÒ²»µ½ PGP ÐżþµÄ¿ªÍ·£¡ --]\n"
+"\n"
+
+#: pgp.c:662
+#, fuzzy
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "ÄÚ²¿´íÎó¡£ÁªÂç <rosessler@guug.de>¡£"
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- ´íÎó£ºÎÞ·¨½¨Á¢ PGP ×Ó³ÌÐò£¡ --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- ´íÎ󣺲»ÕýÈ·µÄ PGP/MIME Ðżþ£¡ --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- ´íÎó£ºÎÞ·¨½¨Á¢ÔÝ´æµµ£¡ --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- ÏÂÃæÊÇ PGP/MIME ¼ÓÃÜ×ÊÁÏ --]\n"
+"\n"
+
+#: pgp.c:863
+#, fuzzy
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr ""
+"\n"
+"[-- PGP/MIME ¼ÓÃÜ×ÊÁϽáÊø --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "ÎÞ·¨´ò¿ª PGP ×Ó³ÌÐò£¡"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "ҪΪ %2$s Ê¹ÓÃÔ¿³× ID = \"%1$s\"£¿"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "ÇëÊäÈë %s µÄÔ¿³× ID£º"
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "²»ÄÜÖ´ÐРPGP"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "ÄÃÈ¡ PGP Ô¿³×ÖС­"
+
+#: pgpkey.c:486
+#, fuzzy
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "Õâ¸öÔ¿³×²»ÄÜʹÓ㺹ýÆÚ/ÎÞЧ/ÒÑÈ¡Ïû¡£"
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "Ñ¡Ôñ    "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "¼ì²éÔ¿³×   "
+
+#: pgpkey.c:528
+#, fuzzy, c-format
+msgid "PGP keys matching <%s>."
+msgstr "PGP Ô¿³×·ûºÏ \"%s\"¡£"
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "PGP Ô¿³×·ûºÏ \"%s\"¡£"
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "ÎÞ·¨´ò¿ª /dev/null"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "Ô¿³× ID£º0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "Õâ¸öÔ¿³×²»ÄÜʹÓ㺹ýÆÚ/ÎÞЧ/ÒÑÈ¡Ïû¡£"
+
+#: pgpkey.c:608
+#, fuzzy
+msgid "ID is expired/disabled/revoked."
+msgstr "Õâ¸öÔ¿³×²»ÄÜʹÓ㺹ýÆÚ/ÎÞЧ/ÒÑÈ¡Ïû¡£"
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr ""
+
+#: pgpkey.c:615
+#, fuzzy
+msgid "ID is not valid."
+msgstr "Õâ¸ö ID ²»±»ÐÅÈΡ£"
+
+#: pgpkey.c:618
+#, fuzzy
+msgid "ID is only marginally valid."
+msgstr "´Ë ID Ö»ÊÇÃãÇ¿±»ÐÅÈΡ£"
+
+#: pgpkey.c:622
+#, fuzzy, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s ÄúÕæµÄҪʹÓÃËü£¿"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "ÇëÊäÈëÕâ°ÑÔ¿³×µÄ ID£º"
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "Æô¶¯ pgp¡­"
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "PGP Ô¿³× %s¡£"
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "ÕýÑ°ÕÒÆ¥Åä \"%s\" µÄÔ¿³×¡­"
+
+#: pop.c:86 pop_lib.c:197
+#, fuzzy
+msgid "Command TOP is not supported by server."
+msgstr "²»Ö§³Ö±ê¼Ç¹¦ÄÜ¡£"
+
+#: pop.c:113
+#, fuzzy
+msgid "Can't write header to temporary file!"
+msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ"
+
+#: pop.c:194 pop_lib.c:199
+#, fuzzy
+msgid "Command UIDL is not supported by server."
+msgstr "²»Ö§³Ö±ê¼Ç¹¦ÄÜ¡£"
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr ""
+
+#: pop.c:274
+#, fuzzy
+msgid "Fetching list of messages..."
+msgstr "¼Ä³öÐżþÖС­"
+
+#: pop.c:411
+#, fuzzy
+msgid "Can't write message to temporary file!"
+msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ"
+
+#: pop.c:513 pop.c:578
+#, fuzzy
+msgid "Checking for new messages..."
+msgstr "×¼±¸×ª¼ÄÐżþ¡­"
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "POP Ö÷»úûÓỶ¨Òå¡£"
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "POP ÐÅÏäÖÐûÓÐеÄÐżþ"
+
+#: pop.c:613
+#, fuzzy
+msgid "Delete messages from server?"
+msgstr "ÕýÔÚɾ³ýËÅ·þÆ÷ÉϵÄÐżþ¡­"
+
+#: pop.c:615
+#, fuzzy, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "¶ÁÈ¡ÐÂÐżþ (%d Î»Ôª×é)¡­"
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "дÈëÐÅÏäʱ·¢Éú´íÎó£¡"
+
+#: pop.c:661
+#, fuzzy, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [ÒÑÔĶÁ %2d ·âÐżþÖеĠ%1d ·â]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "ÓëËÅ·þÆ÷µÄÁª½áÖжÏÁË!"
+
+#: pop_auth.c:89
+#, fuzzy
+msgid "Authenticating (SASL)..."
+msgstr "ÑéÖ¤ÖР(GSSAPI)¡­"
+
+#: pop_auth.c:205
+#, fuzzy
+msgid "Authenticating (APOP)..."
+msgstr "ÑéÖ¤ÖР(GSSAPI)¡­"
+
+#: pop_auth.c:229
+#, fuzzy
+msgid "APOP authentication failed."
+msgstr "GSSAPI Ñé֤ʧ°Ü¡£"
+
+#: pop_auth.c:264
+#, fuzzy
+msgid "Command USER is not supported by server."
+msgstr "²»Ö§³Ö±ê¼Ç¹¦ÄÜ¡£"
+
+#: pop_lib.c:195
+#, fuzzy
+msgid "Unable to leave messages on server."
+msgstr "ÕýÔÚɾ³ýËÅ·þÆ÷ÉϵÄÐżþ¡­"
+
+#: pop_lib.c:225
+#, fuzzy, c-format
+msgid "Error connecting to server: %s"
+msgstr "ÕýÁ¬Ïßµ½ %s"
+
+#: pop_lib.c:370
+#, fuzzy
+msgid "Closing connection to POP server..."
+msgstr "ÕýÔڹرÕÓë IMAP ËÅ·þÆ÷µÄÁ¬Ïß¡­"
+
+#: pop_lib.c:536
+#, fuzzy
+msgid "Verifying message indexes..."
+msgstr "дÈëÐżþµ½ %s ¡­"
+
+#: pop_lib.c:560
+#, fuzzy
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "ÕýÔڹرÕÓë IMAP ËÅ·þÆ÷µÄÁ¬Ïß¡­"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "ÐżþÒѾ­±»Ñӳټijö"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "ûÓб»ÑӳټijöµÄÐżþ¡£"
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "²»ºÏ¹æ¶¨µÄ PGP ±êÍ·"
+
+#: postpone.c:479
+#, fuzzy
+msgid "Illegal S/MIME header"
+msgstr "²»ºÏ¹æ¶¨µÄ PGP ±êÍ·"
+
+#: postpone.c:554
+#, fuzzy
+msgid "Decryption failed."
+msgstr "µÇÈëʧ°Ü¡£"
+
+#: query.c:46
+msgid "New Query"
+msgstr "еIJéѯ"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "ÖÆ×÷±ðÃû"
+
+#: query.c:48
+msgid "Search"
+msgstr "ËÑÑ°"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "µÈ´ý»ØÓ¦ÖС­"
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "²éѯָÁîÉÐ䶨Òå¡£"
+
+#: query.c:286
+msgid "Query"
+msgstr "²éѯ"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "²éѯ£º"
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "²éѯ '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "¹ÜÏß"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "ÏÔʾ"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "´¢´æÖС­"
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "¸½¼þÒѱ»´¢´æ¡£"
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "¾¯¸æ! ÄúÕýÔÚ¸²¸Ç %s, ÊÇ·ñÒª¼ÌÐø?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "¸½¼þ±»¹ýÂ˵ô¡£"
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "¾­¹ý¹ýÂË£º"
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "µ¼ÒýÖÁ£º"
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "ÎÒ²»ÖªµÀÒªÔõô´òÓ¡ %s ¸½¼þ!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "ÊÇ·ñÒª´òÓ¡±ê¼ÇÆðÀ´µÄ¸½¼þ?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "ÊÇ·ñÒª´òÓ¡¸½¼þ?"
+
+#: recvattach.c:938
+#, fuzzy
+msgid "Can't decrypt encrypted message!"
+msgstr "Ó¦ÓÃÏÂÒ»¸ö¹¦Äܵ½Òѱê¼ÇµÄѶϢ"
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "¸½¼þ"
+
+#: recvattach.c:987
+#, fuzzy
+msgid "There are no subparts to show!"
+msgstr "ûÓи½¼þ¡£"
+
+#: recvattach.c:1048
+#, fuzzy
+msgid "Can't delete attachment from POP server."
+msgstr "È¡»Ø POP ËÅ·þÆ÷ÉϵÄÐżþ"
+
+#: recvattach.c:1056
+#, fuzzy
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "δ֧³Öɾ³ý PGP ÐżþËù¸½´øµÄ¸½¼þ¡£"
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "Ö»Ö§³Öɾ³ý¶àÖظ½¼þ"
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "ÄúÖ»ÄÜÖ±½Ó´«ËÍ message/rfc822 µÄ²¿·Ö¡£"
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing message!"
+msgstr "¼ÄÐÅ;Öз¢Éú´íÎó¡£"
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing messages!"
+msgstr "¼ÄÐÅ;Öз¢Éú´íÎó¡£"
+
+#: recvcmd.c:413
+#, fuzzy, c-format
+msgid "Can't open temporary file %s."
+msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ"
+
+#: recvcmd.c:444
+#, fuzzy
+msgid "Forward as attachments?"
+msgstr "ÏÔʾ MIME ¸½¼þ"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr ""
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "ÓàMIME µÄ·½Ê½À´×ª¼Ä£¿"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, fuzzy, c-format
+msgid "Can't create %s."
+msgstr "ÎÞ·¨½¨Á¢ %s: %s."
+
+#: recvcmd.c:724
+#, fuzzy
+msgid "Can't find any tagged messages."
+msgstr "Ó¦ÓÃÏÂÒ»¸ö¹¦Äܵ½Òѱê¼ÇµÄѶϢ"
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "ûÓÐÕÒµ½ÓʼÄÂÛ̳£¡"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr ""
+
+#: remailer.c:480
+#, fuzzy
+msgid "Append"
+msgstr "¼Ä³ö"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr ""
+
+#: remailer.c:482
+#, fuzzy
+msgid "Delete"
+msgstr "Ñ¡Ôñ"
+
+#: remailer.c:484
+msgid "OK"
+msgstr ""
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr ""
+
+#: remailer.c:538
+#, fuzzy
+msgid "Select a remailer chain."
+msgstr "ɾ³ýijÐÐÉÏËùÓеÄ×Öĸ"
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr ""
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr ""
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr ""
+
+#: remailer.c:661
+#, fuzzy
+msgid "You already have the first chain element selected."
+msgstr "ÄúÒѾ­ÔÚµÚÒ»·âÐÅÁË¡£"
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr ""
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr ""
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr ""
+
+#: remailer.c:768
+#, fuzzy, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "¼ÄËÍѶϢ³öÏÖ´íÎó£¬×Ó³ÌÐòÒѽáÊø %d (%s)¡£"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "¼ÄÐÅ;Öз¢Éú´íÎó¡£"
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "ÔÚ \"%2$s\" µÄµÚ %3$d Ðз¢ÏÖÀà±ð %1$s Îª´íÎóµÄ¸ñʽ¼Í¼"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "ûÓÐÖ¸¶¨ mailcap Â·¾¶"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "ûÓз¢ÏÖÀàÐÍ %s µÄ mailcap ¼Í¼"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "·ÖÊý£ºÌ«ÉٵIJÎÊý"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "·ÖÊý£ºÌ«¶àµÄ²ÎÊý"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "ûÓбêÌ⣬Ҫ²»ÒªÖжϣ¿"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "ûÓбêÌ⣬ÕýÔÚÖжÏÖС£"
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "Òª»Ø¸²¸ø %s%s?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "ÒÔºóµÄ»Ø¸²¶¼¼ÄÖÁ %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "ûÓб»±ê¼ÇÁ˵ÄÐżþÔÚÏÔʾ£¡"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "»ØÐÅʱÊÇ·ñÒª°üº¬Ô­±¾µÄÐżþÄÚÈÝ£¿"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "ÕýÒýÈëÒýÑÔ²¿·Ö¡­"
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "ÎÞ·¨°üº¬ËùÓÐÒªÇóµÄÐżþ£¡"
+
+#: send.c:762
+#, fuzzy
+msgid "Forward as attachment?"
+msgstr "ÊÇ·ñÒª´òÓ¡¸½¼þ?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "×¼±¸×ª¼ÄÐżþ¡­"
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "Òª½Ð³ö±»ÑÓ³ÙµÄÐżþ?"
+
+#: send.c:1336
+#, fuzzy
+msgid "Edit forwarded message?"
+msgstr "×¼±¸×ª¼ÄÐżþ¡­"
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "ÊÇ·ñÒªÖжÏδÐ޸ĹýµÄÐżþ?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "ÖжÏûÓÐÐ޸ĹýµÄÐżþ"
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "ÐżþûÓмijö¡£"
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "Ðżþ±»Ñӳټijö¡£"
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "ûÓÐÖ¸¶¨½ÓÊÜÕߣ¡"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "ûÓÐÖ¸¶¨½ÓÊÜÕß¡£"
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "ûÓÐÐżþ±êÌ⣬ҪÖжϼÄÐŵŤ×÷?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "ûÓÐÖ¸¶¨±êÌâ¡£"
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "¼Ä³öÐżþÖС­"
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "ÎÞ·¨¼Ä³öÐżþ¡£"
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "ÐżþÒѾ­¼Ä³ö¡£"
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "ÕýÔÚºǫ́´«ËÍ¡£"
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "ûÓз¢ÏÖ·Ö½ç±äÁ¿£¡[»Ø±¨´íÎó]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s ÒѾ­²»´æÔÚ£¡"
+
+#: sendlib.c:916
+#, fuzzy, c-format
+msgid "%s isn't a regular file."
+msgstr "%s ²»ÊÇÐÅÏä¡£"
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "ÎÞ·¨´ò¿ª %s"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "¼ÄËÍѶϢ³öÏÖ´íÎó£¬×Ó³ÌÐòÒѽáÊø %d (%s)¡£"
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Delivery process µÄÊä³ö"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr ""
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s¡­ ÕýÔÚÀ뿪¡£\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "²¶×¥µ½ %s¡­ ÕýÔÚÀ뿪¡£\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "²¶×¥µ½ signal %d¡­ ÕýÔÚÀ뿪.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr ""
+
+#: smime.c:303
+msgid "Verified  "
+msgstr ""
+
+#: smime.c:306
+msgid "Unverified"
+msgstr ""
+
+#: smime.c:309
+#, fuzzy
+msgid "Expired   "
+msgstr "À뿪  "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr ""
+
+#: smime.c:315
+#, fuzzy
+msgid "Invalid   "
+msgstr "ÎÞЧµÄÔ·ݣº%s"
+
+#: smime.c:318
+#, fuzzy
+msgid "Unknown   "
+msgstr "²»Ã÷µÄ´íÎó"
+
+#: smime.c:347
+#, fuzzy
+msgid "Enter keyID: "
+msgstr "ÇëÊäÈë %s µÄÔ¿³× ID£º"
+
+#: smime.c:370
+#, fuzzy, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "PGP Ô¿³×·ûºÏ \"%s\"¡£"
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr ""
+
+#: smime.c:523 smime.c:592
+#, fuzzy, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "ҪΪ %2$s Ê¹ÓÃÔ¿³× ID = \"%1$s\"£¿"
+
+#: smime.c:526 smime.c:595
+#, fuzzy, c-format
+msgid "Use ID %s for %s ?"
+msgstr "ҪΪ %2$s Ê¹ÓÃÔ¿³× ID = \"%1$s\"£¿"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr ""
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+#, fuzzy
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "[-- ´íÎó£ºÎÞ·¨½¨Á¢ PGP ×Ó³ÌÐò£¡ --]\n"
+
+#: smime.c:1197
+#, fuzzy
+msgid "no certfile"
+msgstr "ÎÞ·¨½¨Á¢¹ýÂËÆ÷"
+
+#: smime.c:1200
+#, fuzzy
+msgid "no mbox"
+msgstr "£¨Ã»ÓÐÐÅÏ䣩"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr ""
+
+#: smime.c:1381
+msgid "Warning: Intermediate certificate not found."
+msgstr ""
+
+#: smime.c:1426
+#, fuzzy
+msgid "Can't open OpenSSL subprocess!"
+msgstr "ÎÞ·¨´ò¿ª PGP ×Ó³ÌÐò£¡"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr ""
+
+#: smime.c:1629 smime.c:1751
+#, fuzzy
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- PGP Êä³ö²¿·Ý½áÊø --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+#, fuzzy
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- ´íÎó£ºÎÞ·¨½¨Á¢ PGP ×Ó³ÌÐò£¡ --]\n"
+
+#: smime.c:1755
+#, fuzzy
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr ""
+"[-- ÏÂÃæÊÇ PGP/MIME ¼ÓÃÜ×ÊÁÏ --]\n"
+"\n"
+
+#: smime.c:1758
+#, fuzzy
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr ""
+"[-- ÒÔϵÄ×ÊÁÏÒѱ»Ç©Êð --]\n"
+"\n"
+
+#: smime.c:1822
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- PGP/MIME ¼ÓÃÜ×ÊÁϽáÊø --]\n"
+
+#: smime.c:1824
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- Ç©ÊðµÄ×ÊÁϽáÊø --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "ÐÅÏäÅÅÐòÖС­"
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "ÕÒ²»µ½ÅÅÐòµÄº¯Êý£¡[Çë»Ø±¨Õâ¸öÎÊÌâ]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "£¨Ã»ÓÐÐÅÏ䣩"
+
+#: thread.c:1081
+#, fuzzy
+msgid "Parent message is not visible in this limited view."
+msgstr "ÔÚÏÞÖÆÔÄÀÀģʽÏÂÎÞ·¨ÏÔʾÖ÷Ðżþ¡£"
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "Ö÷Ðżþ²»´æÔÚ¡£"
+
+#, fuzzy
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "Æô¶¯ pgp¡­"
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "°ÑÓʼþÖ±½Ó´«ËÍÖÁ %s¡­£¿"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "°ÑÓʼþÖ±½Ó´«ËÍÖÁ %s¡­£¿"
+
+#, fuzzy
+#~ msgid "This ID's validity level is undefined."
+#~ msgstr "Õâ¸ö ID µÄÐÅÈνײãûÓж¨Òå¡£"
+
+#~ msgid "Decode-save"
+#~ msgstr "½âÂë²¢´¢´æ"
+
+#~ msgid "Decode-copy"
+#~ msgstr "½âÂë²¢¿½±´"
+
+#~ msgid "Decrypt-save"
+#~ msgstr "½âÃܲ¢´¢´æ"
+
+#~ msgid "Decrypt-copy"
+#~ msgstr "½âÃܲ¢¿½±´"
+
+#~ msgid "Copy"
+#~ msgstr "¿½±´"
+
+#~ msgid ""
+#~ "\n"
+#~ "[-- End of PGP output --]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "[-- PGP Êä³öµÄ×ÊÁϽáÊø --]\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "Can't stat %s."
+#~ msgstr "ÎÞ·¨¶ÁÈ¡£º%s"
+
+#~ msgid "%s: no such command"
+#~ msgstr "%s£ºÎÞ´ËÖ¸Áî"
+
+#, fuzzy
+#~ msgid "Authentication method is unknown."
+#~ msgstr "GSSAPI Ñé֤ʧ°Ü¡£"
+
+#~ msgid "MIC algorithm: "
+#~ msgstr "MIC ÑÝËã·¨£º"
+
+#~ msgid "This doesn't make sense if you don't want to sign the message."
+#~ msgstr "Èç¹ûÄú²»Ïë°ÑÐżþÇ©Ãû£¬ÕâÑù×ö¾ÍûÓÐʲôÒâ˼À²¡£"
+
+#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160"
+#~ msgstr "²»Ã÷µÄ MIC ÑÝËã·¨¡£ÓÐЧµÄÈçÏÂ: pgp-md5, pgp-sha1, pgp-rmd160"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "SHA1 implementation Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft."
+#~ "com>\n"
+#~ "\n"
+#~ "    Redistribution and use in source and binary forms, with or without\n"
+#~ "    modification, are permitted under certain conditions.\n"
+#~ "\n"
+#~ "    The SHA1 implementation comes AS IS, and ANY EXPRESS OR IMPLIED\n"
+#~ "    WARRANTIES, including, but not limited to, the implied warranties of\n"
+#~ "    merchantability and fitness for a particular purpose ARE DISCLAIMED.\n"
+#~ "\n"
+#~ "    You should have received a copy of the full distribution terms\n"
+#~ "    along with this program; if not, write to the program's developers.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "SHA1 implementation Copyrigt (C) 1995-7 Eric A. Young <eay@cryptsoft."
+#~ "com>\n"
+#~ "\n"
+#~ "     Öظ´É¢²¼²¢Ê¹ÓÃԭʼ³ÌÐòÂëºÍ±àÒë¹ýµÄ³ÌÐòÂ룬²»¹ÜÓзñ¾­¹ýÐ޸ģ¬\n"
+#~ "     ÔÚijЩÌõ¼þÏÂÊÇÐí¿ÉµÄ¡£\n"
+#~ "\n"
+#~ "     SHA1 ³ÌÐò²»¸½´øÈκε£±££¬²»ÂÛϵÃ÷ʾ»¹ÊÇ°µÊ¾£¬°üÀ¨µ«²»ÏÞÓÚÏúÊÛÐÔ\n"
+#~ "     ºÍÊÊÓÚÌض¨Ä¿µÄÖ®°µÊ¾µ£±£¡£\n"
+#~ "\n"
+#~ "     ÄúÓ¦¸ÃÊÕµ½Ò»·Ý´ËÓ¦ÓóÌÐòµÄÍêÕûµÄÉ¢²¼ÌõÎÄ£»Èç¹ûûÓУ¬ÇëдПø\n"
+#~ "     Ó¦ÓóÌÐòµÄ·¢Õ¹ÈËÔ±.\n"
+
+#, fuzzy
+#~ msgid "POP Username: "
+#~ msgstr "IMAP Óû§Ãû³Æ£º"
+
+#, fuzzy
+#~ msgid "Reading new message (%d bytes)..."
+#~ msgstr "¶ÁÈ¡ÐÂÐżþ (%d Î»Ôª×é)¡­"
+
+#~ msgid "Error reading message!"
+#~ msgstr "¶ÁÈ¡Ðżþʱ·¢Éú´íÎó£¡"
+
+#, fuzzy
+#~ msgid "%s [%d message read]"
+#~ msgstr "%s [ÒÑÔĶÁ %d ·âÐżþ]"
+
+#~ msgid "Creating mailboxes is not yet supported."
+#~ msgstr "δ֧³ÖÖÆÔìÓÊÏä¡£"
+
+#~ msgid "We can't currently handle utf-8 at this point."
+#~ msgstr "ÎÒÃÇ»¹Î´ÄÜ´¦Àí utf-8¡£"
+
+#~ msgid "Can't open %s: %s."
+#~ msgstr "ÎÞ·¨´ò¿ª %s£º%s."
+
+#, fuzzy
+#~ msgid "Error while recoding %s. Leave it unchanged."
+#~ msgstr "µ±×ª»»±àÂë %s ·¢Éú´íÎ󡣿´ %s À´ÐÞ¸´ÄãµÄ×ÊÁÏ¡£"
+
+#~ msgid "Error while recoding %s. See %s for recovering your data."
+#~ msgstr "µ±×ª»»±àÂë %s ·¢Éú´íÎ󡣿´ %s À´ÐÞ¸´ÄãµÄ×ÊÁÏ¡£"
+
+#~ msgid "Can't change character set for non-text attachments!"
+#~ msgstr "·ÇÎÄ×ֵĸ½¼þÊDz»Äܸıä×Ö·û¼¯µÄ£¡"
+
+#~ msgid "Enter character set: "
+#~ msgstr "ÇëÊäÈë×Ö·û¼¯£º"
+
+#~ msgid "UTF-8 encoding attachments has not yet been implemented."
+#~ msgstr "»¹Î´Ö§³Ö UTF-8 ±àÂëµÄ¸½¼þ¡£"
+
+#~ msgid "Compose"
+#~ msgstr "дÐÅ"
+
+#~ msgid "We currently can't encode to utf-8."
+#~ msgstr "ÎÒÃÇÏÖÔÚ»¹Î´ÄÜÖØбàÂëÖÁ utf-8¡£"
+
+#~ msgid "Recoding successful."
+#~ msgstr "ÖØбàÂë³É¹¦¡£"
+
+#~ msgid "[-- Error: unexpected end of file! --]\n"
+#~ msgstr "[-- ´íÎó£ºÍ»·¢µÄµµÎ²£¡ --]\n"
+
+#~ msgid "CRAM key for %s@%s: "
+#~ msgstr "%s@%s µÄ CRAM Ô¿³×"
+
+#~ msgid "Skipping CRAM-MD5 authentication."
+#~ msgstr "ÂÓ¹ý CRAM-MD5 ÑéÖ¤"
+
+#~ msgid "Reopening mailbox... %s"
+#~ msgstr "ÖØдò¿ªÐÅÏäÖС­ %s"
+
+#~ msgid "Closing mailbox..."
+#~ msgstr "¹Ø±ÕÐÅÏäÖС­"
+
+#~ msgid "Sending APPEND command ..."
+#~ msgstr "ÕýÔÚËͳö APPEND ÃüÁî¡­"
+
+#~ msgid "change an attachment's character set"
+#~ msgstr "¸Ä±ä¸½¼þµÄ×Ö·û¼¯"
+
+#~ msgid "recode this attachment to/from the local charset"
+#~ msgstr "ÖØн«¸½¼þ±àÂëÖÁ±¾µØ×Ö·û¼¯£¬»òÓɱ¾µØ×Ö·û¼¯ÖØбàÂë"
+
+#~ msgid "%d kept."
+#~ msgstr "%d ±£ÁôÁË¡£"
+
+#~ msgid "POP Password: "
+#~ msgstr "POP ÃÜÂ룺"
+
+#~ msgid "No POP username is defined."
+#~ msgstr "ûÓỶ¨ÒåµÄ POP Ê¹ÓÃÕßÃû³Æ¡£"
+
+#~ msgid "Attachment saved"
+#~ msgstr "¸½¼þÒѱ»´¢´æ¡£"
+
+#~ msgid "move to the last undelete message"
+#~ msgstr "Òƶ¯µ½×îºóÒ»·âδɾ³ýµÄÐżþ"
+
+#~ msgid "return to the main-menu"
+#~ msgstr "»Øµ½Ö÷Ñ¡µ¥"
+
+#~ msgid "ignoring empty header field: %s"
+#~ msgstr "²»Àí»á¿ÕµÄ±êÍ·À¸Î»£º%s"
+
+#, fuzzy
+#~ msgid "Recoding only affetcs text attachments."
+#~ msgstr "Ö»ÖØбàÂëÊÜÓ°ÏìµÄÎÄ×Ö¸½¼þ"
+
+#, fuzzy
+#~ msgid "display message with full headers"
+#~ msgstr "±à¼­ÐżþµÄ±êÍ·"
+
+#, fuzzy
+#~ msgid "PGP keys matching "
+#~ msgstr "PGP Ô¿³×·ûºÏ <%s>¡£"
+
+#, fuzzy
+#~ msgid "This operation is not currently supported for PGP messages."
+#~ msgstr "Ôݲ»Ö§³Öä¯ÀÀ IMAP Ä¿Â¼"
+
+#~ msgid "imap_error(): unexpected response in %s: %s\n"
+#~ msgstr "imap_error()£º%s µÄÒâÍâ»ØÓ¦£º%s\n"
+
+#~ msgid "Can't open your secret key ring!"
+#~ msgstr "ÎÞ·¨´ò¿ªÄúµÄÃØÃÜÔ¿³×»·£¡"
+
+#~ msgid "An unkown PGP version was defined for signing."
+#~ msgstr "¶¨ÒåÁËÒ»¸ö²»Ã÷µÄ PGP °æ±¾À´Ç©Ãû"
+
+#~ msgid "===== Attachments ====="
+#~ msgstr "===== ¸½¼þ ====="
+
+#~ msgid "Sending CREATE command ..."
+#~ msgstr "ÕýÔÚËͳö CREATE ÃüÁî¡­"
+
+#~ msgid "Unknown PGP version \"%s\"."
+#~ msgstr "²»Ã÷µÄ PGP °æ±¾ \"%s\"¡£"
+
+#~ msgid ""
+#~ "[-- Error: this message does not comply with the PGP/MIME specification! "
+#~ "--]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "[-- ´íÎó£ºÕâ·âÐżþ²»·ûºÏ PGP/MIME µÄ¹æ¸ñ£¡ --]\n"
+#~ "\n"
+
+#~ msgid "reserved"
+#~ msgstr "±£ÁôµÄ"
+
+#~ msgid "Encrypted Session Key"
+#~ msgstr "¼ÓÃܵÄÔ¿³×"
+
+#~ msgid "Signature Packet"
+#~ msgstr "Ç©Ãû·â°ü"
+
+#~ msgid "Conventionally Encrypted Session Key Packet"
+#~ msgstr "Ò»°ã¼ÓÃÜÔ¿³×·â°ü"
+
+#~ msgid "One-Pass Signature Packet"
+#~ msgstr "µ¥Ò»Í¨µÀµÄÇ©Ãû·â°ü"
+
+#~ msgid "Secret Key Packet"
+#~ msgstr "ÃØÃÜÔ¿³×·â°ü"
+
+#~ msgid "Public Key Packet"
+#~ msgstr "¹«¹²Ô¿³×·â°ü"
+
+#~ msgid "Secret Subkey Packet"
+#~ msgstr "ÃØÃÜ´ÎÔ¿³×·â°ü"
+
+#~ msgid "Compressed Data Packet"
+#~ msgstr "ѹËõ×ÊÁÏ·â°ü"
+
+#~ msgid "Symmetrically Encrypted Data Packet"
+#~ msgstr "¶Ô³Æ¼ÓÃÜ×ÊÁÏ·â°ü"
+
+#~ msgid "Marker Packet"
+#~ msgstr "¼ÇºÅ·â°ü"
+
+#~ msgid "Literal Data Packet"
+#~ msgstr "ÎÄ×Ö×ÊÁÏ·â°ü"
+
+#~ msgid "Trust Packet"
+#~ msgstr "±»ÐÅÍзâ°ü"
+
+#~ msgid "Name Packet"
+#~ msgstr "Ãû³Æ·â°ü"
+
+#~ msgid "Subkey Packet"
+#~ msgstr "´ÎÔ¿³× (subkey) ·â°ü"
+
+#~ msgid "Reserved"
+#~ msgstr "±£ÁôµÄ"
+
+#~ msgid "Comment Packet"
+#~ msgstr "×¢½â·â°ü"
+
+#~ msgid "Message edited. Really send?"
+#~ msgstr "ÐżþÒѾ­±à¼­¹ý¡£È·¶¨Òª¼Ä³ö£¿"
+
+#~ msgid "Saved output of child process to %s.\n"
+#~ msgstr "Êä³ö×Ó³ÌÐò´¢´æÖÁ %s.\n"
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
new file mode 100644 (file)
index 0000000..2e285dc
Binary files /dev/null and b/po/zh_TW.gmo differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644 (file)
index 0000000..14bf015
--- /dev/null
@@ -0,0 +1,4493 @@
+# Translation for mutt in Traditional Chinese, Big5 encoding.
+#
+# Copyright  Cd Chen <cdchen@mail.cynix.com.tw>, Weichung Chau <weichung@mail.cynix.com.tw>, Anthony Wong <ypwong@debian.org>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Mutt 1.3.22.1\n"
+"POT-Creation-Date: 2004-02-01 19:24+0100\n"
+"PO-Revision-Date: 2001-09-06 18:25+0800\n"
+"Last-Translator: Anthony Wong <ypwong@debian.org>\n"
+"Language-Team: Chinese <zh@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: account.c:144
+#, c-format
+msgid "Username at %s: "
+msgstr "用戶名在 %s:"
+
+#: account.c:172
+#, c-format
+msgid "Password for %s@%s: "
+msgstr "%s@%s 的密碼:"
+
+#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44
+#: recvattach.c:50
+msgid "Exit"
+msgstr "離開"
+
+#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40
+msgid "Del"
+msgstr "刪除"
+
+#: addrbook.c:35 curs_main.c:399 postpone.c:41
+msgid "Undel"
+msgstr "反刪除"
+
+#: addrbook.c:36
+msgid "Select"
+msgstr "選擇"
+
+#. __STRCAT_CHECKED__
+#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627
+#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54
+#: smime.c:415
+msgid "Help"
+msgstr "求助"
+
+#: addrbook.c:141
+msgid "You have no aliases!"
+msgstr "您沒有別名資料!"
+
+#: addrbook.c:152
+msgid "Aliases"
+msgstr "別名"
+
+#. add a new alias
+#: alias.c:242
+msgid "Alias as: "
+msgstr "取別名為:"
+
+#: alias.c:248
+msgid "You already have an alias defined with that name!"
+msgstr "您已經為這個名字定義了別名啦!"
+
+#: alias.c:254
+msgid "Warning: This alias name may not work.  Fix it?"
+msgstr ""
+
+#: alias.c:279
+msgid "Address: "
+msgstr "地址:"
+
+#: alias.c:289 send.c:201
+#, c-format
+msgid "Error: '%s' is a bad IDN."
+msgstr ""
+
+#: alias.c:301
+msgid "Personal name: "
+msgstr "個人姓名:"
+
+#: alias.c:310
+#, c-format
+msgid "[%s = %s] Accept?"
+msgstr "[%s = %s] 接受?"
+
+#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426
+#: recvattach.c:439 recvattach.c:467
+msgid "Save to file: "
+msgstr "存到檔案:"
+
+#: alias.c:342
+msgid "Alias added."
+msgstr "別名已經增加。"
+
+#: attach.c:108 attach.c:235 attach.c:462 attach.c:952
+msgid "Can't match nametemplate, continue?"
+msgstr "無法配合二個同樣名稱,繼續?"
+
+#. For now, editing requires a file, no piping
+#: attach.c:120
+#, c-format
+msgid "Mailcap compose entry requires %%s"
+msgstr "Mailcap 編輯項目需要 %%s"
+
+#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149
+#: curs_lib.c:395
+#, c-format
+msgid "Error running \"%s\"!"
+msgstr "執行 \"%s\" 時發生錯誤!"
+
+#: attach.c:138
+msgid "Failure to open file to parse headers."
+msgstr "開啟檔案來分析檔頭失敗。"
+
+#: attach.c:169
+msgid "Failure to open file to strip headers."
+msgstr "開啟檔案時去除檔案標頭失敗。"
+
+#: attach.c:187
+#, c-format
+msgid "No mailcap compose entry for %s, creating empty file."
+msgstr "沒有 %s 的 mailcap 組成登錄,正在建立空的檔案。"
+
+#. For now, editing requires a file, no piping
+#: attach.c:247
+#, c-format
+msgid "Mailcap Edit entry requires %%s"
+msgstr "編輯 Mailcap 項目時需要 %%s"
+
+#: attach.c:265
+#, c-format
+msgid "No mailcap edit entry for %s"
+msgstr "沒有 %s 的 mailcap 編輯登錄"
+
+#: attach.c:428
+msgid "No matching mailcap entry found.  Viewing as text."
+msgstr "沒有發現配合 mailcap 的登錄。將以文字檔方式瀏覽。"
+
+#: attach.c:441
+msgid "MIME type not defined.  Cannot view attachment."
+msgstr "MIME 形式未被定義. 無法顯示附件內容。"
+
+#: attach.c:531
+msgid "Cannot create filter"
+msgstr "無法建立過濾器"
+
+#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556
+#: pgpkey.c:566 pgpkey.c:755
+msgid "Can't create filter"
+msgstr "無法建立過濾"
+
+#: attach.c:824
+msgid "Write fault!"
+msgstr "寫入失敗!"
+
+#: attach.c:1066
+msgid "I don't know how to print that!"
+msgstr "我不知道要如何列印它!"
+
+#: browser.c:41
+msgid "Chdir"
+msgstr "改變目錄"
+
+#: browser.c:42
+msgid "Mask"
+msgstr "遮罩"
+
+#: browser.c:377 browser.c:964
+#, c-format
+msgid "%s is not a directory."
+msgstr "%s 不是一個目錄"
+
+#: browser.c:497
+#, c-format
+msgid "Mailboxes [%d]"
+msgstr "信箱 [%d]"
+
+#: browser.c:504
+#, c-format
+msgid "Subscribed [%s], File mask: %s"
+msgstr "已訂閱 [%s], 檔案遮罩: %s"
+
+#: browser.c:508
+#, c-format
+msgid "Directory [%s], File mask: %s"
+msgstr "目錄 [%s], 檔案遮罩: %s"
+
+#: browser.c:520
+msgid "Can't attach a directory!"
+msgstr "無法附帶目錄!"
+
+#: browser.c:651 browser.c:1031 browser.c:1128
+msgid "No files match the file mask"
+msgstr "沒有檔案與檔案遮罩相符"
+
+#: browser.c:856
+msgid "Create is only supported for IMAP mailboxes"
+msgstr "只有 IMAP 郵箱才支援製造功能"
+
+#: browser.c:876
+msgid "Delete is only supported for IMAP mailboxes"
+msgstr "只有 IMAP 郵箱才支援刪除功能"
+
+#: browser.c:884
+#, c-format
+msgid "Really delete mailbox \"%s\"?"
+msgstr "真的要刪除 \"%s\" 郵箱?"
+
+#: browser.c:898
+msgid "Mailbox deleted."
+msgstr "郵箱已刪除。"
+
+#: browser.c:904
+msgid "Mailbox not deleted."
+msgstr "郵箱未被刪除。"
+
+#: browser.c:923
+msgid "Chdir to: "
+msgstr "改變目錄到:"
+
+#: browser.c:957 browser.c:1024
+msgid "Error scanning directory."
+msgstr "無法掃描目錄。"
+
+#: browser.c:975
+msgid "File Mask: "
+msgstr "檔案遮罩:"
+
+#: browser.c:1047
+msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "反向排序 (1)日期, (2)字元, (3)大小 或 (4)不排序 ? "
+
+#: browser.c:1048
+msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "
+msgstr "依照 (1)日期 (2)字元 (3)大小 來排序,或(4)不排序 ? "
+
+#: browser.c:1049
+msgid "dazn"
+msgstr "1234"
+
+#: browser.c:1115
+msgid "New file name: "
+msgstr "新檔名:"
+
+#: browser.c:1146
+msgid "Can't view a directory"
+msgstr "無法顯示目錄"
+
+#: browser.c:1163
+msgid "Error trying to view file"
+msgstr "無法試著顯示檔案"
+
+#: buffy.c:442
+#, fuzzy
+msgid "New mail in "
+msgstr "在 %s 有新信件。"
+
+#: color.c:322
+#, c-format
+msgid "%s: color not supported by term"
+msgstr "%s:終端機無法顯示色彩"
+
+#: color.c:328
+#, c-format
+msgid "%s: no such color"
+msgstr "%s:沒有這種顏色"
+
+#: color.c:374 color.c:575 color.c:586
+#, c-format
+msgid "%s: no such object"
+msgstr "%s:沒有這個物件"
+
+#: color.c:381
+#, c-format
+msgid "%s: command valid only for index object"
+msgstr "%s:命令只提供索引物件"
+
+#: color.c:389
+#, c-format
+msgid "%s: too few arguments"
+msgstr "%s:太少參數"
+
+#: color.c:563
+msgid "Missing arguments."
+msgstr "缺少參數。"
+
+#: color.c:602 color.c:613
+msgid "color: too few arguments"
+msgstr "色彩:太少引數"
+
+#: color.c:636
+msgid "mono: too few arguments"
+msgstr "單色:太少引數"
+
+#: color.c:656
+#, c-format
+msgid "%s: no such attribute"
+msgstr "%s:沒有這個屬性"
+
+#: color.c:696 hook.c:65 hook.c:73 keymap.c:721
+msgid "too few arguments"
+msgstr "太少參數"
+
+#: color.c:705 hook.c:79
+msgid "too many arguments"
+msgstr "太多參數"
+
+#: color.c:721
+msgid "default colors not supported"
+msgstr "不支援預設的色彩"
+
+#. find out whether or not the verify signature
+#: commands.c:88
+msgid "Verify PGP signature?"
+msgstr "檢查 PGP 簽名?"
+
+#: commands.c:113 mbox.c:733
+msgid "Could not create temporary file!"
+msgstr "無法建立暫存檔!"
+
+#: commands.c:126
+msgid "Cannot create display filter"
+msgstr "無法建立顯示過濾器"
+
+#: commands.c:146
+msgid "Could not copy message"
+msgstr "無法複制信件"
+
+#: commands.c:182
+#, fuzzy
+msgid "S/MIME signature successfully verified."
+msgstr "PGP 簽名驗證成功。"
+
+#: commands.c:184
+msgid "S/MIME certificate owner does not match sender."
+msgstr ""
+
+#: commands.c:187 commands.c:198
+msgid "Warning: Part of this message has not been signed."
+msgstr ""
+
+#: commands.c:189
+#, fuzzy
+msgid "S/MIME signature could NOT be verified."
+msgstr "PGP 簽名無法驗證。"
+
+#: commands.c:196
+msgid "PGP signature successfully verified."
+msgstr "PGP 簽名驗證成功。"
+
+#: commands.c:200
+msgid "PGP signature could NOT be verified."
+msgstr "PGP 簽名無法驗證。"
+
+#: commands.c:223
+msgid "Command: "
+msgstr "指令:"
+
+#: commands.c:242 recvcmd.c:143
+msgid "Bounce message to: "
+msgstr "直接傳送郵件到:"
+
+#: commands.c:244 recvcmd.c:145
+msgid "Bounce tagged messages to: "
+msgstr "無法傳送已標記的郵件至:"
+
+#: commands.c:259 recvcmd.c:154
+msgid "Error parsing address!"
+msgstr "無法分析位址!"
+
+#: commands.c:267 recvcmd.c:162
+#, c-format
+msgid "Bad IDN: '%s'"
+msgstr ""
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce message to %s"
+msgstr "把郵件直接傳送至 %s"
+
+#: commands.c:278 recvcmd.c:176
+#, c-format
+msgid "Bounce messages to %s"
+msgstr "把郵件直接傳送至 %s"
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Message not bounced."
+msgstr "郵件已被傳送。"
+
+#: commands.c:294 recvcmd.c:192
+#, fuzzy
+msgid "Messages not bounced."
+msgstr "郵件已傳送。"
+
+#: commands.c:304 recvcmd.c:211
+msgid "Message bounced."
+msgstr "郵件已被傳送。"
+
+#: commands.c:304 recvcmd.c:211
+msgid "Messages bounced."
+msgstr "郵件已傳送。"
+
+#: commands.c:381 commands.c:415 commands.c:432
+msgid "Can't create filter process"
+msgstr "無法啟動過濾程序"
+
+#: commands.c:461
+msgid "Pipe to command: "
+msgstr "用管道輸出至命令:"
+
+#: commands.c:478
+msgid "No printing command has been defined."
+msgstr "沒有定義列印指令。"
+
+#: commands.c:483
+msgid "Print message?"
+msgstr "列印信件?"
+
+#: commands.c:483
+msgid "Print tagged messages?"
+msgstr "列印已標記的信件?"
+
+#: commands.c:492
+msgid "Message printed"
+msgstr "信件已印出"
+
+#: commands.c:492
+msgid "Messages printed"
+msgstr "信件已印出"
+
+#: commands.c:494
+msgid "Message could not be printed"
+msgstr "信件未能列印出來"
+
+#: commands.c:495
+msgid "Messages could not be printed"
+msgstr "信件未能列印出來"
+
+#: commands.c:504
+msgid ""
+"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"反方向 1)日期 2)發信人 3)收信時間 4)標題 5)收信人 6)序列 7)不排 8)大小 9)分"
+"數:"
+
+#: commands.c:505
+msgid ""
+"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "
+msgstr ""
+"排序 1)日期 2)發信人 3)收信時間 4)標題 5)收信人 6)序列 7)不排序 8)大小 9)分"
+"數:"
+
+#: commands.c:506
+msgid "dfrsotuzc"
+msgstr "123456789"
+
+#: commands.c:559
+msgid "Shell command: "
+msgstr "Shell 指令:"
+
+#: commands.c:701
+#, fuzzy, c-format
+msgid "Decode-save%s to mailbox"
+msgstr "%s%s 到信箱"
+
+#: commands.c:702
+#, fuzzy, c-format
+msgid "Decode-copy%s to mailbox"
+msgstr "%s%s 到信箱"
+
+#: commands.c:703
+#, fuzzy, c-format
+msgid "Decrypt-save%s to mailbox"
+msgstr "%s%s 到信箱"
+
+#: commands.c:704
+#, fuzzy, c-format
+msgid "Decrypt-copy%s to mailbox"
+msgstr "%s%s 到信箱"
+
+#: commands.c:705
+#, fuzzy, c-format
+msgid "Save%s to mailbox"
+msgstr "%s%s 到信箱"
+
+#: commands.c:705
+#, fuzzy, c-format
+msgid "Copy%s to mailbox"
+msgstr "%s%s 到信箱"
+
+#: commands.c:706
+msgid " tagged"
+msgstr " 已標記"
+
+#: commands.c:779
+#, c-format
+msgid "Copying to %s..."
+msgstr "拷貝到 %s…"
+
+#: commands.c:901
+#, c-format
+msgid "Convert to %s upon sending?"
+msgstr "送出的時候轉換字符集為 %s ?"
+
+#: commands.c:910
+#, c-format
+msgid "Content-Type changed to %s."
+msgstr "Content-Type 被改為 %s。"
+
+#: commands.c:912
+#, c-format
+msgid "Character set changed to %s; %s."
+msgstr "字符集已換為 %s; %s。"
+
+#: commands.c:914
+msgid "not converting"
+msgstr "沒有轉換"
+
+#: commands.c:914
+msgid "converting"
+msgstr "轉換中"
+
+#: compose.c:42
+msgid "There are no attachments."
+msgstr "沒有附件。"
+
+#: compose.c:84
+msgid "Send"
+msgstr "寄出"
+
+#: compose.c:85 remailer.c:483
+msgid "Abort"
+msgstr "中斷"
+
+#: compose.c:89 compose.c:787
+msgid "Attach file"
+msgstr "附加檔案"
+
+#: compose.c:90
+msgid "Descrip"
+msgstr "敘述"
+
+#: compose.c:127
+msgid "Sign, Encrypt"
+msgstr "簽名,加密"
+
+#: compose.c:129
+msgid "Encrypt"
+msgstr "加密"
+
+#: compose.c:131
+msgid "Sign"
+msgstr "簽名"
+
+#: compose.c:133
+msgid "Clear"
+msgstr "清除"
+
+#: compose.c:140 compose.c:144
+msgid " sign as: "
+msgstr " 簽名的身份是: "
+
+#: compose.c:140 compose.c:144
+msgid "<default>"
+msgstr "<預設值>"
+
+#: compose.c:149
+#, fuzzy
+msgid "Encrypt with: "
+msgstr "加密"
+
+#: compose.c:165
+#, fuzzy
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "(1)加密, (2)簽名, (3)用別的身份簽, (4)兩者皆要, 或 (5)放棄?"
+
+#: compose.c:166
+msgid "esabf"
+msgstr "12345"
+
+#. sign (a)s
+#: compose.c:179 compose.c:269
+msgid "Sign as: "
+msgstr "簽名的身份是:"
+
+#: compose.c:227
+#, fuzzy
+msgid ""
+"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "
+msgstr "(1)加密, (2)簽名, (3)用別的身份簽, (4)兩者皆要, 或 (5)放棄?"
+
+#: compose.c:228
+msgid "eswabf"
+msgstr "12345"
+
+#: compose.c:236
+msgid ""
+"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? "
+msgstr ""
+
+#: compose.c:238
+msgid "12345f"
+msgstr ""
+
+#: compose.c:351
+#, c-format
+msgid "%s [#%d] no longer exists!"
+msgstr "%s [#%d] 已不存在!"
+
+#: compose.c:359
+#, c-format
+msgid "%s [#%d] modified. Update encoding?"
+msgstr "%s [#%d] 已修改。更新編碼?"
+
+#: compose.c:402
+msgid "-- Attachments"
+msgstr "-- 附件"
+
+#: compose.c:432
+#, c-format
+msgid "Warning: '%s' is a bad IDN."
+msgstr ""
+
+#: compose.c:455
+msgid "You may not delete the only attachment."
+msgstr "您不可以刪除唯一的附件。"
+
+#: compose.c:722 send.c:1451
+#, c-format
+msgid "Bad IDN in \"%s\": '%s'"
+msgstr ""
+
+#: compose.c:803
+msgid "Attaching selected files..."
+msgstr "正在附加選取了的檔案…"
+
+#: compose.c:814
+#, c-format
+msgid "Unable to attach %s!"
+msgstr "無法附加 %s!"
+
+#: compose.c:832
+msgid "Open mailbox to attach message from"
+msgstr "開啟信箱並從它選擇附加的信件"
+
+#: compose.c:870
+msgid "No messages in that folder."
+msgstr "檔案夾中沒有信件。"
+
+#: compose.c:879
+msgid "Tag the messages you want to attach!"
+msgstr "請標記您要附加的信件!"
+
+#: compose.c:911
+msgid "Unable to attach!"
+msgstr "無法附加!"
+
+#: compose.c:958
+msgid "Recoding only affects text attachments."
+msgstr "只重新編碼受影響的文字附件"
+
+#: compose.c:963
+msgid "The current attachment won't be converted."
+msgstr "這個附件不會被轉換。"
+
+#: compose.c:965
+msgid "The current attachment will be converted."
+msgstr "這個附件會被轉換。"
+
+#: compose.c:1036
+msgid "Invalid encoding."
+msgstr "無效的編碼。"
+
+#: compose.c:1057
+msgid "Save a copy of this message?"
+msgstr "儲存這封信件的拷貝嗎?"
+
+#: compose.c:1110
+msgid "Rename to: "
+msgstr "更改名稱為:"
+
+#: compose.c:1115 editmsg.c:110 sendlib.c:910
+#, fuzzy, c-format
+msgid "Can't stat %s: %s"
+msgstr "無法讀取:%s"
+
+#: compose.c:1141
+msgid "New file: "
+msgstr "建立新檔:"
+
+#: compose.c:1154
+msgid "Content-Type is of the form base/sub"
+msgstr "Content-Type 的格式是 base/sub"
+
+#: compose.c:1160
+#, c-format
+msgid "Unknown Content-Type %s"
+msgstr "不明的 Content-Type %s"
+
+#: compose.c:1173
+#, c-format
+msgid "Can't create file %s"
+msgstr "無法建立檔案 %s"
+
+#: compose.c:1181
+msgid "What we have here is a failure to make an attachment"
+msgstr "我們無法加上附件"
+
+#: compose.c:1236
+msgid "Postpone this message?"
+msgstr "延遲寄出這封信件?"
+
+#: compose.c:1293
+msgid "Write message to mailbox"
+msgstr "將信件寫入到信箱"
+
+#: compose.c:1296
+#, c-format
+msgid "Writing message to %s ..."
+msgstr "寫入信件到 %s …"
+
+#: compose.c:1305
+msgid "Message written."
+msgstr "信件已寫入。"
+
+#: compose.c:1317
+msgid "S/MIME already selected. Clear & continue ? "
+msgstr ""
+
+#: compose.c:1342
+msgid "PGP already selected. Clear & continue ? "
+msgstr ""
+
+#: crypt.c:65
+#, c-format
+msgid " (current time: %c)"
+msgstr ""
+
+#: crypt.c:71
+#, fuzzy, c-format
+msgid "[-- %s output follows%s --]\n"
+msgstr "[-- 以下為 PGP 輸出的資料(現在時間:%c) --]\n"
+
+#: crypt.c:86
+#, fuzzy
+msgid "Passphrase(s) forgotten."
+msgstr "已忘記 PGP 通行密碼。"
+
+#: crypt.c:129
+msgid "Enter PGP passphrase:"
+msgstr "請輸入 PGP 通行密碼:"
+
+#: crypt.c:147
+#, fuzzy
+msgid "Enter SMIME passphrase:"
+msgstr "請輸入 PGP 通行密碼:"
+
+#: crypt.c:192
+#, fuzzy
+msgid "Create a traditional (inline) PGP message?"
+msgstr "建立一封 application/pgp 的信件?"
+
+#: crypt.c:200 pgpkey.c:559 postpone.c:547
+msgid "Invoking PGP..."
+msgstr "啟動 PGP…"
+
+#: crypt.c:434
+msgid "S/MIME messages with no hints on content are unsupported."
+msgstr ""
+
+#: crypt.c:653 crypt.c:697
+msgid "Trying to extract PGP keys...\n"
+msgstr ""
+
+#: crypt.c:677 crypt.c:717
+msgid "Trying to extract S/MIME certificates...\n"
+msgstr ""
+
+#: crypt.c:838
+msgid ""
+"[-- Error: Inconsistent multipart/signed structure! --]\n"
+"\n"
+msgstr ""
+"[-- 錯誤:不一致的 multipart/signed 結構! --]\n"
+"\n"
+
+#: crypt.c:860
+#, c-format
+msgid ""
+"[-- Error: Unknown multipart/signed protocol %s! --]\n"
+"\n"
+msgstr ""
+"[-- 錯誤:不明的 multipart/signed 協定 %s! --]\n"
+"\n"
+
+#: crypt.c:900
+#, c-format
+msgid ""
+"[-- Warning: We can't verify %s/%s signatures. --]\n"
+"\n"
+msgstr ""
+"[-- 警告:我們不能證實 %s/%s 簽名。 --]\n"
+"\n"
+
+#. Now display the signed body
+#: crypt.c:912
+#, fuzzy
+msgid ""
+"[-- The following data is signed --]\n"
+"\n"
+msgstr ""
+"[-- 以下的資料已被簽署 --]\n"
+"\n"
+
+#: crypt.c:918
+msgid ""
+"[-- Warning: Can't find any signatures. --]\n"
+"\n"
+msgstr ""
+"[-- 警告:找不到任何的簽名。 --]\n"
+"\n"
+
+#: crypt.c:924
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of signed data --]\n"
+msgstr ""
+"\n"
+"[-- 簽署的資料結束 --]\n"
+
+# Don't translate this!!
+#: curs_lib.c:157
+msgid "yes"
+msgstr ""
+
+# Don't translate this!!
+#: curs_lib.c:158
+msgid "no"
+msgstr ""
+
+#. restore blocking operation
+#: curs_lib.c:254
+msgid "Exit Mutt?"
+msgstr "離開 Mutt?"
+
+#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321
+msgid "unknown error"
+msgstr "不明的錯誤"
+
+#: curs_lib.c:367
+msgid "Press any key to continue..."
+msgstr "按下任何鍵繼續…"
+
+#: curs_lib.c:411
+msgid " ('?' for list): "
+msgstr " (用 '?' 顯示列表):"
+
+#: curs_main.c:47 curs_main.c:611 curs_main.c:641
+msgid "No mailbox is open."
+msgstr "沒有已開啟信箱。"
+
+#: curs_main.c:48
+msgid "There are no messages."
+msgstr "沒有信件。"
+
+#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40
+msgid "Mailbox is read-only."
+msgstr "信箱是唯讀的。"
+
+#: curs_main.c:50 pager.c:55 recvattach.c:869
+msgid "Function not permitted in attach-message mode."
+msgstr "功能在 attach-message 模式下不被支援。"
+
+#: curs_main.c:51
+msgid "No visible messages."
+msgstr "沒有要被顯示的信件。"
+
+#: curs_main.c:244
+msgid "Cannot toggle write on a readonly mailbox!"
+msgstr "無法寫入到一個唯讀的信箱!"
+
+#: curs_main.c:251
+msgid "Changes to folder will be written on folder exit."
+msgstr "在離開之後將會把改變寫入資料夾。"
+
+#: curs_main.c:256
+msgid "Changes to folder will not be written."
+msgstr "將不會把改變寫入資料夾。"
+
+#: curs_main.c:397
+msgid "Quit"
+msgstr "離開"
+
+#: curs_main.c:400 recvattach.c:51
+msgid "Save"
+msgstr "儲存"
+
+#: curs_main.c:401 query.c:45
+msgid "Mail"
+msgstr "信件"
+
+#: curs_main.c:402 pager.c:1453
+msgid "Reply"
+msgstr "回覆"
+
+#: curs_main.c:403
+msgid "Group"
+msgstr "群組"
+
+#: curs_main.c:492
+msgid "Mailbox was externally modified.  Flags may be wrong."
+msgstr "信箱已被其他途徑改變過。旗標可能有錯誤。"
+
+#: curs_main.c:495
+msgid "New mail in this mailbox."
+msgstr "這個信箱中有新信件。"
+
+#: curs_main.c:499
+msgid "Mailbox was externally modified."
+msgstr "信箱已被其他途徑更改過。"
+
+#: curs_main.c:617
+msgid "No tagged messages."
+msgstr "沒有標記了的信件。"
+
+#: curs_main.c:653 menu.c:896
+#, fuzzy
+msgid "Nothing to do."
+msgstr "正連接到 %s…"
+
+#: curs_main.c:739
+msgid "Jump to message: "
+msgstr "跳到信件:"
+
+#: curs_main.c:745
+msgid "Argument must be a message number."
+msgstr "需要一個信件編號的參數。"
+
+#: curs_main.c:778
+msgid "That message is not visible."
+msgstr "這封信件無法顯示。"
+
+#: curs_main.c:781
+msgid "Invalid message number."
+msgstr "無效的信件編號。"
+
+#: curs_main.c:800
+msgid "Delete messages matching: "
+msgstr "刪除符合這樣式的信件:"
+
+#: curs_main.c:822
+msgid "No limit pattern is in effect."
+msgstr "沒有限制樣式是有效的。"
+
+#. i18n: ask for a limit to apply
+#: curs_main.c:827
+#, c-format
+msgid "Limit: %s"
+msgstr "限制: %s"
+
+#: curs_main.c:837
+msgid "Limit to messages matching: "
+msgstr "限制只符合這樣式的信件:"
+
+#: curs_main.c:869
+msgid "Quit Mutt?"
+msgstr "離開 Mutt?"
+
+#: curs_main.c:948
+msgid "Tag messages matching: "
+msgstr "標記信件的條件:"
+
+#: curs_main.c:962
+msgid "Undelete messages matching: "
+msgstr "反刪除信件的條件:"
+
+#: curs_main.c:970
+msgid "Untag messages matching: "
+msgstr "反標記信件的條件:"
+
+#: curs_main.c:1046
+msgid "Open mailbox in read-only mode"
+msgstr "用唯讀模式開啟信箱"
+
+#: curs_main.c:1048
+msgid "Open mailbox"
+msgstr "開啟信箱"
+
+#: curs_main.c:1064 mx.c:508 mx.c:654
+#, c-format
+msgid "%s is not a mailbox."
+msgstr "%s 不是信箱。"
+
+#: curs_main.c:1156
+msgid "Exit Mutt without saving?"
+msgstr "不儲存便離開 Mutt 嗎?"
+
+#: curs_main.c:1190 curs_main.c:1215
+msgid "You are on the last message."
+msgstr "您已經在最後一封信了。"
+
+#: curs_main.c:1197 curs_main.c:1241
+msgid "No undeleted messages."
+msgstr "沒有要反刪除的信件。"
+
+#: curs_main.c:1234 curs_main.c:1258
+msgid "You are on the first message."
+msgstr "您已經在第一封信了。"
+
+#: curs_main.c:1333 pattern.c:1286
+msgid "Search wrapped to top."
+msgstr "搜尋至開頭。"
+
+#: curs_main.c:1342 pattern.c:1297
+msgid "Search wrapped to bottom."
+msgstr "搜尋至結尾。"
+
+#: curs_main.c:1383
+msgid "No new messages"
+msgstr "沒有新信件"
+
+#: curs_main.c:1383
+msgid "No unread messages"
+msgstr "沒有尚未讀取的信件"
+
+#: curs_main.c:1384
+msgid " in this limited view"
+msgstr " 在這限定的瀏覽中"
+
+#: curs_main.c:1405 pager.c:2337
+#, fuzzy
+msgid "Can't change 'important' flag on POP server."
+msgstr "無法編輯 POP 伺服器上的信件。"
+
+#: curs_main.c:1529
+msgid "No more threads."
+msgstr "沒有更多的序列"
+
+#: curs_main.c:1531
+msgid "You are on the first thread."
+msgstr "您已經在第一個序列上。"
+
+#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069
+#: thread.c:1124
+msgid "Threading is not enabled."
+msgstr "序列功能尚未啟動。"
+
+#: curs_main.c:1615
+msgid "Thread contains unread messages."
+msgstr "序列中有尚未讀取的信件。"
+
+#: curs_main.c:1802
+msgid "Can't edit message on POP server."
+msgstr "無法編輯 POP 伺服器上的信件。"
+
+#.
+#. * SLcurses_waddnstr() can't take a "const char *", so this is only
+#. * declared "static" (sigh)
+#.
+#: edit.c:37
+msgid ""
+"~~\t\tinsert a line begining with a single ~\n"
+"~b users\tadd users to the Bcc: field\n"
+"~c users\tadd users to the Cc: field\n"
+"~f messages\tinclude messages\n"
+"~F messages\tsame as ~f, except also include headers\n"
+"~h\t\tedit the message header\n"
+"~m messages\tinclude and quote messages\n"
+"~M messages\tsame as ~m, except include headers\n"
+"~p\t\tprint the message\n"
+"~q\t\twrite file and quit editor\n"
+"~r file\t\tread a file into the editor\n"
+"~t users\tadd users to the To: field\n"
+"~u\t\trecall the previous line\n"
+"~v\t\tedit message with the $visual editor\n"
+"~w file\t\twrite message to file\n"
+"~x\t\tabort changes and quit editor\n"
+"~?\t\tthis message\n"
+".\t\ton a line by itself ends input\n"
+msgstr ""
+"~~\t\t插入以 ~ 符號開頭的一行\n"
+"~b 戶口\t新增戶口到 Bcc: 欄位\n"
+"~c 戶口\t新增戶口到 Cc: 欄位\n"
+"~f 信件\t包含信件\n"
+"~F 訊息\t類似 ~f, 不包括信件標頭\n"
+"~h\t\t編輯信件的標頭\n"
+"~m 訊息\t包括引言\n"
+"~M 訊息\t類似 ~m, 不包括信件標頭\n"
+"~p\t\t列印這封信件\n"
+"~q\t\t存檔並且離開編輯器\n"
+"~r 檔案\t\t將檔案讀入編輯器\n"
+"~t 戶口\t新增戶口到 To: 欄位\n"
+"~u\t\t喚回之前那一行\n"
+"~v\t\t使用 $visual 編輯器編輯訊息\n"
+"~w 檔案\t\t將訊息寫入檔案\n"
+"~x\t\t停止修改並離開編輯器\n"
+"~?\t\t這訊息\n"
+".\t\t如果是一行裏的唯一字符,則代表結束輸入\n"
+
+#: edit.c:182
+#, c-format
+msgid "%d: invalid message number.\n"
+msgstr "%d:無效的信件號碼。\n"
+
+#: edit.c:324
+msgid "(End message with a . on a line by itself)\n"
+msgstr "(在一行裏輸入一個 . 符號來結束信件)\n"
+
+#: edit.c:382
+msgid "No mailbox.\n"
+msgstr "沒有信箱。\n"
+
+#: edit.c:386
+msgid "Message contains:\n"
+msgstr "信件包含:\n"
+
+#: edit.c:390 edit.c:447
+msgid "(continue)\n"
+msgstr "(繼續)\n"
+
+#: edit.c:403
+msgid "missing filename.\n"
+msgstr "遺失了檔名。\n"
+
+#: edit.c:423
+msgid "No lines in message.\n"
+msgstr "文章中沒有文字。\n"
+
+#: edit.c:440
+#, c-format
+msgid "Bad IDN in %s: '%s'\n"
+msgstr ""
+
+#: edit.c:458
+#, c-format
+msgid "%s: unknown editor command (~? for help)\n"
+msgstr "%s:不明的編輯器指令(~? 求助)\n"
+
+#: editmsg.c:74
+#, c-format
+msgid "could not create temporary folder: %s"
+msgstr "無法建立暫存檔:%s"
+
+#: editmsg.c:84
+#, c-format
+msgid "could not write temporary mail folder: %s"
+msgstr "無法寫入暫存檔:%s"
+
+#: editmsg.c:101
+#, fuzzy, c-format
+msgid "could not truncate temporary mail folder: %s"
+msgstr "無法寫入暫存檔:%s"
+
+#: editmsg.c:116
+msgid "Message file is empty!"
+msgstr "信件檔案是空的!"
+
+#: editmsg.c:123
+msgid "Message not modified!"
+msgstr "沒有改動信件!"
+
+#: editmsg.c:131
+#, c-format
+msgid "Can't open message file: %s"
+msgstr "無法開啟信件檔案:%s"
+
+#: editmsg.c:138 editmsg.c:165
+#, c-format
+msgid "Can't append to folder: %s"
+msgstr "無法把資料加到檔案夾:%s"
+
+#: editmsg.c:196
+#, c-format
+msgid "Error. Preserving temporary file: %s"
+msgstr "發生錯誤,保留暫存檔:%s"
+
+#: flags.c:332
+msgid "Set flag"
+msgstr "設定旗標"
+
+#: flags.c:332
+msgid "Clear flag"
+msgstr "清除旗標"
+
+#: handler.c:1345
+msgid "[-- Error:  Could not display any parts of Multipart/Alternative! --]\n"
+msgstr "[-- 錯誤: 無法顯示 Multipart/Alternative! --]\n"
+
+#: handler.c:1455
+#, c-format
+msgid "[-- Attachment #%d"
+msgstr "[-- 附件 #%d"
+
+#: handler.c:1467
+#, c-format
+msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"
+msgstr "[-- 種類:%s%s,編碼:%s,大小:%s --]\n"
+
+#: handler.c:1527
+#, c-format
+msgid "[-- Autoview using %s --]\n"
+msgstr "[-- 使用 %s 自動顯示 --]\n"
+
+#: handler.c:1528
+#, c-format
+msgid "Invoking autoview command: %s"
+msgstr "執行自動顯示指令:%s"
+
+#: handler.c:1560
+#, c-format
+msgid "[-- Can't run %s. --]\n"
+msgstr "[-- 不能執行 %s 。 --]\n"
+
+#: handler.c:1578 handler.c:1599
+#, c-format
+msgid "[-- Autoview stderr of %s --]\n"
+msgstr "[-- 自動顯示 %s 的 stderr 內容 --]\n"
+
+#: handler.c:1636
+msgid "[-- Error: message/external-body has no access-type parameter --]\n"
+msgstr ""
+"[-- 錯誤:message/external-body 沒有存取類型 (access-type) 的參數 --]\n"
+
+#: handler.c:1655
+#, c-format
+msgid "[-- This %s/%s attachment "
+msgstr "[-- 這個 %s/%s 附件 "
+
+#: handler.c:1662
+#, c-format
+msgid "(size %s bytes) "
+msgstr "(%s 個位元組) "
+
+#: handler.c:1664
+msgid "has been deleted --]\n"
+msgstr "已經被刪除了 --]\n"
+
+#: handler.c:1669
+#, c-format
+msgid "[-- on %s --]\n"
+msgstr "[-- 在 %s --]\n"
+
+#: handler.c:1674
+#, c-format
+msgid "[-- name: %s --]\n"
+msgstr "[-- 名稱:%s --]\n"
+
+#: handler.c:1687 handler.c:1703
+#, fuzzy, c-format
+msgid "[-- This %s/%s attachment is not included, --]\n"
+msgstr "[-- 這個 %s/%s 附件 "
+
+#: handler.c:1689
+#, fuzzy
+msgid ""
+"[-- and the indicated external source has --]\n"
+"[-- expired. --]\n"
+msgstr ""
+"[-- 這個 %s/%s 附件無法被附上, --]\n"
+"[-- 並且被指示的外部原始檔已 --]\n"
+"[-- 過期。 --]\n"
+
+#: handler.c:1707
+#, fuzzy, c-format
+msgid "[-- and the indicated access-type %s is unsupported --]\n"
+msgstr ""
+"[-- 這個 %s/%s 附件無法被附上, --]\n"
+"[-- 並且被指示的存取類型 (access-type) %s 不被支援 --]\n"
+
+#: handler.c:1815
+msgid "Error: multipart/signed has no protocol."
+msgstr "錯誤:multipart/signed 沒有通訊協定。"
+
+#: handler.c:1825
+msgid "Error: multipart/encrypted has no protocol parameter!"
+msgstr "錯誤:multipart/encrypted 沒有任何通訊協定參數!"
+
+#: handler.c:1865
+msgid "Unable to open temporary file!"
+msgstr "無法開啟暫存檔!"
+
+#: handler.c:1925
+#, c-format
+msgid "[-- %s/%s is unsupported "
+msgstr "[-- %s/%s 尚未支援 "
+
+#: handler.c:1930
+#, c-format
+msgid "(use '%s' to view this part)"
+msgstr "(按 '%s' 來顯示這部份)"
+
+#: handler.c:1932
+msgid "(need 'view-attachments' bound to key!)"
+msgstr "(需要定義一個鍵給 'view-attachments' 來瀏覽附件!)"
+
+#: headers.c:173
+#, c-format
+msgid "%s: unable to attach file"
+msgstr "%s:無法附帶檔案"
+
+#: help.c:278
+msgid "ERROR: please report this bug"
+msgstr "錯誤:請回報這個問題"
+
+#: help.c:320
+msgid "<UNKNOWN>"
+msgstr "<不明的>"
+
+#: help.c:332
+msgid ""
+"\n"
+"Generic bindings:\n"
+"\n"
+msgstr ""
+"\n"
+"標準功能定義:\n"
+"\n"
+
+#: help.c:336
+msgid ""
+"\n"
+"Unbound functions:\n"
+"\n"
+msgstr ""
+"\n"
+"未被定義的功能:\n"
+"\n"
+
+#: help.c:344
+#, c-format
+msgid "Help for %s"
+msgstr "%s 的求助"
+
+#: hook.c:242
+msgid "unhook: Can't do unhook * from within a hook."
+msgstr "unhook: 在 hook 裡面不能做 unhook *"
+
+#: hook.c:254
+#, c-format
+msgid "unhook: unknown hook type: %s"
+msgstr "unhook:不明的 hook type %s"
+
+#: hook.c:260
+#, c-format
+msgid "unhook: Can't delete a %s from within a %s."
+msgstr "unhook:不能從 %2$s 刪除 %1s$。"
+
+#: imap/auth.c:104 pop_auth.c:411
+msgid "No authenticators available"
+msgstr "沒有認證方式"
+
+#: imap/auth_anon.c:39
+msgid "Authenticating (anonymous)..."
+msgstr "驗證中 (匿名)…"
+
+#: imap/auth_anon.c:69
+msgid "Anonymous authentication failed."
+msgstr "匿名驗證失敗。"
+
+#: imap/auth_cram.c:44
+msgid "Authenticating (CRAM-MD5)..."
+msgstr "驗證中 (CRAM-MD5)…"
+
+#: imap/auth_cram.c:124
+msgid "CRAM-MD5 authentication failed."
+msgstr "CRAM-MD5 驗證失敗。"
+
+#. now begin login
+#: imap/auth_gss.c:104
+msgid "Authenticating (GSSAPI)..."
+msgstr "驗證中 (GSSAPI)…"
+
+#: imap/auth_gss.c:267
+msgid "GSSAPI authentication failed."
+msgstr "GSSAPI 驗證失敗。"
+
+#: imap/auth_login.c:34
+msgid "LOGIN disabled on this server."
+msgstr "伺服器禁止了登入。"
+
+#: imap/auth_login.c:43 pop_auth.c:244
+msgid "Logging in..."
+msgstr "登入中…"
+
+#: imap/auth_login.c:63 pop_auth.c:287
+msgid "Login failed."
+msgstr "登入失敗。"
+
+#: imap/auth_sasl.c:112
+#, fuzzy, c-format
+msgid "Authenticating (%s)..."
+msgstr "驗證中 (APOP)…"
+
+#: imap/auth_sasl.c:199 pop_auth.c:172
+msgid "SASL authentication failed."
+msgstr "SASL 驗證失敗。"
+
+#: imap/browse.c:64 imap/imap.c:533
+#, c-format
+msgid "%s is an invalid IMAP path"
+msgstr ""
+
+#: imap/browse.c:81
+msgid "Getting namespaces..."
+msgstr "拿取 namespace 中…"
+
+#: imap/browse.c:90
+msgid "Getting folder list..."
+msgstr "拿取目錄表中…"
+
+#: imap/browse.c:219
+#, fuzzy
+msgid "No such folder"
+msgstr "%s:沒有這種顏色"
+
+#: imap/browse.c:277
+msgid "Create mailbox: "
+msgstr "製作信箱:"
+
+#: imap/browse.c:282
+msgid "Mailbox must have a name."
+msgstr "信箱一定要有名字。"
+
+#: imap/browse.c:290
+msgid "Mailbox created."
+msgstr "已完成製造郵箱。"
+
+#: imap/command.c:290
+msgid "Mailbox closed"
+msgstr "郵箱已經關掉"
+
+#. something is wrong because the server reported fewer messages
+#. * than we previously saw
+#.
+#: imap/command.c:332
+msgid "Fatal error.  Message count is out of sync!"
+msgstr "嚴重錯誤。信件數量不協調!"
+
+#: imap/imap.c:147
+#, c-format
+msgid "Closing connection to %s..."
+msgstr "正在關閉與 %s 的連線…"
+
+#: imap/imap.c:307
+msgid "This IMAP server is ancient. Mutt does not work with it."
+msgstr "這個 IMAP 伺服器已過時,Mutt 無法使用它。"
+
+#: imap/imap.c:398
+#, c-format
+msgid "Unexpected response received from server: %s"
+msgstr ""
+
+#: imap/imap.c:418 pop_lib.c:280
+msgid "Secure connection with TLS?"
+msgstr "利用 TSL 來進行安全連接?"
+
+#: imap/imap.c:427 pop_lib.c:300
+msgid "Could not negotiate TLS connection"
+msgstr "未能"
+
+#: imap/imap.c:564
+#, c-format
+msgid "Selecting %s..."
+msgstr "正在選擇 %s …"
+
+#: imap/imap.c:690
+msgid "Error opening mailbox"
+msgstr "開啟信箱時發生錯誤"
+
+#. STATUS not supported
+#: imap/imap.c:744
+msgid "Unable to append to IMAP mailboxes at this server"
+msgstr "無法附加在這個伺服器上的 IMAP 信箱"
+
+#. command failed cause folder doesn't exist
+#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206
+#, c-format
+msgid "Create %s?"
+msgstr "建立 %s?"
+
+#: imap/imap.c:789
+msgid "Closing connection to IMAP server..."
+msgstr "正在關閉與 IMAP 伺服器的連線…"
+
+#: imap/imap.c:952 pop.c:461
+#, c-format
+msgid "Marking %d messages deleted..."
+msgstr "標簽了的 %d 封信件刪去了…"
+
+#: imap/imap.c:961
+msgid "Expunge failed"
+msgstr "刪除 (expunge) 失敗"
+
+#: imap/imap.c:976
+#, c-format
+msgid "Saving message status flags... [%d/%d]"
+msgstr "正在儲存信件狀態旗標… [%d/%d]"
+
+#: imap/imap.c:1060
+msgid "Expunging messages from server..."
+msgstr "正在刪除伺服器上的信件…"
+
+#: imap/imap.c:1065
+msgid "imap_sync_mailbox: EXPUNGE failed"
+msgstr ""
+
+#: imap/imap.c:1099
+msgid "CLOSE failed"
+msgstr "CLOSE 失敗"
+
+#: imap/imap.c:1342
+#, fuzzy
+msgid "Bad mailbox name"
+msgstr "製作信箱:"
+
+#: imap/imap.c:1354
+#, c-format
+msgid "Subscribing to %s..."
+msgstr "訂閱 %s…"
+
+#: imap/imap.c:1356
+#, c-format
+msgid "Unsubscribing to %s..."
+msgstr "取消訂閱 %s…"
+
+#. Unable to fetch headers for lower versions
+#: imap/message.c:74
+msgid "Unable to fetch headers from this IMAP server version."
+msgstr "無法取回使用這個 IMAP 伺服器版本的郵件的標頭。"
+
+#: imap/message.c:84
+#, c-format
+msgid "Could not create temporary file %s"
+msgstr "無法建立暫存檔 %s"
+
+#: imap/message.c:101 pop.c:206
+#, c-format
+msgid "Fetching message headers... [%d/%d]"
+msgstr "正在取回信件標頭… [%d/%d]"
+
+#: imap/message.c:250 pop.c:340
+msgid "Fetching message..."
+msgstr "拿取信件中…"
+
+#: imap/message.c:293 pop.c:377
+msgid "The message index is incorrect. Try reopening the mailbox."
+msgstr "信件的索引不正確。請再重新開啟信箱。"
+
+#: imap/message.c:466
+msgid "Uploading message ..."
+msgstr "正在上傳信件…"
+
+#: imap/message.c:576
+#, c-format
+msgid "Copying %d messages to %s..."
+msgstr "正在複制 %d 封信件到 %s …"
+
+#: imap/message.c:580
+#, c-format
+msgid "Copying message %d to %s..."
+msgstr "正在複制 信件 %d 到 %s …"
+
+#: imap/util.c:239
+msgid "Continue?"
+msgstr "繼續?"
+
+#: init.c:611
+msgid "alias: no address"
+msgstr "別名:沒有電子郵件位址"
+
+#: init.c:651
+#, c-format
+msgid "Warning: Bad IDN '%s' in alias '%s'.\n"
+msgstr ""
+
+#: init.c:714
+msgid "invalid header field"
+msgstr "無效的標頭欄位"
+
+#: init.c:767
+#, c-format
+msgid "%s: unknown sorting method"
+msgstr "%s:不明的排序方式"
+
+#: init.c:879
+#, c-format
+msgid "mutt_restore_default(%s): error in regexp: %s\n"
+msgstr "mutt_restore_defualt(%s):錯誤的正規表示式:%s\n"
+
+#: init.c:944
+#, c-format
+msgid "%s: unknown variable"
+msgstr "%s:不明的變數"
+
+#: init.c:953
+msgid "prefix is illegal with reset"
+msgstr "重新設置後字首仍不合規定"
+
+#: init.c:959
+msgid "value is illegal with reset"
+msgstr "重新設置後值仍不合規定"
+
+#: init.c:998
+#, c-format
+msgid "%s is set"
+msgstr "%s 已被設定"
+
+#: init.c:998
+#, c-format
+msgid "%s is unset"
+msgstr "%s 沒有被設定"
+
+#: init.c:1201
+#, c-format
+msgid "%s: invalid mailbox type"
+msgstr "%s:無效的信箱種類"
+
+#: init.c:1226 init.c:1271
+#, c-format
+msgid "%s: invalid value"
+msgstr "%s:無效的值"
+
+#: init.c:1312
+#, fuzzy, c-format
+msgid "%s: Unknown type."
+msgstr "%s:不明的種類"
+
+#: init.c:1338
+#, c-format
+msgid "%s: unknown type"
+msgstr "%s:不明的種類"
+
+#: init.c:1375
+#, fuzzy, c-format
+msgid "%s: stat: %s"
+msgstr "無法讀取:%s"
+
+#: init.c:1380
+#, fuzzy, c-format
+msgid "%s: not a regular file"
+msgstr "%s 不是信箱。"
+
+#: init.c:1395
+#, c-format
+msgid "Error in %s, line %d: %s"
+msgstr "%s 發生錯誤,行號 %d:%s"
+
+#. the muttrc source keyword
+#: init.c:1411
+#, c-format
+msgid "source: errors in %s"
+msgstr "source:錯誤發生在 %s"
+
+#: init.c:1412
+#, c-format
+msgid "source: reading aborted due too many errors in %s"
+msgstr "source: 因 %s 發生太多錯誤,因此閱讀終止。"
+
+#: init.c:1426
+#, c-format
+msgid "source: error at %s"
+msgstr "source:錯誤發生在 %s"
+
+#: init.c:1431
+msgid "source: too many arguments"
+msgstr "source:太多引數"
+
+#: init.c:1482
+#, c-format
+msgid "%s: unknown command"
+msgstr "%s:不明的指令"
+
+#: init.c:1871
+#, c-format
+msgid "Error in command line: %s\n"
+msgstr "指令行有錯:%s\n"
+
+#: init.c:1920
+msgid "unable to determine home directory"
+msgstr "無法決定 home 目錄"
+
+#: init.c:1928
+msgid "unable to determine username"
+msgstr "無法決定使用者名稱"
+
+#: keymap.c:455
+msgid "Macro loop detected."
+msgstr "檢測到巨集中有迴圈。"
+
+#: keymap.c:660 keymap.c:668
+msgid "Key is not bound."
+msgstr "這個鍵還未被定義功能。"
+
+#: keymap.c:672
+#, c-format
+msgid "Key is not bound.  Press '%s' for help."
+msgstr "這個鍵還未被定義功能。 按 '%s' 以取得說明。"
+
+#: keymap.c:683
+msgid "push: too many arguments"
+msgstr "push:太多引數"
+
+#: keymap.c:704
+#, c-format
+msgid "%s: no such menu"
+msgstr "%s:沒有這個選單"
+
+#: keymap.c:713
+msgid "null key sequence"
+msgstr "空的鍵值序列"
+
+#: keymap.c:792
+msgid "bind: too many arguments"
+msgstr "bind:太多引數"
+
+#: keymap.c:807
+#, c-format
+msgid "%s: no such function in map"
+msgstr "%s:在對映表中沒有這樣的功能"
+
+#: keymap.c:830
+msgid "macro: empty key sequence"
+msgstr "macro:空的鍵值序列"
+
+#: keymap.c:841
+msgid "macro: too many arguments"
+msgstr "macro:引數太多"
+
+#: keymap.c:871
+msgid "exec: no arguments"
+msgstr "exec:沒有引數"
+
+#: keymap.c:891
+#, c-format
+msgid "%s: no such function"
+msgstr "%s:沒有這個功能"
+
+#: keymap.c:912
+#, fuzzy
+msgid "Enter keys (^G to abort): "
+msgstr "請輸入 %s 的鑰匙 ID:"
+
+#: keymap.c:917
+#, c-format
+msgid "Char = %s, Octal = %o, Decimal = %d"
+msgstr ""
+
+#: keymap_alldefs.h:5
+msgid "null operation"
+msgstr "空的運算"
+
+#: keymap_alldefs.h:6
+msgid "end of conditional execution (noop)"
+msgstr ""
+
+#: keymap_alldefs.h:7
+msgid "force viewing of attachment using mailcap"
+msgstr "強迫使用 mailcap 瀏覽夾檔"
+
+#: keymap_alldefs.h:8
+msgid "view attachment as text"
+msgstr "用文字方式顯示附件內容"
+
+#: keymap_alldefs.h:9
+msgid "Toggle display of subparts"
+msgstr "切換部件顯示"
+
+#: keymap_alldefs.h:10
+msgid "move to the bottom of the page"
+msgstr "移到本頁的最後面"
+
+#: keymap_alldefs.h:11
+msgid "remail a message to another user"
+msgstr "重新寄信給另外一個使用者"
+
+#: keymap_alldefs.h:12
+msgid "select a new file in this directory"
+msgstr "請選擇本目錄中一個新的檔案"
+
+#: keymap_alldefs.h:13
+msgid "view file"
+msgstr "顯示檔案"
+
+#: keymap_alldefs.h:14
+msgid "display the currently selected file's name"
+msgstr "顯示所選擇的檔案"
+
+#: keymap_alldefs.h:15
+msgid "subscribe to current mailbox (IMAP only)"
+msgstr "訂閱現在這個郵箱 (只適用於 IMAP)"
+
+#: keymap_alldefs.h:16
+msgid "unsubscribe to current mailbox (IMAP only)"
+msgstr "取消訂閱現在這個郵箱 (只適用於 IMAP)"
+
+#: keymap_alldefs.h:17
+msgid "toggle view all/subscribed mailboxes (IMAP only)"
+msgstr "切換顯示 全部/已訂閱 的郵箱 (只適用於 IMAP)"
+
+#: keymap_alldefs.h:18
+#, fuzzy
+msgid "list mailboxes with new mail"
+msgstr "沒有信箱有新信件。"
+
+#: keymap_alldefs.h:19
+msgid "change directories"
+msgstr "改變目錄"
+
+#: keymap_alldefs.h:20
+msgid "check mailboxes for new mail"
+msgstr "檢查信箱是否有新信件"
+
+#: keymap_alldefs.h:21
+msgid "attach a file(s) to this message"
+msgstr "在這封信件中夾帶檔案"
+
+#: keymap_alldefs.h:22
+msgid "attach message(s) to this message"
+msgstr "在這封信件中夾帶信件"
+
+#: keymap_alldefs.h:23
+msgid "edit the BCC list"
+msgstr "編輯 BCC 列表"
+
+#: keymap_alldefs.h:24
+msgid "edit the CC list"
+msgstr "編輯 CC 列表"
+
+#: keymap_alldefs.h:25
+msgid "edit attachment description"
+msgstr "編輯附件的說明"
+
+#: keymap_alldefs.h:26
+msgid "edit attachment transfer-encoding"
+msgstr "編輯附件的傳輸編碼"
+
+#: keymap_alldefs.h:27
+msgid "enter a file to save a copy of this message in"
+msgstr "輸入用來儲存這封信件拷貝的檔案名稱"
+
+#: keymap_alldefs.h:28
+msgid "edit the file to be attached"
+msgstr "編輯附件的檔案名稱"
+
+#: keymap_alldefs.h:29
+msgid "edit the from field"
+msgstr "編輯發信人欄位"
+
+#: keymap_alldefs.h:30
+msgid "edit the message with headers"
+msgstr "編輯信件與標頭"
+
+#: keymap_alldefs.h:31
+msgid "edit the message"
+msgstr "編輯信件內容"
+
+#: keymap_alldefs.h:32
+msgid "edit attachment using mailcap entry"
+msgstr "使用 mailcap 編輯附件"
+
+#: keymap_alldefs.h:33
+msgid "edit the Reply-To field"
+msgstr "編輯 Reply-To 欄位"
+
+#: keymap_alldefs.h:34
+msgid "edit the subject of this message"
+msgstr "編輯信件的標題"
+
+#: keymap_alldefs.h:35
+msgid "edit the TO list"
+msgstr "編輯 TO 列表"
+
+#: keymap_alldefs.h:36
+msgid "create a new mailbox (IMAP only)"
+msgstr "製造新郵箱 (只適用於 IMAP)"
+
+#: keymap_alldefs.h:37
+msgid "edit attachment content type"
+msgstr "編輯附件的 content type"
+
+#: keymap_alldefs.h:38
+msgid "get a temporary copy of an attachment"
+msgstr "取得附件的暫存拷貝"
+
+#: keymap_alldefs.h:39
+msgid "run ispell on the message"
+msgstr "於信件執行 ispell"
+
+#: keymap_alldefs.h:40
+msgid "compose new attachment using mailcap entry"
+msgstr "使用 mailcap 來組合新的附件"
+
+#: keymap_alldefs.h:41
+msgid "toggle recoding of this attachment"
+msgstr "切換是否再為附件重新編碼"
+
+#: keymap_alldefs.h:42
+msgid "save this message to send later"
+msgstr "儲存信件以便稍後寄出"
+
+#: keymap_alldefs.h:43
+msgid "rename/move an attached file"
+msgstr "更改檔名∕移動 已被附帶的檔案"
+
+#: keymap_alldefs.h:44
+msgid "send the message"
+msgstr "寄出信件"
+
+#: keymap_alldefs.h:45
+msgid "toggle disposition between inline/attachment"
+msgstr "切換 合拼∕附件式 觀看模式"
+
+#: keymap_alldefs.h:46
+msgid "toggle whether to delete file after sending it"
+msgstr "切換寄出後是否刪除檔案"
+
+#: keymap_alldefs.h:47
+msgid "update an attachment's encoding info"
+msgstr "更新附件的編碼資訊"
+
+#: keymap_alldefs.h:48
+msgid "write the message to a folder"
+msgstr "存入一封信件到某個檔案夾"
+
+#: keymap_alldefs.h:49
+msgid "copy a message to a file/mailbox"
+msgstr "拷貝一封信件到某個檔案或信箱"
+
+#: keymap_alldefs.h:50
+msgid "create an alias from a message sender"
+msgstr "建立某封信件寄信人的別名"
+
+#: keymap_alldefs.h:51
+msgid "move entry to bottom of screen"
+msgstr "移至螢幕結尾"
+
+#: keymap_alldefs.h:52
+msgid "move entry to middle of screen"
+msgstr "移至螢幕中央"
+
+#: keymap_alldefs.h:53
+msgid "move entry to top of screen"
+msgstr "移至螢幕開頭"
+
+#: keymap_alldefs.h:54
+msgid "make decoded (text/plain) copy"
+msgstr "製作解碼的 (text/plain) 拷貝"
+
+#: keymap_alldefs.h:55
+msgid "make decoded copy (text/plain) and delete"
+msgstr "製作解碼的拷貝 (text/plain) 並且刪除之"
+
+#: keymap_alldefs.h:56
+msgid "delete the current entry"
+msgstr "刪除所在的資料"
+
+#: keymap_alldefs.h:57
+msgid "delete the current mailbox (IMAP only)"
+msgstr "刪除所在的郵箱 (只適用於 IMAP)"
+
+#: keymap_alldefs.h:58
+msgid "delete all messages in subthread"
+msgstr "刪除所有在子序列中的信件"
+
+#: keymap_alldefs.h:59
+msgid "delete all messages in thread"
+msgstr "刪除所有在序列中的信件"
+
+#: keymap_alldefs.h:60
+msgid "display full address of sender"
+msgstr "顯示寄信人的完整位址"
+
+#: keymap_alldefs.h:61
+msgid "display message and toggle header weeding"
+msgstr "顯示信件並切換是否顯示所有標頭資料"
+
+#: keymap_alldefs.h:62
+msgid "display a message"
+msgstr "顯示信件"
+
+#: keymap_alldefs.h:63
+msgid "edit the raw message"
+msgstr "編輯信件的真正內容"
+
+#: keymap_alldefs.h:64
+msgid "delete the char in front of the cursor"
+msgstr "刪除游標所在位置之前的字母"
+
+#: keymap_alldefs.h:65
+msgid "move the cursor one character to the left"
+msgstr "向左移動一個字元"
+
+#: keymap_alldefs.h:66
+msgid "move the cursor to the beginning of the word"
+msgstr "移動至字的開頭"
+
+#: keymap_alldefs.h:67
+msgid "jump to the beginning of the line"
+msgstr "跳到行首"
+
+#: keymap_alldefs.h:68
+msgid "cycle among incoming mailboxes"
+msgstr "圈選進入的郵筒"
+
+#: keymap_alldefs.h:69
+msgid "complete filename or alias"
+msgstr "完整的檔名或別名"
+
+#: keymap_alldefs.h:70
+msgid "complete address with query"
+msgstr "附上完整的位址查詢"
+
+#: keymap_alldefs.h:71
+msgid "delete the char under the cursor"
+msgstr "刪除游標所在的字母"
+
+#: keymap_alldefs.h:72
+msgid "jump to the end of the line"
+msgstr "跳到行尾"
+
+#: keymap_alldefs.h:73
+msgid "move the cursor one character to the right"
+msgstr "向游標向右移動一個字元"
+
+#: keymap_alldefs.h:74
+msgid "move the cursor to the end of the word"
+msgstr "移動至字的最後"
+
+#: keymap_alldefs.h:75
+#, fuzzy
+msgid "scroll down through the history list"
+msgstr "向上捲動使用紀錄清單"
+
+#: keymap_alldefs.h:76
+msgid "scroll up through the history list"
+msgstr "向上捲動使用紀錄清單"
+
+#: keymap_alldefs.h:77
+msgid "delete chars from cursor to end of line"
+msgstr "由游標所在位置刪除至行尾所有的字元"
+
+#: keymap_alldefs.h:78
+msgid "delete chars from the cursor to the end of the word"
+msgstr "由游標所在位置刪除至字尾所有的字元"
+
+#: keymap_alldefs.h:79
+msgid "delete all chars on the line"
+msgstr "刪除某行上所有的字母"
+
+#: keymap_alldefs.h:80
+msgid "delete the word in front of the cursor"
+msgstr "刪除游標之前的字"
+
+#: keymap_alldefs.h:81
+msgid "quote the next typed key"
+msgstr "用下一個輸入的鍵值作引言"
+
+#: keymap_alldefs.h:82
+msgid "transpose character under cursor with previous"
+msgstr "把遊標上的字母與前一個字交換"
+
+#: keymap_alldefs.h:83
+msgid "capitalize the word"
+msgstr "把字的第一個字母轉成大寫"
+
+#: keymap_alldefs.h:84
+msgid "convert the word to lower case"
+msgstr "把字串轉成小寫"
+
+#: keymap_alldefs.h:85
+msgid "convert the word to upper case"
+msgstr "把字串轉成大寫"
+
+#: keymap_alldefs.h:86
+msgid "enter a muttrc command"
+msgstr "輸入 muttrc 指令"
+
+#: keymap_alldefs.h:87
+msgid "enter a file mask"
+msgstr "輸入檔案遮罩"
+
+#: keymap_alldefs.h:88
+msgid "exit this menu"
+msgstr "離開這個選單"
+
+#: keymap_alldefs.h:89
+msgid "filter attachment through a shell command"
+msgstr "透過 shell 指令來過濾附件"
+
+#: keymap_alldefs.h:90
+msgid "move to the first entry"
+msgstr "移到第一項資料"
+
+#: keymap_alldefs.h:91
+msgid "toggle a message's 'important' flag"
+msgstr "切換信件的 '重要' 旗標"
+
+#: keymap_alldefs.h:92
+msgid "forward a message with comments"
+msgstr "轉寄訊息並加上額外文字"
+
+#: keymap_alldefs.h:93
+msgid "select the current entry"
+msgstr "選擇所在的資料記錄"
+
+#: keymap_alldefs.h:94
+msgid "reply to all recipients"
+msgstr "回覆給所有收件人"
+
+#: keymap_alldefs.h:95
+msgid "scroll down 1/2 page"
+msgstr "向下捲動半頁"
+
+#: keymap_alldefs.h:96
+msgid "scroll up 1/2 page"
+msgstr "向上捲動半頁"
+
+#: keymap_alldefs.h:97
+msgid "this screen"
+msgstr "這個畫面"
+
+#: keymap_alldefs.h:98
+msgid "jump to an index number"
+msgstr "跳到某一個索引號碼"
+
+#: keymap_alldefs.h:99
+msgid "move to the last entry"
+msgstr "移動到最後一項資料"
+
+#: keymap_alldefs.h:100
+msgid "reply to specified mailing list"
+msgstr "回覆給某一個指定的郵件列表"
+
+#: keymap_alldefs.h:101
+msgid "execute a macro"
+msgstr "執行一個巨集"
+
+#: keymap_alldefs.h:102
+msgid "compose a new mail message"
+msgstr "撰寫一封新的信件"
+
+#: keymap_alldefs.h:103
+msgid "open a different folder"
+msgstr "開啟另一個檔案夾"
+
+#: keymap_alldefs.h:104
+msgid "open a different folder in read only mode"
+msgstr "用唯讀模式開啟另一個檔案夾"
+
+#: keymap_alldefs.h:105
+msgid "clear a status flag from a message"
+msgstr "清除某封信件上的狀態旗標"
+
+#: keymap_alldefs.h:106
+msgid "delete messages matching a pattern"
+msgstr "刪除符合某個格式的信件"
+
+#: keymap_alldefs.h:107
+msgid "force retrieval of mail from IMAP server"
+msgstr "強行取回 IMAP 伺服器上的信件"
+
+#: keymap_alldefs.h:108
+msgid "retrieve mail from POP server"
+msgstr "取回 POP 伺服器上的信件"
+
+#: keymap_alldefs.h:109
+msgid "move to the first message"
+msgstr "移動到第一封信件"
+
+#: keymap_alldefs.h:110
+msgid "move to the last message"
+msgstr "移動到最後一封信件"
+
+#: keymap_alldefs.h:111
+msgid "show only messages matching a pattern"
+msgstr "只顯示符合某個格式的信件"
+
+#: keymap_alldefs.h:112
+msgid "jump to the next new message"
+msgstr "跳到下一封新的信件"
+
+#: keymap_alldefs.h:113
+#, fuzzy
+msgid "jump to the next new or unread message"
+msgstr "跳到下一個未讀取的信件"
+
+#: keymap_alldefs.h:114
+msgid "jump to the next subthread"
+msgstr "跳到下一個子序列"
+
+#: keymap_alldefs.h:115
+msgid "jump to the next thread"
+msgstr "跳到下一個序列"
+
+#: keymap_alldefs.h:116
+msgid "move to the next undeleted message"
+msgstr "移動到下一個未刪除的信件"
+
+#: keymap_alldefs.h:117
+msgid "jump to the next unread message"
+msgstr "跳到下一個未讀取的信件"
+
+#: keymap_alldefs.h:118
+msgid "jump to parent message in thread"
+msgstr "跳到這個序列的主信件"
+
+#: keymap_alldefs.h:119
+msgid "jump to previous thread"
+msgstr "跳到上一個序列"
+
+#: keymap_alldefs.h:120
+msgid "jump to previous subthread"
+msgstr "跳到上一個子序列"
+
+#: keymap_alldefs.h:121
+msgid "move to the previous undeleted message"
+msgstr "移動到上一個未刪除的信件"
+
+#: keymap_alldefs.h:122
+msgid "jump to the previous new message"
+msgstr "跳到上一個新的信件"
+
+#: keymap_alldefs.h:123
+#, fuzzy
+msgid "jump to the previous new or unread message"
+msgstr "跳到上一個未讀取的信件"
+
+#: keymap_alldefs.h:124
+msgid "jump to the previous unread message"
+msgstr "跳到上一個未讀取的信件"
+
+#: keymap_alldefs.h:125
+msgid "mark the current thread as read"
+msgstr "標記現在的序列為已讀取"
+
+#: keymap_alldefs.h:126
+msgid "mark the current subthread as read"
+msgstr "標記現在的子序列為已讀取"
+
+#: keymap_alldefs.h:127
+msgid "set a status flag on a message"
+msgstr "設定某一封信件的狀態旗標"
+
+#: keymap_alldefs.h:128
+msgid "save changes to mailbox"
+msgstr "儲存變動到信箱"
+
+#: keymap_alldefs.h:129
+msgid "tag messages matching a pattern"
+msgstr "標記符合某個格式的信件"
+
+#: keymap_alldefs.h:130
+msgid "undelete messages matching a pattern"
+msgstr "反刪除符合某個格式的信件"
+
+#: keymap_alldefs.h:131
+msgid "untag messages matching a pattern"
+msgstr "反標記符合某個格式的信件"
+
+#: keymap_alldefs.h:132
+msgid "move to the middle of the page"
+msgstr "移動到本頁的中間"
+
+#: keymap_alldefs.h:133
+msgid "move to the next entry"
+msgstr "移動到下一項資料"
+
+#: keymap_alldefs.h:134
+msgid "scroll down one line"
+msgstr "向下捲動一行"
+
+#: keymap_alldefs.h:135
+msgid "move to the next page"
+msgstr "移到下一頁"
+
+#: keymap_alldefs.h:136
+msgid "jump to the bottom of the message"
+msgstr "跳到信件的最後面"
+
+#: keymap_alldefs.h:137
+msgid "toggle display of quoted text"
+msgstr "切換引言顯示"
+
+#: keymap_alldefs.h:138
+msgid "skip beyond quoted text"
+msgstr "跳過引言"
+
+#: keymap_alldefs.h:139
+msgid "jump to the top of the message"
+msgstr "跳到信件的最上面"
+
+#: keymap_alldefs.h:140
+msgid "pipe message/attachment to a shell command"
+msgstr "輸出導向 訊息/附件 至命令解譯器"
+
+#: keymap_alldefs.h:141
+msgid "move to the previous entry"
+msgstr "移到上一項資料"
+
+#: keymap_alldefs.h:142
+msgid "scroll up one line"
+msgstr "向上捲動一行"
+
+#: keymap_alldefs.h:143
+msgid "move to the previous page"
+msgstr "移到上一頁"
+
+#: keymap_alldefs.h:144
+msgid "print the current entry"
+msgstr "列印現在的資料"
+
+#: keymap_alldefs.h:145
+msgid "query external program for addresses"
+msgstr "利用外部應用程式查詢地址"
+
+#: keymap_alldefs.h:146
+msgid "append new query results to current results"
+msgstr "附加新的查詢結果至現今的查詢結果"
+
+#: keymap_alldefs.h:147
+msgid "save changes to mailbox and quit"
+msgstr "儲存變動過的資料到信箱並且離開"
+
+#: keymap_alldefs.h:148
+msgid "recall a postponed message"
+msgstr "重新叫出一封被延遲寄出的信件"
+
+#: keymap_alldefs.h:149
+msgid "clear and redraw the screen"
+msgstr "清除並重新繪製畫面"
+
+#: keymap_alldefs.h:150
+msgid "{internal}"
+msgstr "{內部的}"
+
+#: keymap_alldefs.h:151
+msgid "reply to a message"
+msgstr "回覆一封信件"
+
+#: keymap_alldefs.h:152
+msgid "use the current message as a template for a new one"
+msgstr "用這封信件作為新信件的範本"
+
+#: keymap_alldefs.h:153
+msgid "save message/attachment to a file"
+msgstr "儲存信件/附件到某個檔案"
+
+#: keymap_alldefs.h:154
+msgid "search for a regular expression"
+msgstr "用正規表示式尋找"
+
+#: keymap_alldefs.h:155
+msgid "search backwards for a regular expression"
+msgstr "向後搜尋一個正規表示式"
+
+#: keymap_alldefs.h:156
+msgid "search for next match"
+msgstr "尋找下一個符合的資料"
+
+#: keymap_alldefs.h:157
+msgid "search for next match in opposite direction"
+msgstr "返方向搜尋下一個符合的資料"
+
+#: keymap_alldefs.h:158
+msgid "toggle search pattern coloring"
+msgstr "切換搜尋格式的顏色"
+
+#: keymap_alldefs.h:159
+msgid "invoke a command in a subshell"
+msgstr "在子 shell 執行指令"
+
+#: keymap_alldefs.h:160
+msgid "sort messages"
+msgstr "信件排序"
+
+#: keymap_alldefs.h:161
+msgid "sort messages in reverse order"
+msgstr "以相反的次序來做訊息排序"
+
+#: keymap_alldefs.h:162
+msgid "tag the current entry"
+msgstr "標記現在的記錄"
+
+#: keymap_alldefs.h:163
+msgid "apply next function to tagged messages"
+msgstr "應用下一個功能到已標記的訊息"
+
+#: keymap_alldefs.h:164
+#, fuzzy
+msgid "apply next function ONLY to tagged messages"
+msgstr "應用下一個功能到已標記的訊息"
+
+#: keymap_alldefs.h:165
+msgid "tag the current subthread"
+msgstr "標記目前的子序列"
+
+#: keymap_alldefs.h:166
+msgid "tag the current thread"
+msgstr "標記目前的序列"
+
+#: keymap_alldefs.h:167
+msgid "toggle a message's 'new' flag"
+msgstr "切換信件的 'new' 旗標"
+
+#: keymap_alldefs.h:168
+msgid "toggle whether the mailbox will be rewritten"
+msgstr "切換是否重新寫入郵箱中"
+
+#: keymap_alldefs.h:169
+msgid "toggle whether to browse mailboxes or all files"
+msgstr "切換瀏覽郵箱抑或所有的檔案"
+
+#: keymap_alldefs.h:170
+msgid "move to the top of the page"
+msgstr "移到頁首"
+
+#: keymap_alldefs.h:171
+msgid "undelete the current entry"
+msgstr "取消刪除所在的記錄"
+
+#: keymap_alldefs.h:172
+msgid "undelete all messages in thread"
+msgstr "取消刪除序列中的所有信件"
+
+#: keymap_alldefs.h:173
+msgid "undelete all messages in subthread"
+msgstr "取消刪除子序列中的所有信件"
+
+#: keymap_alldefs.h:174
+msgid "show the Mutt version number and date"
+msgstr "顯示 Mutt 的版本號碼與日期"
+
+#: keymap_alldefs.h:175
+msgid "view attachment using mailcap entry if necessary"
+msgstr "如果需要的話使用 mailcap 瀏覽附件"
+
+#: keymap_alldefs.h:176
+msgid "show MIME attachments"
+msgstr "顯示 MIME 附件"
+
+#: keymap_alldefs.h:177
+msgid "display the keycode for a key press"
+msgstr ""
+
+#: keymap_alldefs.h:178
+msgid "show currently active limit pattern"
+msgstr "顯示目前有作用的限制樣式"
+
+#: keymap_alldefs.h:179
+msgid "collapse/uncollapse current thread"
+msgstr "打開/關閉 目前的序列"
+
+#: keymap_alldefs.h:180
+msgid "collapse/uncollapse all threads"
+msgstr "打開/關閉 所有的序列"
+
+#: keymap_alldefs.h:181
+msgid "attach a PGP public key"
+msgstr "附帶一把 PGP 公共鑰匙"
+
+#: keymap_alldefs.h:182
+msgid "show PGP options"
+msgstr "顯示 PGP 選項"
+
+#: keymap_alldefs.h:183
+msgid "mail a PGP public key"
+msgstr "寄出 PGP 公共鑰匙"
+
+#: keymap_alldefs.h:184
+msgid "verify a PGP public key"
+msgstr "檢驗 PGP 公共鑰匙"
+
+#: keymap_alldefs.h:185
+msgid "view the key's user id"
+msgstr "檢閱這把鑰匙的使用者 id"
+
+#: keymap_alldefs.h:186
+msgid "check for classic pgp"
+msgstr "檢查古老的pgp格式"
+
+#: keymap_alldefs.h:187
+msgid "Accept the chain constructed"
+msgstr "同意已建好的鏈結"
+
+#: keymap_alldefs.h:188
+msgid "Append a remailer to the chain"
+msgstr "在鏈結的後面加上郵件轉接器"
+
+#: keymap_alldefs.h:189
+msgid "Insert a remailer into the chain"
+msgstr "在鏈結中加入郵件轉接器"
+
+#: keymap_alldefs.h:190
+msgid "Delete a remailer from the chain"
+msgstr "從鏈結中刪除郵件轉接器"
+
+#: keymap_alldefs.h:191
+msgid "Select the previous element of the chain"
+msgstr "選擇鏈結裏對上一個部份"
+
+#: keymap_alldefs.h:192
+msgid "Select the next element of the chain"
+msgstr "選擇鏈結裏跟著的一個部份"
+
+#: keymap_alldefs.h:193
+msgid "send the message through a mixmaster remailer chain"
+msgstr "利用 mixmaster 郵件轉接器把郵件寄出"
+
+#: keymap_alldefs.h:194
+msgid "make decrypted copy and delete"
+msgstr "製作解密的拷貝並且刪除之"
+
+#: keymap_alldefs.h:195
+msgid "make decrypted copy"
+msgstr "製作一份解密的拷貝"
+
+#: keymap_alldefs.h:196
+#, fuzzy
+msgid "wipe passphrase(s) from memory"
+msgstr "清除記憶體中的 PGP 通行密碼"
+
+#: keymap_alldefs.h:197
+#, fuzzy
+msgid "extract supported public keys"
+msgstr "擷取 PGP 公共鑰匙"
+
+#: keymap_alldefs.h:198
+#, fuzzy
+msgid "show S/MIME options"
+msgstr "顯示 PGP 選項"
+
+#: lib.c:60
+msgid "Integer overflow -- can't allocate memory!"
+msgstr ""
+
+#: lib.c:67 lib.c:82 lib.c:114
+msgid "Out of memory!"
+msgstr "記憶體不足!"
+
+#: main.c:46
+msgid ""
+"To contact the developers, please mail to <mutt-dev@mutt.org>.\n"
+"To report a bug, please use the flea(1) utility.\n"
+msgstr ""
+"要與開發人員連絡,請寄信給 <mutt-dev@mutt.org>。\n"
+"如發現問題,請利用 flea(1) 程式告之。\n"
+
+#: main.c:50
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins and others.\n"
+"Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n"
+"Mutt is free software, and you are welcome to redistribute it\n"
+"under certain conditions; type `mutt -vv' for details.\n"
+msgstr ""
+"版權所有 (C) 1996-2001 Michael R. Elkins 及其他人仕。\n"
+"Mutt 不提供任何保證:需要更詳細的資料,請鍵入 `mutt -vv'。\n"
+"Mutt 是一個自由軟體, 歡迎您在某些特定的條件上,重新將它分發。\n"
+"若需要更詳細的資料, 請鍵入 `mutt -vv'\n"
+
+#: main.c:56
+#, fuzzy
+msgid ""
+"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n"
+"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n"
+"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n"
+"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n"
+"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n"
+"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\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"
+msgstr ""
+"版權所有 (C) 1996-2000 Michael R. Elkins <me@cs.hmc.edu>\n"
+"版權所有 (C) 1996-2000 Brandon Long <blong@fiction.net>\n"
+"版權所有 (C) 1997-2000 Thomas Roessler <roessler@guug.de>\n"
+"版權所有 (C) 1998-2000 Werner Koch <wk@isil.d.shuttle.de>\n"
+"版權所有 (C) 1999-2000 Brendan Cully <brendan@kublai.com>\n"
+"版權所有 (C) 1999-2000 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n"
+"版權所有 (C) 2000-2001 Edmund Grimley Evans <edmundo@rano.org>\n"
+"\n"
+"還有許多在這裡沒有提及到的人仕,他們曾提供程式碼,修正,和意見。\n"
+"\n"
+"    這個應用程式是自由軟體;您可以在自由軟體基金會的 GNU 一般公共\n"
+"    授權書(版本 2,或i隨你喜好使用以後的版本)下重複散布並/或修\n"
+"    正它。\n"
+"\n"
+"    發布這個應用程式的目的是希望它會對你有用,但絕不包括任何保証;\n"
+"    就連銷售性和適於特定目的之暗示擔保亦然。在 GNU 一般公共授權書\n"
+"    中將會獲得更多資料。\n"
+"\n"
+"    您應已連同應用程式收到一份 GNU 一般公共授權書;如果沒有,請寫信\n"
+"    至 Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
+"    Boston, MA  02111, USA.\n"
+
+#: main.c:94
+#, fuzzy
+msgid ""
+"usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f "
+"<file> ]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] "
+"[...]\n"
+"       mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] "
+"[...]\n"
+"       mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] "
+"[ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n"
+"       mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n"
+"       mutt -v[v]\n"
+"\n"
+"options:\n"
+"  -A <alias>\texpand the given alias\n"
+"  -a <file>\tattach a file to the message\n"
+"  -b <address>\tspecify a blind carbon-copy (BCC) address\n"
+"  -c <address>\tspecify a carbon-copy (CC) address\n"
+"  -e <command>\tspecify a command to be executed after initialization\n"
+"  -f <file>\tspecify which mailbox to read\n"
+"  -F <file>\tspecify an alternate muttrc file\n"
+"  -H <file>\tspecify a draft file to read header from\n"
+"  -i <file>\tspecify a file which Mutt should include in the reply\n"
+"  -m <type>\tspecify a default mailbox type\n"
+"  -n\t\tcauses Mutt not to read the system Muttrc\n"
+"  -p\t\trecall a postponed message\n"
+"  -Q <variable>\tquery a configuration variable\n"
+"  -R\t\topen mailbox in read-only mode\n"
+"  -s <subj>\tspecify a subject (must be in quotes if it has spaces)\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"
+"  -h\t\tthis help message"
+msgstr ""
+"用法: mutt [ -nRzZ ] [ -e <命令> ] [ -F <檔案> ] [ -m <類型> ] [ -f <檔案"
+"> ]\n"
+"        mutt [ -nx ] [ -e <命令> ] [ -a <檔案> ] [ -F <檔案> ] [ -H <檔案> ] "
+"[ -i <檔案> ] [ -s <主題> ] [ -b <地址> ] [ -c <地址> ] <地址> [ ... ]\n"
+"        mutt [ -n ] [ -e <命令> ] [ -F <檔案> ] -p\n"
+"        mutt -v[v]\n"
+"\n"
+"參數:\n"
+"  -a <檔案>\t\t將檔案附在信件中\n"
+"  -b <地址>\t\t指定一個 秘密複製 (BCC) 的地址\n"
+"  -c <地址>\t\t指定一個 複製 (CC) 的地址\n"
+"  -e <命令>\t\t指定一個初始化後要被執行的命令\n"
+"  -f <檔案>\t\t指定要閱讀那一個郵筒\n"
+"  -F <檔案>\t\t指定另一個 muttrc 檔案\n"
+"  -H <檔案>\t\t指定一個範本檔案以讀取標題來源\n"
+"  -i <檔案>\t\t指定一個包括在回覆中的檔案\n"
+"  -m <類型>\t\t指定一個預設的郵筒類型\n"
+"  -n\t\t使 Mutt 不去讀取系統的 Muttrc 檔\n"
+"  -p\t\t叫回一個延後寄送的信件\n"
+"  -R\t\t以唯讀模式開啟郵筒\n"
+"  -s <主題>\t\t指定一個主題 (如果有空白的話必須被包括在引言中)\n"
+"  -v\t\t顯示版本和編譯時所定義的參數\n"
+"  -x\t\t模擬 mailx 寄送模式\n"
+"  -y\t\t選擇一個被指定在您郵筒清單中的郵筒\n"
+"  -z\t\t如果沒有訊息在郵筒中的話,立即離開\n"
+"  -Z\t\t開啟第一個附有新郵件的資料夾,如果沒有的話立即離開\n"
+"  -h\t\t這個說明訊息"
+
+#: main.c:162
+msgid ""
+"\n"
+"Compile options:"
+msgstr ""
+"\n"
+"編譯選項:"
+
+#: main.c:454
+msgid "Error initializing terminal."
+msgstr "無法初始化終端機。"
+
+#: main.c:559
+#, c-format
+msgid "Debugging at level %d.\n"
+msgstr "除錯模式在第 %d 層。\n"
+
+#: main.c:561
+msgid "DEBUG was not defined during compilation.  Ignored.\n"
+msgstr "在編譯時候沒有定義 DEBUG。放棄執行。\n"
+
+#: main.c:706
+#, c-format
+msgid "%s does not exist. Create it?"
+msgstr "%s 不存在。製造嗎?"
+
+#: main.c:710
+#, c-format
+msgid "Can't create %s: %s."
+msgstr "無法建立 %s: %s."
+
+#: main.c:755
+msgid "No recipients specified.\n"
+msgstr "沒有指定接受者。\n"
+
+#: main.c:841
+#, c-format
+msgid "%s: unable to attach file.\n"
+msgstr "%s:無法附帶檔案。\n"
+
+#: main.c:861
+msgid "No mailbox with new mail."
+msgstr "沒有信箱有新信件。"
+
+#: main.c:870
+msgid "No incoming mailboxes defined."
+msgstr "沒有定義任何的收信郵箱"
+
+#: main.c:897
+msgid "Mailbox is empty."
+msgstr "信箱內空無一物。"
+
+#: mbox.c:125 mbox.c:284
+#, c-format
+msgid "Reading %s... %d (%d%%)"
+msgstr "讀取 %s 中… %d (%d%%)"
+
+#: mbox.c:149 mbox.c:206
+msgid "Mailbox is corrupt!"
+msgstr "信箱已損壞了!"
+
+#: mbox.c:658
+msgid "Mailbox was corrupted!"
+msgstr "信箱已損壞!"
+
+#: mbox.c:695 mbox.c:949
+msgid "Fatal error!  Could not reopen mailbox!"
+msgstr "嚴重錯誤!無法重新開啟信箱!"
+
+#: mbox.c:704
+msgid "Unable to lock mailbox!"
+msgstr "無法鎖住信箱!"
+
+#. this means ctx->changed or ctx->deleted was set, but no
+#. * messages were found to be changed or deleted.  This should
+#. * never happen, is we presume it is a bug in mutt.
+#.
+#: mbox.c:750
+msgid "sync: mbox modified, but no modified messages! (report this bug)"
+msgstr "同步:信箱已被修改,但沒有被修改過的信件!(請回報這個錯誤)"
+
+#: mbox.c:789
+#, c-format
+msgid "Writing messages... %d (%d%%)"
+msgstr "寫入信件中… %d (%d%%)"
+
+#. copy the temp mailbox back into place starting at the first
+#. * change/deleted message
+#.
+#: mbox.c:902
+msgid "Committing changes..."
+msgstr "正在寫入更改的資料…"
+
+#: mbox.c:933
+#, c-format
+msgid "Write failed!  Saved partial mailbox to %s"
+msgstr "寫入失敗!已把部分的信箱儲存至 %s"
+
+#: mbox.c:999
+msgid "Could not reopen mailbox!"
+msgstr "無法重開信箱!"
+
+#: mbox.c:1037
+msgid "Reopening mailbox..."
+msgstr "重新開啟信箱中…"
+
+#: menu.c:413
+msgid "Jump to: "
+msgstr "跳到:"
+
+#: menu.c:422
+msgid "Invalid index number."
+msgstr "無效的索引編號。"
+
+#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548
+#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033
+msgid "No entries."
+msgstr "沒有資料。"
+
+#: menu.c:441
+msgid "You cannot scroll down farther."
+msgstr "您無法再向下捲動了。"
+
+#: menu.c:457
+msgid "You cannot scroll up farther."
+msgstr "您無法再向上捲動了。"
+
+#: menu.c:477
+msgid "You are on the last page."
+msgstr "您現在在最後一頁。"
+
+#: menu.c:499
+msgid "You are on the first page."
+msgstr "您現在在第一頁。"
+
+#: menu.c:578
+msgid "First entry is shown."
+msgstr "正在顯示第一項。"
+
+#: menu.c:598
+msgid "Last entry is shown."
+msgstr "正在顯示最後一項。"
+
+#: menu.c:649
+msgid "You are on the last entry."
+msgstr "您現在在最後一項。"
+
+#: menu.c:660
+msgid "You are on the first entry."
+msgstr "您現在在第一項。"
+
+#: menu.c:720 pattern.c:1232
+msgid "Search for: "
+msgstr "搜尋:"
+
+#: menu.c:721 pattern.c:1233
+msgid "Reverse search for: "
+msgstr "返向搜尋:"
+
+#: menu.c:731 pattern.c:1265
+msgid "No search pattern."
+msgstr "沒有搜尋格式。"
+
+#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330
+msgid "Not found."
+msgstr "沒有找到。"
+
+#: menu.c:885
+msgid "No tagged entries."
+msgstr "沒有已標記的記錄。"
+
+#: menu.c:990
+msgid "Search is not implemented for this menu."
+msgstr "這個選單中沒有搜尋功能。"
+
+#: menu.c:995
+msgid "Jumping is not implemented for dialogs."
+msgstr "對話模式中不支援跳躍功能。"
+
+#: menu.c:1036
+msgid "Tagging is not supported."
+msgstr "不支援標記功能。"
+
+#: mh.c:655
+#, c-format
+msgid "Reading %s... %d"
+msgstr "讀取 %s… %d"
+
+#: mh.c:1041
+msgid "maildir_commit_message(): unable to set time on file"
+msgstr ""
+
+#: muttlib.c:835
+#, fuzzy
+msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]"
+msgstr "檔案是一個目錄, 儲存在它下面 ?"
+
+#: muttlib.c:835
+msgid "yna"
+msgstr ""
+
+#: muttlib.c:851
+msgid "File is a directory, save under it?"
+msgstr "檔案是一個目錄, 儲存在它下面 ?"
+
+#: muttlib.c:857
+msgid "File under directory: "
+msgstr "在目錄底下的檔案:"
+
+#: muttlib.c:869
+msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?"
+msgstr "檔案已經存在, (1)覆蓋, (2)附加, 或是 (3)取消 ?"
+
+#: muttlib.c:869
+msgid "oac"
+msgstr "123"
+
+#: muttlib.c:1171
+msgid "Can't save message to POP mailbox."
+msgstr "無法將信件存到信箱。"
+
+#: muttlib.c:1180
+#, c-format
+msgid "%s is not a mailbox!"
+msgstr "%s 不是信箱!"
+
+#: muttlib.c:1186
+#, c-format
+msgid "Append messages to %s?"
+msgstr "附加信件到 %s ?"
+
+#: mutt_socket.c:87 mutt_socket.c:143
+#, c-format
+msgid "Connection to %s closed"
+msgstr "到 %s 的連線中斷了"
+
+#: mutt_socket.c:261
+msgid "SSL is unavailable."
+msgstr "沒有 SSL 功能"
+
+#: mutt_socket.c:292
+msgid "Preconnect command failed."
+msgstr "預先連接指令失敗。"
+
+#: mutt_socket.c:363 mutt_socket.c:377
+#, c-format
+msgid "Error talking to %s (%s)"
+msgstr "連線到 %s (%s) 時失敗"
+
+#: mutt_socket.c:416 mutt_socket.c:473
+#, c-format
+msgid "Bad IDN \"%s\"."
+msgstr ""
+
+#: mutt_socket.c:423 mutt_socket.c:480
+#, c-format
+msgid "Looking up %s..."
+msgstr "正在尋找 %s…"
+
+#: mutt_socket.c:434 mutt_socket.c:487
+#, c-format
+msgid "Could not find the host \"%s\""
+msgstr "找不到主機 \"%s\""
+
+#: mutt_socket.c:438 mutt_socket.c:496
+#, c-format
+msgid "Connecting to %s..."
+msgstr "正連接到 %s…"
+
+#: mutt_socket.c:519
+#, c-format
+msgid "Could not connect to %s (%s)."
+msgstr "無法連線到 %s (%s)。"
+
+# Well, I don't know how to translate the word "entropy"
+#: mutt_ssl.c:170
+msgid "Failed to find enough entropy on your system"
+msgstr ""
+
+#: mutt_ssl.c:194
+#, c-format
+msgid "Filling entropy pool: %s...\n"
+msgstr ""
+
+#: mutt_ssl.c:202
+#, c-format
+msgid "%s has insecure permissions!"
+msgstr "%s 的權限不安全!"
+
+#: mutt_ssl.c:221
+msgid "SSL disabled due the lack of entropy"
+msgstr ""
+
+#: mutt_ssl.c:315
+msgid "I/O error"
+msgstr ""
+
+#: mutt_ssl.c:318
+msgid "unspecified protocol error"
+msgstr ""
+
+#: mutt_ssl.c:324
+#, fuzzy, c-format
+msgid "SSL failed: %s"
+msgstr "登入失敗: %s"
+
+#: mutt_ssl.c:333
+msgid "Unable to get certificate from peer"
+msgstr "無法從對方拿取驗証"
+
+#: mutt_ssl.c:341
+#, c-format
+msgid "SSL connection using %s (%s)"
+msgstr "利用 %s (%s) 來進行 SSL"
+
+#: mutt_ssl.c:381
+msgid "Unknown"
+msgstr "不清楚"
+
+#: mutt_ssl.c:406
+msgid "[unable to calculate]"
+msgstr "【無法計算】"
+
+#: mutt_ssl.c:424
+msgid "[invalid date]"
+msgstr "【無效的日期】"
+
+#: mutt_ssl.c:499
+msgid "Server certificate is not yet valid"
+msgstr "伺服器的驗証還未有效"
+
+#: mutt_ssl.c:506
+msgid "Server certificate has expired"
+msgstr "伺服器的驗証已過期"
+
+#: mutt_ssl.c:579
+msgid "This certificate belongs to:"
+msgstr "這個驗証屬於:"
+
+#: mutt_ssl.c:590
+msgid "This certificate was issued by:"
+msgstr "這個驗証的派發者:"
+
+#: mutt_ssl.c:601
+msgid "This certificate is valid"
+msgstr "這個驗証有效"
+
+#: mutt_ssl.c:602
+#, c-format
+msgid "   from %s"
+msgstr "   由 %s"
+
+#: mutt_ssl.c:604
+#, c-format
+msgid "     to %s"
+msgstr "     至 %s"
+
+#: mutt_ssl.c:610
+#, c-format
+msgid "Fingerprint: %s"
+msgstr "指模:%s"
+
+#: mutt_ssl.c:612
+msgid "SSL Certificate check"
+msgstr "SSL 驗証測試"
+
+#: mutt_ssl.c:615
+msgid "(r)eject, accept (o)nce, (a)ccept always"
+msgstr "(1)不接受,(2)只是這次接受,(3)永遠接受"
+
+#: mutt_ssl.c:616
+msgid "roa"
+msgstr "123"
+
+#: mutt_ssl.c:620
+msgid "(r)eject, accept (o)nce"
+msgstr "(1)不接受,(2)只是這次接受"
+
+#: mutt_ssl.c:621
+msgid "ro"
+msgstr "12"
+
+#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410
+msgid "Exit  "
+msgstr "離開  "
+
+#: mutt_ssl.c:652
+msgid "Warning: Couldn't save certificate"
+msgstr "警告:未能儲存驗証"
+
+#: mutt_ssl.c:657
+msgid "Certificate saved"
+msgstr "驗証已儲存"
+
+#: mx.c:116
+#, c-format
+msgid "Lock count exceeded, remove lock for %s?"
+msgstr "鎖進數量超過限額,將 %s 的鎖移除?"
+
+#: mx.c:128
+#, c-format
+msgid "Can't dotlock %s.\n"
+msgstr "無法用 dotlock 鎖住 %s。\n"
+
+#: mx.c:186
+msgid "Timeout exceeded while attempting fcntl lock!"
+msgstr "嘗試 fcntl 的鎖定時超過時間!"
+
+#: mx.c:192
+#, c-format
+msgid "Waiting for fcntl lock... %d"
+msgstr "正在等待 fcntl 的鎖定… %d"
+
+#: mx.c:220
+msgid "Timeout exceeded while attempting flock lock!"
+msgstr "嘗試 flock 時超過時間!"
+
+#: mx.c:227
+#, c-format
+msgid "Waiting for flock attempt... %d"
+msgstr "正在等待 flock 執行成功… %d"
+
+#: mx.c:591
+#, c-format
+msgid "Couldn't lock %s\n"
+msgstr "無法鎖住 %s。\n"
+
+#: mx.c:675
+#, c-format
+msgid "Reading %s..."
+msgstr "讀取 %s 中…"
+
+#: mx.c:775
+#, c-format
+msgid "Writing %s..."
+msgstr "寫入 %s 中…"
+
+#: mx.c:808
+#, c-format
+msgid "Could not synchronize mailbox %s!"
+msgstr "無法與 %s 信箱同步!"
+
+#: mx.c:874
+#, c-format
+msgid "Move read messages to %s?"
+msgstr "搬移已讀取的信件到 %s?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted message?"
+msgstr "清除 %d 封已經被刪除的信件?"
+
+#: mx.c:890 mx.c:1146
+#, c-format
+msgid "Purge %d deleted messages?"
+msgstr "清除 %d 封已被刪除的信件?"
+
+#: mx.c:914
+#, c-format
+msgid "Moving read messages to %s..."
+msgstr "正在搬移已經讀取的信件到 %s …"
+
+#: mx.c:973 mx.c:1137
+msgid "Mailbox is unchanged."
+msgstr "信箱沒有變動。"
+
+#: mx.c:1009
+#, c-format
+msgid "%d kept, %d moved, %d deleted."
+msgstr "%d 封信件被保留, %d 封信件被搬移, %d 封信件被刪除。"
+
+#: mx.c:1012 mx.c:1184
+#, c-format
+msgid "%d kept, %d deleted."
+msgstr "%d 封信件被保留, %d 封信件被刪除。"
+
+#: mx.c:1122
+#, c-format
+msgid " Press '%s' to toggle write"
+msgstr " 請按下 '%s' 來切換寫入模式"
+
+#: mx.c:1124
+msgid "Use 'toggle-write' to re-enable write!"
+msgstr "請使用 'toggle-write' 來重新啟動寫入功能!"
+
+#: mx.c:1126
+#, c-format
+msgid "Mailbox is marked unwritable. %s"
+msgstr "信箱被標記成為無法寫入的. %s"
+
+# How to translate?
+#: mx.c:1181
+msgid "Mailbox checkpointed."
+msgstr ""
+
+#: mx.c:1490
+msgid "Can't write message"
+msgstr "無法寫信件"
+
+#: mx.c:1535
+msgid "Integer overflow -- can't allocate memory."
+msgstr ""
+
+#: pager.c:53
+msgid "Not available in this menu."
+msgstr "在這個菜單中沒有這個功能。"
+
+#: pager.c:1446
+msgid "PrevPg"
+msgstr "上一頁"
+
+#: pager.c:1447
+msgid "NextPg"
+msgstr "下一頁"
+
+#: pager.c:1451
+msgid "View Attachm."
+msgstr "顯示附件。"
+
+#: pager.c:1454
+msgid "Next"
+msgstr "下一個"
+
+#. emulate "less -q" and don't go on to the next message.
+#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137
+msgid "Bottom of message is shown."
+msgstr "現正顯示最下面的信件。"
+
+#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885
+msgid "Top of message is shown."
+msgstr "現正顯示最上面的信件。"
+
+#: pager.c:1954
+msgid "Reverse search: "
+msgstr "反向搜尋:"
+
+#: pager.c:1955
+msgid "Search: "
+msgstr "搜尋:"
+
+#: pager.c:2075
+msgid "Help is currently being shown."
+msgstr "現正顯示說明文件。"
+
+#: pager.c:2104
+msgid "No more quoted text."
+msgstr "不能有再多的引言。"
+
+#: pager.c:2117
+msgid "No more unquoted text after quoted text."
+msgstr "在引言後有過多的非引言文字。"
+
+#: parse.c:597
+msgid "multipart message has no boundary parameter!"
+msgstr "多部份郵件沒有分隔的參數!"
+
+#: pattern.c:238
+#, c-format
+msgid "Error in expression: %s"
+msgstr "表達式有錯誤:%s"
+
+#: pattern.c:348
+#, c-format
+msgid "Invalid day of month: %s"
+msgstr "無效的日子:%s"
+
+#: pattern.c:362
+#, c-format
+msgid "Invalid month: %s"
+msgstr "無效的月份:%s"
+
+#. getDate has its own error message, don't overwrite it here
+#: pattern.c:514
+#, c-format
+msgid "Invalid relative date: %s"
+msgstr "無效的相對日期:%s"
+
+#: pattern.c:528
+msgid "error in expression"
+msgstr "表達式有錯誤"
+
+#: pattern.c:734 pattern.c:842
+#, c-format
+msgid "error in pattern at: %s"
+msgstr "在樣式上有錯誤:%s"
+
+#: pattern.c:782
+#, c-format
+msgid "%c: invalid command"
+msgstr "%c:無效的指令"
+
+#: pattern.c:788
+#, c-format
+msgid "%c: not supported in this mode"
+msgstr "%c:在這個模式不支援"
+
+#: pattern.c:801
+msgid "missing parameter"
+msgstr "錯失參數"
+
+#: pattern.c:817
+#, c-format
+msgid "mismatched parenthesis: %s"
+msgstr "不對稱的括弧:%s"
+
+#: pattern.c:849
+msgid "empty pattern"
+msgstr "空的格式"
+
+#: pattern.c:1051
+#, c-format
+msgid "error: unknown op %d (report this error)."
+msgstr "錯誤:不明的 op %d (請回報這個錯誤)。"
+
+#: pattern.c:1120 pattern.c:1251
+msgid "Compiling search pattern..."
+msgstr "編譯搜尋樣式中…"
+
+#: pattern.c:1134
+msgid "Executing command on matching messages..."
+msgstr "正在對符合的郵件執行命令…"
+
+#: pattern.c:1196
+msgid "No messages matched criteria."
+msgstr "沒有郵件符合要求。"
+
+#: pattern.c:1289
+msgid "Search hit bottom without finding match"
+msgstr "已搜尋至結尾,並沒有發現任何符合"
+
+#: pattern.c:1300
+msgid "Search hit top without finding match"
+msgstr "已搜尋至開頭,並沒有發現任何符合"
+
+#: pattern.c:1322
+msgid "Search interrupted."
+msgstr "搜尋已被中斷。"
+
+#: pgp.c:73
+msgid "PGP passphrase forgotten."
+msgstr "已忘記 PGP 通行密碼。"
+
+#: pgp.c:308
+msgid "[-- Error: unable to create PGP subprocess! --]\n"
+msgstr "[-- 錯誤:無法建立 PGP 子程序! --]\n"
+
+#: pgp.c:337 pgp.c:554 pgp.c:755
+msgid ""
+"[-- End of PGP output --]\n"
+"\n"
+msgstr ""
+"[-- PGP 輸出部份結束 --]\n"
+"\n"
+
+#: pgp.c:352
+msgid ""
+"[-- BEGIN PGP MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PGP 信件開始 --]\n"
+"\n"
+
+#: pgp.c:354
+msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- PGP 公共鑰匙區段開始 --]\n"
+
+#: pgp.c:356
+msgid ""
+"[-- BEGIN PGP SIGNED MESSAGE --]\n"
+"\n"
+msgstr ""
+"[-- PGP 簽名的信件開始 --]\n"
+"\n"
+
+#: pgp.c:381
+#, fuzzy
+msgid "[-- END PGP MESSAGE --]\n"
+msgstr ""
+"\n"
+"[-- PGP 信件結束 --]\n"
+
+#: pgp.c:383
+msgid "[-- END PGP PUBLIC KEY BLOCK --]\n"
+msgstr "[-- PGP 公共鑰匙區段結束 --]\n"
+
+#: pgp.c:385
+#, fuzzy
+msgid "[-- END PGP SIGNED MESSAGE --]\n"
+msgstr ""
+"\n"
+"[-- PGP 簽名的信件結束 --]\n"
+
+#: pgp.c:412
+msgid ""
+"[-- Error: could not find beginning of PGP message! --]\n"
+"\n"
+msgstr ""
+"[-- 錯誤:找不到 PGP 信件的開頭! --]\n"
+"\n"
+
+#: pgp.c:662
+#, fuzzy
+msgid "Internal error. Inform <roessler@does-not-exist.org>."
+msgstr "內部錯誤。聯絡 <rosessler@guug.de>。"
+
+#: pgp.c:722
+msgid ""
+"[-- Error: could not create a PGP subprocess! --]\n"
+"\n"
+msgstr ""
+"[-- 錯誤:無法建立 PGP 子程序! --]\n"
+"\n"
+
+#: pgp.c:821
+msgid ""
+"[-- Error: malformed PGP/MIME message! --]\n"
+"\n"
+msgstr ""
+"[-- 錯誤:不正確的 PGP/MIME 信件! --]\n"
+"\n"
+
+#: pgp.c:834
+msgid "[-- Error: could not create temporary file! --]\n"
+msgstr "[-- 錯誤:無法建立暫存檔! --]\n"
+
+#: pgp.c:843
+msgid ""
+"[-- The following data is PGP/MIME encrypted --]\n"
+"\n"
+msgstr ""
+"[-- 下面是 PGP/MIME 加密資料 --]\n"
+"\n"
+
+#: pgp.c:863
+#, fuzzy
+msgid "[-- End of PGP/MIME encrypted data --]\n"
+msgstr ""
+"\n"
+"[-- PGP/MIME 加密資料結束 --]\n"
+
+#: pgp.c:913
+msgid "Can't open PGP subprocess!"
+msgstr "無法開啟 PGP 子程序!"
+
+#: pgp.c:1057
+#, c-format
+msgid "Use keyID = \"%s\" for %s?"
+msgstr "要為 %2$s 使用鑰匙 ID = \"%1$s\"?"
+
+#: pgp.c:1091 smime.c:654 smime.c:781
+#, c-format
+msgid "Enter keyID for %s: "
+msgstr "請輸入 %s 的鑰匙 ID:"
+
+#: pgp.c:1345
+msgid "Can't invoke PGP"
+msgstr "不能執行 PGP"
+
+#: pgpinvoke.c:303
+msgid "Fetching PGP key..."
+msgstr "正在拿取 PGP 鑰匙 …"
+
+#: pgpkey.c:486
+#, fuzzy
+msgid "All matching keys are expired, revoked, or disabled."
+msgstr "所有符合的鑰匙經已過期或取消。"
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:512 smime.c:412
+msgid "Select  "
+msgstr "選擇    "
+
+#. __STRCAT_CHECKED__
+#: pgpkey.c:515
+msgid "Check key  "
+msgstr "檢查鑰匙   "
+
+#: pgpkey.c:528
+#, c-format
+msgid "PGP keys matching <%s>."
+msgstr "PGP 鑰匙符合 <%s>。"
+
+#: pgpkey.c:530
+#, c-format
+msgid "PGP keys matching \"%s\"."
+msgstr "PGP 鑰匙符合 \"%s\"。"
+
+#: pgpkey.c:549 pgpkey.c:741
+msgid "Can't open /dev/null"
+msgstr "無法開啟 /dev/null"
+
+#: pgpkey.c:555 pgpkey.c:735
+msgid "Can't create temporary file"
+msgstr "無法建立暫存檔"
+
+#: pgpkey.c:576
+#, c-format
+msgid "Key ID: 0x%s"
+msgstr "鑰匙 ID:0x%s"
+
+#: pgpkey.c:596
+msgid "This key can't be used: expired/disabled/revoked."
+msgstr "這個鑰匙不能使用:過期/停用/已取消。"
+
+#: pgpkey.c:608
+#, fuzzy
+msgid "ID is expired/disabled/revoked."
+msgstr "這個 ID 已過期/停用/取消。"
+
+#: pgpkey.c:612
+msgid "ID has undefined validity."
+msgstr ""
+
+#: pgpkey.c:615
+#, fuzzy
+msgid "ID is not valid."
+msgstr "這個 ID 不可接受。"
+
+#: pgpkey.c:618
+#, fuzzy
+msgid "ID is only marginally valid."
+msgstr "此 ID 只是勉強可接受。"
+
+#: pgpkey.c:622
+#, c-format
+msgid "%s Do you really want to use the key?"
+msgstr "%s 您真的要使用這個鑰匙?"
+
+#: pgpkey.c:720
+msgid "Please enter the key ID: "
+msgstr "請輸入這把鑰匙的 ID:"
+
+#: pgpkey.c:748
+msgid "Invoking pgp..."
+msgstr "啟動 pgp…"
+
+#: pgpkey.c:773
+#, c-format
+msgid "PGP Key %s."
+msgstr "PGP 鑰匙 %s。"
+
+#: pgpkey.c:835 pgpkey.c:951
+#, c-format
+msgid "Looking for keys matching \"%s\"..."
+msgstr "正找尋匹配 \"%s\" 的鑰匙…"
+
+#: pop.c:86 pop_lib.c:197
+msgid "Command TOP is not supported by server."
+msgstr "伺服器不支援 TOP 指令。"
+
+#: pop.c:113
+msgid "Can't write header to temporary file!"
+msgstr "無法把標頭寫到暫存檔!"
+
+#: pop.c:194 pop_lib.c:199
+msgid "Command UIDL is not supported by server."
+msgstr "伺服器不支援 UIDL 指令。"
+
+#: pop.c:243 pop.c:558
+#, c-format
+msgid "%s is an invalid POP path"
+msgstr ""
+
+#: pop.c:274
+msgid "Fetching list of messages..."
+msgstr "正在拿取信件…"
+
+#: pop.c:411
+msgid "Can't write message to temporary file!"
+msgstr "無法把信件寫到暫存檔!"
+
+#: pop.c:513 pop.c:578
+msgid "Checking for new messages..."
+msgstr "看看有沒有新信件…"
+
+#: pop.c:542
+msgid "POP host is not defined."
+msgstr "POP 主機沒有被定義。"
+
+#: pop.c:606
+msgid "No new mail in POP mailbox."
+msgstr "POP 信箱中沒有新的信件"
+
+#: pop.c:613
+msgid "Delete messages from server?"
+msgstr "刪除伺服器上的信件嗎?"
+
+#: pop.c:615
+#, c-format
+msgid "Reading new messages (%d bytes)..."
+msgstr "讀取新信件中 (%d 個位元組)…"
+
+#: pop.c:657
+msgid "Error while writing mailbox!"
+msgstr "寫入信箱時發生錯誤!"
+
+#: pop.c:661
+#, c-format
+msgid "%s [%d of %d messages read]"
+msgstr "%s [已閱讀 %2d 封信件中的 %1d 封]"
+
+#: pop.c:684 pop_lib.c:356
+msgid "Server closed connection!"
+msgstr "與伺服器的聯結中斷了!"
+
+#: pop_auth.c:89
+msgid "Authenticating (SASL)..."
+msgstr "驗證中 (SASL)…"
+
+#: pop_auth.c:205
+msgid "Authenticating (APOP)..."
+msgstr "驗證中 (APOP)…"
+
+#: pop_auth.c:229
+msgid "APOP authentication failed."
+msgstr "APOP 驗證失敗。"
+
+#: pop_auth.c:264
+msgid "Command USER is not supported by server."
+msgstr "伺服器不支援 USER 指令。"
+
+#: pop_lib.c:195
+msgid "Unable to leave messages on server."
+msgstr "無法把信件留在伺服器上。"
+
+#: pop_lib.c:225
+#, c-format
+msgid "Error connecting to server: %s"
+msgstr "連線到 %s 時失敗"
+
+#: pop_lib.c:370
+msgid "Closing connection to POP server..."
+msgstr "正在關閉與 POP 伺服器的連線…"
+
+#: pop_lib.c:536
+msgid "Verifying message indexes..."
+msgstr "正在檢查信件的指引 …"
+
+#: pop_lib.c:560
+msgid "Connection lost. Reconnect to POP server?"
+msgstr "連線中斷。再與 POP 伺服器連線嗎?"
+
+#: postpone.c:163
+msgid "Postponed Messages"
+msgstr "信件已經被延遲寄出"
+
+#: postpone.c:243 postpone.c:252
+msgid "No postponed messages."
+msgstr "沒有被延遲寄出的信件。"
+
+#: postpone.c:438 postpone.c:459 postpone.c:488
+msgid "Illegal PGP header"
+msgstr "不合規定的 PGP 標頭"
+
+#: postpone.c:479
+#, fuzzy
+msgid "Illegal S/MIME header"
+msgstr "不合規定的 PGP 標頭"
+
+#: postpone.c:554
+#, fuzzy
+msgid "Decryption failed."
+msgstr "登入失敗。"
+
+#: query.c:46
+msgid "New Query"
+msgstr "新的查詢"
+
+#: query.c:47
+msgid "Make Alias"
+msgstr "製作別名"
+
+#: query.c:48
+msgid "Search"
+msgstr "搜尋"
+
+#: query.c:95
+msgid "Waiting for response..."
+msgstr "等待回應中…"
+
+#: query.c:231 query.c:259
+msgid "Query command not defined."
+msgstr "查詢指令尚未定義。"
+
+#: query.c:286
+msgid "Query"
+msgstr "查詢"
+
+#. Prompt for Query
+#: query.c:299 query.c:324
+msgid "Query: "
+msgstr "查詢:"
+
+#: query.c:307 query.c:333
+#, c-format
+msgid "Query '%s'"
+msgstr "查詢 '%s'"
+
+#: recvattach.c:52
+msgid "Pipe"
+msgstr "管線"
+
+#: recvattach.c:53
+msgid "Print"
+msgstr "顯示"
+
+#: recvattach.c:431
+msgid "Saving..."
+msgstr "儲存中…"
+
+#: recvattach.c:434 recvattach.c:523
+msgid "Attachment saved."
+msgstr "附件已被儲存。"
+
+#: recvattach.c:535
+#, c-format
+msgid "WARNING!  You are about to overwrite %s, continue?"
+msgstr "警告! 您正在覆蓋 %s, 是否要繼續?"
+
+#: recvattach.c:553
+msgid "Attachment filtered."
+msgstr "附件被過濾掉。"
+
+#: recvattach.c:620
+msgid "Filter through: "
+msgstr "經過過濾:"
+
+#: recvattach.c:620
+msgid "Pipe to: "
+msgstr "導引至:"
+
+#: recvattach.c:655
+#, c-format
+msgid "I dont know how to print %s attachments!"
+msgstr "我不知道要怎麼列印 %s 附件!"
+
+#: recvattach.c:720
+msgid "Print tagged attachment(s)?"
+msgstr "是否要列印標記起來的附件?"
+
+#: recvattach.c:720
+msgid "Print attachment?"
+msgstr "是否要列印附件?"
+
+#: recvattach.c:938
+#, fuzzy
+msgid "Can't decrypt encrypted message!"
+msgstr "找不到已標記的訊息"
+
+#: recvattach.c:951
+msgid "Attachments"
+msgstr "附件"
+
+#: recvattach.c:987
+msgid "There are no subparts to show!"
+msgstr "沒有部件!"
+
+#: recvattach.c:1048
+msgid "Can't delete attachment from POP server."
+msgstr "無法從 POP 伺服器刪除附件。"
+
+#: recvattach.c:1056
+#, fuzzy
+msgid "Deletion of attachments from encrypted messages is unsupported."
+msgstr "未支援刪除 PGP 信件所附帶的附件。"
+
+#: recvattach.c:1075 recvattach.c:1092
+msgid "Only deletion of multipart attachments is supported."
+msgstr "只支援刪除多重附件"
+
+#: recvcmd.c:43
+msgid "You may only bounce message/rfc822 parts."
+msgstr "您只能直接傳送 message/rfc822 的部分。"
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing message!"
+msgstr "寄信途中發生錯誤。"
+
+#: recvcmd.c:213
+#, fuzzy
+msgid "Error bouncing messages!"
+msgstr "寄信途中發生錯誤。"
+
+#: recvcmd.c:413
+#, c-format
+msgid "Can't open temporary file %s."
+msgstr "無法開啟暫存檔 %s"
+
+#: recvcmd.c:444
+msgid "Forward as attachments?"
+msgstr "利用附件形式來轉寄?"
+
+#: recvcmd.c:458
+msgid "Can't decode all tagged attachments.  MIME-forward the others?"
+msgstr "未能把所有已標簽的附件解碼。要用 MIME 轉寄其它的嗎?"
+
+#: recvcmd.c:583
+msgid "Forward MIME encapsulated?"
+msgstr "用 MIME 的方式來轉寄?"
+
+#: recvcmd.c:591 recvcmd.c:841
+#, c-format
+msgid "Can't create %s."
+msgstr "無法建立 %s."
+
+#: recvcmd.c:724
+msgid "Can't find any tagged messages."
+msgstr "找不到已標記的訊息"
+
+#: recvcmd.c:745 send.c:707
+msgid "No mailing lists found!"
+msgstr "沒有找到郵寄論壇!"
+
+#: recvcmd.c:820
+msgid "Can't decode all tagged attachments.  MIME-encapsulate the others?"
+msgstr "未能把所有已標簽的附件解碼。要用 MIME 包封其它的嗎?"
+
+#: remailer.c:480
+msgid "Append"
+msgstr "加上"
+
+#: remailer.c:481
+msgid "Insert"
+msgstr "加入"
+
+#: remailer.c:482
+msgid "Delete"
+msgstr "刪除"
+
+#: remailer.c:484
+msgid "OK"
+msgstr "OK"
+
+#: remailer.c:512
+msgid "Can't get mixmaster's type2.list!"
+msgstr "拿不到 mixmaster 的 type2.list!"
+
+#: remailer.c:538
+msgid "Select a remailer chain."
+msgstr "選擇一個郵件轉接器的鏈結"
+
+#: remailer.c:598
+#, c-format
+msgid "Error: %s can't be used as the final remailer of a chain."
+msgstr "錯誤:%s 不能用作鏈結的最後一個郵件轉接器"
+
+#: remailer.c:628
+#, c-format
+msgid "Mixmaster chains are limited to %d elements."
+msgstr "Mixmaster 鏈結最多為 %d 個元件"
+
+#: remailer.c:651
+msgid "The remailer chain is already empty."
+msgstr "郵件轉接器的鏈結已沒有東西了。"
+
+#: remailer.c:661
+msgid "You already have the first chain element selected."
+msgstr "你已經選擇了鏈結的第一個元件。"
+
+#: remailer.c:671
+msgid "You already have the last chain element selected."
+msgstr "你已經選擇了鏈結的最後一個元件。"
+
+#: remailer.c:710
+msgid "Mixmaster doesn't accept Cc or Bcc headers."
+msgstr "Mixmaster 不接受 Cc 和 Bcc 的標頭。"
+
+#: remailer.c:734
+msgid ""
+"Please set the hostname variable to a proper value when using mixmaster!"
+msgstr "使用 mixmaster 時請先設定好 hostname 變數!"
+
+#: remailer.c:768
+#, c-format
+msgid "Error sending message, child exited %d.\n"
+msgstr "寄送訊息時出現錯誤,子程序結束 %d。\n"
+
+#: remailer.c:772
+msgid "Error sending message."
+msgstr "寄信途中發生錯誤。"
+
+#: rfc1524.c:159
+#, c-format
+msgid "Improperly formated entry for type %s in \"%s\" line %d"
+msgstr "在 \"%2$s\" 的第 %3$d 行發現類別 %1$s 為錯誤的格式紀錄"
+
+#: rfc1524.c:391
+msgid "No mailcap path specified"
+msgstr "沒有指定 mailcap 路徑"
+
+#: rfc1524.c:419
+#, c-format
+msgid "mailcap entry for type %s not found"
+msgstr "沒有發現類型 %s 的 mailcap 紀錄"
+
+#: score.c:71
+msgid "score: too few arguments"
+msgstr "分數:太少的引數"
+
+#: score.c:80
+msgid "score: too many arguments"
+msgstr "分數:太多的引數"
+
+#: send.c:247
+msgid "No subject, abort?"
+msgstr "沒有標題,要不要中斷?"
+
+#: send.c:249
+msgid "No subject, aborting."
+msgstr "沒有標題,正在中斷中。"
+
+#. There are quite a few mailing lists which set the Reply-To:
+#. * header field to the list address, which makes it quite impossible
+#. * to send a message to only the sender of the message.  This
+#. * provides a way to do that.
+#.
+#: send.c:483
+#, c-format
+msgid "Reply to %s%s?"
+msgstr "要回覆給 %s%s?"
+
+#: send.c:517
+#, c-format
+msgid "Follow-up to %s%s?"
+msgstr "以後的回覆都寄至 %s%s?"
+
+#. This could happen if the user tagged some messages and then did
+#. * a limit such that none of the tagged message are visible.
+#.
+#: send.c:682
+msgid "No tagged messages are visible!"
+msgstr "沒有被標記了的信件在顯示!"
+
+#: send.c:733
+msgid "Include message in reply?"
+msgstr "回信時是否要包含原本的信件內容?"
+
+#: send.c:738
+msgid "Including quoted message..."
+msgstr "正引入引言部分…"
+
+#: send.c:748
+msgid "Could not include all requested messages!"
+msgstr "無法包含所有要求的信件!"
+
+#: send.c:762
+msgid "Forward as attachment?"
+msgstr "利用附件形式來轉寄?"
+
+#: send.c:766
+msgid "Preparing forwarded message..."
+msgstr "準備轉寄信件…"
+
+#. If the user is composing a new message, check to see if there
+#. * are any postponed messages first.
+#.
+#: send.c:1062
+msgid "Recall postponed message?"
+msgstr "要叫出被延遲的信件?"
+
+#: send.c:1336
+#, fuzzy
+msgid "Edit forwarded message?"
+msgstr "準備轉寄信件…"
+
+#: send.c:1359
+msgid "Abort unmodified message?"
+msgstr "是否要中斷未修改過的信件?"
+
+#: send.c:1361
+msgid "Aborted unmodified message."
+msgstr "中斷沒有修改過的信件"
+
+#. abort
+#: send.c:1403
+msgid "Mail not sent."
+msgstr "信件沒有寄出。"
+
+#: send.c:1430
+msgid "Message postponed."
+msgstr "信件被延遲寄出。"
+
+#: send.c:1439
+msgid "No recipients are specified!"
+msgstr "沒有指定接受者!"
+
+#: send.c:1444
+msgid "No recipients were specified."
+msgstr "沒有指定接受者。"
+
+#: send.c:1460
+msgid "No subject, abort sending?"
+msgstr "沒有信件標題,要中斷寄信的工作?"
+
+#: send.c:1464
+msgid "No subject specified."
+msgstr "沒有指定標題。"
+
+#: send.c:1526
+msgid "Sending message..."
+msgstr "正在寄出信件…"
+
+#: send.c:1667
+msgid "Could not send the message."
+msgstr "無法寄出信件。"
+
+#: send.c:1672
+msgid "Mail sent."
+msgstr "信件已經寄出。"
+
+#: send.c:1672
+msgid "Sending in background."
+msgstr "正在背景作業中傳送。"
+
+#: sendlib.c:464
+msgid "No boundary parameter found! [report this error]"
+msgstr "沒有發現分界變數![回報錯誤]"
+
+#: sendlib.c:494
+#, c-format
+msgid "%s no longer exists!"
+msgstr "%s 已經不存在!"
+
+#: sendlib.c:916
+#, fuzzy, c-format
+msgid "%s isn't a regular file."
+msgstr "%s 不是信箱。"
+
+#: sendlib.c:1085
+#, c-format
+msgid "Could not open %s"
+msgstr "無法開啟 %s"
+
+#: sendlib.c:2053
+#, c-format
+msgid "Error sending message, child exited %d (%s)."
+msgstr "寄送訊息出現錯誤,子程序已結束 %d (%s)。"
+
+#: sendlib.c:2059
+msgid "Output of the delivery process"
+msgstr "Delivery process 的輸出"
+
+#: sendlib.c:2263
+#, c-format
+msgid "Bad IDN %s while preparing resent-from."
+msgstr ""
+
+#: signal.c:39
+#, c-format
+msgid "%s...  Exiting.\n"
+msgstr "%s… 正在離開。\n"
+
+#: signal.c:42 signal.c:45
+#, c-format
+msgid "Caught %s...  Exiting.\n"
+msgstr "捕抓到 %s… 正在離開。\n"
+
+#: signal.c:47
+#, c-format
+msgid "Caught signal %d...  Exiting.\n"
+msgstr "捕抓到 signal %d… 正在離開.\n"
+
+#: smime.c:300
+msgid "Trusted   "
+msgstr ""
+
+#: smime.c:303
+msgid "Verified  "
+msgstr ""
+
+#: smime.c:306
+msgid "Unverified"
+msgstr ""
+
+#: smime.c:309
+#, fuzzy
+msgid "Expired   "
+msgstr "離開  "
+
+#: smime.c:312
+msgid "Revoked   "
+msgstr ""
+
+#: smime.c:315
+#, fuzzy
+msgid "Invalid   "
+msgstr "無效的月份:%s"
+
+#: smime.c:318
+#, fuzzy
+msgid "Unknown   "
+msgstr "不清楚"
+
+#: smime.c:347
+#, fuzzy
+msgid "Enter keyID: "
+msgstr "請輸入 %s 的鑰匙 ID:"
+
+#: smime.c:370
+#, fuzzy, c-format
+msgid "S/MIME certificates matching \"%s\"."
+msgstr "PGP 鑰匙符合 \"%s\"。"
+
+#: smime.c:519 smime.c:588 smime.c:609
+#, c-format
+msgid "ID %s is unverified. Do you want to use it for %s ?"
+msgstr ""
+
+#: smime.c:523 smime.c:592
+#, fuzzy, c-format
+msgid "Use (untrusted!) ID %s for %s ?"
+msgstr "要為 %2$s 使用鑰匙 ID = \"%1$s\"?"
+
+#: smime.c:526 smime.c:595
+#, fuzzy, c-format
+msgid "Use ID %s for %s ?"
+msgstr "要為 %2$s 使用鑰匙 ID = \"%1$s\"?"
+
+#: smime.c:621
+#, c-format
+msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)"
+msgstr ""
+
+#: smime.c:787
+#, c-format
+msgid "No (valid) certificate found for %s."
+msgstr ""
+
+#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119
+#, fuzzy
+msgid "Error: unable to create OpenSSL subprocess!"
+msgstr "[-- 錯誤:無法建立 PGP 子程序! --]\n"
+
+#: smime.c:1197
+#, fuzzy
+msgid "no certfile"
+msgstr "無法建立過濾器"
+
+#: smime.c:1200
+#, fuzzy
+msgid "no mbox"
+msgstr "(沒有信箱)"
+
+#. fatal error while trying to encrypt message
+#: smime.c:1343
+msgid "No output from OpenSSL.."
+msgstr ""
+
+#: smime.c:1381
+#, fuzzy
+msgid "Warning: Intermediate certificate not found."
+msgstr "警告:未能儲存驗証"
+
+#: smime.c:1426
+#, fuzzy
+msgid "Can't open OpenSSL subprocess!"
+msgstr "無法開啟 PGP 子程序!"
+
+#: smime.c:1464
+msgid "No output from OpenSSL..."
+msgstr ""
+
+#: smime.c:1629 smime.c:1751
+#, fuzzy
+msgid ""
+"[-- End of OpenSSL output --]\n"
+"\n"
+msgstr ""
+"[-- PGP 輸出部份結束 --]\n"
+"\n"
+
+#: smime.c:1712 smime.c:1722
+#, fuzzy
+msgid "[-- Error: unable to create OpenSSL subprocess! --]\n"
+msgstr "[-- 錯誤:無法建立 PGP 子程序! --]\n"
+
+#: smime.c:1755
+#, fuzzy
+msgid "[-- The following data is S/MIME encrypted --]\n"
+msgstr ""
+"[-- 下面是 PGP/MIME 加密資料 --]\n"
+"\n"
+
+#: smime.c:1758
+#, fuzzy
+msgid "[-- The following data is S/MIME signed --]\n"
+msgstr ""
+"[-- 以下的資料已被簽署 --]\n"
+"\n"
+
+#: smime.c:1822
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME encrypted data. --]\n"
+msgstr ""
+"\n"
+"[-- PGP/MIME 加密資料結束 --]\n"
+
+#: smime.c:1824
+#, fuzzy
+msgid ""
+"\n"
+"[-- End of S/MIME signed data. --]\n"
+msgstr ""
+"\n"
+"[-- 簽署的資料結束 --]\n"
+
+#: sort.c:202
+msgid "Sorting mailbox..."
+msgstr "信箱排序中…"
+
+#: sort.c:239
+msgid "Could not find sorting function! [report this bug]"
+msgstr "找不到排序的功能![請回報這個問題]"
+
+#: status.c:102
+msgid "(no mailbox)"
+msgstr "(沒有信箱)"
+
+#: thread.c:1081
+#, fuzzy
+msgid "Parent message is not visible in this limited view."
+msgstr "在限制閱覽模式下無法顯示主信件。"
+
+#: thread.c:1087
+msgid "Parent message is not available."
+msgstr "主信件不存在。"
+
+#, fuzzy
+#~ msgid "Invoking OpenSSL..."
+#~ msgstr "啟動 pgp…"
+
+#~ msgid "Bounce message to %s...?"
+#~ msgstr "把郵件直接傳送至 %s…?"
+
+#~ msgid "Bounce messages to %s...?"
+#~ msgstr "把郵件直接傳送至 %s…?"
+
+#, fuzzy
+#~ msgid "ewsabf"
+#~ msgstr "12345"
+
+#, fuzzy
+#~ msgid "Certificate *NOT* added."
+#~ msgstr "驗証已儲存"
+
+#~ msgid "This ID's validity level is undefined."
+#~ msgstr "這個 ID 的可接受程度不明。"
+
+#~ msgid "Decode-save"
+#~ msgstr "解碼並儲存"
+
+#~ msgid "Decode-copy"
+#~ msgstr "解碼並拷貝"
+
+#~ msgid "Decrypt-save"
+#~ msgstr "解密並儲存"
+
+#~ msgid "Decrypt-copy"
+#~ msgstr "解密並拷貝"
+
+#~ msgid "Copy"
+#~ msgstr "拷貝"
+
+#~ msgid "%s [%s]\n"
+#~ msgstr "%s 【%s】\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "[-- End of PGP output --]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "[-- PGP 輸出的資料結束 --]\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "Can't stat %s."
+#~ msgstr "無法讀取:%s"
+
+#~ msgid "MIC algorithm: "
+#~ msgstr "MIC 演算法:"
+
+#~ msgid "This doesn't make sense if you don't want to sign the message."
+#~ msgstr "如果您不想把信件簽名,這樣做就沒有什麼意思啦。"
+
+#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160"
+#~ msgstr "不明的 MIC 演算法。有效的如下: pgp-md5, pgp-sha1, pgp-rmd160"
+
+#~ msgid "%s: no such command"
+#~ msgstr "%s:無此指令"
+
+#~ msgid "Authentication method is unknown."
+#~ msgstr "不明的驗證方法。"
+
+#~ msgid ""
+#~ "\n"
+#~ "SHA1 implementation Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft."
+#~ "com>\n"
+#~ "\n"
+#~ "    Redistribution and use in source and binary forms, with or without\n"
+#~ "    modification, are permitted under certain conditions.\n"
+#~ "\n"
+#~ "    The SHA1 implementation comes AS IS, and ANY EXPRESS OR IMPLIED\n"
+#~ "    WARRANTIES, including, but not limited to, the implied warranties of\n"
+#~ "    merchantability and fitness for a particular purpose ARE DISCLAIMED.\n"
+#~ "\n"
+#~ "    You should have received a copy of the full distribution terms\n"
+#~ "    along with this program; if not, write to the program's developers.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "SHA1 implementation 版權所有 (C) 1995-7 Eric A. Young <eay@cryptsoft."
+#~ "com>\n"
+#~ "\n"
+#~ "     重複散布並使用原始程式碼和編譯過的程式碼,不管有否經過修改,\n"
+#~ "     在某些條件下是許可的。\n"
+#~ "\n"
+#~ "     SHA1 程序不附帶任何擔保,不論係明示還是暗示,包括但不限於銷售性\n"
+#~ "     和適於特定目的之暗示擔保。\n"
+#~ "\n"
+#~ "     您應該收到一份此應用程式的完整的散布條文;如果沒有,請寫信給\n"
+#~ "     應用程式的開發人員.\n"
+
+#~ msgid "POP Username: "
+#~ msgstr "POP 用戶名稱:"
+
+#~ msgid "Reading new message (%d bytes)..."
+#~ msgstr "讀取新信件中 (%d 歌位元組)…"
+
+#~ msgid "Error reading message!"
+#~ msgstr "讀取信件時發生錯誤!"
+
+#~ msgid "%s [%d message read]"
+#~ msgstr "%s [已閱讀 %d 封信件]"
+
+#~ msgid "Creating mailboxes is not yet supported."
+#~ msgstr "未支援製造郵箱。"
+
+#~ msgid "We can't currently handle utf-8 at this point."
+#~ msgstr "我們還未能處理 utf-8。"
+
+#~ msgid "Can't open %s: %s."
+#~ msgstr "無法開啟 %s:%s."
+
+#~ msgid "Error while recoding %s. Leave it unchanged."
+#~ msgstr "當轉換編碼 %s 時發生錯誤,因此不會做任何改變。"
+
+#~ msgid "Error while recoding %s. See %s for recovering your data."
+#~ msgstr "當轉換編碼 %s 發生錯誤。看 %s 來修復你的資料。"
+
+#~ msgid "Can't change character set for non-text attachments!"
+#~ msgstr "非文字的附件是不能改變字符集的!"
+
+#~ msgid "Enter character set: "
+#~ msgstr "請輸入字符集:"
+
+#~ msgid "UTF-8 encoding attachments has not yet been implemented."
+#~ msgstr "還未支援 UTF-8 編碼的附件。"
+
+#~ msgid "Compose"
+#~ msgstr "寫信"
+
+#~ msgid "We currently can't encode to utf-8."
+#~ msgstr "我們現在還未能重新編碼至 utf-8。"
+
+#~ msgid "Recoding successful."
+#~ msgstr "重新編碼成功。"
+
+#~ msgid "[-- Error: unexpected end of file! --]\n"
+#~ msgstr "[-- 錯誤:突發的檔尾! --]\n"
+
+#~ msgid "CRAM key for %s@%s: "
+#~ msgstr "%s@%s 的 CRAM 鑰匙"
+
+#~ msgid "Skipping CRAM-MD5 authentication."
+#~ msgstr "掠過 CRAM-MD5 驗證"
+
+#~ msgid "Reopening mailbox... %s"
+#~ msgstr "重新開啟信箱中… %s"
+
+#~ msgid "Closing mailbox..."
+#~ msgstr "關閉信箱中…"
+
+#~ msgid "Sending APPEND command ..."
+#~ msgstr "正在送出 APPEND 命令…"
+
+#~ msgid "change an attachment's character set"
+#~ msgstr "改變附件的字符集"
+
+#~ msgid "recode this attachment to/from the local charset"
+#~ msgstr "重新將附件編碼至本地字符集,或由本地字符集重新編碼"
+
+#~ msgid "%d kept."
+#~ msgstr "%d 保留了。"
+
+#~ msgid "POP Password: "
+#~ msgstr "POP 密碼:"
+
+#~ msgid "No POP username is defined."
+#~ msgstr "沒有被定義的 POP 使用者名稱。"
+
+#~ msgid "Attachment saved"
+#~ msgstr "附件已被儲存。"
+
+#~ msgid "move to the last undelete message"
+#~ msgstr "移動到最後一封未刪除的信件"
+
+#~ msgid "return to the main-menu"
+#~ msgstr "回到主選單"
+
+#~ msgid "ignoring empty header field: %s"
+#~ msgstr "不理會空的標頭欄位:%s"
+
+#, fuzzy
+#~ msgid "Recoding only affetcs text attachments."
+#~ msgstr "只重新編碼受影響的文字附件"
+
+#, fuzzy
+#~ msgid "display message with full headers"
+#~ msgstr "編輯信件的標頭"
+
+#, fuzzy
+#~ msgid "PGP keys matching "
+#~ msgstr "PGP 鑰匙符合 <%s>。"
+
+#, fuzzy
+#~ msgid "This operation is not currently supported for PGP messages."
+#~ msgstr "暫不支援瀏覽 IMAP 目錄"
+
+#~ msgid "imap_error(): unexpected response in %s: %s\n"
+#~ msgstr "imap_error():%s 的意外回應:%s\n"
+
+#~ msgid "Can't open your secret key ring!"
+#~ msgstr "無法開啟您的祕密鑰匙環!"
+
+#~ msgid "An unkown PGP version was defined for signing."
+#~ msgstr "定義了一個不明的 PGP 版本來簽名"
+
+#~ msgid "===== Attachments ====="
+#~ msgstr "===== 附件 ====="
+
+#~ msgid "Sending CREATE command ..."
+#~ msgstr "正在送出 CREATE 命令…"
+
+#~ msgid "Unknown PGP version \"%s\"."
+#~ msgstr "不明的 PGP 版本 \"%s\"。"
+
+#~ msgid ""
+#~ "[-- Error: this message does not comply with the PGP/MIME specification! "
+#~ "--]\n"
+#~ "\n"
+#~ msgstr ""
+#~ "[-- 錯誤:這封信件不符合 PGP/MIME 的規格! --]\n"
+#~ "\n"
+
+#~ msgid "reserved"
+#~ msgstr "保留的"
+
+#~ msgid "Encrypted Session Key"
+#~ msgstr "加密的鑰匙"
+
+#~ msgid "Signature Packet"
+#~ msgstr "簽名封包"
+
+#~ msgid "Conventionally Encrypted Session Key Packet"
+#~ msgstr "一般加密鑰匙封包"
+
+#~ msgid "One-Pass Signature Packet"
+#~ msgstr "單一通道的簽名封包"
+
+#~ msgid "Secret Key Packet"
+#~ msgstr "秘密鑰匙封包"
+
+#~ msgid "Public Key Packet"
+#~ msgstr "公共鑰匙封包"
+
+#~ msgid "Secret Subkey Packet"
+#~ msgstr "秘密次鑰匙封包"
+
+#~ msgid "Compressed Data Packet"
+#~ msgstr "壓縮資料封包"
+
+#~ msgid "Symmetrically Encrypted Data Packet"
+#~ msgstr "對稱加密資料封包"
+
+#~ msgid "Marker Packet"
+#~ msgstr "記號封包"
+
+#~ msgid "Literal Data Packet"
+#~ msgstr "文字資料封包"
+
+#~ msgid "Trust Packet"
+#~ msgstr "被信托封包"
+
+#~ msgid "Name Packet"
+#~ msgstr "名稱封包"
+
+#~ msgid "Subkey Packet"
+#~ msgstr "次鑰匙 (subkey) 封包"
+
+#~ msgid "Reserved"
+#~ msgstr "保留的"
+
+#~ msgid "Comment Packet"
+#~ msgstr "注解封包"
+
+#~ msgid "Message edited. Really send?"
+#~ msgstr "信件已經編輯過。確定要寄出?"
+
+#~ msgid "Saved output of child process to %s.\n"
+#~ msgstr "輸出子程序儲存至 %s.\n"
diff --git a/pop.c b/pop.c
new file mode 100644 (file)
index 0000000..8492ac2
--- /dev/null
+++ b/pop.c
@@ -0,0 +1,687 @@
+/*
+ * Copyright (C) 2000-2002 Vsevolod Volkov <vvv@mutt.org.ua>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mx.h"
+#include "pop.h"
+#include "mutt_crypt.h"
+
+#include <string.h>
+#include <unistd.h>
+
+/* write line to file */
+static int fetch_message (char *line, void *file)
+{
+  FILE *f = (FILE *) file;
+
+  fputs (line, f);
+  if (fputc ('\n', f) == EOF)
+    return -1;
+
+  return 0;
+}
+
+/*
+ * Read header
+ * returns:
+ *  0 on success
+ * -1 - conection lost,
+ * -2 - invalid command or execution error,
+ * -3 - error writing to tempfile
+ */
+static int pop_read_header (POP_DATA *pop_data, HEADER *h)
+{
+  FILE *f;
+  int ret, index;
+  long length;
+  char buf[LONG_STRING];
+  char tempfile[_POSIX_PATH_MAX];
+
+  mutt_mktemp (tempfile);
+  if (!(f = safe_fopen (tempfile, "w+")))
+  {
+    mutt_perror (tempfile);
+    return -3;
+  }
+
+  snprintf (buf, sizeof (buf), "LIST %d\r\n", h->refno);
+  ret = pop_query (pop_data, buf, sizeof (buf));
+  if (ret == 0)
+  {
+    sscanf (buf, "+OK %d %ld", &index, &length);
+
+    snprintf (buf, sizeof (buf), "TOP %d 0\r\n", h->refno);
+    ret = pop_fetch_data (pop_data, buf, NULL, fetch_message, f);
+
+    if (pop_data->cmd_top == 2)
+    {
+      if (ret == 0)
+      {
+       pop_data->cmd_top = 1;
+
+       dprint (1, (debugfile, "pop_read_header: set TOP capability\n"));
+      }
+
+      if (ret == -2)
+      {
+       pop_data->cmd_top = 0;
+
+       dprint (1, (debugfile, "pop_read_header: unset TOP capability\n"));
+       snprintf (pop_data->err_msg, sizeof (pop_data->err_msg),
+               _("Command TOP is not supported by server."));
+      }
+    }
+  }
+
+  switch (ret)
+  {
+    case 0:
+    {
+      rewind (f);
+      h->env = mutt_read_rfc822_header (f, h, 0, 0);
+      h->content->length = length - h->content->offset + 1;
+      rewind (f);
+      while (!feof (f))
+      {
+       h->content->length--;
+       fgets (buf, sizeof (buf), f);
+      }
+      break;
+    }
+    case -2:
+    {
+      mutt_error ("%s", pop_data->err_msg);
+      break;
+    }
+    case -3:
+    {
+      mutt_error _("Can't write header to temporary file!");
+      break;
+    }
+  }
+
+  fclose (f);
+  unlink (tempfile);
+  return ret;
+}
+
+/* parse UIDL */
+static int fetch_uidl (char *line, void *data)
+{
+  int i, index;
+  CONTEXT *ctx = (CONTEXT *)data;
+  POP_DATA *pop_data = (POP_DATA *)ctx->data;
+
+  sscanf (line, "%d %s", &index, line);
+  for (i = 0; i < ctx->msgcount; i++)
+    if (!mutt_strcmp (line, ctx->hdrs[i]->data))
+      break;
+
+  if (i == ctx->msgcount)
+  {
+    dprint (1, (debugfile, "pop_fetch_headers: new header %d %s\n", index, line));
+
+    if (i >= ctx->hdrmax)
+      mx_alloc_memory(ctx);
+
+    ctx->msgcount++;
+    ctx->hdrs[i] = mutt_new_header ();
+    ctx->hdrs[i]->data = safe_strdup (line);
+  }
+  else if (ctx->hdrs[i]->index != index - 1)
+    pop_data->clear_cache = 1;
+
+  ctx->hdrs[i]->refno = index;
+  ctx->hdrs[i]->index = index - 1;
+
+  return 0;
+}
+
+/*
+ * Read headers
+ * returns:
+ *  0 on success
+ * -1 - conection lost,
+ * -2 - invalid command or execution error,
+ * -3 - error writing to tempfile
+ */
+static int pop_fetch_headers (CONTEXT *ctx)
+{
+  int i, ret, old_count, new_count;
+  POP_DATA *pop_data = (POP_DATA *)ctx->data;
+
+  time (&pop_data->check_time);
+  pop_data->clear_cache = 0;
+
+  for (i = 0; i < ctx->msgcount; i++)
+    ctx->hdrs[i]->refno = -1;
+
+  old_count = ctx->msgcount;
+  ret = pop_fetch_data (pop_data, "UIDL\r\n", NULL, fetch_uidl, ctx);
+  new_count = ctx->msgcount;
+  ctx->msgcount = old_count;
+
+  if (pop_data->cmd_uidl == 2)
+  {
+    if (ret == 0)
+    {
+      pop_data->cmd_uidl = 1;
+
+      dprint (1, (debugfile, "pop_fetch_headers: set UIDL capability\n"));
+    }
+
+    if (ret == -2 && pop_data->cmd_uidl == 2)
+    {
+      pop_data->cmd_uidl = 0;
+
+      dprint (1, (debugfile, "pop_fetch_headers: unset UIDL capability\n"));
+      snprintf (pop_data->err_msg, sizeof (pop_data->err_msg),
+             _("Command UIDL is not supported by server."));
+    }
+  }
+
+  if (ret == 0)
+  {
+    for (i = 0; i < old_count; i++)
+      if (ctx->hdrs[i]->refno == -1)
+       ctx->hdrs[i]->deleted = 1;
+
+    for (i = old_count; i < new_count; i++)
+    {
+      mutt_message (_("Fetching message headers... [%d/%d]"),
+                   i + 1 - old_count, new_count - old_count);
+
+      ret = pop_read_header (pop_data, ctx->hdrs[i]);
+      if (ret < 0)
+       break;
+
+      ctx->msgcount++;
+    }
+
+    if (i > old_count)
+      mx_update_context (ctx, i - old_count);
+  }
+
+  if (ret < 0)
+  {
+    for (i = ctx->msgcount; i < new_count; i++)
+      mutt_free_header (&ctx->hdrs[i]);
+    return ret;
+  }
+
+  mutt_clear_error ();
+  return (new_count - old_count);
+}
+
+/* open POP mailbox - fetch only headers */
+int pop_open_mailbox (CONTEXT *ctx)
+{
+  int ret;
+  char buf[LONG_STRING];
+  CONNECTION *conn;
+  ACCOUNT acct;
+  POP_DATA *pop_data;
+  ciss_url_t url;
+
+  if (pop_parse_path (ctx->path, &acct))
+  {
+    mutt_error (_("%s is an invalid POP path"), ctx->path);
+    mutt_sleep (2);
+    return -1;
+  }
+
+  mutt_account_tourl (&acct, &url);
+  url.path = NULL;
+  url_ciss_tostring (&url, buf, sizeof (buf), 0);
+  conn = mutt_conn_find (NULL, &acct);
+  if (!conn)
+    return -1;
+
+  FREE (&ctx->path);
+  ctx->path = safe_strdup (buf);
+
+  pop_data = safe_calloc (1, sizeof (POP_DATA));
+  pop_data->conn = conn;
+  ctx->data = pop_data;
+
+  if (pop_open_connection (pop_data) < 0)
+    return -1;
+
+  conn->data = pop_data;
+
+  FOREVER
+  {
+    if (pop_reconnect (ctx) < 0)
+      return -1;
+
+    ctx->size = pop_data->size;
+
+    mutt_message _("Fetching list of messages...");
+
+    ret = pop_fetch_headers (ctx);
+
+    if (ret >= 0)
+      return 0;
+
+    if (ret < -1)
+    {
+      mutt_sleep (2);
+      return -1;
+    }
+  }
+}
+
+/* delete all cached messages */
+static void pop_clear_cache (POP_DATA *pop_data)
+{
+  int i;
+
+  if (!pop_data->clear_cache)
+    return;
+
+  dprint (1, (debugfile, "pop_clear_cache: delete cached messages\n"));
+
+  for (i = 0; i < POP_CACHE_LEN; i++)
+  {
+    if (pop_data->cache[i].path)
+    {
+      unlink (pop_data->cache[i].path);
+      FREE (&pop_data->cache[i].path);
+    }
+  }
+}
+
+/* close POP mailbox */
+void pop_close_mailbox (CONTEXT *ctx)
+{
+  POP_DATA *pop_data = (POP_DATA *)ctx->data;
+
+  if (!pop_data)
+    return;
+
+  pop_logout (ctx);
+
+  if (pop_data->status != POP_NONE)
+    mutt_socket_close (pop_data->conn);
+
+  pop_data->status = POP_NONE;
+
+  pop_data->clear_cache = 1;
+  pop_clear_cache (pop_data);
+
+  if (!pop_data->conn->data)
+    mutt_socket_free (pop_data->conn);
+
+  return;
+}
+
+/* fetch message from POP server */
+int pop_fetch_message (MESSAGE* msg, CONTEXT* ctx, int msgno)
+{
+  int ret;
+  void *uidl;
+  char buf[LONG_STRING];
+  char path[_POSIX_PATH_MAX];
+  char *m = _("Fetching message...");
+  POP_DATA *pop_data = (POP_DATA *)ctx->data;
+  POP_CACHE *cache;
+  HEADER *h = ctx->hdrs[msgno];
+
+  /* see if we already have the message in our cache */
+  cache = &pop_data->cache[h->index % POP_CACHE_LEN];
+
+  if (cache->path)
+  {
+    if (cache->index == h->index)
+    {
+      /* yes, so just return a pointer to the message */
+      msg->fp = fopen (cache->path, "r");
+      if (msg->fp)
+       return 0;
+
+      mutt_perror (cache->path);
+      mutt_sleep (2);
+      return -1;
+    }
+    else
+    {
+      /* clear the previous entry */
+      unlink (cache->path);
+      FREE (&cache->path);
+    }
+  }
+
+  FOREVER
+  {
+    if (pop_reconnect (ctx) < 0)
+      return -1;
+
+    /* verify that massage index is correct */
+    if (h->refno < 0)
+    {
+      mutt_error _("The message index is incorrect. Try reopening the mailbox.");
+      mutt_sleep (2);
+      return -1;
+    }
+
+    mutt_message (m);
+
+    mutt_mktemp (path);
+    msg->fp = safe_fopen (path, "w+");
+    if (!msg->fp)
+    {
+      mutt_perror (path);
+      mutt_sleep (2);
+      return -1;
+    }
+
+    snprintf (buf, sizeof (buf), "RETR %d\r\n", h->refno);
+
+    ret = pop_fetch_data (pop_data, buf, m, fetch_message, msg->fp);
+    if (ret == 0)
+      break;
+
+    safe_fclose (&msg->fp);
+    unlink (path);
+
+    if (ret == -2)
+    {
+      mutt_error ("%s", pop_data->err_msg);
+      mutt_sleep (2);
+      return -1;
+    }
+
+    if (ret == -3)
+    {
+      mutt_error _("Can't write message to temporary file!");
+      mutt_sleep (2);
+      return -1;
+    }
+  }
+
+  /* Update the header information.  Previously, we only downloaded a
+   * portion of the headers, those required for the main display.
+   */
+  cache->index = h->index;
+  cache->path = safe_strdup (path);
+  rewind (msg->fp);
+  uidl = h->data;
+  mutt_free_envelope (&h->env);
+  h->env = mutt_read_rfc822_header (msg->fp, h, 0, 0);
+  h->data = uidl;
+  h->lines = 0;
+  fgets (buf, sizeof (buf), msg->fp);
+  while (!feof (msg->fp))
+  {
+    ctx->hdrs[msgno]->lines++;
+    fgets (buf, sizeof (buf), msg->fp);
+  }
+
+  h->content->length = ftell (msg->fp) - h->content->offset;
+
+  /* This needs to be done in case this is a multipart message */
+  if (!WithCrypto)
+    h->security = crypt_query (h->content);
+
+  mutt_clear_error();
+  rewind (msg->fp);
+
+  return 0;
+}
+
+/* update POP mailbox - delete messages from server */
+int pop_sync_mailbox (CONTEXT *ctx, int *index_hint)
+{
+  int i, ret;
+  char buf[LONG_STRING];
+  POP_DATA *pop_data = (POP_DATA *)ctx->data;
+
+  pop_data->check_time = 0;
+
+  FOREVER
+  {
+    if (pop_reconnect (ctx) < 0)
+      return -1;
+
+    mutt_message (_("Marking %d messages deleted..."), ctx->deleted);
+
+    for (i = 0, ret = 0; ret == 0 && i < ctx->msgcount; i++)
+    {
+      if (ctx->hdrs[i]->deleted)
+      {
+       snprintf (buf, sizeof (buf), "DELE %d\r\n", ctx->hdrs[i]->refno);
+       ret = pop_query (pop_data, buf, sizeof (buf));
+      }
+    }
+
+    if (ret == 0)
+    {
+      strfcpy (buf, "QUIT\r\n", sizeof (buf));
+      ret = pop_query (pop_data, buf, sizeof (buf));
+    }
+
+    if (ret == 0)
+    {
+      pop_data->clear_cache = 1;
+      pop_clear_cache (pop_data);
+      pop_data->status = POP_DISCONNECTED;
+      return 0;
+    }
+
+    if (ret == -2)
+    {
+      mutt_error ("%s", pop_data->err_msg);
+      mutt_sleep (2);
+      return -1;
+    }
+  }
+}
+
+/* Check for new messages and fetch headers */
+int pop_check_mailbox (CONTEXT *ctx, int *index_hint)
+{
+  int ret;
+  POP_DATA *pop_data = (POP_DATA *)ctx->data;
+
+  if ((pop_data->check_time + PopCheckTimeout) > time (NULL))
+    return 0;
+
+  pop_logout (ctx);
+
+  mutt_socket_close (pop_data->conn);
+
+  if (pop_open_connection (pop_data) < 0)
+    return -1;
+
+  ctx->size = pop_data->size;
+
+  mutt_message _("Checking for new messages...");
+
+  ret = pop_fetch_headers (ctx);
+  pop_clear_cache (pop_data);
+
+  if (ret < 0)
+    return -1;
+
+  if (ret > 0)
+    return M_NEW_MAIL;
+
+  return 0;
+}
+
+/* Fetch messages and save them in $spoolfile */
+void pop_fetch_mail (void)
+{
+  char buffer[LONG_STRING];
+  char msgbuf[SHORT_STRING];
+  char *url, *p;
+  int i, delanswer, last = 0, msgs, bytes, rset = 0, ret;
+  CONNECTION *conn;
+  CONTEXT ctx;
+  MESSAGE *msg = NULL;
+  ACCOUNT acct;
+  POP_DATA *pop_data;
+
+  if (!PopHost)
+  {
+    mutt_error _("POP host is not defined.");
+    return;
+  }
+
+  url = p = safe_calloc (strlen (PopHost) + 7, sizeof (char));
+  if (url_check_scheme (PopHost) == U_UNKNOWN)
+  {
+    strcpy (url, "pop://");    /* __STRCPY_CHECKED__ */
+    p = strchr (url, '\0');
+  }
+  strcpy (p, PopHost);         /* __STRCPY_CHECKED__ */
+
+  ret = pop_parse_path (url, &acct);
+  FREE (&url);
+  if (ret)
+  {
+    mutt_error (_("%s is an invalid POP path"), PopHost);
+    return;
+  }
+
+  conn = mutt_conn_find (NULL, &acct);
+  if (!conn)
+    return;
+
+  pop_data = safe_calloc (1, sizeof (POP_DATA));
+  pop_data->conn = conn;
+
+  if (pop_open_connection (pop_data) < 0)
+  {
+    mutt_socket_free (pop_data->conn);
+    FREE (&pop_data);
+    return;
+  }
+
+  conn->data = pop_data;
+
+  mutt_message _("Checking for new messages...");
+
+  /* find out how many messages are in the mailbox. */
+  strfcpy (buffer, "STAT\r\n", sizeof (buffer));
+  ret = pop_query (pop_data, buffer, sizeof (buffer));
+  if (ret == -1)
+    goto fail;
+  if (ret == -2)
+  {
+    mutt_error ("%s", pop_data->err_msg);
+    goto finish;
+  }
+
+  sscanf (buffer, "+OK %d %d", &msgs, &bytes);
+
+  /* only get unread messages */
+  if (msgs > 0 && option (OPTPOPLAST))
+  {
+    strfcpy (buffer, "LAST\r\n", sizeof (buffer));
+    ret = pop_query (pop_data, buffer, sizeof (buffer));
+    if (ret == -1)
+      goto fail;
+    if (ret == 0)
+      sscanf (buffer, "+OK %d", &last);
+  }
+
+  if (msgs <= last)
+  {
+    mutt_message _("No new mail in POP mailbox.");
+    goto finish;
+  }
+
+  if (mx_open_mailbox (NONULL (Spoolfile), M_APPEND, &ctx) == NULL)
+    goto finish;
+
+  delanswer = query_quadoption (OPT_POPDELETE, _("Delete messages from server?"));
+
+  snprintf (msgbuf, sizeof (msgbuf), _("Reading new messages (%d bytes)..."), bytes);
+  mutt_message ("%s", msgbuf);
+
+  for (i = last + 1 ; i <= msgs ; i++)
+  {
+    if ((msg = mx_open_new_message (&ctx, NULL, M_ADD_FROM)) == NULL)
+      ret = -3;
+    else
+    {
+      snprintf (buffer, sizeof (buffer), "RETR %d\r\n", i);
+      ret = pop_fetch_data (pop_data, buffer, NULL, fetch_message, msg->fp);
+      if (ret == -3)
+       rset = 1;
+
+      if (ret == 0 && mx_commit_message (msg, &ctx) != 0)
+      {
+       rset = 1;
+       ret = -3;
+      }
+
+      mx_close_message (&msg);
+    }
+
+    if (ret == 0 && delanswer == M_YES)
+    {
+      /* delete the message on the server */
+      snprintf (buffer, sizeof (buffer), "DELE %d\r\n", i);
+      ret = pop_query (pop_data, buffer, sizeof (buffer));
+    }
+
+    if (ret == -1)
+    {
+      mx_close_mailbox (&ctx, NULL);
+      goto fail;
+    }
+    if (ret == -2)
+    {
+      mutt_error ("%s", pop_data->err_msg);
+      break;
+    }
+    if (ret == -3)
+    {
+      mutt_error _("Error while writing mailbox!");
+      break;
+    }
+
+    mutt_message (_("%s [%d of %d messages read]"), msgbuf, i - last, msgs - last);
+  }
+
+  mx_close_mailbox (&ctx, NULL);
+
+  if (rset)
+  {
+    /* make sure no messages get deleted */
+    strfcpy (buffer, "RSET\r\n", sizeof (buffer));
+    if (pop_query (pop_data, buffer, sizeof (buffer)) == -1)
+      goto fail;
+  }
+
+finish:
+  /* exit gracefully */
+  strfcpy (buffer, "QUIT\r\n", sizeof (buffer));
+  if (pop_query (pop_data, buffer, sizeof (buffer)) == -1)
+    goto fail;
+  mutt_socket_close (conn);
+  FREE (&pop_data);
+  return;
+
+fail:
+  mutt_error _("Server closed connection!");
+  mutt_socket_close (conn);
+  FREE (&pop_data);
+}
diff --git a/pop.h b/pop.h
new file mode 100644 (file)
index 0000000..027c20d
--- /dev/null
+++ b/pop.h
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2000-2003 Vsevolod Volkov <vvv@mutt.org.ua>
+ * 
+ *     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.
+ */ 
+
+#ifndef _POP_H
+#define _POP_H 1
+
+#include "mailbox.h"
+#include "mutt_socket.h"
+
+#define POP_PORT 110
+#define POP_SSL_PORT 995
+
+/* number of entries in the hash table */
+#define POP_CACHE_LEN 10
+
+/* maximal length of the server response (RFC1939) */
+#define POP_CMD_RESPONSE 512
+
+enum
+{
+  /* Status */
+  POP_NONE = 0,
+  POP_CONNECTED,
+  POP_DISCONNECTED,
+  POP_BYE
+};
+
+typedef enum
+{
+  POP_A_SUCCESS = 0,
+  POP_A_SOCKET,
+  POP_A_FAILURE,
+  POP_A_UNAVAIL
+} pop_auth_res_t;
+
+typedef struct
+{
+  unsigned int index;
+  char *path;
+} POP_CACHE;
+
+typedef struct
+{
+  CONNECTION *conn;
+  unsigned int status : 2;
+  unsigned int capabilities : 1;
+  unsigned int use_stls : 2;
+  unsigned int cmd_capa : 1;   /* optional command CAPA */
+  unsigned int cmd_stls : 1;   /* optional command STLS */
+  unsigned int cmd_user : 2;   /* optional command USER */
+  unsigned int cmd_uidl : 2;   /* optional command UIDL */
+  unsigned int cmd_top : 2;    /* optional command TOP */
+  unsigned int resp_codes : 1; /* server supports extended response codes */
+  unsigned int expire : 1;     /* expire is greater than 0 */
+  unsigned int clear_cache : 1;
+  size_t size;
+  time_t check_time;
+  time_t login_delay;          /* minimal login delay  capability */
+  char *auth_list;             /* list of auth mechanisms */
+  char *timestamp;
+  char err_msg[POP_CMD_RESPONSE];
+  POP_CACHE cache[POP_CACHE_LEN];
+} POP_DATA;
+
+typedef struct
+{
+  /* do authentication, using named method or any available if method is NULL */
+  pop_auth_res_t (*authenticate) (POP_DATA *, const char *);
+  /* name of authentication method supported, NULL means variable. If this
+   * is not null, authenticate may ignore the second parameter. */
+  const char* method;
+} pop_auth_t;
+
+/* pop_auth.c */
+int pop_authenticate (POP_DATA *);
+void pop_apop_timestamp (POP_DATA *, char *);
+
+/* pop_lib.c */
+#define pop_query(A,B,C) pop_query_d(A,B,C,NULL)
+int pop_parse_path (const char *, ACCOUNT *);
+int pop_connect (POP_DATA *);
+int pop_open_connection (POP_DATA *);
+int pop_query_d (POP_DATA *, char *, size_t, char *);
+int pop_fetch_data (POP_DATA *, char *, char *, int (*funct) (char *, void *), void *);
+int pop_reconnect (CONTEXT *);
+void pop_logout (CONTEXT *);
+void pop_error (POP_DATA *, char *);
+
+/* pop.c */
+int pop_check_mailbox (CONTEXT *, int *);
+int pop_open_mailbox (CONTEXT *);
+int pop_sync_mailbox (CONTEXT *, int *);
+int pop_fetch_message (MESSAGE *, CONTEXT *, int);
+void pop_close_mailbox (CONTEXT *);
+void pop_fetch_mail (void);
+
+#endif
diff --git a/pop_auth.c b/pop_auth.c
new file mode 100644 (file)
index 0000000..9353eef
--- /dev/null
@@ -0,0 +1,415 @@
+/*
+ * Copyright (C) 2000-2001 Vsevolod Volkov <vvv@mutt.org.ua>
+ * 
+ *     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.
+ */
+
+#include "mutt.h"
+#include "mx.h"
+#include "md5.h"
+#include "pop.h"
+
+#include <string.h>
+#include <unistd.h>
+
+#ifdef USE_SASL
+#ifdef USE_SASL2
+#include <sasl/sasl.h>
+#include <sasl/saslutil.h>
+#else
+#include <sasl.h>
+#include <saslutil.h>
+#endif
+
+#include "mutt_sasl.h"
+#endif
+
+#ifdef USE_SASL
+/* SASL authenticator */
+static pop_auth_res_t pop_auth_sasl (POP_DATA *pop_data, const char *method)
+{
+  sasl_conn_t *saslconn;
+  sasl_interact_t *interaction = NULL;
+  int rc;
+  char buf[LONG_STRING];
+  char inbuf[LONG_STRING];
+  const char* mech;
+#ifdef USE_SASL2
+  const char *pc = NULL;
+#else
+  char* pc = NULL;
+#endif
+  unsigned int len, olen;
+  unsigned char client_start;
+
+  if (mutt_sasl_client_new (pop_data->conn, &saslconn) < 0)
+  {
+    dprint (1, (debugfile, "pop_auth_sasl: Error allocating SASL connection.\n"));
+    return POP_A_FAILURE;
+  }
+
+  if (!method)
+    method = pop_data->auth_list;
+
+  FOREVER
+  {
+#ifdef USE_SASL2
+       rc = sasl_client_start(saslconn, method, &interaction, &pc, &olen, &mech);
+#else
+    rc = sasl_client_start (saslconn, method, NULL,
+                           &interaction, &pc, &olen, &mech);
+#endif
+    if (rc != SASL_INTERACT)
+      break;
+    mutt_sasl_interact (interaction);
+  }
+
+  if (rc != SASL_OK && rc != SASL_CONTINUE)
+  {
+    dprint (1, (debugfile, "pop_auth_sasl: Failure starting authentication exchange. No shared mechanisms?\n"));
+
+    /* SASL doesn't support suggested mechanisms, so fall back */
+    return POP_A_UNAVAIL;
+  }
+
+  client_start = (olen > 0);
+
+  mutt_message _("Authenticating (SASL)...");
+
+  snprintf (buf, sizeof (buf), "AUTH %s", mech);
+  olen = strlen (buf);
+
+  /* looping protocol */
+  FOREVER
+  {
+    strfcpy (buf + olen, "\r\n", sizeof (buf) - olen);
+    mutt_socket_write (pop_data->conn, buf);
+    if (mutt_socket_readln (inbuf, sizeof (inbuf), pop_data->conn) < 0)
+    {
+      sasl_dispose (&saslconn);
+      pop_data->status = POP_DISCONNECTED;
+      return POP_A_SOCKET;
+    }
+
+    if (rc != SASL_CONTINUE)
+      break;
+
+#ifdef USE_SASL2
+    if (!mutt_strncmp (inbuf, "+ ", 2)
+        && sasl_decode64 (inbuf, strlen (inbuf), buf, LONG_STRING-1, &len) != SASL_OK)
+#else
+    if (!mutt_strncmp (inbuf, "+ ", 2)
+        && sasl_decode64 (inbuf, strlen (inbuf), buf, &len) != SASL_OK)
+#endif
+    {
+      dprint (1, (debugfile, "pop_auth_sasl: error base64-decoding server response.\n"));
+      goto bail;
+    }
+
+    if (!client_start)
+      FOREVER
+      {
+       rc = sasl_client_step (saslconn, buf, len, &interaction, &pc, &olen);
+       if (rc != SASL_INTERACT)
+         break;
+       mutt_sasl_interact (interaction);
+      }
+    else
+      client_start = 0;
+
+    if (rc != SASL_CONTINUE && (olen == 0 || rc != SASL_OK))
+      break;
+
+    /* send out response, or line break if none needed */
+    if (pc)
+    {
+      if (sasl_encode64 (pc, olen, buf, sizeof (buf), &olen) != SASL_OK)
+      {
+       dprint (1, (debugfile, "pop_auth_sasl: error base64-encoding client response.\n"));
+       goto bail;
+      }
+
+      /* sasl_client_st(art|ep) allocate pc with malloc, expect me to 
+       * free it */
+#ifndef USE_SASL2
+      FREE (&pc);
+#endif
+    }
+  }
+
+  if (rc != SASL_OK)
+    goto bail;
+
+  if (!mutt_strncmp (inbuf, "+OK", 3))
+  {
+    mutt_sasl_setup_conn (pop_data->conn, saslconn);
+    return POP_A_SUCCESS;
+  }
+
+bail:
+  sasl_dispose (&saslconn);
+
+  /* terminate SASL sessoin if the last responce is not +OK nor -ERR */
+  if (!mutt_strncmp (inbuf, "+ ", 2))
+  {
+    snprintf (buf, sizeof (buf), "*\r\n");
+    if (pop_query (pop_data, buf, sizeof (buf)) == -1)
+      return POP_A_SOCKET;
+  }
+
+  mutt_error _("SASL authentication failed.");
+  mutt_sleep (2);
+
+  return POP_A_FAILURE;
+}
+#endif
+
+/* Get the server timestamp for APOP authentication */
+void pop_apop_timestamp (POP_DATA *pop_data, char *buf)
+{
+  char *p1, *p2;
+
+  FREE (&pop_data->timestamp);
+
+  if ((p1 = strchr (buf, '<')) && (p2 = strchr (p1, '>')))
+  {
+    p2[1] = '\0';
+    pop_data->timestamp = safe_strdup (p1);
+  }
+}
+
+/* APOP authenticator */
+static pop_auth_res_t pop_auth_apop (POP_DATA *pop_data, const char *method)
+{
+  MD5_CTX mdContext;
+  unsigned char digest[16];
+  char hash[33];
+  char buf[LONG_STRING];
+  int i;
+
+  if (!pop_data->timestamp)
+    return POP_A_UNAVAIL;
+
+  mutt_message _("Authenticating (APOP)...");
+
+  /* Compute the authentication hash to send to the server */
+  MD5Init (&mdContext);
+  MD5Update (&mdContext, (unsigned char *)pop_data->timestamp,
+            strlen (pop_data->timestamp));
+  MD5Update (&mdContext, (unsigned char *)pop_data->conn->account.pass,
+            strlen (pop_data->conn->account.pass));
+  MD5Final (digest, &mdContext);
+
+  for (i = 0; i < sizeof (digest); i++)
+    sprintf (hash + 2 * i, "%02x", digest[i]);
+
+  /* Send APOP command to server */
+  snprintf (buf, sizeof (buf), "APOP %s %s\r\n", pop_data->conn->account.user, hash);
+
+  switch (pop_query (pop_data, buf, sizeof (buf)))
+  {
+    case 0:
+      return POP_A_SUCCESS;
+    case -1:
+      return POP_A_SOCKET;
+  }
+
+  mutt_error _("APOP authentication failed.");
+  mutt_sleep (2);
+
+  return POP_A_FAILURE;
+}
+
+/* USER authenticator */
+static pop_auth_res_t pop_auth_user (POP_DATA *pop_data, const char *method)
+{
+  char buf[LONG_STRING];
+  int ret;
+
+  if (!pop_data->cmd_user)
+    return POP_A_UNAVAIL;
+
+  mutt_message _("Logging in...");
+
+  snprintf (buf, sizeof (buf), "USER %s\r\n", pop_data->conn->account.user);
+  ret = pop_query (pop_data, buf, sizeof (buf));
+
+  if (pop_data->cmd_user == 2)
+  {
+    if (ret == 0)
+    {
+      pop_data->cmd_user = 1;
+
+      dprint (1, (debugfile, "pop_auth_user: set USER capability\n"));
+    }
+
+    if (ret == -2)
+    {
+      pop_data->cmd_user = 0;
+
+      dprint (1, (debugfile, "pop_auth_user: unset USER capability\n"));
+      snprintf (pop_data->err_msg, sizeof (pop_data->err_msg),
+              _("Command USER is not supported by server."));
+    }
+  }
+
+  if (ret == 0)
+  {
+    snprintf (buf, sizeof (buf), "PASS %s\r\n", pop_data->conn->account.pass);
+    ret = pop_query_d (pop_data, buf, sizeof (buf), 
+#ifdef DEBUG
+       /* don't print the password unless we're at the ungodly debugging level */
+       debuglevel < M_SOCK_LOG_FULL ? "PASS *\r\n" :
+#endif
+       NULL);
+  }
+
+  switch (ret)
+  {
+    case 0:
+      return POP_A_SUCCESS;
+    case -1:
+      return POP_A_SOCKET;
+  }
+
+  mutt_error ("%s %s", _("Login failed."), pop_data->err_msg);
+  mutt_sleep (2);
+
+  return POP_A_FAILURE;
+}
+
+static pop_auth_t pop_authenticators[] = {
+#ifdef USE_SASL
+  { pop_auth_sasl, NULL },
+#endif
+  { pop_auth_apop, "apop" },
+  { pop_auth_user, "user" },
+  { NULL }
+};
+
+/*
+ * Authentication
+ *  0 - successful,
+ * -1 - conection lost,
+ * -2 - login failed,
+ * -3 - authentication canceled.
+*/
+int pop_authenticate (POP_DATA* pop_data)
+{
+  ACCOUNT *acct = &pop_data->conn->account;
+  pop_auth_t* authenticator;
+  char* methods;
+  char* comma;
+  char* method;
+  int attempts = 0;
+  int ret = POP_A_UNAVAIL;
+
+  if (mutt_account_getuser (acct) || !acct->user[0] ||
+      mutt_account_getpass (acct) || !acct->pass[0])
+    return -3;
+
+  if (PopAuthenticators && *PopAuthenticators)
+  {
+    /* Try user-specified list of authentication methods */
+    methods = safe_strdup (PopAuthenticators);
+    method = methods;
+
+    while (method)
+    {
+      comma = strchr (method, ':');
+      if (comma)
+       *comma++ = '\0';
+      dprint (2, (debugfile, "pop_authenticate: Trying method %s\n", method));
+      authenticator = pop_authenticators;
+
+      while (authenticator->authenticate)
+      {
+       if (!authenticator->method ||
+           !ascii_strcasecmp (authenticator->method, method))
+       {
+         ret = authenticator->authenticate (pop_data, method);
+         if (ret == POP_A_SOCKET)
+           switch (pop_connect (pop_data))
+           {
+             case 0:
+             {
+               ret = authenticator->authenticate (pop_data, method);
+               break;
+             }
+             case -2:
+               ret = POP_A_FAILURE;
+           }
+
+         if (ret != POP_A_UNAVAIL)
+           attempts++;
+         if (ret == POP_A_SUCCESS || ret == POP_A_SOCKET ||
+             (ret == POP_A_FAILURE && !option (OPTPOPAUTHTRYALL)))
+         {
+           comma = NULL;
+           break;
+         }
+       }
+       authenticator++;
+      }
+
+      method = comma;
+    }
+
+    FREE (&methods);
+  }
+  else
+  {
+    /* Fall back to default: any authenticator */
+    dprint (2, (debugfile, "pop_authenticate: Using any available method.\n"));
+    authenticator = pop_authenticators;
+
+    while (authenticator->authenticate)
+    {
+      ret = authenticator->authenticate (pop_data, authenticator->method);
+      if (ret == POP_A_SOCKET)
+       switch (pop_connect (pop_data))
+       {
+         case 0:
+         {
+           ret = authenticator->authenticate (pop_data, authenticator->method);
+           break;
+         }
+         case -2:
+           ret = POP_A_FAILURE;
+       }
+
+      if (ret != POP_A_UNAVAIL)
+       attempts++;
+      if (ret == POP_A_SUCCESS || ret == POP_A_SOCKET ||
+         (ret == POP_A_FAILURE && !option (OPTPOPAUTHTRYALL)))
+       break;
+
+      authenticator++;
+    }
+  }
+
+  switch (ret)
+  {
+    case POP_A_SUCCESS:
+      return 0;
+    case POP_A_SOCKET:
+      return -1;
+    case POP_A_UNAVAIL:
+      if (!attempts)
+       mutt_error (_("No authenticators available"));
+  }
+
+  return -2;
+}
diff --git a/pop_lib.c b/pop_lib.c
new file mode 100644 (file)
index 0000000..5408348
--- /dev/null
+++ b/pop_lib.c
@@ -0,0 +1,563 @@
+/*
+ * Copyright (C) 2000-2003 Vsevolod Volkov <vvv@mutt.org.ua>
+ * 
+ *     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.
+ */
+
+#include "mutt.h"
+#include "mx.h"
+#include "url.h"
+#include "pop.h"
+#ifdef USE_SSL
+# include "mutt_ssl.h"
+#endif
+
+#include <string.h>
+#include <unistd.h>
+#include <ctype.h>
+
+/* given an POP mailbox name, return host, port, username and password */
+int pop_parse_path (const char* path, ACCOUNT* acct)
+{
+  ciss_url_t url;
+  char *c;
+  int ret = -1;
+
+  /* Defaults */
+  acct->flags = 0;
+  acct->port = POP_PORT;
+  acct->type = M_ACCT_TYPE_POP;
+
+  c = safe_strdup (path);
+  url_parse_ciss (&url, c);
+
+  if (url.scheme == U_POP || url.scheme == U_POPS)
+  {
+    if (url.scheme == U_POPS)
+    {
+      acct->flags |= M_ACCT_SSL;
+      acct->port = POP_SSL_PORT;
+    }
+
+    if ((!url.path || !*url.path) && mutt_account_fromurl (acct, &url) == 0)
+      ret = 0;
+  }
+
+  FREE (&c);
+  return ret;
+}
+
+/* Copy error message to err_msg buffer */
+void pop_error (POP_DATA *pop_data, char *msg)
+{
+  char *t, *c, *c2;
+
+  t = strchr (pop_data->err_msg, '\0');
+  c = msg;
+
+  if (!mutt_strncmp (msg, "-ERR ", 5))
+  {
+    c2 = msg + 5;
+    SKIPWS (c2);
+
+    if (*c2)
+      c = c2;
+  }
+
+  strfcpy (t, c, sizeof (pop_data->err_msg) - strlen (pop_data->err_msg));
+  mutt_remove_trailing_ws (pop_data->err_msg);
+}
+
+/* Parse CAPA output */
+static int fetch_capa (char *line, void *data)
+{
+  POP_DATA *pop_data = (POP_DATA *)data;
+  char *c;
+
+  if (!ascii_strncasecmp (line, "SASL", 4))
+  {
+    FREE (&pop_data->auth_list);
+    c = line + 4;
+    SKIPWS (c);
+    pop_data->auth_list = safe_strdup (c);
+  }
+
+  else if (!ascii_strncasecmp (line, "STLS", 4))
+    pop_data->cmd_stls = 1;
+
+  else if (!ascii_strncasecmp (line, "USER", 4))
+    pop_data->cmd_user = 1;
+
+  else if (!ascii_strncasecmp (line, "UIDL", 4))
+    pop_data->cmd_uidl = 1;
+
+  else if (!ascii_strncasecmp (line, "TOP", 3))
+    pop_data->cmd_top = 1;
+
+  return 0;
+}
+
+/* Fetch list of the authentication mechanisms */
+static int fetch_auth (char *line, void *data)
+{
+  POP_DATA *pop_data = (POP_DATA *)data;
+
+  if (!pop_data->auth_list)
+  {
+    pop_data->auth_list = safe_malloc (strlen (line) + 1);
+    *pop_data->auth_list = '\0';
+  }
+  else
+  {
+    safe_realloc (&pop_data->auth_list,
+           strlen (pop_data->auth_list) + strlen (line) + 2);
+    strcat (pop_data->auth_list, " "); /* __STRCAT_CHECKED__ */
+  }
+  strcat (pop_data->auth_list, line);  /* __STRCAT_CHECKED__ */
+
+  return 0;
+}
+
+/*
+ * Get capabilities
+ *  0 - successful,
+ * -1 - conection lost,
+ * -2 - execution error.
+*/
+static int pop_capabilities (POP_DATA *pop_data, int mode)
+{
+  char buf[LONG_STRING];
+
+  /* don't check capabilities on reconnect */
+  if (pop_data->capabilities)
+    return 0;
+
+  /* init capabilities */
+  if (mode == 0)
+  {
+    pop_data->cmd_capa = 0;
+    pop_data->cmd_stls = 0;
+    pop_data->cmd_user = 0;
+    pop_data->cmd_uidl = 0;
+    pop_data->cmd_top = 0;
+    pop_data->resp_codes = 0;
+    pop_data->expire = 1;
+    pop_data->login_delay = 0;
+    FREE (&pop_data->auth_list);
+  }
+
+  /* Execute CAPA command */
+  if (mode == 0 || pop_data->cmd_capa)
+  {
+    strfcpy (buf, "CAPA\r\n", sizeof (buf));
+    switch (pop_fetch_data (pop_data, buf, NULL, fetch_capa, pop_data))
+    {
+      case 0:
+      {
+       pop_data->cmd_capa = 1;
+       break;
+      }
+      case -1:
+       return -1;
+    }
+  }
+
+  /* CAPA not supported, use defaults */
+  if (mode == 0 && !pop_data->cmd_capa)
+  {
+    pop_data->cmd_user = 2;
+    pop_data->cmd_uidl = 2;
+    pop_data->cmd_top = 2;
+
+    strfcpy (buf, "AUTH\r\n", sizeof (buf));
+    if (pop_fetch_data (pop_data, buf, NULL, fetch_auth, pop_data) == -1)
+      return -1;
+  }
+
+  /* Check capabilities */
+  if (mode == 2)
+  {
+    char *msg = NULL;
+
+    if (!pop_data->expire)
+      msg = _("Unable to leave messages on server.");
+    if (!pop_data->cmd_top)
+      msg = _("Command TOP is not supported by server.");
+    if (!pop_data->cmd_uidl)
+      msg = _("Command UIDL is not supported by server.");
+    if (msg && pop_data->cmd_capa)
+    {
+      mutt_error (msg);
+      return -2;
+    }
+    pop_data->capabilities = 1;
+  }
+
+  return 0;
+}
+
+/*
+ * Open connection
+ *  0 - successful,
+ * -1 - conection lost,
+ * -2 - invalid response.
+*/
+int pop_connect (POP_DATA *pop_data)
+{
+  char buf[LONG_STRING];
+
+  pop_data->status = POP_NONE;
+  if (mutt_socket_open (pop_data->conn) < 0 ||
+      mutt_socket_readln (buf, sizeof (buf), pop_data->conn) < 0)
+  {
+    mutt_error (_("Error connecting to server: %s"), pop_data->conn->account.host);
+    return -1;
+  }
+
+  pop_data->status = POP_CONNECTED;
+
+  if (mutt_strncmp (buf, "+OK", 3))
+  {
+    *pop_data->err_msg = '\0';
+    pop_error (pop_data, buf);
+    mutt_error ("%s", pop_data->err_msg);
+    return -2;
+  }
+
+  pop_apop_timestamp (pop_data, buf);
+
+  return 0;
+}
+
+/*
+ * Open connection and authenticate
+ *  0 - successful,
+ * -1 - conection lost,
+ * -2 - invalid command or execution error,
+ * -3 - authentication canceled.
+*/
+int pop_open_connection (POP_DATA *pop_data)
+{
+  int ret;
+  unsigned int n, size;
+  char buf[LONG_STRING];
+
+  ret = pop_connect (pop_data);
+  if (ret < 0)
+  {
+    mutt_sleep (2);
+    return ret;
+  }
+
+  ret = pop_capabilities (pop_data, 0);
+  if (ret == -1)
+    goto err_conn;
+  if (ret == -2)
+  {
+    mutt_sleep (2);
+    return -2;
+  }
+
+#if defined(USE_SSL) && !defined(USE_NSS)
+  /* Attempt STLS if available and desired. */
+  if (pop_data->cmd_stls && !pop_data->conn->ssf)
+  {
+    if (pop_data->use_stls == 0)
+    {
+      ret = query_quadoption (OPT_SSLSTARTTLS,
+           _("Secure connection with TLS?"));
+      if (ret == -1)
+       return -2;
+      pop_data->use_stls = 1;
+      if (ret == M_YES)
+       pop_data->use_stls = 2;
+    }
+    if (pop_data->use_stls == 2)
+    {
+      strfcpy (buf, "STLS\r\n", sizeof (buf));
+      ret = pop_query (pop_data, buf, sizeof (buf));
+      if (ret == -1)
+       goto err_conn;
+      if (ret != 0)
+      {
+       mutt_error ("%s", pop_data->err_msg);
+       mutt_sleep (2);
+      }
+      else if (mutt_ssl_starttls (pop_data->conn))
+      {
+       mutt_error (_("Could not negotiate TLS connection"));
+       mutt_sleep (2);
+       return -2;
+      }
+      else
+      {
+       /* recheck capabilities after STLS completes */
+       ret = pop_capabilities (pop_data, 1);
+       if (ret == -1)
+         goto err_conn;
+       if (ret == -2)
+       {
+         mutt_sleep (2);
+         return -2;
+       }
+      }
+    }
+  }
+#endif
+
+  ret = pop_authenticate (pop_data);
+  if (ret == -1)
+    goto err_conn;
+  if (ret == -3)
+    mutt_clear_error ();
+  if (ret != 0)
+    return ret;
+
+  /* recheck capabilities after authentication */
+  ret = pop_capabilities (pop_data, 2);
+  if (ret == -1)
+    goto err_conn;
+  if (ret == -2)
+  {
+    mutt_sleep (2);
+    return -2;
+  }
+
+  /* get total size of mailbox */
+  strfcpy (buf, "STAT\r\n", sizeof (buf));
+  ret = pop_query (pop_data, buf, sizeof (buf));
+  if (ret == -1)
+    goto err_conn;
+  if (ret == -2)
+  {
+    mutt_error ("%s", pop_data->err_msg);
+    mutt_sleep (2);
+    return ret;
+  }
+
+  sscanf (buf, "+OK %u %u", &n, &size);
+  pop_data->size = size;
+  return 0;
+
+err_conn:
+  pop_data->status = POP_DISCONNECTED;
+  mutt_error _("Server closed connection!");
+  mutt_sleep (2);
+  return -1;
+}
+
+/* logout from POP server */
+void pop_logout (CONTEXT *ctx)
+{
+  int ret = 0;
+  char buf[LONG_STRING];
+  POP_DATA *pop_data = (POP_DATA *)ctx->data;
+
+  if (pop_data->status == POP_CONNECTED)
+  {
+    mutt_message _("Closing connection to POP server...");
+
+    if (ctx->readonly)
+    {
+      strfcpy (buf, "RSET\r\n", sizeof (buf));
+      ret = pop_query (pop_data, buf, sizeof (buf));
+    }
+
+    if (ret != -1)
+    {
+      strfcpy (buf, "QUIT\r\n", sizeof (buf));
+      pop_query (pop_data, buf, sizeof (buf));
+    }
+
+    mutt_clear_error ();
+  }
+
+  pop_data->status = POP_DISCONNECTED;
+  return;
+}
+
+/*
+ * Send data from buffer and receive answer to the same buffer
+ *  0 - successful,
+ * -1 - conection lost,
+ * -2 - invalid command or execution error.
+*/
+int pop_query_d (POP_DATA *pop_data, char *buf, size_t buflen, char *msg)
+{
+  int dbg = M_SOCK_LOG_CMD;
+  char *c;
+
+  if (pop_data->status != POP_CONNECTED)
+    return -1;
+
+#ifdef DEBUG
+    /* print msg instaed of real command */
+    if (msg)
+    {
+      dbg = M_SOCK_LOG_FULL;
+      dprint (M_SOCK_LOG_CMD, (debugfile, "> %s", msg));
+    }
+#endif
+
+  mutt_socket_write_d (pop_data->conn, buf, dbg);
+
+  c = strpbrk (buf, " \r\n");
+  *c = '\0';
+  snprintf (pop_data->err_msg, sizeof (pop_data->err_msg), "%s: ", buf);
+
+  if (mutt_socket_readln (buf, buflen, pop_data->conn) < 0)
+  {
+    pop_data->status = POP_DISCONNECTED;
+    return -1;
+  }
+  if (!mutt_strncmp (buf, "+OK", 3))
+    return 0;
+
+  pop_error (pop_data, buf);
+  return -2;
+}
+
+/*
+ * This function calls  funct(*line, *data)  for each received line,
+ * funct(NULL, *data)  if  rewind(*data)  needs, exits when fail or done.
+ * Returned codes:
+ *  0 - successful,
+ * -1 - conection lost,
+ * -2 - invalid command or execution error,
+ * -3 - error in funct(*line, *data)
+ */
+int pop_fetch_data (POP_DATA *pop_data, char *query, char *msg,
+                   int (*funct) (char *, void *), void *data)
+{
+  char buf[LONG_STRING];
+  char *inbuf;
+  char *p;
+  int ret, chunk, line = 0;
+  size_t lenbuf = 0;
+
+  strfcpy (buf, query, sizeof (buf));
+  ret = pop_query (pop_data, buf, sizeof (buf));
+  if (ret < 0)
+    return ret;
+
+  inbuf = safe_malloc (sizeof (buf));
+
+  FOREVER
+  {
+    chunk = mutt_socket_readln_d (buf, sizeof (buf), pop_data->conn, M_SOCK_LOG_HDR);
+    if (chunk < 0)
+    {
+      pop_data->status = POP_DISCONNECTED;
+      ret = -1;
+      break;
+    }
+
+    p = buf;
+    if (!lenbuf && buf[0] == '.')
+    {
+      if (buf[1] != '.')
+       break;
+      p++;
+    }
+
+    strfcpy (inbuf + lenbuf, p, sizeof (buf));
+
+    if (chunk >= sizeof (buf))
+    {
+      lenbuf += strlen (p);
+    }
+    else
+    {
+      line++;
+      if (msg && ReadInc && (line % ReadInc == 0))
+       mutt_message ("%s %d", msg, line);
+      if (ret == 0 && funct (inbuf, data) < 0)
+       ret = -3;
+      lenbuf = 0;
+    }
+
+    safe_realloc (&inbuf, lenbuf + sizeof (buf));
+  }
+
+  FREE (&inbuf);
+  return ret;
+}
+
+/* find message with this UIDL and set refno */
+static int check_uidl (char *line, void *data)
+{
+  int i;
+  unsigned int index;
+  CONTEXT *ctx = (CONTEXT *)data;
+
+  sscanf (line, "%u %s", &index, line);
+  for (i = 0; i < ctx->msgcount; i++)
+  {
+    if (!mutt_strcmp (ctx->hdrs[i]->data, line))
+    {
+      ctx->hdrs[i]->refno = index;
+      break;
+    }
+  }
+
+  return 0;
+}
+
+/* reconnect and verify idnexes if connection was lost */
+int pop_reconnect (CONTEXT *ctx)
+{
+  int ret;
+  POP_DATA *pop_data = (POP_DATA *)ctx->data;
+
+  if (pop_data->status == POP_CONNECTED)
+    return 0;
+  if (pop_data->status == POP_BYE)
+    return -1;
+
+  FOREVER
+  {
+    mutt_socket_close (pop_data->conn);
+
+    ret = pop_open_connection (pop_data);
+    if (ret == 0)
+    {
+      char *msg = _("Verifying message indexes...");
+      int i;
+
+      for (i = 0; i < ctx->msgcount; i++)
+       ctx->hdrs[i]->refno = -1;
+
+      mutt_message (msg);
+
+      ret = pop_fetch_data (pop_data, "UIDL\r\n", msg, check_uidl, ctx);
+      if (ret == -2)
+      {
+        mutt_error ("%s", pop_data->err_msg);
+        mutt_sleep (2);
+      }
+    }
+    if (ret == 0)
+      return 0;
+
+    pop_logout (ctx);
+
+    if (ret < -1)
+      return -1;
+
+    if (query_quadoption (OPT_POPRECONNECT,
+               _("Connection lost. Reconnect to POP server?")) != M_YES)
+      return -1;
+  }
+}
diff --git a/postpone.c b/postpone.c
new file mode 100644 (file)
index 0000000..449f83e
--- /dev/null
@@ -0,0 +1,683 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_menu.h"
+#include "rfc1524.h"
+#include "mime.h"
+#include "mailbox.h"
+#include "mapping.h"
+#include "sort.h"
+#ifdef USE_IMAP
+#include "mx.h"
+#include "imap.h"
+#endif
+#include "mutt_crypt.h"
+
+#include <ctype.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/stat.h>
+
+static struct mapping_t PostponeHelp[] = {
+  { N_("Exit"),  OP_EXIT },
+  { N_("Del"),   OP_DELETE },
+  { N_("Undel"), OP_UNDELETE },
+  { N_("Help"),  OP_HELP },
+  { NULL }
+};
+
+
+
+static short PostCount = 0;
+static CONTEXT *PostContext = NULL;
+static short UpdateNumPostponed = 0;
+
+/* Return the number of postponed messages.
+ * if force is 0, use a cached value if it is costly to get a fresh
+ * count (IMAP) - else check.
+ */
+int mutt_num_postponed (int force)
+{
+  struct stat st;
+  CONTEXT ctx;
+
+  static time_t LastModify = 0;
+  static char *OldPostponed = NULL;
+
+  if (UpdateNumPostponed)
+  {
+    UpdateNumPostponed = 0;
+    force = 1;
+  }
+
+  if (Postponed != OldPostponed)
+  {
+    OldPostponed = Postponed;
+    LastModify = 0;
+    force = 1;
+  }
+
+  if (!Postponed)
+    return 0;
+
+#ifdef USE_IMAP
+  /* LastModify is useless for IMAP */
+  if (mx_is_imap (Postponed))
+  {
+    if (force)
+    {
+      short newpc;
+
+      newpc = imap_mailbox_check (Postponed, 0);
+      if (newpc >= 0)
+      {
+       PostCount = newpc;
+       dprint (2, (debugfile, "mutt_num_postponed: %d postponed IMAP messages found.\n", PostCount));
+      }
+      else
+       dprint (2, (debugfile, "mutt_num_postponed: using old IMAP postponed count.\n"));
+    }
+    return PostCount;
+  }
+#endif
+
+  if (stat (Postponed, &st) == -1)
+  {
+     PostCount = 0;
+     LastModify = 0;
+     return (0);
+  }
+
+  if (S_ISDIR (st.st_mode))
+  {
+    /* if we have a maildir mailbox, we need to stat the "new" dir */
+
+    char buf[_POSIX_PATH_MAX];
+
+    snprintf (buf, sizeof (buf), "%s/new", Postponed);
+    if (access (buf, F_OK) == 0 && stat (buf, &st) == -1)
+    {
+      PostCount = 0;
+      LastModify = 0;
+      return 0;
+    }
+  }
+
+  if (LastModify < st.st_mtime)
+  {
+#ifdef USE_NNTP
+    int optnews = option (OPTNEWS);
+#endif
+    LastModify = st.st_mtime;
+
+    if (access (Postponed, R_OK | F_OK) != 0)
+      return (PostCount = 0);
+#ifdef USE_NNTP
+    if (optnews)
+       unset_option (OPTNEWS);
+#endif
+    if (mx_open_mailbox (Postponed, M_NOSORT | M_QUIET, &ctx) == NULL)
+      PostCount = 0;
+    else
+      PostCount = ctx.msgcount;
+    mx_fastclose_mailbox (&ctx);
+#ifdef USE_NNTP
+    if (optnews)
+       set_option (OPTNEWS);
+#endif
+  }
+
+  return (PostCount);
+}
+
+void mutt_update_num_postponed (void)
+{
+  UpdateNumPostponed = 1;
+}
+
+static void post_entry (char *s, size_t slen, MUTTMENU *menu, int entry)
+{
+  CONTEXT *ctx = (CONTEXT *) menu->data;
+
+  _mutt_make_string (s, slen, NONULL (HdrFmt), ctx, ctx->hdrs[entry],
+                    M_FORMAT_ARROWCURSOR);
+}
+
+static HEADER *select_msg (void)
+{
+  MUTTMENU *menu;
+  int i, done=0, r=-1;
+  char helpstr[SHORT_STRING];
+  short orig_sort;
+
+  menu = mutt_new_menu ();
+  menu->make_entry = post_entry;
+  menu->menu = MENU_POST;
+  menu->max = PostContext->msgcount;
+  menu->title = _("Postponed Messages");
+  menu->data = PostContext;
+  menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_POST, PostponeHelp);
+
+  /* The postponed mailbox is setup to have sorting disabled, but the global
+   * Sort variable may indicate something different.   Sorting has to be
+   * disabled while the postpone menu is being displayed. */
+  orig_sort = Sort;
+  Sort = SORT_ORDER;
+  
+  while (!done)
+  {
+    switch (i = mutt_menuLoop (menu))
+    {
+      case OP_DELETE:
+      case OP_UNDELETE:
+       mutt_set_flag (PostContext, PostContext->hdrs[menu->current], M_DELETE, (i == OP_DELETE) ? 1 : 0);
+       PostCount = PostContext->msgcount - PostContext->deleted;
+       if (option (OPTRESOLVE) && menu->current < menu->max - 1)
+       {
+         menu->oldcurrent = menu->current;
+         menu->current++;
+         if (menu->current >= menu->top + menu->pagelen)
+         {
+           menu->top = menu->current;
+           menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
+         }
+         else
+           menu->redraw |= REDRAW_MOTION_RESYNCH;
+       }
+       else
+         menu->redraw = REDRAW_CURRENT;
+       break;
+
+      case OP_GENERIC_SELECT_ENTRY:
+       r = menu->current;
+       done = 1;
+       break;
+
+      case OP_EXIT:
+       done = 1;
+       break;
+    }
+  }
+
+  Sort = orig_sort;
+  mutt_menuDestroy (&menu);
+  return (r > -1 ? PostContext->hdrs[r] : NULL);
+}
+
+/* args:
+ *      ctx    Context info, used when recalling a message to which
+ *              we reply.
+ *     hdr     envelope/attachment info for recalled message
+ *     cur     if message was a reply, `cur' is set to the message which
+ *             `hdr' is in reply to
+ *     fcc     fcc for the recalled message
+ *     fcclen  max length of fcc
+ *
+ * return vals:
+ *     -1              error/no messages
+ *     0               normal exit
+ *     SENDREPLY       recalled message is a reply
+ */
+int mutt_get_postponed (CONTEXT *ctx, HEADER *hdr, HEADER **cur, char *fcc, size_t fcclen)
+{
+  HEADER *h;
+  int code = SENDPOSTPONED;
+  LIST *tmp;
+  LIST *last = NULL;
+  LIST *next;
+  char *p;
+  int opt_delete;
+
+  if (!Postponed)
+    return (-1);
+
+  if ((PostContext = mx_open_mailbox (Postponed, M_NOSORT, NULL)) == NULL)
+  {
+    PostCount = 0;
+    mutt_error _("No postponed messages.");
+    return (-1);
+  }
+  
+  if (! PostContext->msgcount)
+  {
+    PostCount = 0;
+    mx_close_mailbox (PostContext, NULL);
+    FREE (&PostContext);
+    mutt_error _("No postponed messages.");
+    return (-1);
+  }
+
+  if (PostContext->msgcount == 1)
+  {
+    /* only one message, so just use that one. */
+    h = PostContext->hdrs[0];
+  }
+  else if ((h = select_msg ()) == NULL)
+  {
+    mx_close_mailbox (PostContext, NULL);
+    FREE (&PostContext);
+    return (-1);
+  }
+
+  if (mutt_prepare_template (NULL, PostContext, hdr, h, 0) < 0)
+  {
+    mx_fastclose_mailbox (PostContext);
+    FREE (&PostContext);
+    return (-1);
+  }
+
+  /* finished with this message, so delete it. */
+  mutt_set_flag (PostContext, h, M_DELETE, 1);
+
+  /* and consider it saved, so that it won't be moved to the trash folder */
+  mutt_set_flag (PostContext, h, M_APPENDED, 1);
+
+  /* update the count for the status display */
+  PostCount = PostContext->msgcount - PostContext->deleted;
+
+  /* avoid the "purge deleted messages" prompt */
+  opt_delete = quadoption (OPT_DELETE);
+  set_quadoption (OPT_DELETE, M_YES);
+  mx_close_mailbox (PostContext, NULL);
+  set_quadoption (OPT_DELETE, opt_delete);
+
+  FREE (&PostContext);
+
+  for (tmp = hdr->env->userhdrs; tmp; )
+  {
+    if (ascii_strncasecmp ("X-Mutt-References:", tmp->data, 18) == 0)
+    {
+      if (ctx)
+      {
+       /* if a mailbox is currently open, look to see if the orignal message
+          the user attempted to reply to is in this mailbox */
+       p = tmp->data + 18;
+       SKIPWS (p);
+       if (!ctx->id_hash)
+         ctx->id_hash = mutt_make_id_hash (ctx);
+       *cur = hash_find (ctx->id_hash, p);
+      }
+
+      /* Remove the X-Mutt-References: header field. */
+      next = tmp->next;
+      if (last)
+       last->next = tmp->next;
+      else
+       hdr->env->userhdrs = tmp->next;
+      tmp->next = NULL;
+      mutt_free_list (&tmp);
+      tmp = next;
+      if (*cur)
+       code |= SENDREPLY;
+    }
+    else if (ascii_strncasecmp ("X-Mutt-Fcc:", tmp->data, 11) == 0)
+    {
+      p = tmp->data + 11;
+      SKIPWS (p);
+      strfcpy (fcc, p, fcclen);
+      mutt_pretty_mailbox (fcc);
+
+      /* remove the X-Mutt-Fcc: header field */
+      next = tmp->next;
+      if (last)
+       last->next = tmp->next;
+      else
+       hdr->env->userhdrs = tmp->next;
+      tmp->next = NULL;
+      mutt_free_list (&tmp);
+      tmp = next;
+    }
+    else if ((WithCrypto & APPLICATION_PGP)
+             && (mutt_strncmp ("Pgp:", tmp->data, 4) == 0 /* this is generated
+                                                      * by old mutt versions
+                                                      */
+                 || mutt_strncmp ("X-Mutt-PGP:", tmp->data, 11) == 0))
+    {
+      hdr->security = mutt_parse_crypt_hdr (strchr (tmp->data, ':') + 1, 1);
+      hdr->security |= APPLICATION_PGP;
+       
+      /* remove the pgp field */
+      next = tmp->next;
+      if (last)
+       last->next = tmp->next;
+      else
+       hdr->env->userhdrs = tmp->next;
+      tmp->next = NULL;
+      mutt_free_list (&tmp);
+      tmp = next;
+    }
+    else if ((WithCrypto & APPLICATION_SMIME)
+             && mutt_strncmp ("X-Mutt-SMIME:", tmp->data, 13) == 0)
+    {
+      hdr->security = mutt_parse_crypt_hdr (strchr (tmp->data, ':') + 1, 1);
+      hdr->security |= APPLICATION_SMIME;
+       
+      /* remove the smime field */
+      next = tmp->next;
+      if (last)
+       last->next = tmp->next;
+      else
+       hdr->env->userhdrs = tmp->next;
+      tmp->next = NULL;
+      mutt_free_list (&tmp);
+      tmp = next;
+    }
+
+#ifdef MIXMASTER
+    else if (mutt_strncmp ("X-Mutt-Mix:", tmp->data, 11) == 0)
+    {
+      char *t;
+      mutt_free_list (&hdr->chain);
+      
+      t = strtok (tmp->data + 11, " \t\n");
+      while (t)
+      {
+       hdr->chain = mutt_add_list (hdr->chain, t);
+       t = strtok (NULL, " \t\n");
+      }
+      
+      next = tmp->next;
+      if (last) 
+       last->next = tmp->next;
+      else
+       hdr->env->userhdrs = tmp->next;
+      tmp->next = NULL;
+      mutt_free_list (&tmp);
+      tmp = next;
+    }
+#endif
+
+    else
+    {
+      last = tmp;
+      tmp = tmp->next;
+    }
+  }
+  return (code);
+}
+
+
+
+int mutt_parse_crypt_hdr (char *p, int set_signas)
+{
+  int pgp = 0;
+  char pgp_sign_as[LONG_STRING] = "\0", *q;
+  char smime_cryptalg[LONG_STRING] = "\0";
+
+  if (!WithCrypto)
+    return 0;
+   
+  SKIPWS (p);
+  for (; *p; p++)
+  {    
+     
+    switch (*p)
+    {
+      case 'e':
+      case 'E':
+        pgp |= ENCRYPT;
+        break;
+
+      case 's':    
+      case 'S':
+        pgp |= SIGN;
+        q = pgp_sign_as;
+      
+        if (*(p+1) == '<')
+        {
+          for (p += 2; 
+              *p && *p != '>' && q < pgp_sign_as + sizeof (pgp_sign_as) - 1;
+               *q++ = *p++)
+           ;
+
+          if (*p!='>')
+          {
+            mutt_error _("Illegal PGP header");
+            return 0;
+          }
+        }
+       
+        *q = '\0';
+        break;
+
+      /* This used to be the micalg parameter.
+       * 
+       * It's no longer needed, so we just skip the parameter in order
+       * to be able to recall old messages.
+       */
+      case 'm':
+      case 'M':
+        if(*(p+1) == '<')
+        {
+         for (p += 2; *p && *p != '>'; p++)
+           ;
+         if(*p != '>')
+         {
+           mutt_error _("Illegal PGP header");
+           return 0;
+         }
+       }
+
+       break;
+         
+         
+      case 'c':
+      case 'C':
+       q = smime_cryptalg;
+       
+        if(*(p+1) == '<')
+       {
+         for(p += 2; *p && *p != '>' && q < smime_cryptalg + sizeof(smime_cryptalg) - 1;
+             *q++ = *p++)
+           ;
+         
+         if(*p != '>')
+         {
+           mutt_error _("Illegal S/MIME header");
+           return 0;
+         }
+       }
+
+       *q = '\0';
+       break;
+
+      default:
+        mutt_error _("Illegal PGP header");
+        return 0;
+    }
+     
+  }
+  /* the cryptalg field must not be empty */
+  if ((WithCrypto & APPLICATION_SMIME) && *smime_cryptalg)
+    mutt_str_replace (&SmimeCryptAlg, smime_cryptalg);
+
+  if ((WithCrypto & APPLICATION_PGP) && (set_signas || *pgp_sign_as))
+    mutt_str_replace (&PgpSignAs, pgp_sign_as);
+
+  return pgp;
+}
+
+
+
+int mutt_prepare_template (FILE *fp, CONTEXT *ctx, HEADER *newhdr, HEADER *hdr,
+                              short weed)
+{
+  MESSAGE *msg = NULL;
+  char file[_POSIX_PATH_MAX];
+  BODY *b;
+  FILE *bfp;
+  
+  int rv = -1;
+  STATE s;
+  
+  memset (&s, 0, sizeof (s));
+  
+  if (!fp && (msg = mx_open_message (ctx, hdr->msgno)) == NULL)
+    return (-1);
+
+  if (!fp) fp = msg->fp;
+
+  bfp = fp;
+
+  /* parse the message header and MIME structure */
+
+  fseek (fp, hdr->offset, 0);
+  newhdr->offset = hdr->offset;
+  newhdr->env = mutt_read_rfc822_header (fp, newhdr, 1, weed);
+  newhdr->content->length = hdr->content->length;
+  mutt_parse_part (fp, newhdr->content);
+
+  FREE (&newhdr->env->message_id);
+  FREE (&newhdr->env->mail_followup_to); /* really? */
+
+  /* decrypt pgp/mime encoded messages */
+  /* XXX - what happens with S/MIME encrypted messages?!?!?  - tlr, 020909*/
+  if ((WithCrypto & APPLICATION_PGP)
+      && (hdr->security & APPLICATION_PGP) 
+      && mutt_is_multipart_encrypted (newhdr->content))
+  {
+    newhdr->security |= PGPENCRYPT;
+    if (!crypt_valid_passphrase(APPLICATION_PGP))
+      goto err;
+
+    mutt_message _("Invoking PGP...");
+    if (crypt_pgp_decrypt_mime (fp, &bfp, newhdr->content, &b) == -1 || b == NULL)
+    {
+ err:
+      mx_close_message (&msg);
+      mutt_free_envelope (&newhdr->env);
+      mutt_free_body (&newhdr->content);
+      mutt_error _("Decryption failed.");
+      return -1;
+    }
+
+    mutt_free_body (&newhdr->content);
+    newhdr->content = b;
+
+    mutt_clear_error ();
+  }
+
+  /* 
+   * remove a potential multipart/signed layer - useful when
+   * resending messages 
+   */
+  
+  if (WithCrypto && mutt_is_multipart_signed (newhdr->content))
+  {
+    newhdr->security |= SIGN;
+    if ((WithCrypto & APPLICATION_PGP)
+        && ascii_strcasecmp (mutt_get_parameter ("protocol", newhdr->content->parameter), "application/pgp-signature") == 0)
+      newhdr->security |= APPLICATION_PGP;
+    else if ((WithCrypto & APPLICATION_SMIME))
+      newhdr->security |= APPLICATION_SMIME;
+    
+    /* destroy the signature */
+    mutt_free_body (&newhdr->content->parts->next);
+    newhdr->content = mutt_remove_multipart (newhdr->content);
+  }
+
+  /* 
+   * We don't need no primary multipart.
+   * Note: We _do_ preserve messages!
+   * 
+   * XXX - we don't handle multipart/alternative in any 
+   * smart way when sending messages.  However, one may
+   * consider this a feature.
+   * 
+   */
+
+  if (newhdr->content->type == TYPEMULTIPART)
+    newhdr->content = mutt_remove_multipart (newhdr->content);
+
+  s.fpin = bfp;
+  
+  /* create temporary files for all attachments */
+  for (b = newhdr->content; b; b = b->next)
+  {
+    
+    /* what follows is roughly a receive-mode variant of
+     * mutt_get_tmp_attachment () from muttlib.c
+     */
+
+    file[0] = '\0';
+    if (b->filename)
+    {
+      strfcpy (file, b->filename, sizeof (file));
+      b->d_filename = safe_strdup (b->filename);
+    }
+    else
+    {
+      /* avoid Content-Disposition: header with temporary filename */
+      b->use_disp = 0;
+    }
+
+    /* set up state flags */
+
+    s.flags = 0;
+
+    if (b->type == TYPETEXT)
+    {
+      if (!ascii_strcasecmp ("yes", mutt_get_parameter ("x-mutt-noconv", b->parameter)))
+       b->noconv = 1;
+      else
+      {
+       s.flags |= M_CHARCONV;
+       b->noconv = 0;
+      }
+
+      mutt_delete_parameter ("x-mutt-noconv", &b->parameter);
+    }
+
+    mutt_adv_mktemp (file, sizeof(file));
+    if ((s.fpout = safe_fopen (file, "w")) == NULL)
+      goto bail;
+
+    
+    mutt_decode_attachment (b, &s);
+
+    if (safe_fclose (&s.fpout) != 0)
+      goto bail;
+
+    mutt_str_replace (&b->filename, file);
+    b->unlink = 1;
+
+    mutt_stamp_attachment (b);
+
+    mutt_free_body (&b->parts);
+    if (b->hdr) b->hdr->content = NULL; /* avoid dangling pointer */
+  }
+
+  rv = 0;
+  
+  bail:
+  
+  /* that's it. */
+  if (bfp != fp) fclose (bfp);
+  if (msg) mx_close_message (&msg);
+  
+  if (rv == -1)
+  {
+    mutt_free_envelope (&newhdr->env);
+    mutt_free_body (&newhdr->content);
+  }
+  
+  return rv;
+}
diff --git a/prepare b/prepare
new file mode 100755 (executable)
index 0000000..85df1ed
--- /dev/null
+++ b/prepare
@@ -0,0 +1,23 @@
+#!/bin/sh --
+
+if test x"$1" = x"-dev" ; then
+  include_deps=
+  shift
+else
+  include_deps="-i"
+fi
+
+if aclocal -I m4 && autoheader && (cd m4 && make -f Makefile.am.in ) \
+  && automake $include_deps && autoconf && ./configure $@
+then
+  echo
+  echo "The mutt source code was successfully prepared."
+  echo "Type make && make install to build and install mutt."
+  echo
+else
+  echo
+  echo "Some part of the preparation process failed."
+  echo "Please refer to doc/devel-notes.txt for details."
+  echo
+  exit 1
+fi
diff --git a/protos.h b/protos.h
new file mode 100644 (file)
index 0000000..c272e29
--- /dev/null
+++ b/protos.h
@@ -0,0 +1,490 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+
+#include "mbyte.h"
+
+#ifdef DEBUG
+#define dprint(N,X) do { if(debuglevel>=N) fprintf X; } while (0)
+#else
+#define dprint(N,X) 
+#endif
+
+#define MoreArgs(p) (*p->dptr && *p->dptr != ';' && *p->dptr != '#')
+
+#define mutt_make_string(A,B,C,D,E) _mutt_make_string(A,B,C,D,E,0)
+void _mutt_make_string (char *, size_t, const char *, CONTEXT *,
+       HEADER *, format_flag);
+
+int mutt_extract_token (BUFFER *, BUFFER *, int);
+void mutt_buffer_add (BUFFER*, const char*, size_t);
+void mutt_buffer_addstr (BUFFER*, const char*);
+void mutt_buffer_addch (BUFFER*, char);
+
+#define mutt_system(x) _mutt_system(x,0)
+int _mutt_system (const char *, int);
+
+#define mutt_next_thread(x) _mutt_aside_thread(x,1,0)
+#define mutt_previous_thread(x) _mutt_aside_thread(x,0,0)
+#define mutt_next_subthread(x) _mutt_aside_thread(x,1,1)
+#define mutt_previous_subthread(x) _mutt_aside_thread(x,0,1)
+int _mutt_aside_thread (HEADER *, short, short);
+
+#define mutt_collapse_thread(x,y) _mutt_traverse_thread (x,y,M_THREAD_COLLAPSE)
+#define mutt_uncollapse_thread(x,y) _mutt_traverse_thread (x,y,M_THREAD_UNCOLLAPSE)
+#define mutt_get_hidden(x,y)_mutt_traverse_thread (x,y,M_THREAD_GET_HIDDEN) 
+#define mutt_thread_contains_unread(x,y) _mutt_traverse_thread (x,y,M_THREAD_UNREAD)
+#define mutt_thread_next_unread(x,y) _mutt_traverse_thread(x,y,M_THREAD_NEXT_UNREAD)
+int _mutt_traverse_thread (CONTEXT *ctx, HEADER *hdr, int flag);
+
+
+#define mutt_new_parameter() safe_calloc (1, sizeof (PARAMETER))
+#define mutt_new_header() safe_calloc (1, sizeof (HEADER))
+#define mutt_new_envelope() safe_calloc (1, sizeof (ENVELOPE))
+#define mutt_new_enter_state() safe_calloc (1, sizeof (ENTER_STATE))
+
+typedef const char * format_t (char *, size_t, char, const char *, const char *, const char *, const char *, unsigned long, format_flag);
+
+void mutt_FormatString (char *, size_t, const char *, format_t *, unsigned long, format_flag);
+void mutt_parse_content_type (char *, BODY *);
+void mutt_generate_boundary (PARAMETER **);
+void mutt_delete_parameter (const char *attribute, PARAMETER **p);
+void mutt_set_parameter (const char *, const char *, PARAMETER **);
+
+
+FILE *mutt_open_read (const char *, pid_t *);
+
+void set_quadoption (int, int);
+int query_quadoption (int, const char *);
+int quadoption (int);
+
+ADDRESS *mutt_default_from (void);
+ADDRESS *mutt_get_address (ENVELOPE *, char **);
+ADDRESS *mutt_lookup_alias (const char *s);
+ADDRESS *mutt_remove_duplicates (ADDRESS *);
+ADDRESS *mutt_expand_aliases (ADDRESS *);
+ADDRESS *mutt_parse_adrlist (ADDRESS *, const char *);
+
+BODY *mutt_make_file_attach (const char *);
+BODY *mutt_make_message_attach (CONTEXT *, HEADER *, int);
+BODY *mutt_remove_multipart (BODY *);
+BODY *mutt_make_multipart (BODY *);
+BODY *mutt_new_body (void);
+BODY *mutt_parse_multipart (FILE *, const char *, long, int);
+BODY *mutt_parse_messageRFC822 (FILE *, BODY *);
+BODY *mutt_read_mime_header (FILE *, int);
+
+CONTENT *mutt_get_content_info (const char *fname, BODY *b);
+
+HASH *mutt_make_id_hash (CONTEXT *);
+HASH *mutt_make_subj_hash (CONTEXT *);
+
+LIST *mutt_make_references(ENVELOPE *e);
+LIST *mutt_parse_references (char *, int);
+
+ENVELOPE *mutt_read_rfc822_header (FILE *, HEADER *, short, short);
+HEADER *mutt_dup_header (HEADER *);
+
+ATTACHPTR **mutt_gen_attach_list (BODY *, int, ATTACHPTR **, short *, short *, int, int);
+
+time_t mutt_decrease_mtime (const char *, struct stat *);
+time_t mutt_local_tz (time_t);
+time_t mutt_mktime (struct tm *, int);
+time_t mutt_parse_date (const char *, HEADER *);
+int is_from (const char *, char *, size_t, time_t *);
+
+const char *mutt_attach_fmt (
+       char *dest,
+       size_t destlen,
+       char op,
+       const char *src,
+       const char *prefix,
+       const char *ifstring,
+       const char *elsestring,
+       unsigned long data,
+       format_flag flags);
+
+
+char *mutt_charset_hook (const char *);
+char *mutt_iconv_hook (const char *);
+char *mutt_expand_path (char *, size_t);
+char *_mutt_expand_path (char *, size_t, int);
+char *mutt_find_hook (int, const char *);
+char *mutt_gecos_name (char *, size_t, struct passwd *);
+char *mutt_gen_msgid (void);
+char *mutt_get_body_charset (char *, size_t, BODY *);
+const char *mutt_get_name (ADDRESS *);
+char *mutt_get_parameter (const char *, PARAMETER *);
+char *mutt_crypt_hook (ADDRESS *);
+char *mutt_make_date (char *, size_t);
+
+const char *mutt_make_version (void);
+
+const char *mutt_fqdn(short);
+
+REGEXP *mutt_compile_regexp (const char *, int);
+
+void mutt_account_hook (const char* url);
+void mutt_add_to_reference_headers (ENVELOPE *env, ENVELOPE *curenv, LIST ***pp, LIST ***qq);
+void mutt_adv_mktemp (char *, size_t);
+void mutt_alias_menu (char *, size_t, ALIAS *);
+void mutt_allow_interrupt (int);
+void mutt_attach_init (BODY *);
+void mutt_block_signals (void);
+void mutt_block_signals_system (void);
+void mutt_body_handler (BODY *, STATE *);
+int  mutt_bounce_message (FILE *fp, HEADER *, ADDRESS *);
+void mutt_buffy (char *, size_t);
+int  mutt_buffy_list (void);
+void mutt_canonical_charset (char *, size_t, const char *);
+void mutt_check_rescore (CONTEXT *);
+void mutt_clear_error (void);
+void mutt_create_alias (ENVELOPE *, ADDRESS *);
+void mutt_decode_attachment (BODY *, STATE *);
+void mutt_decode_base64 (STATE *s, long len, int istext, iconv_t cd);
+void mutt_default_save (char *, size_t, HEADER *);
+void mutt_display_address (ENVELOPE *);
+void mutt_display_sanitize (char *);
+void mutt_edit_content_type (HEADER *, BODY *, FILE *);
+void mutt_edit_file (const char *, const char *);
+void mutt_edit_headers (const char *, const char *, HEADER *, char *, size_t);
+void mutt_curses_error (const char *, ...);
+void mutt_curses_message (const char *, ...);
+void mutt_enter_command (void);
+void mutt_expand_aliases_env (ENVELOPE *);
+void mutt_expand_file_fmt (char *, size_t, const char *, const char *);
+void mutt_expand_fmt (char *, size_t, const char *, const char *);
+void mutt_expand_link (char *, const char *, const char *);
+void mutt_fix_reply_recipients (ENVELOPE *env);
+void mutt_folder_hook (char *);
+void mutt_format_string (char *, size_t, int, int, int, char, const char *, size_t, int);
+void mutt_format_s (char *, size_t, const char *, const char *);
+void mutt_format_s_tree (char *, size_t, const char *, const char *);
+void mutt_forward_intro (FILE *fp, HEADER *cur);
+void mutt_forward_trailer (FILE *fp);
+void mutt_free_alias (ALIAS **);
+void mutt_free_body (BODY **);
+void mutt_free_color (int fg, int bg);
+void mutt_free_enter_state (ENTER_STATE **);
+void mutt_free_envelope (ENVELOPE **);
+void mutt_free_header (HEADER **);
+void mutt_free_parameter (PARAMETER **);
+void mutt_free_regexp (REGEXP **);
+void mutt_generate_header (char *, size_t, HEADER *, int);
+void mutt_help (int);
+void mutt_draw_tree (CONTEXT *);
+void mutt_check_lookup_list (BODY *, char *, int);
+void mutt_make_attribution (CONTEXT *ctx, HEADER *cur, FILE *out);
+void mutt_make_forward_subject (ENVELOPE *env, CONTEXT *ctx, HEADER *cur);
+void mutt_make_help (char *, size_t, char *, int, int);
+void mutt_make_misc_reply_headers (ENVELOPE *env, CONTEXT *ctx, HEADER *cur, ENVELOPE *curenv);
+void mutt_make_post_indent (CONTEXT *ctx, HEADER *cur, FILE *out);
+void mutt_message_to_7bit (BODY *, FILE *);
+#define mutt_mktemp(a) _mutt_mktemp (a, __FILE__, __LINE__)
+void _mutt_mktemp (char *, const char *, int);
+void mutt_normalize_time (struct tm *);
+void mutt_paddstr (int, const char *);
+void mutt_parse_mime_message (CONTEXT *ctx, HEADER *);
+void mutt_parse_part (FILE *, BODY *);
+void mutt_perror (const char *);
+void mutt_prepare_envelope (ENVELOPE *, int);
+void mutt_unprepare_envelope (ENVELOPE *);
+void mutt_pretty_mailbox (char *);
+void mutt_pretty_size (char *, size_t, long);
+void mutt_pipe_message (HEADER *);
+void mutt_print_message (HEADER *);
+void mutt_print_patchlist (void);
+void mutt_query_exit (void);
+void mutt_query_menu (char *, size_t);
+void mutt_safe_path (char *s, size_t l, ADDRESS *a);
+void mutt_save_path (char *s, size_t l, ADDRESS *a);
+void mutt_score_message (CONTEXT *, HEADER *, int);
+void mutt_select_fcc (char *, size_t, HEADER *);
+#define mutt_select_file(A,B,C) _mutt_select_file(A,B,C,NULL,NULL)
+void _mutt_select_file (char *, size_t, int, char ***, int *);
+void mutt_message_hook (CONTEXT *, HEADER *, int);
+void _mutt_set_flag (CONTEXT *, HEADER *, int, int, int);
+#define mutt_set_flag(a,b,c,d) _mutt_set_flag(a,b,c,d,1)
+void mutt_set_followup_to (ENVELOPE *);
+void mutt_shell_escape (void);
+void mutt_show_error (void);
+void mutt_signal_init (void);
+void mutt_stamp_attachment (BODY *a);
+void mutt_tabs_to_spaces (char *);
+void mutt_tag_set_flag (int, int);
+void mutt_unblock_signals (void);
+void mutt_unblock_signals_system (int);
+void mutt_update_encoding (BODY *a);
+void mutt_update_tree (ATTACHPTR **, short);
+void mutt_version (void);
+void mutt_view_attachments (HEADER *);
+void mutt_write_references (LIST *, FILE *);
+void mutt_write_address_list (ADDRESS *adr, FILE *fp, int linelen, int display);
+void mutt_set_virtual (CONTEXT *);
+
+int mutt_addr_is_user (ADDRESS *);
+int mutt_addwch (wchar_t);
+int mutt_alias_complete (char *, size_t);
+int mutt_alloc_color (int fg, int bg);
+int mutt_any_key_to_continue (const char *);
+int mutt_buffy_check (int);
+int mutt_buffy_notify (void);
+int mutt_builtin_editor (const char *, HEADER *, HEADER *);
+int mutt_can_decode (BODY *);
+int mutt_change_flag (HEADER *, int);
+int mutt_check_alias_name (const char *, char *);
+int mutt_check_encoding (const char *);
+int mutt_check_key (const char *);
+int mutt_check_menu (const char *);
+int mutt_check_mime_type (const char *);
+int mutt_check_month (const char *);
+int mutt_check_overwrite (const char *, const char *, char *, size_t, int *, char **);
+int mutt_check_traditional_pgp (HEADER *, int *);
+int mutt_command_complete (char *, size_t, int, int);
+int mutt_var_value_complete (char *, size_t, int);
+int mutt_complete (char *, size_t);
+int mutt_compose_attachment (BODY *a);
+int mutt_copy_body (FILE *, BODY **, BODY *);
+int mutt_decode_save_attachment (FILE *, BODY *, char *, int, int);
+int mutt_display_message (HEADER *h);
+int mutt_edit_attachment(BODY *);
+int mutt_edit_message (CONTEXT *, HEADER *);
+int mutt_fetch_recips (ENVELOPE *out, ENVELOPE *in, int flags);
+int mutt_chscmp (const char *s, const char *chs);
+#define mutt_is_utf8(a) mutt_chscmp (a, "utf-8")
+#define mutt_is_us_ascii(a) mutt_chscmp (a, "us-ascii")
+int mutt_parent_message (CONTEXT *, HEADER *);
+int mutt_prepare_template(FILE*, CONTEXT *, HEADER *, HEADER *, short);
+int mutt_resend_message (FILE *, CONTEXT *, HEADER *);
+#define mutt_enter_fname(A,B,C,D,E) _mutt_enter_fname(A,B,C,D,E,0,NULL,NULL)
+int _mutt_enter_fname (const char *, char *, size_t, int *, int, int, char ***, int *);
+int  mutt_enter_string (char *buf, size_t buflen, int y, int x, int flags);
+int _mutt_enter_string (char *, size_t, int, int, int, int, char ***, int *, ENTER_STATE *);
+#define mutt_get_field(A,B,C,D) _mutt_get_field(A,B,C,D,0,NULL,NULL)
+int _mutt_get_field (char *, char *, size_t, int, int, char ***, int *);
+int mutt_get_hook_type (const char *);
+int mutt_get_password (char *, char *, size_t);
+int mutt_get_postponed (CONTEXT *, HEADER *, HEADER **, char *, size_t);
+int mutt_get_tmp_attachment (BODY *);
+int mutt_index_menu (void);
+int mutt_invoke_mta (ADDRESS *, ADDRESS *, ADDRESS *, ADDRESS *, const char *, int);
+int mutt_is_autoview (BODY *, const char *);
+int mutt_is_mail_list (ADDRESS *);
+int mutt_is_message_type(int, const char *);
+int mutt_is_list_cc (int, ADDRESS *, ADDRESS *);
+int mutt_is_list_recipient (int, ADDRESS *, ADDRESS *);
+int mutt_is_subscribed_list (ADDRESS *);
+int mutt_is_text_part (BODY *);
+int mutt_is_valid_mailbox (const char *);
+int mutt_lookup_mime_type (BODY *, const char *);
+int mutt_match_rx_list (const char *, RX_LIST *);
+int mutt_messages_in_thread (CONTEXT *, HEADER *, int);
+int mutt_multi_choice (char *prompt, char *letters);
+int mutt_needs_mailcap (BODY *);
+int mutt_num_postponed (int);
+int mutt_parse_bind (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+int mutt_parse_exec (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+int mutt_parse_color (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+int mutt_parse_uncolor (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+int mutt_parse_hook (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+int mutt_parse_macro (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+int mutt_parse_mailboxes (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+int mutt_parse_mono (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+int mutt_parse_unmono (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+int mutt_parse_push (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+int mutt_parse_rc_line (/* const */ char *, BUFFER *, BUFFER *);
+int mutt_parse_rfc822_line (ENVELOPE *e, HEADER *hdr, char *line, char *p,
+  short user_hdrs, short weed, short do_2047, LIST **lastp);
+int mutt_parse_score (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+int mutt_parse_unscore (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+int mutt_parse_unhook (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+int mutt_pattern_func (int, char *);
+int mutt_pipe_attachment (FILE *, BODY *, const char *, char *); 
+int mutt_print_attachment (FILE *, BODY *);
+int mutt_query_complete (char *, size_t);
+int mutt_query_variables (LIST *queries);
+int mutt_save_attachment (FILE *, BODY *, char *, int, HEADER *);
+void _mutt_save_message (HEADER *, CONTEXT *, int, int, int);
+int mutt_save_message (HEADER *, int, int, int, int *);
+int mutt_search_command (int, int);
+int mutt_strwidth (const char *);
+int mutt_compose_menu (HEADER *, char *, size_t, HEADER *);
+int mutt_thread_set_flag (HEADER *, int, int, int);
+int mutt_update_list_file (char *, char *, char *, char *);
+int mutt_user_is_recipient (HEADER *);
+void mutt_update_num_postponed (void);
+int mutt_view_attachment (FILE*, BODY *, int, HEADER *, ATTACHPTR **, short);
+int mutt_wait_filter (pid_t);
+int mutt_which_case (const char *);
+int mutt_write_fcc (const char *path, HEADER *hdr, const char *msgid, int, char *);
+int mutt_write_mime_body (BODY *, FILE *);
+int mutt_write_mime_header (BODY *, FILE *);
+int mutt_write_rfc822_header (FILE *, ENVELOPE *, BODY *, int, int);
+int mutt_yesorno (const char *, int);
+void mutt_set_header_color(CONTEXT *, HEADER *);
+void mutt_sleep (short);
+int mutt_save_confirm (const char  *, struct stat *);
+
+int mh_valid_message (const char *);
+
+pid_t mutt_create_filter (const char *, FILE **, FILE **, FILE **);
+pid_t mutt_create_filter_fd (const char *, FILE **, FILE **, FILE **, int, int, int);
+
+ADDRESS *alias_reverse_lookup (ADDRESS *);
+
+/* base64.c */
+void mutt_to_base64 (unsigned char*, const unsigned char*, size_t, size_t);
+int mutt_from_base64 (char*, const char*);
+
+/* utf8.c */
+int mutt_wctoutf8 (char *s, unsigned int c);
+
+#ifdef LOCALES_HACK
+#define IsPrint(c) (isprint((unsigned char)(c)) || \
+       ((unsigned char)(c) >= 0xa0))
+#define IsWPrint(wc) (iswprint(wc) || wc >= 0xa0)
+#else
+#define IsPrint(c) (isprint((unsigned char)(c)) || \
+       (option (OPTLOCALES) ? 0 : \
+       ((unsigned char)(c) >= 0xa0)))
+#define IsWPrint(wc) (iswprint(wc) || \
+       (option (OPTLOCALES) ? 0 : (wc >= 0xa0)))
+#endif
+
+#define new_pattern() safe_calloc(1, sizeof (pattern_t))
+
+int mutt_pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, HEADER *h);
+pattern_t *mutt_pattern_comp (/* const */ char *s, int flags, BUFFER *err);
+void mutt_check_simple (char *s, size_t len, const char *simple);
+void mutt_pattern_free (pattern_t **pat);
+
+/* ----------------------------------------------------------------------------
+ * Prototypes for broken systems
+ */
+
+#ifdef HAVE_SRAND48
+#define LRAND lrand48
+#define SRAND srand48
+#define DRAND drand48
+#else
+#define LRAND rand
+#define SRAND srand
+#define DRAND (double)rand
+#endif /* HAVE_SRAND48 */
+
+/* HP-UX, ConvexOS and UNIXware don't have this macro */
+#ifndef S_ISLNK
+#define S_ISLNK(x) (((x) & S_IFMT) == S_IFLNK ? 1 : 0)
+#endif
+
+int getdnsdomainname (char *, size_t);
+
+/* According to SCO support, this is how to detect SCO */
+#if defined (_M_UNIX) || defined (M_OS)
+#define SCO
+#endif
+
+/* SCO Unix uses chsize() instead of ftruncate() */
+#ifndef HAVE_FTRUNCATE
+#define ftruncate chsize
+#endif
+
+#ifndef HAVE_SNPRINTF
+extern int snprintf (char *, size_t, const char *, ...);
+#endif
+
+#ifndef HAVE_VSNPRINTF
+extern int vsnprintf (char *, size_t, const char *, va_list);
+#endif
+
+#ifndef HAVE_STRERROR
+#ifndef STDC_HEADERS
+extern int sys_nerr;
+extern char *sys_errlist[];
+#endif
+
+#define strerror(x) ((x) > 0 && (x) < sys_nerr) ? sys_errlist[(x)] : 0
+#endif /* !HAVE_STRERROR */
+
+#ifndef HAVE_MEMMOVE
+#define memmove(d,s,n) bcopy((s),(d),(n))
+#endif
+
+/* AIX doesn't define these in any headers (sigh) */
+int strcasecmp (const char *, const char *);
+int strncasecmp (const char *, const char *, size_t);
+
+#ifdef _AIX
+int setegid (gid_t);
+#endif /* _AIX */
+
+#ifndef STDC_HEADERS
+extern FILE *fdopen ();
+extern int system ();
+extern int puts ();
+extern int fputs ();
+extern int fputc ();
+extern int fseek ();
+extern char *strchr ();
+extern int getopt ();
+extern int fputs ();
+extern int fputc ();
+extern int fclose ();
+extern int fprintf();
+extern int printf ();
+extern int fgetc ();
+extern int tolower ();
+extern int toupper ();
+extern int sscanf ();
+extern size_t fread ();
+extern size_t fwrite ();
+extern int system ();
+extern int rename ();
+extern time_t time ();
+extern struct tm *localtime ();
+extern char *asctime ();
+extern char *strpbrk ();
+extern int fflush ();
+extern long lrand48 ();
+extern void srand48 ();
+extern time_t mktime ();
+extern int vsprintf ();
+extern int ungetc ();
+extern char *mktemp ();
+extern int ftruncate ();
+extern void *memset ();
+extern int pclose ();
+extern int socket ();
+extern int connect ();
+extern size_t strftime ();
+extern int lstat ();
+extern void rewind ();
+extern int readlink ();
+
+/* IRIX barfs on empty var decls because the system include file uses elipsis
+   in the declaration.  So declare all the args to avoid compiler errors.  This
+   should be harmless on other systems.  */
+int ioctl (int, int, ...);
+
+#endif
+
+/* unsorted */
+void ci_bounce_message (HEADER *, int *);
+int ci_send_message (int, HEADER *, char *, CONTEXT *, HEADER *);
+
+
diff --git a/query.c b/query.c
new file mode 100644 (file)
index 0000000..87e046a
--- /dev/null
+++ b/query.c
@@ -0,0 +1,527 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_menu.h"
+#include "mutt_idna.h"
+#include "mapping.h"
+#include "sort.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+typedef struct query
+{
+  ADDRESS *addr;
+  char *name;
+  char *other;
+  struct query *next;
+} QUERY;
+
+typedef struct entry
+{
+  int tagged;
+  QUERY *data;
+} ENTRY;
+
+static struct mapping_t QueryHelp[] = {
+  { N_("Exit"),   OP_EXIT },
+  { N_("Mail"),   OP_MAIL },
+  { N_("New Query"),  OP_QUERY },
+  { N_("Make Alias"), OP_CREATE_ALIAS },
+  { N_("Search"), OP_SEARCH },
+  { N_("Help"),   OP_HELP },
+  { NULL }
+};
+
+/* Variables for outsizing output format */
+static int FirstColumn;
+static int SecondColumn;
+
+static void query_menu (char *buf, size_t buflen, QUERY *results, int retbuf);
+
+static ADDRESS *result_to_addr (QUERY *r)
+{
+  static ADDRESS *tmp;
+  
+  tmp = rfc822_cpy_adr (r->addr);
+  
+  if(!tmp->next && !tmp->personal)
+    tmp->personal = safe_strdup (r->name);
+  
+  mutt_addrlist_to_idna (tmp, NULL);
+  return tmp;
+}
+
+static QUERY *run_query (char *s, int quiet)
+{
+  FILE *fp;
+  QUERY *first = NULL;
+  QUERY *cur = NULL;
+  char cmd[_POSIX_PATH_MAX];
+  char *buf = NULL;
+  size_t buflen;
+  int dummy = 0;
+  char msg[STRING];
+  char *p;
+  pid_t thepid;
+  int l;
+
+
+  mutt_expand_file_fmt (cmd, sizeof(cmd), QueryCmd, s);
+
+  if ((thepid = mutt_create_filter (cmd, NULL, &fp, NULL)) < 0)
+  {
+    dprint (1, (debugfile, "unable to fork command: %s", cmd));
+    return 0;
+  }
+  if (!quiet)
+    mutt_message _("Waiting for response...");
+  fgets (msg, sizeof (msg), fp);
+  if ((p = strrchr (msg, '\n')))
+    *p = '\0';
+  while ((buf = mutt_read_line (buf, &buflen, fp, &dummy)) != NULL)
+  {
+    if ((p = strtok(buf, "\t\n")))
+    {
+      if (first == NULL)
+      {
+       FirstColumn = 0;
+       SecondColumn = 0;
+       first = (QUERY *) safe_calloc (1, sizeof (QUERY));
+       cur = first;
+      }
+      else
+      {
+       cur->next = (QUERY *) safe_calloc (1, sizeof (QUERY));
+       cur = cur->next;
+      }
+
+      l = mutt_strwidth (p);
+      if (l > SecondColumn)
+       SecondColumn = l;
+       
+      cur->addr = rfc822_parse_adrlist (cur->addr, p);
+      p = strtok(NULL, "\t\n");
+      if (p)
+      {
+       l = mutt_strwidth (p);
+       if (l > FirstColumn)
+         FirstColumn = l;
+       cur->name = safe_strdup (p);
+       p = strtok(NULL, "\t\n");
+       if (p)
+       {
+         cur->other = safe_strdup (p);
+       }
+      }
+    }
+  }
+  FREE (&buf);
+  fclose (fp);
+  if (mutt_wait_filter (thepid))
+  {
+    dprint (1, (debugfile, "Error: %s\n", msg));
+    if (!quiet)  mutt_error ("%s", msg);
+  }
+  else
+  {
+    if (!quiet)
+      mutt_message ("%s", msg);
+  }
+  
+  return first;
+}
+
+static int query_search (MUTTMENU *m, regex_t *re, int n)
+{
+  ENTRY *table = (ENTRY *) m->data;
+
+  if (table[n].data->name && !regexec (re, table[n].data->name, 0, NULL, 0))
+    return 0;
+  if (table[n].data->other && !regexec (re, table[n].data->other, 0, NULL, 0))
+    return 0;
+  if (table[n].data->addr)
+  {
+    if (table[n].data->addr->personal && 
+       !regexec (re, table[n].data->addr->personal, 0, NULL, 0))
+      return 0;
+    if (table[n].data->addr->mailbox &&
+       !regexec (re, table[n].data->addr->mailbox, 0, NULL, 0))
+      return 0;
+#ifdef EXACT_ADDRESS
+    if (table[n].data->addr->val &&
+       !regexec (re, table[n].data->addr->val, 0, NULL, 0))
+      return 0;
+#endif
+  }
+  
+  return REG_NOMATCH;
+}
+
+/* This is the callback routine from mutt_menuLoop() which is used to generate
+ * a menu entry for the requested item number.
+ */
+#define QUERY_MIN_COLUMN_LENGHT 20 /* Must be < 70/2 */
+static void query_entry (char *s, size_t slen, MUTTMENU *m, int num)
+{
+  ENTRY *table = (ENTRY *) m->data;
+  char buf2[SHORT_STRING], buf[SHORT_STRING] = "";
+
+  /* need a query format ... hard coded constants are not good */
+  while (FirstColumn + SecondColumn > 70)
+  {
+    FirstColumn = FirstColumn * 3 / 4;
+    SecondColumn = SecondColumn * 3 / 4;
+    if (FirstColumn < QUERY_MIN_COLUMN_LENGHT)
+      FirstColumn = QUERY_MIN_COLUMN_LENGHT;
+    if (SecondColumn < QUERY_MIN_COLUMN_LENGHT)
+      SecondColumn = QUERY_MIN_COLUMN_LENGHT;
+  }
+
+  rfc822_write_address (buf, sizeof (buf), table[num].data->addr, 1);
+
+  mutt_format_string (buf2, sizeof (buf2),
+                     FirstColumn + 2, FirstColumn + 2,
+                     0, ' ', table[num].data->name,
+                     mutt_strlen (table[num].data->name), 0);
+
+  snprintf (s, slen, " %c %3d %s %-*.*s %s", 
+           table[num].tagged ? '*':' ',
+           num+1,
+           buf2,
+           SecondColumn+2,
+           SecondColumn+2,
+           buf,
+           NONULL (table[num].data->other));
+}
+
+static int query_tag (MUTTMENU *menu, int n, int m)
+{
+  ENTRY *cur = &((ENTRY *) menu->data)[n];
+  int ot = cur->tagged;
+  
+  cur->tagged = m >= 0 ? m : !cur->tagged;
+  return cur->tagged - ot;
+}
+
+int mutt_query_complete (char *buf, size_t buflen)
+{
+  QUERY *results = NULL;
+  ADDRESS *tmpa;
+
+  if (!QueryCmd)
+  {
+    mutt_error _("Query command not defined.");
+    return 0;
+  }
+
+  results = run_query (buf, 1);
+  if (results)
+  {
+    /* only one response? */
+    if (results->next == NULL)
+    {
+      tmpa = result_to_addr (results);
+      mutt_addrlist_to_local (tmpa);
+      buf[0] = '\0';
+      rfc822_write_address (buf, buflen, tmpa, 0);
+      rfc822_free_address (&tmpa);
+      mutt_clear_error ();
+      return (0);
+    }
+    /* multiple results, choose from query menu */
+    query_menu (buf, buflen, results, 1);
+  }
+  return (0);
+}
+
+void mutt_query_menu (char *buf, size_t buflen)
+{
+  if (!QueryCmd)
+  {
+    mutt_error _("Query command not defined.");
+    return;
+  }
+
+  if (buf == NULL)
+  {
+    char buffer[STRING] = "";
+
+    query_menu (buffer, sizeof (buffer), NULL, 0);
+  }
+  else
+  {
+    query_menu (buf, buflen, NULL, 1);
+  }
+}
+
+static void query_menu (char *buf, size_t buflen, QUERY *results, int retbuf)
+{
+  MUTTMENU *menu;
+  HEADER *msg = NULL;
+  ENTRY *QueryTable = NULL;
+  QUERY *queryp = NULL;
+  int i, done = 0;
+  int op;
+  char helpstr[SHORT_STRING];
+  char title[STRING];
+
+  snprintf (title, sizeof (title), _("Query")); /* FIXME */
+
+  menu = mutt_new_menu ();
+  menu->make_entry = query_entry;
+  menu->search = query_search;
+  menu->tag = query_tag;
+  menu->menu = MENU_QUERY;
+  menu->title = title;
+  menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_QUERY, QueryHelp);
+
+  if (results == NULL)
+  {
+    /* Prompt for Query */
+    if (mutt_get_field (_("Query: "), buf, buflen, 0) == 0 && buf[0])
+    {
+      results = run_query (buf, 0);
+    }
+  }
+
+  if (results)
+  {
+    snprintf (title, sizeof (title), _("Query '%s'"), buf);
+
+    /* count the number of results */
+    for (queryp = results; queryp; queryp = queryp->next)
+      menu->max++;
+
+    menu->data = QueryTable = (ENTRY *) safe_calloc (menu->max, sizeof (ENTRY));
+
+    for (i = 0, queryp = results; queryp; queryp = queryp->next, i++)
+      QueryTable[i].data = queryp;
+
+    while (!done)
+    {
+      switch ((op = mutt_menuLoop (menu)))
+      {
+       case OP_QUERY_APPEND:
+       case OP_QUERY:
+         if (mutt_get_field (_("Query: "), buf, buflen, 0) == 0 && buf[0])
+         {
+           QUERY *newresults = NULL;
+
+           newresults = run_query (buf, 0);
+
+           menu->redraw = REDRAW_FULL;
+           if (newresults)
+           {
+             snprintf (title, sizeof (title), _("Query '%s'"), buf);
+
+             if (op == OP_QUERY)
+             {
+               queryp = results;
+               while (queryp)
+               {
+                 rfc822_free_address (&queryp->addr);
+                 FREE (&queryp->name);
+                 FREE (&queryp->other);
+                 results = queryp->next;
+                 FREE (&queryp);
+                 queryp = results;
+               }
+               results = newresults;
+               FREE (&QueryTable);
+             }
+             else
+             {
+               /* append */
+               for (queryp = results; queryp->next; queryp = queryp->next);
+
+               queryp->next = newresults;
+             }
+
+
+             menu->current = 0;
+             mutt_menuDestroy (&menu);
+             menu = mutt_new_menu ();
+             menu->make_entry = query_entry;
+             menu->search = query_search;
+             menu->tag = query_tag;
+             menu->menu = MENU_QUERY;
+             menu->title = title;
+             menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_QUERY, QueryHelp);
+
+             /* count the number of results */
+             for (queryp = results; queryp; queryp = queryp->next)
+               menu->max++;
+
+             if (op == OP_QUERY)
+             {
+               menu->data = QueryTable = 
+                 (ENTRY *) safe_calloc (menu->max, sizeof (ENTRY));
+
+               for (i = 0, queryp = results; queryp; 
+                    queryp = queryp->next, i++)
+                 QueryTable[i].data = queryp;
+             }
+             else
+             {
+               int clear = 0;
+
+               /* append */
+               safe_realloc (&QueryTable, menu->max * sizeof (ENTRY));
+
+               menu->data = QueryTable;
+
+               for (i = 0, queryp = results; queryp; 
+                    queryp = queryp->next, i++)
+               {
+                 /* once we hit new entries, clear/init the tag */
+                 if (queryp == newresults)
+                   clear = 1;
+
+                 QueryTable[i].data = queryp;
+                 if (clear)
+                   QueryTable[i].tagged = 0;
+               }
+             }
+           }
+         }
+         break;
+
+       case OP_CREATE_ALIAS:
+         if (menu->tagprefix)
+         {
+           ADDRESS *naddr = NULL;
+
+           for (i = 0; i < menu->max; i++)
+             if (QueryTable[i].tagged)
+             {
+               ADDRESS *a = result_to_addr(QueryTable[i].data);
+               rfc822_append (&naddr, a);
+               rfc822_free_address (&a);
+             }
+
+           mutt_create_alias (NULL, naddr);
+         }
+         else
+         {
+           ADDRESS *a = result_to_addr(QueryTable[menu->current].data);
+           mutt_create_alias (NULL, a);
+           rfc822_free_address (&a);
+         }
+         break;
+
+       case OP_GENERIC_SELECT_ENTRY:
+         if (retbuf)
+         {
+           done = 2;
+           break;
+         }
+         /* fall through to OP_MAIL */
+
+       case OP_MAIL:
+         msg = mutt_new_header ();
+         msg->env = mutt_new_envelope ();
+         if (!menu->tagprefix)
+         {
+           msg->env->to = result_to_addr(QueryTable[menu->current].data);
+         }
+         else
+         {
+           for (i = 0; i < menu->max; i++)
+             if (QueryTable[i].tagged)
+             {
+               ADDRESS *a = result_to_addr(QueryTable[i].data);
+               rfc822_append (&msg->env->to, a);
+               rfc822_free_address (&a);
+             }
+         }
+         ci_send_message (0, msg, NULL, Context, NULL);
+         menu->redraw = REDRAW_FULL;
+         break;
+
+       case OP_EXIT:
+         done = 1;
+         break;
+      }
+    }
+
+    /* if we need to return the selected entries */
+    if (retbuf && (done == 2))
+    {
+      int tagged = 0;
+      size_t curpos = 0;
+
+      memset (buf, 0, buflen); 
+
+      /* check for tagged entries */
+      for (i = 0; i < menu->max; i++)
+      {
+       if (QueryTable[i].tagged)
+       {
+         if (curpos == 0)
+         {
+           ADDRESS *tmpa = result_to_addr (QueryTable[i].data);
+           mutt_addrlist_to_local (tmpa);
+           tagged = 1;
+           rfc822_write_address (buf, buflen, tmpa, 0);
+           curpos = mutt_strlen (buf);
+           rfc822_free_address (&tmpa);
+         }
+         else if (curpos + 2 < buflen)
+         {
+           ADDRESS *tmpa = result_to_addr (QueryTable[i].data);
+           mutt_addrlist_to_local (tmpa);
+           strcat (buf, ", "); /* __STRCAT_CHECKED__ */
+           rfc822_write_address ((char *) buf + curpos + 1, buflen - curpos - 1,
+                                 tmpa, 0);
+           curpos = mutt_strlen (buf);
+           rfc822_free_address (&tmpa);
+         }
+       }
+      }
+      /* then enter current message */
+      if (!tagged)
+      {
+       ADDRESS *tmpa = result_to_addr (QueryTable[menu->current].data);
+       mutt_addrlist_to_local (tmpa);
+       rfc822_write_address (buf, buflen, tmpa, 0);
+       rfc822_free_address (&tmpa);
+      }
+      
+    }
+
+    queryp = results;
+    while (queryp)
+    {
+      rfc822_free_address (&queryp->addr);
+      FREE (&queryp->name);
+      FREE (&queryp->other);
+      results = queryp->next;
+      FREE (&queryp);
+      queryp = results;
+    }
+    FREE (&QueryTable);
+    
+    /* tell whoever called me to redraw the screen when I return */
+    set_option (OPTNEEDREDRAW);
+  }
+
+  mutt_menuDestroy (&menu);
+}
diff --git a/recvattach.c b/recvattach.c
new file mode 100644 (file)
index 0000000..cfea588
--- /dev/null
@@ -0,0 +1,1232 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "mutt_menu.h"
+#include "rfc1524.h"
+#include "mime.h"
+#include "mailbox.h"
+#include "attach.h"
+#include "mapping.h"
+#include "mx.h"
+#include "copy.h"
+#include "mutt_crypt.h"
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/wait.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <errno.h>
+
+static const char *Mailbox_is_read_only = N_("Mailbox is read-only.");
+
+#define CHECK_READONLY if (Context->readonly) \
+{\
+    mutt_flushinp (); \
+    mutt_error _(Mailbox_is_read_only); \
+    break; \
+}
+
+static struct mapping_t AttachHelp[] = {
+  { N_("Exit"),  OP_EXIT },
+  { N_("Save"),  OP_SAVE },
+  { N_("Pipe"),  OP_PIPE },
+  { N_("Print"), OP_PRINT },
+  { N_("Help"),  OP_HELP },
+  { NULL }
+};
+
+void mutt_update_tree (ATTACHPTR **idx, short idxlen)
+{
+  char buf[STRING];
+  char *s;
+  int x;
+
+  for (x = 0; x < idxlen; x++)
+  {
+    idx[x]->num = x;
+    if (2 * (idx[x]->level + 2) < sizeof (buf))
+    {
+      if (idx[x]->level)
+      {
+       s = buf + 2 * (idx[x]->level - 1);
+       *s++ = (idx[x]->content->next) ? M_TREE_LTEE : M_TREE_LLCORNER;
+       *s++ = M_TREE_HLINE;
+       *s++ = M_TREE_RARROW;
+      }
+      else
+       s = buf;
+      *s = 0;
+    }
+
+    if (idx[x]->tree)
+    {
+      if (mutt_strcmp (idx[x]->tree, buf) != 0)
+       mutt_str_replace (&idx[x]->tree, buf);
+    }
+    else
+      idx[x]->tree = safe_strdup (buf);
+
+    if (2 * (idx[x]->level + 2) < sizeof (buf) && idx[x]->level)
+    {
+      s = buf + 2 * (idx[x]->level - 1);
+      *s++ = (idx[x]->content->next) ? '\005' : '\006';
+      *s++ = '\006';
+    }
+  }
+}
+
+ATTACHPTR **mutt_gen_attach_list (BODY *m,
+                                 int parent_type,
+                                 ATTACHPTR **idx,
+                                 short *idxlen,
+                                 short *idxmax,
+                                 int level,
+                                 int compose)
+{
+  ATTACHPTR *new;
+  int i;
+  
+  for (; m; m = m->next)
+  {
+    if (*idxlen == *idxmax)
+    {
+      safe_realloc (&idx, sizeof (ATTACHPTR *) * ((*idxmax) += 5));
+      for (i = *idxlen; i < *idxmax; i++)
+       idx[i] = NULL;
+    }
+
+    if (m->type == TYPEMULTIPART && m->parts
+       && (compose || (parent_type == -1 && ascii_strcasecmp ("alternative", m->subtype)))
+        && (!(WithCrypto & APPLICATION_PGP) || !mutt_is_multipart_encrypted(m))
+       )
+    {
+      idx = mutt_gen_attach_list (m->parts, m->type, idx, idxlen, idxmax, level, compose);
+    }
+    else
+    {
+      if (!idx[*idxlen])
+       idx[*idxlen] = (ATTACHPTR *) safe_calloc (1, sizeof (ATTACHPTR));
+
+      new = idx[(*idxlen)++];
+      new->content = m;
+      m->aptr = new;
+      new->parent_type = parent_type;
+      new->level = level;
+
+      /* We don't support multipart messages in the compose menu yet */
+      if (!compose && !m->collapsed && 
+         ((m->type == TYPEMULTIPART
+            && (!(WithCrypto & APPLICATION_PGP)
+                || !mutt_is_multipart_encrypted (m))
+           )
+          || mutt_is_message_type(m->type, m->subtype)))
+      {
+       idx = mutt_gen_attach_list (m->parts, m->type, idx, idxlen, idxmax, level + 1, compose);
+      }
+    }
+  }
+
+  if (level == 0)
+    mutt_update_tree (idx, *idxlen);
+
+  return (idx);
+}
+
+/* %c = character set: convert?
+ * %C = character set
+ * %D = deleted flag
+ * %d = description
+ * %e = MIME content-transfer-encoding
+ * %f = filename
+ * %I = content-disposition, either I (inline) or A (attachment)
+ * %t = tagged flag
+ * %T = tree chars
+ * %m = major MIME type
+ * %M = MIME subtype
+ * %n = attachment number
+ * %s = size
+ * %u = unlink 
+ */
+const char *mutt_attach_fmt (char *dest,
+    size_t destlen,
+    char op,
+    const char *src,
+    const char *prefix,
+    const char *ifstring,
+    const char *elsestring,
+    unsigned long data,
+    format_flag flags)
+{
+  char fmt[16];
+  char tmp[SHORT_STRING];
+  char charset[SHORT_STRING];
+  ATTACHPTR *aptr = (ATTACHPTR *) data;
+  int optional = (flags & M_FORMAT_OPTIONAL);
+  size_t l;
+  
+  switch (op)
+  {
+    case 'C':
+      if (!optional)
+      {
+       if (mutt_is_text_part (aptr->content) &&
+           mutt_get_body_charset (charset, sizeof (charset), aptr->content))
+         mutt_format_s (dest, destlen, prefix, charset);
+       else
+         mutt_format_s (dest, destlen, prefix, "");
+      }
+      else if (!mutt_is_text_part (aptr->content) ||
+              !mutt_get_body_charset (charset, sizeof (charset), aptr->content))
+        optional = 0;
+      break;
+    case 'c':
+      /* XXX */
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sc", prefix);
+       snprintf (dest, destlen, fmt, aptr->content->type != TYPETEXT ||
+                 aptr->content->noconv ? 'n' : 'c');
+      }
+      else if (aptr->content->type != TYPETEXT || aptr->content->noconv)
+        optional = 0;
+      break;
+    case 'd':
+      if(!optional)
+      {
+       if (aptr->content->description)
+       {
+         mutt_format_s (dest, destlen, prefix, aptr->content->description);
+         break;
+       }
+       if (mutt_is_message_type(aptr->content->type, aptr->content->subtype) &&
+           MsgFmt && aptr->content->hdr)
+       {
+         char s[SHORT_STRING];
+         _mutt_make_string (s, sizeof (s), MsgFmt, NULL, aptr->content->hdr,
+                            M_FORMAT_FORCESUBJ | M_FORMAT_MAKEPRINT | M_FORMAT_ARROWCURSOR);
+         if (*s)
+         {
+           mutt_format_s (dest, destlen, prefix, s);
+           break;
+         }
+       }
+       if (!aptr->content->filename)
+       {
+         mutt_format_s (dest, destlen, prefix, "<no description>");
+         break;
+       }
+      }
+      else if(aptr->content->description || 
+             (mutt_is_message_type (aptr->content->type, aptr->content->subtype)
+             && MsgFmt && aptr->content->hdr))
+        break;
+    /* FALLS THROUGH TO 'f' */
+    case 'f':
+      if(!optional)
+      {
+       if (aptr->content->filename && *aptr->content->filename == '/')
+       {
+         char path[_POSIX_PATH_MAX];
+         
+         strfcpy (path, aptr->content->filename, sizeof (path));
+         mutt_pretty_mailbox (path);
+         mutt_format_s (dest, destlen, prefix, path);
+       }
+       else
+         mutt_format_s (dest, destlen, prefix, NONULL (aptr->content->filename));
+      }
+      else if(!aptr->content->filename)
+        optional = 0;
+      break;
+    case 'D':
+      if(!optional)
+       snprintf (dest, destlen, "%c", aptr->content->deleted ? 'D' : ' ');
+      else if(!aptr->content->deleted)
+        optional = 0;
+      break;
+    case 'e':
+      if(!optional)
+       mutt_format_s (dest, destlen, prefix,
+                     ENCODING (aptr->content->encoding));
+      break;
+    case 'I':
+      if (!optional)
+      {
+         snprintf (dest, destlen, "%c",
+                 (aptr->content->disposition == DISPINLINE) ? 'I' : 'A');
+      }
+      break;
+    case 'm':
+      if(!optional)
+       mutt_format_s (dest, destlen, prefix, TYPE (aptr->content));
+      break;
+    case 'M':
+      if(!optional)
+       mutt_format_s (dest, destlen, prefix, aptr->content->subtype);
+      else if(!aptr->content->subtype)
+        optional = 0;
+      break;
+    case 'n':
+      if(!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (dest, destlen, fmt, aptr->num + 1);
+      }
+      break;
+    case 's':
+      if (flags & M_FORMAT_STAT_FILE)
+      {
+       struct stat st;
+       stat (aptr->content->filename, &st);
+       l = st.st_size;
+      }
+      else
+        l = aptr->content->length;
+      
+      if(!optional)
+      {
+       mutt_pretty_size (tmp, sizeof(tmp), l);
+       mutt_format_s (dest, destlen, prefix, tmp);
+      }
+      else if (l == 0)
+        optional = 0;
+
+      break;
+    case 't':
+      if(!optional)
+        snprintf (dest, destlen, "%c", aptr->content->tagged ? '*' : ' ');
+      else if(!aptr->content->tagged)
+        optional = 0;
+      break;
+    case 'T':
+      if(!optional)
+       mutt_format_s_tree (dest, destlen, prefix, NONULL (aptr->tree));
+      else if (!aptr->tree)
+        optional = 0;
+      break;
+    case 'u':
+      if(!optional)
+        snprintf (dest, destlen, "%c", aptr->content->unlink ? '-' : ' ');
+      else if (!aptr->content->unlink)
+        optional = 0;
+      break;
+    default:
+      *dest = 0;
+  }
+  
+  if (optional)
+    mutt_FormatString (dest, destlen, ifstring, mutt_attach_fmt, data, 0);
+  else if (flags & M_FORMAT_OPTIONAL)
+    mutt_FormatString (dest, destlen, elsestring, mutt_attach_fmt, data, 0);
+  return (src);
+}
+
+void attach_entry (char *b, size_t blen, MUTTMENU *menu, int num)
+{
+  mutt_FormatString (b, blen, NONULL (AttachFormat), mutt_attach_fmt, (unsigned long) (((ATTACHPTR **)menu->data)[num]), M_FORMAT_ARROWCURSOR);
+}
+
+int mutt_tag_attach (MUTTMENU *menu, int n, int m)
+{
+  BODY *cur = ((ATTACHPTR **) menu->data)[n]->content;
+  int ot = cur->tagged;
+  
+  cur->tagged = (m >= 0 ? m : !cur->tagged);
+  return cur->tagged - ot;
+}
+
+int mutt_is_message_type (int type, const char *subtype)
+{
+  if (type != TYPEMESSAGE)
+    return 0;
+
+  subtype = NONULL(subtype);
+  return (ascii_strcasecmp (subtype, "rfc822") == 0 || ascii_strcasecmp (subtype, "news") == 0);
+}
+
+static int mutt_query_save_attachment (FILE *fp, BODY *body, HEADER *hdr, char **directory)
+{
+  char *prompt;
+  char buf[_POSIX_PATH_MAX], tfile[_POSIX_PATH_MAX];
+  int is_message;
+  int append = 0;
+  int rc;
+  
+  if (body->filename) 
+  {
+    if (directory && *directory)
+      mutt_concat_path (buf, *directory, mutt_basename (body->filename), sizeof (buf));
+    else
+      strfcpy (buf, body->filename, sizeof (buf));
+  }
+  else if(body->hdr &&
+         body->encoding != ENCBASE64 &&
+         body->encoding != ENCQUOTEDPRINTABLE &&
+         mutt_is_message_type(body->type, body->subtype))
+    mutt_default_save(buf, sizeof(buf), body->hdr);
+  else
+    buf[0] = 0;
+
+  prompt = _("Save to file: ");
+  while (prompt)
+  {
+    if (mutt_get_field (prompt, buf, sizeof (buf), M_FILE | M_CLEAR) != 0
+       || !buf[0])
+      return -1;
+    
+    prompt = NULL;
+    mutt_expand_path (buf, sizeof (buf));
+    
+    is_message = (fp && 
+                 body->hdr && 
+                 body->encoding != ENCBASE64 && 
+                 body->encoding != ENCQUOTEDPRINTABLE && 
+                 mutt_is_message_type (body->type, body->subtype));
+    
+    if (is_message)
+    {
+      struct stat st;
+      
+      /* check to make sure that this file is really the one the user wants */
+      if ((rc = mutt_save_confirm (buf, &st)) == 1)
+      {
+       prompt = _("Save to file: ");
+       continue;
+      } 
+      else if (rc == -1)
+       return -1;
+      strfcpy(tfile, buf, sizeof(tfile));
+    }
+    else
+    {
+      if ((rc = mutt_check_overwrite (body->filename, buf, tfile, sizeof (tfile), &append, directory)) == -1)
+       return -1;
+      else if (rc == 1)
+      {
+       prompt = _("Save to file: ");
+       continue;
+      }
+    }
+    
+    mutt_message _("Saving...");
+    if (mutt_save_attachment (fp, body, tfile, append, (hdr || !is_message) ? hdr : body->hdr) == 0)
+    {
+      mutt_message _("Attachment saved.");
+      return 0;
+    }
+    else
+    {
+      prompt = _("Save to file: ");
+      continue;
+    }
+  }
+  return 0;
+}
+    
+void mutt_save_attachment_list (FILE *fp, int tag, BODY *top, HEADER *hdr, MUTTMENU *menu)
+{
+  char buf[_POSIX_PATH_MAX], tfile[_POSIX_PATH_MAX];
+  char *directory = NULL;
+  int rc = 1;
+  int last = menu ? menu->current : -1;
+  FILE *fpout;
+
+  buf[0] = 0;
+
+  for (; top; top = top->next)
+  {
+    if (!tag || top->tagged)
+    {
+      if (!option (OPTATTACHSPLIT))
+      {
+       if (!buf[0])
+       {
+         int append = 0;
+
+         strfcpy (buf, NONULL (top->filename), sizeof (buf));
+         if (mutt_get_field (_("Save to file: "), buf, sizeof (buf),
+                                   M_FILE | M_CLEAR) != 0 || !buf[0])
+           return;
+         mutt_expand_path (buf, sizeof (buf));
+         if (mutt_check_overwrite (top->filename, buf, tfile,
+                                   sizeof (tfile), &append, NULL))
+           return;
+         rc = mutt_save_attachment (fp, top, tfile, append, hdr);
+         if (rc == 0 && AttachSep && (fpout = fopen (tfile,"a")) != NULL)
+         {
+           fprintf(fpout, "%s", AttachSep);
+           fclose (fpout);
+         }
+       }
+       else
+       {
+         rc = mutt_save_attachment (fp, top, tfile, M_SAVE_APPEND, hdr);
+         if (rc == 0 && AttachSep && (fpout = fopen (tfile,"a")) != NULL)
+         {
+           fprintf(fpout, "%s", AttachSep);
+           fclose (fpout);
+         }
+       }
+      }
+      else 
+      {
+       if (tag && menu && top->aptr)
+       {
+         menu->oldcurrent = menu->current;
+         menu->current = top->aptr->num;
+         menu_check_recenter (menu);
+         menu->redraw |= REDRAW_MOTION;
+
+         menu_redraw (menu);
+       }
+       if (mutt_query_save_attachment (fp, top, hdr, &directory) == -1)
+         break;
+      }
+    }
+    else if (top->parts)
+      mutt_save_attachment_list (fp, 1, top->parts, hdr, menu);
+    if (!tag)
+      break;
+  }
+
+  FREE (&directory);
+
+  if (tag && menu)
+  {
+    menu->oldcurrent = menu->current;
+    menu->current = last;
+    menu_check_recenter (menu);
+    menu->redraw |= REDRAW_MOTION;
+  }
+  
+  if (!option (OPTATTACHSPLIT) && (rc == 0))
+    mutt_message _("Attachment saved.");
+}
+
+static void
+mutt_query_pipe_attachment (char *command, FILE *fp, BODY *body, int filter)
+{
+  char tfile[_POSIX_PATH_MAX];
+  char warning[STRING+_POSIX_PATH_MAX];
+
+  if (filter)
+  {
+    snprintf (warning, sizeof (warning),
+             _("WARNING!  You are about to overwrite %s, continue?"),
+             body->filename);
+    if (mutt_yesorno (warning, M_NO) != M_YES) {
+      CLEARLINE (LINES-1);
+      return;
+    }
+    mutt_mktemp (tfile);
+  }
+  else
+    tfile[0] = 0;
+
+  if (mutt_pipe_attachment (fp, body, command, tfile))
+  {
+    if (filter)
+    {
+      mutt_unlink (body->filename);
+      mutt_rename_file (tfile, body->filename);
+      mutt_update_encoding (body);
+      mutt_message _("Attachment filtered.");
+    }
+  }
+  else
+  {
+    if (filter && tfile[0])
+      mutt_unlink (tfile);
+  }
+}
+
+static void pipe_attachment (FILE *fp, BODY *b, STATE *state)
+{
+  FILE *ifp;
+
+  if (fp)
+  {
+    state->fpin = fp;
+    mutt_decode_attachment (b, state);
+    if (AttachSep)
+      state_puts (AttachSep, state);
+  }
+  else
+  {
+    if ((ifp = fopen (b->filename, "r")) == NULL)
+    {
+      mutt_perror ("fopen");
+      return;
+    }
+    mutt_copy_stream (ifp, state->fpout);
+    fclose (ifp);
+    if (AttachSep)
+      state_puts (AttachSep, state);
+  }
+}
+
+static void
+pipe_attachment_list (char *command, FILE *fp, int tag, BODY *top, int filter,
+                     STATE *state)
+{
+  for (; top; top = top->next)
+  {
+    if (!tag || top->tagged)
+    {
+      if (!filter && !option (OPTATTACHSPLIT))
+       pipe_attachment (fp, top, state);
+      else
+       mutt_query_pipe_attachment (command, fp, top, filter);
+    }
+    else if (top->parts)
+      pipe_attachment_list (command, fp, tag, top->parts, filter, state);
+    if (!tag)
+      break;
+  }
+}
+
+void mutt_pipe_attachment_list (FILE *fp, int tag, BODY *top, int filter)
+{
+  STATE state;
+  char buf[SHORT_STRING];
+  pid_t thepid;
+
+  if (fp)
+    filter = 0; /* sanity check: we can't filter in the recv case yet */
+
+  buf[0] = 0;
+  memset (&state, 0, sizeof (STATE));
+
+  if (mutt_get_field ((filter ? _("Filter through: ") : _("Pipe to: ")),
+                                 buf, sizeof (buf), M_CMD) != 0 || !buf[0])
+    return;
+
+  mutt_expand_path (buf, sizeof (buf));
+
+  if (!filter && !option (OPTATTACHSPLIT))
+  {
+    mutt_endwin (NULL);
+    thepid = mutt_create_filter (buf, &state.fpout, NULL, NULL);
+    pipe_attachment_list (buf, fp, tag, top, filter, &state);
+    fclose (state.fpout);
+    if (mutt_wait_filter (thepid) != 0 || option (OPTWAITKEY))
+      mutt_any_key_to_continue (NULL);
+  }
+  else
+    pipe_attachment_list (buf, fp, tag, top, filter, &state);
+}
+
+static int can_print (BODY *top, int tag)
+{
+  char type [STRING];
+
+  for (; top; top = top->next)
+  {
+    snprintf (type, sizeof (type), "%s/%s", TYPE (top), top->subtype);
+    if (!tag || top->tagged)
+    {
+      if (!rfc1524_mailcap_lookup (top, type, NULL, M_PRINT))
+      {
+       if (ascii_strcasecmp ("text/plain", top->subtype) &&
+           ascii_strcasecmp ("application/postscript", top->subtype))
+       {
+         if (!mutt_can_decode (top))
+         {
+           mutt_error (_("I dont know how to print %s attachments!"), type);
+           return (0);
+         }
+       }
+      }
+    }
+    else if (top->parts)
+      return (can_print (top->parts, tag));
+    if (!tag)
+      break;
+  }
+  return (1);
+}
+
+static void print_attachment_list (FILE *fp, int tag, BODY *top, STATE *state)
+{
+  char type [STRING];
+
+
+  for (; top; top = top->next)
+  {
+    if (!tag || top->tagged)
+    {
+      snprintf (type, sizeof (type), "%s/%s", TYPE (top), top->subtype);
+      if (!option (OPTATTACHSPLIT) && !rfc1524_mailcap_lookup (top, type, NULL, M_PRINT))
+      {
+       if (!ascii_strcasecmp ("text/plain", top->subtype) ||
+           !ascii_strcasecmp ("application/postscript", top->subtype))
+         pipe_attachment (fp, top, state);
+       else if (mutt_can_decode (top))
+       {
+         /* decode and print */
+
+         char newfile[_POSIX_PATH_MAX] = "";
+         FILE *ifp;
+
+         mutt_mktemp (newfile);
+         if (mutt_decode_save_attachment (fp, top, newfile, M_PRINTING, 0) == 0)
+         {
+           if ((ifp = fopen (newfile, "r")) != NULL)
+           {
+             mutt_copy_stream (ifp, state->fpout);
+             fclose (ifp);
+             if (AttachSep)
+               state_puts (AttachSep, state);
+           }
+         }
+         mutt_unlink (newfile);
+       }
+      }
+      else
+       mutt_print_attachment (fp, top);
+    }
+    else if (top->parts)
+      print_attachment_list (fp, tag, top->parts, state);
+    if (!tag)
+      return;
+  }
+}
+
+void mutt_print_attachment_list (FILE *fp, int tag, BODY *top)
+{
+  STATE state;
+  
+  pid_t thepid;
+  if (query_quadoption (OPT_PRINT, tag ? _("Print tagged attachment(s)?") : _("Print attachment?")) != M_YES)
+    return;
+
+  if (!option (OPTATTACHSPLIT))
+  {
+    if (!can_print (top, tag))
+      return;
+    mutt_endwin (NULL);
+    memset (&state, 0, sizeof (STATE));
+    thepid = mutt_create_filter (NONULL (PrintCmd), &state.fpout, NULL, NULL);
+    print_attachment_list (fp, tag, top, &state);
+    fclose (state.fpout);
+    if (mutt_wait_filter (thepid) != 0 || option (OPTWAITKEY))
+      mutt_any_key_to_continue (NULL);
+  }
+  else
+    print_attachment_list (fp, tag, top, &state);
+}
+
+void
+mutt_update_attach_index (BODY *cur, ATTACHPTR ***idxp,
+                                     short *idxlen, short *idxmax,
+                                     MUTTMENU *menu)
+{
+  ATTACHPTR **idx = *idxp;
+  while (--(*idxlen) >= 0)
+    idx[(*idxlen)]->content = NULL;
+  *idxlen = 0;
+
+  idx = *idxp = mutt_gen_attach_list (cur, -1, idx, idxlen, idxmax, 0, 0);
+  
+  menu->max  = *idxlen;
+  menu->data = *idxp;
+
+  if (menu->current >= menu->max)
+    menu->current = menu->max - 1;
+  menu_check_recenter (menu);
+  menu->redraw |= REDRAW_INDEX;
+  
+}
+
+
+int
+mutt_attach_display_loop (MUTTMENU *menu, int op, FILE *fp, HEADER *hdr,
+                         BODY *cur, ATTACHPTR ***idxp, short *idxlen, short *idxmax,
+                         int recv)
+{
+  ATTACHPTR **idx = *idxp;
+#if 0
+  int old_optweed = option (OPTWEED);
+  set_option (OPTWEED);
+#endif
+  
+  do
+  {
+    switch (op)
+    {
+      case OP_DISPLAY_HEADERS:
+       toggle_option (OPTWEED);
+       /* fall through */
+
+      case OP_VIEW_ATTACH:
+       op = mutt_view_attachment (fp, idx[menu->current]->content, M_REGULAR,
+                                  hdr, idx, *idxlen);
+       break;
+
+      case OP_NEXT_ENTRY:
+      case OP_MAIN_NEXT_UNDELETED: /* hack */
+       if (menu->current < menu->max - 1)
+       {
+         menu->current++;
+         op = OP_VIEW_ATTACH;
+       }
+       else
+         op = OP_NULL;
+       break;
+      case OP_PREV_ENTRY:
+      case OP_MAIN_PREV_UNDELETED: /* hack */
+       if (menu->current > 0)
+       {
+         menu->current--;
+         op = OP_VIEW_ATTACH;
+       }
+       else
+         op = OP_NULL;
+       break;
+      case OP_EDIT_TYPE:
+       /* when we edit the content-type, we should redisplay the attachment
+          immediately */
+       mutt_edit_content_type (hdr, idx[menu->current]->content, fp);
+        if (idxmax)
+        {
+         mutt_update_attach_index (cur, idxp, idxlen, idxmax, menu);
+         idx = *idxp;
+       }
+        op = OP_VIEW_ATTACH;
+       break;
+      /* functions which are passed through from the pager */
+      case OP_CHECK_TRADITIONAL:
+        if (!(WithCrypto & APPLICATION_PGP))
+        {
+          op = OP_NULL;
+          break;
+        }
+        /* fall through */
+      case OP_ATTACH_COLLAPSE:
+        if (recv)
+          return op;
+      default:
+       op = OP_NULL;
+    }
+  }
+  while (op != OP_NULL);
+
+#if 0
+  if (option (OPTWEED) != old_optweed)
+    toggle_option (OPTWEED);
+#endif
+  return op;
+}
+
+static void attach_collapse (BODY *b, short collapse, short init, short just_one)
+{
+  short i;
+  for (; b; b = b->next)
+  {
+    i = init || b->collapsed;
+    if (i && option (OPTDIGESTCOLLAPSE) && b->type == TYPEMULTIPART
+       && !ascii_strcasecmp (b->subtype, "digest"))
+      attach_collapse (b->parts, 1, 1, 0);
+    else if (b->type == TYPEMULTIPART || mutt_is_message_type (b->type, b->subtype))
+      attach_collapse (b->parts, collapse, i, 0);
+    b->collapsed = collapse;
+    if (just_one)
+      return;
+  }
+}
+
+void mutt_attach_init (BODY *b)
+{
+  for (; b; b = b->next)
+  {
+    b->tagged = 0;
+    b->collapsed = 0;
+    if (b->parts) 
+      mutt_attach_init (b->parts);
+  }
+}
+
+static const char *Function_not_permitted = N_("Function not permitted in attach-message mode.");
+
+#define CHECK_ATTACH if(option(OPTATTACHMSG)) \
+                    {\
+                       mutt_flushinp (); \
+                       mutt_error _(Function_not_permitted); \
+                       break; \
+                    }
+
+
+
+
+void mutt_view_attachments (HEADER *hdr)
+{
+  int secured = 0;
+  int need_secured = 0;
+
+  char helpstr[SHORT_STRING];
+  MUTTMENU *menu;
+  BODY *cur;
+  MESSAGE *msg;
+  FILE *fp;
+  ATTACHPTR **idx = NULL;
+  short idxlen = 0;
+  short idxmax = 0;
+  int flags = 0;
+  int op = OP_NULL;
+  
+  /* make sure we have parsed this message */
+  mutt_parse_mime_message (Context, hdr);
+
+  mutt_message_hook (Context, hdr, M_MESSAGEHOOK);
+  
+  if ((msg = mx_open_message (Context, hdr->msgno)) == NULL)
+    return;
+
+
+  if (WithCrypto && ((hdr->security & ENCRYPT) ||
+                     (mutt_is_application_smime(hdr->content) & SMIMEOPAQUE)))
+  {
+    need_secured  = 1;
+
+    if ((hdr->security & ENCRYPT) && !crypt_valid_passphrase(hdr->security))
+    {
+      mx_close_message (&msg);
+      return;
+    }
+    if ((WithCrypto & APPLICATION_SMIME) && hdr->security & APPLICATION_SMIME)
+    {
+      if (hdr->env)
+         crypt_smime_getkeys (hdr->env);
+
+      if (mutt_is_application_smime(hdr->content))
+       secured = ! crypt_smime_decrypt_mime (msg->fp, &fp,
+                                              hdr->content, &cur);
+      else
+       need_secured = 0;
+    }
+    if ((WithCrypto & APPLICATION_PGP) && hdr->security & APPLICATION_PGP)
+    {
+      if (mutt_is_multipart_encrypted(hdr->content))
+       secured = !crypt_pgp_decrypt_mime (msg->fp, &fp, hdr->content, &cur);
+      else
+       need_secured = 0;
+    }
+
+    if (need_secured && !secured)
+    {
+      mx_close_message (&msg);
+      mutt_error _("Can't decrypt encrypted message!");
+      return;
+    }
+  }
+  
+  if (!WithCrypto || !need_secured)
+  {
+    fp = msg->fp;
+    cur = hdr->content;
+  }
+
+  menu = mutt_new_menu ();
+  menu->menu = MENU_ATTACH;
+  menu->title = _("Attachments");
+  menu->make_entry = attach_entry;
+  menu->tag = mutt_tag_attach;
+  menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_ATTACH, AttachHelp);
+
+  mutt_attach_init (cur);
+  attach_collapse (cur, 0, 1, 0);
+  mutt_update_attach_index (cur, &idx, &idxlen, &idxmax, menu);
+
+  FOREVER
+  {
+    if (op == OP_NULL)
+      op = mutt_menuLoop (menu);
+    switch (op)
+    {
+      case OP_ATTACH_VIEW_MAILCAP:
+       mutt_view_attachment (fp, idx[menu->current]->content, M_MAILCAP,
+                             hdr, idx, idxlen);
+       menu->redraw = REDRAW_FULL;
+       break;
+
+      case OP_ATTACH_VIEW_TEXT:
+       mutt_view_attachment (fp, idx[menu->current]->content, M_AS_TEXT,
+                             hdr, idx, idxlen);
+       menu->redraw = REDRAW_FULL;
+       break;
+
+      case OP_DISPLAY_HEADERS:
+      case OP_VIEW_ATTACH:
+        op = mutt_attach_display_loop (menu, op, fp, hdr, cur, &idx, &idxlen, &idxmax, 1);
+        menu->redraw = REDRAW_FULL;
+        continue;
+
+      case OP_ATTACH_COLLAPSE:
+        if (!idx[menu->current]->content->parts)
+        {
+         mutt_error _("There are no subparts to show!");
+         break;
+       }
+        if (!idx[menu->current]->content->collapsed)
+         attach_collapse (idx[menu->current]->content, 1, 0, 1);
+        else
+         attach_collapse (idx[menu->current]->content, 0, 1, 1);
+        mutt_update_attach_index (cur, &idx, &idxlen, &idxmax, menu);
+        break;
+      
+      case OP_FORGET_PASSPHRASE:
+        crypt_forget_passphrase ();
+        break;
+
+      case OP_EXTRACT_KEYS:
+        if ((WithCrypto & APPLICATION_PGP))
+        {
+          crypt_pgp_extract_keys_from_attachment_list (fp, menu->tagprefix, 
+                   menu->tagprefix ? cur : idx[menu->current]->content);
+          menu->redraw = REDRAW_FULL;
+        }
+        break;
+      
+      case OP_CHECK_TRADITIONAL:
+        if ((WithCrypto & APPLICATION_PGP)
+            && crypt_pgp_check_traditional (fp, menu->tagprefix ? cur
+                                              : idx[menu->current]->content,
+                                      menu->tagprefix))
+        {
+         hdr->security = crypt_query (cur);
+         menu->redraw = REDRAW_FULL;
+       }
+        break;
+
+      case OP_PRINT:
+       mutt_print_attachment_list (fp, menu->tagprefix, 
+                 menu->tagprefix ? cur : idx[menu->current]->content);
+       break;
+
+      case OP_PIPE:
+       mutt_pipe_attachment_list (fp, menu->tagprefix, 
+                 menu->tagprefix ? cur : idx[menu->current]->content, 0);
+       break;
+
+      case OP_SAVE:
+       mutt_save_attachment_list (fp, menu->tagprefix, 
+                 menu->tagprefix ?  cur : idx[menu->current]->content, hdr, menu);
+
+        if (!menu->tagprefix && option (OPTRESOLVE) && menu->current < menu->max - 1)
+         menu->current++;
+      
+        menu->redraw = REDRAW_MOTION_RESYNCH | REDRAW_FULL;
+       break;
+
+      case OP_DELETE:
+       CHECK_READONLY;
+
+#ifdef USE_POP
+       if (Context->magic == M_POP)
+       {
+         mutt_flushinp ();
+         mutt_error _("Can't delete attachment from POP server.");
+         break;
+       }
+#endif
+
+#ifdef USE_NNTP
+       if (Context->magic == M_NNTP)
+       {
+         mutt_flushinp ();
+         mutt_error _("Can't delete attachment from newsserver.");
+         break;
+       }
+#endif
+
+        if (WithCrypto && hdr->security)
+        {
+         mutt_message _(
+           "Deletion of attachments from encrypted messages is unsupported.");
+       }
+        else
+        {
+         if (!menu->tagprefix)
+         {
+           if (idx[menu->current]->parent_type == TYPEMULTIPART)
+           {
+             idx[menu->current]->content->deleted = 1;
+             if (option (OPTRESOLVE) && menu->current < menu->max - 1)
+             {
+               menu->current++;
+               menu->redraw = REDRAW_MOTION_RESYNCH;
+             }
+             else
+               menu->redraw = REDRAW_CURRENT;
+           }
+           else
+             mutt_message _(
+               "Only deletion of multipart attachments is supported.");
+         }
+         else
+         {
+           int x;
+
+           for (x = 0; x < menu->max; x++)
+           {
+             if (idx[x]->content->tagged)
+             {
+               if (idx[x]->parent_type == TYPEMULTIPART)
+               {
+                 idx[x]->content->deleted = 1;
+                 menu->redraw = REDRAW_INDEX;
+               }
+               else
+                 mutt_message _(
+                   "Only deletion of multipart attachments is supported.");
+             }
+           }
+         }
+       }
+        break;
+
+      case OP_UNDELETE:
+       CHECK_READONLY;
+       if (!menu->tagprefix)
+       {
+        idx[menu->current]->content->deleted = 0;
+        if (option (OPTRESOLVE) && menu->current < menu->max - 1)
+        {
+          menu->current++;
+          menu->redraw = REDRAW_MOTION_RESYNCH;
+        }
+        else
+          menu->redraw = REDRAW_CURRENT;
+       }
+       else
+       {
+        int x;
+
+        for (x = 0; x < menu->max; x++)
+        {
+          if (idx[x]->content->tagged)
+          {
+            idx[x]->content->deleted = 0;
+            menu->redraw = REDRAW_INDEX;
+          }
+        }
+       }
+       break;
+
+      case OP_RESEND:
+        CHECK_ATTACH;
+        mutt_attach_resend (fp, hdr, idx, idxlen,
+                            menu->tagprefix ? NULL : idx[menu->current]->content);
+        menu->redraw = REDRAW_FULL;
+       break;
+      
+      case OP_BOUNCE_MESSAGE:
+        CHECK_ATTACH;
+        mutt_attach_bounce (fp, hdr, idx, idxlen,
+                            menu->tagprefix ? NULL : idx[menu->current]->content);
+        menu->redraw = REDRAW_FULL;
+       break;
+
+      case OP_FORWARD_MESSAGE:
+        CHECK_ATTACH;
+        mutt_attach_forward (fp, hdr, idx, idxlen,
+                            menu->tagprefix ? NULL : idx[menu->current]->content, 0);
+        menu->redraw = REDRAW_FULL;
+        break;
+      
+#ifdef USE_NNTP
+      case OP_FORWARD_TO_GROUP:
+       CHECK_ATTACH;
+       mutt_attach_forward (fp, hdr, idx, idxlen,
+               menu->tagprefix ? NULL : idx[menu->current]->content, SENDNEWS);
+       menu->redraw = REDRAW_FULL;
+       break;
+
+      case OP_FOLLOWUP:
+       CHECK_ATTACH;
+
+       if (!idx[menu->current]->content->hdr->env->followup_to ||
+           mutt_strcasecmp (idx[menu->current]->content->hdr->env->followup_to, "poster") ||
+           query_quadoption (OPT_FOLLOWUPTOPOSTER,_("Reply by mail as poster prefers?")) != M_YES)
+       {
+         mutt_attach_reply (fp, hdr, idx, idxlen,
+               menu->tagprefix ? NULL : idx[menu->current]->content,
+               SENDNEWS|SENDREPLY);
+         menu->redraw = REDRAW_FULL;
+         break;
+       }
+#endif
+
+      case OP_REPLY:
+      case OP_GROUP_REPLY:
+      case OP_LIST_REPLY:
+
+        CHECK_ATTACH;
+      
+        flags = SENDREPLY | 
+         (op == OP_GROUP_REPLY ? SENDGROUPREPLY : 0) |
+         (op == OP_LIST_REPLY ? SENDLISTREPLY : 0);
+        mutt_attach_reply (fp, hdr, idx, idxlen, 
+                          menu->tagprefix ? NULL : idx[menu->current]->content, flags);
+       menu->redraw = REDRAW_FULL;
+       break;
+
+      case OP_EDIT_TYPE:
+       mutt_edit_content_type (hdr, idx[menu->current]->content, fp);
+        mutt_update_attach_index (cur, &idx, &idxlen, &idxmax, menu);
+       break;
+
+      case OP_EXIT:
+       mx_close_message (&msg);
+       hdr->attach_del = 0;
+       while (idxmax-- > 0)
+       {
+         if (!idx[idxmax])
+           continue;
+         if (idx[idxmax]->content && idx[idxmax]->content->deleted)
+           hdr->attach_del = 1;
+         if (idx[idxmax]->content)
+           idx[idxmax]->content->aptr = NULL;
+         FREE (&idx[idxmax]->tree);
+         FREE (&idx[idxmax]);
+       }
+       if (hdr->attach_del)
+         hdr->changed = 1;
+       FREE (&idx);
+       idxmax = 0;
+
+        if (WithCrypto && need_secured && secured)
+       {
+         fclose (fp);
+         mutt_free_body (&cur);
+       }
+
+       mutt_menuDestroy  (&menu);
+       return;
+    }
+
+    op = OP_NULL;
+  }
+
+  /* not reached */
+}
diff --git a/recvcmd.c b/recvcmd.c
new file mode 100644 (file)
index 0000000..92e3cba
--- /dev/null
+++ b/recvcmd.c
@@ -0,0 +1,939 @@
+/*
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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. 
+ */
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "mutt_menu.h"
+#include "rfc1524.h"
+#include "mime.h"
+#include "mailbox.h"
+#include "attach.h"
+#include "mapping.h"
+#include "mx.h"
+#include "copy.h"
+#include "mutt_idna.h"
+
+/* some helper functions to verify that we are exclusively operating
+ * on message/rfc822 attachments
+ */
+
+static short check_msg (BODY * b, short err)
+{
+  if (!mutt_is_message_type (b->type, b->subtype))
+  {
+    if (err)
+      mutt_error _("You may only bounce message/rfc822 parts.");
+    return -1;
+  }
+  return 0;
+}
+
+static short check_all_msg (ATTACHPTR ** idx, short idxlen,
+                           BODY * cur, short err)
+{
+  short i;
+
+  if (cur && check_msg (cur, err) == -1)
+    return -1;
+  else if (!cur)
+  {
+    for (i = 0; i < idxlen; i++)
+    {
+      if (idx[i]->content->tagged)
+      {
+       if (check_msg (idx[i]->content, err) == -1)
+         return -1;
+      }
+    }
+  }
+  return 0;
+}
+
+
+/* can we decode all tagged attachments? */
+
+static short check_can_decode (ATTACHPTR ** idx, short idxlen, 
+                             BODY * cur)
+{
+  short i;
+
+  if (cur)
+    return mutt_can_decode (cur);
+
+  for (i = 0; i < idxlen; i++)
+    if (idx[i]->content->tagged && !mutt_can_decode (idx[i]->content))
+      return 0;
+
+  return 1;
+}
+
+static short count_tagged (ATTACHPTR **idx, short idxlen)
+{
+  short count = 0;
+  short i;
+  
+  for (i = 0; i < idxlen; i++)
+    if (idx[i]->content->tagged)
+      count++;
+  
+  return count;
+}
+
+/* count the number of tagged children below a multipart or message
+ * attachment.
+ */
+
+static short count_tagged_children (ATTACHPTR ** idx, 
+                                   short idxlen, short i)
+{
+  short level = idx[i]->level;
+  short count = 0;
+
+  while ((++i < idxlen) && (level < idx[i]->level))
+    if (idx[i]->content->tagged)
+      count++;
+
+  return count;
+}
+
+
+\f
+/**
+ **
+ ** The bounce function, from the attachment menu
+ **
+ **/
+
+void mutt_attach_bounce (FILE * fp, HEADER * hdr, 
+          ATTACHPTR ** idx, short idxlen, BODY * cur)
+{
+  short i;
+  char prompt[STRING];
+  char buf[HUGE_STRING];
+  char *err = NULL;
+  ADDRESS *adr = NULL;
+  int ret = 0;
+  int p   = 0;
+
+  if (check_all_msg (idx, idxlen, cur, 1) == -1)
+    return;
+
+  /* one or more messages? */
+  p = (cur || count_tagged (idx, idxlen) == 1);
+
+  if (p)
+    strfcpy (prompt, _("Bounce message to: "), sizeof (prompt));
+  else
+    strfcpy (prompt, _("Bounce tagged messages to: "), sizeof (prompt));
+
+  buf[0] = '\0';
+  if (mutt_get_field (prompt, buf, sizeof (buf), M_ALIAS) 
+      || buf[0] == '\0')
+    return;
+
+  if (!(adr = rfc822_parse_adrlist (adr, buf)))
+  {
+    mutt_error _("Error parsing address!");
+    return;
+  }
+
+  adr = mutt_expand_aliases (adr);
+  
+  if (mutt_addrlist_to_idna (adr, &err) < 0)
+  {
+    mutt_error (_("Bad IDN: '%s'"), err);
+    FREE (&err);
+    rfc822_free_address (&adr);
+    return;
+  }
+  
+  buf[0] = 0;
+  rfc822_write_address (buf, sizeof (buf), adr, 1);
+
+#define extra_space (15+7+2)
+  /*
+   * See commands.c.
+   */
+  snprintf (prompt, sizeof (prompt) - 4, 
+   (p ? _("Bounce message to %s") : _("Bounce messages to %s")), buf);
+  
+  if (mutt_strwidth (prompt) > COLS - extra_space)
+  {
+    mutt_format_string (prompt, sizeof (prompt) - 4,
+                       0, COLS-extra_space, 0, 0,
+                       prompt, sizeof (prompt), 0);
+    strncat (prompt, "...?", sizeof (prompt));
+  }
+  else
+    strncat (prompt, "?", sizeof (prompt));
+
+  if (query_quadoption (OPT_BOUNCE, prompt) != M_YES)
+  {
+    rfc822_free_address (&adr);
+    CLEARLINE (LINES - 1);
+    mutt_message (p ? _("Message not bounced.") : _("Messages not bounced."));
+    return;
+  }
+  
+  CLEARLINE (LINES - 1);
+  
+  if (cur)
+    ret = mutt_bounce_message (fp, cur->hdr, adr);
+  else
+  {
+    for (i = 0; i < idxlen; i++)
+    {
+      if (idx[i]->content->tagged)
+       if (mutt_bounce_message (fp, idx[i]->content->hdr, adr))
+         ret = 1;
+    }
+  }
+
+  if (!ret)
+    mutt_message (p ? _("Message bounced.") : _("Messages bounced."));
+  else
+    mutt_error (p ? _("Error bouncing message!") : _("Error bouncing messages!"));
+}
+
+
+\f
+/**
+ **
+ ** resend-message, from the attachment menu 
+ **
+ **
+ **/
+
+void mutt_attach_resend (FILE * fp, HEADER * hdr, ATTACHPTR ** idx, 
+                        short idxlen, BODY * cur)
+{
+  short i;
+
+  if (check_all_msg (idx, idxlen, cur, 1) == -1)
+    return;
+
+  if (cur)
+    mutt_resend_message (fp, Context, cur->hdr);
+  else
+  {
+    for (i = 0; i < idxlen; i++)
+      if (idx[i]->content->tagged)
+       mutt_resend_message (fp, Context, idx[i]->content->hdr);
+  }
+}
+
+\f
+/**
+ **
+ ** forward-message, from the attachment menu 
+ **
+ **/
+  
+/* try to find a common parent message for the tagged attachments. */
+
+static HEADER *find_common_parent (ATTACHPTR ** idx, short idxlen,
+                                  short nattach)
+{
+  short i;
+  short nchildren;
+
+  for (i = 0; i < idxlen; i++)
+    if (idx[i]->content->tagged)
+      break;
+  
+  while (--i >= 0)
+  {
+    if (mutt_is_message_type (idx[i]->content->type, idx[i]->content->subtype))
+    {
+      nchildren = count_tagged_children (idx, idxlen, i);
+      if (nchildren == nattach)
+       return idx[i]->content->hdr;
+    }
+  }
+
+  return NULL;
+}
+
+/* 
+ * check whether attachment #i is a parent of the attachment
+ * pointed to by cur
+ * 
+ * Note: This and the calling procedure could be optimized quite a 
+ * bit.  For now, it's not worth the effort.
+ */
+
+static int is_parent (short i, ATTACHPTR **idx, short idxlen, BODY *cur)
+{
+  short level = idx[i]->level;
+
+  while ((++i < idxlen) && idx[i]->level > level)
+  {
+    if (idx[i]->content == cur)
+      return 1;
+  }
+
+  return 0;
+}
+
+static HEADER *find_parent (ATTACHPTR **idx, short idxlen, BODY *cur, short nattach)
+{
+  short i;
+  HEADER *parent = NULL;
+  
+  if (cur)
+  {
+    for (i = 0; i < idxlen; i++)
+    {
+      if (mutt_is_message_type (idx[i]->content->type, idx[i]->content->subtype) 
+         && is_parent (i, idx, idxlen, cur))
+       parent = idx[i]->content->hdr;
+      if (idx[i]->content == cur)
+       break;
+    }
+  }
+  else if (nattach)
+    parent = find_common_parent (idx, idxlen, nattach);
+  
+  return parent;
+}
+
+static void include_header (int quote, FILE * ifp,
+                           HEADER * hdr, FILE * ofp,
+                           char *_prefix)
+{
+  int chflags = CH_DECODE;
+  char prefix[SHORT_STRING];
+  
+  if (option (OPTWEED))
+    chflags |= CH_WEED | CH_REORDER;
+
+  if (quote)
+  {
+    if (_prefix)
+      strfcpy (prefix, _prefix, sizeof (prefix));
+    else if (!option (OPTTEXTFLOWED))
+      _mutt_make_string (prefix, sizeof (prefix), NONULL (Prefix), 
+                        Context, hdr, 0);
+    else
+      strfcpy (prefix, ">", sizeof (prefix));
+
+    chflags |= CH_PREFIX;
+  }
+  
+  mutt_copy_header (ifp, hdr, ofp, chflags, quote ? prefix : NULL);
+}
+
+/* Attach all the body parts which can't be decoded. 
+ * This code is shared by forwarding and replying. */
+
+static BODY ** copy_problematic_attachments (FILE *fp,
+                                            BODY **last, 
+                                            ATTACHPTR **idx, 
+                                            short idxlen,
+                                            short force)
+{
+  short i;
+  
+  for (i = 0; i < idxlen; i++)
+  {
+    if (idx[i]->content->tagged && 
+       (force || !mutt_can_decode (idx[i]->content)))
+    {
+      if (mutt_copy_body (fp, last, idx[i]->content) == -1)
+       return NULL;            /* XXXXX - may lead to crashes */
+      last = &((*last)->next);
+    }
+  }
+  return last;
+}
+
+/* 
+ * forward one or several MIME bodies 
+ * (non-message types)
+ */
+
+static void attach_forward_bodies (FILE * fp, HEADER * hdr,
+                                  ATTACHPTR ** idx, short idxlen,
+                                  BODY * cur,
+                                  short nattach, int flags)
+{
+  short i;
+  short mime_fwd_all = 0;
+  short mime_fwd_any = 1;
+  HEADER *parent = NULL;
+  HEADER *tmphdr = NULL;
+  BODY **last;
+  char tmpbody[_POSIX_PATH_MAX];
+  FILE *tmpfp = NULL;
+
+  char prefix[STRING];
+
+  int rc = 0;
+
+  STATE st;
+
+  /* 
+   * First, find the parent message.
+   * Note: This could be made an option by just
+   * putting the following lines into an if block.
+   */
+
+
+  parent = find_parent (idx, idxlen, cur, nattach);
+  
+  if (parent == NULL)
+    parent = hdr;
+
+
+  tmphdr = mutt_new_header ();
+  tmphdr->env = mutt_new_envelope ();
+  mutt_make_forward_subject (tmphdr->env, Context, parent);
+
+  mutt_mktemp (tmpbody);
+  if ((tmpfp = safe_fopen (tmpbody, "w")) == NULL)
+  {
+    mutt_error (_("Can't open temporary file %s."), tmpbody);
+    return;
+  }
+
+  mutt_forward_intro (tmpfp, parent);
+
+  /* prepare the prefix here since we'll need it later. */
+
+  if (option (OPTFORWQUOTE))
+  {
+    if (!option (OPTTEXTFLOWED))
+      _mutt_make_string (prefix, sizeof (prefix), NONULL (Prefix), Context,
+                        parent, 0);
+    else
+      strfcpy (prefix, ">", sizeof (prefix));
+  }
+    
+  include_header (option (OPTFORWQUOTE), fp, parent,
+                 tmpfp, prefix);
+
+
+  /* 
+   * Now, we have prepared the first part of the message body: The
+   * original message's header. 
+   *
+   * The next part is more interesting: either include the message bodies,
+   * or attach them.
+   */
+
+  if ((!cur || mutt_can_decode (cur)) &&
+      (rc = query_quadoption (OPT_MIMEFWD, 
+                             _("Forward as attachments?"))) == M_YES)
+    mime_fwd_all = 1;
+  else if (rc == -1)
+    goto bail;
+
+  /* 
+   * shortcut MIMEFWDREST when there is only one attachment.  Is 
+   * this intuitive?
+   */
+
+  if (!mime_fwd_all && !cur && (nattach > 1) 
+      && !check_can_decode (idx, idxlen, cur))
+  {
+    if ((rc = query_quadoption (OPT_MIMEFWDREST,
+_("Can't decode all tagged attachments.  MIME-forward the others?"))) == -1)
+      goto bail;
+    else if (rc == M_NO)
+      mime_fwd_any = 0;
+  }
+
+  /* initialize a state structure */
+  
+  memset (&st, 0, sizeof (st));
+  
+  if (option (OPTFORWQUOTE))
+    st.prefix = prefix;
+  st.flags = M_CHARCONV;
+  if (option (OPTWEED))
+    st.flags |= M_WEED;
+  st.fpin = fp;
+  st.fpout = tmpfp;
+
+  /* where do we append new MIME parts? */
+  last = &tmphdr->content;
+
+  if (cur)
+  {
+    /* single body case */
+
+    if (!mime_fwd_all && mutt_can_decode (cur))
+    {
+      mutt_body_handler (cur, &st);
+      state_putc ('\n', &st);
+    }
+    else
+    {
+      if (mutt_copy_body (fp, last, cur) == -1)
+       goto bail;
+      last = &((*last)->next);
+    }
+  }
+  else
+  {
+    /* multiple body case */
+
+    if (!mime_fwd_all)
+    {
+      for (i = 0; i < idxlen; i++)
+      {
+       if (idx[i]->content->tagged && mutt_can_decode (idx[i]->content))
+       {
+         mutt_body_handler (idx[i]->content, &st);
+         state_putc ('\n', &st);
+       }
+      }
+    }
+
+    if (mime_fwd_any && 
+       (last = copy_problematic_attachments (fp, last, idx, idxlen, mime_fwd_all)) == NULL)
+      goto bail;
+  }
+  
+  mutt_forward_trailer (tmpfp);
+  
+  fclose (tmpfp);
+  tmpfp = NULL;
+
+  /* now that we have the template, send it. */
+  ci_send_message (flags, tmphdr, tmpbody, NULL, parent);
+  return;
+  
+  bail:
+  
+  if (tmpfp)
+  {
+    fclose (tmpfp);
+    mutt_unlink (tmpbody);
+  }
+
+  mutt_free_header (&tmphdr);
+}
+
+
+/* 
+ * Forward one or several message-type attachments. This 
+ * is different from the previous function
+ * since we want to mimic the index menu's behaviour.
+ *
+ * Code reuse from ci_send_message is not possible here -
+ * ci_send_message relies on a context structure to find messages,
+ * while, on the attachment menu, messages are referenced through
+ * the attachment index. 
+ */
+
+static void attach_forward_msgs (FILE * fp, HEADER * hdr, 
+              ATTACHPTR ** idx, short idxlen, BODY * cur, int flags)
+{
+  HEADER *curhdr = NULL;
+  HEADER *tmphdr;
+  short i;
+  int rc;
+
+  BODY **last;
+  char tmpbody[_POSIX_PATH_MAX];
+  FILE *tmpfp = NULL;
+
+  int cmflags = 0;
+  int chflags = CH_XMIT;
+  
+  if (cur)
+    curhdr = cur->hdr;
+  else
+  {
+    for (i = 0; i < idxlen; i++)
+      if (idx[i]->content->tagged)
+      {
+       curhdr = idx[i]->content->hdr;
+       break;
+      }
+  }
+
+  tmphdr = mutt_new_header ();
+  tmphdr->env = mutt_new_envelope ();
+  mutt_make_forward_subject (tmphdr->env, Context, curhdr);
+
+
+  tmpbody[0] = '\0';
+
+  if ((rc = query_quadoption (OPT_MIMEFWD, 
+                _("Forward MIME encapsulated?"))) == M_NO)
+  {
+    
+    /* no MIME encapsulation */
+    
+    mutt_mktemp (tmpbody);
+    if (!(tmpfp = safe_fopen (tmpbody, "w")))
+    {
+      mutt_error (_("Can't create %s."), tmpbody);
+      mutt_free_header (&tmphdr);
+      return;
+    }
+
+    if (option (OPTFORWQUOTE))
+    {
+      chflags |= CH_PREFIX;
+      cmflags |= M_CM_PREFIX;
+    }
+
+    if (option (OPTFORWDECODE))
+    {
+      cmflags |= M_CM_DECODE | M_CM_CHARCONV;
+      if (option (OPTWEED))
+      {
+       chflags |= CH_WEED | CH_REORDER;
+       cmflags |= M_CM_WEED;
+      }
+    }
+    
+    
+    if (cur)
+    {
+      /* mutt_message_hook (cur->hdr, M_MESSAGEHOOK); */ 
+      mutt_forward_intro (tmpfp, cur->hdr);
+      _mutt_copy_message (tmpfp, fp, cur->hdr, cur->hdr->content, cmflags, chflags);
+      mutt_forward_trailer (tmpfp);
+    }
+    else
+    {
+      for (i = 0; i < idxlen; i++)
+      {
+       if (idx[i]->content->tagged)
+       {
+         /* mutt_message_hook (idx[i]->content->hdr, M_MESSAGEHOOK); */ 
+         mutt_forward_intro (tmpfp, idx[i]->content->hdr);
+         _mutt_copy_message (tmpfp, fp, idx[i]->content->hdr,
+                             idx[i]->content->hdr->content, cmflags, chflags);
+         mutt_forward_trailer (tmpfp);
+       }
+      }
+    }
+    fclose (tmpfp);
+  }
+  else if (rc == M_YES)        /* do MIME encapsulation - we don't need to do much here */
+  {
+    last = &tmphdr->content;
+    if (cur)
+      mutt_copy_body (fp, last, cur);
+    else
+    {
+      for (i = 0; i < idxlen; i++)
+       if (idx[i]->content->tagged)
+       {
+         mutt_copy_body (fp, last, idx[i]->content);
+         last = &((*last)->next);
+       }
+    }
+  }
+  else
+    mutt_free_header (&tmphdr);
+
+  ci_send_message (flags, tmphdr, *tmpbody ? tmpbody : NULL, 
+                  NULL, curhdr);
+
+}
+
+void mutt_attach_forward (FILE * fp, HEADER * hdr, 
+                         ATTACHPTR ** idx, short idxlen, BODY * cur, int flags)
+{
+  short nattach;
+  
+
+  if (check_all_msg (idx, idxlen, cur, 0) == 0)
+    attach_forward_msgs (fp, hdr, idx, idxlen, cur, flags);
+  else
+  {
+    nattach = count_tagged (idx, idxlen);
+    attach_forward_bodies (fp, hdr, idx, idxlen, cur, nattach, flags);
+  }
+}
+
+
+\f
+/**
+ ** 
+ ** the various reply functions, from the attachment menu
+ **
+ **
+ **/
+
+/* Create the envelope defaults for a reply.
+ *
+ * This function can be invoked in two ways.
+ * 
+ * Either, parent is NULL.  In this case, all tagged bodies are of a message type,
+ * and the header information is fetched from them.
+ * 
+ * Or, parent is non-NULL.  In this case, cur is the common parent of all the
+ * tagged attachments.
+ * 
+ * Note that this code is horribly similar to envelope_defaults () from send.c.
+ */
+  
+static int
+attach_reply_envelope_defaults (ENVELOPE *env, ATTACHPTR **idx, short idxlen,
+                               HEADER *parent, int flags)
+{
+  ENVELOPE *curenv = NULL;
+  HEADER *curhdr = NULL;
+  short i;
+  
+  if (!parent)
+  {
+    for (i = 0; i < idxlen; i++)
+    {
+      if (idx[i]->content->tagged)
+      {
+       curhdr = idx[i]->content->hdr;
+       curenv = curhdr->env;
+       break;
+      }
+    }
+  }
+  else
+  {
+    curenv = parent->env;
+    curhdr = parent;
+  }
+
+  if (curenv == NULL  ||  curhdr == NULL)
+  {
+    mutt_error _("Can't find any tagged messages.");
+    return -1;
+  }
+
+#ifdef USE_NNTP
+  if ((flags & SENDNEWS))
+  {
+    /* in case followup set Newsgroups: with Followup-To: if it present */
+    if (!env->newsgroups && curenv &&
+       mutt_strcasecmp (curenv->followup_to, "poster"))
+      env->newsgroups = safe_strdup (curenv->followup_to);
+  }
+  else
+#endif
+  {
+    if (parent)
+    {
+      if (mutt_fetch_recips (env, curenv, flags) == -1)
+       return -1;
+    }
+    else
+    {
+      for (i = 0; i < idxlen; i++)
+      {
+       if (idx[i]->content->tagged
+           && mutt_fetch_recips (env, idx[i]->content->hdr->env, flags) == -1)
+         return -1;
+      }
+    }
+
+    if ((flags & SENDLISTREPLY) && !env->to)
+    {
+      mutt_error _("No mailing lists found!");
+      return (-1);
+    }
+
+    mutt_fix_reply_recipients (env);
+  }
+  mutt_make_misc_reply_headers (env, Context, curhdr, curenv);
+
+  if (parent)
+    mutt_add_to_reference_headers (env, curenv, NULL, NULL);
+  else
+  {
+    LIST **p = NULL, **q = NULL;
+    
+    for (i = 0; i < idxlen; i++)
+    {
+      if (idx[i]->content->tagged)
+       mutt_add_to_reference_headers (env, idx[i]->content->hdr->env, &p, &q);
+    }
+  }
+  
+  return 0;
+}
+
+
+/*  This is _very_ similar to send.c's include_reply(). */
+
+static void attach_include_reply (FILE *fp, FILE *tmpfp, HEADER *cur, int flags)
+{
+  int cmflags = M_CM_PREFIX | M_CM_DECODE | M_CM_CHARCONV;
+  int chflags = CH_DECODE;
+
+  /* mutt_message_hook (cur, M_MESSAGEHOOK); */ 
+  
+  mutt_make_attribution (Context, cur, tmpfp);
+  
+  if (!option (OPTHEADER))
+    cmflags |= M_CM_NOHEADER;
+  if (option (OPTWEED))
+  {
+    chflags |= CH_WEED;
+    cmflags |= M_CM_WEED;
+  }
+
+  _mutt_copy_message (tmpfp, fp, cur, cur->content, cmflags, chflags);
+  mutt_make_post_indent (Context, cur, tmpfp);
+}
+  
+void mutt_attach_reply (FILE * fp, HEADER * hdr, 
+                       ATTACHPTR ** idx, short idxlen, BODY * cur, 
+                       int flags)
+{
+  short mime_reply_any = 0;
+  
+  short nattach = 0;
+  HEADER *parent = NULL;
+  HEADER *tmphdr = NULL;
+  short i;
+
+  STATE st;
+  char tmpbody[_POSIX_PATH_MAX];
+  FILE *tmpfp;
+  
+  char prefix[SHORT_STRING];
+  int rc;
+  
+#ifdef USE_NNTP
+  if (flags & SENDNEWS)
+    set_option (OPTNEWSSEND);
+  else
+    unset_option (OPTNEWSSEND);
+#endif
+
+  if (check_all_msg (idx, idxlen, cur, 0) == -1)
+  {
+    nattach = count_tagged (idx, idxlen);
+    if ((parent = find_parent (idx, idxlen, cur, nattach)) == NULL)
+      parent = hdr;
+  }
+
+  if (nattach > 1 && !check_can_decode (idx, idxlen, cur))
+  {
+    if ((rc = query_quadoption (OPT_MIMEFWDREST,
+      _("Can't decode all tagged attachments.  MIME-encapsulate the others?"))) == -1)
+      return;
+    else if (rc == M_YES)
+      mime_reply_any = 1;
+  }
+  else if (nattach == 1)
+    mime_reply_any = 1;
+
+  tmphdr = mutt_new_header ();
+  tmphdr->env = mutt_new_envelope ();
+
+  if (attach_reply_envelope_defaults (tmphdr->env, idx, idxlen, 
+                                     parent ? parent : (cur ? cur->hdr : NULL), flags) == -1)
+  {
+    mutt_free_header (&tmphdr);
+    return;
+  }
+  
+  mutt_mktemp (tmpbody);
+  if ((tmpfp = safe_fopen (tmpbody, "w")) == NULL)
+  {
+    mutt_error (_("Can't create %s."), tmpbody);
+    mutt_free_header (&tmphdr);
+    return;
+  }
+
+  if (!parent)
+  {
+    if (cur)
+      attach_include_reply (fp, tmpfp, cur->hdr, flags);
+    else
+    {
+      for (i = 0; i < idxlen; i++)
+      {
+       if (idx[i]->content->tagged)
+         attach_include_reply (fp, tmpfp, idx[i]->content->hdr, flags);
+      }
+    }
+  }
+  else
+  {
+    mutt_make_attribution (Context, parent, tmpfp);
+    
+    memset (&st, 0, sizeof (STATE));
+    st.fpin = fp;
+    st.fpout = tmpfp;
+
+    if (!option (OPTTEXTFLOWED))
+      _mutt_make_string (prefix, sizeof (prefix), NONULL (Prefix), 
+                        Context, parent, 0);
+    else
+      strfcpy (prefix, ">", sizeof (prefix));
+
+    st.prefix = prefix;
+    st.flags  = M_CHARCONV;
+    
+    if (option (OPTWEED)) 
+      st.flags |= M_WEED;
+
+    if (option (OPTHEADER))
+      include_header (1, fp, parent, tmpfp, prefix);
+
+    if (cur)
+    {
+      if (mutt_can_decode (cur))
+      {
+       mutt_body_handler (cur, &st);
+       state_putc ('\n', &st);
+      }
+      else
+       mutt_copy_body (fp, &tmphdr->content, cur);
+    }
+    else
+    {
+      for (i = 0; i < idxlen; i++)
+      {
+       if (idx[i]->content->tagged && mutt_can_decode (idx[i]->content))
+       {
+         mutt_body_handler (idx[i]->content, &st);
+         state_putc ('\n', &st);
+       }
+      }
+    }
+
+    mutt_make_post_indent (Context, parent, tmpfp);
+
+    if (mime_reply_any && !cur && 
+       copy_problematic_attachments (fp, &tmphdr->content, idx, idxlen, 0) == NULL)
+    {
+      mutt_free_header (&tmphdr);
+      fclose (tmpfp);
+      return;
+    }
+  }
+
+  fclose (tmpfp);
+  
+  if (ci_send_message (flags, tmphdr, tmpbody, NULL, parent) == 0)
+    mutt_set_flag (Context, hdr, M_REPLIED, 1);
+}
+
diff --git a/regex.c b/regex.c
new file mode 100644 (file)
index 0000000..398f7f9
--- /dev/null
+++ b/regex.c
@@ -0,0 +1,5754 @@
+/* Extended regular expression matching and search library,
+ * version 0.12.
+ * (Implements POSIX draft P1003.2/D11.2, except for some of the
+ * internationalization features.)
+ * 
+ * Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
+ * 
+ * This file is part of the GNU C Library.  Its master source is NOT part of
+ * the C library, however.  The master source lives in /gd/gnu/lib.
+ * 
+ * The GNU C Library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ * 
+ * The GNU C Library 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
+ * Library General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Library General Public
+ * License along with the GNU C Library; see the file COPYING.LIB.  If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.  
+ */
+
+/*
+ * Modifications:
+ * 
+ * Use _regex.h instead of regex.h.  tlr, 1999-01-06
+ * Make REGEX_MALLOC depend on HAVE_ALLOCA &c.
+ *                                  tlr, 1999-02-14
+ * Don't switch on regex debugging when debugging mutt.
+ *                                  tlr, 1999-02-25
+ */
+
+/* The following doesn't mix too well with autoconfiguring
+ * the use of alloca.  So let's disable it for AIX.
+ */
+
+#if 0
+
+/* AIX requires this to be the first thing in the file. */
+# if defined (_AIX) && !defined (REGEX_MALLOC)
+#  pragma alloca
+# endif
+
+#endif
+
+#undef _GNU_SOURCE
+#define _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#undef DEBUG
+
+#if (defined(HAVE_ALLOCA_H) && !defined(_AIX))
+# include <alloca.h>
+#endif
+
+#if (!defined(HAVE_ALLOCA) || defined(_AIX))
+# define REGEX_MALLOC
+#endif
+
+#if defined(STDC_HEADERS) && !defined(emacs)
+#include <stddef.h>
+#else
+/* We need this for `regex.h', and perhaps for the Emacs include files.  */
+#include <sys/types.h>
+#endif
+
+/* For platform which support the ISO C amendement 1 functionality we
+   support user defined character classes.  */
+#if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
+# include <wctype.h>
+# include <wchar.h>
+#endif
+
+/* This is for other GNU distributions with internationalized messages.  */
+#if HAVE_LIBINTL_H || defined (_LIBC)
+# include <libintl.h>
+#else
+# define gettext(msgid) (msgid)
+#endif
+
+#ifndef gettext_noop
+/* This define is so xgettext can find the internationalizable
+   strings.  */
+#define gettext_noop(String) String
+#endif
+
+/* The `emacs' switch turns on certain matching commands
+   that make sense only in Emacs. */
+#ifdef emacs
+
+#include "lisp.h"
+#include "buffer.h"
+#include "syntax.h"
+
+#else  /* not emacs */
+
+/* If we are not linking with Emacs proper,
+   we can't use the relocating allocator
+   even if config.h says that we can.  */
+#undef REL_ALLOC
+
+#if defined (STDC_HEADERS) || defined (_LIBC)
+#include <stdlib.h>
+#else
+char *malloc ();       /* __MEM_CHECKED__ */
+char *realloc ();      /* __MEM_CHECKED__ */
+#endif
+
+/* When used in Emacs's lib-src, we need to get bzero and bcopy somehow.
+   If nothing else has been done, use the method below.  */
+#ifdef INHIBIT_STRING_HEADER
+#if !(defined (HAVE_BZERO) && defined (HAVE_BCOPY))
+#if !defined (bzero) && !defined (bcopy)
+#undef INHIBIT_STRING_HEADER
+#endif
+#endif
+#endif
+
+/* This is the normal way of making sure we have a bcopy and a bzero.
+   This is used in most programs--a few other programs avoid this
+   by defining INHIBIT_STRING_HEADER.  */
+#ifndef INHIBIT_STRING_HEADER
+#if defined (HAVE_STRING_H) || defined (STDC_HEADERS) || defined (_LIBC)
+#include <string.h>
+#ifndef bcmp
+#define bcmp(s1, s2, n)        memcmp ((s1), (s2), (n))
+#endif
+#ifndef bcopy
+#define bcopy(s, d, n) memcpy ((d), (s), (n))
+#endif
+#ifndef bzero
+#define bzero(s, n)    memset ((s), 0, (n))
+#endif
+#else
+#include <strings.h>
+#endif
+#endif
+
+/* Define the syntax stuff for \<, \>, etc.  */
+
+/* This must be nonzero for the wordchar and notwordchar pattern
+   commands in re_match_2.  */
+#ifndef Sword
+#define Sword 1
+#endif
+
+#ifdef SWITCH_ENUM_BUG
+#define SWITCH_ENUM_CAST(x) ((int)(x))
+#else
+#define SWITCH_ENUM_CAST(x) (x)
+#endif
+
+#ifdef SYNTAX_TABLE
+
+extern char *re_syntax_table;
+
+#else /* not SYNTAX_TABLE */
+
+/* How many characters in the character set.  */
+#define CHAR_SET_SIZE 256
+
+static char re_syntax_table[CHAR_SET_SIZE];
+
+static void
+init_syntax_once ()
+{
+   register int c;
+   static int done = 0;
+
+   if (done)
+     return;
+
+   bzero (re_syntax_table, sizeof re_syntax_table);
+
+   for (c = 'a'; c <= 'z'; c++)
+     re_syntax_table[c] = Sword;
+
+   for (c = 'A'; c <= 'Z'; c++)
+     re_syntax_table[c] = Sword;
+
+   for (c = '0'; c <= '9'; c++)
+     re_syntax_table[c] = Sword;
+
+   re_syntax_table['_'] = Sword;
+
+   done = 1;
+}
+
+#endif /* not SYNTAX_TABLE */
+
+#define SYNTAX(c) re_syntax_table[c]
+
+#endif /* not emacs */
+\f
+/* Get the interface, including the syntax bits.  */
+
+/* Changed to fit into mutt - tlr, 1999-01-06 */
+
+#include "_regex.h"
+
+/* isalpha etc. are used for the character classes.  */
+#include <ctype.h>
+
+/* Jim Meyering writes:
+
+   "... Some ctype macros are valid only for character codes that
+   isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when
+   using /bin/cc or gcc but without giving an ansi option).  So, all
+   ctype uses should be through macros like ISPRINT...  If
+   STDC_HEADERS is defined, then autoconf has verified that the ctype
+   macros don't need to be guarded with references to isascii. ...
+   Defining isascii to 1 should let any compiler worth its salt
+   eliminate the && through constant folding."  */
+
+#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
+#define ISASCII(c) 1
+#else
+#define ISASCII(c) isascii(c)
+#endif
+
+#ifdef isblank
+#define ISBLANK(c) (ISASCII (c) && isblank (c))
+#else
+#define ISBLANK(c) ((c) == ' ' || (c) == '\t')
+#endif
+#ifdef isgraph
+#define ISGRAPH(c) (ISASCII (c) && isgraph (c))
+#else
+#define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
+#endif
+
+#define ISPRINT(c) (ISASCII (c) && isprint (c))
+#define ISDIGIT(c) (ISASCII (c) && isdigit (c))
+#define ISALNUM(c) (ISASCII (c) && isalnum (c))
+#define ISALPHA(c) (ISASCII (c) && isalpha (c))
+#define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
+#define ISLOWER(c) (ISASCII (c) && islower (c))
+#define ISPUNCT(c) (ISASCII (c) && ispunct (c))
+#define ISSPACE(c) (ISASCII (c) && isspace (c))
+#define ISUPPER(c) (ISASCII (c) && isupper (c))
+#define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
+
+#ifndef NULL
+#define NULL (void *)0
+#endif
+
+/* We remove any previous definition of `SIGN_EXTEND_CHAR',
+   since ours (we hope) works properly with all combinations of
+   machines, compilers, `char' and `unsigned char' argument types.
+   (Per Bothner suggested the basic approach.)  */
+#undef SIGN_EXTEND_CHAR
+#if __STDC__
+#define SIGN_EXTEND_CHAR(c) ((signed char) (c))
+#else  /* not __STDC__ */
+/* As in Harbison and Steele.  */
+#define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128)
+#endif
+\f
+/* Should we use malloc or alloca?  If REGEX_MALLOC is not defined, we
+   use `alloca' instead of `malloc'.  This is because using malloc in
+   re_search* or re_match* could cause memory leaks when C-g is used in
+   Emacs; also, malloc is slower and causes storage fragmentation.  On
+   the other hand, malloc is more portable, and easier to debug.
+
+   Because we sometimes use alloca, some routines have to be macros,
+   not functions -- `alloca'-allocated space disappears at the end of the
+   function it is called in.  */
+
+#ifdef REGEX_MALLOC
+
+#define REGEX_ALLOCATE malloc
+#define REGEX_REALLOCATE(source, osize, nsize) realloc (source, nsize)
+#define REGEX_FREE free
+
+#else /* not REGEX_MALLOC  */
+
+/* Emacs already defines alloca, sometimes.  */
+#ifndef alloca
+
+/* Make alloca work the best possible way.  */
+#ifdef __GNUC__
+#define alloca __builtin_alloca
+#else /* not __GNUC__ */
+#if HAVE_ALLOCA_H
+#include <alloca.h>
+#else /* not __GNUC__ or HAVE_ALLOCA_H */
+#if 0 /* It is a bad idea to declare alloca.  We always cast the result.  */
+#ifndef _AIX /* Already did AIX, up at the top.  */
+char *alloca ();
+#endif /* not _AIX */
+#endif
+#endif /* not HAVE_ALLOCA_H */
+#endif /* not __GNUC__ */
+
+#endif /* not alloca */
+
+#define REGEX_ALLOCATE alloca
+
+/* Assumes a `char *destination' variable.  */
+#define REGEX_REALLOCATE(source, osize, nsize)                         \
+  (destination = (char *) alloca (nsize),                              \
+   bcopy (source, destination, osize),                                 \
+   destination)
+
+/* No need to do anything to free, after alloca.  */
+#define REGEX_FREE(arg) ((void)0) /* Do nothing!  But inhibit gcc warning.  */
+
+#endif /* not REGEX_MALLOC */
+
+/* Define how to allocate the failure stack.  */
+
+#if defined (REL_ALLOC) && defined (REGEX_MALLOC)
+
+#define REGEX_ALLOCATE_STACK(size)                             \
+  r_alloc (&failure_stack_ptr, (size))
+#define REGEX_REALLOCATE_STACK(source, osize, nsize)           \
+  r_re_alloc (&failure_stack_ptr, (nsize))
+#define REGEX_FREE_STACK(ptr)                                  \
+  r_alloc_free (&failure_stack_ptr)
+
+#else /* not using relocating allocator */
+
+#ifdef REGEX_MALLOC
+
+#define REGEX_ALLOCATE_STACK malloc
+#define REGEX_REALLOCATE_STACK(source, osize, nsize) realloc (source, nsize)
+#define REGEX_FREE_STACK free
+
+#else /* not REGEX_MALLOC */
+
+#define REGEX_ALLOCATE_STACK alloca
+
+#define REGEX_REALLOCATE_STACK(source, osize, nsize)                   \
+   REGEX_REALLOCATE (source, osize, nsize)
+/* No need to explicitly free anything.  */
+#define REGEX_FREE_STACK(arg)
+
+#endif /* not REGEX_MALLOC */
+#endif /* not using relocating allocator */
+
+
+/* True if `size1' is non-NULL and PTR is pointing anywhere inside
+   `string1' or just past its end.  This works if PTR is NULL, which is
+   a good thing.  */
+#define FIRST_STRING_P(ptr)                                    \
+  (size1 && string1 <= (ptr) && (ptr) <= string1 + size1)
+
+/* (Re)Allocate N items of type T using malloc, or fail.  */
+#define TALLOC(n, t) ((t *) malloc ((n) * sizeof (t)))
+#define RETALLOC(addr, n, t) ((addr) = (t *) realloc (addr, (n) * sizeof (t)))
+#define RETALLOC_IF(addr, n, t) \
+  if (addr) RETALLOC((addr), (n), t); else (addr) = TALLOC ((n), t)
+#define REGEX_TALLOC(n, t) ((t *) REGEX_ALLOCATE ((n) * sizeof (t)))
+
+#define BYTEWIDTH 8 /* In bits.  */
+
+#define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
+
+#undef MAX
+#undef MIN
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+
+typedef char boolean;
+#define false 0
+#define true 1
+
+static int re_match_2_internal ();
+\f
+/* These are the command codes that appear in compiled regular
+   expressions.  Some opcodes are followed by argument bytes.  A
+   command code can specify any interpretation whatsoever for its
+   arguments.  Zero bytes may appear in the compiled regular expression.  */
+
+typedef enum
+{
+  no_op = 0,
+
+  /* Succeed right away--no more backtracking.  */
+  succeed,
+
+        /* Followed by one byte giving n, then by n literal bytes.  */
+  exactn,
+
+        /* Matches any (more or less) character.  */
+  anychar,
+
+        /* Matches any one char belonging to specified set.  First
+           following byte is number of bitmap bytes.  Then come bytes
+           for a bitmap saying which chars are in.  Bits in each byte
+           are ordered low-bit-first.  A character is in the set if its
+           bit is 1.  A character too large to have a bit in the map is
+           automatically not in the set.  */
+  charset,
+
+        /* Same parameters as charset, but match any character that is
+           not one of those specified.  */
+  charset_not,
+
+        /* Start remembering the text that is matched, for storing in a
+           register.  Followed by one byte with the register number, in
+           the range 0 to one less than the pattern buffer's re_nsub
+           field.  Then followed by one byte with the number of groups
+           inner to this one.  (This last has to be part of the
+           start_memory only because we need it in the on_failure_jump
+           of re_match_2.)  */
+  start_memory,
+
+        /* Stop remembering the text that is matched and store it in a
+           memory register.  Followed by one byte with the register
+           number, in the range 0 to one less than `re_nsub' in the
+           pattern buffer, and one byte with the number of inner groups,
+           just like `start_memory'.  (We need the number of inner
+           groups here because we don't have any easy way of finding the
+           corresponding start_memory when we're at a stop_memory.)  */
+  stop_memory,
+
+        /* Match a duplicate of something remembered. Followed by one
+           byte containing the register number.  */
+  duplicate,
+
+        /* Fail unless at beginning of line.  */
+  begline,
+
+        /* Fail unless at end of line.  */
+  endline,
+
+        /* Succeeds if at beginning of buffer (if emacs) or at beginning
+           of string to be matched (if not).  */
+  begbuf,
+
+        /* Analogously, for end of buffer/string.  */
+  endbuf,
+
+        /* Followed by two byte relative address to which to jump.  */
+  jump,
+
+       /* Same as jump, but marks the end of an alternative.  */
+  jump_past_alt,
+
+        /* Followed by two-byte relative address of place to resume at
+           in case of failure.  */
+  on_failure_jump,
+
+        /* Like on_failure_jump, but pushes a placeholder instead of the
+           current string position when executed.  */
+  on_failure_keep_string_jump,
+
+        /* Throw away latest failure point and then jump to following
+           two-byte relative address.  */
+  pop_failure_jump,
+
+        /* Change to pop_failure_jump if know won't have to backtrack to
+           match; otherwise change to jump.  This is used to jump
+           back to the beginning of a repeat.  If what follows this jump
+           clearly won't match what the repeat does, such that we can be
+           sure that there is no use backtracking out of repetitions
+           already matched, then we change it to a pop_failure_jump.
+           Followed by two-byte address.  */
+  maybe_pop_jump,
+
+        /* Jump to following two-byte address, and push a dummy failure
+           point. This failure point will be thrown away if an attempt
+           is made to use it for a failure.  A `+' construct makes this
+           before the first repeat.  Also used as an intermediary kind
+           of jump when compiling an alternative.  */
+  dummy_failure_jump,
+
+       /* Push a dummy failure point and continue.  Used at the end of
+          alternatives.  */
+  push_dummy_failure,
+
+        /* Followed by two-byte relative address and two-byte number n.
+           After matching N times, jump to the address upon failure.  */
+  succeed_n,
+
+        /* Followed by two-byte relative address, and two-byte number n.
+           Jump to the address N times, then fail.  */
+  jump_n,
+
+        /* Set the following two-byte relative address to the
+           subsequent two-byte number.  The address *includes* the two
+           bytes of number.  */
+  set_number_at,
+
+  wordchar,    /* Matches any word-constituent character.  */
+  notwordchar, /* Matches any char that is not a word-constituent.  */
+
+  wordbeg,     /* Succeeds if at word beginning.  */
+  wordend,     /* Succeeds if at word end.  */
+
+  wordbound,   /* Succeeds if at a word boundary.  */
+  notwordbound /* Succeeds if not at a word boundary.  */
+
+#ifdef emacs
+  ,before_dot, /* Succeeds if before point.  */
+  at_dot,      /* Succeeds if at point.  */
+  after_dot,   /* Succeeds if after point.  */
+
+       /* Matches any character whose syntax is specified.  Followed by
+           a byte which contains a syntax code, e.g., Sword.  */
+  syntaxspec,
+
+       /* Matches any character whose syntax is not that specified.  */
+  notsyntaxspec
+#endif /* emacs */
+} re_opcode_t;
+\f
+/* Common operations on the compiled pattern.  */
+
+/* Store NUMBER in two contiguous bytes starting at DESTINATION.  */
+
+#define STORE_NUMBER(destination, number)                              \
+  do {                                                                 \
+    (destination)[0] = (number) & 0377;                                        \
+    (destination)[1] = (number) >> 8;                                  \
+  } while (0)
+
+/* Same as STORE_NUMBER, except increment DESTINATION to
+   the byte after where the number is stored.  Therefore, DESTINATION
+   must be an lvalue.  */
+
+#define STORE_NUMBER_AND_INCR(destination, number)                     \
+  do {                                                                 \
+    STORE_NUMBER (destination, number);                                        \
+    (destination) += 2;                                                        \
+  } while (0)
+
+/* Put into DESTINATION a number stored in two contiguous bytes starting
+   at SOURCE.  */
+
+#define EXTRACT_NUMBER(destination, source)                            \
+  do {                                                                 \
+    (destination) = *(source) & 0377;                                  \
+    (destination) += SIGN_EXTEND_CHAR (*((source) + 1)) << 8;          \
+  } while (0)
+
+#ifdef DEBUG
+static void extract_number _RE_ARGS ((int *dest, unsigned char *source));
+static void
+extract_number (dest, source)
+    int *dest;
+    unsigned char *source;
+{
+  int temp = SIGN_EXTEND_CHAR (*(source + 1));
+  *dest = *source & 0377;
+  *dest += temp << 8;
+}
+
+#ifndef EXTRACT_MACROS /* To debug the macros.  */
+#undef EXTRACT_NUMBER
+#define EXTRACT_NUMBER(dest, src) extract_number (&dest, src)
+#endif /* not EXTRACT_MACROS */
+
+#endif /* DEBUG */
+
+/* Same as EXTRACT_NUMBER, except increment SOURCE to after the number.
+   SOURCE must be an lvalue.  */
+
+#define EXTRACT_NUMBER_AND_INCR(destination, source)                   \
+  do {                                                                 \
+    EXTRACT_NUMBER (destination, source);                              \
+    (source) += 2;                                                     \
+  } while (0)
+
+#ifdef DEBUG
+static void extract_number_and_incr _RE_ARGS ((int *destination,
+                                              unsigned char **source));
+static void
+extract_number_and_incr (destination, source)
+    int *destination;
+    unsigned char **source;
+{
+  extract_number (destination, *source);
+  *source += 2;
+}
+
+#ifndef EXTRACT_MACROS
+#undef EXTRACT_NUMBER_AND_INCR
+#define EXTRACT_NUMBER_AND_INCR(dest, src) \
+  extract_number_and_incr (&dest, &src)
+#endif /* not EXTRACT_MACROS */
+
+#endif /* DEBUG */
+\f
+/* If DEBUG is defined, Regex prints many voluminous messages about what
+   it is doing (if the variable `debug' is nonzero).  If linked with the
+   main program in `iregex.c', you can enter patterns and strings
+   interactively.  And if linked with the main program in `main.c' and
+   the other test files, you can run the already-written tests.  */
+
+#ifdef DEBUG
+
+/* We use standard I/O for debugging.  */
+#include <stdio.h>
+
+/* It is useful to test things that ``must'' be true when debugging.  */
+#include <assert.h>
+
+static int debug = 0;
+
+#define DEBUG_STATEMENT(e) e
+#define DEBUG_PRINT1(x) if (debug) printf (x)
+#define DEBUG_PRINT2(x1, x2) if (debug) printf (x1, x2)
+#define DEBUG_PRINT3(x1, x2, x3) if (debug) printf (x1, x2, x3)
+#define DEBUG_PRINT4(x1, x2, x3, x4) if (debug) printf (x1, x2, x3, x4)
+#define DEBUG_PRINT_COMPILED_PATTERN(p, s, e)                          \
+  if (debug) print_partial_compiled_pattern (s, e)
+#define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2)                 \
+  if (debug) print_double_string (w, s1, sz1, s2, sz2)
+
+
+/* Print the fastmap in human-readable form.  */
+
+void
+print_fastmap (fastmap)
+    char *fastmap;
+{
+  unsigned was_a_range = 0;
+  unsigned i = 0;
+
+  while (i < (1 << BYTEWIDTH))
+    {
+      if (fastmap[i++])
+       {
+         was_a_range = 0;
+          putchar (i - 1);
+          while (i < (1 << BYTEWIDTH)  &&  fastmap[i])
+            {
+              was_a_range = 1;
+              i++;
+            }
+         if (was_a_range)
+            {
+              printf ("-");
+              putchar (i - 1);
+            }
+        }
+    }
+  putchar ('\n');
+}
+
+
+/* Print a compiled pattern string in human-readable form, starting at
+   the START pointer into it and ending just before the pointer END.  */
+
+void
+print_partial_compiled_pattern (start, end)
+    unsigned char *start;
+    unsigned char *end;
+{
+  int mcnt, mcnt2;
+  unsigned char *p1;
+  unsigned char *p = start;
+  unsigned char *pend = end;
+
+  if (start == NULL)
+    {
+      printf ("(null)\n");
+      return;
+    }
+
+  /* Loop over pattern commands.  */
+  while (p < pend)
+    {
+      printf ("%d:\t", p - start);
+
+      switch ((re_opcode_t) *p++)
+       {
+        case no_op:
+          printf ("/no_op");
+          break;
+
+       case exactn:
+         mcnt = *p++;
+          printf ("/exactn/%d", mcnt);
+          do
+           {
+              putchar ('/');
+             putchar (*p++);
+            }
+          while (--mcnt);
+          break;
+
+       case start_memory:
+          mcnt = *p++;
+          printf ("/start_memory/%d/%d", mcnt, *p++);
+          break;
+
+       case stop_memory:
+          mcnt = *p++;
+         printf ("/stop_memory/%d/%d", mcnt, *p++);
+          break;
+
+       case duplicate:
+         printf ("/duplicate/%d", *p++);
+         break;
+
+       case anychar:
+         printf ("/anychar");
+         break;
+
+       case charset:
+        case charset_not:
+          {
+            register int c, last = -100;
+           register int in_range = 0;
+
+           printf ("/charset [%s",
+                   (re_opcode_t) *(p - 1) == charset_not ? "^" : "");
+
+            assert (p + *p < pend);
+
+            for (c = 0; c < 256; c++)
+             if (c / 8 < *p
+                 && (p[1 + (c/8)] & (1 << (c % 8))))
+               {
+                 /* Are we starting a range?  */
+                 if (last + 1 == c && ! in_range)
+                   {
+                     putchar ('-');
+                     in_range = 1;
+                   }
+                 /* Have we broken a range?  */
+                 else if (last + 1 != c && in_range)
+              {
+                     putchar (last);
+                     in_range = 0;
+                   }
+
+                 if (! in_range)
+                   putchar (c);
+
+                 last = c;
+              }
+
+           if (in_range)
+             putchar (last);
+
+           putchar (']');
+
+           p += 1 + *p;
+         }
+         break;
+
+       case begline:
+         printf ("/begline");
+          break;
+
+       case endline:
+          printf ("/endline");
+          break;
+
+       case on_failure_jump:
+          extract_number_and_incr (&mcnt, &p);
+         printf ("/on_failure_jump to %d", p + mcnt - start);
+          break;
+
+       case on_failure_keep_string_jump:
+          extract_number_and_incr (&mcnt, &p);
+         printf ("/on_failure_keep_string_jump to %d", p + mcnt - start);
+          break;
+
+       case dummy_failure_jump:
+          extract_number_and_incr (&mcnt, &p);
+         printf ("/dummy_failure_jump to %d", p + mcnt - start);
+          break;
+
+       case push_dummy_failure:
+          printf ("/push_dummy_failure");
+          break;
+
+        case maybe_pop_jump:
+          extract_number_and_incr (&mcnt, &p);
+         printf ("/maybe_pop_jump to %d", p + mcnt - start);
+         break;
+
+        case pop_failure_jump:
+         extract_number_and_incr (&mcnt, &p);
+         printf ("/pop_failure_jump to %d", p + mcnt - start);
+         break;
+
+        case jump_past_alt:
+         extract_number_and_incr (&mcnt, &p);
+         printf ("/jump_past_alt to %d", p + mcnt - start);
+         break;
+
+        case jump:
+         extract_number_and_incr (&mcnt, &p);
+         printf ("/jump to %d", p + mcnt - start);
+         break;
+
+        case succeed_n:
+          extract_number_and_incr (&mcnt, &p);
+         p1 = p + mcnt;
+          extract_number_and_incr (&mcnt2, &p);
+         printf ("/succeed_n to %d, %d times", p1 - start, mcnt2);
+          break;
+
+        case jump_n:
+          extract_number_and_incr (&mcnt, &p);
+         p1 = p + mcnt;
+          extract_number_and_incr (&mcnt2, &p);
+         printf ("/jump_n to %d, %d times", p1 - start, mcnt2);
+          break;
+
+        case set_number_at:
+          extract_number_and_incr (&mcnt, &p);
+         p1 = p + mcnt;
+          extract_number_and_incr (&mcnt2, &p);
+         printf ("/set_number_at location %d to %d", p1 - start, mcnt2);
+          break;
+
+        case wordbound:
+         printf ("/wordbound");
+         break;
+
+       case notwordbound:
+         printf ("/notwordbound");
+          break;
+
+       case wordbeg:
+         printf ("/wordbeg");
+         break;
+
+       case wordend:
+         printf ("/wordend");
+
+#ifdef emacs
+       case before_dot:
+         printf ("/before_dot");
+          break;
+
+       case at_dot:
+         printf ("/at_dot");
+          break;
+
+       case after_dot:
+         printf ("/after_dot");
+          break;
+
+       case syntaxspec:
+          printf ("/syntaxspec");
+         mcnt = *p++;
+         printf ("/%d", mcnt);
+          break;
+
+       case notsyntaxspec:
+          printf ("/notsyntaxspec");
+         mcnt = *p++;
+         printf ("/%d", mcnt);
+         break;
+#endif /* emacs */
+
+       case wordchar:
+         printf ("/wordchar");
+          break;
+
+       case notwordchar:
+         printf ("/notwordchar");
+          break;
+
+       case begbuf:
+         printf ("/begbuf");
+          break;
+
+       case endbuf:
+         printf ("/endbuf");
+          break;
+
+        default:
+          printf ("?%d", *(p-1));
+       }
+
+      putchar ('\n');
+    }
+
+  printf ("%d:\tend of pattern.\n", p - start);
+}
+
+
+void
+print_compiled_pattern (bufp)
+    struct re_pattern_buffer *bufp;
+{
+  unsigned char *buffer = bufp->buffer;
+
+  print_partial_compiled_pattern (buffer, buffer + bufp->used);
+  printf ("%ld bytes used/%ld bytes allocated.\n",
+         bufp->used, bufp->allocated);
+
+  if (bufp->fastmap_accurate && bufp->fastmap)
+    {
+      printf ("fastmap: ");
+      print_fastmap (bufp->fastmap);
+    }
+
+  printf ("re_nsub: %d\t", bufp->re_nsub);
+  printf ("regs_alloc: %d\t", bufp->regs_allocated);
+  printf ("can_be_null: %d\t", bufp->can_be_null);
+  printf ("newline_anchor: %d\n", bufp->newline_anchor);
+  printf ("no_sub: %d\t", bufp->no_sub);
+  printf ("not_bol: %d\t", bufp->not_bol);
+  printf ("not_eol: %d\t", bufp->not_eol);
+  printf ("syntax: %lx\n", bufp->syntax);
+  /* Perhaps we should print the translate table?  */
+}
+
+
+void
+print_double_string (where, string1, size1, string2, size2)
+    const char *where;
+    const char *string1;
+    const char *string2;
+    int size1;
+    int size2;
+{
+  int this_char;
+
+  if (where == NULL)
+    printf ("(null)");
+  else
+    {
+      if (FIRST_STRING_P (where))
+        {
+          for (this_char = where - string1; this_char < size1; this_char++)
+            putchar (string1[this_char]);
+
+          where = string2;
+        }
+
+      for (this_char = where - string2; this_char < size2; this_char++)
+        putchar (string2[this_char]);
+    }
+}
+
+void
+printchar (c)
+     int c;
+{
+  putc (c, stderr);
+}
+
+#else /* not DEBUG */
+
+#undef assert
+#define assert(e)
+
+#define DEBUG_STATEMENT(e)
+#define DEBUG_PRINT1(x)
+#define DEBUG_PRINT2(x1, x2)
+#define DEBUG_PRINT3(x1, x2, x3)
+#define DEBUG_PRINT4(x1, x2, x3, x4)
+#define DEBUG_PRINT_COMPILED_PATTERN(p, s, e)
+#define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2)
+
+#endif /* not DEBUG */
+\f
+/* Set by `re_set_syntax' to the current regexp syntax to recognize.  Can
+   also be assigned to arbitrarily: each pattern buffer stores its own
+   syntax, so it can be changed between regex compilations.  */
+/* This has no initializer because initialized variables in Emacs
+   become read-only after dumping.  */
+reg_syntax_t re_syntax_options;
+
+
+/* Specify the precise syntax of regexps for compilation.  This provides
+   for compatibility for various utilities which historically have
+   different, incompatible syntaxes.
+
+   The argument SYNTAX is a bit mask comprised of the various bits
+   defined in regex.h.  We return the old syntax.  */
+
+reg_syntax_t
+re_set_syntax (syntax)
+    reg_syntax_t syntax;
+{
+  reg_syntax_t ret = re_syntax_options;
+
+  re_syntax_options = syntax;
+#ifdef DEBUG
+  if (syntax & RE_DEBUG)
+    debug = 1;
+  else if (debug) /* was on but now is not */
+    debug = 0;
+#endif /* DEBUG */
+  return ret;
+}
+\f
+/* This table gives an error message for each of the error codes listed
+   in regex.h.  Obviously the order here has to be same as there.
+   POSIX doesn't require that we do anything for REG_NOERROR,
+   but why not be nice?  */
+
+static const char *re_error_msgid[] =
+  {
+    gettext_noop ("Success"),  /* REG_NOERROR */
+    gettext_noop ("No match"), /* REG_NOMATCH */
+    gettext_noop ("Invalid regular expression"), /* REG_BADPAT */
+    gettext_noop ("Invalid collation character"), /* REG_ECOLLATE */
+    gettext_noop ("Invalid character class name"), /* REG_ECTYPE */
+    gettext_noop ("Trailing backslash"), /* REG_EESCAPE */
+    gettext_noop ("Invalid back reference"), /* REG_ESUBREG */
+    gettext_noop ("Unmatched [ or [^"),        /* REG_EBRACK */
+    gettext_noop ("Unmatched ( or \\("), /* REG_EPAREN */
+    gettext_noop ("Unmatched \\{"), /* REG_EBRACE */
+    gettext_noop ("Invalid content of \\{\\}"), /* REG_BADBR */
+    gettext_noop ("Invalid range end"),        /* REG_ERANGE */
+    gettext_noop ("Memory exhausted"), /* REG_ESPACE */
+    gettext_noop ("Invalid preceding regular expression"), /* REG_BADRPT */
+    gettext_noop ("Premature end of regular expression"), /* REG_EEND */
+    gettext_noop ("Regular expression too big"), /* REG_ESIZE */
+    gettext_noop ("Unmatched ) or \\)"), /* REG_ERPAREN */
+  };
+\f
+/* Avoiding alloca during matching, to placate r_alloc.  */
+
+/* Define MATCH_MAY_ALLOCATE unless we need to make sure that the
+   searching and matching functions should not call alloca.  On some
+   systems, alloca is implemented in terms of malloc, and if we're
+   using the relocating allocator routines, then malloc could cause a
+   relocation, which might (if the strings being searched are in the
+   ralloc heap) shift the data out from underneath the regexp
+   routines.
+
+   Here's another reason to avoid allocation: Emacs
+   processes input from X in a signal handler; processing X input may
+   call malloc; if input arrives while a matching routine is calling
+   malloc, then we're scrod.  But Emacs can't just block input while
+   calling matching routines; then we don't notice interrupts when
+   they come in.  So, Emacs blocks input around all regexp calls
+   except the matching calls, which it leaves unprotected, in the
+   faith that they will not malloc.  */
+
+/* Normally, this is fine.  */
+#define MATCH_MAY_ALLOCATE
+
+/* When using GNU C, we are not REALLY using the C alloca, no matter
+   what config.h may say.  So don't take precautions for it.  */
+#ifdef __GNUC__
+#undef C_ALLOCA
+#endif
+
+/* The match routines may not allocate if (1) they would do it with malloc
+   and (2) it's not safe for them to use malloc.
+   Note that if REL_ALLOC is defined, matching would not use malloc for the
+   failure stack, but we would still use it for the register vectors;
+   so REL_ALLOC should not affect this.  */
+#if (defined (C_ALLOCA) || defined (REGEX_MALLOC)) && defined (emacs)
+#undef MATCH_MAY_ALLOCATE
+#endif
+
+\f
+/* Failure stack declarations and macros; both re_compile_fastmap and
+   re_match_2 use a failure stack.  These have to be macros because of
+   REGEX_ALLOCATE_STACK.  */
+
+
+/* Number of failure points for which to initially allocate space
+   when matching.  If this number is exceeded, we allocate more
+   space, so it is not a hard limit.  */
+#ifndef INIT_FAILURE_ALLOC
+#define INIT_FAILURE_ALLOC 5
+#endif
+
+/* Roughly the maximum number of failure points on the stack.  Would be
+   exactly that if always used MAX_FAILURE_ITEMS items each time we failed.
+   This is a variable only so users of regex can assign to it; we never
+   change it ourselves.  */
+
+#ifdef INT_IS_16BIT
+
+#if defined (MATCH_MAY_ALLOCATE)
+/* 4400 was enough to cause a crash on Alpha OSF/1,
+   whose default stack limit is 2mb.  */
+long int re_max_failures = 4000;
+#else
+long int re_max_failures = 2000;
+#endif
+
+union fail_stack_elt
+{
+  unsigned char *pointer;
+  long int integer;
+};
+
+typedef union fail_stack_elt fail_stack_elt_t;
+
+typedef struct
+{
+  fail_stack_elt_t *stack;
+  unsigned long int size;
+  unsigned long int avail;             /* Offset of next open position.  */
+} fail_stack_type;
+
+#else /* not INT_IS_16BIT */
+
+#if defined (MATCH_MAY_ALLOCATE)
+/* 4400 was enough to cause a crash on Alpha OSF/1,
+   whose default stack limit is 2mb.  */
+int re_max_failures = 20000;
+#else
+int re_max_failures = 2000;
+#endif
+
+union fail_stack_elt
+{
+  unsigned char *pointer;
+  int integer;
+};
+
+typedef union fail_stack_elt fail_stack_elt_t;
+
+typedef struct
+{
+  fail_stack_elt_t *stack;
+  unsigned size;
+  unsigned avail;                      /* Offset of next open position.  */
+} fail_stack_type;
+
+#endif /* INT_IS_16BIT */
+
+#define FAIL_STACK_EMPTY()     (fail_stack.avail == 0)
+#define FAIL_STACK_PTR_EMPTY() (fail_stack_ptr->avail == 0)
+#define FAIL_STACK_FULL()      (fail_stack.avail == fail_stack.size)
+
+
+/* Define macros to initialize and free the failure stack.
+   Do `return -2' if the alloc fails.  */
+
+#ifdef MATCH_MAY_ALLOCATE
+#define INIT_FAIL_STACK()                                              \
+  do {                                                                 \
+    fail_stack.stack = (fail_stack_elt_t *)                            \
+      REGEX_ALLOCATE_STACK (INIT_FAILURE_ALLOC * sizeof (fail_stack_elt_t));   \
+                                                                       \
+    if (fail_stack.stack == NULL)                                      \
+      return -2;                                                       \
+                                                                       \
+    fail_stack.size = INIT_FAILURE_ALLOC;                              \
+    fail_stack.avail = 0;                                              \
+  } while (0)
+
+#define RESET_FAIL_STACK()  REGEX_FREE_STACK (fail_stack.stack)
+#else
+#define INIT_FAIL_STACK()                                              \
+  do {                                                                 \
+    fail_stack.avail = 0;                                              \
+  } while (0)
+
+#define RESET_FAIL_STACK()
+#endif
+
+
+/* Double the size of FAIL_STACK, up to approximately `re_max_failures' items.
+
+   Return 1 if succeeds, and 0 if either ran out of memory
+   allocating space for it or it was already too large.
+
+   REGEX_REALLOCATE_STACK requires `destination' be declared.   */
+
+#define DOUBLE_FAIL_STACK(fail_stack)                                  \
+  ((fail_stack).size > (unsigned) (re_max_failures * MAX_FAILURE_ITEMS)        \
+   ? 0                                                                 \
+   : ((fail_stack).stack = (fail_stack_elt_t *)                                \
+        REGEX_REALLOCATE_STACK ((fail_stack).stack,                    \
+          (fail_stack).size * sizeof (fail_stack_elt_t),               \
+          ((fail_stack).size << 1) * sizeof (fail_stack_elt_t)),       \
+                                                                       \
+      (fail_stack).stack == NULL                                       \
+      ? 0                                                              \
+      : ((fail_stack).size <<= 1,                                      \
+         1)))
+
+
+/* Push pointer POINTER on FAIL_STACK.
+   Return 1 if was able to do so and 0 if ran out of memory allocating
+   space to do so.  */
+#define PUSH_PATTERN_OP(POINTER, FAIL_STACK)                           \
+  ((FAIL_STACK_FULL ()                                                 \
+    && !DOUBLE_FAIL_STACK (FAIL_STACK))                                        \
+   ? 0                                                                 \
+   : ((FAIL_STACK).stack[(FAIL_STACK).avail++].pointer = POINTER,      \
+      1))
+
+/* Push a pointer value onto the failure stack.
+   Assumes the variable `fail_stack'.  Probably should only
+   be called from within `PUSH_FAILURE_POINT'.  */
+#define PUSH_FAILURE_POINTER(item)                                     \
+  fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (item)
+
+/* This pushes an integer-valued item onto the failure stack.
+   Assumes the variable `fail_stack'.  Probably should only
+   be called from within `PUSH_FAILURE_POINT'.  */
+#define PUSH_FAILURE_INT(item)                                 \
+  fail_stack.stack[fail_stack.avail++].integer = (item)
+
+/* Push a fail_stack_elt_t value onto the failure stack.
+   Assumes the variable `fail_stack'.  Probably should only
+   be called from within `PUSH_FAILURE_POINT'.  */
+#define PUSH_FAILURE_ELT(item)                                 \
+  fail_stack.stack[fail_stack.avail++] =  (item)
+
+/* These three POP... operations complement the three PUSH... operations.
+   All assume that `fail_stack' is nonempty.  */
+#define POP_FAILURE_POINTER() fail_stack.stack[--fail_stack.avail].pointer
+#define POP_FAILURE_INT() fail_stack.stack[--fail_stack.avail].integer
+#define POP_FAILURE_ELT() fail_stack.stack[--fail_stack.avail]
+
+/* Used to omit pushing failure point id's when we're not debugging.  */
+#ifdef DEBUG
+#define DEBUG_PUSH PUSH_FAILURE_INT
+#define DEBUG_POP(item_addr) (item_addr)->integer = POP_FAILURE_INT ()
+#else
+#define DEBUG_PUSH(item)
+#define DEBUG_POP(item_addr)
+#endif
+
+
+/* Push the information about the state we will need
+   if we ever fail back to it.
+
+   Requires variables fail_stack, regstart, regend, reg_info, and
+   num_regs be declared.  DOUBLE_FAIL_STACK requires `destination' be
+   declared.
+
+   Does `return FAILURE_CODE' if runs out of memory.  */
+
+#define PUSH_FAILURE_POINT(pattern_place, string_place, failure_code)  \
+  do {                                                                 \
+    char *destination;                                                 \
+    /* Must be int, so when we don't save any registers, the arithmetic        \
+       of 0 + -1 isn't done as unsigned.  */                           \
+    /* Can't be int, since there is not a shred of a guarantee that int        \
+       is wide enough to hold a value of something to which pointer can        \
+       be assigned */                                                  \
+    s_reg_t this_reg;                                                  \
+                                                                       \
+    DEBUG_STATEMENT (failure_id++);                                    \
+    DEBUG_STATEMENT (nfailure_points_pushed++);                                \
+    DEBUG_PRINT2 ("\nPUSH_FAILURE_POINT #%u:\n", failure_id);          \
+    DEBUG_PRINT2 ("  Before push, next avail: %d\n", (fail_stack).avail);\
+    DEBUG_PRINT2 ("                     size: %d\n", (fail_stack).size);\
+                                                                       \
+    DEBUG_PRINT2 ("  slots needed: %d\n", NUM_FAILURE_ITEMS);          \
+    DEBUG_PRINT2 ("     available: %d\n", REMAINING_AVAIL_SLOTS);      \
+                                                                       \
+    /* Ensure we have enough space allocated for what we will push.  */        \
+    while (REMAINING_AVAIL_SLOTS < NUM_FAILURE_ITEMS)                  \
+      {                                                                        \
+        if (!DOUBLE_FAIL_STACK (fail_stack))                           \
+          return failure_code;                                         \
+                                                                       \
+        DEBUG_PRINT2 ("\n  Doubled stack; size now: %d\n",             \
+                      (fail_stack).size);                              \
+        DEBUG_PRINT2 ("  slots available: %d\n", REMAINING_AVAIL_SLOTS);\
+      }                                                                        \
+                                                                       \
+    /* Push the info, starting with the registers.  */                 \
+    DEBUG_PRINT1 ("\n");                                               \
+                                                                       \
+    if (1)                                                             \
+      for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; \
+          this_reg++)                                                  \
+       {                                                               \
+         DEBUG_PRINT2 ("  Pushing reg: %d\n", this_reg);               \
+         DEBUG_STATEMENT (num_regs_pushed++);                          \
+                                                                       \
+         DEBUG_PRINT2 ("    start: 0x%x\n", regstart[this_reg]);       \
+         PUSH_FAILURE_POINTER (regstart[this_reg]);                    \
+                                                                       \
+         DEBUG_PRINT2 ("    end: 0x%x\n", regend[this_reg]);           \
+         PUSH_FAILURE_POINTER (regend[this_reg]);                      \
+                                                                       \
+         DEBUG_PRINT2 ("    info: 0x%x\n      ", reg_info[this_reg]);  \
+         DEBUG_PRINT2 (" match_null=%d",                               \
+                       REG_MATCH_NULL_STRING_P (reg_info[this_reg]));  \
+         DEBUG_PRINT2 (" active=%d", IS_ACTIVE (reg_info[this_reg]));  \
+         DEBUG_PRINT2 (" matched_something=%d",                        \
+                       MATCHED_SOMETHING (reg_info[this_reg]));        \
+         DEBUG_PRINT2 (" ever_matched=%d",                             \
+                       EVER_MATCHED_SOMETHING (reg_info[this_reg]));   \
+         DEBUG_PRINT1 ("\n");                                          \
+         PUSH_FAILURE_ELT (reg_info[this_reg].word);                   \
+       }                                                               \
+                                                                       \
+    DEBUG_PRINT2 ("  Pushing  low active reg: %d\n", lowest_active_reg);\
+    PUSH_FAILURE_INT (lowest_active_reg);                              \
+                                                                       \
+    DEBUG_PRINT2 ("  Pushing high active reg: %d\n", highest_active_reg);\
+    PUSH_FAILURE_INT (highest_active_reg);                             \
+                                                                       \
+    DEBUG_PRINT2 ("  Pushing pattern 0x%x:\n", pattern_place);         \
+    DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern_place, pend);          \
+    PUSH_FAILURE_POINTER (pattern_place);                              \
+                                                                       \
+    DEBUG_PRINT2 ("  Pushing string 0x%x: `", string_place);           \
+    DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2,   \
+                                size2);                                \
+    DEBUG_PRINT1 ("'\n");                                              \
+    PUSH_FAILURE_POINTER (string_place);                               \
+                                                                       \
+    DEBUG_PRINT2 ("  Pushing failure id: %u\n", failure_id);           \
+    DEBUG_PUSH (failure_id);                                           \
+  } while (0)
+
+/* This is the number of items that are pushed and popped on the stack
+   for each register.  */
+#define NUM_REG_ITEMS  3
+
+/* Individual items aside from the registers.  */
+#ifdef DEBUG
+#define NUM_NONREG_ITEMS 5 /* Includes failure point id.  */
+#else
+#define NUM_NONREG_ITEMS 4
+#endif
+
+/* We push at most this many items on the stack.  */
+/* We used to use (num_regs - 1), which is the number of registers
+   this regexp will save; but that was changed to 5
+   to avoid stack overflow for a regexp with lots of parens.  */
+#define MAX_FAILURE_ITEMS (5 * NUM_REG_ITEMS + NUM_NONREG_ITEMS)
+
+/* We actually push this many items.  */
+#define NUM_FAILURE_ITEMS                              \
+  (((0                                                 \
+     ? 0 : highest_active_reg - lowest_active_reg + 1) \
+    * NUM_REG_ITEMS)                                   \
+   + NUM_NONREG_ITEMS)
+
+/* How many items can still be added to the stack without overflowing it.  */
+#define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail)
+
+
+/* Pops what PUSH_FAIL_STACK pushes.
+
+   We restore into the parameters, all of which should be lvalues:
+     STR -- the saved data position.
+     PAT -- the saved pattern position.
+     LOW_REG, HIGH_REG -- the highest and lowest active registers.
+     REGSTART, REGEND -- arrays of string positions.
+     REG_INFO -- array of information about each subexpression.
+
+   Also assumes the variables `fail_stack' and (if debugging), `bufp',
+   `pend', `string1', `size1', `string2', and `size2'.  */
+
+#define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)\
+{                                                                      \
+  DEBUG_STATEMENT (fail_stack_elt_t failure_id;)                       \
+  s_reg_t this_reg;                                                    \
+  const unsigned char *string_temp;                                    \
+                                                                       \
+  assert (!FAIL_STACK_EMPTY ());                                       \
+                                                                       \
+  /* Remove failure points and point to how many regs pushed.  */      \
+  DEBUG_PRINT1 ("POP_FAILURE_POINT:\n");                               \
+  DEBUG_PRINT2 ("  Before pop, next avail: %d\n", fail_stack.avail);   \
+  DEBUG_PRINT2 ("                    size: %d\n", fail_stack.size);    \
+                                                                       \
+  assert (fail_stack.avail >= NUM_NONREG_ITEMS);                       \
+                                                                       \
+  DEBUG_POP (&failure_id);                                             \
+  DEBUG_PRINT2 ("  Popping failure id: %u\n", failure_id);             \
+                                                                       \
+  /* If the saved string location is NULL, it came from an             \
+     on_failure_keep_string_jump opcode, and we want to throw away the \
+     saved NULL, thus retaining our current position in the string.  */        \
+  string_temp = POP_FAILURE_POINTER ();                                        \
+  if (string_temp != NULL)                                             \
+    str = (const char *) string_temp;                                  \
+                                                                       \
+  DEBUG_PRINT2 ("  Popping string 0x%x: `", str);                      \
+  DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2);     \
+  DEBUG_PRINT1 ("'\n");                                                        \
+                                                                       \
+  pat = (unsigned char *) POP_FAILURE_POINTER ();                      \
+  DEBUG_PRINT2 ("  Popping pattern 0x%x:\n", pat);                     \
+  DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend);                      \
+                                                                       \
+  /* Restore register info.  */                                                \
+  high_reg = (active_reg_t) POP_FAILURE_INT ();                                \
+  DEBUG_PRINT2 ("  Popping high active reg: %d\n", high_reg);          \
+                                                                       \
+  low_reg = (active_reg_t) POP_FAILURE_INT ();                         \
+  DEBUG_PRINT2 ("  Popping  low active reg: %d\n", low_reg);           \
+                                                                       \
+  if (1)                                                               \
+    for (this_reg = high_reg; this_reg >= low_reg; this_reg--)         \
+      {                                                                        \
+       DEBUG_PRINT2 ("    Popping reg: %d\n", this_reg);               \
+                                                                       \
+       reg_info[this_reg].word = POP_FAILURE_ELT ();                   \
+       DEBUG_PRINT2 ("      info: 0x%x\n", reg_info[this_reg]);        \
+                                                                       \
+       regend[this_reg] = (const char *) POP_FAILURE_POINTER ();       \
+       DEBUG_PRINT2 ("      end: 0x%x\n", regend[this_reg]);           \
+                                                                       \
+       regstart[this_reg] = (const char *) POP_FAILURE_POINTER ();     \
+       DEBUG_PRINT2 ("      start: 0x%x\n", regstart[this_reg]);       \
+      }                                                                        \
+  else                                                                 \
+    {                                                                  \
+      for (this_reg = highest_active_reg; this_reg > high_reg; this_reg--) \
+       {                                                               \
+         reg_info[this_reg].word.integer = 0;                          \
+         regend[this_reg] = 0;                                         \
+         regstart[this_reg] = 0;                                       \
+       }                                                               \
+      highest_active_reg = high_reg;                                   \
+    }                                                                  \
+                                                                       \
+  set_regs_matched_done = 0;                                           \
+  DEBUG_STATEMENT (nfailure_points_popped++);                          \
+} /* POP_FAILURE_POINT */
+
+
+\f
+/* Structure for per-register (a.k.a. per-group) information.
+   Other register information, such as the
+   starting and ending positions (which are addresses), and the list of
+   inner groups (which is a bits list) are maintained in separate
+   variables.
+
+   We are making a (strictly speaking) nonportable assumption here: that
+   the compiler will pack our bit fields into something that fits into
+   the type of `word', i.e., is something that fits into one item on the
+   failure stack.  */
+
+
+/* Declarations and macros for re_match_2.  */
+
+typedef union
+{
+  fail_stack_elt_t word;
+  struct
+  {
+      /* This field is one if this group can match the empty string,
+         zero if not.  If not yet determined,  `MATCH_NULL_UNSET_VALUE'.  */
+#define MATCH_NULL_UNSET_VALUE 3
+    unsigned match_null_string_p : 2;
+    unsigned is_active : 1;
+    unsigned matched_something : 1;
+    unsigned ever_matched_something : 1;
+  } bits;
+} register_info_type;
+
+#define REG_MATCH_NULL_STRING_P(R)  ((R).bits.match_null_string_p)
+#define IS_ACTIVE(R)  ((R).bits.is_active)
+#define MATCHED_SOMETHING(R)  ((R).bits.matched_something)
+#define EVER_MATCHED_SOMETHING(R)  ((R).bits.ever_matched_something)
+
+
+/* Call this when have matched a real character; it sets `matched' flags
+   for the subexpressions which we are currently inside.  Also records
+   that those subexprs have matched.  */
+#define SET_REGS_MATCHED()                                             \
+  do                                                                   \
+    {                                                                  \
+      if (!set_regs_matched_done)                                      \
+       {                                                               \
+         active_reg_t r;                                               \
+         set_regs_matched_done = 1;                                    \
+         for (r = lowest_active_reg; r <= highest_active_reg; r++)     \
+           {                                                           \
+             MATCHED_SOMETHING (reg_info[r])                           \
+               = EVER_MATCHED_SOMETHING (reg_info[r])                  \
+               = 1;                                                    \
+           }                                                           \
+       }                                                               \
+    }                                                                  \
+  while (0)
+
+/* Registers are set to a sentinel when they haven't yet matched.  */
+static char reg_unset_dummy;
+#define REG_UNSET_VALUE (&reg_unset_dummy)
+#define REG_UNSET(e) ((e) == REG_UNSET_VALUE)
+\f
+/* Subroutine declarations and macros for regex_compile.  */
+
+static reg_errcode_t regex_compile _RE_ARGS ((const char *pattern, size_t size,
+                                             reg_syntax_t syntax,
+                                             struct re_pattern_buffer *bufp));
+static void store_op1 _RE_ARGS ((re_opcode_t op, unsigned char *loc, int arg));
+static void store_op2 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
+                                int arg1, int arg2));
+static void insert_op1 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
+                                 int arg, unsigned char *end));
+static void insert_op2 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
+                                 int arg1, int arg2, unsigned char *end));
+static boolean at_begline_loc_p _RE_ARGS ((const char *pattern, const char *p,
+                                          reg_syntax_t syntax));
+static boolean at_endline_loc_p _RE_ARGS ((const char *p, const char *pend,
+                                          reg_syntax_t syntax));
+static reg_errcode_t compile_range _RE_ARGS ((const char **p_ptr,
+                                             const char *pend,
+                                             char *translate,
+                                             reg_syntax_t syntax,
+                                             unsigned char *b));
+
+/* Fetch the next character in the uncompiled pattern---translating it
+   if necessary.  Also cast from a signed character in the constant
+   string passed to us by the user to an unsigned char that we can use
+   as an array index (in, e.g., `translate').  */
+#ifndef PATFETCH
+#define PATFETCH(c)                                                    \
+  do {if (p == pend) return REG_EEND;                                  \
+    c = (unsigned char) *p++;                                          \
+    if (translate) c = (unsigned char) translate[c];                   \
+  } while (0)
+#endif
+
+/* Fetch the next character in the uncompiled pattern, with no
+   translation.  */
+#define PATFETCH_RAW(c)                                                        \
+  do {if (p == pend) return REG_EEND;                                  \
+    c = (unsigned char) *p++;                                          \
+  } while (0)
+
+/* Go backwards one character in the pattern.  */
+#define PATUNFETCH p--
+
+
+/* If `translate' is non-null, return translate[D], else just D.  We
+   cast the subscript to translate because some data is declared as
+   `char *', to avoid warnings when a string constant is passed.  But
+   when we use a character as a subscript we must make it unsigned.  */
+#ifndef TRANSLATE
+#define TRANSLATE(d) \
+  (translate ? (char) translate[(unsigned char) (d)] : (d))
+#endif
+
+
+/* Macros for outputting the compiled pattern into `buffer'.  */
+
+/* If the buffer isn't allocated when it comes in, use this.  */
+#define INIT_BUF_SIZE  32
+
+/* Make sure we have at least N more bytes of space in buffer.  */
+#define GET_BUFFER_SPACE(n)                                            \
+    while ((unsigned long) (b - bufp->buffer + (n)) > bufp->allocated) \
+      EXTEND_BUFFER ()
+
+/* Make sure we have one more byte of buffer space and then add C to it.  */
+#define BUF_PUSH(c)                                                    \
+  do {                                                                 \
+    GET_BUFFER_SPACE (1);                                              \
+    *b++ = (unsigned char) (c);                                                \
+  } while (0)
+
+
+/* Ensure we have two more bytes of buffer space and then append C1 and C2.  */
+#define BUF_PUSH_2(c1, c2)                                             \
+  do {                                                                 \
+    GET_BUFFER_SPACE (2);                                              \
+    *b++ = (unsigned char) (c1);                                       \
+    *b++ = (unsigned char) (c2);                                       \
+  } while (0)
+
+
+/* As with BUF_PUSH_2, except for three bytes.  */
+#define BUF_PUSH_3(c1, c2, c3)                                         \
+  do {                                                                 \
+    GET_BUFFER_SPACE (3);                                              \
+    *b++ = (unsigned char) (c1);                                       \
+    *b++ = (unsigned char) (c2);                                       \
+    *b++ = (unsigned char) (c3);                                       \
+  } while (0)
+
+
+/* Store a jump with opcode OP at LOC to location TO.  We store a
+   relative address offset by the three bytes the jump itself occupies.  */
+#define STORE_JUMP(op, loc, to) \
+  store_op1 (op, loc, (int) ((to) - (loc) - 3))
+
+/* Likewise, for a two-argument jump.  */
+#define STORE_JUMP2(op, loc, to, arg) \
+  store_op2 (op, loc, (int) ((to) - (loc) - 3), arg)
+
+/* Like `STORE_JUMP', but for inserting.  Assume `b' is the buffer end.  */
+#define INSERT_JUMP(op, loc, to) \
+  insert_op1 (op, loc, (int) ((to) - (loc) - 3), b)
+
+/* Like `STORE_JUMP2', but for inserting.  Assume `b' is the buffer end.  */
+#define INSERT_JUMP2(op, loc, to, arg) \
+  insert_op2 (op, loc, (int) ((to) - (loc) - 3), arg, b)
+
+
+/* This is not an arbitrary limit: the arguments which represent offsets
+   into the pattern are two bytes long.  So if 2^16 bytes turns out to
+   be too small, many things would have to change.  */
+/* Any other compiler which, like MSC, has allocation limit below 2^16
+   bytes will have to use approach similar to what was done below for
+   MSC and drop MAX_BUF_SIZE a bit.  Otherwise you may end up
+   reallocating to 0 bytes.  Such thing is not going to work too well.
+   You have been warned!!  */
+#if defined(_MSC_VER)  && !defined(WIN32)
+/* Microsoft C 16-bit versions limit malloc to approx 65512 bytes.
+   The REALLOC define eliminates a flurry of conversion warnings,
+   but is not required. */
+#define MAX_BUF_SIZE  65500L
+#define REALLOC(p,s) realloc ((p), (size_t) (s))
+#else
+#define MAX_BUF_SIZE (1L << 16)
+#define REALLOC(p,s) realloc ((p), (s))
+#endif
+
+/* Extend the buffer by twice its current size via realloc and
+   reset the pointers that pointed into the old block to point to the
+   correct places in the new one.  If extending the buffer results in it
+   being larger than MAX_BUF_SIZE, then flag memory exhausted.  */
+#define EXTEND_BUFFER()                                                        \
+  do {                                                                         \
+    unsigned char *old_buffer = bufp->buffer;                          \
+    if (bufp->allocated == MAX_BUF_SIZE)                               \
+      return REG_ESIZE;                                                        \
+    bufp->allocated <<= 1;                                             \
+    if (bufp->allocated > MAX_BUF_SIZE)                                        \
+      bufp->allocated = MAX_BUF_SIZE;                                  \
+    bufp->buffer = (unsigned char *) REALLOC (bufp->buffer, bufp->allocated);\
+    if (bufp->buffer == NULL)                                          \
+      return REG_ESPACE;                                               \
+    /* If the buffer moved, move all the pointers into it.  */         \
+    if (old_buffer != bufp->buffer)                                    \
+      {                                                                        \
+        b = (b - old_buffer) + bufp->buffer;                           \
+        begalt = (begalt - old_buffer) + bufp->buffer;                 \
+        if (fixup_alt_jump)                                            \
+          fixup_alt_jump = (fixup_alt_jump - old_buffer) + bufp->buffer;\
+        if (laststart)                                                 \
+          laststart = (laststart - old_buffer) + bufp->buffer;         \
+        if (pending_exact)                                             \
+          pending_exact = (pending_exact - old_buffer) + bufp->buffer; \
+      }                                                                        \
+  } while (0)
+
+
+/* Since we have one byte reserved for the register number argument to
+   {start,stop}_memory, the maximum number of groups we can report
+   things about is what fits in that byte.  */
+#define MAX_REGNUM 255
+
+/* But patterns can have more than `MAX_REGNUM' registers.  We just
+   ignore the excess.  */
+typedef unsigned regnum_t;
+
+
+/* Macros for the compile stack.  */
+
+/* Since offsets can go either forwards or backwards, this type needs to
+   be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1.  */
+/* int may be not enough when sizeof(int) == 2.  */
+typedef long pattern_offset_t;
+
+typedef struct
+{
+  pattern_offset_t begalt_offset;
+  pattern_offset_t fixup_alt_jump;
+  pattern_offset_t inner_group_offset;
+  pattern_offset_t laststart_offset;
+  regnum_t regnum;
+} compile_stack_elt_t;
+
+
+typedef struct
+{
+  compile_stack_elt_t *stack;
+  unsigned size;
+  unsigned avail;                      /* Offset of next open position.  */
+} compile_stack_type;
+
+
+#define INIT_COMPILE_STACK_SIZE 32
+
+#define COMPILE_STACK_EMPTY  (compile_stack.avail == 0)
+#define COMPILE_STACK_FULL  (compile_stack.avail == compile_stack.size)
+
+/* The next available element.  */
+#define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail])
+
+
+/* Set the bit for character C in a list.  */
+#define SET_LIST_BIT(c)                               \
+  (b[((unsigned char) (c)) / BYTEWIDTH]               \
+   |= 1 << (((unsigned char) c) % BYTEWIDTH))
+
+
+/* Get the next unsigned number in the uncompiled pattern.  */
+#define GET_UNSIGNED_NUMBER(num)                                       \
+  { if (p != pend)                                                     \
+     {                                                                 \
+       PATFETCH (c);                                                   \
+       while (ISDIGIT (c))                                             \
+         {                                                             \
+           if (num < 0)                                                        \
+              num = 0;                                                 \
+           num = num * 10 + c - '0';                                   \
+           if (p == pend)                                              \
+              break;                                                   \
+           PATFETCH (c);                                               \
+         }                                                             \
+       }                                                               \
+    }
+
+#if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
+/* The GNU C library provides support for user-defined character classes
+   and the functions from ISO C amendement 1.  */
+# ifdef CHARCLASS_NAME_MAX
+#  define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
+# else
+/* This shouldn't happen but some implementation might still have this
+   problem.  Use a reasonable default value.  */
+#  define CHAR_CLASS_MAX_LENGTH 256
+# endif
+
+# define IS_CHAR_CLASS(string) wctype (string)
+#else
+# define CHAR_CLASS_MAX_LENGTH  6 /* Namely, `xdigit'.  */
+
+# define IS_CHAR_CLASS(string)                                         \
+   (STREQ (string, "alpha") || STREQ (string, "upper")                 \
+    || STREQ (string, "lower") || STREQ (string, "digit")              \
+    || STREQ (string, "alnum") || STREQ (string, "xdigit")             \
+    || STREQ (string, "space") || STREQ (string, "print")              \
+    || STREQ (string, "punct") || STREQ (string, "graph")              \
+    || STREQ (string, "cntrl") || STREQ (string, "blank"))
+#endif
+\f
+#ifndef MATCH_MAY_ALLOCATE
+
+/* If we cannot allocate large objects within re_match_2_internal,
+   we make the fail stack and register vectors global.
+   The fail stack, we grow to the maximum size when a regexp
+   is compiled.
+   The register vectors, we adjust in size each time we
+   compile a regexp, according to the number of registers it needs.  */
+
+static fail_stack_type fail_stack;
+
+/* Size with which the following vectors are currently allocated.
+   That is so we can make them bigger as needed,
+   but never make them smaller.  */
+static int regs_allocated_size;
+
+static const char **     regstart, **     regend;
+static const char ** old_regstart, ** old_regend;
+static const char **best_regstart, **best_regend;
+static register_info_type *reg_info;
+static const char **reg_dummy;
+static register_info_type *reg_info_dummy;
+
+/* Make the register vectors big enough for NUM_REGS registers,
+   but don't make them smaller.  */
+
+static
+regex_grow_registers (num_regs)
+     int num_regs;
+{
+  if (num_regs > regs_allocated_size)
+    {
+      RETALLOC_IF (regstart,    num_regs, const char *);
+      RETALLOC_IF (regend,      num_regs, const char *);
+      RETALLOC_IF (old_regstart, num_regs, const char *);
+      RETALLOC_IF (old_regend,  num_regs, const char *);
+      RETALLOC_IF (best_regstart, num_regs, const char *);
+      RETALLOC_IF (best_regend,         num_regs, const char *);
+      RETALLOC_IF (reg_info,    num_regs, register_info_type);
+      RETALLOC_IF (reg_dummy,   num_regs, const char *);
+      RETALLOC_IF (reg_info_dummy, num_regs, register_info_type);
+
+      regs_allocated_size = num_regs;
+    }
+}
+
+#endif /* not MATCH_MAY_ALLOCATE */
+\f
+static boolean group_in_compile_stack _RE_ARGS ((compile_stack_type
+                                                compile_stack,
+                                                regnum_t regnum));
+
+/* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX.
+   Returns one of error codes defined in `regex.h', or zero for success.
+
+   Assumes the `allocated' (and perhaps `buffer') and `translate'
+   fields are set in BUFP on entry.
+
+   If it succeeds, results are put in BUFP (if it returns an error, the
+   contents of BUFP are undefined):
+     `buffer' is the compiled pattern;
+     `syntax' is set to SYNTAX;
+     `used' is set to the length of the compiled pattern;
+     `fastmap_accurate' is zero;
+     `re_nsub' is the number of subexpressions in PATTERN;
+     `not_bol' and `not_eol' are zero;
+
+   The `fastmap' and `newline_anchor' fields are neither
+   examined nor set.  */
+
+/* Return, freeing storage we allocated.  */
+#define FREE_STACK_RETURN(value)               \
+  return (free (compile_stack.stack), value)           /* __MEM_CHECKED__ */
+
+static reg_errcode_t
+regex_compile (pattern, size, syntax, bufp)
+     const char *pattern;
+     size_t size;
+     reg_syntax_t syntax;
+     struct re_pattern_buffer *bufp;
+{
+  /* We fetch characters from PATTERN here.  Even though PATTERN is
+     `char *' (i.e., signed), we declare these variables as unsigned, so
+     they can be reliably used as array indices.  */
+  register unsigned char c, c1;
+
+  /* A random temporary spot in PATTERN.  */
+  const char *p1;
+
+  /* Points to the end of the buffer, where we should append.  */
+  register unsigned char *b;
+
+  /* Keeps track of unclosed groups.  */
+  compile_stack_type compile_stack;
+
+  /* Points to the current (ending) position in the pattern.  */
+  const char *p = pattern;
+  const char *pend = pattern + size;
+
+  /* How to translate the characters in the pattern.  */
+  RE_TRANSLATE_TYPE translate = bufp->translate;
+
+  /* Address of the count-byte of the most recently inserted `exactn'
+     command.  This makes it possible to tell if a new exact-match
+     character can be added to that command or if the character requires
+     a new `exactn' command.  */
+  unsigned char *pending_exact = 0;
+
+  /* Address of start of the most recently finished expression.
+     This tells, e.g., postfix * where to find the start of its
+     operand.  Reset at the beginning of groups and alternatives.  */
+  unsigned char *laststart = 0;
+
+  /* Address of beginning of regexp, or inside of last group.  */
+  unsigned char *begalt;
+
+  /* Place in the uncompiled pattern (i.e., the {) to
+     which to go back if the interval is invalid.  */
+  const char *beg_interval;
+
+  /* Address of the place where a forward jump should go to the end of
+     the containing expression.  Each alternative of an `or' -- except the
+     last -- ends with a forward jump of this sort.  */
+  unsigned char *fixup_alt_jump = 0;
+
+  /* Counts open-groups as they are encountered.  Remembered for the
+     matching close-group on the compile stack, so the same register
+     number is put in the stop_memory as the start_memory.  */
+  regnum_t regnum = 0;
+
+#ifdef DEBUG
+  DEBUG_PRINT1 ("\nCompiling pattern: ");
+  if (debug)
+    {
+      unsigned debug_count;
+
+      for (debug_count = 0; debug_count < size; debug_count++)
+        putchar (pattern[debug_count]);
+      putchar ('\n');
+    }
+#endif /* DEBUG */
+
+  /* Initialize the compile stack.  */
+  compile_stack.stack = TALLOC (INIT_COMPILE_STACK_SIZE, compile_stack_elt_t);
+  if (compile_stack.stack == NULL)
+    return REG_ESPACE;
+
+  compile_stack.size = INIT_COMPILE_STACK_SIZE;
+  compile_stack.avail = 0;
+
+  /* Initialize the pattern buffer.  */
+  bufp->syntax = syntax;
+  bufp->fastmap_accurate = 0;
+  bufp->not_bol = bufp->not_eol = 0;
+
+  /* Set `used' to zero, so that if we return an error, the pattern
+     printer (for debugging) will think there's no pattern.  We reset it
+     at the end.  */
+  bufp->used = 0;
+
+  /* Always count groups, whether or not bufp->no_sub is set.  */
+  bufp->re_nsub = 0;
+
+#if !defined (emacs) && !defined (SYNTAX_TABLE)
+  /* Initialize the syntax table.  */
+   init_syntax_once ();
+#endif
+
+  if (bufp->allocated == 0)
+    {
+      if (bufp->buffer)
+       { /* If zero allocated, but buffer is non-null, try to realloc
+             enough space.  This loses if buffer's address is bogus, but
+             that is the user's responsibility.  */
+          RETALLOC (bufp->buffer, INIT_BUF_SIZE, unsigned char);
+        }
+      else
+        { /* Caller did not allocate a buffer.  Do it for them.  */
+          bufp->buffer = TALLOC (INIT_BUF_SIZE, unsigned char);
+        }
+      if (!bufp->buffer) FREE_STACK_RETURN (REG_ESPACE);
+
+      bufp->allocated = INIT_BUF_SIZE;
+    }
+
+  begalt = b = bufp->buffer;
+
+  /* Loop through the uncompiled pattern until we're at the end.  */
+  while (p != pend)
+    {
+      PATFETCH (c);
+
+      switch (c)
+        {
+        case '^':
+          {
+            if (   /* If at start of pattern, it's an operator.  */
+                   p == pattern + 1
+                   /* If context independent, it's an operator.  */
+                || syntax & RE_CONTEXT_INDEP_ANCHORS
+                   /* Otherwise, depends on what's come before.  */
+                || at_begline_loc_p (pattern, p, syntax))
+              BUF_PUSH (begline);
+            else
+              goto normal_char;
+          }
+          break;
+
+
+        case '$':
+          {
+            if (   /* If at end of pattern, it's an operator.  */
+                   p == pend
+                   /* If context independent, it's an operator.  */
+                || syntax & RE_CONTEXT_INDEP_ANCHORS
+                   /* Otherwise, depends on what's next.  */
+                || at_endline_loc_p (p, pend, syntax))
+               BUF_PUSH (endline);
+             else
+               goto normal_char;
+           }
+           break;
+
+
+       case '+':
+        case '?':
+          if ((syntax & RE_BK_PLUS_QM)
+              || (syntax & RE_LIMITED_OPS))
+            goto normal_char;
+        handle_plus:
+        case '*':
+          /* If there is no previous pattern... */
+          if (!laststart)
+            {
+              if (syntax & RE_CONTEXT_INVALID_OPS)
+                FREE_STACK_RETURN (REG_BADRPT);
+              else if (!(syntax & RE_CONTEXT_INDEP_OPS))
+                goto normal_char;
+            }
+
+          {
+            /* Are we optimizing this jump?  */
+            boolean keep_string_p = false;
+
+            /* 1 means zero (many) matches is allowed.  */
+            char zero_times_ok = 0, many_times_ok = 0;
+
+            /* If there is a sequence of repetition chars, collapse it
+               down to just one (the right one).  We can't combine
+               interval operators with these because of, e.g., `a{2}*',
+               which should only match an even number of `a's.  */
+
+            for (;;)
+              {
+                zero_times_ok |= c != '+';
+                many_times_ok |= c != '?';
+
+                if (p == pend)
+                  break;
+
+                PATFETCH (c);
+
+                if (c == '*'
+                    || (!(syntax & RE_BK_PLUS_QM) && (c == '+' || c == '?')))
+                  ;
+
+                else if (syntax & RE_BK_PLUS_QM  &&  c == '\\')
+                  {
+                    if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
+
+                    PATFETCH (c1);
+                    if (!(c1 == '+' || c1 == '?'))
+                      {
+                        PATUNFETCH;
+                        PATUNFETCH;
+                        break;
+                      }
+
+                    c = c1;
+                  }
+                else
+                  {
+                    PATUNFETCH;
+                    break;
+                  }
+
+                /* If we get here, we found another repeat character.  */
+               }
+
+            /* Star, etc. applied to an empty pattern is equivalent
+               to an empty pattern.  */
+            if (!laststart)
+              break;
+
+            /* Now we know whether or not zero matches is allowed
+               and also whether or not two or more matches is allowed.  */
+            if (many_times_ok)
+              { /* More than one repetition is allowed, so put in at the
+                   end a backward relative jump from `b' to before the next
+                   jump we're going to put in below (which jumps from
+                   laststart to after this jump).
+
+                   But if we are at the `*' in the exact sequence `.*\n',
+                   insert an unconditional jump backwards to the .,
+                   instead of the beginning of the loop.  This way we only
+                   push a failure point once, instead of every time
+                   through the loop.  */
+                assert (p - 1 > pattern);
+
+                /* Allocate the space for the jump.  */
+                GET_BUFFER_SPACE (3);
+
+                /* We know we are not at the first character of the pattern,
+                   because laststart was nonzero.  And we've already
+                   incremented `p', by the way, to be the character after
+                   the `*'.  Do we have to do something analogous here
+                   for null bytes, because of RE_DOT_NOT_NULL?  */
+                if (TRANSLATE (*(p - 2)) == TRANSLATE ('.')
+                   && zero_times_ok
+                    && p < pend && TRANSLATE (*p) == TRANSLATE ('\n')
+                    && !(syntax & RE_DOT_NEWLINE))
+                  { /* We have .*\n.  */
+                    STORE_JUMP (jump, b, laststart);
+                    keep_string_p = true;
+                  }
+                else
+                  /* Anything else.  */
+                  STORE_JUMP (maybe_pop_jump, b, laststart - 3);
+
+                /* We've added more stuff to the buffer.  */
+                b += 3;
+              }
+
+            /* On failure, jump from laststart to b + 3, which will be the
+               end of the buffer after this jump is inserted.  */
+            GET_BUFFER_SPACE (3);
+            INSERT_JUMP (keep_string_p ? on_failure_keep_string_jump
+                                       : on_failure_jump,
+                         laststart, b + 3);
+            pending_exact = 0;
+            b += 3;
+
+            if (!zero_times_ok)
+              {
+                /* At least one repetition is required, so insert a
+                   `dummy_failure_jump' before the initial
+                   `on_failure_jump' instruction of the loop. This
+                   effects a skip over that instruction the first time
+                   we hit that loop.  */
+                GET_BUFFER_SPACE (3);
+                INSERT_JUMP (dummy_failure_jump, laststart, laststart + 6);
+                b += 3;
+              }
+            }
+         break;
+
+
+       case '.':
+          laststart = b;
+          BUF_PUSH (anychar);
+          break;
+
+
+        case '[':
+          {
+            boolean had_char_class = false;
+
+            if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+            /* Ensure that we have enough space to push a charset: the
+               opcode, the length count, and the bitset; 34 bytes in all.  */
+           GET_BUFFER_SPACE (34);
+
+            laststart = b;
+
+            /* We test `*p == '^' twice, instead of using an if
+               statement, so we only need one BUF_PUSH.  */
+            BUF_PUSH (*p == '^' ? charset_not : charset);
+            if (*p == '^')
+              p++;
+
+            /* Remember the first position in the bracket expression.  */
+            p1 = p;
+
+            /* Push the number of bytes in the bitmap.  */
+            BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH);
+
+            /* Clear the whole map.  */
+            bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH);
+
+            /* charset_not matches newline according to a syntax bit.  */
+            if ((re_opcode_t) b[-2] == charset_not
+                && (syntax & RE_HAT_LISTS_NOT_NEWLINE))
+              SET_LIST_BIT ('\n');
+
+            /* Read in characters and ranges, setting map bits.  */
+            for (;;)
+              {
+                if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                PATFETCH (c);
+
+                /* \ might escape characters inside [...] and [^...].  */
+                if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\')
+                  {
+                    if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
+
+                    PATFETCH (c1);
+                    SET_LIST_BIT (c1);
+                    continue;
+                  }
+
+                /* Could be the end of the bracket expression.  If it's
+                   not (i.e., when the bracket expression is `[]' so
+                   far), the ']' character bit gets set way below.  */
+                if (c == ']' && p != p1 + 1)
+                  break;
+
+                /* Look ahead to see if it's a range when the last thing
+                   was a character class.  */
+                if (had_char_class && c == '-' && *p != ']')
+                  FREE_STACK_RETURN (REG_ERANGE);
+
+                /* Look ahead to see if it's a range when the last thing
+                   was a character: if this is a hyphen not at the
+                   beginning or the end of a list, then it's the range
+                   operator.  */
+                if (c == '-'
+                    && !(p - 2 >= pattern && p[-2] == '[')
+                    && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^')
+                    && *p != ']')
+                  {
+                    reg_errcode_t ret
+                      = compile_range (&p, pend, translate, syntax, b);
+                    if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
+                  }
+
+                else if (p[0] == '-' && p[1] != ']')
+                  { /* This handles ranges made up of characters only.  */
+                    reg_errcode_t ret;
+
+                   /* Move past the `-'.  */
+                    PATFETCH (c1);
+
+                    ret = compile_range (&p, pend, translate, syntax, b);
+                    if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
+                  }
+
+                /* See if we're at the beginning of a possible character
+                   class.  */
+
+                else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':')
+                  { /* Leave room for the null.  */
+                    char str[CHAR_CLASS_MAX_LENGTH + 1];
+
+                    PATFETCH (c);
+                    c1 = 0;
+
+                    /* If pattern is `[[:'.  */
+                    if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                    for (;;)
+                      {
+                        PATFETCH (c);
+                        if (c == ':' || c == ']' || p == pend
+                            || c1 == CHAR_CLASS_MAX_LENGTH)
+                          break;
+                        str[c1++] = c;
+                      }
+                    str[c1] = '\0';
+
+                    /* If isn't a word bracketed by `[:' and:`]':
+                       undo the ending character, the letters, and leave
+                       the leading `:' and `[' (but set bits for them).  */
+                    if (c == ':' && *p == ']')
+                      {
+#if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
+                        boolean is_lower = STREQ (str, "lower");
+                        boolean is_upper = STREQ (str, "upper");
+                       wctype_t wt;
+                        int ch;
+
+                       wt = wctype (str);
+                       if (wt == 0)
+                         FREE_STACK_RETURN (REG_ECTYPE);
+
+                        /* Throw away the ] at the end of the character
+                           class.  */
+                        PATFETCH (c);
+
+                        if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                        for (ch = 0; ch < 1 << BYTEWIDTH; ++ch)
+                         {
+                           if (iswctype (btowc (ch), wt))
+                             SET_LIST_BIT (ch);
+
+                           if (translate && (is_upper || is_lower)
+                               && (ISUPPER (ch) || ISLOWER (ch)))
+                             SET_LIST_BIT (ch);
+                         }
+
+                        had_char_class = true;
+#else
+                        int ch;
+                        boolean is_alnum = STREQ (str, "alnum");
+                        boolean is_alpha = STREQ (str, "alpha");
+                        boolean is_blank = STREQ (str, "blank");
+                        boolean is_cntrl = STREQ (str, "cntrl");
+                        boolean is_digit = STREQ (str, "digit");
+                        boolean is_graph = STREQ (str, "graph");
+                        boolean is_lower = STREQ (str, "lower");
+                        boolean is_print = STREQ (str, "print");
+                        boolean is_punct = STREQ (str, "punct");
+                        boolean is_space = STREQ (str, "space");
+                        boolean is_upper = STREQ (str, "upper");
+                        boolean is_xdigit = STREQ (str, "xdigit");
+
+                        if (!IS_CHAR_CLASS (str))
+                         FREE_STACK_RETURN (REG_ECTYPE);
+
+                        /* Throw away the ] at the end of the character
+                           class.  */
+                        PATFETCH (c);
+
+                        if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                        for (ch = 0; ch < 1 << BYTEWIDTH; ch++)
+                          {
+                           /* This was split into 3 if's to
+                              avoid an arbitrary limit in some compiler.  */
+                            if (   (is_alnum  && ISALNUM (ch))
+                                || (is_alpha  && ISALPHA (ch))
+                                || (is_blank  && ISBLANK (ch))
+                                || (is_cntrl  && ISCNTRL (ch)))
+                             SET_LIST_BIT (ch);
+                           if (   (is_digit  && ISDIGIT (ch))
+                                || (is_graph  && ISGRAPH (ch))
+                                || (is_lower  && ISLOWER (ch))
+                                || (is_print  && ISPRINT (ch)))
+                             SET_LIST_BIT (ch);
+                           if (   (is_punct  && ISPUNCT (ch))
+                                || (is_space  && ISSPACE (ch))
+                                || (is_upper  && ISUPPER (ch))
+                                || (is_xdigit && ISXDIGIT (ch)))
+                             SET_LIST_BIT (ch);
+                           if (   translate && (is_upper || is_lower)
+                               && (ISUPPER (ch) || ISLOWER (ch)))
+                             SET_LIST_BIT (ch);
+                          }
+                        had_char_class = true;
+#endif /* libc || wctype.h */
+                      }
+                    else
+                      {
+                        c1++;
+                        while (c1--)
+                          PATUNFETCH;
+                        SET_LIST_BIT ('[');
+                        SET_LIST_BIT (':');
+                        had_char_class = false;
+                      }
+                  }
+                else
+                  {
+                    had_char_class = false;
+                    SET_LIST_BIT (c);
+                  }
+              }
+
+            /* Discard any (non)matching list bytes that are all 0 at the
+               end of the map.  Decrease the map-length byte too.  */
+            while ((int) b[-1] > 0 && b[b[-1] - 1] == 0)
+              b[-1]--;
+            b += b[-1];
+          }
+          break;
+
+
+       case '(':
+          if (syntax & RE_NO_BK_PARENS)
+            goto handle_open;
+          else
+            goto normal_char;
+
+
+        case ')':
+          if (syntax & RE_NO_BK_PARENS)
+            goto handle_close;
+          else
+            goto normal_char;
+
+
+        case '\n':
+          if (syntax & RE_NEWLINE_ALT)
+            goto handle_alt;
+          else
+            goto normal_char;
+
+
+       case '|':
+          if (syntax & RE_NO_BK_VBAR)
+            goto handle_alt;
+          else
+            goto normal_char;
+
+
+        case '{':
+           if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES)
+             goto handle_interval;
+           else
+             goto normal_char;
+
+
+        case '\\':
+          if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
+
+          /* Do not translate the character after the \, so that we can
+             distinguish, e.g., \B from \b, even if we normally would
+             translate, e.g., B to b.  */
+          PATFETCH_RAW (c);
+
+          switch (c)
+            {
+            case '(':
+              if (syntax & RE_NO_BK_PARENS)
+                goto normal_backslash;
+
+            handle_open:
+              bufp->re_nsub++;
+              regnum++;
+
+              if (COMPILE_STACK_FULL)
+                {
+                  RETALLOC (compile_stack.stack, compile_stack.size << 1,
+                            compile_stack_elt_t);
+                  if (compile_stack.stack == NULL) return REG_ESPACE;
+
+                  compile_stack.size <<= 1;
+                }
+
+              /* These are the values to restore when we hit end of this
+                 group.  They are all relative offsets, so that if the
+                 whole pattern moves because of realloc, they will still
+                 be valid.  */
+              COMPILE_STACK_TOP.begalt_offset = begalt - bufp->buffer;
+              COMPILE_STACK_TOP.fixup_alt_jump
+                = fixup_alt_jump ? fixup_alt_jump - bufp->buffer + 1 : 0;
+              COMPILE_STACK_TOP.laststart_offset = b - bufp->buffer;
+              COMPILE_STACK_TOP.regnum = regnum;
+
+              /* We will eventually replace the 0 with the number of
+                 groups inner to this one.  But do not push a
+                 start_memory for groups beyond the last one we can
+                 represent in the compiled pattern.  */
+              if (regnum <= MAX_REGNUM)
+                {
+                  COMPILE_STACK_TOP.inner_group_offset = b - bufp->buffer + 2;
+                  BUF_PUSH_3 (start_memory, regnum, 0);
+                }
+
+              compile_stack.avail++;
+
+              fixup_alt_jump = 0;
+              laststart = 0;
+              begalt = b;
+             /* If we've reached MAX_REGNUM groups, then this open
+                won't actually generate any code, so we'll have to
+                clear pending_exact explicitly.  */
+             pending_exact = 0;
+              break;
+
+
+            case ')':
+              if (syntax & RE_NO_BK_PARENS) goto normal_backslash;
+
+              if (COMPILE_STACK_EMPTY)
+                if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
+                  goto normal_backslash;
+                else
+                  FREE_STACK_RETURN (REG_ERPAREN);
+
+            handle_close:
+              if (fixup_alt_jump)
+                { /* Push a dummy failure point at the end of the
+                     alternative for a possible future
+                     `pop_failure_jump' to pop.  See comments at
+                     `push_dummy_failure' in `re_match_2'.  */
+                  BUF_PUSH (push_dummy_failure);
+
+                  /* We allocated space for this jump when we assigned
+                     to `fixup_alt_jump', in the `handle_alt' case below.  */
+                  STORE_JUMP (jump_past_alt, fixup_alt_jump, b - 1);
+                }
+
+              /* See similar code for backslashed left paren above.  */
+              if (COMPILE_STACK_EMPTY)
+                if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
+                  goto normal_char;
+                else
+                  FREE_STACK_RETURN (REG_ERPAREN);
+
+              /* Since we just checked for an empty stack above, this
+                 ``can't happen''.  */
+              assert (compile_stack.avail != 0);
+              {
+                /* We don't just want to restore into `regnum', because
+                   later groups should continue to be numbered higher,
+                   as in `(ab)c(de)' -- the second group is #2.  */
+                regnum_t this_group_regnum;
+
+                compile_stack.avail--;
+                begalt = bufp->buffer + COMPILE_STACK_TOP.begalt_offset;
+                fixup_alt_jump
+                  = COMPILE_STACK_TOP.fixup_alt_jump
+                    ? bufp->buffer + COMPILE_STACK_TOP.fixup_alt_jump - 1
+                    : 0;
+                laststart = bufp->buffer + COMPILE_STACK_TOP.laststart_offset;
+                this_group_regnum = COMPILE_STACK_TOP.regnum;
+               /* If we've reached MAX_REGNUM groups, then this open
+                  won't actually generate any code, so we'll have to
+                  clear pending_exact explicitly.  */
+               pending_exact = 0;
+
+                /* We're at the end of the group, so now we know how many
+                   groups were inside this one.  */
+                if (this_group_regnum <= MAX_REGNUM)
+                  {
+                    unsigned char *inner_group_loc
+                      = bufp->buffer + COMPILE_STACK_TOP.inner_group_offset;
+
+                    *inner_group_loc = regnum - this_group_regnum;
+                    BUF_PUSH_3 (stop_memory, this_group_regnum,
+                                regnum - this_group_regnum);
+                  }
+              }
+              break;
+
+
+            case '|':                                  /* `\|'.  */
+              if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR)
+                goto normal_backslash;
+            handle_alt:
+              if (syntax & RE_LIMITED_OPS)
+                goto normal_char;
+
+              /* Insert before the previous alternative a jump which
+                 jumps to this alternative if the former fails.  */
+              GET_BUFFER_SPACE (3);
+              INSERT_JUMP (on_failure_jump, begalt, b + 6);
+              pending_exact = 0;
+              b += 3;
+
+              /* The alternative before this one has a jump after it
+                 which gets executed if it gets matched.  Adjust that
+                 jump so it will jump to this alternative's analogous
+                 jump (put in below, which in turn will jump to the next
+                 (if any) alternative's such jump, etc.).  The last such
+                 jump jumps to the correct final destination.  A picture:
+                          _____ _____
+                          |   | |   |
+                          |   v |   v
+                         a | b   | c
+
+                 If we are at `b', then fixup_alt_jump right now points to a
+                 three-byte space after `a'.  We'll put in the jump, set
+                 fixup_alt_jump to right after `b', and leave behind three
+                 bytes which we'll fill in when we get to after `c'.  */
+
+              if (fixup_alt_jump)
+                STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
+
+              /* Mark and leave space for a jump after this alternative,
+                 to be filled in later either by next alternative or
+                 when know we're at the end of a series of alternatives.  */
+              fixup_alt_jump = b;
+              GET_BUFFER_SPACE (3);
+              b += 3;
+
+              laststart = 0;
+              begalt = b;
+              break;
+
+
+            case '{':
+              /* If \{ is a literal.  */
+              if (!(syntax & RE_INTERVALS)
+                     /* If we're at `\{' and it's not the open-interval
+                        operator.  */
+                  || ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
+                  || (p - 2 == pattern  &&  p == pend))
+                goto normal_backslash;
+
+            handle_interval:
+              {
+                /* If got here, then the syntax allows intervals.  */
+
+                /* At least (most) this many matches must be made.  */
+                int lower_bound = -1, upper_bound = -1;
+
+                beg_interval = p - 1;
+
+                if (p == pend)
+                  {
+                    if (syntax & RE_NO_BK_BRACES)
+                      goto unfetch_interval;
+                    else
+                      FREE_STACK_RETURN (REG_EBRACE);
+                  }
+
+                GET_UNSIGNED_NUMBER (lower_bound);
+
+                if (c == ',')
+                  {
+                    GET_UNSIGNED_NUMBER (upper_bound);
+                    if (upper_bound < 0) upper_bound = RE_DUP_MAX;
+                  }
+                else
+                  /* Interval such as `{1}' => match exactly once. */
+                  upper_bound = lower_bound;
+
+                if (lower_bound < 0 || upper_bound > RE_DUP_MAX
+                    || lower_bound > upper_bound)
+                  {
+                    if (syntax & RE_NO_BK_BRACES)
+                      goto unfetch_interval;
+                    else
+                      FREE_STACK_RETURN (REG_BADBR);
+                  }
+
+                if (!(syntax & RE_NO_BK_BRACES))
+                  {
+                    if (c != '\\') FREE_STACK_RETURN (REG_EBRACE);
+
+                    PATFETCH (c);
+                  }
+
+                if (c != '}')
+                  {
+                    if (syntax & RE_NO_BK_BRACES)
+                      goto unfetch_interval;
+                    else
+                      FREE_STACK_RETURN (REG_BADBR);
+                  }
+
+                /* We just parsed a valid interval.  */
+
+                /* If it's invalid to have no preceding re.  */
+                if (!laststart)
+                  {
+                    if (syntax & RE_CONTEXT_INVALID_OPS)
+                      FREE_STACK_RETURN (REG_BADRPT);
+                    else if (syntax & RE_CONTEXT_INDEP_OPS)
+                      laststart = b;
+                    else
+                      goto unfetch_interval;
+                  }
+
+                /* If the upper bound is zero, don't want to succeed at
+                   all; jump from `laststart' to `b + 3', which will be
+                   the end of the buffer after we insert the jump.  */
+                 if (upper_bound == 0)
+                   {
+                     GET_BUFFER_SPACE (3);
+                     INSERT_JUMP (jump, laststart, b + 3);
+                     b += 3;
+                   }
+
+                 /* Otherwise, we have a nontrivial interval.  When
+                    we're all done, the pattern will look like:
+                      set_number_at <jump count> <upper bound>
+                      set_number_at <succeed_n count> <lower bound>
+                      succeed_n <after jump addr> <succeed_n count>
+                      <body of loop>
+                      jump_n <succeed_n addr> <jump count>
+                    (The upper bound and `jump_n' are omitted if
+                    `upper_bound' is 1, though.)  */
+                 else
+                   { /* If the upper bound is > 1, we need to insert
+                        more at the end of the loop.  */
+                     unsigned nbytes = 10 + (upper_bound > 1) * 10;
+
+                     GET_BUFFER_SPACE (nbytes);
+
+                     /* Initialize lower bound of the `succeed_n', even
+                        though it will be set during matching by its
+                        attendant `set_number_at' (inserted next),
+                        because `re_compile_fastmap' needs to know.
+                        Jump to the `jump_n' we might insert below.  */
+                     INSERT_JUMP2 (succeed_n, laststart,
+                                   b + 5 + (upper_bound > 1) * 5,
+                                   lower_bound);
+                     b += 5;
+
+                     /* Code to initialize the lower bound.  Insert
+                        before the `succeed_n'.  The `5' is the last two
+                        bytes of this `set_number_at', plus 3 bytes of
+                        the following `succeed_n'.  */
+                     insert_op2 (set_number_at, laststart, 5, lower_bound, b);
+                     b += 5;
+
+                     if (upper_bound > 1)
+                       { /* More than one repetition is allowed, so
+                            append a backward jump to the `succeed_n'
+                            that starts this interval.
+
+                            When we've reached this during matching,
+                            we'll have matched the interval once, so
+                            jump back only `upper_bound - 1' times.  */
+                         STORE_JUMP2 (jump_n, b, laststart + 5,
+                                      upper_bound - 1);
+                         b += 5;
+
+                         /* The location we want to set is the second
+                            parameter of the `jump_n'; that is `b-2' as
+                            an absolute address.  `laststart' will be
+                            the `set_number_at' we're about to insert;
+                            `laststart+3' the number to set, the source
+                            for the relative address.  But we are
+                            inserting into the middle of the pattern --
+                            so everything is getting moved up by 5.
+                            Conclusion: (b - 2) - (laststart + 3) + 5,
+                            i.e., b - laststart.
+
+                            We insert this at the beginning of the loop
+                            so that if we fail during matching, we'll
+                            reinitialize the bounds.  */
+                         insert_op2 (set_number_at, laststart, b - laststart,
+                                     upper_bound - 1, b);
+                         b += 5;
+                       }
+                   }
+                pending_exact = 0;
+                beg_interval = NULL;
+              }
+              break;
+
+            unfetch_interval:
+              /* If an invalid interval, match the characters as literals.  */
+               assert (beg_interval);
+               p = beg_interval;
+               beg_interval = NULL;
+
+               /* normal_char and normal_backslash need `c'.  */
+               PATFETCH (c);
+
+               if (!(syntax & RE_NO_BK_BRACES))
+                 {
+                   if (p > pattern  &&  p[-1] == '\\')
+                     goto normal_backslash;
+                 }
+               goto normal_char;
+
+#ifdef emacs
+            /* There is no way to specify the before_dot and after_dot
+               operators.  rms says this is ok.  --karl  */
+            case '=':
+              BUF_PUSH (at_dot);
+              break;
+
+            case 's':
+              laststart = b;
+              PATFETCH (c);
+              BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]);
+              break;
+
+            case 'S':
+              laststart = b;
+              PATFETCH (c);
+              BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]);
+              break;
+#endif /* emacs */
+
+
+            case 'w':
+             if (re_syntax_options & RE_NO_GNU_OPS)
+               goto normal_char;
+              laststart = b;
+              BUF_PUSH (wordchar);
+              break;
+
+
+            case 'W':
+             if (re_syntax_options & RE_NO_GNU_OPS)
+               goto normal_char;
+              laststart = b;
+              BUF_PUSH (notwordchar);
+              break;
+
+
+            case '<':
+             if (re_syntax_options & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (wordbeg);
+              break;
+
+            case '>':
+             if (re_syntax_options & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (wordend);
+              break;
+
+            case 'b':
+             if (re_syntax_options & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (wordbound);
+              break;
+
+            case 'B':
+             if (re_syntax_options & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (notwordbound);
+              break;
+
+            case '`':
+             if (re_syntax_options & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (begbuf);
+              break;
+
+            case '\'':
+             if (re_syntax_options & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (endbuf);
+              break;
+
+            case '1': case '2': case '3': case '4': case '5':
+            case '6': case '7': case '8': case '9':
+              if (syntax & RE_NO_BK_REFS)
+                goto normal_char;
+
+              c1 = c - '0';
+
+              if (c1 > regnum)
+                FREE_STACK_RETURN (REG_ESUBREG);
+
+              /* Can't back reference to a subexpression if inside of it.  */
+              if (group_in_compile_stack (compile_stack, (regnum_t) c1))
+                goto normal_char;
+
+              laststart = b;
+              BUF_PUSH_2 (duplicate, c1);
+              break;
+
+
+            case '+':
+            case '?':
+              if (syntax & RE_BK_PLUS_QM)
+                goto handle_plus;
+              else
+                goto normal_backslash;
+
+            default:
+            normal_backslash:
+              /* You might think it would be useful for \ to mean
+                 not to translate; but if we don't translate it
+                 it will never match anything.  */
+              c = TRANSLATE (c);
+              goto normal_char;
+            }
+          break;
+
+
+       default:
+        /* Expects the character in `c'.  */
+       normal_char:
+             /* If no exactn currently being built.  */
+          if (!pending_exact
+
+              /* If last exactn not at current position.  */
+              || pending_exact + *pending_exact + 1 != b
+
+              /* We have only one byte following the exactn for the count.  */
+             || *pending_exact == (1 << BYTEWIDTH) - 1
+
+              /* If followed by a repetition operator.  */
+              || *p == '*' || *p == '^'
+             || ((syntax & RE_BK_PLUS_QM)
+                 ? *p == '\\' && (p[1] == '+' || p[1] == '?')
+                 : (*p == '+' || *p == '?'))
+             || ((syntax & RE_INTERVALS)
+                  && ((syntax & RE_NO_BK_BRACES)
+                     ? *p == '{'
+                      : (p[0] == '\\' && p[1] == '{'))))
+           {
+             /* Start building a new exactn.  */
+
+              laststart = b;
+
+             BUF_PUSH_2 (exactn, 0);
+             pending_exact = b - 1;
+            }
+
+         BUF_PUSH (c);
+          (*pending_exact)++;
+         break;
+        } /* switch (c) */
+    } /* while p != pend */
+
+
+  /* Through the pattern now.  */
+
+  if (fixup_alt_jump)
+    STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
+
+  if (!COMPILE_STACK_EMPTY)
+    FREE_STACK_RETURN (REG_EPAREN);
+
+  /* If we don't want backtracking, force success
+     the first time we reach the end of the compiled pattern.  */
+  if (syntax & RE_NO_POSIX_BACKTRACKING)
+    BUF_PUSH (succeed);
+
+  free (compile_stack.stack);  /* __MEM_CHECKED__ */
+
+  /* We have succeeded; set the length of the buffer.  */
+  bufp->used = b - bufp->buffer;
+
+#ifdef DEBUG
+  if (debug)
+    {
+      DEBUG_PRINT1 ("\nCompiled pattern: \n");
+      print_compiled_pattern (bufp);
+    }
+#endif /* DEBUG */
+
+#ifndef MATCH_MAY_ALLOCATE
+  /* Initialize the failure stack to the largest possible stack.  This
+     isn't necessary unless we're trying to avoid calling alloca in
+     the search and match routines.  */
+  {
+    int num_regs = bufp->re_nsub + 1;
+
+    /* Since DOUBLE_FAIL_STACK refuses to double only if the current size
+       is strictly greater than re_max_failures, the largest possible stack
+       is 2 * re_max_failures failure points.  */
+    if (fail_stack.size < (2 * re_max_failures * MAX_FAILURE_ITEMS))
+      {
+       fail_stack.size = (2 * re_max_failures * MAX_FAILURE_ITEMS);
+
+#ifdef emacs
+       if (! fail_stack.stack)
+         fail_stack.stack
+           = (fail_stack_elt_t *) xmalloc (fail_stack.size
+                                           * sizeof (fail_stack_elt_t));
+       else
+         fail_stack.stack
+           = (fail_stack_elt_t *) xrealloc (fail_stack.stack,
+                                            (fail_stack.size
+                                             * sizeof (fail_stack_elt_t)));
+#else /* not emacs */
+       if (! fail_stack.stack)
+         fail_stack.stack
+           = (fail_stack_elt_t *) malloc (fail_stack.size      /* __MEM_CHECKED__ */
+                                          * sizeof (fail_stack_elt_t));
+       else
+         fail_stack.stack
+           = (fail_stack_elt_t *) realloc (fail_stack.stack,   /* __MEM_CHECKED__ */
+                                           (fail_stack.size
+                                            * sizeof (fail_stack_elt_t)));
+#endif /* not emacs */
+      }
+
+    regex_grow_registers (num_regs);
+  }
+#endif /* not MATCH_MAY_ALLOCATE */
+
+  return REG_NOERROR;
+} /* regex_compile */
+\f
+/* Subroutines for `regex_compile'.  */
+
+/* Store OP at LOC followed by two-byte integer parameter ARG.  */
+
+static void
+store_op1 (op, loc, arg)
+    re_opcode_t op;
+    unsigned char *loc;
+    int arg;
+{
+  *loc = (unsigned char) op;
+  STORE_NUMBER (loc + 1, arg);
+}
+
+
+/* Like `store_op1', but for two two-byte parameters ARG1 and ARG2.  */
+
+static void
+store_op2 (op, loc, arg1, arg2)
+    re_opcode_t op;
+    unsigned char *loc;
+    int arg1, arg2;
+{
+  *loc = (unsigned char) op;
+  STORE_NUMBER (loc + 1, arg1);
+  STORE_NUMBER (loc + 3, arg2);
+}
+
+
+/* Copy the bytes from LOC to END to open up three bytes of space at LOC
+   for OP followed by two-byte integer parameter ARG.  */
+
+static void
+insert_op1 (op, loc, arg, end)
+    re_opcode_t op;
+    unsigned char *loc;
+    int arg;
+    unsigned char *end;
+{
+  register unsigned char *pfrom = end;
+  register unsigned char *pto = end + 3;
+
+  while (pfrom != loc)
+    *--pto = *--pfrom;
+
+  store_op1 (op, loc, arg);
+}
+
+
+/* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2.  */
+
+static void
+insert_op2 (op, loc, arg1, arg2, end)
+    re_opcode_t op;
+    unsigned char *loc;
+    int arg1, arg2;
+    unsigned char *end;
+{
+  register unsigned char *pfrom = end;
+  register unsigned char *pto = end + 5;
+
+  while (pfrom != loc)
+    *--pto = *--pfrom;
+
+  store_op2 (op, loc, arg1, arg2);
+}
+
+
+/* P points to just after a ^ in PATTERN.  Return true if that ^ comes
+   after an alternative or a begin-subexpression.  We assume there is at
+   least one character before the ^.  */
+
+static boolean
+at_begline_loc_p (pattern, p, syntax)
+    const char *pattern, *p;
+    reg_syntax_t syntax;
+{
+  const char *prev = p - 2;
+  boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\';
+
+  return
+       /* After a subexpression?  */
+       (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash))
+       /* After an alternative?  */
+    || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash));
+}
+
+
+/* The dual of at_begline_loc_p.  This one is for $.  We assume there is
+   at least one character after the $, i.e., `P < PEND'.  */
+
+static boolean
+at_endline_loc_p (p, pend, syntax)
+    const char *p, *pend;
+    reg_syntax_t syntax;
+{
+  const char *next = p;
+  boolean next_backslash = *next == '\\';
+  const char *next_next = p + 1 < pend ? p + 1 : 0;
+
+  return
+       /* Before a subexpression?  */
+       (syntax & RE_NO_BK_PARENS ? *next == ')'
+        : next_backslash && next_next && *next_next == ')')
+       /* Before an alternative?  */
+    || (syntax & RE_NO_BK_VBAR ? *next == '|'
+        : next_backslash && next_next && *next_next == '|');
+}
+
+
+/* Returns true if REGNUM is in one of COMPILE_STACK's elements and
+   false if it's not.  */
+
+static boolean
+group_in_compile_stack (compile_stack, regnum)
+    compile_stack_type compile_stack;
+    regnum_t regnum;
+{
+  int this_element;
+
+  for (this_element = compile_stack.avail - 1;
+       this_element >= 0;
+       this_element--)
+    if (compile_stack.stack[this_element].regnum == regnum)
+      return true;
+
+  return false;
+}
+
+
+/* Read the ending character of a range (in a bracket expression) from the
+   uncompiled pattern *P_PTR (which ends at PEND).  We assume the
+   starting character is in `P[-2]'.  (`P[-1]' is the character `-'.)
+   Then we set the translation of all bits between the starting and
+   ending characters (inclusive) in the compiled pattern B.
+
+   Return an error code.
+
+   We use these short variable names so we can use the same macros as
+   `regex_compile' itself.  */
+
+static reg_errcode_t
+compile_range (p_ptr, pend, translate, syntax, b)
+    const char **p_ptr, *pend;
+    RE_TRANSLATE_TYPE translate;
+    reg_syntax_t syntax;
+    unsigned char *b;
+{
+  unsigned this_char;
+
+  const char *p = *p_ptr;
+  unsigned int range_start, range_end;
+
+  if (p == pend)
+    return REG_ERANGE;
+
+  /* Even though the pattern is a signed `char *', we need to fetch
+     with unsigned char *'s; if the high bit of the pattern character
+     is set, the range endpoints will be negative if we fetch using a
+     signed char *.
+
+     We also want to fetch the endpoints without translating them; the
+     appropriate translation is done in the bit-setting loop below.  */
+  /* The SVR4 compiler on the 3B2 had trouble with unsigned const char *.  */
+  range_start = ((const unsigned char *) p)[-2];
+  range_end   = ((const unsigned char *) p)[0];
+
+  /* Have to increment the pointer into the pattern string, so the
+     caller isn't still at the ending character.  */
+  (*p_ptr)++;
+
+  /* If the start is after the end, the range is empty.  */
+  if (range_start > range_end)
+    return syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR;
+
+  /* Here we see why `this_char' has to be larger than an `unsigned
+     char' -- the range is inclusive, so if `range_end' == 0xff
+     (assuming 8-bit characters), we would otherwise go into an infinite
+     loop, since all characters <= 0xff.  */
+  for (this_char = range_start; this_char <= range_end; this_char++)
+    {
+      SET_LIST_BIT (TRANSLATE (this_char));
+    }
+
+  return REG_NOERROR;
+}
+\f
+/* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in
+   BUFP.  A fastmap records which of the (1 << BYTEWIDTH) possible
+   characters can start a string that matches the pattern.  This fastmap
+   is used by re_search to skip quickly over impossible starting points.
+
+   The caller must supply the address of a (1 << BYTEWIDTH)-byte data
+   area as BUFP->fastmap.
+
+   We set the `fastmap', `fastmap_accurate', and `can_be_null' fields in
+   the pattern buffer.
+
+   Returns 0 if we succeed, -2 if an internal error.   */
+
+int
+re_compile_fastmap (bufp)
+     struct re_pattern_buffer *bufp;
+{
+  int j, k;
+#ifdef MATCH_MAY_ALLOCATE
+  fail_stack_type fail_stack;
+#endif
+#ifndef REGEX_MALLOC
+  char *destination;
+#endif
+  /* We don't push any register information onto the failure stack.  */
+  unsigned num_regs = 0;
+
+  register char *fastmap = bufp->fastmap;
+  unsigned char *pattern = bufp->buffer;
+  unsigned char *p = pattern;
+  register unsigned char *pend = pattern + bufp->used;
+
+#ifdef REL_ALLOC
+  /* This holds the pointer to the failure stack, when
+     it is allocated relocatably.  */
+  fail_stack_elt_t *failure_stack_ptr;
+#endif
+
+  /* Assume that each path through the pattern can be null until
+     proven otherwise.  We set this false at the bottom of switch
+     statement, to which we get only if a particular path doesn't
+     match the empty string.  */
+  boolean path_can_be_null = true;
+
+  /* We aren't doing a `succeed_n' to begin with.  */
+  boolean succeed_n_p = false;
+
+  assert (fastmap != NULL && p != NULL);
+
+  INIT_FAIL_STACK ();
+  bzero (fastmap, 1 << BYTEWIDTH);  /* Assume nothing's valid.  */
+  bufp->fastmap_accurate = 1;      /* It will be when we're done.  */
+  bufp->can_be_null = 0;
+
+  while (1)
+    {
+      if (p == pend || *p == succeed)
+       {
+         /* We have reached the (effective) end of pattern.  */
+         if (!FAIL_STACK_EMPTY ())
+           {
+             bufp->can_be_null |= path_can_be_null;
+
+             /* Reset for next path.  */
+             path_can_be_null = true;
+
+             p = fail_stack.stack[--fail_stack.avail].pointer;
+
+             continue;
+           }
+         else
+           break;
+       }
+
+      /* We should never be about to go beyond the end of the pattern.  */
+      assert (p < pend);
+
+      switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
+       {
+
+        /* I guess the idea here is to simply not bother with a fastmap
+           if a backreference is used, since it's too hard to figure out
+           the fastmap for the corresponding group.  Setting
+           `can_be_null' stops `re_search_2' from using the fastmap, so
+           that is all we do.  */
+       case duplicate:
+         bufp->can_be_null = 1;
+          goto done;
+
+
+      /* Following are the cases which match a character.  These end
+         with `break'.  */
+
+       case exactn:
+          fastmap[p[1]] = 1;
+         break;
+
+
+        case charset:
+          for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
+           if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))
+              fastmap[j] = 1;
+         break;
+
+
+       case charset_not:
+         /* Chars beyond end of map must be allowed.  */
+         for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++)
+            fastmap[j] = 1;
+
+         for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
+           if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))))
+              fastmap[j] = 1;
+          break;
+
+
+       case wordchar:
+         for (j = 0; j < (1 << BYTEWIDTH); j++)
+           if (SYNTAX (j) == Sword)
+             fastmap[j] = 1;
+         break;
+
+
+       case notwordchar:
+         for (j = 0; j < (1 << BYTEWIDTH); j++)
+           if (SYNTAX (j) != Sword)
+             fastmap[j] = 1;
+         break;
+
+
+        case anychar:
+         {
+           int fastmap_newline = fastmap['\n'];
+
+           /* `.' matches anything ...  */
+           for (j = 0; j < (1 << BYTEWIDTH); j++)
+             fastmap[j] = 1;
+
+           /* ... except perhaps newline.  */
+           if (!(bufp->syntax & RE_DOT_NEWLINE))
+             fastmap['\n'] = fastmap_newline;
+
+           /* Return if we have already set `can_be_null'; if we have,
+              then the fastmap is irrelevant.  Something's wrong here.  */
+           else if (bufp->can_be_null)
+             goto done;
+
+           /* Otherwise, have to check alternative paths.  */
+           break;
+         }
+
+#ifdef emacs
+        case syntaxspec:
+         k = *p++;
+         for (j = 0; j < (1 << BYTEWIDTH); j++)
+           if (SYNTAX (j) == (enum syntaxcode) k)
+             fastmap[j] = 1;
+         break;
+
+
+       case notsyntaxspec:
+         k = *p++;
+         for (j = 0; j < (1 << BYTEWIDTH); j++)
+           if (SYNTAX (j) != (enum syntaxcode) k)
+             fastmap[j] = 1;
+         break;
+
+
+      /* All cases after this match the empty string.  These end with
+         `continue'.  */
+
+
+       case before_dot:
+       case at_dot:
+       case after_dot:
+          continue;
+#endif /* emacs */
+
+
+        case no_op:
+        case begline:
+        case endline:
+       case begbuf:
+       case endbuf:
+       case wordbound:
+       case notwordbound:
+       case wordbeg:
+       case wordend:
+        case push_dummy_failure:
+          continue;
+
+
+       case jump_n:
+        case pop_failure_jump:
+       case maybe_pop_jump:
+       case jump:
+        case jump_past_alt:
+       case dummy_failure_jump:
+          EXTRACT_NUMBER_AND_INCR (j, p);
+         p += j;
+         if (j > 0)
+           continue;
+
+          /* Jump backward implies we just went through the body of a
+             loop and matched nothing.  Opcode jumped to should be
+             `on_failure_jump' or `succeed_n'.  Just treat it like an
+             ordinary jump.  For a * loop, it has pushed its failure
+             point already; if so, discard that as redundant.  */
+          if ((re_opcode_t) *p != on_failure_jump
+             && (re_opcode_t) *p != succeed_n)
+           continue;
+
+          p++;
+          EXTRACT_NUMBER_AND_INCR (j, p);
+          p += j;
+
+          /* If what's on the stack is where we are now, pop it.  */
+          if (!FAIL_STACK_EMPTY ()
+             && fail_stack.stack[fail_stack.avail - 1].pointer == p)
+            fail_stack.avail--;
+
+          continue;
+
+
+        case on_failure_jump:
+        case on_failure_keep_string_jump:
+       handle_on_failure_jump:
+          EXTRACT_NUMBER_AND_INCR (j, p);
+
+          /* For some patterns, e.g., `(a?)?', `p+j' here points to the
+             end of the pattern.  We don't want to push such a point,
+             since when we restore it above, entering the switch will
+             increment `p' past the end of the pattern.  We don't need
+             to push such a point since we obviously won't find any more
+             fastmap entries beyond `pend'.  Such a pattern can match
+             the null string, though.  */
+          if (p + j < pend)
+            {
+              if (!PUSH_PATTERN_OP (p + j, fail_stack))
+               {
+                 RESET_FAIL_STACK ();
+                 return -2;
+               }
+            }
+          else
+            bufp->can_be_null = 1;
+
+          if (succeed_n_p)
+            {
+              EXTRACT_NUMBER_AND_INCR (k, p);  /* Skip the n.  */
+              succeed_n_p = false;
+           }
+
+          continue;
+
+
+       case succeed_n:
+          /* Get to the number of times to succeed.  */
+          p += 2;
+
+          /* Increment p past the n for when k != 0.  */
+          EXTRACT_NUMBER_AND_INCR (k, p);
+          if (k == 0)
+           {
+              p -= 4;
+             succeed_n_p = true;  /* Spaghetti code alert.  */
+              goto handle_on_failure_jump;
+            }
+          continue;
+
+
+       case set_number_at:
+          p += 4;
+          continue;
+
+
+       case start_memory:
+        case stop_memory:
+         p += 2;
+         continue;
+
+
+       default:
+          abort (); /* We have listed all the cases.  */
+        } /* switch *p++ */
+
+      /* Getting here means we have found the possible starting
+         characters for one path of the pattern -- and that the empty
+         string does not match.  We need not follow this path further.
+         Instead, look at the next alternative (remembered on the
+         stack), or quit if no more.  The test at the top of the loop
+         does these things.  */
+      path_can_be_null = false;
+      p = pend;
+    } /* while p */
+
+  /* Set `can_be_null' for the last path (also the first path, if the
+     pattern is empty).  */
+  bufp->can_be_null |= path_can_be_null;
+
+ done:
+  RESET_FAIL_STACK ();
+  return 0;
+} /* re_compile_fastmap */
+\f
+/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
+   ENDS.  Subsequent matches using PATTERN_BUFFER and REGS will use
+   this memory for recording register information.  STARTS and ENDS
+   must be allocated using the malloc library routine, and must each
+   be at least NUM_REGS * sizeof (regoff_t) bytes long.
+
+   If NUM_REGS == 0, then subsequent matches should allocate their own
+   register data.
+
+   Unless this function is called, the first search or match using
+   PATTERN_BUFFER will allocate its own register data, without
+   freeing the old data.  */
+
+void
+re_set_registers (bufp, regs, num_regs, starts, ends)
+    struct re_pattern_buffer *bufp;
+    struct re_registers *regs;
+    unsigned num_regs;
+    regoff_t *starts, *ends;
+{
+  if (num_regs)
+    {
+      bufp->regs_allocated = REGS_REALLOCATE;
+      regs->num_regs = num_regs;
+      regs->start = starts;
+      regs->end = ends;
+    }
+  else
+    {
+      bufp->regs_allocated = REGS_UNALLOCATED;
+      regs->num_regs = 0;
+      regs->start = regs->end = (regoff_t *) 0;
+    }
+}
+\f
+/* Searching routines.  */
+
+/* Like re_search_2, below, but only one string is specified, and
+   doesn't let you say where to stop matching. */
+
+int
+re_search (bufp, string, size, startpos, range, regs)
+     struct re_pattern_buffer *bufp;
+     const char *string;
+     int size, startpos, range;
+     struct re_registers *regs;
+{
+  return re_search_2 (bufp, NULL, 0, string, size, startpos, range,
+                     regs, size);
+}
+
+
+/* Using the compiled pattern in BUFP->buffer, first tries to match the
+   virtual concatenation of STRING1 and STRING2, starting first at index
+   STARTPOS, then at STARTPOS + 1, and so on.
+
+   STRING1 and STRING2 have length SIZE1 and SIZE2, respectively.
+
+   RANGE is how far to scan while trying to match.  RANGE = 0 means try
+   only at STARTPOS; in general, the last start tried is STARTPOS +
+   RANGE.
+
+   In REGS, return the indices of the virtual concatenation of STRING1
+   and STRING2 that matched the entire BUFP->buffer and its contained
+   subexpressions.
+
+   Do not consider matching one past the index STOP in the virtual
+   concatenation of STRING1 and STRING2.
+
+   We return either the position in the strings at which the match was
+   found, -1 if no match, or -2 if error (such as failure
+   stack overflow).  */
+
+int
+re_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop)
+     struct re_pattern_buffer *bufp;
+     const char *string1, *string2;
+     int size1, size2;
+     int startpos;
+     int range;
+     struct re_registers *regs;
+     int stop;
+{
+  int val;
+  register char *fastmap = bufp->fastmap;
+  register RE_TRANSLATE_TYPE translate = bufp->translate;
+  int total_size = size1 + size2;
+  int endpos = startpos + range;
+
+  /* Check for out-of-range STARTPOS.  */
+  if (startpos < 0 || startpos > total_size)
+    return -1;
+
+  /* Fix up RANGE if it might eventually take us outside
+     the virtual concatenation of STRING1 and STRING2.
+     Make sure we won't move STARTPOS below 0 or above TOTAL_SIZE.  */
+  if (endpos < 0)
+    range = 0 - startpos;
+  else if (endpos > total_size)
+    range = total_size - startpos;
+
+  /* If the search isn't to be a backwards one, don't waste time in a
+     search for a pattern that must be anchored.  */
+  if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == begbuf && range > 0)
+    {
+      if (startpos > 0)
+       return -1;
+      else
+       range = 1;
+    }
+
+#ifdef emacs
+  /* In a forward search for something that starts with \=.
+     don't keep searching past point.  */
+  if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == at_dot && range > 0)
+    {
+      range = PT - startpos;
+      if (range <= 0)
+       return -1;
+    }
+#endif /* emacs */
+
+  /* Update the fastmap now if not correct already.  */
+  if (fastmap && !bufp->fastmap_accurate)
+    if (re_compile_fastmap (bufp) == -2)
+      return -2;
+
+  /* Loop through the string, looking for a place to start matching.  */
+  for (;;)
+    {
+      /* If a fastmap is supplied, skip quickly over characters that
+         cannot be the start of a match.  If the pattern can match the
+         null string, however, we don't need to skip characters; we want
+         the first null string.  */
+      if (fastmap && startpos < total_size && !bufp->can_be_null)
+       {
+         if (range > 0)        /* Searching forwards.  */
+           {
+             register const char *d;
+             register int lim = 0;
+             int irange = range;
+
+              if (startpos < size1 && startpos + range >= size1)
+                lim = range - (size1 - startpos);
+
+             d = (startpos >= size1 ? string2 - size1 : string1) + startpos;
+
+              /* Written out as an if-else to avoid testing `translate'
+                 inside the loop.  */
+             if (translate)
+                while (range > lim
+                       && !fastmap[(unsigned char)
+                                  translate[(unsigned char) *d++]])
+                  range--;
+             else
+                while (range > lim && !fastmap[(unsigned char) *d++])
+                  range--;
+
+             startpos += irange - range;
+           }
+         else                          /* Searching backwards.  */
+           {
+             register char c = (size1 == 0 || startpos >= size1
+                                 ? string2[startpos - size1]
+                                 : string1[startpos]);
+
+             if (!fastmap[(unsigned char) TRANSLATE (c)])
+               goto advance;
+           }
+       }
+
+      /* If can't match the null string, and that's all we have left, fail.  */
+      if (range >= 0 && startpos == total_size && fastmap
+          && !bufp->can_be_null)
+       return -1;
+
+      val = re_match_2_internal (bufp, string1, size1, string2, size2,
+                                startpos, regs, stop);
+#ifndef REGEX_MALLOC
+#ifdef C_ALLOCA
+      alloca (0);
+#endif
+#endif
+
+      if (val >= 0)
+       return startpos;
+
+      if (val == -2)
+       return -2;
+
+    advance:
+      if (!range)
+        break;
+      else if (range > 0)
+        {
+          range--;
+          startpos++;
+        }
+      else
+        {
+          range++;
+          startpos--;
+        }
+    }
+  return -1;
+} /* re_search_2 */
+\f
+/* This converts PTR, a pointer into one of the search strings `string1'
+   and `string2' into an offset from the beginning of that string.  */
+#define POINTER_TO_OFFSET(ptr)                 \
+  (FIRST_STRING_P (ptr)                                \
+   ? ((regoff_t) ((ptr) - string1))            \
+   : ((regoff_t) ((ptr) - string2 + size1)))
+
+/* Macros for dealing with the split strings in re_match_2.  */
+
+#define MATCHING_IN_FIRST_STRING  (dend == end_match_1)
+
+/* Call before fetching a character with *d.  This switches over to
+   string2 if necessary.  */
+#define PREFETCH()                                                     \
+  while (d == dend)                                                    \
+    {                                                                  \
+      /* End of string2 => fail.  */                                   \
+      if (dend == end_match_2)                                                 \
+        goto fail;                                                     \
+      /* End of string1 => advance to string2.  */                     \
+      d = string2;                                                     \
+      dend = end_match_2;                                              \
+    }
+
+
+/* Test if at very beginning or at very end of the virtual concatenation
+   of `string1' and `string2'.  If only one string, it's `string2'.  */
+#define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2)
+#define AT_STRINGS_END(d) ((d) == end2)
+
+
+/* Test if D points to a character which is word-constituent.  We have
+   two special cases to check for: if past the end of string1, look at
+   the first character in string2; and if before the beginning of
+   string2, look at the last character in string1.  */
+#define WORDCHAR_P(d)                                                  \
+  (SYNTAX ((d) == end1 ? *string2                                      \
+           : (d) == string2 - 1 ? *(end1 - 1) : *(d))                  \
+   == Sword)
+
+/* Disabled due to a compiler bug -- see comment at case wordbound */
+#if 0
+/* Test if the character before D and the one at D differ with respect
+   to being word-constituent.  */
+#define AT_WORD_BOUNDARY(d)                                            \
+  (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)                            \
+   || WORDCHAR_P (d - 1) != WORDCHAR_P (d))
+#endif
+
+/* Free everything we malloc.  */
+#ifdef MATCH_MAY_ALLOCATE
+#define FREE_VAR(var) if (var) REGEX_FREE (var); var = NULL
+#define FREE_VARIABLES()                                               \
+  do {                                                                 \
+    REGEX_FREE_STACK (fail_stack.stack);                               \
+    FREE_VAR (regstart);                                               \
+    FREE_VAR (regend);                                                 \
+    FREE_VAR (old_regstart);                                           \
+    FREE_VAR (old_regend);                                             \
+    FREE_VAR (best_regstart);                                          \
+    FREE_VAR (best_regend);                                            \
+    FREE_VAR (reg_info);                                               \
+    FREE_VAR (reg_dummy);                                              \
+    FREE_VAR (reg_info_dummy);                                         \
+  } while (0)
+#else
+#define FREE_VARIABLES() ((void)0) /* Do nothing!  But inhibit gcc warning.  */
+#endif /* not MATCH_MAY_ALLOCATE */
+
+/* These values must meet several constraints.  They must not be valid
+   register values; since we have a limit of 255 registers (because
+   we use only one byte in the pattern for the register number), we can
+   use numbers larger than 255.  They must differ by 1, because of
+   NUM_FAILURE_ITEMS above.  And the value for the lowest register must
+   be larger than the value for the highest register, so we do not try
+   to actually save any registers when none are active.  */
+#define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH)
+#define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1)
+\f
+/* Matching routines.  */
+
+#ifndef emacs   /* Emacs never uses this.  */
+/* re_match is like re_match_2 except it takes only a single string.  */
+
+int
+re_match (bufp, string, size, pos, regs)
+     struct re_pattern_buffer *bufp;
+     const char *string;
+     int size, pos;
+     struct re_registers *regs;
+{
+  int result = re_match_2_internal (bufp, NULL, 0, string, size,
+                                   pos, regs, size);
+#ifndef REGEX_MALLOC
+#ifdef C_ALLOCA
+  alloca (0);
+#endif
+#endif
+  return result;
+}
+#endif /* not emacs */
+
+static boolean group_match_null_string_p _RE_ARGS ((unsigned char **p,
+                                                   unsigned char *end,
+                                               register_info_type *reg_info));
+static boolean alt_match_null_string_p _RE_ARGS ((unsigned char *p,
+                                                 unsigned char *end,
+                                               register_info_type *reg_info));
+static boolean common_op_match_null_string_p _RE_ARGS ((unsigned char **p,
+                                                       unsigned char *end,
+                                               register_info_type *reg_info));
+static int bcmp_translate _RE_ARGS ((const char *s1, const char *s2,
+                                    int len, char *translate));
+
+/* re_match_2 matches the compiled pattern in BUFP against the
+   the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1
+   and SIZE2, respectively).  We start matching at POS, and stop
+   matching at STOP.
+
+   If REGS is non-null and the `no_sub' field of BUFP is nonzero, we
+   store offsets for the substring each group matched in REGS.  See the
+   documentation for exactly how many groups we fill.
+
+   We return -1 if no match, -2 if an internal error (such as the
+   failure stack overflowing).  Otherwise, we return the length of the
+   matched substring.  */
+
+int
+re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
+     struct re_pattern_buffer *bufp;
+     const char *string1, *string2;
+     int size1, size2;
+     int pos;
+     struct re_registers *regs;
+     int stop;
+{
+  int result = re_match_2_internal (bufp, string1, size1, string2, size2,
+                                   pos, regs, stop);
+#ifndef REGEX_MALLOC
+#ifdef C_ALLOCA
+  alloca (0);
+#endif
+#endif
+  return result;
+}
+
+/* This is a separate function so that we can force an alloca cleanup
+   afterwards.  */
+static int
+re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
+     struct re_pattern_buffer *bufp;
+     const char *string1, *string2;
+     int size1, size2;
+     int pos;
+     struct re_registers *regs;
+     int stop;
+{
+  /* General temporaries.  */
+  int mcnt;
+  unsigned char *p1;
+
+  /* Just past the end of the corresponding string.  */
+  const char *end1, *end2;
+
+  /* Pointers into string1 and string2, just past the last characters in
+     each to consider matching.  */
+  const char *end_match_1, *end_match_2;
+
+  /* Where we are in the data, and the end of the current string.  */
+  const char *d, *dend;
+
+  /* Where we are in the pattern, and the end of the pattern.  */
+  unsigned char *p = bufp->buffer;
+  register unsigned char *pend = p + bufp->used;
+
+  /* Mark the opcode just after a start_memory, so we can test for an
+     empty subpattern when we get to the stop_memory.  */
+  unsigned char *just_past_start_mem = 0;
+
+  /* We use this to map every character in the string.  */
+  RE_TRANSLATE_TYPE translate = bufp->translate;
+
+  /* Failure point stack.  Each place that can handle a failure further
+     down the line pushes a failure point on this stack.  It consists of
+     restart, regend, and reg_info for all registers corresponding to
+     the subexpressions we're currently inside, plus the number of such
+     registers, and, finally, two char *'s.  The first char * is where
+     to resume scanning the pattern; the second one is where to resume
+     scanning the strings.  If the latter is zero, the failure point is
+     a ``dummy''; if a failure happens and the failure point is a dummy,
+     it gets discarded and the next next one is tried.  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global.  */
+  fail_stack_type fail_stack;
+#endif
+#ifdef DEBUG
+  static unsigned failure_id = 0;
+  unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0;
+#endif
+
+#ifdef REL_ALLOC
+  /* This holds the pointer to the failure stack, when
+     it is allocated relocatably.  */
+  fail_stack_elt_t *failure_stack_ptr;
+#endif
+
+  /* We fill all the registers internally, independent of what we
+     return, for use in backreferences.  The number here includes
+     an element for register zero.  */
+  size_t num_regs = bufp->re_nsub + 1;
+
+  /* The currently active registers.  */
+  active_reg_t lowest_active_reg = NO_LOWEST_ACTIVE_REG;
+  active_reg_t highest_active_reg = NO_HIGHEST_ACTIVE_REG;
+
+  /* Information on the contents of registers. These are pointers into
+     the input strings; they record just what was matched (on this
+     attempt) by a subexpression part of the pattern, that is, the
+     regnum-th regstart pointer points to where in the pattern we began
+     matching and the regnum-th regend points to right after where we
+     stopped matching the regnum-th subexpression.  (The zeroth register
+     keeps track of what the whole pattern matches.)  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
+  const char **regstart, **regend;
+#endif
+
+  /* If a group that's operated upon by a repetition operator fails to
+     match anything, then the register for its start will need to be
+     restored because it will have been set to wherever in the string we
+     are when we last see its open-group operator.  Similarly for a
+     register's end.  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
+  const char **old_regstart, **old_regend;
+#endif
+
+  /* The is_active field of reg_info helps us keep track of which (possibly
+     nested) subexpressions we are currently in. The matched_something
+     field of reg_info[reg_num] helps us tell whether or not we have
+     matched any of the pattern so far this time through the reg_num-th
+     subexpression.  These two fields get reset each time through any
+     loop their register is in.  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global.  */
+  register_info_type *reg_info;
+#endif
+
+  /* The following record the register info as found in the above
+     variables when we find a match better than any we've seen before.
+     This happens as we backtrack through the failure points, which in
+     turn happens only if we have not yet matched the entire string. */
+  unsigned best_regs_set = false;
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
+  const char **best_regstart, **best_regend;
+#endif
+
+  /* Logically, this is `best_regend[0]'.  But we don't want to have to
+     allocate space for that if we're not allocating space for anything
+     else (see below).  Also, we never need info about register 0 for
+     any of the other register vectors, and it seems rather a kludge to
+     treat `best_regend' differently than the rest.  So we keep track of
+     the end of the best match so far in a separate variable.  We
+     initialize this to NULL so that when we backtrack the first time
+     and need to test it, it's not garbage.  */
+  const char *match_end = NULL;
+
+  /* This helps SET_REGS_MATCHED avoid doing redundant work.  */
+  int set_regs_matched_done = 0;
+
+  /* Used when we pop values we don't care about.  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
+  const char **reg_dummy;
+  register_info_type *reg_info_dummy;
+#endif
+
+#ifdef DEBUG
+  /* Counts the total number of registers pushed.  */
+  unsigned num_regs_pushed = 0;
+#endif
+
+  DEBUG_PRINT1 ("\n\nEntering re_match_2.\n");
+
+  INIT_FAIL_STACK ();
+
+#ifdef MATCH_MAY_ALLOCATE
+  /* Do not bother to initialize all the register variables if there are
+     no groups in the pattern, as it takes a fair amount of time.  If
+     there are groups, we include space for register 0 (the whole
+     pattern), even though we never use it, since it simplifies the
+     array indexing.  We should fix this.  */
+  if (bufp->re_nsub)
+    {
+      regstart = REGEX_TALLOC (num_regs, const char *);
+      regend = REGEX_TALLOC (num_regs, const char *);
+      old_regstart = REGEX_TALLOC (num_regs, const char *);
+      old_regend = REGEX_TALLOC (num_regs, const char *);
+      best_regstart = REGEX_TALLOC (num_regs, const char *);
+      best_regend = REGEX_TALLOC (num_regs, const char *);
+      reg_info = REGEX_TALLOC (num_regs, register_info_type);
+      reg_dummy = REGEX_TALLOC (num_regs, const char *);
+      reg_info_dummy = REGEX_TALLOC (num_regs, register_info_type);
+
+      if (!(regstart && regend && old_regstart && old_regend && reg_info
+            && best_regstart && best_regend && reg_dummy && reg_info_dummy))
+        {
+          FREE_VARIABLES ();
+          return -2;
+        }
+    }
+  else
+    {
+      /* We must initialize all our variables to NULL, so that
+         `FREE_VARIABLES' doesn't try to free them.  */
+      regstart = regend = old_regstart = old_regend = best_regstart
+        = best_regend = reg_dummy = NULL;
+      reg_info = reg_info_dummy = (register_info_type *) NULL;
+    }
+#endif /* MATCH_MAY_ALLOCATE */
+
+  /* The starting position is bogus.  */
+  if (pos < 0 || pos > size1 + size2)
+    {
+      FREE_VARIABLES ();
+      return -1;
+    }
+
+  /* Initialize subexpression text positions to -1 to mark ones that no
+     start_memory/stop_memory has been seen for. Also initialize the
+     register information struct.  */
+  for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
+    {
+      regstart[mcnt] = regend[mcnt]
+        = old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE;
+
+      REG_MATCH_NULL_STRING_P (reg_info[mcnt]) = MATCH_NULL_UNSET_VALUE;
+      IS_ACTIVE (reg_info[mcnt]) = 0;
+      MATCHED_SOMETHING (reg_info[mcnt]) = 0;
+      EVER_MATCHED_SOMETHING (reg_info[mcnt]) = 0;
+    }
+
+  /* We move `string1' into `string2' if the latter's empty -- but not if
+     `string1' is null.  */
+  if (size2 == 0 && string1 != NULL)
+    {
+      string2 = string1;
+      size2 = size1;
+      string1 = 0;
+      size1 = 0;
+    }
+  end1 = string1 + size1;
+  end2 = string2 + size2;
+
+  /* Compute where to stop matching, within the two strings.  */
+  if (stop <= size1)
+    {
+      end_match_1 = string1 + stop;
+      end_match_2 = string2;
+    }
+  else
+    {
+      end_match_1 = end1;
+      end_match_2 = string2 + stop - size1;
+    }
+
+  /* `p' scans through the pattern as `d' scans through the data.
+     `dend' is the end of the input string that `d' points within.  `d'
+     is advanced into the following input string whenever necessary, but
+     this happens before fetching; therefore, at the beginning of the
+     loop, `d' can be pointing at the end of a string, but it cannot
+     equal `string2'.  */
+  if (size1 > 0 && pos <= size1)
+    {
+      d = string1 + pos;
+      dend = end_match_1;
+    }
+  else
+    {
+      d = string2 + pos - size1;
+      dend = end_match_2;
+    }
+
+  DEBUG_PRINT1 ("The compiled pattern is:\n");
+  DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend);
+  DEBUG_PRINT1 ("The string to match is: `");
+  DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2);
+  DEBUG_PRINT1 ("'\n");
+
+  /* This loops over pattern commands.  It exits by returning from the
+     function if the match is complete, or it drops through if the match
+     fails at this starting point in the input data.  */
+  for (;;)
+    {
+#ifdef _LIBC
+      DEBUG_PRINT2 ("\n%p: ", p);
+#else
+      DEBUG_PRINT2 ("\n0x%x: ", p);
+#endif
+
+      if (p == pend)
+       { /* End of pattern means we might have succeeded.  */
+          DEBUG_PRINT1 ("end of pattern ... ");
+
+         /* If we haven't matched the entire string, and we want the
+             longest match, try backtracking.  */
+          if (d != end_match_2)
+           {
+             /* 1 if this match ends in the same string (string1 or string2)
+                as the best previous match.  */
+             boolean same_str_p = (FIRST_STRING_P (match_end)
+                                   == MATCHING_IN_FIRST_STRING);
+             /* 1 if this match is the best seen so far.  */
+             boolean best_match_p;
+
+             /* AIX compiler got confused when this was combined
+                with the previous declaration.  */
+             if (same_str_p)
+               best_match_p = d > match_end;
+             else
+               best_match_p = !MATCHING_IN_FIRST_STRING;
+
+              DEBUG_PRINT1 ("backtracking.\n");
+
+              if (!FAIL_STACK_EMPTY ())
+                { /* More failure points to try.  */
+
+                  /* If exceeds best match so far, save it.  */
+                  if (!best_regs_set || best_match_p)
+                    {
+                      best_regs_set = true;
+                      match_end = d;
+
+                      DEBUG_PRINT1 ("\nSAVING match as best so far.\n");
+
+                      for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
+                        {
+                          best_regstart[mcnt] = regstart[mcnt];
+                          best_regend[mcnt] = regend[mcnt];
+                        }
+                    }
+                  goto fail;
+                }
+
+              /* If no failure points, don't restore garbage.  And if
+                 last match is real best match, don't restore second
+                 best one. */
+              else if (best_regs_set && !best_match_p)
+                {
+               restore_best_regs:
+                  /* Restore best match.  It may happen that `dend ==
+                     end_match_1' while the restored d is in string2.
+                     For example, the pattern `x.*y.*z' against the
+                     strings `x-' and `y-z-', if the two strings are
+                     not consecutive in memory.  */
+                  DEBUG_PRINT1 ("Restoring best registers.\n");
+
+                  d = match_end;
+                  dend = ((d >= string1 && d <= end1)
+                          ? end_match_1 : end_match_2);
+
+                 for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
+                   {
+                     regstart[mcnt] = best_regstart[mcnt];
+                     regend[mcnt] = best_regend[mcnt];
+                   }
+                }
+            } /* d != end_match_2 */
+
+       succeed_label:
+          DEBUG_PRINT1 ("Accepting match.\n");
+
+          /* If caller wants register contents data back, do it.  */
+          if (regs && !bufp->no_sub)
+           {
+              /* Have the register data arrays been allocated?  */
+              if (bufp->regs_allocated == REGS_UNALLOCATED)
+                { /* No.  So allocate them with malloc.  We need one
+                     extra element beyond `num_regs' for the `-1' marker
+                     GNU code uses.  */
+                  regs->num_regs = MAX (RE_NREGS, num_regs + 1);
+                  regs->start = TALLOC (regs->num_regs, regoff_t);
+                  regs->end = TALLOC (regs->num_regs, regoff_t);
+                  if (regs->start == NULL || regs->end == NULL)
+                   {
+                     FREE_VARIABLES ();
+                     return -2;
+                   }
+                  bufp->regs_allocated = REGS_REALLOCATE;
+                }
+              else if (bufp->regs_allocated == REGS_REALLOCATE)
+                { /* Yes.  If we need more elements than were already
+                     allocated, reallocate them.  If we need fewer, just
+                     leave it alone.  */
+                  if (regs->num_regs < num_regs + 1)
+                    {
+                      regs->num_regs = num_regs + 1;
+                      RETALLOC (regs->start, regs->num_regs, regoff_t);
+                      RETALLOC (regs->end, regs->num_regs, regoff_t);
+                      if (regs->start == NULL || regs->end == NULL)
+                       {
+                         FREE_VARIABLES ();
+                         return -2;
+                       }
+                    }
+                }
+              else
+               {
+                 /* These braces fend off a "empty body in an else-statement"
+                    warning under GCC when assert expands to nothing.  */
+                 assert (bufp->regs_allocated == REGS_FIXED);
+               }
+
+              /* Convert the pointer data in `regstart' and `regend' to
+                 indices.  Register zero has to be set differently,
+                 since we haven't kept track of any info for it.  */
+              if (regs->num_regs > 0)
+                {
+                  regs->start[0] = pos;
+                  regs->end[0] = (MATCHING_IN_FIRST_STRING
+                                 ? ((regoff_t) (d - string1))
+                                 : ((regoff_t) (d - string2 + size1)));
+                }
+
+              /* Go through the first `min (num_regs, regs->num_regs)'
+                 registers, since that is all we initialized.  */
+             for (mcnt = 1; (unsigned) mcnt < MIN (num_regs, regs->num_regs);
+                  mcnt++)
+               {
+                  if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt]))
+                    regs->start[mcnt] = regs->end[mcnt] = -1;
+                  else
+                    {
+                     regs->start[mcnt]
+                       = (regoff_t) POINTER_TO_OFFSET (regstart[mcnt]);
+                      regs->end[mcnt]
+                       = (regoff_t) POINTER_TO_OFFSET (regend[mcnt]);
+                    }
+               }
+
+              /* If the regs structure we return has more elements than
+                 were in the pattern, set the extra elements to -1.  If
+                 we (re)allocated the registers, this is the case,
+                 because we always allocate enough to have at least one
+                 -1 at the end.  */
+              for (mcnt = num_regs; (unsigned) mcnt < regs->num_regs; mcnt++)
+                regs->start[mcnt] = regs->end[mcnt] = -1;
+           } /* regs && !bufp->no_sub */
+
+          DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n",
+                        nfailure_points_pushed, nfailure_points_popped,
+                        nfailure_points_pushed - nfailure_points_popped);
+          DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed);
+
+          mcnt = d - pos - (MATCHING_IN_FIRST_STRING
+                           ? string1
+                           : string2 - size1);
+
+          DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt);
+
+          FREE_VARIABLES ();
+          return mcnt;
+        }
+
+      /* Otherwise match next pattern command.  */
+      switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
+       {
+        /* Ignore these.  Used to ignore the n of succeed_n's which
+           currently have n == 0.  */
+        case no_op:
+          DEBUG_PRINT1 ("EXECUTING no_op.\n");
+          break;
+
+       case succeed:
+          DEBUG_PRINT1 ("EXECUTING succeed.\n");
+         goto succeed_label;
+
+        /* Match the next n pattern characters exactly.  The following
+           byte in the pattern defines n, and the n bytes after that
+           are the characters to match.  */
+       case exactn:
+         mcnt = *p++;
+          DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt);
+
+          /* This is written out as an if-else so we don't waste time
+             testing `translate' inside the loop.  */
+          if (translate)
+           {
+             do
+               {
+                 PREFETCH ();
+                 if ((unsigned char) translate[(unsigned char) *d++]
+                     != (unsigned char) *p++)
+                    goto fail;
+               }
+             while (--mcnt);
+           }
+         else
+           {
+             do
+               {
+                 PREFETCH ();
+                 if (*d++ != (char) *p++) goto fail;
+               }
+             while (--mcnt);
+           }
+         SET_REGS_MATCHED ();
+          break;
+
+
+        /* Match any character except possibly a newline or a null.  */
+       case anychar:
+          DEBUG_PRINT1 ("EXECUTING anychar.\n");
+
+          PREFETCH ();
+
+          if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n')
+              || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE (*d) == '\000'))
+           goto fail;
+
+          SET_REGS_MATCHED ();
+          DEBUG_PRINT2 ("  Matched `%d'.\n", *d);
+          d++;
+         break;
+
+
+       case charset:
+       case charset_not:
+         {
+           register unsigned char c;
+           boolean not = (re_opcode_t) *(p - 1) == charset_not;
+
+            DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : "");
+
+           PREFETCH ();
+           c = TRANSLATE (*d); /* The character to match.  */
+
+            /* Cast to `unsigned' instead of `unsigned char' in case the
+               bit list is a full 32 bytes long.  */
+           if (c < (unsigned) (*p * BYTEWIDTH)
+               && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
+             not = !not;
+
+           p += 1 + *p;
+
+           if (!not) goto fail;
+
+           SET_REGS_MATCHED ();
+            d++;
+           break;
+         }
+
+
+        /* The beginning of a group is represented by start_memory.
+           The arguments are the register number in the next byte, and the
+           number of groups inner to this one in the next.  The text
+           matched within the group is recorded (in the internal
+           registers data structure) under the register number.  */
+        case start_memory:
+         DEBUG_PRINT3 ("EXECUTING start_memory %d (%d):\n", *p, p[1]);
+
+          /* Find out if this group can match the empty string.  */
+         p1 = p;               /* To send to group_match_null_string_p.  */
+
+          if (REG_MATCH_NULL_STRING_P (reg_info[*p]) == MATCH_NULL_UNSET_VALUE)
+            REG_MATCH_NULL_STRING_P (reg_info[*p])
+              = group_match_null_string_p (&p1, pend, reg_info);
+
+          /* Save the position in the string where we were the last time
+             we were at this open-group operator in case the group is
+             operated upon by a repetition operator, e.g., with `(a*)*b'
+             against `ab'; then we want to ignore where we are now in
+             the string in case this attempt to match fails.  */
+          old_regstart[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
+                             ? REG_UNSET (regstart[*p]) ? d : regstart[*p]
+                             : regstart[*p];
+         DEBUG_PRINT2 ("  old_regstart: %d\n",
+                        POINTER_TO_OFFSET (old_regstart[*p]));
+
+          regstart[*p] = d;
+         DEBUG_PRINT2 ("  regstart: %d\n", POINTER_TO_OFFSET (regstart[*p]));
+
+          IS_ACTIVE (reg_info[*p]) = 1;
+          MATCHED_SOMETHING (reg_info[*p]) = 0;
+
+         /* Clear this whenever we change the register activity status.  */
+         set_regs_matched_done = 0;
+
+          /* This is the new highest active register.  */
+          highest_active_reg = *p;
+
+          /* If nothing was active before, this is the new lowest active
+             register.  */
+          if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
+            lowest_active_reg = *p;
+
+          /* Move past the register number and inner group count.  */
+          p += 2;
+         just_past_start_mem = p;
+
+          break;
+
+
+        /* The stop_memory opcode represents the end of a group.  Its
+           arguments are the same as start_memory's: the register
+           number, and the number of inner groups.  */
+       case stop_memory:
+         DEBUG_PRINT3 ("EXECUTING stop_memory %d (%d):\n", *p, p[1]);
+
+          /* We need to save the string position the last time we were at
+             this close-group operator in case the group is operated
+             upon by a repetition operator, e.g., with `((a*)*(b*)*)*'
+             against `aba'; then we want to ignore where we are now in
+             the string in case this attempt to match fails.  */
+          old_regend[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
+                           ? REG_UNSET (regend[*p]) ? d : regend[*p]
+                          : regend[*p];
+         DEBUG_PRINT2 ("      old_regend: %d\n",
+                        POINTER_TO_OFFSET (old_regend[*p]));
+
+          regend[*p] = d;
+         DEBUG_PRINT2 ("      regend: %d\n", POINTER_TO_OFFSET (regend[*p]));
+
+          /* This register isn't active anymore.  */
+          IS_ACTIVE (reg_info[*p]) = 0;
+
+         /* Clear this whenever we change the register activity status.  */
+         set_regs_matched_done = 0;
+
+          /* If this was the only register active, nothing is active
+             anymore.  */
+          if (lowest_active_reg == highest_active_reg)
+            {
+              lowest_active_reg = NO_LOWEST_ACTIVE_REG;
+              highest_active_reg = NO_HIGHEST_ACTIVE_REG;
+            }
+          else
+            { /* We must scan for the new highest active register, since
+                 it isn't necessarily one less than now: consider
+                 (a(b)c(d(e)f)g).  When group 3 ends, after the f), the
+                 new highest active register is 1.  */
+              unsigned char r = *p - 1;
+              while (r > 0 && !IS_ACTIVE (reg_info[r]))
+                r--;
+
+              /* If we end up at register zero, that means that we saved
+                 the registers as the result of an `on_failure_jump', not
+                 a `start_memory', and we jumped to past the innermost
+                 `stop_memory'.  For example, in ((.)*) we save
+                 registers 1 and 2 as a result of the *, but when we pop
+                 back to the second ), we are at the stop_memory 1.
+                 Thus, nothing is active.  */
+             if (r == 0)
+                {
+                  lowest_active_reg = NO_LOWEST_ACTIVE_REG;
+                  highest_active_reg = NO_HIGHEST_ACTIVE_REG;
+                }
+              else
+                highest_active_reg = r;
+            }
+
+          /* If just failed to match something this time around with a
+             group that's operated on by a repetition operator, try to
+             force exit from the ``loop'', and restore the register
+             information for this group that we had before trying this
+             last match.  */
+          if ((!MATCHED_SOMETHING (reg_info[*p])
+               || just_past_start_mem == p - 1)
+             && (p + 2) < pend)
+            {
+              boolean is_a_jump_n = false;
+
+              p1 = p + 2;
+              mcnt = 0;
+              switch ((re_opcode_t) *p1++)
+                {
+                  case jump_n:
+                   is_a_jump_n = true;
+                  case pop_failure_jump:
+                 case maybe_pop_jump:
+                 case jump:
+                 case dummy_failure_jump:
+                    EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+                   if (is_a_jump_n)
+                     p1 += 2;
+                    break;
+
+                  default:
+                    /* do nothing */ ;
+                }
+             p1 += mcnt;
+
+              /* If the next operation is a jump backwards in the pattern
+                to an on_failure_jump right before the start_memory
+                 corresponding to this stop_memory, exit from the loop
+                 by forcing a failure after pushing on the stack the
+                 on_failure_jump's jump in the pattern, and d.  */
+              if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump
+                  && (re_opcode_t) p1[3] == start_memory && p1[4] == *p)
+               {
+                  /* If this group ever matched anything, then restore
+                     what its registers were before trying this last
+                     failed match, e.g., with `(a*)*b' against `ab' for
+                     regstart[1], and, e.g., with `((a*)*(b*)*)*'
+                     against `aba' for regend[3].
+
+                     Also restore the registers for inner groups for,
+                     e.g., `((a*)(b*))*' against `aba' (register 3 would
+                     otherwise get trashed).  */
+
+                  if (EVER_MATCHED_SOMETHING (reg_info[*p]))
+                   {
+                     unsigned r;
+
+                      EVER_MATCHED_SOMETHING (reg_info[*p]) = 0;
+
+                     /* Restore this and inner groups' (if any) registers.  */
+                      for (r = *p; r < (unsigned) *p + (unsigned) *(p + 1);
+                          r++)
+                        {
+                          regstart[r] = old_regstart[r];
+
+                          /* xx why this test?  */
+                          if (old_regend[r] >= regstart[r])
+                            regend[r] = old_regend[r];
+                        }
+                    }
+                 p1++;
+                  EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+                  PUSH_FAILURE_POINT (p1 + mcnt, d, -2);
+
+                  goto fail;
+                }
+            }
+
+          /* Move past the register number and the inner group count.  */
+          p += 2;
+          break;
+
+
+       /* \<digit> has been turned into a `duplicate' command which is
+           followed by the numeric value of <digit> as the register number.  */
+        case duplicate:
+         {
+           register const char *d2, *dend2;
+           int regno = *p++;   /* Get which register to match against.  */
+           DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno);
+
+           /* Can't back reference a group which we've never matched.  */
+            if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno]))
+              goto fail;
+
+            /* Where in input to try to start matching.  */
+            d2 = regstart[regno];
+
+            /* Where to stop matching; if both the place to start and
+               the place to stop matching are in the same string, then
+               set to the place to stop, otherwise, for now have to use
+               the end of the first string.  */
+
+            dend2 = ((FIRST_STRING_P (regstart[regno])
+                     == FIRST_STRING_P (regend[regno]))
+                    ? regend[regno] : end_match_1);
+           for (;;)
+             {
+               /* If necessary, advance to next segment in register
+                   contents.  */
+               while (d2 == dend2)
+                 {
+                   if (dend2 == end_match_2) break;
+                   if (dend2 == regend[regno]) break;
+
+                    /* End of string1 => advance to string2. */
+                    d2 = string2;
+                    dend2 = regend[regno];
+                 }
+               /* At end of register contents => success */
+               if (d2 == dend2) break;
+
+               /* If necessary, advance to next segment in data.  */
+               PREFETCH ();
+
+               /* How many characters left in this segment to match.  */
+               mcnt = dend - d;
+
+               /* Want how many consecutive characters we can match in
+                   one shot, so, if necessary, adjust the count.  */
+                if (mcnt > dend2 - d2)
+                 mcnt = dend2 - d2;
+
+               /* Compare that many; failure if mismatch, else move
+                   past them.  */
+               if (translate
+                    ? bcmp_translate (d, d2, mcnt, translate)
+                    : bcmp (d, d2, mcnt))
+                 goto fail;
+               d += mcnt, d2 += mcnt;
+
+               /* Do this because we've match some characters.  */
+               SET_REGS_MATCHED ();
+             }
+         }
+         break;
+
+
+        /* begline matches the empty string at the beginning of the string
+           (unless `not_bol' is set in `bufp'), and, if
+           `newline_anchor' is set, after newlines.  */
+       case begline:
+          DEBUG_PRINT1 ("EXECUTING begline.\n");
+
+          if (AT_STRINGS_BEG (d))
+            {
+              if (!bufp->not_bol) break;
+            }
+          else if (d[-1] == '\n' && bufp->newline_anchor)
+            {
+              break;
+            }
+          /* In all other cases, we fail.  */
+          goto fail;
+
+
+        /* endline is the dual of begline.  */
+       case endline:
+          DEBUG_PRINT1 ("EXECUTING endline.\n");
+
+          if (AT_STRINGS_END (d))
+            {
+              if (!bufp->not_eol) break;
+            }
+
+          /* We have to ``prefetch'' the next character.  */
+          else if ((d == end1 ? *string2 : *d) == '\n'
+                   && bufp->newline_anchor)
+            {
+              break;
+            }
+          goto fail;
+
+
+       /* Match at the very beginning of the data.  */
+        case begbuf:
+          DEBUG_PRINT1 ("EXECUTING begbuf.\n");
+          if (AT_STRINGS_BEG (d))
+            break;
+          goto fail;
+
+
+       /* Match at the very end of the data.  */
+        case endbuf:
+          DEBUG_PRINT1 ("EXECUTING endbuf.\n");
+         if (AT_STRINGS_END (d))
+           break;
+          goto fail;
+
+
+        /* on_failure_keep_string_jump is used to optimize `.*\n'.  It
+           pushes NULL as the value for the string on the stack.  Then
+           `pop_failure_point' will keep the current value for the
+           string, instead of restoring it.  To see why, consider
+           matching `foo\nbar' against `.*\n'.  The .* matches the foo;
+           then the . fails against the \n.  But the next thing we want
+           to do is match the \n against the \n; if we restored the
+           string value, we would be back at the foo.
+
+           Because this is used only in specific cases, we don't need to
+           check all the things that `on_failure_jump' does, to make
+           sure the right things get saved on the stack.  Hence we don't
+           share its code.  The only reason to push anything on the
+           stack at all is that otherwise we would have to change
+           `anychar's code to do something besides goto fail in this
+           case; that seems worse than this.  */
+        case on_failure_keep_string_jump:
+          DEBUG_PRINT1 ("EXECUTING on_failure_keep_string_jump");
+
+          EXTRACT_NUMBER_AND_INCR (mcnt, p);
+#ifdef _LIBC
+          DEBUG_PRINT3 (" %d (to %p):\n", mcnt, p + mcnt);
+#else
+          DEBUG_PRINT3 (" %d (to 0x%x):\n", mcnt, p + mcnt);
+#endif
+
+          PUSH_FAILURE_POINT (p + mcnt, NULL, -2);
+          break;
+
+
+       /* Uses of on_failure_jump:
+
+           Each alternative starts with an on_failure_jump that points
+           to the beginning of the next alternative.  Each alternative
+           except the last ends with a jump that in effect jumps past
+           the rest of the alternatives.  (They really jump to the
+           ending jump of the following alternative, because tensioning
+           these jumps is a hassle.)
+
+           Repeats start with an on_failure_jump that points past both
+           the repetition text and either the following jump or
+           pop_failure_jump back to this on_failure_jump.  */
+       case on_failure_jump:
+        on_failure:
+          DEBUG_PRINT1 ("EXECUTING on_failure_jump");
+
+          EXTRACT_NUMBER_AND_INCR (mcnt, p);
+#ifdef _LIBC
+          DEBUG_PRINT3 (" %d (to %p)", mcnt, p + mcnt);
+#else
+          DEBUG_PRINT3 (" %d (to 0x%x)", mcnt, p + mcnt);
+#endif
+
+          /* If this on_failure_jump comes right before a group (i.e.,
+             the original * applied to a group), save the information
+             for that group and all inner ones, so that if we fail back
+             to this point, the group's information will be correct.
+             For example, in \(a*\)*\1, we need the preceding group,
+             and in \(zz\(a*\)b*\)\2, we need the inner group.  */
+
+          /* We can't use `p' to check ahead because we push
+             a failure point to `p + mcnt' after we do this.  */
+          p1 = p;
+
+          /* We need to skip no_op's before we look for the
+             start_memory in case this on_failure_jump is happening as
+             the result of a completed succeed_n, as in \(a\)\{1,3\}b\1
+             against aba.  */
+          while (p1 < pend && (re_opcode_t) *p1 == no_op)
+            p1++;
+
+          if (p1 < pend && (re_opcode_t) *p1 == start_memory)
+            {
+              /* We have a new highest active register now.  This will
+                 get reset at the start_memory we are about to get to,
+                 but we will have saved all the registers relevant to
+                 this repetition op, as described above.  */
+              highest_active_reg = *(p1 + 1) + *(p1 + 2);
+              if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
+                lowest_active_reg = *(p1 + 1);
+            }
+
+          DEBUG_PRINT1 (":\n");
+          PUSH_FAILURE_POINT (p + mcnt, d, -2);
+          break;
+
+
+        /* A smart repeat ends with `maybe_pop_jump'.
+          We change it to either `pop_failure_jump' or `jump'.  */
+        case maybe_pop_jump:
+          EXTRACT_NUMBER_AND_INCR (mcnt, p);
+          DEBUG_PRINT2 ("EXECUTING maybe_pop_jump %d.\n", mcnt);
+          {
+           register unsigned char *p2 = p;
+
+            /* Compare the beginning of the repeat with what in the
+               pattern follows its end. If we can establish that there
+               is nothing that they would both match, i.e., that we
+               would have to backtrack because of (as in, e.g., `a*a')
+               then we can change to pop_failure_jump, because we'll
+               never have to backtrack.
+
+               This is not true in the case of alternatives: in
+               `(a|ab)*' we do need to backtrack to the `ab' alternative
+               (e.g., if the string was `ab').  But instead of trying to
+               detect that here, the alternative has put on a dummy
+               failure point which is what we will end up popping.  */
+
+           /* Skip over open/close-group commands.
+              If what follows this loop is a ...+ construct,
+              look at what begins its body, since we will have to
+              match at least one of that.  */
+           while (1)
+             {
+               if (p2 + 2 < pend
+                   && ((re_opcode_t) *p2 == stop_memory
+                       || (re_opcode_t) *p2 == start_memory))
+                 p2 += 3;
+               else if (p2 + 6 < pend
+                        && (re_opcode_t) *p2 == dummy_failure_jump)
+                 p2 += 6;
+               else
+                 break;
+             }
+
+           p1 = p + mcnt;
+           /* p1[0] ... p1[2] are the `on_failure_jump' corresponding
+              to the `maybe_finalize_jump' of this case.  Examine what
+              follows.  */
+
+            /* If we're at the end of the pattern, we can change.  */
+            if (p2 == pend)
+             {
+               /* Consider what happens when matching ":\(.*\)"
+                  against ":/".  I don't really understand this code
+                  yet.  */
+               p[-3] = (unsigned char) pop_failure_jump;
+                DEBUG_PRINT1
+                  ("  End of pattern: change to `pop_failure_jump'.\n");
+              }
+
+            else if ((re_opcode_t) *p2 == exactn
+                    || (bufp->newline_anchor && (re_opcode_t) *p2 == endline))
+             {
+               register unsigned char c
+                  = *p2 == (unsigned char) endline ? '\n' : p2[2];
+
+                if ((re_opcode_t) p1[3] == exactn && p1[5] != c)
+                  {
+                   p[-3] = (unsigned char) pop_failure_jump;
+                    DEBUG_PRINT3 ("  %c != %c => pop_failure_jump.\n",
+                                  c, p1[5]);
+                  }
+
+               else if ((re_opcode_t) p1[3] == charset
+                        || (re_opcode_t) p1[3] == charset_not)
+                 {
+                   int not = (re_opcode_t) p1[3] == charset_not;
+
+                   if (c < (unsigned char) (p1[4] * BYTEWIDTH)
+                       && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
+                     not = !not;
+
+                    /* `not' is equal to 1 if c would match, which means
+                        that we can't change to pop_failure_jump.  */
+                   if (!not)
+                      {
+                       p[-3] = (unsigned char) pop_failure_jump;
+                        DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
+                      }
+                 }
+             }
+            else if ((re_opcode_t) *p2 == charset)
+             {
+#ifdef DEBUG
+               register unsigned char c
+                  = *p2 == (unsigned char) endline ? '\n' : p2[2];
+#endif
+
+#if 0
+                if ((re_opcode_t) p1[3] == exactn
+                   && ! ((int) p2[1] * BYTEWIDTH > (int) p1[5]
+                         && (p2[2 + p1[5] / BYTEWIDTH]
+                             & (1 << (p1[5] % BYTEWIDTH)))))
+#else
+                if ((re_opcode_t) p1[3] == exactn
+                   && ! ((int) p2[1] * BYTEWIDTH > (int) p1[4]
+                         && (p2[2 + p1[4] / BYTEWIDTH]
+                             & (1 << (p1[4] % BYTEWIDTH)))))
+#endif
+                  {
+                   p[-3] = (unsigned char) pop_failure_jump;
+                    DEBUG_PRINT3 ("  %c != %c => pop_failure_jump.\n",
+                                  c, p1[5]);
+                  }
+
+               else if ((re_opcode_t) p1[3] == charset_not)
+                 {
+                   int idx;
+                   /* We win if the charset_not inside the loop
+                      lists every character listed in the charset after.  */
+                   for (idx = 0; idx < (int) p2[1]; idx++)
+                     if (! (p2[2 + idx] == 0
+                            || (idx < (int) p1[4]
+                                && ((p2[2 + idx] & ~ p1[5 + idx]) == 0))))
+                       break;
+
+                   if (idx == p2[1])
+                      {
+                       p[-3] = (unsigned char) pop_failure_jump;
+                        DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
+                      }
+                 }
+               else if ((re_opcode_t) p1[3] == charset)
+                 {
+                   int idx;
+                   /* We win if the charset inside the loop
+                      has no overlap with the one after the loop.  */
+                   for (idx = 0;
+                        idx < (int) p2[1] && idx < (int) p1[4];
+                        idx++)
+                     if ((p2[2 + idx] & p1[5 + idx]) != 0)
+                       break;
+
+                   if (idx == p2[1] || idx == p1[4])
+                      {
+                       p[-3] = (unsigned char) pop_failure_jump;
+                        DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
+                      }
+                 }
+             }
+         }
+         p -= 2;               /* Point at relative address again.  */
+         if ((re_opcode_t) p[-1] != pop_failure_jump)
+           {
+             p[-1] = (unsigned char) jump;
+              DEBUG_PRINT1 ("  Match => jump.\n");
+             goto unconditional_jump;
+           }
+        /* Note fall through.  */
+
+
+       /* The end of a simple repeat has a pop_failure_jump back to
+           its matching on_failure_jump, where the latter will push a
+           failure point.  The pop_failure_jump takes off failure
+           points put on by this pop_failure_jump's matching
+           on_failure_jump; we got through the pattern to here from the
+           matching on_failure_jump, so didn't fail.  */
+        case pop_failure_jump:
+          {
+            /* We need to pass separate storage for the lowest and
+               highest registers, even though we don't care about the
+               actual values.  Otherwise, we will restore only one
+               register from the stack, since lowest will == highest in
+               `pop_failure_point'.  */
+            active_reg_t dummy_low_reg, dummy_high_reg;
+            unsigned char *pdummy;
+            const char *sdummy;
+
+            DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n");
+            POP_FAILURE_POINT (sdummy, pdummy,
+                               dummy_low_reg, dummy_high_reg,
+                               reg_dummy, reg_dummy, reg_info_dummy);
+          }
+         /* Note fall through.  */
+
+       unconditional_jump:
+#ifdef _LIBC
+         DEBUG_PRINT2 ("\n%p: ", p);
+#else
+         DEBUG_PRINT2 ("\n0x%x: ", p);
+#endif
+          /* Note fall through.  */
+
+        /* Unconditionally jump (without popping any failure points).  */
+        case jump:
+         EXTRACT_NUMBER_AND_INCR (mcnt, p);    /* Get the amount to jump.  */
+          DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt);
+         p += mcnt;                            /* Do the jump.  */
+#ifdef _LIBC
+          DEBUG_PRINT2 ("(to %p).\n", p);
+#else
+          DEBUG_PRINT2 ("(to 0x%x).\n", p);
+#endif
+         break;
+
+
+        /* We need this opcode so we can detect where alternatives end
+           in `group_match_null_string_p' et al.  */
+        case jump_past_alt:
+          DEBUG_PRINT1 ("EXECUTING jump_past_alt.\n");
+          goto unconditional_jump;
+
+
+        /* Normally, the on_failure_jump pushes a failure point, which
+           then gets popped at pop_failure_jump.  We will end up at
+           pop_failure_jump, also, and with a pattern of, say, `a+', we
+           are skipping over the on_failure_jump, so we have to push
+           something meaningless for pop_failure_jump to pop.  */
+        case dummy_failure_jump:
+          DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n");
+          /* It doesn't matter what we push for the string here.  What
+             the code at `fail' tests is the value for the pattern.  */
+          PUSH_FAILURE_POINT (0, 0, -2);
+          goto unconditional_jump;
+
+
+        /* At the end of an alternative, we need to push a dummy failure
+           point in case we are followed by a `pop_failure_jump', because
+           we don't want the failure point for the alternative to be
+           popped.  For example, matching `(a|ab)*' against `aab'
+           requires that we match the `ab' alternative.  */
+        case push_dummy_failure:
+          DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n");
+          /* See comments just above at `dummy_failure_jump' about the
+             two zeroes.  */
+          PUSH_FAILURE_POINT (0, 0, -2);
+          break;
+
+        /* Have to succeed matching what follows at least n times.
+           After that, handle like `on_failure_jump'.  */
+        case succeed_n:
+          EXTRACT_NUMBER (mcnt, p + 2);
+          DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt);
+
+          assert (mcnt >= 0);
+          /* Originally, this is how many times we HAVE to succeed.  */
+          if (mcnt > 0)
+            {
+               mcnt--;
+              p += 2;
+               STORE_NUMBER_AND_INCR (p, mcnt);
+#ifdef _LIBC
+               DEBUG_PRINT3 ("  Setting %p to %d.\n", p - 2, mcnt);
+#else
+               DEBUG_PRINT3 ("  Setting 0x%x to %d.\n", p - 2, mcnt);
+#endif
+            }
+         else if (mcnt == 0)
+            {
+#ifdef _LIBC
+              DEBUG_PRINT2 ("  Setting two bytes from %p to no_op.\n", p+2);
+#else
+              DEBUG_PRINT2 ("  Setting two bytes from 0x%x to no_op.\n", p+2);
+#endif
+             p[2] = (unsigned char) no_op;
+              p[3] = (unsigned char) no_op;
+              goto on_failure;
+            }
+          break;
+
+        case jump_n:
+          EXTRACT_NUMBER (mcnt, p + 2);
+          DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt);
+
+          /* Originally, this is how many times we CAN jump.  */
+          if (mcnt)
+            {
+               mcnt--;
+               STORE_NUMBER (p + 2, mcnt);
+#ifdef _LIBC
+               DEBUG_PRINT3 ("  Setting %p to %d.\n", p + 2, mcnt);
+#else
+               DEBUG_PRINT3 ("  Setting 0x%x to %d.\n", p + 2, mcnt);
+#endif
+              goto unconditional_jump;
+            }
+          /* If don't have to jump any more, skip over the rest of command.  */
+         else
+           p += 4;
+          break;
+
+       case set_number_at:
+         {
+            DEBUG_PRINT1 ("EXECUTING set_number_at.\n");
+
+            EXTRACT_NUMBER_AND_INCR (mcnt, p);
+            p1 = p + mcnt;
+            EXTRACT_NUMBER_AND_INCR (mcnt, p);
+#ifdef _LIBC
+            DEBUG_PRINT3 ("  Setting %p to %d.\n", p1, mcnt);
+#else
+            DEBUG_PRINT3 ("  Setting 0x%x to %d.\n", p1, mcnt);
+#endif
+           STORE_NUMBER (p1, mcnt);
+            break;
+          }
+
+#if 0
+       /* The DEC Alpha C compiler 3.x generates incorrect code for the
+          test  WORDCHAR_P (d - 1) != WORDCHAR_P (d)  in the expansion of
+          AT_WORD_BOUNDARY, so this code is disabled.  Expanding the
+          macro and introducing temporary variables works around the bug.  */
+
+       case wordbound:
+         DEBUG_PRINT1 ("EXECUTING wordbound.\n");
+         if (AT_WORD_BOUNDARY (d))
+           break;
+         goto fail;
+
+       case notwordbound:
+         DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
+         if (AT_WORD_BOUNDARY (d))
+           goto fail;
+         break;
+#else
+       case wordbound:
+       {
+         boolean prevchar, thischar;
+
+         DEBUG_PRINT1 ("EXECUTING wordbound.\n");
+         if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
+           break;
+
+         prevchar = WORDCHAR_P (d - 1);
+         thischar = WORDCHAR_P (d);
+         if (prevchar != thischar)
+           break;
+         goto fail;
+       }
+
+      case notwordbound:
+       {
+         boolean prevchar, thischar;
+
+         DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
+         if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
+           goto fail;
+
+         prevchar = WORDCHAR_P (d - 1);
+         thischar = WORDCHAR_P (d);
+         if (prevchar != thischar)
+           goto fail;
+         break;
+       }
+#endif
+
+       case wordbeg:
+          DEBUG_PRINT1 ("EXECUTING wordbeg.\n");
+         if (WORDCHAR_P (d) && (AT_STRINGS_BEG (d) || !WORDCHAR_P (d - 1)))
+           break;
+          goto fail;
+
+       case wordend:
+          DEBUG_PRINT1 ("EXECUTING wordend.\n");
+         if (!AT_STRINGS_BEG (d) && WORDCHAR_P (d - 1)
+              && (!WORDCHAR_P (d) || AT_STRINGS_END (d)))
+           break;
+          goto fail;
+
+#ifdef emacs
+       case before_dot:
+          DEBUG_PRINT1 ("EXECUTING before_dot.\n");
+         if (PTR_CHAR_POS ((unsigned char *) d) >= point)
+           goto fail;
+         break;
+
+       case at_dot:
+          DEBUG_PRINT1 ("EXECUTING at_dot.\n");
+         if (PTR_CHAR_POS ((unsigned char *) d) != point)
+           goto fail;
+         break;
+
+       case after_dot:
+          DEBUG_PRINT1 ("EXECUTING after_dot.\n");
+          if (PTR_CHAR_POS ((unsigned char *) d) <= point)
+           goto fail;
+         break;
+
+       case syntaxspec:
+          DEBUG_PRINT2 ("EXECUTING syntaxspec %d.\n", mcnt);
+         mcnt = *p++;
+         goto matchsyntax;
+
+        case wordchar:
+          DEBUG_PRINT1 ("EXECUTING Emacs wordchar.\n");
+         mcnt = (int) Sword;
+        matchsyntax:
+         PREFETCH ();
+         /* Can't use *d++ here; SYNTAX may be an unsafe macro.  */
+         d++;
+         if (SYNTAX (d[-1]) != (enum syntaxcode) mcnt)
+           goto fail;
+          SET_REGS_MATCHED ();
+         break;
+
+       case notsyntaxspec:
+          DEBUG_PRINT2 ("EXECUTING notsyntaxspec %d.\n", mcnt);
+         mcnt = *p++;
+         goto matchnotsyntax;
+
+        case notwordchar:
+          DEBUG_PRINT1 ("EXECUTING Emacs notwordchar.\n");
+         mcnt = (int) Sword;
+        matchnotsyntax:
+         PREFETCH ();
+         /* Can't use *d++ here; SYNTAX may be an unsafe macro.  */
+         d++;
+         if (SYNTAX (d[-1]) == (enum syntaxcode) mcnt)
+           goto fail;
+         SET_REGS_MATCHED ();
+          break;
+
+#else /* not emacs */
+       case wordchar:
+          DEBUG_PRINT1 ("EXECUTING non-Emacs wordchar.\n");
+         PREFETCH ();
+          if (!WORDCHAR_P (d))
+            goto fail;
+         SET_REGS_MATCHED ();
+          d++;
+         break;
+
+       case notwordchar:
+          DEBUG_PRINT1 ("EXECUTING non-Emacs notwordchar.\n");
+         PREFETCH ();
+         if (WORDCHAR_P (d))
+            goto fail;
+          SET_REGS_MATCHED ();
+          d++;
+         break;
+#endif /* not emacs */
+
+        default:
+          abort ();
+       }
+      continue;  /* Successfully executed one pattern command; keep going.  */
+
+
+    /* We goto here if a matching operation fails. */
+    fail:
+      if (!FAIL_STACK_EMPTY ())
+       { /* A restart point is known.  Restore to that state.  */
+          DEBUG_PRINT1 ("\nFAIL:\n");
+          POP_FAILURE_POINT (d, p,
+                             lowest_active_reg, highest_active_reg,
+                             regstart, regend, reg_info);
+
+          /* If this failure point is a dummy, try the next one.  */
+          if (!p)
+           goto fail;
+
+          /* If we failed to the end of the pattern, don't examine *p.  */
+         assert (p <= pend);
+          if (p < pend)
+            {
+              boolean is_a_jump_n = false;
+
+              /* If failed to a backwards jump that's part of a repetition
+                 loop, need to pop this failure point and use the next one.  */
+              switch ((re_opcode_t) *p)
+                {
+                case jump_n:
+                  is_a_jump_n = true;
+                case maybe_pop_jump:
+                case pop_failure_jump:
+                case jump:
+                  p1 = p + 1;
+                  EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+                  p1 += mcnt;
+
+                  if ((is_a_jump_n && (re_opcode_t) *p1 == succeed_n)
+                      || (!is_a_jump_n
+                          && (re_opcode_t) *p1 == on_failure_jump))
+                    goto fail;
+                  break;
+                default:
+                  /* do nothing */ ;
+                }
+            }
+
+          if (d >= string1 && d <= end1)
+           dend = end_match_1;
+        }
+      else
+        break;   /* Matching at this starting point really fails.  */
+    } /* for (;;) */
+
+  if (best_regs_set)
+    goto restore_best_regs;
+
+  FREE_VARIABLES ();
+
+  return -1;                           /* Failure to match.  */
+} /* re_match_2 */
+\f
+/* Subroutine definitions for re_match_2.  */
+
+
+/* We are passed P pointing to a register number after a start_memory.
+
+   Return true if the pattern up to the corresponding stop_memory can
+   match the empty string, and false otherwise.
+
+   If we find the matching stop_memory, sets P to point to one past its number.
+   Otherwise, sets P to an undefined byte less than or equal to END.
+
+   We don't handle duplicates properly (yet).  */
+
+static boolean
+group_match_null_string_p (p, end, reg_info)
+    unsigned char **p, *end;
+    register_info_type *reg_info;
+{
+  int mcnt;
+  /* Point to after the args to the start_memory.  */
+  unsigned char *p1 = *p + 2;
+
+  while (p1 < end)
+    {
+      /* Skip over opcodes that can match nothing, and return true or
+        false, as appropriate, when we get to one that can't, or to the
+         matching stop_memory.  */
+
+      switch ((re_opcode_t) *p1)
+        {
+        /* Could be either a loop or a series of alternatives.  */
+        case on_failure_jump:
+          p1++;
+          EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+
+          /* If the next operation is not a jump backwards in the
+            pattern.  */
+
+         if (mcnt >= 0)
+           {
+              /* Go through the on_failure_jumps of the alternatives,
+                 seeing if any of the alternatives cannot match nothing.
+                 The last alternative starts with only a jump,
+                 whereas the rest start with on_failure_jump and end
+                 with a jump, e.g., here is the pattern for `a|b|c':
+
+                 /on_failure_jump/0/6/exactn/1/a/jump_past_alt/0/6
+                 /on_failure_jump/0/6/exactn/1/b/jump_past_alt/0/3
+                 /exactn/1/c
+
+                 So, we have to first go through the first (n-1)
+                 alternatives and then deal with the last one separately.  */
+
+
+              /* Deal with the first (n-1) alternatives, which start
+                 with an on_failure_jump (see above) that jumps to right
+                 past a jump_past_alt.  */
+
+              while ((re_opcode_t) p1[mcnt-3] == jump_past_alt)
+                {
+                  /* `mcnt' holds how many bytes long the alternative
+                     is, including the ending `jump_past_alt' and
+                     its number.  */
+
+                  if (!alt_match_null_string_p (p1, p1 + mcnt - 3,
+                                                     reg_info))
+                    return false;
+
+                  /* Move to right after this alternative, including the
+                    jump_past_alt.  */
+                  p1 += mcnt;
+
+                  /* Break if it's the beginning of an n-th alternative
+                     that doesn't begin with an on_failure_jump.  */
+                  if ((re_opcode_t) *p1 != on_failure_jump)
+                    break;
+
+                 /* Still have to check that it's not an n-th
+                    alternative that starts with an on_failure_jump.  */
+                 p1++;
+                  EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+                  if ((re_opcode_t) p1[mcnt-3] != jump_past_alt)
+                    {
+                     /* Get to the beginning of the n-th alternative.  */
+                      p1 -= 3;
+                      break;
+                    }
+                }
+
+              /* Deal with the last alternative: go back and get number
+                 of the `jump_past_alt' just before it.  `mcnt' contains
+                 the length of the alternative.  */
+              EXTRACT_NUMBER (mcnt, p1 - 2);
+
+              if (!alt_match_null_string_p (p1, p1 + mcnt, reg_info))
+                return false;
+
+              p1 += mcnt;      /* Get past the n-th alternative.  */
+            } /* if mcnt > 0 */
+          break;
+
+
+        case stop_memory:
+         assert (p1[1] == **p);
+          *p = p1 + 2;
+          return true;
+
+
+        default:
+          if (!common_op_match_null_string_p (&p1, end, reg_info))
+            return false;
+        }
+    } /* while p1 < end */
+
+  return false;
+} /* group_match_null_string_p */
+
+
+/* Similar to group_match_null_string_p, but doesn't deal with alternatives:
+   It expects P to be the first byte of a single alternative and END one
+   byte past the last. The alternative can contain groups.  */
+
+static boolean
+alt_match_null_string_p (p, end, reg_info)
+    unsigned char *p, *end;
+    register_info_type *reg_info;
+{
+  int mcnt;
+  unsigned char *p1 = p;
+
+  while (p1 < end)
+    {
+      /* Skip over opcodes that can match nothing, and break when we get
+         to one that can't.  */
+
+      switch ((re_opcode_t) *p1)
+        {
+       /* It's a loop.  */
+        case on_failure_jump:
+          p1++;
+          EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+          p1 += mcnt;
+          break;
+
+       default:
+          if (!common_op_match_null_string_p (&p1, end, reg_info))
+            return false;
+        }
+    }  /* while p1 < end */
+
+  return true;
+} /* alt_match_null_string_p */
+
+
+/* Deals with the ops common to group_match_null_string_p and
+   alt_match_null_string_p.
+
+   Sets P to one after the op and its arguments, if any.  */
+
+static boolean
+common_op_match_null_string_p (p, end, reg_info)
+    unsigned char **p, *end;
+    register_info_type *reg_info;
+{
+  int mcnt;
+  boolean ret;
+  int reg_no;
+  unsigned char *p1 = *p;
+
+  switch ((re_opcode_t) *p1++)
+    {
+    case no_op:
+    case begline:
+    case endline:
+    case begbuf:
+    case endbuf:
+    case wordbeg:
+    case wordend:
+    case wordbound:
+    case notwordbound:
+#ifdef emacs
+    case before_dot:
+    case at_dot:
+    case after_dot:
+#endif
+      break;
+
+    case start_memory:
+      reg_no = *p1;
+      assert (reg_no > 0 && reg_no <= MAX_REGNUM);
+      ret = group_match_null_string_p (&p1, end, reg_info);
+
+      /* Have to set this here in case we're checking a group which
+         contains a group and a back reference to it.  */
+
+      if (REG_MATCH_NULL_STRING_P (reg_info[reg_no]) == MATCH_NULL_UNSET_VALUE)
+        REG_MATCH_NULL_STRING_P (reg_info[reg_no]) = ret;
+
+      if (!ret)
+        return false;
+      break;
+
+    /* If this is an optimized succeed_n for zero times, make the jump.  */
+    case jump:
+      EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+      if (mcnt >= 0)
+        p1 += mcnt;
+      else
+        return false;
+      break;
+
+    case succeed_n:
+      /* Get to the number of times to succeed.  */
+      p1 += 2;
+      EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+
+      if (mcnt == 0)
+        {
+          p1 -= 4;
+          EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+          p1 += mcnt;
+        }
+      else
+        return false;
+      break;
+
+    case duplicate:
+      if (!REG_MATCH_NULL_STRING_P (reg_info[*p1]))
+        return false;
+      break;
+
+    case set_number_at:
+      p1 += 4;
+
+    default:
+      /* All other opcodes mean we cannot match the empty string.  */
+      return false;
+  }
+
+  *p = p1;
+  return true;
+} /* common_op_match_null_string_p */
+
+
+/* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN
+   bytes; nonzero otherwise.  */
+
+static int
+bcmp_translate (s1, s2, len, translate)
+     const char *s1, *s2;
+     register int len;
+     RE_TRANSLATE_TYPE translate;
+{
+  register const unsigned char *p1 = (const unsigned char *) s1;
+  register const unsigned char *p2 = (const unsigned char *) s2;
+  while (len)
+    {
+      if (translate[*p1++] != translate[*p2++]) return 1;
+      len--;
+    }
+  return 0;
+}
+\f
+/* Entry points for GNU code.  */
+
+/* re_compile_pattern is the GNU regular expression compiler: it
+   compiles PATTERN (of length SIZE) and puts the result in BUFP.
+   Returns 0 if the pattern was valid, otherwise an error string.
+
+   Assumes the `allocated' (and perhaps `buffer') and `translate' fields
+   are set in BUFP on entry.
+
+   We call regex_compile to do the actual compilation.  */
+
+const char *
+re_compile_pattern (pattern, length, bufp)
+     const char *pattern;
+     size_t length;
+     struct re_pattern_buffer *bufp;
+{
+  reg_errcode_t ret;
+
+  /* GNU code is written to assume at least RE_NREGS registers will be set
+     (and at least one extra will be -1).  */
+  bufp->regs_allocated = REGS_UNALLOCATED;
+
+  /* And GNU code determines whether or not to get register information
+     by passing null for the REGS argument to re_match, etc., not by
+     setting no_sub.  */
+  bufp->no_sub = 0;
+
+  /* Match anchors at newline.  */
+  bufp->newline_anchor = 1;
+
+  ret = regex_compile (pattern, length, re_syntax_options, bufp);
+
+  if (!ret)
+    return NULL;
+  return gettext (re_error_msgid[(int) ret]);
+}
+\f
+/* Entry points compatible with 4.2 BSD regex library.  We don't define
+   them unless specifically requested.  */
+
+#if defined (_REGEX_RE_COMP) || defined (_LIBC)
+
+/* BSD has one and only one pattern buffer.  */
+static struct re_pattern_buffer re_comp_buf;
+
+char *
+#ifdef _LIBC
+/* Make these definitions weak in libc, so POSIX programs can redefine
+   these names if they don't use our functions, and still use
+   regcomp/regexec below without link errors.  */
+weak_function
+#endif
+re_comp (s)
+    const char *s;
+{
+  reg_errcode_t ret;
+
+  if (!s)
+    {
+      if (!re_comp_buf.buffer)
+       return gettext ("No previous regular expression");
+      return 0;
+    }
+
+  if (!re_comp_buf.buffer)
+    {
+      re_comp_buf.buffer = (unsigned char *) malloc (200);     /* __MEM_CHECKED__ */
+      if (re_comp_buf.buffer == NULL)
+        return gettext (re_error_msgid[(int) REG_ESPACE]);
+      re_comp_buf.allocated = 200;
+
+      re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH);  /* __MEM_CHECKED__ */
+      if (re_comp_buf.fastmap == NULL)
+       return gettext (re_error_msgid[(int) REG_ESPACE]);
+    }
+
+  /* Since `re_exec' always passes NULL for the `regs' argument, we
+     don't need to initialize the pattern buffer fields which affect it.  */
+
+  /* Match anchors at newlines.  */
+  re_comp_buf.newline_anchor = 1;
+
+  ret = regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf);
+
+  if (!ret)
+    return NULL;
+
+  /* Yes, we're discarding `const' here if !HAVE_LIBINTL.  */
+  return (char *) gettext (re_error_msgid[(int) ret]);
+}
+
+
+int
+#ifdef _LIBC
+weak_function
+#endif
+re_exec (s)
+    const char *s;
+{
+  const int len = strlen (s);
+  return
+    0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0);
+}
+
+#endif /* _REGEX_RE_COMP */
+\f
+/* POSIX.2 functions.  Don't define these for Emacs.  */
+
+#ifndef emacs
+
+/* regcomp takes a regular expression as a string and compiles it.
+
+   PREG is a regex_t *.  We do not expect any fields to be initialized,
+   since POSIX says we shouldn't.  Thus, we set
+
+     `buffer' to the compiled pattern;
+     `used' to the length of the compiled pattern;
+     `syntax' to RE_SYNTAX_POSIX_EXTENDED if the
+       REG_EXTENDED bit in CFLAGS is set; otherwise, to
+       RE_SYNTAX_POSIX_BASIC;
+     `newline_anchor' to REG_NEWLINE being set in CFLAGS;
+     `fastmap' and `fastmap_accurate' to zero;
+     `re_nsub' to the number of subexpressions in PATTERN.
+
+   PATTERN is the address of the pattern string.
+
+   CFLAGS is a series of bits which affect compilation.
+
+     If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we
+     use POSIX basic syntax.
+
+     If REG_NEWLINE is set, then . and [^...] don't match newline.
+     Also, regexec will try a match beginning after every newline.
+
+     If REG_ICASE is set, then we considers upper- and lowercase
+     versions of letters to be equivalent when matching.
+
+     If REG_NOSUB is set, then when PREG is passed to regexec, that
+     routine will report only success or failure, and nothing about the
+     registers.
+
+   It returns 0 if it succeeds, nonzero if it doesn't.  (See regex.h for
+   the return codes and their meanings.)  */
+
+int
+regcomp (preg, pattern, cflags)
+    regex_t *preg;
+    const char *pattern;
+    int cflags;
+{
+  reg_errcode_t ret;
+  reg_syntax_t syntax
+    = (cflags & REG_EXTENDED) ?
+      RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC;
+
+  /* regex_compile will allocate the space for the compiled pattern.  */
+  preg->buffer = 0;
+  preg->allocated = 0;
+  preg->used = 0;
+
+  /* Don't bother to use a fastmap when searching.  This simplifies the
+     REG_NEWLINE case: if we used a fastmap, we'd have to put all the
+     characters after newlines into the fastmap.  This way, we just try
+     every character.  */
+  preg->fastmap = 0;
+
+  if (cflags & REG_ICASE)
+    {
+      unsigned i;
+
+      preg->translate
+       = (RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE     /* __MEM_CHECKED__ */
+                                     * sizeof (*(RE_TRANSLATE_TYPE)0));
+      if (preg->translate == NULL)
+        return (int) REG_ESPACE;
+
+      /* Map uppercase characters to corresponding lowercase ones.  */
+      for (i = 0; i < CHAR_SET_SIZE; i++)
+        preg->translate[i] = ISUPPER (i) ? tolower (i) : i;
+    }
+  else
+    preg->translate = NULL;
+
+  /* If REG_NEWLINE is set, newlines are treated differently.  */
+  if (cflags & REG_NEWLINE)
+    { /* REG_NEWLINE implies neither . nor [^...] match newline.  */
+      syntax &= ~RE_DOT_NEWLINE;
+      syntax |= RE_HAT_LISTS_NOT_NEWLINE;
+      /* It also changes the matching behavior.  */
+      preg->newline_anchor = 1;
+    }
+  else
+    preg->newline_anchor = 0;
+
+  preg->no_sub = !!(cflags & REG_NOSUB);
+
+  /* POSIX says a null character in the pattern terminates it, so we
+     can use strlen here in compiling the pattern.  */
+  ret = regex_compile (pattern, strlen (pattern), syntax, preg);
+
+  /* POSIX doesn't distinguish between an unmatched open-group and an
+     unmatched close-group: both are REG_EPAREN.  */
+  if (ret == REG_ERPAREN) ret = REG_EPAREN;
+
+  return (int) ret;
+}
+
+
+/* regexec searches for a given pattern, specified by PREG, in the
+   string STRING.
+
+   If NMATCH is zero or REG_NOSUB was set in the cflags argument to
+   `regcomp', we ignore PMATCH.  Otherwise, we assume PMATCH has at
+   least NMATCH elements, and we set them to the offsets of the
+   corresponding matched substrings.
+
+   EFLAGS specifies `execution flags' which affect matching: if
+   REG_NOTBOL is set, then ^ does not match at the beginning of the
+   string; if REG_NOTEOL is set, then $ does not match at the end.
+
+   We return 0 if we find a match and REG_NOMATCH if not.  */
+
+int
+regexec (preg, string, nmatch, pmatch, eflags)
+    const regex_t *preg;
+    const char *string;
+    size_t nmatch;
+    regmatch_t pmatch[];
+    int eflags;
+{
+  int ret;
+  struct re_registers regs;
+  regex_t private_preg;
+  int len = strlen (string);
+  boolean want_reg_info = !preg->no_sub && nmatch > 0;
+
+  private_preg = *preg;
+
+  private_preg.not_bol = !!(eflags & REG_NOTBOL);
+  private_preg.not_eol = !!(eflags & REG_NOTEOL);
+
+  /* The user has told us exactly how many registers to return
+     information about, via `nmatch'.  We have to pass that on to the
+     matching routines.  */
+  private_preg.regs_allocated = REGS_FIXED;
+
+  if (want_reg_info)
+    {
+      regs.num_regs = nmatch;
+      regs.start = TALLOC (nmatch, regoff_t);
+      regs.end = TALLOC (nmatch, regoff_t);
+      if (regs.start == NULL || regs.end == NULL)
+        return (int) REG_NOMATCH;
+    }
+
+  /* Perform the searching operation.  */
+  ret = re_search (&private_preg, string, len,
+                   /* start: */ 0, /* range: */ len,
+                   want_reg_info ? &regs : (struct re_registers *) 0);
+
+  /* Copy the register information to the POSIX structure.  */
+  if (want_reg_info)
+    {
+      if (ret >= 0)
+        {
+          unsigned r;
+
+          for (r = 0; r < nmatch; r++)
+            {
+              pmatch[r].rm_so = regs.start[r];
+              pmatch[r].rm_eo = regs.end[r];
+            }
+        }
+
+      /* If we needed the temporary register info, free the space now.  */
+      free (regs.start);       /* __MEM_CHECKED__ */
+      free (regs.end);         /* __MEM_CHECKED__ */
+    }
+
+  /* We want zero return to mean success, unlike `re_search'.  */
+  return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH;
+}
+
+
+/* Returns a message corresponding to an error code, ERRCODE, returned
+   from either regcomp or regexec.   We don't use PREG here.  */
+
+size_t
+regerror (errcode, preg, errbuf, errbuf_size)
+    int errcode;
+    const regex_t *preg;
+    char *errbuf;
+    size_t errbuf_size;
+{
+  const char *msg;
+  size_t msg_size;
+
+  if (errcode < 0
+      || errcode >= (int) (sizeof (re_error_msgid)
+                          / sizeof (re_error_msgid[0])))
+    /* Only error codes returned by the rest of the code should be passed
+       to this routine.  If we are given anything else, or if other regex
+       code generates an invalid error code, then the program has a bug.
+       Dump core so we can fix it.  */
+    abort ();
+
+  msg = gettext (re_error_msgid[errcode]);
+
+  msg_size = strlen (msg) + 1; /* Includes the null.  */
+
+  if (errbuf_size != 0)
+    {
+      if (msg_size > errbuf_size)
+        {
+          strncpy (errbuf, msg, errbuf_size - 1);
+          errbuf[errbuf_size - 1] = 0;
+        }
+      else
+        strcpy (errbuf, msg);  /* __STRCPY_CHECKED__ */
+    }
+
+  return msg_size;
+}
+
+
+/* Free dynamically allocated space used by PREG.  */
+
+void
+regfree (preg)
+    regex_t *preg;
+{
+  if (preg->buffer != NULL)
+    free (preg->buffer);       /* __MEM_CHECKED__ */
+  preg->buffer = NULL;
+
+  preg->allocated = 0;
+  preg->used = 0;
+
+  if (preg->fastmap != NULL)
+    free (preg->fastmap);      /* __MEM_CHECKED__ */
+  preg->fastmap = NULL;
+  preg->fastmap_accurate = 0;
+
+  if (preg->translate != NULL)
+    free (preg->translate);    /* __MEM_CHECKED__ */
+  preg->translate = NULL;
+}
+
+#endif /* not emacs  */
diff --git a/reldate.h b/reldate.h
new file mode 100644 (file)
index 0000000..8649e24
--- /dev/null
+++ b/reldate.h
@@ -0,0 +1 @@
+const char *ReleaseDate = "2004-02-01";
diff --git a/remailer.c b/remailer.c
new file mode 100644 (file)
index 0000000..8172f7c
--- /dev/null
@@ -0,0 +1,781 @@
+/*
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+/*
+ * Mixmaster support for Mutt
+ */
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "mutt_menu.h"
+#include "mutt_regex.h"
+#include "mapping.h"
+
+#include "remailer.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <sys/types.h>
+#include <sys/file.h>
+#include <fcntl.h>
+
+#ifdef MIXMASTER
+
+struct coord
+{
+  short r, c;
+};
+
+static REMAILER **mix_type2_list (size_t *l);
+static REMAILER *mix_new_remailer (void);
+static const char *mix_format_caps (REMAILER *r);
+static int mix_chain_add (MIXCHAIN *chain, const char *s, REMAILER **type2_list);
+static int mix_get_caps (const char *capstr);
+static void mix_add_entry (REMAILER ***, REMAILER *, size_t *, size_t *);
+static void mix_entry (char *b, size_t blen, MUTTMENU *menu, int num);
+static void mix_free_remailer (REMAILER **r);
+static void mix_free_type2_list (REMAILER ***ttlp);
+static void mix_redraw_ce (REMAILER **type2_list, struct coord *coords, MIXCHAIN *chain, int i, short selected);
+static void mix_redraw_chain (REMAILER **type2_list, struct coord *coords, MIXCHAIN *chain, int cur);
+static void mix_redraw_head (MIXCHAIN *);
+static void mix_screen_coordinates (REMAILER **type2_list, struct coord **, MIXCHAIN *, int);
+
+static int mix_get_caps (const char *capstr)
+{
+  int caps = 0;
+
+  while (*capstr)
+  {
+    switch (*capstr)
+    {
+      case 'C':
+       caps |= MIX_CAP_COMPRESS;
+        break;
+      
+      case 'M':
+        caps |= MIX_CAP_MIDDLEMAN;
+        break;
+      
+      case 'N':
+      {
+       switch (*++capstr)
+       {
+         case 'm':
+           caps |= MIX_CAP_NEWSMAIL;
+           break;
+         
+         case 'p':
+           caps |= MIX_CAP_NEWSPOST;
+           break;
+         
+       }
+      }
+    }
+    
+    if (*capstr) capstr++;
+  }
+  
+  return caps;
+}
+
+static void mix_add_entry (REMAILER ***type2_list, REMAILER *entry,
+                          size_t *slots, size_t *used)
+{
+  if (*used == *slots)
+  {
+    *slots += 5;
+    safe_realloc (type2_list, sizeof (REMAILER *) * (*slots));
+  }
+  
+  (*type2_list)[(*used)++] = entry;
+  if (entry) entry->num = *used;
+}
+
+static REMAILER *mix_new_remailer (void)
+{
+  return safe_calloc (1, sizeof (REMAILER));
+}
+
+static void mix_free_remailer (REMAILER **r)
+{
+  FREE (&(*r)->shortname);
+  FREE (&(*r)->addr);
+  FREE (&(*r)->ver);
+  
+  FREE (r);
+}
+
+/* parse the type2.list as given by mixmaster -T */
+
+static REMAILER **mix_type2_list (size_t *l)
+{
+  FILE *fp;
+  pid_t mm_pid;
+  int devnull;
+
+  char cmd[HUGE_STRING + _POSIX_PATH_MAX];
+  char line[HUGE_STRING];
+  char *t;
+  
+  REMAILER **type2_list = NULL, *p;
+  size_t slots = 0, used = 0;
+
+  if (!l)
+    return NULL;
+  
+  if ((devnull = open ("/dev/null", O_RDWR)) == -1)
+    return NULL;
+  
+  snprintf (cmd, sizeof (cmd), "%s -T", Mixmaster);
+  
+  if ((mm_pid = mutt_create_filter_fd (cmd, NULL, &fp, NULL, devnull, -1, devnull)) == -1)
+  {
+    close (devnull);
+    return NULL;
+  }
+
+  /* first, generate the "random" remailer */
+  
+  p = mix_new_remailer ();
+  p->shortname = safe_strdup ("<random>");
+  mix_add_entry (&type2_list, p, &slots, &used);
+  
+  while (fgets (line, sizeof (line), fp))
+  {
+    p = mix_new_remailer ();
+    
+    if (!(t = strtok (line, " \t\n")))
+      goto problem;
+    
+    p->shortname = safe_strdup (t);
+    
+    if (!(t = strtok (NULL, " \t\n")))
+      goto problem;
+
+    p->addr = safe_strdup (t);
+    
+    if (!(t = strtok (NULL, " \t\n")))
+      goto problem;
+
+    if (!(t = strtok (NULL, " \t\n")))
+      goto problem;
+
+    p->ver = safe_strdup (t);
+    
+    if (!(t = strtok (NULL, " \t\n")))
+      goto problem;
+
+    p->caps = mix_get_caps (t);
+    
+    mix_add_entry (&type2_list, p, &slots, &used);
+    continue;
+    
+    problem:
+    mix_free_remailer (&p);
+  }
+  
+  *l = used;
+
+  mix_add_entry (&type2_list, NULL, &slots, &used);
+  mutt_wait_filter (mm_pid);
+
+  close (devnull);
+  
+  return type2_list;
+}
+
+static void mix_free_type2_list (REMAILER ***ttlp)
+{
+  int i;
+  REMAILER **type2_list = *ttlp;
+  
+  for (i = 0; type2_list[i]; i++)
+    mix_free_remailer (&type2_list[i]);
+  
+  FREE (type2_list);
+}
+
+
+#define MIX_HOFFSET 2
+#define MIX_VOFFSET (LINES - 6)
+#define MIX_MAXROW  (LINES - 3)
+
+
+static void mix_screen_coordinates (REMAILER **type2_list,
+                                   struct coord **coordsp,
+                                   MIXCHAIN *chain,
+                                   int i)
+{
+  short c, r, oc;
+  struct coord *coords;
+
+  if (!chain->cl)
+    return;
+  
+  safe_realloc (coordsp, sizeof (struct coord) * chain->cl);
+  
+  coords = *coordsp;
+  
+  if (i)
+  {
+    c = coords[i-1].c + strlen (type2_list[chain->ch[i-1]]->shortname) + 2;
+    r = coords[i-1].r;
+  }
+  else
+  {
+    r = MIX_VOFFSET;
+    c = MIX_HOFFSET;
+  }
+    
+  
+  for (; i < chain->cl; i++)
+  {
+    oc = c;
+    c += strlen (type2_list[chain->ch[i]]->shortname) + 2;
+
+    if (c  >= COLS)
+    {
+      oc = c = MIX_HOFFSET;
+      r++;
+    }
+    
+    coords[i].c = oc;
+    coords[i].r = r;
+    
+  }
+  
+}
+
+static void mix_redraw_ce (REMAILER **type2_list,
+                          struct coord *coords,
+                          MIXCHAIN *chain,
+                          int i,
+                          short selected)
+{
+  if (!coords || !chain)
+    return;
+  
+  if (coords[i].r < MIX_MAXROW)
+  {
+    
+    if (selected)
+      SETCOLOR (MT_COLOR_INDICATOR);
+    else
+      SETCOLOR (MT_COLOR_NORMAL);
+    
+    mvaddstr (coords[i].r, coords[i].c, type2_list[chain->ch[i]]->shortname);
+    SETCOLOR (MT_COLOR_NORMAL);
+
+    if (i + 1 < chain->cl)
+      addstr (", ");
+  }
+}
+
+static void mix_redraw_chain (REMAILER **type2_list,
+                             struct coord *coords,
+                             MIXCHAIN *chain,
+                             int cur)
+{
+  int i;
+  
+  SETCOLOR (MT_COLOR_NORMAL);
+  BKGDSET (MT_COLOR_NORMAL);
+  
+  for (i = MIX_VOFFSET; i < MIX_MAXROW; i++)
+  {
+    move (i, 0);
+    clrtoeol ();
+  }
+
+  for (i = 0; i < chain->cl; i++)
+    mix_redraw_ce (type2_list, coords, chain, i, i == cur);
+}
+
+static void mix_redraw_head (MIXCHAIN *chain)
+{
+  SETCOLOR (MT_COLOR_STATUS);
+  mvprintw (MIX_VOFFSET - 1, 0, "-- Remailer chain [Length: %d]", chain ? chain->cl : 0);
+  
+  BKGDSET (MT_COLOR_STATUS);
+  clrtoeol ();
+  
+  BKGDSET (MT_COLOR_NORMAL);
+  SETCOLOR (MT_COLOR_NORMAL);
+}
+
+static const char *mix_format_caps (REMAILER *r)
+{
+  static char capbuff[10];
+  char *t = capbuff;
+  
+  if (r->caps & MIX_CAP_COMPRESS)
+    *t++ = 'C';
+  else
+    *t++ = ' ';
+  
+  if (r->caps & MIX_CAP_MIDDLEMAN)
+    *t++ = 'M';
+  else
+    *t++ = ' ';
+  
+  if (r->caps & MIX_CAP_NEWSPOST)
+  {
+    *t++ = 'N';
+    *t++ = 'p';
+  }
+  else
+  {
+    *t++ = ' ';
+    *t++ = ' ';
+  }
+   
+  if (r->caps & MIX_CAP_NEWSMAIL)
+  {
+    *t++ = 'N';
+    *t++ = 'm';
+  }
+  else
+  {
+    *t++ = ' ';
+    *t++ = ' ';
+  }
+  
+  *t = '\0';
+  
+  return capbuff;
+}
+
+/*
+ * Format an entry for the remailer menu.
+ * 
+ * %n  number
+ * %c  capabilities
+ * %s  short name
+ * %a  address
+ *
+ */
+
+static const char *mix_entry_fmt (char *dest,
+                                 size_t destlen,
+                                 char op,
+                                 const char *src,
+                                 const char *prefix,
+                                 const char *ifstring,
+                                 const char *elsestring,
+                                 unsigned long data,
+                                 format_flag flags)
+{
+  char fmt[16];
+  REMAILER *remailer = (REMAILER *) data;
+  int optional = (flags & M_FORMAT_OPTIONAL);
+
+  switch (op)
+  {
+    case 'n':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (dest, destlen, fmt, remailer->num);
+      }
+      break;
+    case 'c':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, mix_format_caps(remailer));
+      }
+      break;
+    case 's':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, NONULL(remailer->shortname));
+      }
+      else if (!remailer->shortname)
+        optional = 0;
+      break;
+    case 'a':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, NONULL(remailer->addr));
+      }
+      else if (!remailer->addr)
+        optional = 0;
+      break;
+    
+    default:
+      *dest = '\0';
+  }
+
+  if (optional)
+    mutt_FormatString (dest, destlen, ifstring, mutt_attach_fmt, data, 0);
+  else if (flags & M_FORMAT_OPTIONAL)
+    mutt_FormatString (dest, destlen, elsestring, mutt_attach_fmt, data, 0);
+  return (src);
+}
+
+
+  
+static void mix_entry (char *b, size_t blen, MUTTMENU *menu, int num)
+{
+  REMAILER **type2_list = (REMAILER **) menu->data;
+  mutt_FormatString (b, blen, NONULL (MixEntryFormat), mix_entry_fmt,
+                    (unsigned long) type2_list[num], M_FORMAT_ARROWCURSOR);
+}
+
+static int mix_chain_add (MIXCHAIN *chain, const char *s, 
+                         REMAILER **type2_list)
+{
+  int i;
+  
+  if (chain->cl >= MAXMIXES)
+    return -1;
+  
+  if (!mutt_strcmp (s, "0") || !ascii_strcasecmp (s, "<random>"))
+  {
+    chain->ch[chain->cl++] = 0;
+    return 0;
+  }
+
+  for (i = 0; type2_list[i]; i++)
+  {
+    if (!ascii_strcasecmp (s, type2_list[i]->shortname))
+    {
+      chain->ch[chain->cl++] = i;
+      return 0;
+    }
+  }
+  
+  /* replace unknown remailers by <random> */
+  
+  if (!type2_list[i])
+    chain->ch[chain->cl++] = 0;
+
+  return 0;
+}
+
+static struct mapping_t RemailerHelp[] = 
+{
+  { N_("Append"), OP_MIX_APPEND },
+  { N_("Insert"), OP_MIX_INSERT },
+  { N_("Delete"), OP_MIX_DELETE },
+  { N_("Abort"),  OP_EXIT       },
+  { N_("OK"),     OP_MIX_USE    },
+  { NULL }
+};
+  
+
+void mix_make_chain (LIST **chainp, int *redraw)
+{
+  LIST *p;
+  MIXCHAIN *chain;
+  int c_cur = 0, c_old = 0;
+  int m_len;
+  short c_redraw = 1;
+  
+  REMAILER **type2_list = NULL;
+  size_t ttll = 0;
+  
+  struct coord *coords = NULL;
+  
+  MUTTMENU *menu;
+  char helpstr[SHORT_STRING];
+  short loop = 1;
+  int op;
+  
+  int i, j;
+  char *t;
+
+  if (!(type2_list = mix_type2_list (&ttll)))
+  {
+    mutt_error _("Can't get mixmaster's type2.list!");
+    return;
+  }
+
+  *redraw = REDRAW_FULL;
+  
+  chain = safe_calloc (sizeof (MIXCHAIN), 1);
+  for (p = *chainp; p; p = p->next)
+    mix_chain_add (chain, (char *) p->data, type2_list);
+
+  mutt_free_list (chainp);
+  
+  /* safety check */
+  for (i = 0; i < chain->cl; i++)
+  {
+    if (chain->ch[i] >= ttll)
+      chain->ch[i] = 0;
+  }
+  
+  mix_screen_coordinates (type2_list, &coords, chain, 0);
+  
+  menu = mutt_new_menu ();
+  menu->menu = MENU_MIX;
+  menu->max = ttll;
+  menu->make_entry = mix_entry;
+  menu->tag = NULL;
+  menu->title = _("Select a remailer chain.");
+  menu->data = type2_list;
+  menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_MIX, RemailerHelp);
+
+  m_len = menu->pagelen = MIX_VOFFSET - menu->offset - 1;
+  
+  while (loop) 
+  {
+    if (menu->pagelen != m_len)
+    {
+      menu->pagelen = m_len;
+      menu->redraw = REDRAW_FULL;
+    }
+    
+    if (c_redraw)
+    {
+      mix_redraw_head (chain);
+      mix_redraw_chain (type2_list, coords, chain, c_cur);
+      c_redraw = 0;
+    }
+    else if (c_cur != c_old)
+    {
+      mix_redraw_ce (type2_list, coords, chain, c_old, 0);
+      mix_redraw_ce (type2_list, coords, chain, c_cur, 1);
+    }
+    
+    c_old = c_cur;
+    
+    switch ((op = mutt_menuLoop (menu)))
+    {
+      case OP_REDRAW:
+      {
+       menu_redraw_status (menu);
+       mix_redraw_head (chain);
+       mix_screen_coordinates (type2_list, &coords, chain, 0);
+       mix_redraw_chain (type2_list, coords, chain, c_cur);
+       menu->pagelen = m_len = MIX_VOFFSET - menu->offset - 1;
+       break;
+      }
+      
+      case OP_EXIT:
+      {
+       chain->cl = 0;
+       loop = 0;
+       break;
+      }
+
+      case OP_MIX_USE:
+      {
+       if (!chain->cl)
+       {
+         chain->cl++;
+         chain->ch[0] = menu->current;
+         mix_screen_coordinates (type2_list, &coords, chain, c_cur);
+         c_redraw = 1;
+       }
+       
+       if (chain->cl && chain->ch[chain->cl - 1] && 
+           (type2_list[chain->ch[chain->cl-1]]->caps & MIX_CAP_MIDDLEMAN))
+       {
+         mutt_error ( _("Error: %s can't be used as the final remailer of a chain."),
+                   type2_list[chain->ch[chain->cl - 1]]->shortname);
+       }
+       else
+       {
+         loop = 0;
+       }
+       break;
+      }
+
+      case OP_GENERIC_SELECT_ENTRY:
+      case OP_MIX_APPEND:
+      {
+       if (chain->cl < MAXMIXES && c_cur < chain->cl)
+         c_cur++;
+      }
+      /* fallthrough */
+      case OP_MIX_INSERT:
+      {
+       if (chain->cl < MAXMIXES)
+       {
+         chain->cl++;
+         for (i = chain->cl - 1; i > c_cur; i--)
+           chain->ch[i] = chain->ch[i-1];
+         
+         chain->ch[c_cur] = menu->current;
+         mix_screen_coordinates (type2_list, &coords, chain, c_cur);
+         c_redraw = 1;
+       }
+       else
+         mutt_error ( _("Mixmaster chains are limited to %d elements."),
+                   MAXMIXES);
+       
+       break;
+      }
+      
+      case OP_MIX_DELETE:
+      {
+       if (chain->cl)
+       {
+         chain->cl--;
+         
+         for (i = c_cur; i < chain->cl; i++)
+           chain->ch[i] = chain->ch[i+1];
+
+         if (c_cur == chain->cl && c_cur)
+           c_cur--;
+         
+         mix_screen_coordinates (type2_list, &coords, chain, c_cur);
+         c_redraw = 1;
+       }
+       else
+       {
+         mutt_error _("The remailer chain is already empty.");
+       }
+       break;
+      }
+      
+      case OP_MIX_CHAIN_PREV:
+      {
+       if (c_cur) 
+         c_cur--;
+       else
+         mutt_error _("You already have the first chain element selected.");
+       
+       break;
+      }
+      
+      case OP_MIX_CHAIN_NEXT:
+      {
+       if (chain->cl && c_cur < chain->cl - 1)
+         c_cur++;
+       else
+         mutt_error _("You already have the last chain element selected.");
+       
+       break;
+      }
+    }
+  }
+  
+  mutt_menuDestroy (&menu);
+
+  /* construct the remailer list */
+  
+  if (chain->cl)
+  {
+    for (i = 0; i < chain->cl; i++)
+    {
+      if ((j = chain->ch[i]))
+       t = type2_list[j]->shortname;
+      else
+       t = "*";
+      
+      *chainp = mutt_add_list (*chainp, t);
+    }
+  }
+  
+  mix_free_type2_list (&type2_list);
+  FREE (&coords);
+  FREE (&chain);
+}
+
+/* some safety checks before piping the message to mixmaster */
+
+int mix_check_message (HEADER *msg)
+{
+  const char *fqdn;
+  short need_hostname = 0;
+  ADDRESS *p;
+  
+  if (msg->env->cc || msg->env->bcc)
+  {
+    mutt_error _("Mixmaster doesn't accept Cc or Bcc headers.");
+    return -1;
+  }
+
+  /* When using mixmaster, we MUST qualify any addresses since
+   * the message will be delivered through remote systems.
+   * 
+   * use_domain won't be respected at this point, hidden_host will.
+   */
+
+  for (p = msg->env->to; p; p = p->next)
+  {
+    if (!p->group && strchr (p->mailbox, '@') == NULL)
+    {
+      need_hostname = 1;
+      break;
+    }
+  }
+    
+  if (need_hostname)
+  {
+    
+    if (!(fqdn = mutt_fqdn (1)))
+    {
+      mutt_error _("Please set the hostname variable to a proper value when using mixmaster!");
+      return (-1);
+    }
+  
+    /* Cc and Bcc are empty at this point. */
+    rfc822_qualify (msg->env->to, fqdn);
+    rfc822_qualify (msg->env->reply_to, fqdn);
+    rfc822_qualify (msg->env->mail_followup_to, fqdn);
+  }
+
+  return 0;
+}
+
+int mix_send_message (LIST *chain, const char *tempfile)
+{
+  char cmd[HUGE_STRING];
+  char tmp[HUGE_STRING];
+  char cd_quoted[STRING];
+  int i;
+
+  snprintf (cmd, sizeof (cmd), "cat %s | %s -m ", tempfile, Mixmaster);
+  
+  for (i = 0; chain; chain = chain->next, i = 1)
+  {
+    strfcpy (tmp, cmd, sizeof (tmp));
+    mutt_quote_filename (cd_quoted, sizeof (cd_quoted), (char *) chain->data);
+    snprintf (cmd, sizeof (cmd), "%s%s%s", tmp, i ? "," : " -l ", cd_quoted);
+  }
+
+  if (!option (OPTNOCURSES))
+    mutt_endwin (NULL);
+  
+  if ((i = mutt_system (cmd)))
+  {
+    fprintf (stderr, _("Error sending message, child exited %d.\n"), i);
+    if (!option (OPTNOCURSES))
+    {
+      mutt_any_key_to_continue (NULL);
+      mutt_error _("Error sending message.");
+    }
+  }
+
+  unlink (tempfile);
+  return i;
+}
+  
+
+#endif
diff --git a/remailer.h b/remailer.h
new file mode 100644 (file)
index 0000000..0ff0e97
--- /dev/null
@@ -0,0 +1,65 @@
+#ifndef _REMAILER_H
+#define _REMAILER_H
+
+/*
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+/*
+ * Mixmaster support for Mutt
+ */
+
+#include "config.h"
+
+#ifdef MIXMASTER
+
+#define MIX_CAP_COMPRESS  (1 << 0)
+#define MIX_CAP_MIDDLEMAN (1 << 1)
+#define MIX_CAP_NEWSPOST  (1 << 2)
+#define MIX_CAP_NEWSMAIL  (1 << 3)
+
+/* Mixmaster's maximum chain length.  Don't change this. */
+
+#define MAXMIXES 19
+
+struct type2
+{
+  int num;
+  char *shortname;
+  char *addr;
+  char *ver;
+  int caps;
+};
+
+typedef struct type2 REMAILER;
+
+
+struct mixchain
+{
+  size_t cl;
+  int ch[MAXMIXES];
+};
+
+typedef struct mixchain MIXCHAIN;
+
+int mix_send_message (LIST *, const char *);
+int mix_check_message (HEADER *msg);
+void mix_make_chain (LIST **, int *);
+
+#endif /* MIXMASTER */
+
+#endif /* _REMAILER_H */
diff --git a/resize.c b/resize.c
new file mode 100644 (file)
index 0000000..c36b7a4
--- /dev/null
+++ b/resize.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_curses.h"
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <termios.h>
+
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#else
+# ifdef HAVE_IOCTL_H
+# include <ioctl.h>
+# endif
+#endif
+
+/* this routine should be called after receiving SIGWINCH */
+void mutt_resize_screen (void)
+{
+  char *cp;
+  int fd;
+  struct winsize w;
+#ifdef HAVE_RESIZETERM
+  int SLtt_Screen_Rows, SLtt_Screen_Cols;
+#endif
+
+  SLtt_Screen_Rows = -1;
+  SLtt_Screen_Cols = -1;
+  if ((fd = open ("/dev/tty", O_RDONLY)) != -1)
+  {
+    if (ioctl (fd, TIOCGWINSZ, &w) != -1)
+    {
+      SLtt_Screen_Rows = w.ws_row;
+      SLtt_Screen_Cols = w.ws_col;
+    }
+    close (fd);
+  }
+  if (SLtt_Screen_Rows <= 0)
+  {
+    if ((cp = getenv ("LINES")) != NULL)
+    {
+      SLtt_Screen_Rows = atoi (cp);
+    }
+    else
+      SLtt_Screen_Rows = 24;
+  }
+  if (SLtt_Screen_Cols <= 0)
+  {
+    if ((cp = getenv ("COLUMNS")) != NULL)
+      SLtt_Screen_Cols = atoi (cp);
+    else
+      SLtt_Screen_Cols = 80;
+  }
+#ifdef USE_SLANG_CURSES
+  delwin (stdscr);
+  SLsmg_reset_smg ();
+  SLsmg_init_smg ();
+  stdscr = newwin (0, 0, 0, 0);
+  keypad (stdscr, TRUE);
+#else
+  resizeterm (SLtt_Screen_Rows, SLtt_Screen_Cols);
+#endif
+}
diff --git a/rfc1524.c b/rfc1524.c
new file mode 100644 (file)
index 0000000..82c39a6
--- /dev/null
+++ b/rfc1524.c
@@ -0,0 +1,593 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+/* 
+ * rfc1524 defines a format for the Multimedia Mail Configuration, which
+ * is the standard mailcap file format under Unix which specifies what 
+ * external programs should be used to view/compose/edit multimedia files
+ * based on content type.
+ *
+ * This file contains various functions for implementing a fair subset of 
+ * rfc1524.
+ */
+
+#include "mutt.h"
+#include "rfc1524.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <errno.h>
+#include <unistd.h>
+
+/* The command semantics include the following:
+ * %s is the filename that contains the mail body data
+ * %t is the content type, like text/plain
+ * %{parameter} is replaced by the parameter value from the content-type field
+ * \% is %
+ * Unsupported rfc1524 parameters: these would probably require some doing
+ * by mutt, and can probably just be done by piping the message to metamail
+ * %n is the integer number of sub-parts in the multipart
+ * %F is "content-type filename" repeated for each sub-part
+ *
+ * In addition, this function returns a 0 if the command works on a file,
+ * and 1 if the command works on a pipe.
+ */
+int rfc1524_expand_command (BODY *a, char *filename, char *_type,
+    char *command, int clen)
+{
+  int x=0,y=0;
+  int needspipe = TRUE;
+  char buf[LONG_STRING];
+  char type[LONG_STRING];
+  
+  strfcpy (type, _type, sizeof (type));
+  
+  if (option (OPTMAILCAPSANITIZE))
+    mutt_sanitize_filename (type, 0);
+
+  while (command[x] && x<clen && y<sizeof(buf)) 
+  {
+    if (command[x] == '\\') {
+      x++;
+      buf[y++] = command[x++];
+    }
+    else if (command[x] == '%') 
+    {
+      x++;
+      if (command[x] == '{') 
+      {
+       char param[STRING];
+       char pvalue[STRING];
+       char *_pvalue;
+       int z = 0;
+
+       x++;
+       while (command[x] && command[x] != '}' && z<sizeof(param))
+         param[z++] = command[x++];
+       param[z] = '\0';
+       
+       _pvalue = mutt_get_parameter (param, a->parameter);
+       strfcpy (pvalue, NONULL(_pvalue), sizeof (pvalue));
+       if (option (OPTMAILCAPSANITIZE))
+         mutt_sanitize_filename (pvalue, 0);
+       
+       y += mutt_quote_filename (buf + y, sizeof (buf) - y, pvalue);
+      }
+      else if (command[x] == 's' && filename != NULL)
+      {
+       y += mutt_quote_filename (buf + y, sizeof (buf) - y, filename);
+       needspipe = FALSE;
+      }
+      else if (command[x] == 't')
+      {
+       y += mutt_quote_filename (buf + y, sizeof (buf) - y, type);
+      }
+      x++;
+    }
+    else
+      buf[y++] = command[x++];
+  }
+  buf[y] = '\0';
+  strfcpy (command, buf, clen);
+
+  return needspipe;
+}
+
+/* NUL terminates a rfc 1524 field,
+ * returns start of next field or NULL */
+static char *get_field (char *s)
+{
+  char *ch;
+
+  if (!s)
+    return NULL;
+
+  while ((ch = strpbrk (s, ";\\")) != NULL)
+  {
+    if (*ch == '\\')
+    {
+      s = ch + 1;
+      if (*s)
+       s++;
+    }
+    else
+    {
+      *ch++ = 0;
+      SKIPWS (ch);
+      break;
+    }
+  }
+  mutt_remove_trailing_ws (s);
+  return ch;
+}
+
+static int get_field_text (char *field, char **entry,
+                          char *type, char *filename, int line)
+{
+  field = mutt_skip_whitespace (field);
+  if (*field == '=')
+  {
+    if (entry)
+    {
+      field++;
+      field = mutt_skip_whitespace (field);
+      mutt_str_replace (entry, field);
+    }
+    return 1;
+  }
+  else 
+  {
+    mutt_error (_("Improperly formated entry for type %s in \"%s\" line %d"),
+               type, filename, line);
+    return 0;
+  }
+}
+
+static int rfc1524_mailcap_parse (BODY *a,
+                                 char *filename,
+                                 char *type, 
+                                 rfc1524_entry *entry,
+                                 int opt)
+{
+  FILE *fp;
+  char *buf = NULL;
+  size_t buflen;
+  char *ch;
+  char *field;
+  int found = FALSE;
+  int copiousoutput;
+  int composecommand;
+  int editcommand;
+  int printcommand;
+  int btlen;
+  int line = 0;
+
+  /* rfc1524 mailcap file is of the format:
+   * base/type; command; extradefs
+   * type can be * for matching all
+   * base with no /type is an implicit wild
+   * command contains a %s for the filename to pass, default to pipe on stdin
+   * extradefs are of the form:
+   *  def1="definition"; def2="define \;";
+   * line wraps with a \ at the end of the line
+   * # for comments
+   */
+
+  /* find length of basetype */
+  if ((ch = strchr (type, '/')) == NULL)
+    return FALSE;
+  btlen = ch - type;
+
+  if ((fp = fopen (filename, "r")) != NULL)
+  {
+    while (!found && (buf = mutt_read_line (buf, &buflen, fp, &line)) != NULL)
+    {
+      /* ignore comments */
+      if (*buf == '#')
+       continue;
+      dprint (2, (debugfile, "mailcap entry: %s\n", buf));
+
+      /* check type */
+      ch = get_field (buf);
+      if (ascii_strcasecmp (buf, type) &&
+         (ascii_strncasecmp (buf, type, btlen) ||
+          (buf[btlen] != 0 &&                  /* implicit wild */
+           mutt_strcmp (buf + btlen, "/*"))))  /* wildsubtype */
+       continue;
+
+      /* next field is the viewcommand */
+      field = ch;
+      ch = get_field (ch);
+      if (entry)
+       entry->command = safe_strdup (field);
+
+      /* parse the optional fields */
+      found = TRUE;
+      copiousoutput = FALSE;
+      composecommand = FALSE;
+      editcommand = FALSE;
+      printcommand = FALSE;
+
+      while (ch)
+      {
+       field = ch;
+       ch = get_field (ch);
+       dprint (2, (debugfile, "field: %s\n", field));
+
+       if (!ascii_strcasecmp (field, "needsterminal"))
+       {
+         if (entry)
+           entry->needsterminal = TRUE;
+       }
+       else if (!ascii_strcasecmp (field, "copiousoutput"))
+       {
+         copiousoutput = TRUE;
+         if (entry)
+           entry->copiousoutput = TRUE;
+       }
+       else if (!ascii_strncasecmp (field, "composetyped", 12))
+       {
+         /* this compare most occur before compose to match correctly */
+         if (get_field_text (field + 12, entry ? &entry->composetypecommand : NULL,
+                             type, filename, line))
+           composecommand = TRUE;
+       }
+       else if (!ascii_strncasecmp (field, "compose", 7))
+       {
+         if (get_field_text (field + 7, entry ? &entry->composecommand : NULL,
+                             type, filename, line))
+           composecommand = TRUE;
+       }
+       else if (!ascii_strncasecmp (field, "print", 5))
+       {
+         if (get_field_text (field + 5, entry ? &entry->printcommand : NULL,
+                             type, filename, line))
+           printcommand = TRUE;
+       }
+       else if (!ascii_strncasecmp (field, "edit", 4))
+       {
+         if (get_field_text (field + 4, entry ? &entry->editcommand : NULL,
+                             type, filename, line))
+           editcommand = TRUE;
+       }
+       else if (!ascii_strncasecmp (field, "nametemplate", 12))
+       {
+         get_field_text (field + 12, entry ? &entry->nametemplate : NULL,
+                         type, filename, line);
+       }
+       else if (!ascii_strncasecmp (field, "x-convert", 9))
+       {
+         get_field_text (field + 9, entry ? &entry->convert : NULL,
+                         type, filename, line);
+       }
+       else if (!ascii_strncasecmp (field, "test", 4))
+       {
+         /* 
+          * This routine executes the given test command to determine
+          * if this is the right entry.
+          */
+         char *test_command = NULL;
+         size_t len;
+
+         if (get_field_text (field + 4, &test_command, type, filename, line)
+             && test_command)
+         {
+           len = mutt_strlen (test_command) + STRING;
+           safe_realloc (&test_command, len);
+           rfc1524_expand_command (a, a->filename, type, test_command, len);
+           if (mutt_system (test_command))
+           {
+             /* a non-zero exit code means test failed */
+             found = FALSE;
+           }
+           FREE (&test_command);
+         }
+       }
+      } /* while (ch) */
+
+      if (opt == M_AUTOVIEW)
+      {
+       if (!copiousoutput)
+         found = FALSE;
+      }
+      else if (opt == M_COMPOSE)
+      {
+       if (!composecommand)
+         found = FALSE;
+      }
+      else if (opt == M_EDIT)
+      {
+       if (!editcommand)
+         found = FALSE;
+      }
+      else if (opt == M_PRINT)
+      {
+       if (!printcommand)
+         found = FALSE;
+      }
+      
+      if (!found)
+      {
+       /* reset */
+       if (entry)
+       {
+         FREE (&entry->command);
+         FREE (&entry->composecommand);
+         FREE (&entry->composetypecommand);
+         FREE (&entry->editcommand);
+         FREE (&entry->printcommand);
+         FREE (&entry->nametemplate);
+         FREE (&entry->convert);
+         entry->needsterminal = 0;
+         entry->copiousoutput = 0;
+       }
+      }
+    } /* while (!found && (buf = mutt_read_line ())) */
+    fclose (fp);
+  } /* if ((fp = fopen ())) */
+  FREE (&buf);
+  return found;
+}
+
+rfc1524_entry *rfc1524_new_entry(void)
+{
+  return (rfc1524_entry *)safe_calloc(1, sizeof(rfc1524_entry));
+}
+
+void rfc1524_free_entry(rfc1524_entry **entry)
+{
+  rfc1524_entry *p = *entry;
+
+  FREE (&p->command);
+  FREE (&p->testcommand);
+  FREE (&p->composecommand);
+  FREE (&p->composetypecommand);
+  FREE (&p->editcommand);
+  FREE (&p->printcommand);
+  FREE (&p->nametemplate);
+  FREE (entry);
+}
+
+/*
+ * rfc1524_mailcap_lookup attempts to find the given type in the
+ * list of mailcap files.  On success, this returns the entry information
+ * in *entry, and returns 1.  On failure (not found), returns 0.
+ * If entry == NULL just return 1 if the given type is found.
+ */
+int rfc1524_mailcap_lookup (BODY *a, char *type, rfc1524_entry *entry, int opt)
+{
+  char path[_POSIX_PATH_MAX];
+  int x;
+  int found = FALSE;
+  char *curr = MailcapPath;
+
+  /* rfc1524 specifies that a path of mailcap files should be searched.
+   * joy.  They say 
+   * $HOME/.mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap, etc
+   * and overriden by the MAILCAPS environment variable, and, just to be nice, 
+   * we'll make it specifiable in .muttrc
+   */
+  if (!curr || !*curr)
+  {
+    mutt_error _("No mailcap path specified");
+    return 0;
+  }
+
+  mutt_check_lookup_list (a, type, SHORT_STRING);
+
+  while (!found && *curr)
+  {
+    x = 0;
+    while (*curr && *curr != ':' && x < sizeof (path) - 1)
+    {
+      path[x++] = *curr;
+      curr++;
+    }
+    if (*curr)
+      curr++;
+
+    if (!x)
+      continue;
+    
+    path[x] = '\0';
+    mutt_expand_path (path, sizeof (path));
+
+    dprint(2,(debugfile,"Checking mailcap file: %s\n",path));
+    found = rfc1524_mailcap_parse (a, path, type, entry, opt);
+  }
+
+  if (entry && !found)
+    mutt_error (_("mailcap entry for type %s not found"), type);
+
+  return found;
+}
+
+
+/* This routine will create a _temporary_ filename matching the
+ * name template given if this needs to be done.
+ * 
+ * Please note that only the last path element of the
+ * template and/or the old file name will be used for the
+ * comparison and the temporary file name.
+ * 
+ * Returns 0 if oldfile is fine as is.
+ * Returns 1 if newfile specified
+ */
+
+static void strnfcpy(char *d, char *s, size_t siz, size_t len)
+{
+  if(len > siz)
+    len = siz - 1;
+  strfcpy(d, s, len);
+}
+
+int rfc1524_expand_filename (char *nametemplate,
+                            char *oldfile, 
+                            char *newfile,
+                            size_t nflen)
+{
+  int i, j, k, ps, r;
+  char *s;
+  short lmatch = 0, rmatch = 0; 
+  char left[_POSIX_PATH_MAX];
+  char right[_POSIX_PATH_MAX];
+  
+  newfile[0] = 0;
+
+  /* first, ignore leading path components.
+   */
+  
+  if (nametemplate && (s = strrchr (nametemplate, '/')))
+    nametemplate = s + 1;
+
+  if (oldfile && (s = strrchr (oldfile, '/')))
+    oldfile = s + 1;
+    
+  if (!nametemplate)
+  {
+    if (oldfile)
+      strfcpy (newfile, oldfile, nflen);
+  }
+  else if (!oldfile)
+  {
+    mutt_expand_fmt (newfile, nflen, nametemplate, "mutt");
+  }
+  else /* oldfile && nametemplate */
+  {
+
+    /* first, compare everything left from the "%s" 
+     * (if there is one).
+     */
+    
+    lmatch = 1; ps = 0;
+    for(i = 0; nametemplate[i]; i++)
+    {
+      if(nametemplate[i] == '%' && nametemplate[i+1] == 's')
+      { 
+       ps = 1;
+       break;
+      }
+
+      /* note that the following will _not_ read beyond oldfile's end. */
+
+      if(lmatch && nametemplate[i] != oldfile[i])
+       lmatch = 0;
+    }
+
+    if(ps)
+    {
+      
+      /* If we had a "%s", check the rest. */
+      
+      /* now, for the right part: compare everything right from 
+       * the "%s" to the final part of oldfile.
+       * 
+       * The logic here is as follows:
+       * 
+       * - We start reading from the end.
+       * - There must be a match _right_ from the "%s",
+       *   thus the i + 2.  
+       * - If there was a left hand match, this stuff
+       *   must not be counted again.  That's done by the
+       *   condition (j >= (lmatch ? i : 0)).
+       */
+      
+      rmatch = 1;
+
+      for(r = 0, j = mutt_strlen(oldfile) - 1, k = mutt_strlen(nametemplate) - 1 ;
+         j >= (lmatch ? i : 0) && k >= i + 2;
+         j--, k--)
+      {
+       if(nametemplate[k] != oldfile[j])
+       {
+         rmatch = 0;
+         break;
+       }
+      }
+      
+      /* Now, check if we had a full match. */
+      
+      if(k >= i + 2)
+       rmatch = 0;
+      
+      if(lmatch) *left = 0;
+      else strnfcpy(left, nametemplate, sizeof(left), i);
+      
+      if(rmatch) *right = 0;
+      else strfcpy(right, nametemplate + i + 2, sizeof(right));
+      
+      snprintf(newfile, nflen, "%s%s%s", left, oldfile, right);
+    }
+    else
+    {
+      /* no "%s" in the name template. */
+      strfcpy(newfile, nametemplate, nflen);
+    }
+  }
+  
+  mutt_adv_mktemp(newfile, nflen);
+
+  if(rmatch && lmatch)
+    return 0;
+  else 
+    return 1;
+  
+}
+
+/* If rfc1524_expand_command() is used on a recv'd message, then
+ * the filename doesn't exist yet, but if its used while sending a message,
+ * then we need to rename the existing file.
+ *
+ * This function returns 0 on successful move, 1 on old file doesn't exist,
+ * 2 on new file already exists, and 3 on other failure.
+ */
+
+/* note on access(2) use: No dangling symlink problems here due to
+ * safe_fopen().
+ */
+
+int _mutt_rename_file (char *oldfile, char *newfile, int overwrite)
+{
+  FILE *ofp, *nfp;
+
+  if (access (oldfile, F_OK) != 0)
+    return 1;
+  if (!overwrite && access (newfile, F_OK) == 0)
+    return 2;
+  if ((ofp = fopen (oldfile,"r")) == NULL)
+    return 3;
+  if ((nfp = safe_fopen (newfile,"w")) == NULL)
+  {
+    fclose(ofp);
+    return 3;
+  }
+  mutt_copy_stream (ofp,nfp);
+  fclose (nfp);
+  fclose (ofp);
+  mutt_unlink (oldfile);
+  return 0;
+}
+
+int mutt_rename_file (char *oldfile, char *newfile)
+{
+  return _mutt_rename_file (oldfile, newfile, 0);
+}
diff --git a/rfc1524.h b/rfc1524.h
new file mode 100644 (file)
index 0000000..bc24e96
--- /dev/null
+++ b/rfc1524.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#ifndef _RFC1524_H
+#define _RFC1524_H
+
+typedef struct rfc1524_mailcap_entry {
+/*  char *contenttype; */ /* we don't need this, as we search for it */
+  char *command;
+  char *testcommand;
+  char *composecommand;
+  char *composetypecommand;
+  char *editcommand;
+  char *printcommand;
+  char *nametemplate;
+  char *convert;
+/*  char *description; */ /* we don't need this */
+  unsigned int needsterminal : 1;  /* endwin() and system */
+  unsigned int copiousoutput : 1;  /* needs pager, basically */
+} rfc1524_entry;
+
+rfc1524_entry *rfc1524_new_entry (void);
+void rfc1524_free_entry (rfc1524_entry **);
+int rfc1524_expand_command (BODY *, char *, char *, char *, int);
+int rfc1524_expand_filename (char *, char *, char *, size_t);
+int rfc1524_mailcap_lookup (BODY *, char *, rfc1524_entry *, int);
+int mutt_rename_file (char *, char *);
+int _mutt_rename_file (char *, char *, int);
+
+#endif /* _RFC1524_H */
diff --git a/rfc2047.c b/rfc2047.c
new file mode 100644 (file)
index 0000000..d27224e
--- /dev/null
+++ b/rfc2047.c
@@ -0,0 +1,778 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 2000-2001 Edmund Grimley Evans <edmundo@rano.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mime.h"
+#include "charset.h"
+#include "rfc2047.h"
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* If you are debugging this file, comment out the following line. */
+/*#define NDEBUG*/
+
+#ifdef NDEBUG
+#define assert(x)
+#else
+#include <assert.h>
+#endif
+
+#define ENCWORD_LEN_MAX 75
+#define ENCWORD_LEN_MIN 9 /* strlen ("=?.?.?.?=") */
+
+#define HSPACE(x) ((x) == '\0' || (x) == ' ' || (x) == '\t')
+
+#define CONTINUATION_BYTE(c) (((c) & 0xc0) == 0x80)
+
+extern char RFC822Specials[];
+
+typedef size_t (*encoder_t) (char *, ICONV_CONST char *, size_t,
+                             const char *);
+
+static size_t convert_string (ICONV_CONST char *f, size_t flen,
+                              const char *from, const char *to,
+                              char **t, size_t *tlen)
+{
+  iconv_t cd;
+  char *buf, *ob;
+  size_t obl, n;
+  int e;
+
+  cd = mutt_iconv_open (to, from, 0);
+  if (cd == (iconv_t)(-1))
+    return (size_t)(-1);
+  obl = 4 * flen + 1;
+  ob = buf = safe_malloc (obl);
+  n = iconv (cd, &f, &flen, &ob, &obl);
+  if (n == (size_t)(-1) || iconv (cd, 0, 0, &ob, &obl) == (size_t)(-1))
+  {
+    e = errno;
+    FREE (&buf);
+    iconv_close (cd);
+    errno = e;
+    return (size_t)(-1);
+  }
+  *ob = '\0';
+  
+  *tlen = ob - buf;
+
+  safe_realloc (&buf, ob - buf + 1);
+  *t = buf;
+  iconv_close (cd);
+
+  return n;
+}
+
+char *mutt_choose_charset (const char *fromcode, const char *charsets,
+                      char *u, size_t ulen, char **d, size_t *dlen)
+{
+  char canonical_buff[LONG_STRING];
+  char *e = 0, *tocode = 0;
+  size_t elen = 0, bestn = 0;
+  const char *p, *q;
+
+  for (p = charsets; p; p = q ? q + 1 : 0)
+  {
+    char *s, *t;
+    size_t slen, n;
+
+    q = strchr (p, ':');
+
+    n = q ? q - p : strlen (p);
+
+    if (!n ||
+        /* Assume that we never need more than 12 characters of
+           encoded-text to encode a single character. */
+        n > (ENCWORD_LEN_MAX - ENCWORD_LEN_MIN + 2 - 12))
+      continue;
+
+    t = safe_malloc (n + 1);
+    memcpy (t, p, n);
+    t[n] = '\0';
+
+    n = convert_string (u, ulen, fromcode, t, &s, &slen);
+    if (n == (size_t)(-1))
+      continue;
+
+    if (!tocode || n < bestn)
+    {
+      bestn = n;
+      FREE (&tocode);
+      tocode = t;
+      if (d)
+      {
+        FREE (&e);
+        e = s;
+      }
+      else
+        FREE (&s);
+      elen = slen;
+      if (!bestn)
+        break;
+    }
+    else
+    {
+      FREE (&t);
+      FREE (&s);
+    }
+  }
+  if (tocode)
+  {
+    if (d)
+      *d = e;
+    if (dlen)
+      *dlen = elen;
+    
+    mutt_canonical_charset (canonical_buff, sizeof (canonical_buff), tocode);
+    mutt_str_replace (&tocode, canonical_buff);
+  }
+  return tocode;
+}
+
+static size_t b_encoder (char *s, ICONV_CONST char *d, size_t dlen,
+                         const char *tocode)
+{
+  char *s0 = s;
+
+  memcpy (s, "=?", 2), s += 2;
+  memcpy (s, tocode, strlen (tocode)), s += strlen (tocode);
+  memcpy (s, "?B?", 3), s += 3;
+  for (;;)
+  {
+    if (!dlen)
+      break;
+    else if (dlen == 1)
+    {
+      *s++ = B64Chars[(*d >> 2) & 0x3f];
+      *s++ = B64Chars[(*d & 0x03) << 4];
+      *s++ = '=';
+      *s++ = '=';
+      break;
+    }
+    else if (dlen == 2)
+    {
+      *s++ = B64Chars[(*d >> 2) & 0x3f];
+      *s++ = B64Chars[((*d & 0x03) << 4) | ((d[1] >> 4) & 0x0f)];
+      *s++ = B64Chars[(d[1] & 0x0f) << 2];
+      *s++ = '=';
+      break;
+    }
+    else
+    {
+      *s++ = B64Chars[(*d >> 2) & 0x3f];
+      *s++ = B64Chars[((*d & 0x03) << 4) | ((d[1] >> 4) & 0x0f)];
+      *s++ = B64Chars[((d[1] & 0x0f) << 2) | ((d[2] >> 6) & 0x03)];
+      *s++ = B64Chars[d[2] & 0x3f];
+      d += 3, dlen -= 3;
+    }
+  }
+  memcpy (s, "?=", 2), s += 2;
+  return s - s0;
+}
+
+static size_t q_encoder (char *s, ICONV_CONST char *d, size_t dlen,
+                         const char *tocode)
+{
+  char hex[] = "0123456789ABCDEF";
+  char *s0 = s;
+
+  memcpy (s, "=?", 2), s += 2;
+  memcpy (s, tocode, strlen (tocode)), s += strlen (tocode);
+  memcpy (s, "?Q?", 3), s += 3;
+  while (dlen--)
+  {
+    unsigned char c = *d++;
+    if (c == ' ')
+      *s++ = '_';
+    else if (c >= 0x7f || c < 0x20 || c == '_' ||  strchr (MimeSpecials, c))
+    {
+      *s++ = '=';
+      *s++ = hex[(c & 0xf0) >> 4];
+      *s++ = hex[c & 0x0f];
+    }
+    else
+      *s++ = c;
+  }
+  memcpy (s, "?=", 2), s += 2;
+  return s - s0;
+}
+
+/*
+ * Return 0 if and set *encoder and *wlen if the data (d, dlen) could
+ * be converted to an encoded word of length *wlen using *encoder.
+ * Otherwise return an upper bound on the maximum length of the data
+ * which could be converted.
+ * The data is converted from fromcode (which must be stateless) to
+ * tocode, unless fromcode is 0, in which case the data is assumed to
+ * be already in tocode, which should be 8-bit and stateless.
+ */
+static size_t try_block (ICONV_CONST char *d, size_t dlen,
+                         const char *fromcode, const char *tocode,
+                         encoder_t *encoder, size_t *wlen)
+{
+  char buf1[ENCWORD_LEN_MAX - ENCWORD_LEN_MIN + 1];
+  iconv_t cd;
+  ICONV_CONST char *ib;
+  char *ob, *p;
+  size_t ibl, obl;
+  int count, len, len_b, len_q;
+
+  if (fromcode)
+  {
+    cd = mutt_iconv_open (tocode, fromcode, 0);
+    assert (cd != (iconv_t)(-1));
+    ib = d, ibl = dlen, ob = buf1, obl = sizeof (buf1) - strlen (tocode);
+    if (iconv (cd, &ib, &ibl, &ob, &obl) == (size_t)(-1) ||
+        iconv (cd, 0, 0, &ob, &obl) == (size_t)(-1))
+    {
+      assert (errno == E2BIG);
+      iconv_close (cd);
+      assert (ib > d);
+      return (ib - d == dlen) ? dlen : ib - d + 1;
+    }
+    iconv_close (cd);
+  }
+  else
+  {
+    if (dlen > sizeof (buf1) - strlen (tocode))
+      return sizeof (buf1) - strlen (tocode) + 1;
+    memcpy (buf1, d, dlen);
+    ob = buf1 + dlen;
+  }
+
+  count = 0;
+  for (p = buf1; p < ob; p++)
+  {
+    unsigned char c = *p;
+    assert (strchr (MimeSpecials, '?'));
+    if (c >= 0x7f || c < 0x20 || *p == '_' ||
+        (c != ' ' && strchr (MimeSpecials, *p)))
+      ++count;
+  }
+
+  len = ENCWORD_LEN_MIN - 2 + strlen (tocode);
+  len_b = len + (((ob - buf1) + 2) / 3) * 4;
+  len_q = len + (ob - buf1) + 2 * count;
+
+  /* Apparently RFC 1468 says to use B encoding for iso-2022-jp. */
+  if (!ascii_strcasecmp (tocode, "ISO-2022-JP"))
+    len_q = ENCWORD_LEN_MAX + 1;
+
+  if (len_b < len_q && len_b <= ENCWORD_LEN_MAX)
+  {
+    *encoder = b_encoder;
+    *wlen = len_b;
+    return 0;
+  }
+  else if (len_q <= ENCWORD_LEN_MAX)
+  {
+    *encoder = q_encoder;
+    *wlen = len_q;
+    return 0;
+  }
+  else
+    return dlen;
+}
+
+/*
+ * Encode the data (d, dlen) into s using the encoder.
+ * Return the length of the encoded word.
+ */
+static size_t encode_block (char *s, char *d, size_t dlen,
+                            const char *fromcode, const char *tocode,
+                            encoder_t encoder)
+{
+  char buf1[ENCWORD_LEN_MAX - ENCWORD_LEN_MIN + 1];
+  iconv_t cd;
+  ICONV_CONST char *ib;
+  char *ob;
+  size_t ibl, obl, n1, n2;
+
+  if (fromcode)
+  {
+    cd = mutt_iconv_open (tocode, fromcode, 0);
+    assert (cd != (iconv_t)(-1));
+    ib = d, ibl = dlen, ob = buf1, obl = sizeof (buf1) - strlen (tocode);
+    n1 = iconv (cd, &ib, &ibl, &ob, &obl);
+    n2 = iconv (cd, 0, 0, &ob, &obl);
+    assert (n1 != (size_t)(-1) && n2 != (size_t)(-1));
+    iconv_close (cd);
+    return (*encoder) (s, buf1, ob - buf1, tocode);
+  }
+  else
+    return (*encoder) (s, d, dlen, tocode);
+}
+
+/*
+ * Discover how much of the data (d, dlen) can be converted into
+ * a single encoded word. Return how much data can be converted,
+ * and set the length *wlen of the encoded word and *encoder.
+ * We start in column col, which limits the length of the word.
+ */
+static size_t choose_block (char *d, size_t dlen, int col,
+                            const char *fromcode, const char *tocode,
+                            encoder_t *encoder, size_t *wlen)
+{
+  size_t n, nn;
+  int utf8 = fromcode && !ascii_strcasecmp (fromcode, "UTF-8");
+
+  n = dlen;
+  for (;;)
+  {
+    assert (d + n > d);
+    nn = try_block (d, n, fromcode, tocode, encoder, wlen);
+    if (!nn && (col + *wlen <= ENCWORD_LEN_MAX + 1 || n <= 1))
+      break;
+    n = (nn ? nn : n) - 1;
+    assert (n > 0);
+    if (utf8)
+      while (n > 1 && CONTINUATION_BYTE(d[n]))
+        --n;
+  }
+  return n;
+}
+
+/*
+ * Place the result of RFC-2047-encoding (d, dlen) into the dynamically
+ * allocated buffer (e, elen). The input data is in charset fromcode
+ * and is converted into a charset chosen from charsets.
+ * Return 1 if the conversion to UTF-8 failed, 2 if conversion from UTF-8
+ * failed, otherwise 0. If conversion failed, fromcode is assumed to be
+ * compatible with us-ascii and the original data is used.
+ * The input data is assumed to be a single line starting at column col;
+ * if col is non-zero, the preceding character was a space.
+ */
+static int rfc2047_encode (ICONV_CONST char *d, size_t dlen, int col,
+                           const char *fromcode, const char *charsets,
+                           char **e, size_t *elen, char *specials)
+{
+  int ret = 0;
+  char *buf;
+  size_t bufpos, buflen;
+  char *u, *t0, *t1, *t;
+  char *s0, *s1;
+  size_t ulen, r, n, wlen;
+  encoder_t encoder;
+  char *tocode1 = 0;
+  const char *tocode;
+  char *icode = "UTF-8";
+
+  /* Try to convert to UTF-8. */
+  if (convert_string (d, dlen, fromcode, icode, &u, &ulen))
+  {
+    ret = 1; 
+    icode = 0;
+    u = safe_malloc ((ulen = dlen) + 1);
+    memcpy (u, d, dlen);
+    u[ulen] = 0;
+  }
+
+  /* Find earliest and latest things we must encode. */
+  s0 = s1 = t0 = t1 = 0;
+  for (t = u; t < u + ulen; t++)
+  {
+    if ((*t & 0x80) || 
+        (*t == '=' && t[1] == '?' && (t == u || HSPACE(*(t-1)))))
+    {
+      if (!t0) t0 = t;
+      t1 = t;
+    }
+    else if (specials && strchr (specials, *t))
+    {
+      if (!s0) s0 = t;
+      s1 = t;
+    }
+  }
+
+  /* If we have something to encode, include RFC822 specials */
+  if (t0 && s0 && s0 < t0)
+    t0 = s0;
+  if (t1 && s1 && s1 > t1)
+    t1 = s1;
+
+  if (!t0)
+  {
+    /* No encoding is required. */
+    *e = u;
+    *elen = ulen;
+    return ret;
+  }
+
+  /* Choose target charset. */
+  tocode = fromcode;
+  if (icode)
+  {
+    if ((tocode1 = mutt_choose_charset (icode, charsets, u, ulen, 0, 0)))
+      tocode = tocode1;
+    else
+      ret = 2, icode = 0;
+  }
+
+  /* Hack to avoid labelling 8-bit data as us-ascii. */
+  if (!icode && mutt_is_us_ascii (tocode))
+    tocode = "unknown-8bit";
+  
+  /* Adjust t0 for maximum length of line. */
+  t = u + (ENCWORD_LEN_MAX + 1) - col - ENCWORD_LEN_MIN;
+  if (t < u)  t = u;
+  if (t < t0) t0 = t;
+  
+
+  /* Adjust t0 until we can encode a character after a space. */
+  for (; t0 > u; t0--)
+  {
+    if (!HSPACE(*(t0-1)))
+      continue;
+    t = t0 + 1;
+    if (icode)
+      while (t < u + ulen && CONTINUATION_BYTE(*t))
+        ++t;
+    if (!try_block (t0, t - t0, icode, tocode, &encoder, &wlen) &&
+        col + (t0 - u) + wlen <= ENCWORD_LEN_MAX + 1)
+      break;
+  }
+
+  /* Adjust t1 until we can encode a character before a space. */
+  for (; t1 < u + ulen; t1++)
+  {
+    if (!HSPACE(*t1))
+      continue;
+    t = t1 - 1;
+    if (icode)
+      while (CONTINUATION_BYTE(*t))
+        --t;
+    if (!try_block (t, t1 - t, icode, tocode, &encoder, &wlen) &&
+        1 + wlen + (u + ulen - t1) <= ENCWORD_LEN_MAX + 1)
+      break;
+  }
+
+  /* We shall encode the region [t0,t1). */
+
+  /* Initialise the output buffer with the us-ascii prefix. */
+  buflen = 2 * ulen;
+  buf = safe_malloc (buflen);
+  bufpos = t0 - u;
+  memcpy (buf, u, t0 - u);
+
+  col += t0 - u;
+
+  t = t0;
+  for (;;)
+  {
+    /* Find how much we can encode. */
+    n = choose_block (t, t1 - t, col, icode, tocode, &encoder, &wlen);
+    if (n == t1 - t)
+    {
+      /* See if we can fit the us-ascii suffix, too. */
+      if (col + wlen + (u + ulen - t1) <= ENCWORD_LEN_MAX + 1)
+        break;
+      n = t1 - t - 1;
+      if (icode)
+        while (CONTINUATION_BYTE(t[n]))
+          --n;
+      assert (t + n >= t);
+      if (!n)
+      {
+        /* This should only happen in the really stupid case where the
+           only word that needs encoding is one character long, but
+           there is too much us-ascii stuff after it to use a single
+           encoded word. We add the next word to the encoded region
+           and try again. */
+        assert (t1 < u + ulen);
+        for (t1++; t1 < u + ulen && !HSPACE(*t1); t1++)
+          ;
+        continue;
+      }
+      n = choose_block (t, n, col, icode, tocode, &encoder, &wlen);
+    }
+
+    /* Add to output buffer. */
+#define LINEBREAK "\n\t"
+    if (bufpos + wlen + strlen (LINEBREAK) > buflen)
+    {
+      buflen = bufpos + wlen + strlen (LINEBREAK);
+      safe_realloc (&buf, buflen);
+    }
+    r = encode_block (buf + bufpos, t, n, icode, tocode, encoder);
+    assert (r == wlen);
+    bufpos += wlen;
+    memcpy (buf + bufpos, LINEBREAK, strlen (LINEBREAK));
+    bufpos += strlen (LINEBREAK);
+#undef LINEBREAK
+
+    col = 1;
+
+    t += n;
+  }
+
+  /* Add last encoded word and us-ascii suffix to buffer. */
+  buflen = bufpos + wlen + (u + ulen - t1);
+  safe_realloc (&buf, buflen + 1);
+  r = encode_block (buf + bufpos, t, t1 - t, icode, tocode, encoder);
+  assert (r == wlen);
+  bufpos += wlen;
+  memcpy (buf + bufpos, t1, u + ulen - t1);
+
+  FREE (&tocode1);
+  FREE (&u);
+
+  buf[buflen] = '\0';
+  
+  *e = buf;
+  *elen = buflen + 1;
+  return ret;
+}
+
+void _rfc2047_encode_string (char **pd, int encode_specials, int col)
+{
+  char *e;
+  size_t elen;
+  char *charsets;
+
+  if (!Charset || !*pd)
+    return;
+
+  charsets = SendCharset;
+  if (!charsets || !*charsets)
+    charsets = "UTF-8";
+
+  rfc2047_encode (*pd, strlen (*pd), col,
+                  Charset, charsets, &e, &elen,
+                  encode_specials ? RFC822Specials : NULL);
+
+  FREE (pd);
+  *pd = e;
+}
+
+void rfc2047_encode_adrlist (ADDRESS *addr, const char *tag)
+{
+  ADDRESS *ptr = addr;
+  int col = tag ? strlen (tag) + 2 : 32;
+  
+  while (ptr)
+  {
+    if (ptr->personal)
+      _rfc2047_encode_string (&ptr->personal, 1, col);
+#ifdef EXACT_ADDRESS
+    if (ptr->val)
+      _rfc2047_encode_string (&ptr->val, 1, col);
+#endif
+    ptr = ptr->next;
+  }
+}
+
+static int rfc2047_decode_word (char *d, const char *s, size_t len)
+{
+  const char *pp, *pp1;
+  char *pd, *d0;
+  const char *t, *t1;
+  int enc = 0, count = 0;
+  char *charset = NULL;
+
+  pd = d0 = safe_malloc (strlen (s));
+
+  for (pp = s; (pp1 = strchr (pp, '?')); pp = pp1 + 1)
+  {
+    count++;
+    switch (count)
+    {
+      case 2:
+        /* ignore language specification a la RFC 2231 */        
+        t = pp1;
+        if ((t1 = memchr (pp, '*', t - pp)))
+          t = t1;
+        charset = safe_malloc (t - pp + 1);
+        memcpy (charset, pp, t - pp);
+        charset[t-pp] = '\0';
+        break;
+      case 3:
+        if (toupper ((unsigned char) *pp) == 'Q')
+          enc = ENCQUOTEDPRINTABLE;
+        else if (toupper ((unsigned char) *pp) == 'B')
+          enc = ENCBASE64;
+        else
+        {
+          FREE (&charset);
+          FREE (&d0);
+          return (-1);
+        }
+        break;
+      case 4:
+        if (enc == ENCQUOTEDPRINTABLE)
+        {
+          for (; pp < pp1; pp++)
+          {
+            if (*pp == '_')
+              *pd++ = ' ';
+            else if (*pp == '=' &&
+                     (!(pp[1] & ~127) && hexval(pp[1]) != -1) &&
+                     (!(pp[2] & ~127) && hexval(pp[2]) != -1))
+            {
+              *pd++ = (hexval(pp[1]) << 4) | hexval(pp[2]);
+              pp += 2;
+            }
+            else
+              *pd++ = *pp;
+          }
+          *pd = 0;
+        }
+        else if (enc == ENCBASE64)
+        {
+          int c, b = 0, k = 0;
+
+          for (; pp < pp1; pp++)
+          {
+            if (*pp == '=')
+              break;
+            if ((*pp & ~127) || (c = base64val(*pp)) == -1)
+              continue;
+            if (k + 6 >= 8)
+            {
+              k -= 2;
+              *pd++ = b | (c >> k);
+              b = c << (8 - k);
+            }
+            else
+            {
+              b |= c << (k + 2);
+              k += 6;
+            }
+          }
+          *pd = 0;
+        }
+        break;
+    }
+  }
+  
+  if (charset)
+    mutt_convert_string (&d0, charset, Charset, M_ICONV_HOOK_FROM);
+  strfcpy (d, d0, len);
+  FREE (&charset);
+  FREE (&d0);
+  return (0);
+}
+
+/*
+ * Find the start and end of the first encoded word in the string.
+ * We use the grammar in section 2 of RFC 2047, but the "encoding"
+ * must be B or Q. Also, we don't require the encoded word to be
+ * separated by linear-white-space (section 5(1)).
+ */
+static const char *find_encoded_word (const char *s, const char **x)
+{
+  const char *p, *q;
+
+  q = s;
+  while ((p = strstr (q, "=?")))
+  {
+    for (q = p + 2;
+         0x20 < *q && *q < 0x7f && !strchr ("()<>@,;:\"/[]?.=", *q);
+         q++)
+      ;
+    if (q[0] != '?' || !strchr ("BbQq", q[1]) || q[2] != '?')
+      continue;
+    for (q = q + 3; 0x20 <= *q && *q < 0x7f && *q != '?'; q++)
+      ;
+    if (q[0] != '?' || q[1] != '=')
+    {
+      --q;
+      continue;
+    }
+
+    *x = q + 2;
+    return p;
+  }
+
+  return 0;
+}
+
+/* try to decode anything that looks like a valid RFC2047 encoded
+ * header field, ignoring RFC822 parsing rules
+ */
+void rfc2047_decode (char **pd)
+{
+  const char *p, *q;
+  size_t n;
+  int found_encoded = 0;
+  char *d0, *d;
+  const char *s = *pd;
+  size_t dlen;
+
+  if (!s || !*s)
+    return;
+
+  dlen = 4 * strlen (s); /* should be enough */
+  d = d0 = safe_malloc (dlen + 1);
+
+  while (*s && dlen > 0)
+  {
+    if (!(p = find_encoded_word (s, &q)))
+    {
+      /* no encoded words */
+      strncpy (d, s, dlen);
+      d += dlen;
+      break;
+    }
+
+    if (p != s)
+    {
+      n = (size_t) (p - s);
+      /* ignore spaces between encoded words */
+      if (!found_encoded || strspn (s, " \t\r\n") != n)
+      {
+        if (n > dlen)
+          n = dlen;
+        memcpy (d, s, n);
+        d += n;
+        dlen -= n;
+      }
+    }
+
+    rfc2047_decode_word (d, p, dlen);
+    found_encoded = 1;
+    s = q;
+    n = mutt_strlen (d);
+    dlen -= n;
+    d += n;
+  }
+  *d = 0;
+
+  FREE (pd);
+  *pd = d0;
+  mutt_str_adjust (pd);
+}
+
+void rfc2047_decode_adrlist (ADDRESS *a)
+{
+  while (a)
+  {
+    if (a->personal && strstr (a->personal, "=?") != NULL) {
+      rfc2047_decode (&a->personal);
+    }
+#ifdef EXACT_ADDRESS
+    if (a->val && strstr (a->val, "=?") != NULL)
+      rfc2047_decode (&a->val);
+#endif
+    a = a->next;
+  }
+}
diff --git a/rfc2047.h b/rfc2047.h
new file mode 100644 (file)
index 0000000..f6e0bbf
--- /dev/null
+++ b/rfc2047.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+char *mutt_choose_charset (const char *fromcode, const char *charsets,
+                     char *u, size_t ulen, char **d, size_t *dlen);
+
+void _rfc2047_encode_string (char **, int, int);
+void rfc2047_encode_adrlist (ADDRESS *, const char *);
+
+#define rfc2047_encode_string(a) _rfc2047_encode_string (a, 0, 32);
+
+void rfc2047_decode (char **);
+void rfc2047_decode_adrlist (ADDRESS *);
diff --git a/rfc2231.c b/rfc2231.c
new file mode 100644 (file)
index 0000000..3f45650
--- /dev/null
+++ b/rfc2231.c
@@ -0,0 +1,376 @@
+/*
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ *
+ *     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.
+ */
+
+/*
+ * Yet another MIME encoding for header data.  This time, it's
+ * parameters, specified in RFC 2231, and modeled after the
+ * encoding used in URLs.
+ * 
+ * Additionally, continuations and encoding are mixed in an, errrm,
+ * interesting manner.
+ *
+ */
+
+#include "mutt.h"
+#include "mime.h"
+#include "charset.h"
+#include "rfc2047.h"
+#include "rfc2231.h"
+
+#include <ctype.h>
+#include <string.h>
+#include <stdlib.h>
+
+struct rfc2231_parameter
+{
+  char *attribute;
+  char *value;
+  int  index;
+  int  encoded;
+  struct rfc2231_parameter 
+       *next;
+};
+
+static char *rfc2231_get_charset (char *, char *, size_t);
+static struct rfc2231_parameter *rfc2231_new_parameter (void);
+static void rfc2231_decode_one (char *, char *);
+static void rfc2231_free_parameter (struct rfc2231_parameter **);
+static void rfc2231_join_continuations (PARAMETER **, struct rfc2231_parameter *);
+static void rfc2231_list_insert (struct rfc2231_parameter **, struct rfc2231_parameter *);
+
+static void purge_empty_parameters (PARAMETER **headp)
+{
+  PARAMETER *p, *q, **last;
+  
+  for (last = headp, p = *headp; p; p = q)
+  {
+    q = p->next;
+    if (!p->attribute || !p->value)
+    {
+      *last = q;
+      p->next = NULL;
+      mutt_free_parameter (&p);
+    }
+    else
+      last = &p->next;
+  }
+}
+
+
+void rfc2231_decode_parameters (PARAMETER **headp)
+{
+  PARAMETER *head = NULL;
+  PARAMETER **last;
+  PARAMETER *p, *q;
+
+  struct rfc2231_parameter *conthead = NULL;
+  struct rfc2231_parameter *conttmp;
+
+  char *s, *t;
+  char charset[STRING];
+
+  int encoded;
+  int index;
+  short dirty = 0;     /* set to 1 when we may have created
+                        * empty parameters.
+                        */
+  
+  if (!headp) return;
+
+  purge_empty_parameters (headp);
+  
+  for (last = &head, p = *headp; p; p = q)
+  {
+    q = p->next;
+
+    if (!(s = strchr (p->attribute, '*')))
+    {
+
+      /* 
+       * Using RFC 2047 encoding in MIME parameters is explicitly
+       * forbidden by that document.  Nevertheless, it's being
+       * generated by some software, including certain Lotus Notes to 
+       * Internet Gateways.  So we actually decode it.
+       */
+
+      if (option (OPTRFC2047PARAMS) && p->value && strstr (p->value, "=?"))
+       rfc2047_decode (&p->value);
+
+      *last = p;
+      last = &p->next;
+      p->next = NULL;
+    }
+    else if (*(s + 1) == '\0')
+    {
+      *s = '\0';
+      
+      s = rfc2231_get_charset (p->value, charset, sizeof (charset));
+      rfc2231_decode_one (p->value, s);
+      mutt_convert_string (&p->value, charset, Charset, M_ICONV_HOOK_FROM);
+
+      *last = p;
+      last = &p->next;
+      p->next = NULL;
+      
+      dirty = 1;
+    }
+    else
+    {
+      *s = '\0'; s++; /* let s point to the first character of index. */
+      for (t = s; *t && isdigit ((unsigned char) *t); t++)
+       ;
+      encoded = (*t == '*');
+      *t = '\0';
+
+      index = atoi (s);
+
+      conttmp = rfc2231_new_parameter ();
+      conttmp->attribute = p->attribute;
+      conttmp->value = p->value;
+      conttmp->encoded = encoded;
+      conttmp->index = index;
+      
+      p->attribute = NULL;
+      p->value = NULL;
+      FREE (&p);
+
+      rfc2231_list_insert (&conthead, conttmp);
+    }
+  }
+
+  if (conthead)
+  {
+    rfc2231_join_continuations (last, conthead);
+    dirty = 1;
+  }
+  
+  *headp = head;
+  
+  if (dirty)
+    purge_empty_parameters (headp);
+}
+  
+static struct rfc2231_parameter *rfc2231_new_parameter (void)
+{
+  return safe_calloc (sizeof (struct rfc2231_parameter), 1);
+}
+
+static void rfc2231_free_parameter (struct rfc2231_parameter **p)
+{
+  if (*p)
+  {
+    FREE (&(*p)->attribute);
+    FREE (&(*p)->value);
+    FREE (p);
+  }
+}
+
+static char *rfc2231_get_charset (char *value, char *charset, size_t chslen)
+{
+  char *t, *u;
+  
+  if (!(t = strchr (value, '\'')))
+  {
+    charset[0] = '\0';
+    return value;
+  }
+  
+  *t = '\0';
+  strfcpy (charset, value, chslen);
+  
+  if ((u = strchr (t + 1, '\'')))
+    return u + 1;
+  else
+    return t + 1;
+}
+
+static void rfc2231_decode_one (char *dest, char *src)
+{
+  char *d;
+
+  for (d = dest; *src; src++)
+  {
+    if (*src == '%' &&
+        isxdigit ((unsigned char) *(src + 1)) &&
+        isxdigit ((unsigned char) *(src + 2)))
+    {
+      *d++ = (hexval (*(src + 1)) << 4) | (hexval (*(src + 2)));
+      src += 2;
+    }
+    else
+      *d++ = *src;
+  }
+  
+  *d = '\0';
+}
+
+/* insert parameter into an ordered list.
+ * 
+ * Primary sorting key: attribute
+ * Secondary sorting key: index
+ */
+
+static void rfc2231_list_insert (struct rfc2231_parameter **list,
+                                struct rfc2231_parameter *par)
+{
+  struct rfc2231_parameter **last = list;
+  struct rfc2231_parameter *p = *list, *q;
+  int c;
+  
+  while (p)
+  {
+    last = &p->next;
+    q = p; p = p->next;
+
+    c = strcmp (par->value, q->value);
+    if ((c > 0) || (c == 0 && par->index >= q->index))
+      break;
+  }
+  
+  par->next = p;
+  *last = par;
+}
+
+/* process continuation parameters */
+
+static void rfc2231_join_continuations (PARAMETER **head,
+                                       struct rfc2231_parameter *par)
+{
+  struct rfc2231_parameter *q;
+
+  char attribute[STRING];
+  char charset[STRING];
+  char *value = NULL;
+  char *valp;
+  int encoded;
+
+  size_t l, vl;
+  
+  while (par)
+  {
+    value = NULL; l = 0;
+    
+    strfcpy (attribute, par->attribute, sizeof (attribute));
+
+    if ((encoded = par->encoded))
+      valp = rfc2231_get_charset (par->value, charset, sizeof (charset));
+    else
+      valp = par->value;
+
+    do 
+    {
+      if (encoded && par->encoded)
+       rfc2231_decode_one (par->value, valp);
+      
+      vl = strlen (par->value);
+      
+      safe_realloc (&value, l + vl + 1);
+      strcpy (value + l, par->value);  /* __STRCPY_CHECKED__ */
+      l += vl;
+
+      q = par->next;
+      rfc2231_free_parameter (&par);
+      if ((par = q))
+       valp = par->value;
+    } while (par && !strcmp (par->attribute, attribute));
+    
+    if (value)
+    {
+      if (encoded)
+       mutt_convert_string (&value, charset, Charset, M_ICONV_HOOK_FROM);
+      *head = mutt_new_parameter ();
+      (*head)->attribute = safe_strdup (attribute);
+      (*head)->value = value;
+      head = &(*head)->next;
+    }
+  }
+}
+
+int rfc2231_encode_string (char **pd)
+{
+  int ext = 0, encode = 0;
+  char *charset, *s, *t, *e, *d = 0;
+  size_t slen, dlen = 0;
+
+  /* 
+   * A shortcut to detect pure 7bit data.
+   * 
+   * This should prevent the worst when character set handling
+   * is flawed.
+   */
+
+  for (s = *pd; *s; s++)
+    if (*s & 0x80)
+      break;
+  
+  if (!*s)
+    return 0;
+  
+  if (!Charset || !SendCharset ||
+      !(charset = mutt_choose_charset (Charset, SendCharset,
+                                 *pd, strlen (*pd), &d, &dlen)))
+  {
+    charset = safe_strdup (Charset ? Charset : "unknown-8bit");
+    d = *pd;
+    dlen = strlen (d);
+  }
+
+  if (!mutt_is_us_ascii (charset))
+    encode = 1;
+
+  for (s = d, slen = dlen; slen; s++, slen--)
+    if (*s < 0x20 || *s >= 0x7f)
+      encode = 1, ++ext;
+    else if (strchr (MimeSpecials, *s) || strchr ("*'%", *s))
+      ++ext;
+
+  if (encode)
+  {
+    e = safe_malloc (dlen + 2*ext + strlen (charset) + 3);
+    sprintf (e, "%s''", charset);      /* __SPRINTF_CHECKED__ */
+    t = e + strlen (e);
+    for (s = d, slen = dlen; slen; s++, slen--)
+      if (*s < 0x20 || *s >= 0x7f ||
+         strchr (MimeSpecials, *s) || strchr ("*'%", *s))
+      {
+       sprintf (t, "%%%02X", (unsigned char)*s);
+       t += 3;
+      }
+      else
+       *t++ = *s;
+    *t = '\0';
+
+    if (d != *pd)
+      FREE (&d);
+    FREE (pd);
+    *pd = e;
+  }
+  else if (d != *pd)
+  {
+    FREE (pd);
+    *pd = d;
+  }
+  
+  FREE (&charset);
+  
+  return encode;
+}
+
diff --git a/rfc2231.h b/rfc2231.h
new file mode 100644 (file)
index 0000000..ccf01cc
--- /dev/null
+++ b/rfc2231.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ *
+ *     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.
+ */
+
+void rfc2231_decode_parameters (PARAMETER **);
+int rfc2231_encode_string (char **);
+
diff --git a/rfc822.c b/rfc822.c
new file mode 100644 (file)
index 0000000..2732f52
--- /dev/null
+++ b/rfc822.c
@@ -0,0 +1,814 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+
+#ifndef TESTING
+#include "mutt.h"
+#else
+#define safe_strdup strdup
+#define safe_malloc malloc
+#define SKIPWS(x) while(isspace(*x))x++
+#define FREE(x) safe_free(x)
+#define ISSPACE isspace
+#define strfcpy(a,b,c) {if (c) {strncpy(a,b,c);a[c-1]=0;}}
+#define STRING 128
+#include "rfc822.h"
+#endif
+
+#include "mutt_idna.h"
+
+#define terminate_string(a, b, c) do { if ((b) < (c)) a[(b)] = 0; else \
+       a[(c)] = 0; } while (0)
+
+#define terminate_buffer(a, b) terminate_string(a, b, sizeof (a) - 1)
+
+
+const char RFC822Specials[] = "@.,:;<>[]\\\"()";
+#define is_special(x) strchr(RFC822Specials,x)
+
+int RFC822Error = 0;
+
+/* these must defined in the same order as the numerated errors given in rfc822.h */
+const char *RFC822Errors[] = {
+  "out of memory",
+  "mismatched parenthesis",
+  "mismatched quotes",
+  "bad route in <>",
+  "bad address in <>",
+  "bad address spec"
+};
+
+void rfc822_dequote_comment (char *s)
+{
+  char *w = s;
+
+  for (; *s; s++)
+  {
+    if (*s == '\\')
+    {
+      if (!*++s)
+       break; /* error? */
+      *w++ = *s;
+    }
+    else if (*s != '\"')
+    {
+      if (w != s)
+       *w = *s;
+      w++;
+    }
+  }
+  *w = 0;
+}
+
+void rfc822_free_address (ADDRESS **p)
+{
+  ADDRESS *t;
+
+  while (*p)
+  {
+    t = *p;
+    *p = (*p)->next;
+#ifdef EXACT_ADDRESS
+    FREE (&t->val);
+#endif
+    FREE (&t->personal);
+    FREE (&t->mailbox);
+    FREE (&t);
+  }
+}
+
+static const char *
+parse_comment (const char *s,
+              char *comment, size_t *commentlen, size_t commentmax)
+{
+  int level = 1;
+  
+  while (*s && level)
+  {
+    if (*s == '(')
+      level++;
+    else if (*s == ')')
+    {
+      if (--level == 0)
+      {
+       s++;
+       break;
+      }
+    }
+    else if (*s == '\\')
+    {
+      if (!*++s)
+       break;
+    }
+    if (*commentlen < commentmax)
+      comment[(*commentlen)++] = *s;
+    s++;
+  }
+  if (level)
+  {
+    RFC822Error = ERR_MISMATCH_PAREN;
+    return NULL;
+  }
+  return s;
+}
+
+static const char *
+parse_quote (const char *s, char *token, size_t *tokenlen, size_t tokenmax)
+{
+  if (*tokenlen < tokenmax)
+    token[(*tokenlen)++] = '"';
+  while (*s)
+  {
+    if (*tokenlen < tokenmax)
+      token[*tokenlen] = *s;
+    if (*s == '"')
+    {
+      (*tokenlen)++;
+      return (s + 1);
+    }
+    if (*s == '\\')
+    {
+      if (!*++s)
+       break;
+
+      if (*tokenlen < tokenmax)
+       token[*tokenlen] = *s;
+    }
+    (*tokenlen)++;
+    s++;
+  }
+  RFC822Error = ERR_MISMATCH_QUOTE;
+  return NULL;
+}
+
+static const char *
+next_token (const char *s, char *token, size_t *tokenlen, size_t tokenmax)
+{
+  if (*s == '(')
+    return (parse_comment (s + 1, token, tokenlen, tokenmax));
+  if (*s == '"')
+    return (parse_quote (s + 1, token, tokenlen, tokenmax));
+  if (is_special (*s))
+  {
+    if (*tokenlen < tokenmax)
+      token[(*tokenlen)++] = *s;
+    return (s + 1);
+  }
+  while (*s)
+  {
+    if (ISSPACE ((unsigned char) *s) || is_special (*s))
+      break;
+    if (*tokenlen < tokenmax)
+      token[(*tokenlen)++] = *s;
+    s++;
+  }
+  return s;
+}
+
+static const char *
+parse_mailboxdomain (const char *s, const char *nonspecial,
+                    char *mailbox, size_t *mailboxlen, size_t mailboxmax,
+                    char *comment, size_t *commentlen, size_t commentmax)
+{
+  const char *ps;
+
+  while (*s)
+  {
+    SKIPWS (s);
+    if (strchr (nonspecial, *s) == NULL && is_special (*s))
+      return s;
+
+    if (*s == '(')
+    {
+      if (*commentlen && *commentlen < commentmax)
+       comment[(*commentlen)++] = ' ';
+      ps = next_token (s, comment, commentlen, commentmax);
+    }
+    else
+      ps = next_token (s, mailbox, mailboxlen, mailboxmax);
+    if (!ps)
+      return NULL;
+    s = ps;
+  }
+
+  return s;
+}
+
+static const char *
+parse_address (const char *s,
+               char *token, size_t *tokenlen, size_t tokenmax,
+              char *comment, size_t *commentlen, size_t commentmax,
+              ADDRESS *addr)
+{
+  s = parse_mailboxdomain (s, ".\"(\\",
+                          token, tokenlen, tokenmax,
+                          comment, commentlen, commentmax);
+  if (!s)
+    return NULL;
+
+  if (*s == '@')
+  {
+    if (*tokenlen < tokenmax)
+      token[(*tokenlen)++] = '@';
+    s = parse_mailboxdomain (s + 1, ".([]\\",
+                            token, tokenlen, tokenmax,
+                            comment, commentlen, commentmax);
+    if (!s)
+      return NULL;
+  }
+
+  terminate_string (token, *tokenlen, tokenmax);
+  addr->mailbox = safe_strdup (token);
+
+  if (*commentlen && !addr->personal)
+  {
+    terminate_string (comment, *commentlen, commentmax);
+    addr->personal = safe_strdup (comment);
+  }
+
+  return s;
+}
+
+static const char *
+parse_route_addr (const char *s,
+                 char *comment, size_t *commentlen, size_t commentmax,
+                 ADDRESS *addr)
+{
+  char token[STRING];
+  size_t tokenlen = 0;
+
+  SKIPWS (s);
+
+  /* find the end of the route */
+  if (*s == '@')
+  {
+    while (s && *s == '@')
+    {
+      if (tokenlen < sizeof (token) - 1)
+       token[tokenlen++] = '@';
+      s = parse_mailboxdomain (s + 1, ",.\\[](", token,
+                              &tokenlen, sizeof (token) - 1,
+                              comment, commentlen, commentmax);
+    }
+    if (!s || *s != ':')
+    {
+      RFC822Error = ERR_BAD_ROUTE;
+      return NULL; /* invalid route */
+    }
+
+    if (tokenlen < sizeof (token) - 1)
+      token[tokenlen++] = ':';
+    s++;
+  }
+
+  if ((s = parse_address (s, token, &tokenlen, sizeof (token) - 1, comment, commentlen, commentmax, addr)) == NULL)
+    return NULL;
+
+  if (*s != '>')
+  {
+    RFC822Error = ERR_BAD_ROUTE_ADDR;
+    return NULL;
+  }
+
+  if (!addr->mailbox)
+    addr->mailbox = safe_strdup ("@");
+
+  s++;
+  return s;
+}
+
+static const char *
+parse_addr_spec (const char *s,
+                char *comment, size_t *commentlen, size_t commentmax,
+                ADDRESS *addr)
+{
+  char token[STRING];
+  size_t tokenlen = 0;
+
+  s = parse_address (s, token, &tokenlen, sizeof (token) - 1, comment, commentlen, commentmax, addr);
+  if (s && *s && *s != ',' && *s != ';')
+  {
+    RFC822Error = ERR_BAD_ADDR_SPEC;
+    return NULL;
+  }
+  return s;
+}
+
+static void
+add_addrspec (ADDRESS **top, ADDRESS **last, const char *phrase,
+             char *comment, size_t *commentlen, size_t commentmax)
+{
+  ADDRESS *cur = rfc822_new_address ();
+  
+  if (parse_addr_spec (phrase, comment, commentlen, commentmax, cur) == NULL)
+  {
+    rfc822_free_address (&cur);
+    return;
+  }
+
+  if (*last)
+    (*last)->next = cur;
+  else
+    *top = cur;
+  *last = cur;
+}
+
+ADDRESS *rfc822_parse_adrlist (ADDRESS *top, const char *s)
+{
+  int ws_pending;
+  const char *begin, *ps;
+  char comment[STRING], phrase[STRING];
+  size_t phraselen = 0, commentlen = 0;
+  ADDRESS *cur, *last = NULL;
+  
+  RFC822Error = 0;
+
+  last = top;
+  while (last && last->next)
+    last = last->next;
+
+  ws_pending = isspace ((unsigned char) *s);
+  
+  SKIPWS (s);
+  begin = s;
+  while (*s)
+  {
+    if (*s == ',')
+    {
+      if (phraselen)
+      {
+       terminate_buffer (phrase, phraselen);
+       add_addrspec (&top, &last, phrase, comment, &commentlen, sizeof (comment) - 1);
+      }
+      else if (commentlen && last && !last->personal)
+      {
+       terminate_buffer (comment, commentlen);
+       last->personal = safe_strdup (comment);
+      }
+
+#ifdef EXACT_ADDRESS
+      if (last && !last->val)
+       last->val = mutt_substrdup (begin, s);
+#endif
+      commentlen = 0;
+      phraselen = 0;
+      s++;
+      begin = s;
+      SKIPWS (begin);
+    }
+    else if (*s == '(')
+    {
+      if (commentlen && commentlen < sizeof (comment) - 1)
+       comment[commentlen++] = ' ';
+      if ((ps = next_token (s, comment, &commentlen, sizeof (comment) - 1)) == NULL)
+      {
+       rfc822_free_address (&top);
+       return NULL;
+      }
+      s = ps;
+    }
+    else if (*s == ':')
+    {
+      cur = rfc822_new_address ();
+      terminate_buffer (phrase, phraselen);
+      cur->mailbox = safe_strdup (phrase);
+      cur->group = 1;
+
+      if (last)
+       last->next = cur;
+      else
+       top = cur;
+      last = cur;
+
+#ifdef EXACT_ADDRESS
+      last->val = mutt_substrdup (begin, s);
+#endif
+
+      phraselen = 0;
+      commentlen = 0;
+      s++;
+      begin = s;
+      SKIPWS (begin);
+    }
+    else if (*s == ';')
+    {
+      if (phraselen)
+      {
+       terminate_buffer (phrase, phraselen);
+       add_addrspec (&top, &last, phrase, comment, &commentlen, sizeof (comment) - 1);
+      }
+      else if (commentlen && last && !last->personal)
+      {
+       terminate_buffer (comment, commentlen);
+       last->personal = safe_strdup (comment);
+      }
+#ifdef EXACT_ADDRESS
+      if (last && !last->val)
+       last->val = mutt_substrdup (begin, s);
+#endif
+
+      /* add group terminator */
+      cur = rfc822_new_address ();
+      if (last)
+      {
+       last->next = cur;
+       last = cur;
+      }
+
+      phraselen = 0;
+      commentlen = 0;
+      s++;
+      begin = s;
+      SKIPWS (begin);
+    }
+    else if (*s == '<')
+    {
+      terminate_buffer (phrase, phraselen);
+      cur = rfc822_new_address ();
+      if (phraselen)
+      {
+       if (cur->personal)
+         FREE (&cur->personal);
+       /* if we get something like "Michael R. Elkins" remove the quotes */
+       rfc822_dequote_comment (phrase);
+       cur->personal = safe_strdup (phrase);
+      }
+      if ((ps = parse_route_addr (s + 1, comment, &commentlen, sizeof (comment) - 1, cur)) == NULL)
+      {
+       rfc822_free_address (&top);
+       rfc822_free_address (&cur);
+       return NULL;
+      }
+
+      if (last)
+       last->next = cur;
+      else
+       top = cur;
+      last = cur;
+
+      phraselen = 0;
+      commentlen = 0;
+      s = ps;
+    }
+    else
+    {
+      if (phraselen && phraselen < sizeof (phrase) - 1 && ws_pending)
+       phrase[phraselen++] = ' ';
+      if ((ps = next_token (s, phrase, &phraselen, sizeof (phrase) - 1)) == NULL)
+      {
+       rfc822_free_address (&top);
+       return NULL;
+      }
+      s = ps;
+    }
+    ws_pending = isspace ((unsigned char) *s);
+    SKIPWS (s);
+  }
+  
+  if (phraselen)
+  {
+    terminate_buffer (phrase, phraselen);
+    terminate_buffer (comment, commentlen);
+    add_addrspec (&top, &last, phrase, comment, &commentlen, sizeof (comment) - 1);
+  }
+  else if (commentlen && last && !last->personal)
+  {
+    terminate_buffer (comment, commentlen);
+    last->personal = safe_strdup (comment);
+  }
+#ifdef EXACT_ADDRESS
+  if (last)
+    last->val = mutt_substrdup (begin, s);
+#endif
+
+  return top;
+}
+
+void rfc822_qualify (ADDRESS *addr, const char *host)
+{
+  char *p;
+
+  for (; addr; addr = addr->next)
+    if (!addr->group && addr->mailbox && strchr (addr->mailbox, '@') == NULL)
+    {
+      p = safe_malloc (mutt_strlen (addr->mailbox) + mutt_strlen (host) + 2);
+      sprintf (p, "%s@%s", addr->mailbox, host);       /* __SPRINTF_CHECKED__ */
+      FREE (&addr->mailbox);
+      addr->mailbox = p;
+    }
+}
+
+void
+rfc822_cat (char *buf, size_t buflen, const char *value, const char *specials)
+{
+  if (strpbrk (value, specials))
+  {
+    char tmp[256], *pc = tmp;
+    size_t tmplen = sizeof (tmp) - 3;
+
+    *pc++ = '"';
+    for (; *value && tmplen > 1; value++)
+    {
+      if (*value == '\\' || *value == '"')
+      {
+       *pc++ = '\\';
+       tmplen--;
+      }
+      *pc++ = *value;
+      tmplen--;
+    }
+    *pc++ = '"';
+    *pc = 0;
+    strfcpy (buf, tmp, buflen);
+  }
+  else
+    strfcpy (buf, value, buflen);
+}
+
+void rfc822_write_address_single (char *buf, size_t buflen, ADDRESS *addr,
+                                 int display)
+{
+  size_t len;
+  char *pbuf = buf;
+  char *pc;
+  
+  if (!addr)
+    return;
+
+  buflen--; /* save room for the terminal nul */
+
+#ifdef EXACT_ADDRESS
+  if (addr->val)
+  {
+    if (!buflen)
+      goto done;
+    strfcpy (pbuf, addr->val, buflen);
+    len = mutt_strlen (pbuf);
+    pbuf += len;
+    buflen -= len;
+    if (addr->group)
+    {
+      if (!buflen)
+       goto done;
+      *pbuf++ = ':';
+      buflen--;
+      *pbuf = 0;
+    }
+    return;
+  }
+#endif
+
+  if (addr->personal)
+  {
+    if (strpbrk (addr->personal, RFC822Specials))
+    {
+      if (!buflen)
+       goto done;
+      *pbuf++ = '"';
+      buflen--;
+      for (pc = addr->personal; *pc && buflen > 0; pc++)
+      {
+       if (*pc == '"' || *pc == '\\')
+       {
+         if (!buflen)
+           goto done;
+         *pbuf++ = '\\';
+         buflen--;
+       }
+       if (!buflen)
+         goto done;
+       *pbuf++ = *pc;
+       buflen--;
+      }
+      if (!buflen)
+       goto done;
+      *pbuf++ = '"';
+      buflen--;
+    }
+    else
+    {
+      if (!buflen)
+       goto done;
+      strfcpy (pbuf, addr->personal, buflen);
+      len = mutt_strlen (pbuf);
+      pbuf += len;
+      buflen -= len;
+    }
+
+    if (!buflen)
+      goto done;
+    *pbuf++ = ' ';
+    buflen--;
+  }
+
+  if (addr->personal || (addr->mailbox && *addr->mailbox == '@'))
+  {
+    if (!buflen)
+      goto done;
+    *pbuf++ = '<';
+    buflen--;
+  }
+
+  if (addr->mailbox)
+  {
+    if (!buflen)
+      goto done;
+    if (ascii_strcmp (addr->mailbox, "@") && !display)
+    {
+      strfcpy (pbuf, addr->mailbox, buflen);
+      len = mutt_strlen (pbuf);
+    }
+    else if (ascii_strcmp (addr->mailbox, "@") && display)
+    {
+      strfcpy (pbuf, mutt_addr_for_display (addr), buflen);
+      len = mutt_strlen (pbuf);
+    }
+    else
+    {
+      *pbuf = '\0';
+      len = 0;
+    }
+    pbuf += len;
+    buflen -= len;
+
+    if (addr->personal || (addr->mailbox && *addr->mailbox == '@'))
+    {
+      if (!buflen)
+       goto done;
+      *pbuf++ = '>';
+      buflen--;
+    }
+
+    if (addr->group)
+    {
+      if (!buflen)
+       goto done;
+      *pbuf++ = ':';
+      buflen--;
+      if (!buflen)
+       goto done;
+      *pbuf++ = ' ';
+      buflen--;
+    }
+  }
+  else
+  {
+    if (!buflen)
+      goto done;
+    *pbuf++ = ';';
+    buflen--;
+  }
+done:
+  /* no need to check for length here since we already save space at the
+     beginning of this routine */
+  *pbuf = 0;
+}
+
+/* note: it is assumed that `buf' is nul terminated! */
+void rfc822_write_address (char *buf, size_t buflen, ADDRESS *addr, int display)
+{
+  char *pbuf = buf;
+  size_t len = mutt_strlen (buf);
+  
+  buflen--; /* save room for the terminal nul */
+
+  if (len > 0)
+  {
+    if (len > buflen)
+      return; /* safety check for bogus arguments */
+
+    pbuf += len;
+    buflen -= len;
+    if (!buflen)
+      goto done;
+    *pbuf++ = ',';
+    buflen--;
+    if (!buflen)
+      goto done;
+    *pbuf++ = ' ';
+    buflen--;
+  }
+
+  for (; addr && buflen > 0; addr = addr->next)
+  {
+    /* use buflen+1 here because we already saved space for the trailing
+       nul char, and the subroutine can make use of it */
+    rfc822_write_address_single (pbuf, buflen + 1, addr, display);
+
+    /* this should be safe since we always have at least 1 char passed into
+       the above call, which means `pbuf' should always be nul terminated */
+    len = mutt_strlen (pbuf);
+    pbuf += len;
+    buflen -= len;
+
+    /* if there is another address, and its not a group mailbox name or
+       group terminator, add a comma to separate the addresses */
+    if (addr->next && addr->next->mailbox && !addr->group)
+    {
+      if (!buflen)
+       goto done;
+      *pbuf++ = ',';
+      buflen--;
+      if (!buflen)
+       goto done;
+      *pbuf++ = ' ';
+      buflen--;
+    }
+  }
+done:
+  *pbuf = 0;
+}
+
+/* this should be rfc822_cpy_adr */
+ADDRESS *rfc822_cpy_adr_real (ADDRESS *addr)
+{
+  ADDRESS *p = rfc822_new_address ();
+
+#ifdef EXACT_ADDRESS
+  p->val = safe_strdup (addr->val);
+#endif
+  p->personal = safe_strdup (addr->personal);
+  p->mailbox = safe_strdup (addr->mailbox);
+  p->group = addr->group;
+  return p;
+}
+
+/* this should be rfc822_cpy_adrlist */
+ADDRESS *rfc822_cpy_adr (ADDRESS *addr)
+{
+  ADDRESS *top = NULL, *last = NULL;
+  
+  for (; addr; addr = addr->next)
+  {
+    if (last)
+    {
+      last->next = rfc822_cpy_adr_real (addr);
+      last = last->next;
+    }
+    else
+      top = last = rfc822_cpy_adr_real (addr);
+  }
+  return top;
+}
+
+/* append list 'b' to list 'a' and return the last element in the new list */
+ADDRESS *rfc822_append (ADDRESS **a, ADDRESS *b)
+{
+  ADDRESS *tmp = *a;
+
+  while (tmp && tmp->next)
+    tmp = tmp->next;
+  if (!b)
+    return tmp;
+  if (tmp)
+    tmp->next = rfc822_cpy_adr (b);
+  else
+    tmp = *a = rfc822_cpy_adr (b);
+  while (tmp && tmp->next)
+    tmp = tmp->next;
+  return tmp;
+}
+
+#ifdef TESTING
+int safe_free (void **p)
+{
+  free(*p);            /* __MEM_CHECKED__ */
+  *p = 0;
+}
+
+int main (int argc, char **argv)
+{
+  ADDRESS *list;
+  char buf[256];
+# if 0
+  char *str = "michael, Michael Elkins <me@mutt.org>, testing a really complex address: this example <@contains.a.source.route,@with.multiple.hosts:address@example.com>;, lothar@of.the.hillpeople (lothar)";
+# else
+  char *str = "a b c ";
+# endif
+  
+  list = rfc822_parse_adrlist (NULL, str);
+  buf[0] = 0;
+  rfc822_write_address (buf, sizeof (buf), list);
+  rfc822_free_address (&list);
+  puts (buf);
+  exit (0);
+}
+#endif
diff --git a/rfc822.h b/rfc822.h
new file mode 100644 (file)
index 0000000..1e703e3
--- /dev/null
+++ b/rfc822.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#ifndef rfc822_h
+#define rfc822_h
+
+#include "config.h"
+
+/* possible values for RFC822Error */
+enum
+{
+  ERR_MEMORY = 1,
+  ERR_MISMATCH_PAREN,
+  ERR_MISMATCH_QUOTE,
+  ERR_BAD_ROUTE,
+  ERR_BAD_ROUTE_ADDR,
+  ERR_BAD_ADDR_SPEC
+};
+
+typedef struct address_t
+{
+#ifdef EXACT_ADDRESS
+  char *val;           /* value of address as parsed */
+#endif
+  char *personal;      /* real name of address */
+  char *mailbox;       /* mailbox and host address */
+  int group;           /* group mailbox? */
+  struct address_t *next;
+}
+ADDRESS;
+
+void rfc822_free_address (ADDRESS **);
+void rfc822_qualify (ADDRESS *, const char *);
+ADDRESS *rfc822_parse_adrlist (ADDRESS *, const char *s);
+ADDRESS *rfc822_cpy_adr (ADDRESS *addr);
+ADDRESS *rfc822_cpy_adr_real (ADDRESS *addr);
+ADDRESS *rfc822_append (ADDRESS **a, ADDRESS *b);
+void rfc822_write_address (char *, size_t, ADDRESS *, int);
+void rfc822_write_address_single (char *, size_t, ADDRESS *, int);
+void rfc822_free_address (ADDRESS **addr);
+void rfc822_cat (char *, size_t, const char *, const char *);
+
+extern int RFC822Error;
+extern const char *RFC822Errors[];
+
+#define rfc822_error(x) RFC822Errors[x]
+#define rfc822_new_address() calloc(1,sizeof(ADDRESS))
+
+#endif /* rfc822_h */
diff --git a/score.c b/score.c
new file mode 100644 (file)
index 0000000..a29e357
--- /dev/null
+++ b/score.c
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "sort.h"
+#include <string.h>
+#include <stdlib.h>
+
+typedef struct score_t
+{
+  char *str;
+  pattern_t *pat;
+  int val;
+  int exact;           /* if this rule matches, don't evaluate any more */
+  struct score_t *next;
+} SCORE;
+
+SCORE *Score = NULL;
+
+void mutt_check_rescore (CONTEXT *ctx)
+{
+  int i;
+
+  if (option (OPTNEEDRESCORE) && option (OPTSCORE))
+  {
+    if ((Sort & SORT_MASK) == SORT_SCORE ||
+       (SortAux & SORT_MASK) == SORT_SCORE)
+    {
+      set_option (OPTNEEDRESORT);
+      if ((Sort & SORT_MASK) == SORT_THREADS)
+       set_option (OPTSORTSUBTHREADS);
+    }
+
+    /* must redraw the index since the user might have %N in it */
+    set_option (OPTFORCEREDRAWINDEX);
+    set_option (OPTFORCEREDRAWPAGER);
+
+    for (i = 0; ctx && i < ctx->msgcount; i++)
+    {
+      mutt_score_message (ctx, ctx->hdrs[i], 1);
+      ctx->hdrs[i]->pair = 0;
+    }
+  }
+  unset_option (OPTNEEDRESCORE);
+}
+
+int mutt_parse_score (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  SCORE *ptr, *last;
+  char *pattern, *pc;
+  struct pattern_t *pat;
+
+  mutt_extract_token (buf, s, 0);
+  if (!MoreArgs (s))
+  {
+    strfcpy (err->data, _("score: too few arguments"), err->dsize);
+    return (-1);
+  }
+  pattern = buf->data;
+  memset (buf, 0, sizeof (BUFFER));
+  mutt_extract_token (buf, s, 0);
+  if (MoreArgs (s))
+  {
+    FREE (&pattern);
+    strfcpy (err->data, _("score: too many arguments"), err->dsize);
+    return (-1);
+  }
+
+  /* look for an existing entry and update the value, else add it to the end
+     of the list */
+  for (ptr = Score, last = NULL; ptr; last = ptr, ptr = ptr->next)
+    if (mutt_strcmp (pattern, ptr->str) == 0)
+      break;
+  if (!ptr)
+  {
+    if ((pat = mutt_pattern_comp (pattern, 0, err)) == NULL)
+    {
+      FREE (&pattern);
+      return (-1);
+    }
+    ptr = safe_calloc (1, sizeof (SCORE));
+    if (last)
+      last->next = ptr;
+    else
+      Score = ptr;
+    ptr->pat = pat;
+    ptr->str = pattern;
+  }
+  pc = buf->data;
+  if (*pc == '=')
+  {
+    ptr->exact = 1;
+    pc++;
+  }
+  ptr->val = atoi (pc);
+  set_option (OPTNEEDRESCORE);
+  return 0;
+}
+
+void mutt_score_message (CONTEXT *ctx, HEADER *hdr, int upd_ctx)
+{
+  SCORE *tmp;
+
+  hdr->score = 0; /* in case of re-scoring */
+  for (tmp = Score; tmp; tmp = tmp->next)
+  {
+    if (mutt_pattern_exec (tmp->pat, 0, NULL, hdr) > 0)
+    {
+      if (tmp->exact || tmp->val == 9999 || tmp->val == -9999)
+      {
+       hdr->score = tmp->val;
+       break;
+      }
+      hdr->score += tmp->val;
+    }
+  }
+  if (hdr->score < 0)
+    hdr->score = 0;
+  
+  if (hdr->score <= ScoreThresholdDelete)
+    _mutt_set_flag (ctx, hdr, M_DELETE, 1, upd_ctx);
+  if (hdr->score <= ScoreThresholdRead)
+    _mutt_set_flag (ctx, hdr, M_READ, 1, upd_ctx);
+  if (hdr->score >= ScoreThresholdFlag)
+    _mutt_set_flag (ctx, hdr, M_FLAG, 1, upd_ctx);
+}
+
+int mutt_parse_unscore (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+{
+  SCORE *tmp, *last = NULL;
+
+  while (MoreArgs (s))
+  {
+    mutt_extract_token (buf, s, 0);
+    if (!mutt_strcmp ("*", buf->data))
+    {
+      for (tmp = Score; tmp; )
+      {
+       last = tmp;
+       tmp = tmp->next;
+       mutt_pattern_free (&last->pat);
+       FREE (&last);
+      }
+      Score = NULL;
+    }
+    else
+    {
+      for (tmp = Score; tmp; last = tmp, tmp = tmp->next)
+      {
+       if (!mutt_strcmp (buf->data, tmp->str))
+       {
+         if (last)
+           last->next = tmp->next;
+         else
+           Score = tmp->next;
+         mutt_pattern_free (&tmp->pat);
+         FREE (&tmp);
+         /* there should only be one score per pattern, so we can stop here */
+         break;
+       }
+      }
+    }
+  }
+  set_option (OPTNEEDRESCORE);
+  return 0;
+}
diff --git a/send.c b/send.c
new file mode 100644 (file)
index 0000000..2b42915
--- /dev/null
+++ b/send.c
@@ -0,0 +1,1869 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "rfc2047.h"
+#include "keymap.h"
+#include "mime.h"
+#include "mailbox.h"
+#include "copy.h"
+#include "mx.h"
+#include "mutt_crypt.h"
+#include "mutt_idna.h"
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <dirent.h>
+#include <time.h>
+#include <sys/types.h>
+#include <utime.h>
+
+#ifdef USE_NNTP
+#include "nntp.h"
+#endif
+
+#ifdef MIXMASTER
+#include "remailer.h"
+#endif
+
+
+static void append_signature (FILE *f)
+{
+  FILE *tmpfp;
+  pid_t thepid;
+
+  if (Signature && (tmpfp = mutt_open_read (Signature, &thepid)))
+  {
+    if (option (OPTSIGDASHES))
+      fputs ("\n-- \n", f);
+    mutt_copy_stream (tmpfp, f);
+    fclose (tmpfp);
+    if (thepid != -1)
+      mutt_wait_filter (thepid);
+  }
+}
+
+/* compare two e-mail addresses and return 1 if they are equivalent */
+static int mutt_addrcmp (ADDRESS *a, ADDRESS *b)
+{
+  if (!a->mailbox || !b->mailbox)
+    return 0;
+  if (ascii_strcasecmp (a->mailbox, b->mailbox))
+    return 0;
+  return 1;
+}
+
+/* search an e-mail address in a list */
+static int mutt_addrsrc (ADDRESS *a, ADDRESS *lst)
+{
+  for (; lst; lst = lst->next)
+  {
+    if (mutt_addrcmp (a, lst))
+      return (1);
+  }
+  return (0);
+}
+
+/* removes addresses from "b" which are contained in "a" */
+static ADDRESS *mutt_remove_xrefs (ADDRESS *a, ADDRESS *b)
+{
+  ADDRESS *top, *p, *prev = NULL;
+
+  top = b;
+  while (b)
+  {
+    for (p = a; p; p = p->next)
+    {
+      if (mutt_addrcmp (p, b))
+       break;
+    }
+    if (p)
+    {
+      if (prev)
+      {
+       prev->next = b->next;
+       b->next = NULL;
+       rfc822_free_address (&b);
+       b = prev;
+      }
+      else
+      {
+       top = top->next;
+       b->next = NULL;
+       rfc822_free_address (&b);
+       b = top;
+      }
+    }
+    else
+    {
+      prev = b;
+      b = b->next;
+    }
+  }
+  return top;
+}
+
+/* remove any address which matches the current user.  if `leave_only' is
+ * nonzero, don't remove the user's address if it is the only one in the list
+ */
+static ADDRESS *remove_user (ADDRESS *a, int leave_only)
+{
+  ADDRESS *top = NULL, *last = NULL;
+
+  while (a)
+  {
+    if (!mutt_addr_is_user (a))
+    {
+      if (top)
+      {
+        last->next = a;
+        last = last->next;
+      }
+      else
+        last = top = a;
+      a = a->next;
+      last->next = NULL;
+    }
+    else
+    {
+      ADDRESS *tmp = a;
+      
+      a = a->next;
+      if (!leave_only || a || last)
+      {
+       tmp->next = NULL;
+       rfc822_free_address (&tmp);
+      }
+      else
+       last = top = tmp;
+    }
+  }
+  return top;
+}
+
+static ADDRESS *find_mailing_lists (ADDRESS *t, ADDRESS *c)
+{
+  ADDRESS *top = NULL, *ptr = NULL;
+
+  for (; t || c; t = c, c = NULL)
+  {
+    for (; t; t = t->next)
+    {
+      if (mutt_is_mail_list (t) && !t->group)
+      {
+       if (top)
+       {
+         ptr->next = rfc822_cpy_adr_real (t);
+         ptr = ptr->next;
+       }
+       else
+         ptr = top = rfc822_cpy_adr_real (t);
+      }
+    }
+  }
+  return top;
+}
+
+static int edit_address (ADDRESS **a, /* const */ char *field)
+{
+  char buf[HUGE_STRING];
+  char *err = NULL;
+  int idna_ok = 0;
+  
+  do
+  {
+    buf[0] = 0;
+    mutt_addrlist_to_local (*a);
+    rfc822_write_address (buf, sizeof (buf), *a, 0);
+    if (mutt_get_field (field, buf, sizeof (buf), M_ALIAS) != 0)
+      return (-1);
+    rfc822_free_address (a);
+    *a = mutt_expand_aliases (mutt_parse_adrlist (NULL, buf));
+    if ((idna_ok = mutt_addrlist_to_idna (*a, &err)) != 0)
+    {
+      mutt_error (_("Error: '%s' is a bad IDN."), err);
+      mutt_refresh ();
+      mutt_sleep (2);
+      FREE (&err);
+    }
+  } 
+  while (idna_ok != 0);
+  return 0;
+}
+
+static int edit_envelope (ENVELOPE *en, int flags)
+{
+  char buf[HUGE_STRING];
+  LIST *uh = UserHeader;
+
+#ifdef USE_NNTP
+  if (option (OPTNEWSSEND))
+  {
+    if (en->newsgroups)
+      strfcpy (buf, en->newsgroups, sizeof (buf));
+    else
+      buf[0] = 0;
+    if (mutt_get_field ("Newsgroups: ", buf, sizeof (buf), 0) != 0)
+      return (-1);
+    FREE (&en->newsgroups);
+    en->newsgroups = safe_strdup (buf);
+
+    if (en->followup_to)
+      strfcpy (buf, en->followup_to, sizeof (buf));
+    else
+      buf[0] = 0;
+    if (option (OPTASKFOLLOWUP) && mutt_get_field ("Followup-To: ", buf, sizeof (buf), 0) != 0)
+      return (-1);
+    FREE (&en->followup_to);
+    en->followup_to = safe_strdup (buf);
+
+    if (en->x_comment_to)
+      strfcpy (buf, en->x_comment_to, sizeof (buf));
+    else
+      buf[0] = 0;
+    if (option (OPTXCOMMENTTO) && option (OPTASKXCOMMENTTO) && mutt_get_field ("X-Comment-To: ", buf, sizeof (buf), 0) != 0)
+      return (-1);
+    FREE (&en->x_comment_to);
+    en->x_comment_to = safe_strdup (buf);
+  }
+  else
+#endif
+  {
+    if (edit_address (&en->to, "To: ") == -1 || en->to == NULL)
+      return (-1);
+    if (option (OPTASKCC) && edit_address (&en->cc, "Cc: ") == -1)
+      return (-1);
+    if (option (OPTASKBCC) && edit_address (&en->bcc, "Bcc: ") == -1)
+      return (-1);
+  }
+
+  if (en->subject)
+  {
+    if (option (OPTFASTREPLY))
+      return (0);
+    else
+      strfcpy (buf, en->subject, sizeof (buf));
+  }
+  else
+  {
+    char *p;
+
+    buf[0] = 0;
+    for (; uh; uh = uh->next)
+    {
+      if (ascii_strncasecmp ("subject:", uh->data, 8) == 0)
+      {
+       p = uh->data + 8;
+       SKIPWS (p);
+       strncpy (buf, p, sizeof (buf));
+      }
+    }
+  }
+  
+  if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) != 0 ||
+      (!buf[0] && query_quadoption (OPT_SUBJECT, _("No subject, abort?")) != M_NO))
+  {
+    mutt_message _("No subject, aborting.");
+    return (-1);
+  }
+  mutt_str_replace (&en->subject, buf);
+
+  return 0;
+}
+
+#ifdef USE_NNTP
+char *nntp_get_header (const char *s)
+{
+  SKIPWS (s);
+  return safe_strdup (s);
+}
+#endif
+
+static void process_user_recips (ENVELOPE *env)
+{
+  LIST *uh = UserHeader;
+
+  for (; uh; uh = uh->next)
+  {
+    if (ascii_strncasecmp ("to:", uh->data, 3) == 0)
+      env->to = rfc822_parse_adrlist (env->to, uh->data + 3);
+    else if (ascii_strncasecmp ("cc:", uh->data, 3) == 0)
+      env->cc = rfc822_parse_adrlist (env->cc, uh->data + 3);
+    else if (ascii_strncasecmp ("bcc:", uh->data, 4) == 0)
+      env->bcc = rfc822_parse_adrlist (env->bcc, uh->data + 4);
+#ifdef USE_NNTP
+    else if (ascii_strncasecmp ("newsgroups:", uh->data, 11) == 0)
+      env->newsgroups = nntp_get_header (uh->data + 11);
+    else if (ascii_strncasecmp ("followup-to:", uh->data, 12) == 0)
+      env->followup_to = nntp_get_header (uh->data + 12);
+    else if (ascii_strncasecmp ("x-comment-to:", uh->data, 13) == 0)
+      env->x_comment_to = nntp_get_header (uh->data + 13);
+#endif
+  }
+}
+
+static void process_user_header (ENVELOPE *env)
+{
+  LIST *uh = UserHeader;
+  LIST *last = env->userhdrs;
+
+  if (last)
+    while (last->next)
+      last = last->next;
+
+  for (; uh; uh = uh->next)
+  {
+    if (ascii_strncasecmp ("from:", uh->data, 5) == 0)
+    {
+      /* User has specified a default From: address.  Remove default address */
+      rfc822_free_address (&env->from);
+      env->from = rfc822_parse_adrlist (env->from, uh->data + 5);
+    }
+    else if (ascii_strncasecmp ("reply-to:", uh->data, 9) == 0)
+    {
+      rfc822_free_address (&env->reply_to);
+      env->reply_to = rfc822_parse_adrlist (env->reply_to, uh->data + 9);
+    }
+    else if (ascii_strncasecmp ("message-id:", uh->data, 11) == 0)
+      mutt_str_replace (&env->message_id, uh->data + 11);
+    else if (ascii_strncasecmp ("to:", uh->data, 3) != 0 &&
+            ascii_strncasecmp ("cc:", uh->data, 3) != 0 &&
+            ascii_strncasecmp ("bcc:", uh->data, 4) != 0 &&
+#ifdef USE_NNTP
+            ascii_strncasecmp ("newsgroups:", uh->data, 11) != 0 &&
+            ascii_strncasecmp ("followup-to:", uh->data, 12) != 0 &&
+            ascii_strncasecmp ("x-comment-to:", uh->data, 13) != 0 &&
+#endif
+            ascii_strncasecmp ("supersedes:", uh->data, 11) != 0 &&
+            ascii_strncasecmp ("subject:", uh->data, 8) != 0)
+    {
+      if (last)
+      {
+       last->next = mutt_new_list ();
+       last = last->next;
+      }
+      else
+       last = env->userhdrs = mutt_new_list ();
+      last->data = safe_strdup (uh->data);
+    }
+  }
+}
+
+LIST *mutt_copy_list (LIST *p)
+{
+  LIST *t, *r=NULL, *l=NULL;
+
+  for (; p; p = p->next)
+  {
+    t = (LIST *) safe_malloc (sizeof (LIST));
+    t->data = safe_strdup (p->data);
+    t->next = NULL;
+    if (l)
+    {
+      r->next = t;
+      r = r->next;
+    }
+    else
+      l = r = t;
+  }
+  return (l);
+}
+
+void mutt_forward_intro (FILE *fp, HEADER *cur)
+{
+  char buffer[STRING];
+  
+  fputs ("----- Forwarded message from ", fp);
+  buffer[0] = 0;
+  rfc822_write_address (buffer, sizeof (buffer), cur->env->from, 1);
+  fputs (buffer, fp);
+  fputs (" -----\n\n", fp);
+}
+
+void mutt_forward_trailer (FILE *fp)
+{
+  fputs ("\n----- End forwarded message -----\n", fp);
+}
+
+
+static int include_forward (CONTEXT *ctx, HEADER *cur, FILE *out)
+{
+  int chflags = CH_DECODE, cmflags = 0;
+  
+  mutt_parse_mime_message (ctx, cur);
+  mutt_message_hook (ctx, cur, M_MESSAGEHOOK);
+
+  if (WithCrypto && (cur->security & ENCRYPT) && option (OPTFORWDECODE))
+  {
+    /* make sure we have the user's passphrase before proceeding... */
+    crypt_valid_passphrase (cur->security);
+  }
+
+  mutt_forward_intro (out, cur);
+
+  if (option (OPTFORWDECODE))
+  {
+    cmflags |= M_CM_DECODE | M_CM_CHARCONV;
+    if (option (OPTWEED))
+    {
+      chflags |= CH_WEED | CH_REORDER;
+      cmflags |= M_CM_WEED;
+    }
+  }
+  if (option (OPTFORWQUOTE))
+    cmflags |= M_CM_PREFIX;
+
+  mutt_copy_message (out, ctx, cur, cmflags, chflags);
+  mutt_forward_trailer (out);
+  return 0;
+}
+
+void mutt_make_attribution (CONTEXT *ctx, HEADER *cur, FILE *out)
+{
+  char buffer[STRING];
+  if (Attribution)
+  {
+    mutt_make_string (buffer, sizeof (buffer), Attribution, ctx, cur);
+    fputs (buffer, out);
+    fputc ('\n', out);
+  }
+}
+
+void mutt_make_post_indent (CONTEXT *ctx, HEADER *cur, FILE *out)
+{
+  char buffer[STRING];
+  if (PostIndentString)
+  {
+    mutt_make_string (buffer, sizeof (buffer), PostIndentString, ctx, cur);
+    fputs (buffer, out);
+    fputc ('\n', out);
+  }
+}
+
+static int include_reply (CONTEXT *ctx, HEADER *cur, FILE *out)
+{
+  int cmflags = M_CM_PREFIX | M_CM_DECODE | M_CM_CHARCONV;
+  int chflags = CH_DECODE;
+
+  if (WithCrypto && (cur->security & ENCRYPT))
+  {
+    /* make sure we have the user's passphrase before proceeding... */
+    crypt_valid_passphrase (cur->security);
+  }
+
+  mutt_parse_mime_message (ctx, cur);
+  mutt_message_hook (ctx, cur, M_MESSAGEHOOK);
+  
+  mutt_make_attribution (ctx, cur, out);
+  
+  if (!option (OPTHEADER))
+    cmflags |= M_CM_NOHEADER;
+  if (option (OPTWEED))
+  {
+    chflags |= CH_WEED | CH_REORDER;
+    cmflags |= M_CM_WEED;
+  }
+
+  mutt_copy_message (out, ctx, cur, cmflags, chflags);
+
+  mutt_make_post_indent (ctx, cur, out);
+  
+  return 0;
+}
+
+static int default_to (ADDRESS **to, ENVELOPE *env, int flags, int hmfupto)
+{
+  char prompt[STRING];
+  ADDRESS *tmp;
+
+  if (flags && env->mail_followup_to && hmfupto == M_YES) 
+  {
+    rfc822_append (to, env->mail_followup_to);
+    return 0;
+  }
+
+  /* Exit now if we're setting up the default Cc list for list-reply
+   * (only set if Mail-Followup-To is present and honoured).
+   */
+  if (flags & SENDLISTREPLY)
+    return 0;
+
+  /* If this message came from a mailing list, ask the user if he really
+   * intended to reply to the author only.
+   */
+  if (!(flags & SENDGROUPREPLY) && mutt_is_list_cc (0, env->to, env->cc)) {
+    switch (query_quadoption (OPT_LISTREPLY,
+            _("Message came from a mailing list. Reply to author only?")))
+    {
+    case M_NO:
+      tmp = find_mailing_lists (env->to, env->cc);
+      rfc822_append (to, tmp);
+      rfc822_free_address (&tmp);
+      return 0;
+    case -1:
+      return -1; /* abort */
+    }
+  }
+
+  if (!option(OPTREPLYSELF) && mutt_addr_is_user (env->from))
+  {
+    /* mail is from the user, assume replying to recipients */
+    rfc822_append (to, env->to);
+  }
+  else if (env->reply_to)
+  {
+    if ((mutt_addrcmp (env->from, env->reply_to) && !env->reply_to->next) || 
+       (option (OPTIGNORELISTREPLYTO) &&
+       mutt_is_mail_list (env->reply_to) &&
+       (mutt_addrsrc (env->reply_to, env->to) ||
+       mutt_addrsrc (env->reply_to, env->cc))))
+    {
+      /* If the Reply-To: address is a mailing list, assume that it was
+       * put there by the mailing list, and use the From: address
+       * 
+       * We also take the from header if our correspondant has a reply-to
+       * header which is identical to the electronic mail address given
+       * in his From header.
+       * 
+       */
+      rfc822_append (to, env->from);
+    }
+    else if (!(mutt_addrcmp (env->from, env->reply_to) && 
+              !env->reply_to->next) &&
+            quadoption (OPT_REPLYTO) != M_YES)
+    {
+      /* There are quite a few mailing lists which set the Reply-To:
+       * header field to the list address, which makes it quite impossible
+       * to send a message to only the sender of the message.  This
+       * provides a way to do that.
+       */
+      snprintf (prompt, sizeof (prompt), _("Reply to %s%s?"),
+               env->reply_to->mailbox, 
+               env->reply_to->next?",...":"");
+      switch (query_quadoption (OPT_REPLYTO, prompt))
+      {
+      case M_YES:
+       rfc822_append (to, env->reply_to);
+       break;
+
+      case M_NO:
+       rfc822_append (to, env->from);
+       break;
+
+      default:
+       return (-1); /* abort */
+      }
+    }
+    else
+      rfc822_append (to, env->reply_to);
+  }
+  else
+    rfc822_append (to, env->from);
+
+  return (0);
+}
+
+int mutt_fetch_recips (ENVELOPE *out, ENVELOPE *in, int flags)
+{
+  char prompt[STRING];
+  ADDRESS *tmp;
+  int hmfupto = -1;
+
+  if ((flags & (SENDLISTREPLY|SENDGROUPREPLY)) && in->mail_followup_to)
+  {
+    snprintf (prompt, sizeof (prompt), _("Follow-up to %s%s?"),
+             in->mail_followup_to->mailbox,
+             in->mail_followup_to->next ? ",..." : "");
+
+    if ((hmfupto = query_quadoption (OPT_MFUPTO, prompt)) == -1)
+      return -1;
+  }
+
+  if (flags & SENDLISTREPLY)
+  {
+    tmp = find_mailing_lists (in->to, in->cc);
+    rfc822_append (&out->to, tmp);
+    rfc822_free_address (&tmp);
+
+    if (in->mail_followup_to && hmfupto == M_YES &&
+        default_to (&out->cc, in, flags & SENDLISTREPLY, hmfupto) == -1)
+      return (-1); /* abort */
+  }
+  else
+  {
+    if (default_to (&out->to, in, flags & SENDGROUPREPLY, hmfupto) == -1)
+      return (-1); /* abort */
+
+    if ((flags & SENDGROUPREPLY) && (!in->mail_followup_to || hmfupto != M_YES))
+    {
+      /* if(!mutt_addr_is_user(in->to)) */
+      rfc822_append (&out->cc, in->to);
+      rfc822_append (&out->cc, in->cc);
+    }
+  }
+  return 0;
+}
+
+LIST *mutt_make_references(ENVELOPE *e)
+{
+  LIST *t = NULL, *l = NULL;
+
+  if (e->references)
+    l = mutt_copy_list (e->references);
+  else
+    l = mutt_copy_list (e->in_reply_to);
+  
+  if (e->message_id)
+  {
+    t = mutt_new_list();
+    t->data = safe_strdup(e->message_id);
+    t->next = l;
+    l = t;
+  }
+  
+  return l;
+}
+
+void mutt_fix_reply_recipients (ENVELOPE *env)
+{
+  mutt_expand_aliases_env (env);
+
+  if (! option (OPTMETOO))
+  {
+    /* the order is important here.  do the CC: first so that if the
+     * the user is the only recipient, it ends up on the TO: field
+     */
+    env->cc = remove_user (env->cc, (env->to == NULL));
+    env->to = remove_user (env->to, (env->cc == NULL));
+  }
+  
+  /* the CC field can get cluttered, especially with lists */
+  env->to = mutt_remove_duplicates (env->to);
+  env->cc = mutt_remove_duplicates (env->cc);
+  env->cc = mutt_remove_xrefs (env->to, env->cc);
+}
+
+void mutt_make_forward_subject (ENVELOPE *env, CONTEXT *ctx, HEADER *cur)
+{
+  char buffer[STRING];
+
+  /* set the default subject for the message. */
+  mutt_make_string (buffer, sizeof (buffer), NONULL(ForwFmt), ctx, cur);
+  env->subject = safe_strdup (buffer);
+}
+
+void mutt_make_misc_reply_headers (ENVELOPE *env, CONTEXT *ctx,
+                                   HEADER *cur, ENVELOPE *curenv)
+{
+  if (curenv->real_subj)
+  {
+    env->subject = safe_malloc (mutt_strlen (curenv->real_subj) + 5);
+    sprintf (env->subject, "Re: %s", curenv->real_subj);       /* __SPRINTF_CHECKED__ */
+  }
+  else
+    env->subject = safe_strdup ("Re: your mail");
+  
+#ifdef USE_NNTP
+  if (option (OPTNEWSSEND) && option (OPTXCOMMENTTO) && curenv->from)
+    env->x_comment_to = safe_strdup (mutt_get_name (curenv->from));
+#endif
+}
+
+void mutt_add_to_reference_headers (ENVELOPE *env, ENVELOPE *curenv, LIST ***pp, LIST ***qq)
+{
+  LIST **p = NULL, **q = NULL;
+
+  if (pp) p = *pp;
+  if (qq) q = *qq;
+  
+  if (!p) p = &env->references;
+  if (!q) q = &env->in_reply_to;
+  
+  while (*p) p = &(*p)->next;
+  while (*q) q = &(*q)->next;
+  
+  *p = mutt_make_references (curenv);
+  
+  if (curenv->message_id)
+  {
+    *q = mutt_new_list();
+    (*q)->data = safe_strdup (curenv->message_id);
+  }
+  
+  if (pp) *pp = p;
+  if (qq) *qq = q;
+  
+}
+
+static void 
+mutt_make_reference_headers (ENVELOPE *curenv, ENVELOPE *env, CONTEXT *ctx)
+{
+  env->references = NULL;
+  env->in_reply_to = NULL;
+  
+  if (!curenv)
+  {
+    HEADER *h;
+    LIST **p = NULL, **q = NULL;
+    int i;
+    
+    for(i = 0; i < ctx->vcount; i++)
+    {
+      h = ctx->hdrs[ctx->v2r[i]];
+      if (h->tagged)
+       mutt_add_to_reference_headers (env, h->env, &p, &q);
+    }
+  }
+  else
+    mutt_add_to_reference_headers (env, curenv, NULL, NULL);
+}
+
+static int
+envelope_defaults (ENVELOPE *env, CONTEXT *ctx, HEADER *cur, int flags)
+{
+  ENVELOPE *curenv = NULL;
+  int i = 0, tag = 0;
+
+  if (!cur)
+  {
+    tag = 1;
+    for (i = 0; i < ctx->vcount; i++)
+      if (ctx->hdrs[ctx->v2r[i]]->tagged)
+      {
+       cur = ctx->hdrs[ctx->v2r[i]];
+       curenv = cur->env;
+       break;
+      }
+
+    if (!cur)
+    {
+      /* This could happen if the user tagged some messages and then did
+       * a limit such that none of the tagged message are visible.
+       */
+      mutt_error _("No tagged messages are visible!");
+      return (-1);
+    }
+  }
+  else
+    curenv = cur->env;
+
+  if (flags & SENDREPLY)
+  {
+#ifdef USE_NNTP
+    if ((flags & SENDNEWS))
+    {
+      /* in case followup set Newsgroups: with Followup-To: if it present */
+      if (!env->newsgroups && curenv &&
+         mutt_strcasecmp (curenv->followup_to, "poster"))
+       env->newsgroups = safe_strdup (curenv->followup_to);
+    }
+    else
+#endif
+    if (tag)
+    {
+      HEADER *h;
+
+      for (i = 0; i < ctx->vcount; i++)
+      {
+       h = ctx->hdrs[ctx->v2r[i]];
+       if (h->tagged && mutt_fetch_recips (env, h->env, flags) == -1)
+         return -1;
+      }
+    }
+    else if (mutt_fetch_recips (env, curenv, flags) == -1)
+      return -1;
+
+    if ((flags & SENDLISTREPLY) && !env->to)
+    {
+      mutt_error _("No mailing lists found!");
+      return (-1);
+    }
+
+    mutt_make_misc_reply_headers (env, ctx, cur, curenv);
+    mutt_make_reference_headers (tag ? NULL : curenv, env, ctx);
+  }
+  else if (flags & SENDFORWARD)
+    mutt_make_forward_subject (env, ctx, cur);
+
+  return (0);
+}
+
+static int
+generate_body (FILE *tempfp,   /* stream for outgoing message */
+              HEADER *msg,     /* header for outgoing message */
+              int flags,       /* compose mode */
+              CONTEXT *ctx,    /* current mailbox */
+              HEADER *cur)     /* current message */
+{
+  int i;
+  HEADER *h;
+  BODY *tmp;
+
+  if (flags & SENDREPLY)
+  {
+    if ((i = query_quadoption (OPT_INCLUDE, _("Include message in reply?"))) == -1)
+      return (-1);
+
+    if (i == M_YES)
+    {
+      mutt_message _("Including quoted message...");
+      if (!cur)
+      {
+       for (i = 0; i < ctx->vcount; i++)
+       {
+         h = ctx->hdrs[ctx->v2r[i]];
+         if (h->tagged)
+         {
+           if (include_reply (ctx, h, tempfp) == -1)
+           {
+             mutt_error _("Could not include all requested messages!");
+             return (-1);
+           }
+           fputc ('\n', tempfp);
+         }
+       }
+      }
+      else
+       include_reply (ctx, cur, tempfp);
+
+    }
+  }
+  else if (flags & SENDFORWARD)
+  {
+    if ((i = query_quadoption (OPT_MIMEFWD, _("Forward as attachment?"))) == M_YES)
+    {
+      BODY *last = msg->content;
+
+      mutt_message _("Preparing forwarded message...");
+      
+      while (last && last->next)
+       last = last->next;
+
+      if (cur)
+      {
+       tmp = mutt_make_message_attach (ctx, cur, 0);
+       if (last)
+         last->next = tmp;
+       else
+         msg->content = tmp;
+      }
+      else
+      {
+       for (i = 0; i < ctx->vcount; i++)
+       {
+         if (ctx->hdrs[ctx->v2r[i]]->tagged)
+         {
+           tmp = mutt_make_message_attach (ctx, ctx->hdrs[ctx->v2r[i]], 0);
+           if (last)
+           {
+             last->next = tmp;
+             last = tmp;
+           }
+           else
+             last = msg->content = tmp;
+         }
+       }
+      }
+    }
+    else if (i != -1)
+    {
+      if (cur)
+       include_forward (ctx, cur, tempfp);
+      else
+       for (i=0; i < ctx->vcount; i++)
+         if (ctx->hdrs[ctx->v2r[i]]->tagged)
+           include_forward (ctx, ctx->hdrs[ctx->v2r[i]], tempfp);
+    }
+    else if (i == -1)
+      return -1;
+  }
+  /* if (WithCrypto && (flags & SENDKEY)) */
+  else if ((WithCrypto & APPLICATION_PGP) && (flags & SENDKEY)) 
+  {
+    BODY *tmp;
+
+    if ((WithCrypto & APPLICATION_PGP)
+        && (tmp = crypt_pgp_make_key_attachment (NULL)) == NULL)
+      return -1;
+
+    tmp->next = msg->content;
+    msg->content = tmp;
+  }
+
+  mutt_clear_error ();
+
+  return (0);
+}
+
+void mutt_set_followup_to (ENVELOPE *e)
+{
+  ADDRESS *t = NULL;
+  ADDRESS *from;
+
+  /* 
+   * Only generate the Mail-Followup-To if the user has requested it, and
+   * it hasn't already been set
+   */
+
+  if (!option (OPTFOLLOWUPTO))
+    return;
+#ifdef USE_NNTP
+  if (option (OPTNEWSSEND))
+  {
+    if (!e->followup_to && e->newsgroups && (strrchr (e->newsgroups, ',')))
+      e->followup_to = safe_strdup (e->newsgroups);
+    return;
+  }
+#endif
+
+  if (!e->mail_followup_to)
+  {
+    if (mutt_is_list_cc (0, e->to, e->cc))
+    {
+      /* 
+       * this message goes to known mailing lists, so create a proper
+       * mail-followup-to header
+       */
+
+      t = rfc822_append (&e->mail_followup_to, e->to);
+      rfc822_append (&t, e->cc);
+    }
+
+    /* remove ourselves from the mail-followup-to header */
+    e->mail_followup_to = remove_user (e->mail_followup_to, 0);
+
+    /*
+     * If we are not subscribed to any of the lists in question,
+     * re-add ourselves to the mail-followup-to header.  The 
+     * mail-followup-to header generated is a no-op with group-reply,
+     * but makes sure list-reply has the desired effect.
+     */
+
+    if (e->mail_followup_to && !mutt_is_list_recipient (0, e->to, e->cc))
+    {
+      if (e->reply_to)
+       from = rfc822_cpy_adr (e->reply_to);
+      else if (e->from)
+       from = rfc822_cpy_adr (e->from);
+      else
+       from = mutt_default_from ();
+      
+      if (from)
+      {
+       /* Normally, this loop will not even be entered. */
+       for (t = from; t && t->next; t = t->next)
+         ;
+       
+       t->next = e->mail_followup_to;  /* t cannot be NULL at this point. */
+       e->mail_followup_to = from;
+      }
+    }
+    
+    e->mail_followup_to = mutt_remove_duplicates (e->mail_followup_to);
+    
+  }
+}
+
+
+/* look through the recipients of the message we are replying to, and if
+   we find an address that matches $alternates, we use that as the default
+   from field */
+static ADDRESS *set_reverse_name (ENVELOPE *env)
+{
+  ADDRESS *tmp;
+
+  for (tmp = env->to; tmp; tmp = tmp->next)
+  {
+    if (mutt_addr_is_user (tmp))
+      break;
+  }
+  if (!tmp)
+  {
+    for (tmp = env->cc; tmp; tmp = tmp->next)
+    {
+      if (mutt_addr_is_user (tmp))
+       break;
+    }
+  }
+  if (!tmp && mutt_addr_is_user (env->from))
+    tmp = env->from;
+  if (tmp)
+  {
+    tmp = rfc822_cpy_adr_real (tmp);
+    if (!option (OPTREVREAL))
+      FREE (&tmp->personal);
+    if (!tmp->personal)
+      tmp->personal = safe_strdup (Realname);
+  }
+  return (tmp);
+}
+
+ADDRESS *mutt_default_from (void)
+{
+  ADDRESS *adr;
+  const char *fqdn = mutt_fqdn(1);
+
+  /* 
+   * Note: We let $from override $realname here.  Is this the right
+   * thing to do? 
+   */
+
+  if (From)
+    adr = rfc822_cpy_adr_real (From);
+  else if (option (OPTUSEDOMAIN))
+  {
+    adr = rfc822_new_address ();
+    adr->mailbox = safe_malloc (mutt_strlen (Username) + mutt_strlen (fqdn) + 2);
+    sprintf (adr->mailbox, "%s@%s", NONULL(Username), NONULL(fqdn));   /* __SPRINTF_CHECKED__ */
+  }
+  else
+  {
+    adr = rfc822_new_address ();
+    adr->mailbox = safe_strdup (NONULL(Username));
+  }
+  
+  return (adr);
+}
+
+static int send_message (HEADER *msg)
+{  
+  char tempfile[_POSIX_PATH_MAX];
+  FILE *tempfp;
+  int i;
+  
+  /* Write out the message in MIME form. */
+  mutt_mktemp (tempfile);
+  if ((tempfp = safe_fopen (tempfile, "w")) == NULL)
+    return (-1);
+
+#ifdef MIXMASTER
+  mutt_write_rfc822_header (tempfp, msg->env, msg->content, 0, msg->chain ? 1 : 0);
+#endif
+#ifndef MIXMASTER
+  mutt_write_rfc822_header (tempfp, msg->env, msg->content, 0, 0);
+#endif
+  
+  fputc ('\n', tempfp); /* tie off the header. */
+
+  if ((mutt_write_mime_body (msg->content, tempfp) == -1))
+  {
+    fclose(tempfp);
+    unlink (tempfile);
+    return (-1);
+  }
+  
+  if (fclose (tempfp) != 0)
+  {
+    mutt_perror (tempfile);
+    unlink (tempfile);
+    return (-1);
+  }
+
+#ifdef MIXMASTER
+  if (msg->chain)
+    return mix_send_message (msg->chain, tempfile);
+#endif
+
+  i = mutt_invoke_mta (msg->env->from, msg->env->to, msg->env->cc, 
+                           msg->env->bcc, tempfile, (msg->content->encoding == ENC8BIT));
+  return (i);
+}
+
+/* rfc2047 encode the content-descriptions */
+static void encode_descriptions (BODY *b, short recurse)
+{
+  BODY *t;
+
+  for (t = b; t; t = t->next)
+  {
+    if (t->description)
+    {
+      rfc2047_encode_string (&t->description);
+    }
+    if (recurse && t->parts)
+      encode_descriptions (t->parts, recurse);
+  }
+}
+
+/* rfc2047 decode them in case of an error */
+static void decode_descriptions (BODY *b)
+{
+  BODY *t;
+  
+  for (t = b; t; t = t->next)
+  {
+    if (t->description)
+    {
+      rfc2047_decode (&t->description);
+    }
+    if (t->parts)
+      decode_descriptions (t->parts);
+  }
+}
+
+int mutt_resend_message (FILE *fp, CONTEXT *ctx, HEADER *cur)
+{
+  HEADER *msg = mutt_new_header ();
+  
+  if (mutt_prepare_template (fp, ctx, msg, cur, 1) < 0)
+    return -1;
+  
+  return ci_send_message (SENDRESEND, msg, NULL, ctx, cur);
+}
+
+int
+ci_send_message (int flags,            /* send mode */
+                HEADER *msg,           /* template to use for new message */
+                char *tempfile,        /* file specified by -i or -H */
+                CONTEXT *ctx,          /* current mailbox */
+                HEADER *cur)           /* current message */
+{
+  char buffer[LONG_STRING];
+  char fcc[_POSIX_PATH_MAX] = ""; /* where to copy this message */
+  FILE *tempfp = NULL;
+  BODY *pbody;
+  int i, killfrom = 0;
+  int fcc_error = 0;
+  int free_clear_content = 0;
+
+  BODY *save_content = NULL;
+  BODY *clear_content = NULL;
+  char *pgpkeylist = NULL;
+  /* save current value of "pgp_sign_as" */
+  char *signas = NULL;
+  char *tag = NULL, *err = NULL;
+
+  int rv = -1;
+  
+#ifdef USE_NNTP
+  if (flags & SENDNEWS)
+    set_option (OPTNEWSSEND);
+  else
+    unset_option (OPTNEWSSEND);
+#endif
+
+  if (!flags && !msg && quadoption (OPT_RECALL) != M_NO &&
+      mutt_num_postponed (1))
+  {
+    /* If the user is composing a new message, check to see if there
+     * are any postponed messages first.
+     */
+    if ((i = query_quadoption (OPT_RECALL, _("Recall postponed message?"))) == -1)
+      return rv;
+
+    if(i == M_YES)
+      flags |= SENDPOSTPONED;
+  }
+  
+  
+  if ((WithCrypto & APPLICATION_PGP) && (flags & SENDPOSTPONED))
+    signas = safe_strdup(PgpSignAs);
+
+  /* Delay expansion of aliases until absolutely necessary--shouldn't
+   * be necessary unless we are prompting the user or about to execute a
+   * send-hook.
+   */
+
+  if (!msg)
+  {
+    msg = mutt_new_header ();
+
+    if (flags == SENDPOSTPONED)
+    {
+      if ((flags = mutt_get_postponed (ctx, msg, &cur, fcc, sizeof (fcc))) < 0)
+       goto cleanup;
+#ifdef USE_NNTP
+      /*
+       * If postponed message is a news article, it have
+       * a "Newsgroups:" header line, then set appropriate flag.
+       */
+      if (msg->env->newsgroups)
+      {
+       flags |= SENDNEWS;
+       set_option (OPTNEWSSEND);
+      }
+      else
+      {
+       flags &= ~SENDNEWS;
+       unset_option (OPTNEWSSEND);
+      }
+#endif
+    }
+
+    if (flags & (SENDPOSTPONED|SENDRESEND))
+    {
+      if ((tempfp = safe_fopen (msg->content->filename, "a+")) == NULL)
+      {
+       mutt_perror (msg->content->filename);
+       goto cleanup;
+      }
+    }
+
+    if (!msg->env)
+      msg->env = mutt_new_envelope ();
+  }
+
+  if (! (flags & (SENDKEY | SENDPOSTPONED | SENDRESEND)))
+  {
+    pbody = mutt_new_body ();
+    pbody->next = msg->content; /* don't kill command-line attachments */
+    msg->content = pbody;
+    
+    mutt_parse_content_type (ContentType, msg->content);
+    msg->content->unlink = 1;
+    msg->content->use_disp = 0;
+    msg->content->disposition = DISPINLINE;
+    if (option (OPTTEXTFLOWED) && msg->content->type == TYPETEXT && !ascii_strcasecmp (msg->content->subtype, "plain"))
+      mutt_set_parameter ("format", "flowed", &msg->content->parameter);
+    
+    if (!tempfile)
+    {
+      mutt_mktemp (buffer);
+      tempfp = safe_fopen (buffer, "w+");
+      msg->content->filename = safe_strdup (buffer);
+    }
+    else
+    {
+      tempfp = safe_fopen (tempfile, "a+");
+      msg->content->filename = safe_strdup (tempfile);
+    }
+
+    if (!tempfp)
+    {
+      dprint(1,(debugfile, "newsend_message: can't create tempfile %s (errno=%d)\n", msg->content->filename, errno));
+      mutt_perror (msg->content->filename);
+      goto cleanup;
+    }
+  }
+
+  /* this is handled here so that the user can match ~f in send-hook */
+  if (cur && option (OPTREVNAME) && !(flags & (SENDPOSTPONED|SENDRESEND)))
+  {
+    /* we shouldn't have to worry about freeing `msg->env->from' before
+     * setting it here since this code will only execute when doing some
+     * sort of reply.  the pointer will only be set when using the -H command
+     * line option.
+     *
+     * We shouldn't have to worry about alias expansion here since we are
+     * either replying to a real or postponed message, therefore no aliases
+     * should exist since the user has not had the opportunity to add
+     * addresses to the list.  We just have to ensure the postponed messages
+     * have their aliases expanded.
+     */
+
+    msg->env->from = set_reverse_name (cur->env);
+  }
+
+  if (!msg->env->from && option (OPTUSEFROM) && !(flags & (SENDPOSTPONED|SENDRESEND)))
+    msg->env->from = mutt_default_from ();
+
+  if (flags & SENDBATCH) 
+  {
+    mutt_copy_stream (stdin, tempfp);
+    if (option (OPTHDRS))
+    {
+      process_user_recips (msg->env);
+      process_user_header (msg->env);
+    }
+    mutt_expand_aliases_env (msg->env);
+  }
+  else if (! (flags & (SENDPOSTPONED|SENDRESEND)))
+  {
+    if ((flags & (SENDREPLY | SENDFORWARD)) && ctx &&
+       envelope_defaults (msg->env, ctx, cur, flags) == -1)
+      goto cleanup;
+
+    if (option (OPTHDRS))
+      process_user_recips (msg->env);
+
+    /* Expand aliases and remove duplicates/crossrefs */
+    mutt_fix_reply_recipients (msg->env);
+
+#ifdef USE_NNTP
+    if ((flags & SENDNEWS) && ctx && ctx->magic == M_NNTP && !msg->env->newsgroups)
+      msg->env->newsgroups = safe_strdup (((NNTP_DATA *)ctx->data)->group);
+#endif
+
+    if (! (flags & SENDMAILX) &&
+       ! (option (OPTAUTOEDIT) && option (OPTEDITHDRS)) &&
+       ! ((flags & SENDREPLY) && option (OPTFASTREPLY)))
+    {
+      if (edit_envelope (msg->env, flags) == -1)
+       goto cleanup;
+    }
+
+    /* the from address must be set here regardless of whether or not
+     * $use_from is set so that the `~P' (from you) operator in send-hook
+     * patterns will work.  if $use_from is unset, the from address is killed
+     * after send-hooks are evaulated */
+
+    if (!msg->env->from)
+    {
+      msg->env->from = mutt_default_from ();
+      killfrom = 1;
+    }
+
+    if ((flags & SENDREPLY) && cur)
+    {
+      /* change setting based upon message we are replying to */
+      mutt_message_hook (ctx, cur, M_REPLYHOOK);
+
+      /*
+       * set the replied flag for the message we are generating so that the
+       * user can use ~Q in a send-hook to know when reply-hook's are also
+       * being used.
+       */
+      msg->replied = 1;
+    }
+
+    /* change settings based upon recipients */
+    
+    mutt_message_hook (NULL, msg, M_SENDHOOK);
+
+    /*
+     * Unset the replied flag from the message we are composing since it is
+     * no longer required.  This is done here because the FCC'd copy of
+     * this message was erroneously get the 'R'eplied flag when stored in
+     * a maildir-style mailbox.
+     */
+    msg->replied = 0;
+
+    if (killfrom)
+    {
+      rfc822_free_address (&msg->env->from);
+      killfrom = 0;
+    }
+
+    if (option (OPTHDRS))
+      process_user_header (msg->env);
+
+
+    if (option (OPTSIGONTOP) && (! (flags & (SENDMAILX | SENDKEY)) && Editor && mutt_strcmp (Editor, "builtin") != 0))
+      append_signature (tempfp);
+
+    /* include replies/forwarded messages, unless we are given a template */
+    if (!tempfile && (ctx || !(flags & (SENDREPLY|SENDFORWARD)))
+       && generate_body (tempfp, msg, flags, ctx, cur) == -1)
+      goto cleanup;
+
+    if (!option (OPTSIGONTOP) && (! (flags & (SENDMAILX | SENDKEY)) && Editor && mutt_strcmp (Editor, "builtin") != 0))
+      append_signature (tempfp);
+
+    /* 
+     * this wants to be done _after_ generate_body, so message-hooks
+     * can take effect.
+     */
+
+    if (WithCrypto && !(flags & SENDMAILX))
+    {
+      if (option (OPTCRYPTAUTOSIGN))
+       msg->security |= SIGN;
+      if (option (OPTCRYPTAUTOENCRYPT))
+       msg->security |= ENCRYPT;
+      if (option (OPTCRYPTREPLYENCRYPT) && cur && (cur->security & ENCRYPT))
+       msg->security |= ENCRYPT;
+      if (option (OPTCRYPTREPLYSIGN) && cur && (cur->security & SIGN))
+       msg->security |= SIGN;
+      if (option (OPTCRYPTREPLYSIGNENCRYPTED) && cur && (cur->security & ENCRYPT))
+       msg->security |= SIGN;
+    }      
+
+    if (WithCrypto && msg->security)
+    {
+      /* 
+       * When reypling / forwarding, use the original message's
+       * crypto system.  According to the documentation,
+       * smime_is_default should be disregarded here.
+       * 
+       * Problem: At least with forwarding, this doesn't really
+       * make much sense. Should we have an option to completely
+       * disable individual mechanisms at run-time?
+       */
+      if (cur)
+      {
+       if ((WithCrypto & APPLICATION_PGP) && option (OPTCRYPTAUTOPGP) 
+           && (cur->security & APPLICATION_PGP))
+         msg->security |= APPLICATION_PGP;
+       else if ((WithCrypto & APPLICATION_SMIME) && option (OPTCRYPTAUTOSMIME)
+                && (cur->security & APPLICATION_SMIME))
+         msg->security |= APPLICATION_SMIME;
+      }
+      
+      /*
+       * No crypto mechanism selected? Use availability + smime_is_default
+       * for the decision. 
+       */
+      if (!(msg->security & (APPLICATION_SMIME | APPLICATION_PGP)))
+      {
+       if ((WithCrypto & APPLICATION_SMIME) && option (OPTCRYPTAUTOSMIME) 
+           && option (OPTSMIMEISDEFAULT))
+         msg->security |= APPLICATION_SMIME;
+       else if ((WithCrypto & APPLICATION_PGP) && option (OPTCRYPTAUTOPGP))
+         msg->security |= APPLICATION_PGP;
+       else if ((WithCrypto & APPLICATION_SMIME) && option (OPTCRYPTAUTOSMIME))
+         msg->security |= APPLICATION_SMIME;
+      }
+    }
+    
+    /* No permissible mechanisms found.  Don't sign or encrypt. */
+    if (!(msg->security & (APPLICATION_SMIME|APPLICATION_PGP)))
+      msg->security = 0;
+  }
+  /* wait until now to set the real name portion of our return address so
+     that $realname can be set in a send-hook */
+  if (msg->env->from && !msg->env->from->personal
+      && !(flags & (SENDRESEND|SENDPOSTPONED)))
+    msg->env->from->personal = safe_strdup (Realname);
+
+  if (!((WithCrypto & APPLICATION_PGP) && (flags & SENDKEY)))
+    safe_fclose (&tempfp);
+
+  if (flags & SENDMAILX)
+  {
+    if (mutt_builtin_editor (msg->content->filename, msg, cur) == -1)
+      goto cleanup;
+  }
+  else if (! (flags & SENDBATCH))
+  {
+    struct stat st;
+    time_t mtime = mutt_decrease_mtime (msg->content->filename, NULL);
+    
+    mutt_update_encoding (msg->content);
+
+    /*
+     * Select whether or not the user's editor should be called now.  We
+     * don't want to do this when:
+     * 1) we are sending a key/cert
+     * 2) we are forwarding a message and the user doesn't want to edit it.
+     *    This is controled by the quadoption $forward_edit.  However, if
+     *    both $edit_headers and $autoedit are set, we want to ignore the
+     *    setting of $forward_edit because the user probably needs to add the
+     *    recipients.
+     */
+    if (! (flags & SENDKEY) &&
+       ((flags & SENDFORWARD) == 0 ||
+        (option (OPTEDITHDRS) && option (OPTAUTOEDIT)) ||
+        query_quadoption (OPT_FORWEDIT, _("Edit forwarded message?")) == M_YES))
+    {
+      /* If the this isn't a text message, look for a mailcap edit command */
+      if (mutt_needs_mailcap (msg->content))
+       mutt_edit_attachment (msg->content);
+      else if (!Editor || mutt_strcmp ("builtin", Editor) == 0)
+       mutt_builtin_editor (msg->content->filename, msg, cur);
+      else if (option (OPTEDITHDRS))
+      {
+       mutt_env_to_local (msg->env);
+       mutt_edit_headers (Editor, msg->content->filename, msg, fcc, sizeof (fcc));
+       mutt_env_to_idna (msg->env, NULL, NULL);
+      }
+      else
+       mutt_edit_file (Editor, msg->content->filename);
+    }
+
+    if (! (flags & (SENDPOSTPONED | SENDFORWARD | SENDKEY | SENDRESEND)))
+    {
+      if (stat (msg->content->filename, &st) == 0)
+      {
+       /* if the file was not modified, bail out now */
+       if (mtime == st.st_mtime && !msg->content->next &&
+           query_quadoption (OPT_ABORT, _("Abort unmodified message?")) == M_YES)
+       {
+         mutt_message _("Aborted unmodified message.");
+         goto cleanup;
+       }
+      }
+      else
+       mutt_perror (msg->content->filename);
+    }
+  }
+
+  /* specify a default fcc.  if we are in batchmode, only save a copy of
+   * the message if the value of $copy is yes or ask-yes */
+
+  if (!fcc[0] && !(flags & (SENDPOSTPONED)) && (!(flags & SENDBATCH) || (quadoption (OPT_COPY) & 0x1)))
+  {
+    /* set the default FCC */
+    if (!msg->env->from)
+    {
+      msg->env->from = mutt_default_from ();
+      killfrom = 1; /* no need to check $use_from because if the user specified
+                      a from address it would have already been set by now */
+    }
+    mutt_select_fcc (fcc, sizeof (fcc), msg);
+    if (killfrom)
+    {
+      rfc822_free_address (&msg->env->from);
+      killfrom = 0;
+    }
+  }
+
+  
+  mutt_update_encoding (msg->content);
+
+  if (! (flags & (SENDMAILX | SENDBATCH)))
+  {
+main_loop:
+
+    fcc_error = 0; /* reset value since we may have failed before */
+    mutt_pretty_mailbox (fcc);
+    i = mutt_compose_menu (msg, fcc, sizeof (fcc), cur);
+    if (i == -1)
+    {
+      /* abort */
+#ifdef USE_NNTP
+      if (flags & SENDNEWS)
+       mutt_message _("Article not posted.");
+      else
+#endif
+      mutt_message _("Mail not sent.");
+      goto cleanup;
+    }
+    else if (i == 1)
+    {
+      /* postpone the message until later. */
+      if (msg->content->next)
+       msg->content = mutt_make_multipart (msg->content);
+
+      /*
+       * make sure the message is written to the right part of a maildir 
+       * postponed folder.
+       */
+      msg->read = 0; msg->old = 0;
+
+      encode_descriptions (msg->content, 1);
+      mutt_prepare_envelope (msg->env, 0);
+      mutt_env_to_idna (msg->env, NULL, NULL); /* Handle bad IDNAs the next time. */
+
+      if (!Postponed || mutt_write_fcc (NONULL (Postponed), msg, (cur && (flags & SENDREPLY)) ? cur->env->message_id : NULL, 1, fcc) < 0)
+      {
+       msg->content = mutt_remove_multipart (msg->content);
+       decode_descriptions (msg->content);
+       mutt_unprepare_envelope (msg->env);
+       goto main_loop;
+      }
+      mutt_update_num_postponed ();
+      mutt_message _("Message postponed.");
+      goto cleanup;
+    }
+  }
+
+#ifdef USE_NNTP
+  if (!(flags & SENDNEWS))
+#endif
+  if (!msg->env->to && !msg->env->cc && !msg->env->bcc)
+  {
+    if (! (flags & SENDBATCH))
+    {
+      mutt_error _("No recipients are specified!");
+      goto main_loop;
+    }
+    else
+    {
+      puts _("No recipients were specified.");
+      goto cleanup;
+    }
+  }
+
+  if (mutt_env_to_idna (msg->env, &tag, &err))
+  {
+    mutt_error (_("Bad IDN in \"%s\": '%s'"), tag, err);
+    FREE (&err);
+    if (!(flags & SENDBATCH))
+      goto main_loop;
+    else 
+      goto cleanup;
+  }
+  
+  if (!msg->env->subject && ! (flags & SENDBATCH) &&
+      (i = query_quadoption (OPT_SUBJECT, _("No subject, abort sending?"))) != M_NO)
+  {
+    /* if the abort is automatic, print an error message */
+    if (quadoption (OPT_SUBJECT) == M_YES)
+      mutt_error _("No subject specified.");
+    goto main_loop;
+  }
+#ifdef USE_NNTP
+  if ((flags & SENDNEWS) && !msg->env->subject)
+  {
+    mutt_error _("No subject specified.");
+    goto main_loop;
+  }
+
+  if ((flags & SENDNEWS) && !msg->env->newsgroups)
+  {
+    mutt_error _("No newsgroup specified.");
+    goto main_loop;
+  }
+#endif
+
+  if (msg->content->next)
+    msg->content = mutt_make_multipart (msg->content);
+
+  /* 
+   * Ok, we need to do it this way instead of handling all fcc stuff in
+   * one place in order to avoid going to main_loop with encoded "env"
+   * in case of error.  Ugh.
+   */
+
+  encode_descriptions (msg->content, 1);
+  
+  /*
+   * Make sure that clear_content and free_clear_content are
+   * properly initialized -- we may visit this particular place in
+   * the code multiple times, including after a failed call to
+   * mutt_protect().
+   */
+  
+  clear_content = NULL;
+  free_clear_content = 0;
+  
+  if (WithCrypto)
+  {
+    if (msg->security)  
+    {
+      /* save the decrypted attachments */
+      clear_content = msg->content;
+  
+      if ((crypt_get_keys (msg, &pgpkeylist) == -1) ||
+          mutt_protect (msg, cur, pgpkeylist) == -1)
+      {
+        msg->content = mutt_remove_multipart (msg->content);
+        
+       FREE (&pgpkeylist);
+        
+        decode_descriptions (msg->content);
+        goto main_loop;
+      }
+      encode_descriptions (msg->content, 0);
+    }
+  
+    /* 
+     * at this point, msg->content is one of the following three things:
+     * - multipart/signed.  In this case, clear_content is a child.
+     * - multipart/encrypted.  In this case, clear_content exists
+     *   independently
+     * - application/pgp.  In this case, clear_content exists independently.
+     * - something else.  In this case, it's the same as clear_content.
+     */
+  
+    /* This is ugly -- lack of "reporting back" from mutt_protect(). */
+    
+    if (clear_content && (msg->content != clear_content)
+        && (msg->content->parts != clear_content))
+      free_clear_content = 1;
+  }
+
+  if (!option (OPTNOCURSES) && !(flags & SENDMAILX))
+    mutt_message _("Sending message...");
+
+  mutt_prepare_envelope (msg->env, 1);
+
+  /* save a copy of the message, if necessary. */
+
+  mutt_expand_path (fcc, sizeof (fcc));
+
+  
+  /* Don't save a copy when we are in batch-mode, and the FCC
+   * folder is on an IMAP server: This would involve possibly lots
+   * of user interaction, which is not available in batch mode. 
+   * 
+   * Note: A patch to fix the problems with the use of IMAP servers
+   * from non-curses mode is available from Brendan Cully.  However, 
+   * I'd like to think a bit more about this before including it.
+   */
+
+#ifdef USE_IMAP
+  if ((flags & SENDBATCH) && fcc[0] && mx_is_imap (fcc))
+    fcc[0] = '\0';
+#endif
+
+  if (*fcc && mutt_strcmp ("/dev/null", fcc) != 0)
+  {
+    BODY *tmpbody = msg->content;
+    BODY *save_sig = NULL;
+    BODY *save_parts = NULL;
+
+    if (WithCrypto && msg->security && option (OPTFCCCLEAR))
+      msg->content = clear_content;
+
+    /* check to see if the user wants copies of all attachments */
+    if (!option (OPTFCCATTACH) && msg->content->type == TYPEMULTIPART)
+    {
+      if (WithCrypto
+          && (mutt_strcmp (msg->content->subtype, "encrypted") == 0 ||
+              mutt_strcmp (msg->content->subtype, "signed") == 0))
+      {
+       if (clear_content->type == TYPEMULTIPART)
+       {
+         if(!(msg->security & ENCRYPT) && (msg->security & SIGN))
+         {
+           /* save initial signature and attachments */
+           save_sig = msg->content->parts->next;
+           save_parts = clear_content->parts->next;
+         }
+
+         /* this means writing only the main part */
+         msg->content = clear_content->parts;
+
+         if (mutt_protect (msg, cur, pgpkeylist) == -1)
+         {
+           /* we can't do much about it at this point, so
+            * fallback to saving the whole thing to fcc
+            */
+           msg->content = tmpbody;
+           save_sig = NULL;
+           goto full_fcc;
+         }
+
+         save_content = msg->content;
+       }
+      }
+      else
+       msg->content = msg->content->parts;
+    }
+
+full_fcc:
+    if (msg->content)
+    {
+      /* update received time so that when storing to a mbox-style folder
+       * the From_ line contains the current time instead of when the
+       * message was first postponed.
+       */
+      msg->received = time (NULL);
+      if (mutt_write_fcc (fcc, msg, NULL, 0, NULL) == -1)
+      {
+       /*
+        * Error writing FCC, we should abort sending.
+        */
+       fcc_error = 1;
+      }
+    }
+
+    msg->content = tmpbody;
+
+    if (WithCrypto && save_sig)
+    {
+      /* cleanup the second signature structures */
+      if (save_content->parts)
+      {
+       mutt_free_body (&save_content->parts->next);
+       save_content->parts = NULL;
+      }
+      mutt_free_body (&save_content);
+
+      /* restore old signature and attachments */
+      msg->content->parts->next = save_sig;
+      msg->content->parts->parts->next = save_parts;
+    }
+    else if (WithCrypto && save_content)
+    {
+      /* destroy the new encrypted body. */
+      mutt_free_body (&save_content);
+    }
+
+  }
+
+
+  /*
+   * Don't attempt to send the message if the FCC failed.  Just pretend
+   * the send failed as well so we give the user a chance to fix the
+   * error.
+   */
+  if (fcc_error || (i = send_message (msg)) == -1)
+  {
+    if (!(flags & SENDBATCH))
+    {
+      if (!WithCrypto)
+        ;
+      else if ((msg->security & ENCRYPT) || 
+               ((msg->security & SIGN)
+                && msg->content->type == TYPEAPPLICATION))
+      {
+       mutt_free_body (&msg->content); /* destroy PGP data */
+       msg->content = clear_content;   /* restore clear text. */
+      }
+      else if ((msg->security & SIGN) && msg->content->type == TYPEMULTIPART)
+      {
+       mutt_free_body (&msg->content->parts->next);         /* destroy sig */
+       msg->content = mutt_remove_multipart (msg->content); 
+      }
+
+      msg->content = mutt_remove_multipart (msg->content);
+      decode_descriptions (msg->content);
+      mutt_unprepare_envelope (msg->env);
+      goto main_loop;
+    }
+    else
+    {
+      puts _("Could not send the message.");
+      goto cleanup;
+    }
+  }
+  else if (!option (OPTNOCURSES) && ! (flags & SENDMAILX))
+    mutt_message (i != 0 ? _("Sending in background.") :
+#ifdef USE_NNTP
+                 (flags & SENDNEWS) ? _("Article posted.") : _("Mail sent."));
+#else
+                 _("Mail sent."));
+#endif
+
+  if (WithCrypto && (msg->security & ENCRYPT))
+    FREE (&pgpkeylist);
+  
+  if (WithCrypto && free_clear_content)
+    mutt_free_body (&clear_content);
+
+  if (flags & SENDREPLY)
+  {
+    if (cur && ctx)
+      mutt_set_flag (ctx, cur, M_REPLIED, 1);
+    else if (!(flags & SENDPOSTPONED) && ctx && ctx->tagged)
+    {
+      for (i = 0; i < ctx->vcount; i++)
+       if (ctx->hdrs[ctx->v2r[i]]->tagged)
+         mutt_set_flag (ctx, ctx->hdrs[ctx->v2r[i]], M_REPLIED, 1);
+    }
+  }
+
+
+  rv = 0;
+  
+cleanup:
+
+  if ((WithCrypto & APPLICATION_PGP) && (flags & SENDPOSTPONED))
+  {
+    if(signas)
+    {
+      FREE (&PgpSignAs);
+      PgpSignAs = signas;
+    }
+  }
+   
+  safe_fclose (&tempfp);
+  mutt_free_header (&msg);
+  
+  return rv;
+}
+
+/* vim: set sw=2: */
diff --git a/sendlib.c b/sendlib.c
new file mode 100644 (file)
index 0000000..8128089
--- /dev/null
+++ b/sendlib.c
@@ -0,0 +1,2593 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#define _SENDLIB_C 1
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "rfc2047.h"
+#include "rfc2231.h"
+#include "mx.h"
+#include "mime.h"
+#include "mailbox.h"
+#include "copy.h"
+#include "pager.h"
+#include "charset.h"
+#include "mutt_crypt.h"
+#include "mutt_idna.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <signal.h>
+#include <sys/wait.h>
+#include <fcntl.h>
+
+#ifdef USE_NNTP
+#include <nntp.h>
+#endif
+
+#ifdef HAVE_SYSEXITS_H
+#include <sysexits.h>
+#else /* Make sure EX_OK is defined <philiph@pobox.com> */
+#define EX_OK 0
+#endif
+
+/* If you are debugging this file, comment out the following line. */
+/*#define NDEBUG*/
+
+#ifdef NDEBUG
+#define assert(x)
+#else
+#include <assert.h>
+#endif
+
+extern char RFC822Specials[];
+
+static struct sysexits
+{
+  int v;
+  const char *str;
+} 
+sysexits_h[] = 
+{
+#ifdef EX_USAGE
+  { 0xff & EX_USAGE, "Bad usage." },
+#endif
+#ifdef EX_DATAERR
+  { 0xff & EX_DATAERR, "Data format error." },
+#endif
+#ifdef EX_NOINPUT
+  { 0xff & EX_NOINPUT, "Cannot open input." },
+#endif
+#ifdef EX_NOUSER
+  { 0xff & EX_NOUSER, "User unknown." },
+#endif
+#ifdef EX_NOHOST
+  { 0xff & EX_NOHOST, "Host unknown." },
+#endif
+#ifdef EX_UNAVAILABLE
+  { 0xff & EX_UNAVAILABLE, "Service unavailable." },
+#endif
+#ifdef EX_SOFTWARE
+  { 0xff & EX_SOFTWARE, "Internal error." },
+#endif
+#ifdef EX_OSERR
+  { 0xff & EX_OSERR, "Operating system error." },
+#endif
+#ifdef EX_OSFILE
+  { 0xff & EX_OSFILE, "System file missing." },
+#endif
+#ifdef EX_CANTCREAT
+  { 0xff & EX_CANTCREAT, "Can't create output." },
+#endif
+#ifdef EX_IOERR
+  { 0xff & EX_IOERR, "I/O error." },
+#endif
+#ifdef EX_TEMPFAIL
+  { 0xff & EX_TEMPFAIL, "Deferred." },
+#endif
+#ifdef EX_PROTOCOL
+  { 0xff & EX_PROTOCOL, "Remote protocol error." },
+#endif
+#ifdef EX_NOPERM
+  { 0xff & EX_NOPERM, "Insufficient permission." },
+#endif
+#ifdef EX_CONFIG
+  { 0xff & EX_NOPERM, "Local configuration error." },
+#endif
+  { S_ERR, "Exec error." },
+  { -1, NULL}
+};
+
+    
+
+#define DISPOSITION(X) X==DISPATTACH?"attachment":"inline"
+
+const char MimeSpecials[] = "@.,;:<>[]\\\"()?/= \t";
+
+char B64Chars[64] = {
+  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
+  'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
+  'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
+  't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7',
+  '8', '9', '+', '/'
+};
+
+static char MsgIdPfx = 'A';
+
+static void transform_to_7bit (BODY *a, FILE *fpin);
+
+static void encode_quoted (FGETCONV * fc, FILE *fout, int istext)
+{
+  int c, linelen = 0;
+  char line[77], savechar;
+
+  while ((c = fgetconv (fc)) != EOF)
+  {
+    /* Wrap the line if needed. */
+    if (linelen == 76 && ((istext && c != '\n') || !istext))
+    {
+      /* If the last character is "quoted", then be sure to move all three
+       * characters to the next line.  Otherwise, just move the last
+       * character...
+       */
+      if (line[linelen-3] == '=')
+      {
+        line[linelen-3] = 0;
+        fputs (line, fout);      
+        fputs ("=\n", fout);
+        line[linelen] = 0;
+        line[0] = '=';
+        line[1] = line[linelen-2];
+        line[2] = line[linelen-1];
+        linelen = 3;
+      }
+      else
+      {
+        savechar = line[linelen-1];
+        line[linelen-1] = '=';
+        line[linelen] = 0;
+        fputs (line, fout);
+        fputc ('\n', fout);
+        line[0] = savechar;
+        linelen = 1;
+      }
+    }
+
+    /* Escape lines that begin with/only contain "the message separator". */
+    if (linelen == 4 && !mutt_strncmp ("From", line, 4))
+    {
+      strfcpy (line, "=46rom", sizeof (line));
+      linelen = 6;
+    }
+    else if (linelen == 4 && !mutt_strncmp ("from", line, 4))
+    {
+      strfcpy (line, "=66rom", sizeof (line));
+      linelen = 6;
+    }
+    else if (linelen == 1 && line[0] == '.')
+    {
+      strfcpy (line, "=2E", sizeof (line));
+      linelen = 3;
+    }
+
+#ifdef USE_LIBESMTP
+# include "mutt_libesmtp.h"
+#endif /* USE_LIBESMTP */
+
+    if (c == '\n' && istext)
+    {
+      /* Check to make sure there is no trailing space on this line. */
+      if (linelen > 0 && (line[linelen-1] == ' ' || line[linelen-1] == '\t'))
+      {
+        if (linelen < 74)
+       {
+          sprintf (line+linelen-1, "=%2.2X", (unsigned char) line[linelen-1]);
+          fputs (line, fout);
+        }
+        else
+       {
+          int savechar = line[linelen-1];
+
+          line[linelen-1] = '=';
+          line[linelen] = 0;
+          fputs (line, fout);
+          fprintf (fout, "\n=%2.2X", (unsigned char) savechar);
+        }
+      }
+      else
+      {
+        line[linelen] = 0;
+        fputs (line, fout);
+      }
+      fputc ('\n', fout);
+      linelen = 0;
+    }
+    else if (c != 9 && (c < 32 || c > 126 || c == '='))
+    {
+      /* Check to make sure there is enough room for the quoted character.
+       * If not, wrap to the next line.
+       */
+      if (linelen > 73)
+      {
+        line[linelen++] = '=';
+        line[linelen] = 0;
+        fputs (line, fout);
+        fputc ('\n', fout);
+        linelen = 0;
+      }
+      sprintf (line+linelen,"=%2.2X", (unsigned char) c);
+      linelen += 3;
+    }
+    else
+    {
+      /* Don't worry about wrapping the line here.  That will happen during
+       * the next iteration when I'll also know what the next character is.
+       */
+      line[linelen++] = c;
+    }
+  }
+
+  /* Take care of anything left in the buffer */
+  if (linelen > 0)
+  {
+    if (line[linelen-1] == ' ' || line[linelen-1] == '\t')
+    {
+      /* take care of trailing whitespace */
+      if (linelen < 74)
+        sprintf (line+linelen-1, "=%2.2X", (unsigned char) line[linelen-1]);
+      else
+      {
+        savechar = line[linelen-1];
+        line[linelen-1] = '=';
+        line[linelen] = 0;
+        fputs (line, fout);
+        fputc ('\n', fout);
+        sprintf (line, "=%2.2X", (unsigned char) savechar);
+      }
+    }
+    else
+      line[linelen] = 0;
+    fputs (line, fout);
+  }
+}
+
+static char b64_buffer[3];
+static short b64_num;
+static short b64_linelen;
+
+static void b64_flush(FILE *fout)
+{
+  short i;
+
+  if(!b64_num)
+    return;
+
+  if(b64_linelen >= 72)
+  {
+    fputc('\n', fout);
+    b64_linelen = 0;
+  }
+  
+  for(i = b64_num; i < 3; i++)
+    b64_buffer[i] = '\0';
+  
+  fputc(B64Chars[(b64_buffer[0] >> 2) & 0x3f], fout); 
+  b64_linelen++;
+  fputc(B64Chars[((b64_buffer[0] & 0x3) << 4) | ((b64_buffer[1] >> 4) & 0xf) ], fout);
+  b64_linelen++;
+  
+  if(b64_num > 1)
+  {
+    fputc(B64Chars[((b64_buffer[1] & 0xf) << 2) | ((b64_buffer[2] >> 6) & 0x3) ], fout);
+    b64_linelen++;
+    if(b64_num > 2)
+    {
+      fputc(B64Chars[b64_buffer[2] & 0x3f], fout);
+      b64_linelen++;
+    }
+  }
+  
+  while(b64_linelen % 4)
+  {
+    fputc('=', fout);
+    b64_linelen++;
+  }
+  
+  b64_num = 0;
+}
+    
+  
+static void b64_putc(char c, FILE *fout)
+{
+  if(b64_num == 3)
+    b64_flush(fout);
+  
+  b64_buffer[b64_num++] = c;
+}
+  
+  
+static void encode_base64 (FGETCONV * fc, FILE *fout, int istext)
+{
+  int ch, ch1 = EOF;
+  
+  b64_num = b64_linelen = 0;
+  
+  while ((ch = fgetconv (fc)) != EOF)
+  {
+    if (istext && ch == '\n' && ch1 != '\r')
+      b64_putc('\r', fout);
+    b64_putc(ch, fout);
+    ch1 = ch;
+  }
+  b64_flush(fout);
+  fputc('\n', fout);
+}
+
+static void encode_8bit (FGETCONV *fc, FILE *fout, int istext)
+{
+  int ch;
+  
+  while ((ch = fgetconv (fc)) != EOF)
+    fputc (ch, fout);
+}
+  
+
+int mutt_write_mime_header (BODY *a, FILE *f)
+{
+  PARAMETER *p;
+  char buffer[STRING];
+  char *t;
+  char *fn;
+  int len;
+  int tmplen;
+  int encode;
+  
+  fprintf (f, "Content-Type: %s/%s", TYPE (a), a->subtype);
+
+  if (a->parameter)
+  {
+    len = 25 + mutt_strlen (a->subtype); /* approximate len. of content-type */
+
+    for(p = a->parameter; p; p = p->next)
+    {
+      char *tmp;
+      
+      if(!p->value)
+       continue;
+      
+      fputc (';', f);
+
+      buffer[0] = 0;
+      tmp = safe_strdup (p->value);
+      encode = rfc2231_encode_string (&tmp);
+      rfc822_cat (buffer, sizeof (buffer), tmp, MimeSpecials);
+
+      /* Dirty hack to make messages readable by Outlook Express 
+       * for the Mac: force quotes around the boundary parameter
+       * even when they aren't needed.
+       */
+
+      if (!ascii_strcasecmp (p->attribute, "boundary") && !strcmp (buffer, tmp))
+       snprintf (buffer, sizeof (buffer), "\"%s\"", tmp);
+
+      FREE (&tmp);
+
+      tmplen = mutt_strlen (buffer) + mutt_strlen (p->attribute) + 1;
+
+      if (len + tmplen + 2 > 76)
+      {
+       fputs ("\n\t", f);
+       len = tmplen + 8;
+      }
+      else
+      {
+       fputc (' ', f);
+       len += tmplen + 1;
+      }
+
+      fprintf (f, "%s%s=%s", p->attribute, encode ? "*" : "", buffer);
+
+    }
+  }
+
+  fputc ('\n', f);
+
+  if (a->description)
+    fprintf(f, "Content-Description: %s\n", a->description);
+
+  fprintf (f, "Content-Disposition: %s", DISPOSITION (a->disposition));
+
+  if (a->use_disp)
+  {
+    if(!(fn = a->d_filename))
+      fn = a->filename;
+    
+    if (fn)
+    {
+      char *tmp;
+
+      /* Strip off the leading path... */
+      if ((t = strrchr (fn, '/')))
+       t++;
+      else
+       t = fn;
+      
+      buffer[0] = 0;
+      tmp = safe_strdup (t);
+      encode = rfc2231_encode_string (&tmp);
+      rfc822_cat (buffer, sizeof (buffer), tmp, MimeSpecials);
+      FREE (&tmp);
+      fprintf (f, "; filename%s=%s", encode ? "*" : "", buffer);
+    }
+  }
+
+  fputc ('\n', f);
+
+  if (a->encoding != ENC7BIT)
+    fprintf(f, "Content-Transfer-Encoding: %s\n", ENCODING (a->encoding));
+
+  /* Do NOT add the terminator here!!! */
+  return (ferror (f) ? -1 : 0);
+}
+
+# define write_as_text_part(a)  (mutt_is_text_part(a) \
+                                 || ((WithCrypto & APPLICATION_PGP)\
+                                      && mutt_is_application_pgp(a)))
+
+int mutt_write_mime_body (BODY *a, FILE *f)
+{
+  char *p, boundary[SHORT_STRING];
+  char send_charset[SHORT_STRING];
+  FILE *fpin;
+  BODY *t;
+  FGETCONV *fc;
+  
+  if (a->type == TYPEMULTIPART)
+  {
+    /* First, find the boundary to use */
+    if (!(p = mutt_get_parameter ("boundary", a->parameter)))
+    {
+      dprint (1, (debugfile, "mutt_write_mime_body(): no boundary parameter found!\n"));
+      mutt_error _("No boundary parameter found! [report this error]");
+      return (-1);
+    }
+    strfcpy (boundary, p, sizeof (boundary));
+
+    for (t = a->parts; t ; t = t->next)
+    {
+      fprintf (f, "\n--%s\n", boundary);
+      if (mutt_write_mime_header (t, f) == -1)
+       return -1;
+      fputc ('\n', f);
+      if (mutt_write_mime_body (t, f) == -1)
+       return -1;
+    }
+    fprintf (f, "\n--%s--\n", boundary);
+    return (ferror (f) ? -1 : 0);
+  }
+
+  /* This is pretty gross, but it's the best solution for now... */
+  if ((WithCrypto & APPLICATION_PGP)
+      && a->type == TYPEAPPLICATION
+      && mutt_strcmp (a->subtype, "pgp-encrypted") == 0)
+  {
+    fputs ("Version: 1\n", f);
+    return 0;
+  }
+
+  if ((fpin = fopen (a->filename, "r")) == NULL)
+  {
+    dprint(1,(debugfile, "write_mime_body: %s no longer exists!\n",a->filename));
+    mutt_error (_("%s no longer exists!"), a->filename);
+    return -1;
+  }
+
+  if (a->type == TYPETEXT && (!a->noconv))
+    fc = fgetconv_open (fpin, Charset, 
+                       mutt_get_body_charset (send_charset, sizeof (send_charset), a),
+                       0);
+  else
+    fc = fgetconv_open (fpin, 0, 0, 0);
+
+  if (a->encoding == ENCQUOTEDPRINTABLE)
+    encode_quoted (fc, f, write_as_text_part (a));
+  else if (a->encoding == ENCBASE64)
+    encode_base64 (fc, f, write_as_text_part (a));
+  else if (a->type == TYPETEXT && (!a->noconv))
+    encode_8bit (fc, f, write_as_text_part (a));
+  else
+    mutt_copy_stream (fpin, f);
+
+  fgetconv_close (&fc);
+  fclose (fpin);
+
+  return (ferror (f) ? -1 : 0);
+}
+
+#undef write_as_text_part
+
+#define BOUNDARYLEN 16
+void mutt_generate_boundary (PARAMETER **parm)
+{
+  char rs[BOUNDARYLEN + 1];
+  char *p = rs;
+  int i;
+
+  rs[BOUNDARYLEN] = 0;
+  for (i=0;i<BOUNDARYLEN;i++) 
+    *p++ = B64Chars[LRAND() % sizeof (B64Chars)];
+  *p = 0;
+  
+  mutt_set_parameter ("boundary", rs, parm);
+}
+
+typedef struct
+{
+  int from;
+  int whitespace;
+  int dot;
+  int linelen;
+  int was_cr;
+}
+CONTENT_STATE;
+
+
+static void update_content_info (CONTENT *info, CONTENT_STATE *s, char *d, size_t dlen)
+{
+  int from = s->from;
+  int whitespace = s->whitespace;
+  int dot = s->dot;
+  int linelen = s->linelen;
+  int was_cr = s->was_cr;
+
+  if (!d) /* This signals EOF */
+  {
+    if (was_cr)
+      info->binary = 1;
+    if (linelen > info->linemax)
+      info->linemax = linelen;
+
+    return;
+  }
+
+  for (; dlen; d++, dlen--)
+  {
+    char ch = *d;
+
+    if (was_cr)
+    {
+      was_cr = 0;
+      if (ch != '\n')
+      {
+        info->binary = 1;
+      }
+      else
+      {
+        if (whitespace) info->space = 1;
+       if (dot) info->dot = 1;
+        if (linelen > info->linemax) info->linemax = linelen;
+        whitespace = 0;
+       dot = 0;
+        linelen = 0;
+       continue;
+      }
+    }
+
+    linelen++;
+    if (ch == '\n')
+    {
+      info->crlf++;
+      if (whitespace) info->space = 1;
+      if (dot) info->dot = 1;
+      if (linelen > info->linemax) info->linemax = linelen;
+      whitespace = 0;
+      linelen = 0;
+      dot = 0;
+    }
+    else if (ch == '\r')
+    {
+      info->crlf++;
+      info->cr = 1;
+      was_cr = 1;
+      continue;
+    }
+    else if (ch & 0x80)
+      info->hibin++;
+    else if (ch == '\t' || ch == '\f')
+    {
+      info->ascii++;
+      whitespace++;
+    }
+    else if (ch < 32 || ch == 127)
+      info->lobin++;
+    else
+    {
+      if (linelen == 1)
+      {
+        if ((ch == 'F') || (ch == 'f'))
+          from = 1;
+        else
+          from = 0;
+        if (ch == '.')
+          dot = 1;
+        else
+          dot = 0;
+      }
+      else if (from)
+      {
+        if (linelen == 2 && ch != 'r') from = 0;
+        else if (linelen == 3 && ch != 'o') from = 0;
+        else if (linelen == 4)
+       {
+          if (ch == 'm') info->from = 1;
+          from = 0;
+        }
+      }
+      if (ch == ' ') whitespace++;
+      info->ascii++;
+    }
+
+    if (linelen > 1) dot = 0;
+    if (ch != ' ' && ch != '\t') whitespace = 0;
+  }
+
+  s->from = from;
+  s->whitespace = whitespace;
+  s->dot = dot;
+  s->linelen = linelen;
+  s->was_cr = was_cr;
+  
+}
+
+/* Define as 1 if iconv sometimes returns -1(EILSEQ) instead of transcribing. */
+#define BUGGY_ICONV 1
+
+/*
+ * Find the best charset conversion of the file from fromcode into one
+ * of the tocodes. If successful, set *tocode and CONTENT *info and
+ * return the number of characters converted inexactly. If no
+ * conversion was possible, return -1.
+ *
+ * We convert via UTF-8 in order to avoid the condition -1(EINVAL),
+ * which would otherwise prevent us from knowing the number of inexact
+ * conversions. Where the candidate target charset is UTF-8 we avoid
+ * doing the second conversion because iconv_open("UTF-8", "UTF-8")
+ * fails with some libraries.
+ *
+ * We assume that the output from iconv is never more than 4 times as
+ * long as the input for any pair of charsets we might be interested
+ * in.
+ */
+static size_t convert_file_to (FILE *file, const char *fromcode,
+                              int ncodes, const char **tocodes,
+                              int *tocode, CONTENT *info)
+{
+#ifdef HAVE_ICONV
+  iconv_t cd1, *cd;
+  char bufi[256], bufu[512], bufo[4 * sizeof (bufi)];
+  ICONV_CONST char *ib, *ub;
+  char *ob;
+  size_t ibl, obl, ubl, ubl1, n, ret;
+  int i;
+  CONTENT *infos;
+  CONTENT_STATE *states;
+  size_t *score;
+
+  cd1 = mutt_iconv_open ("UTF-8", fromcode, 0);
+  if (cd1 == (iconv_t)(-1))
+    return -1;
+
+  cd     = safe_calloc (ncodes, sizeof (iconv_t));
+  score  = safe_calloc (ncodes, sizeof (size_t));
+  states = safe_calloc (ncodes, sizeof (CONTENT_STATE));
+  infos  = safe_calloc (ncodes, sizeof (CONTENT));
+
+  for (i = 0; i < ncodes; i++)
+    if (ascii_strcasecmp (tocodes[i], "UTF-8"))
+      cd[i] = mutt_iconv_open (tocodes[i], "UTF-8", 0);
+    else
+      /* Special case for conversion to UTF-8 */
+      cd[i] = (iconv_t)(-1), score[i] = (size_t)(-1);
+
+  rewind (file);
+  ibl = 0;
+  for (;;)
+  {
+
+    /* Try to fill input buffer */
+    n = fread (bufi + ibl, 1, sizeof (bufi) - ibl, file);
+    ibl += n;
+
+    /* Convert to UTF-8 */
+    ib = bufi;
+    ob = bufu, obl = sizeof (bufu);
+    n = iconv (cd1, ibl ? &ib : 0, &ibl, &ob, &obl);
+    assert (n == (size_t)(-1) || !n || ICONV_NONTRANS);
+    if (n == (size_t)(-1) &&
+       ((errno != EINVAL && errno != E2BIG) || ib == bufi))
+    {
+      assert (errno == EILSEQ ||
+             (errno == EINVAL && ib == bufi && ibl < sizeof (bufi)));
+      ret = (size_t)(-1);
+      break;
+    }
+    ubl1 = ob - bufu;
+
+    /* Convert from UTF-8 */
+    for (i = 0; i < ncodes; i++)
+      if (cd[i] != (iconv_t)(-1) && score[i] != (size_t)(-1))
+      {
+       ub = bufu, ubl = ubl1;
+       ob = bufo, obl = sizeof (bufo);
+       n = iconv (cd[i], (ibl || ubl) ? &ub : 0, &ubl, &ob, &obl);
+       if (n == (size_t)(-1))
+       {
+         assert (errno == E2BIG ||
+                 (BUGGY_ICONV && (errno == EILSEQ || errno == ENOENT)));
+         score[i] = (size_t)(-1);
+       }
+       else
+       {
+         score[i] += n;
+         update_content_info (&infos[i], &states[i], bufo, ob - bufo);
+       }
+      }
+      else if (cd[i] == (iconv_t)(-1) && score[i] == (size_t)(-1))
+       /* Special case for conversion to UTF-8 */
+       update_content_info (&infos[i], &states[i], bufu, ubl1);
+
+    if (ibl)
+      /* Save unused input */
+      memmove (bufi, ib, ibl);
+    else if (!ubl1 && ib < bufi + sizeof (bufi))
+    {
+      ret = 0;
+      break;
+    }
+  }
+
+  if (!ret)
+  {
+    /* Find best score */
+    ret = (size_t)(-1);
+    for (i = 0; i < ncodes; i++)
+    {
+      if (cd[i] == (iconv_t)(-1) && score[i] == (size_t)(-1))
+      {
+       /* Special case for conversion to UTF-8 */
+       *tocode = i;
+       ret = 0;
+       break;
+      }
+      else if (cd[i] == (iconv_t)(-1) || score[i] == (size_t)(-1))
+       continue;
+      else if (ret == (size_t)(-1) || score[i] < ret)
+      {
+       *tocode = i;
+       ret = score[i];
+       if (!ret)
+         break;
+      }
+    }
+    if (ret != (size_t)(-1))
+    {
+      memcpy (info, &infos[*tocode], sizeof(CONTENT));
+      update_content_info (info, &states[*tocode], 0, 0); /* EOF */
+    }
+  }
+
+  for (i = 0; i < ncodes; i++)
+    if (cd[i] != (iconv_t)(-1))
+      iconv_close (cd[i]);
+
+  iconv_close (cd1);
+  FREE (&cd);
+  FREE (&infos);
+  FREE (&score);
+  FREE (&states);
+
+  return ret;
+#else
+  return -1;
+#endif /* !HAVE_ICONV */
+}
+
+/*
+ * Find the first of the fromcodes that gives a valid conversion and
+ * the best charset conversion of the file into one of the tocodes. If
+ * successful, set *fromcode and *tocode to dynamically allocated
+ * strings, set CONTENT *info, and return the number of characters
+ * converted inexactly. If no conversion was possible, return -1.
+ *
+ * Both fromcodes and tocodes may be colon-separated lists of charsets.
+ * However, if fromcode is zero then fromcodes is assumed to be the
+ * name of a single charset even if it contains a colon.
+ */
+static size_t convert_file_from_to (FILE *file,
+                                   const char *fromcodes, const char *tocodes,
+                                   char **fromcode, char **tocode, CONTENT *info)
+{
+  char *fcode;
+  char **tcode;
+  const char *c, *c1;
+  size_t ret;
+  int ncodes, i, cn;
+
+  /* Count the tocodes */
+  ncodes = 0;
+  for (c = tocodes; c; c = c1 ? c1 + 1 : 0)
+  {
+    if ((c1 = strchr (c, ':')) == c)
+      continue;
+    ++ncodes;
+  }
+
+  /* Copy them */
+  tcode = safe_malloc (ncodes * sizeof (char *));
+  for (c = tocodes, i = 0; c; c = c1 ? c1 + 1 : 0, i++)
+  {
+    if ((c1 = strchr (c, ':')) == c)
+      continue;
+    tcode[i] = mutt_substrdup (c, c1);
+  }
+
+  ret = (size_t)(-1);
+  if (fromcode)
+  {
+    /* Try each fromcode in turn */
+    for (c = fromcodes; c; c = c1 ? c1 + 1 : 0)
+    {
+      if ((c1 = strchr (c, ':')) == c)
+       continue;
+      fcode = mutt_substrdup (c, c1);
+      
+      ret = convert_file_to (file, fcode, ncodes, (const char **)tcode,
+                            &cn, info);
+      if (ret != (size_t)(-1))
+      {
+       *fromcode = fcode;
+       *tocode = tcode[cn];
+       tcode[cn] = 0;
+       break;
+      }
+      FREE (&fcode);
+    }
+  }
+  else
+  {
+    /* There is only one fromcode */
+    ret = convert_file_to (file, fromcodes, ncodes, (const char **)tcode,
+                          &cn, info);
+    if (ret != (size_t)(-1))
+    {
+      *tocode = tcode[cn];
+      tcode[cn] = 0;
+    }
+  }
+
+  /* Free memory */
+  for (i = 0; i < ncodes; i++)
+    FREE (&tcode[i]);
+
+  FREE (tcode);
+  
+  return ret;
+}
+
+/* 
+ * Analyze the contents of a file to determine which MIME encoding to use.
+ * Also set the body charset, sometimes, or not.
+ */
+CONTENT *mutt_get_content_info (const char *fname, BODY *b)
+{
+  CONTENT *info;
+  CONTENT_STATE state;
+  FILE *fp = NULL;
+  char *tocode;
+  char buffer[100];
+  char chsbuf[STRING];
+  size_t r;
+
+  struct stat sb;
+  
+  if(b && !fname) fname = b->filename;
+
+  if (stat (fname, &sb) == -1)
+  {
+    mutt_error (_("Can't stat %s: %s"), fname, strerror (errno));
+    return NULL;
+  }
+  
+  if (!S_ISREG(sb.st_mode))
+  {
+    mutt_error (_("%s isn't a regular file."), fname);
+    return NULL;
+  }
+  
+  if ((fp = fopen (fname, "r")) == NULL)
+  {
+    dprint (1, (debugfile, "mutt_get_content_info: %s: %s (errno %d).\n",
+               fname, strerror (errno), errno));
+    return (NULL);
+  }
+
+  info = safe_calloc (1, sizeof (CONTENT));
+  memset (&state, 0, sizeof (state));
+  
+  if (b != NULL && b->type == TYPETEXT && (!b->noconv && !b->force_charset))
+  {
+    char *chs = mutt_get_parameter ("charset", b->parameter);
+    if (Charset && (chs || SendCharset) &&
+       convert_file_from_to (fp, Charset, chs ? chs : SendCharset,
+                             0, &tocode, info) != (size_t)(-1))
+    {
+      if (!chs)
+      {
+       mutt_canonical_charset (chsbuf, sizeof (chsbuf), tocode);
+       mutt_set_parameter ("charset", chsbuf, &b->parameter);
+      }
+      FREE (&tocode);
+      safe_fclose (&fp);
+      return info;
+    }
+  }
+
+  rewind (fp);
+  while ((r = fread (buffer, 1, sizeof(buffer), fp)))
+    update_content_info (info, &state, buffer, r);
+  update_content_info (info, &state, 0, 0);
+
+  safe_fclose (&fp);
+  
+  if (b != NULL && b->type == TYPETEXT && (!b->noconv && !b->force_charset))
+    mutt_set_parameter ("charset", (!info->hibin ? "us-ascii" :
+                                   Charset  && !mutt_is_us_ascii (Charset) ? Charset : "unknown-8bit"),
+                       &b->parameter);
+
+  return info;
+}
+
+/* Given a file with path ``s'', see if there is a registered MIME type.
+ * returns the major MIME type, and copies the subtype to ``d''.  First look
+ * for ~/.mime.types, then look in a system mime.types if we can find one.
+ * The longest match is used so that we can match `ps.gz' when `gz' also
+ * exists.
+ */
+
+int mutt_lookup_mime_type (BODY *att, const char *path)
+{
+  FILE *f;
+  char *p, *q, *ct;
+  char buf[LONG_STRING];
+  char subtype[STRING], xtype[STRING];
+  int count;
+  int szf, sze, cur_sze;
+  int type;
+
+  *subtype = '\0';
+  *xtype   = '\0';
+  type     = TYPEOTHER;
+  cur_sze  = 0;
+
+  szf      = mutt_strlen (path);
+
+  for (count = 0 ; count < 3 ; count++)
+  {
+    /*
+     * can't use strtok() because we use it in an inner loop below, so use
+     * a switch statement here instead.
+     */
+    switch (count)
+    {
+      case 0:
+       snprintf (buf, sizeof (buf), "%s/.mime.types", NONULL(Homedir));
+       break;
+      case 1:
+       strfcpy (buf, SYSCONFDIR"/mime.types", sizeof(buf));
+       break;
+      case 2:
+       strfcpy (buf, PKGDATADIR"/mime.types", sizeof (buf));
+       break;
+      default:
+        dprint (1, (debugfile, "mutt_lookup_mime_type: Internal error, count = %d.\n", count));
+       goto bye;       /* shouldn't happen */
+    }
+
+    if ((f = fopen (buf, "r")) != NULL)
+    {
+      while (fgets (buf, sizeof (buf) - 1, f) != NULL)
+      {
+       /* weed out any comments */
+       if ((p = strchr (buf, '#')))
+         *p = 0;
+
+       /* remove any leading space. */
+       ct = buf;
+       SKIPWS (ct);
+
+       /* position on the next field in this line */
+       if ((p = strpbrk (ct, " \t")) == NULL)
+         continue;
+       *p++ = 0;
+       SKIPWS (p);
+
+       /* cycle through the file extensions */
+       while ((p = strtok (p, " \t\n")))
+       {
+         sze = mutt_strlen (p);
+         if ((sze > cur_sze) && (szf >= sze) &&
+             (mutt_strcasecmp (path + szf - sze, p) == 0 || ascii_strcasecmp (path + szf - sze, p) == 0) &&
+             (szf == sze || path[szf - sze - 1] == '.'))
+         {
+           /* get the content-type */
+
+           if ((p = strchr (ct, '/')) == NULL)
+           {
+             /* malformed line, just skip it. */
+             break;
+           }
+           *p++ = 0;
+
+           for (q = p; *q && !ISSPACE (*q); q++)
+             ;
+           
+           mutt_substrcpy (subtype, p, q, sizeof (subtype));
+
+           if ((type = mutt_check_mime_type (ct)) == TYPEOTHER)
+             strfcpy (xtype, ct, sizeof (xtype));
+
+           cur_sze = sze;
+         }
+         p = NULL;
+       }
+      }
+      fclose (f);
+    }
+  }
+  
+ bye:
+
+  if (type != TYPEOTHER || *xtype != '\0')
+  {
+    att->type = type;
+    mutt_str_replace (&att->subtype, subtype);
+    mutt_str_replace (&att->xtype, xtype);
+  }
+  
+  return (type);
+}
+
+void mutt_message_to_7bit (BODY *a, FILE *fp)
+{
+  char temp[_POSIX_PATH_MAX];
+  char *line = NULL;
+  FILE *fpin = NULL;
+  FILE *fpout = NULL;
+  struct stat sb;
+
+  if (!a->filename && fp)
+    fpin = fp;
+  else if (!a->filename || !(fpin = fopen (a->filename, "r")))
+  {
+    mutt_error (_("Could not open %s"), a->filename ? a->filename : "(null)");
+    return;
+  } 
+  else
+  {
+    a->offset = 0;
+    if (stat (a->filename, &sb) == -1)
+    {
+      mutt_perror ("stat");
+      fclose (fpin);
+    }
+    a->length = sb.st_size;
+  }
+
+  mutt_mktemp (temp);
+  if (!(fpout = safe_fopen (temp, "w+")))
+  {
+    mutt_perror ("fopen");
+    goto cleanup;
+  }
+
+  fseek (fpin, a->offset, 0);
+  a->parts = mutt_parse_messageRFC822 (fpin, a);
+
+  transform_to_7bit (a->parts, fpin);
+  
+  mutt_copy_hdr (fpin, fpout, a->offset, a->offset + a->length, 
+                CH_MIME | CH_NONEWLINE | CH_XMIT, NULL);
+
+  fputs ("Mime-Version: 1.0\n", fpout);
+  mutt_write_mime_header (a->parts, fpout);
+  fputc ('\n', fpout);
+  mutt_write_mime_body (a->parts, fpout);
+  
+ cleanup:
+  FREE (&line);
+
+  if (fpin && !fp)
+    fclose (fpin);
+  if (fpout)
+    fclose (fpout);
+  else
+    return;
+  
+  a->encoding = ENC7BIT;
+  a->d_filename = a->filename;
+  if (a->filename && a->unlink)
+    unlink (a->filename);
+  a->filename = safe_strdup (temp);
+  a->unlink = 1;
+  if(stat (a->filename, &sb) == -1) 
+  {
+    mutt_perror ("stat");
+    return;
+  }
+  a->length = sb.st_size;
+  mutt_free_body (&a->parts);
+  a->hdr->content = NULL;
+}
+
+static void transform_to_7bit (BODY *a, FILE *fpin)
+{
+  char buff[_POSIX_PATH_MAX];
+  STATE s;
+  struct stat sb;
+
+  memset (&s, 0, sizeof (s));
+  for (; a; a = a->next)
+  {
+    if (a->type == TYPEMULTIPART)
+    {
+      if (a->encoding != ENC7BIT)
+       a->encoding = ENC7BIT;
+
+      transform_to_7bit (a->parts, fpin);
+    } 
+    else if (mutt_is_message_type(a->type, a->subtype))
+    {
+      mutt_message_to_7bit (a, fpin);
+    }
+    else 
+    {
+      mutt_mktemp (buff);
+      if ((s.fpout = safe_fopen (buff, "w")) == NULL) 
+      {
+       mutt_perror ("fopen");
+       return;
+      }
+      s.fpin = fpin;
+      mutt_decode_attachment (a, &s);
+      fclose (s.fpout);
+      a->d_filename = a->filename;
+      a->filename = safe_strdup (buff);
+      a->unlink = 1;
+      if (stat (a->filename, &sb) == -1) 
+      {
+       mutt_perror ("stat");
+       return;
+      }
+      a->length = sb.st_size;
+
+      mutt_update_encoding (a);
+      if (a->encoding == ENC8BIT)
+       a->encoding = ENCQUOTEDPRINTABLE;
+      else if(a->encoding == ENCBINARY)
+       a->encoding = ENCBASE64;
+    }
+  }
+}
+
+/* determine which Content-Transfer-Encoding to use */
+static void mutt_set_encoding (BODY *b, CONTENT *info)
+{
+  char send_charset[SHORT_STRING];
+
+  if (b->type == TYPETEXT)
+  {
+    char *chsname = mutt_get_body_charset (send_charset, sizeof (send_charset), b);
+    if ((info->lobin && ascii_strncasecmp (chsname, "iso-2022", 8)) || info->linemax > 990 || (info->from && option (OPTENCODEFROM)))
+      b->encoding = ENCQUOTEDPRINTABLE;
+    else if (info->hibin)
+      b->encoding = option (OPTALLOW8BIT) ? ENC8BIT : ENCQUOTEDPRINTABLE;
+    else
+      b->encoding = ENC7BIT;
+  }
+  else if (b->type == TYPEMESSAGE || b->type == TYPEMULTIPART)
+  {
+    if (info->lobin || info->hibin)
+    {
+      if (option (OPTALLOW8BIT) && !info->lobin)
+       b->encoding = ENC8BIT; 
+      else
+       mutt_message_to_7bit (b, NULL);
+    }
+    else
+      b->encoding = ENC7BIT;
+  }
+  else if (b->type == TYPEAPPLICATION && ascii_strcasecmp (b->subtype, "pgp-keys") == 0)
+    b->encoding = ENC7BIT;
+  else
+#if 0
+    if (info->lobin || info->hibin || info->binary || info->linemax > 990
+          || info->cr || (/* option (OPTENCODEFROM) && */ info->from))
+#endif
+  {
+    /* Determine which encoding is smaller  */
+    if (1.33 * (float)(info->lobin+info->hibin+info->ascii) < 
+        3.0 * (float)(info->lobin + info->hibin) + (float)info->ascii)
+      b->encoding = ENCBASE64;
+    else
+      b->encoding = ENCQUOTEDPRINTABLE;
+  }
+#if 0
+  else
+    b->encoding = ENC7BIT;
+#endif
+}
+
+void mutt_stamp_attachment(BODY *a)
+{
+  a->stamp = time(NULL);
+}
+
+/* Get a body's character set */
+
+char *mutt_get_body_charset (char *d, size_t dlen, BODY *b)
+{
+  char *p = NULL;
+
+  if (b && b->type != TYPETEXT)
+    return NULL;
+
+  if (b) 
+    p = mutt_get_parameter ("charset", b->parameter);
+
+  if (p)
+    mutt_canonical_charset (d, dlen, NONULL(p));
+  else
+    strfcpy (d, "us-ascii", dlen);
+
+  return d;
+}
+
+
+/* Assumes called from send mode where BODY->filename points to actual file */
+void mutt_update_encoding (BODY *a)
+{
+  CONTENT *info;
+  char chsbuff[STRING];
+
+  /* override noconv when it's us-ascii */
+  if (mutt_is_us_ascii (mutt_get_body_charset (chsbuff, sizeof (chsbuff), a)))
+    a->noconv = 0;
+
+  if (!a->force_charset && !a->noconv)
+    mutt_delete_parameter ("charset", &a->parameter);
+
+  if ((info = mutt_get_content_info (a->filename, a)) == NULL)
+    return;
+
+  mutt_set_encoding (a, info);
+  mutt_stamp_attachment(a);
+
+  FREE (&a->content);
+  a->content = info;
+
+}
+
+BODY *mutt_make_message_attach (CONTEXT *ctx, HEADER *hdr, int attach_msg)
+{
+  char buffer[LONG_STRING];
+  BODY *body;
+  FILE *fp;
+  int cmflags, chflags;
+  int pgp = WithCrypto? hdr->security : 0;
+
+  if (WithCrypto)
+  {
+    if ((option(OPTMIMEFORWDECODE) || option(OPTFORWDECRYPT)) &&
+        (hdr->security & ENCRYPT)) {
+      if (!crypt_valid_passphrase(hdr->security))
+        return (NULL);
+    }
+  }
+
+  mutt_mktemp (buffer);
+  if ((fp = safe_fopen (buffer, "w+")) == NULL)
+    return NULL;
+
+  body = mutt_new_body ();
+  body->type = TYPEMESSAGE;
+  body->subtype = safe_strdup ("rfc822");
+  body->filename = safe_strdup (buffer);
+  body->unlink = 1;
+  body->use_disp = 0;
+  body->disposition = DISPINLINE;
+
+  mutt_parse_mime_message (ctx, hdr);
+
+  chflags = CH_XMIT;
+  cmflags = 0;
+
+  /* If we are attaching a message, ignore OPTMIMEFORWDECODE */
+  if (!attach_msg && option (OPTMIMEFORWDECODE))
+  {
+    chflags |= CH_MIME | CH_TXTPLAIN;
+    cmflags = M_CM_DECODE | M_CM_CHARCONV;
+    if ((WithCrypto & APPLICATION_PGP))
+      pgp &= ~PGPENCRYPT;
+    if ((WithCrypto & APPLICATION_SMIME))
+      pgp &= ~SMIMEENCRYPT;
+  }
+  else if (WithCrypto
+           && option (OPTFORWDECRYPT) && (hdr->security & ENCRYPT))
+  {
+    if ((WithCrypto & APPLICATION_PGP)
+        && mutt_is_multipart_encrypted (hdr->content))
+    {
+      chflags |= CH_MIME | CH_NONEWLINE;
+      cmflags = M_CM_DECODE_PGP;
+      pgp &= ~PGPENCRYPT;
+    }
+    else if ((WithCrypto & APPLICATION_PGP)
+             && (mutt_is_application_pgp (hdr->content) & PGPENCRYPT))
+    {
+      chflags |= CH_MIME | CH_TXTPLAIN;
+      cmflags = M_CM_DECODE | M_CM_CHARCONV;
+      pgp &= ~PGPENCRYPT;
+    }
+    else if ((WithCrypto & APPLICATION_SMIME)
+              && mutt_is_application_smime (hdr->content) & SMIMEENCRYPT)
+    {
+      chflags |= CH_MIME | CH_TXTPLAIN;
+      cmflags = M_CM_DECODE | M_CM_CHARCONV;
+      pgp &= ~SMIMEENCRYPT;
+    }
+  }
+
+  mutt_copy_message (fp, ctx, hdr, cmflags, chflags);
+  
+  fflush(fp);
+  rewind(fp);
+
+  body->hdr = mutt_new_header();
+  body->hdr->offset = 0;
+  /* we don't need the user headers here */
+  body->hdr->env = mutt_read_rfc822_header(fp, body->hdr, 0, 0);
+  if (WithCrypto)
+    body->hdr->security = pgp;
+  mutt_update_encoding (body);
+  body->parts = body->hdr->content;
+
+  fclose(fp);
+  
+  return (body);
+}
+
+BODY *mutt_make_file_attach (const char *path)
+{
+  BODY *att;
+  CONTENT *info;
+
+  att = mutt_new_body ();
+  att->filename = safe_strdup (path);
+
+  /* Attempt to determine the appropriate content-type based on the filename
+   * suffix.
+   */
+
+#if 0
+  
+  if ((n = mutt_lookup_mime_type (buf, sizeof (buf), xbuf, sizeof (xbuf), path)) != TYPEOTHER 
+      || *xbuf != '\0')
+  {
+    att->type = n;
+    att->subtype = safe_strdup (buf);
+    att->xtype = safe_strdup (xbuf);
+  }
+
+#else
+  
+  mutt_lookup_mime_type (att, path);
+
+#endif
+  
+  if ((info = mutt_get_content_info (path, att)) == NULL)
+  {
+    mutt_free_body (&att);
+    return NULL;
+  }
+
+  if (!att->subtype)
+  {
+    if (info->lobin == 0 || (info->lobin + info->hibin + info->ascii)/ info->lobin >= 10)
+    {
+      /*
+       * Statistically speaking, there should be more than 10% "lobin" 
+       * chars if this is really a binary file...
+       */
+      att->type = TYPETEXT;
+      att->subtype = safe_strdup ("plain");
+    }
+    else
+    {
+      att->type = TYPEAPPLICATION;
+      att->subtype = safe_strdup ("octet-stream");
+    }
+  } 
+
+  mutt_update_encoding (att);
+  return (att);
+}
+
+static int get_toplevel_encoding (BODY *a)
+{
+  int e = ENC7BIT;
+
+  for (; a; a = a->next)
+  {
+    if (a->encoding == ENCBINARY)
+      return (ENCBINARY);
+    else if (a->encoding == ENC8BIT)
+      e = ENC8BIT;
+  }
+
+  return (e);
+}
+
+BODY *mutt_make_multipart (BODY *b)
+{
+  BODY *new;
+
+  new = mutt_new_body ();
+  new->type = TYPEMULTIPART;
+  new->subtype = safe_strdup ("mixed");
+  new->encoding = get_toplevel_encoding (b);
+  mutt_generate_boundary (&new->parameter);
+  new->use_disp = 0;  
+  new->disposition = DISPINLINE;
+  new->parts = b;
+
+  return new;
+}
+
+/* remove the multipart body if it exists */
+BODY *mutt_remove_multipart (BODY *b)
+{
+  BODY *t;
+
+  if (b->parts)
+  {
+    t = b;
+    b = b->parts;
+    t->parts = NULL;
+    mutt_free_body (&t);
+  }
+  return b;
+}
+
+char *mutt_make_date (char *s, size_t len)
+{
+  time_t t = time (NULL);
+  struct tm *l = localtime (&t);
+  time_t tz = mutt_local_tz (t);
+
+  tz /= 60;
+
+  snprintf (s, len,  "Date: %s, %d %s %d %02d:%02d:%02d %+03d%02d\n",
+           Weekdays[l->tm_wday], l->tm_mday, Months[l->tm_mon],
+           l->tm_year + 1900, l->tm_hour, l->tm_min, l->tm_sec,
+           (int) tz / 60, (int) abs (tz) % 60);
+  return (s);
+}
+
+/* wrapper around mutt_write_address() so we can handle very large
+   recipient lists without needing a huge temporary buffer in memory */
+void mutt_write_address_list (ADDRESS *adr, FILE *fp, int linelen, int display)
+{
+  ADDRESS *tmp;
+  char buf[LONG_STRING];
+  int count = 0;
+  int len;
+
+  while (adr)
+  {
+    tmp = adr->next;
+    adr->next = NULL;
+    buf[0] = 0;
+    rfc822_write_address (buf, sizeof (buf), adr, display);
+    len = mutt_strlen (buf);
+    if (count && linelen + len > 74)
+    {
+      fputs ("\n\t", fp);
+      linelen = len + 8; /* tab is usually about 8 spaces... */
+    }
+    else
+    {
+      if (count && adr->mailbox)
+      {
+       fputc (' ', fp);
+       linelen++;
+      }
+      linelen += len;
+    }
+    fputs (buf, fp);
+    adr->next = tmp;
+    if (!adr->group && adr->next && adr->next->mailbox)
+    {
+      linelen++;
+      fputc (',', fp);
+    }
+    adr = adr->next;
+    count++;
+  }
+  fputc ('\n', fp);
+}
+
+/* arbitrary number of elements to grow the array by */
+#define REF_INC 16
+
+#define TrimRef 10
+
+/* need to write the list in reverse because they are stored in reverse order
+ * when parsed to speed up threading
+ */
+void mutt_write_references (LIST *r, FILE *f)
+{
+  LIST **ref = NULL;
+  int refcnt = 0, refmax = 0;
+
+  for ( ; (TrimRef == 0 || refcnt < TrimRef) && r ; r = r->next)
+  {
+    if (refcnt == refmax)
+      safe_realloc (&ref, (refmax += REF_INC) * sizeof (LIST *));
+    ref[refcnt++] = r;
+  }
+
+  while (refcnt-- > 0)
+  {
+    fputc (' ', f);
+    fputs (ref[refcnt]->data, f);
+  }
+
+  FREE (&ref);
+}
+
+/* Note: all RFC2047 encoding should be done outside of this routine, except
+ * for the "real name."  This will allow this routine to be used more than
+ * once, if necessary.
+ * 
+ * Likewise, all IDN processing should happen outside of this routine.
+ *
+ * mode == 1  => "lite" mode (used for edit_hdrs)
+ * mode == 0  => normal mode.  write full header + MIME headers
+ * mode == -1 => write just the envelope info (used for postponing messages)
+ * 
+ * privacy != 0 => will omit any headers which may identify the user.
+ *               Output generated is suitable for being sent through
+ *              anonymous remailer chains.
+ *
+ */
+
+int mutt_write_rfc822_header (FILE *fp, ENVELOPE *env, BODY *attach, 
+                             int mode, int privacy)
+{
+  char buffer[LONG_STRING];
+  char *p;
+  LIST *tmp = env->userhdrs;
+  int has_agent = 0; /* user defined user-agent header field exists */
+  
+#ifdef USE_NNTP
+  if (!option (OPTNEWSSEND))
+#endif
+  if (mode == 0 && !privacy)
+    fputs (mutt_make_date (buffer, sizeof(buffer)), fp);
+
+  /* OPTUSEFROM is not consulted here so that we can still write a From:
+   * field if the user sets it with the `my_hdr' command
+   */
+  if (env->from && !privacy)
+  {
+    buffer[0] = 0;
+    rfc822_write_address (buffer, sizeof (buffer), env->from, 0);
+    fprintf (fp, "From: %s\n", buffer);
+  }
+
+  if (env->to)
+  {
+    fputs ("To: ", fp);
+    mutt_write_address_list (env->to, fp, 4, 0);
+  }
+  else if (mode > 0)
+#ifdef USE_NNTP
+  if (!option (OPTNEWSSEND))
+#endif
+    fputs ("To: \n", fp);
+
+  if (env->cc)
+  {
+    fputs ("Cc: ", fp);
+    mutt_write_address_list (env->cc, fp, 4, 0);
+  }
+  else if (mode > 0)
+#ifdef USE_NNTP
+  if (!option (OPTNEWSSEND))
+#endif
+    fputs ("Cc: \n", fp);
+
+  if (env->bcc)
+  {
+    if(mode != 0 || option(OPTWRITEBCC))
+    {
+      fputs ("Bcc: ", fp);
+      mutt_write_address_list (env->bcc, fp, 5, 0);
+    }
+  }
+  else if (mode > 0)
+#ifdef USE_NNTP
+  if (!option (OPTNEWSSEND))
+#endif
+    fputs ("Bcc: \n", fp);
+
+#ifdef USE_NNTP
+  if (env->newsgroups)
+    fprintf (fp, "Newsgroups: %s\n", env->newsgroups);
+  else if (mode == 1 && option (OPTNEWSSEND))
+    fputs ("Newsgroups: \n", fp);
+
+  if (env->followup_to)
+    fprintf (fp, "Followup-To: %s\n", env->followup_to);
+  else if (mode == 1 && option (OPTNEWSSEND))
+    fputs ("Followup-To: \n", fp);
+
+  if (env->x_comment_to)
+    fprintf (fp, "X-Comment-To: %s\n", env->x_comment_to);
+  else if (mode == 1 && option (OPTNEWSSEND) && option (OPTXCOMMENTTO))
+    fputs ("X-Comment-To: \n", fp);
+#endif
+
+  if (env->subject)
+    fprintf (fp, "Subject: %s\n", env->subject);
+  else if (mode == 1)
+    fputs ("Subject: \n", fp);
+
+  /* save message id if the user has set it */
+  if (env->message_id && !privacy)
+    fprintf (fp, "Message-ID: %s\n", env->message_id);
+
+  if (env->reply_to)
+  {
+    fputs ("Reply-To: ", fp);
+    mutt_write_address_list (env->reply_to, fp, 10, 0);
+  }
+  else if (mode > 0)
+    fputs ("Reply-To: \n", fp);
+
+  if (env->mail_followup_to)
+#ifdef USE_NNTP
+  if (!option (OPTNEWSSEND))
+#endif
+  {
+    fputs ("Mail-Followup-To: ", fp);
+    mutt_write_address_list (env->mail_followup_to, fp, 18, 0);
+  }
+
+  if (mode <= 0)
+  {
+    if (env->references)
+    {
+      fputs ("References:", fp);
+      mutt_write_references (env->references, fp);
+      fputc('\n', fp);
+    }
+
+    /* Add the MIME headers */
+    fputs ("Mime-Version: 1.0\n", fp);
+    mutt_write_mime_header (attach, fp);
+  }
+
+  if (env->in_reply_to)
+  {
+    fputs ("In-Reply-To:", fp);
+    mutt_write_references (env->in_reply_to, fp);
+    fputc ('\n', fp);
+  }
+  
+  /* Add any user defined headers */
+  for (; tmp; tmp = tmp->next)
+  {
+    if ((p = strchr (tmp->data, ':')))
+    {
+      p++; SKIPWS (p);
+      if (!*p)         continue;  /* don't emit empty fields. */
+
+      /* check to see if the user has overridden the user-agent field */
+      if (!ascii_strncasecmp ("user-agent", tmp->data, 10))
+      {
+       has_agent = 1;
+       if (privacy)
+         continue;
+      }
+
+      fputs (tmp->data, fp);
+      fputc ('\n', fp);
+    }
+  }
+
+  if (mode == 0 && !privacy && option (OPTXMAILER) && !has_agent)
+  {
+    /* Add a vanity header */
+    fprintf (fp, "User-Agent: Mutt/%s\n", MUTT_VERSION);
+  }
+
+  return (ferror (fp) == 0 ? 0 : -1);
+}
+
+static void encode_headers (LIST *h)
+{
+  char *tmp;
+  char *p;
+  int i;
+  
+  for (; h; h = h->next)
+  {
+    if (!(p = strchr (h->data, ':')))
+      continue;
+
+    i = p - h->data;
+    ++p; SKIPWS (p);
+    tmp = safe_strdup (p);
+
+    if (!tmp)
+      continue;
+    
+    rfc2047_encode_string (&tmp);
+    safe_realloc (&h->data, mutt_strlen (h->data) + 2 + mutt_strlen (tmp) + 1);
+
+    sprintf (h->data + i, ": %s", NONULL (tmp));  /* __SPRINTF_CHECKED__ */
+    
+    FREE (&tmp);
+  }
+}
+
+const char *mutt_fqdn(short may_hide_host)
+{
+  char *p = NULL, *q;
+  
+  if(Fqdn && Fqdn[0] != '@')
+  {
+    p = Fqdn;
+    
+    if(may_hide_host && option(OPTHIDDENHOST))
+    {
+      if((p = strchr(Fqdn, '.')))
+       p++;
+
+      /* sanity check: don't hide the host if
+       * the fqdn is something like detebe.org.
+       */
+      
+      if(!p || !(q = strchr(p, '.')))
+       p = Fqdn;
+    }
+  }
+
+  return p;
+}
+
+char *mutt_gen_msgid (void)
+{
+  char buf[SHORT_STRING];
+  time_t now;
+  struct tm *tm;
+  const char *fqdn;
+
+  now = time (NULL);
+  tm = gmtime (&now);
+  if(!(fqdn = mutt_fqdn(0)))
+    fqdn = NONULL(Hostname);
+
+  snprintf (buf, sizeof (buf), "<%d%02d%02d%02d%02d%02d.G%c%d@%s>",
+           tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour,
+           tm->tm_min, tm->tm_sec, MsgIdPfx, getpid (), fqdn);
+  MsgIdPfx = (MsgIdPfx == 'Z') ? 'A' : MsgIdPfx + 1;
+  return (safe_strdup (buf));
+}
+
+static RETSIGTYPE alarm_handler (int sig)
+{
+  SigAlrm = 1;
+}
+
+/* invoke sendmail in a subshell
+   path        (in)            path to program to execute
+   args        (in)            arguments to pass to program
+   msg (in)            temp file containing message to send
+   tempfile (out)      if sendmail is put in the background, this points
+                       to the temporary file containing the stdout of the
+                       child process */
+static int
+send_msg (const char *path, char **args, const char *msg, char **tempfile)
+{
+  sigset_t set;
+  int fd, st;
+  pid_t pid, ppid;
+
+  mutt_block_signals_system ();
+
+  sigemptyset (&set);
+  /* we also don't want to be stopped right now */
+  sigaddset (&set, SIGTSTP);
+  sigprocmask (SIG_BLOCK, &set, NULL);
+
+  if (SendmailWait >= 0)
+  {
+    char tmp[_POSIX_PATH_MAX];
+
+    mutt_mktemp (tmp);
+    *tempfile = safe_strdup (tmp);
+  }
+
+  if ((pid = fork ()) == 0)
+  {
+    struct sigaction act, oldalrm;
+
+    /* save parent's ID before setsid() */
+    ppid = getppid ();
+
+    /* we want the delivery to continue even after the main process dies,
+     * so we put ourselves into another session right away
+     */
+    setsid ();
+  
+    /* next we close all open files */
+#if defined(OPEN_MAX)
+    for (fd = 0; fd < OPEN_MAX; fd++)
+      close (fd);
+#elif defined(_POSIX_OPEN_MAX)
+    for (fd = 0; fd < _POSIX_OPEN_MAX; fd++)
+      close (fd);
+#else
+    close (0);
+    close (1);
+    close (2);
+#endif
+
+    /* now the second fork() */
+    if ((pid = fork ()) == 0)
+    {
+      /* "msg" will be opened as stdin */
+      if (open (msg, O_RDONLY, 0) < 0)
+      {
+       unlink (msg);
+       _exit (S_ERR);
+      }
+      unlink (msg);
+
+      if (SendmailWait >= 0)
+      {
+       /* *tempfile will be opened as stdout */
+       if (open (*tempfile, O_WRONLY | O_APPEND | O_CREAT | O_EXCL, 0600) < 0)
+         _exit (S_ERR);
+       /* redirect stderr to *tempfile too */
+       if (dup (1) < 0)
+         _exit (S_ERR);
+      }
+      else 
+      {
+       if (open ("/dev/null", O_WRONLY | O_APPEND) < 0)        /* stdout */
+         _exit (S_ERR);
+       if (open ("/dev/null", O_RDWR | O_APPEND) < 0)          /* stderr */
+         _exit (S_ERR);
+      }
+
+      execv (path, args);
+      _exit (S_ERR);
+    }
+    else if (pid == -1)
+    {
+      unlink (msg);
+      FREE (tempfile);
+      _exit (S_ERR);
+    }
+
+    /* SendmailWait > 0: interrupt waitpid() after SendmailWait seconds
+     * SendmailWait = 0: wait forever
+     * SendmailWait < 0: don't wait
+     */
+    if (SendmailWait > 0)
+    {
+      SigAlrm = 0;
+      act.sa_handler = alarm_handler;
+#ifdef SA_INTERRUPT
+      /* need to make sure waitpid() is interrupted on SIGALRM */
+      act.sa_flags = SA_INTERRUPT;
+#else
+      act.sa_flags = 0;
+#endif
+      sigemptyset (&act.sa_mask);
+      sigaction (SIGALRM, &act, &oldalrm);
+      alarm (SendmailWait);
+    }
+    else if (SendmailWait < 0)
+      _exit (0xff & EX_OK);
+
+    if (waitpid (pid, &st, 0) > 0)
+    {
+      st = WIFEXITED (st) ? WEXITSTATUS (st) : S_ERR;
+      if (SendmailWait && st == (0xff & EX_OK))
+      {
+       unlink (*tempfile); /* no longer needed */
+       FREE (tempfile);
+      }
+    }
+    else
+    {
+      st = (SendmailWait > 0 && errno == EINTR && SigAlrm) ?
+             S_BKG : S_ERR;
+      if (SendmailWait > 0)
+      {
+       unlink (*tempfile);
+       FREE (tempfile);
+      }
+    }
+
+    /* reset alarm; not really needed, but... */
+    alarm (0);
+    sigaction (SIGALRM, &oldalrm, NULL);
+
+    if (kill (ppid, 0) == -1 && errno == ESRCH)
+    {
+      /* the parent is already dead */
+      unlink (*tempfile);
+      FREE (tempfile);
+    }
+
+    _exit (st);
+  }
+
+  sigprocmask (SIG_UNBLOCK, &set, NULL);
+
+  if (pid != -1 && waitpid (pid, &st, 0) > 0)
+    st = WIFEXITED (st) ? WEXITSTATUS (st) : S_ERR; /* return child status */
+  else
+    st = S_ERR;        /* error */
+
+  mutt_unblock_signals_system (1);
+
+  return (st);
+}
+
+static char **
+add_args (char **args, size_t *argslen, size_t *argsmax, ADDRESS *addr)
+{
+  for (; addr; addr = addr->next)
+  {
+    /* weed out group mailboxes, since those are for display only */
+    if (addr->mailbox && !addr->group)
+    {
+      if (*argslen == *argsmax)
+       safe_realloc (&args, (*argsmax += 5) * sizeof (char *));
+      args[(*argslen)++] = addr->mailbox;
+    }
+  }
+  return (args);
+}
+
+static char **
+add_option (char **args, size_t *argslen, size_t *argsmax, char *s)
+{
+  if (*argslen == *argsmax)
+    safe_realloc (&args, (*argsmax += 5) * sizeof (char *));
+  args[(*argslen)++] = s;
+  return (args);
+}
+
+static const char *
+strsysexit(int e)
+{
+  int i;
+  
+  for(i = 0; sysexits_h[i].str; i++)
+  {
+    if(e == sysexits_h[i].v)
+      break;
+  }
+  
+  return sysexits_h[i].str;
+}
+
+
+static int
+mutt_invoke_sendmail (ADDRESS *from,   /* the sender */
+                ADDRESS *to, ADDRESS *cc, ADDRESS *bcc, /* recips */
+                const char *msg, /* file containing message */
+                int eightbit) /* message contains 8bit chars */
+{
+  char *ps = NULL, *path = NULL, *s = NULL, *childout = NULL;
+  char **args = NULL;
+  size_t argslen = 0, argsmax = 0;
+  int i;
+
+#ifdef USE_NNTP
+  if (option (OPTNEWSSEND))
+  {
+    char cmd[LONG_STRING];
+
+    mutt_FormatString (cmd, sizeof (cmd), NONULL (Inews), nntp_format_str, 0, 0);
+    if (!*cmd)
+    {
+      i = nntp_post (msg);
+      unlink (msg);
+      return i;
+    }
+
+    s = safe_strdup (cmd);
+  }
+  else
+#endif
+    s = safe_strdup (Sendmail);
+
+  ps = s;
+  i = 0;
+  while ((ps = strtok (ps, " ")))
+  {
+    if (argslen == argsmax)
+      safe_realloc (&args, sizeof (char *) * (argsmax += 5));
+
+    if (i)
+      args[argslen++] = ps;
+    else
+    {
+      path = safe_strdup (ps);
+      ps = strrchr (ps, '/');
+      if (ps)
+       ps++;
+      else
+       ps = path;
+      args[argslen++] = ps;
+    }
+    ps = NULL;
+    i++;
+  }
+
+#ifdef USE_NNTP
+  if (!option (OPTNEWSSEND))
+  {
+#endif
+  if (eightbit && option (OPTUSE8BITMIME))
+    args = add_option (args, &argslen, &argsmax, "-B8BITMIME");
+
+  if (option (OPTENVFROM) && from && !from->next)
+  {
+    args = add_option (args, &argslen, &argsmax, "-f");
+    args = add_args   (args, &argslen, &argsmax, from);
+  }
+  if (DsnNotify)
+  {
+    args = add_option (args, &argslen, &argsmax, "-N");
+    args = add_option (args, &argslen, &argsmax, DsnNotify);
+  }
+  if (DsnReturn)
+  {
+    args = add_option (args, &argslen, &argsmax, "-R");
+    args = add_option (args, &argslen, &argsmax, DsnReturn);
+  }
+  args = add_option (args, &argslen, &argsmax, "--");
+  args = add_args (args, &argslen, &argsmax, to);
+  args = add_args (args, &argslen, &argsmax, cc);
+  args = add_args (args, &argslen, &argsmax, bcc);
+#ifdef USE_NNTP
+  }
+#endif
+
+  if (argslen == argsmax)
+    safe_realloc (&args, sizeof (char *) * (++argsmax));
+  
+  args[argslen++] = NULL;
+
+  if ((i = send_msg (path, args, msg, &childout)) != (EX_OK & 0xff))
+  {
+    if (i != S_BKG)
+    {
+      const char *e = strsysexit (i);
+
+      e = strsysexit (i);
+      mutt_error (_("Error sending message, child exited %d (%s)."), i, NONULL (e));
+      if (childout)
+      {
+       struct stat st;
+       
+       if (stat (childout, &st) == 0 && st.st_size > 0)
+         mutt_do_pager (_("Output of the delivery process"), childout, 0, NULL);
+      }
+    }
+  }
+  else
+    unlink (childout);
+
+  FREE (&childout);
+  FREE (&path);
+  FREE (&s);
+  FREE (&args);
+
+  if (i == (EX_OK & 0xff))
+    i = 0;
+  else if (i == S_BKG)
+    i = 1;
+  else
+    i = -1;
+  return (i);
+}
+
+int
+mutt_invoke_mta (ADDRESS *from,        /* the sender */
+                ADDRESS *to, ADDRESS *cc, ADDRESS *bcc, /* recips */
+                const char *msg, /* file containing message */
+                int eightbit) /* message contains 8bit chars */
+{
+#ifdef USE_LIBESMTP
+  if (SmtpHost)
+    return mutt_invoke_libesmtp(from, to, cc, bcc, msg, eightbit);
+#endif
+  
+  return mutt_invoke_sendmail(from, to, cc, bcc, msg, eightbit);
+}
+
+/* appends string 'b' to string 'a', and returns the pointer to the new
+   string. */
+char *mutt_append_string (char *a, const char *b)
+{
+  size_t la = mutt_strlen (a);
+  safe_realloc (&a, la + mutt_strlen (b) + 1);
+  strcpy (a + la, b);  /* __STRCPY_CHECKED__ */
+  return (a);
+}
+
+/* returns 1 if char `c' needs to be quoted to protect from shell
+   interpretation when executing commands in a subshell */
+#define INVALID_CHAR(c) (!isalnum ((unsigned char)c) && !strchr ("@.+-_,:", c))
+
+/* returns 1 if string `s' contains characters which could cause problems
+   when used on a command line to execute a command */
+int mutt_needs_quote (const char *s)
+{
+  while (*s)
+  {
+    if (INVALID_CHAR (*s))
+      return 1;
+    s++;
+  }
+  return 0;
+}
+
+/* Quote a string to prevent shell escapes when this string is used on the
+   command line to send mail. */
+char *mutt_quote_string (const char *s)
+{
+  char *r, *pr;
+  size_t rlen;
+
+  rlen = mutt_strlen (s) + 3;
+  pr = r = (char *) safe_malloc (rlen);
+  *pr++ = '"';
+  while (*s)
+  {
+    if (INVALID_CHAR (*s))
+    {
+      size_t o = pr - r;
+      safe_realloc (&r, ++rlen);
+      pr = r + o;
+      *pr++ = '\\';
+    }
+    *pr++ = *s++;
+  }
+  *pr++ = '"';
+  *pr = 0;
+  return (r);
+}
+
+/* For postponing (!final) do the necessary encodings only */
+void mutt_prepare_envelope (ENVELOPE *env, int final)
+{
+  char buffer[LONG_STRING];
+
+  if (final)
+  {
+    if (env->bcc && !(env->to || env->cc))
+    {
+      /* some MTA's will put an Apparently-To: header field showing the Bcc:
+       * recipients if there is no To: or Cc: field, so attempt to suppress
+       * it by using an empty To: field.
+       */
+      env->to = rfc822_new_address ();
+      env->to->group = 1;
+      env->to->next = rfc822_new_address ();
+
+      buffer[0] = 0;
+      rfc822_cat (buffer, sizeof (buffer), "undisclosed-recipients",
+                 RFC822Specials);
+
+      env->to->mailbox = safe_strdup (buffer);
+    }
+
+    mutt_set_followup_to (env);
+
+    if (!env->message_id)
+      env->message_id = mutt_gen_msgid ();
+  }
+
+  /* Take care of 8-bit => 7-bit conversion. */
+  rfc2047_encode_adrlist (env->to, "To");
+  rfc2047_encode_adrlist (env->cc, "Cc");
+  rfc2047_encode_adrlist (env->from, "From");
+  rfc2047_encode_adrlist (env->mail_followup_to, "Mail-Followup-To");
+  rfc2047_encode_adrlist (env->reply_to, "Reply-To");
+
+  if (env->subject)
+#ifdef USE_NNTP
+  if (!option (OPTNEWSSEND) || option (OPTMIMESUBJECT))
+#endif
+  {
+    rfc2047_encode_string (&env->subject);
+  }
+  encode_headers (env->userhdrs);
+}
+
+void mutt_unprepare_envelope (ENVELOPE *env)
+{
+  LIST *item;
+
+  for (item = env->userhdrs; item; item = item->next)
+    rfc2047_decode (&item->data);
+
+  rfc822_free_address (&env->mail_followup_to);
+
+  /* back conversions */
+  rfc2047_decode_adrlist (env->to);
+  rfc2047_decode_adrlist (env->cc);
+  rfc2047_decode_adrlist (env->from);
+  rfc2047_decode_adrlist (env->reply_to);
+  rfc2047_decode (&env->subject);
+}
+
+static int _mutt_bounce_message (FILE *fp, HEADER *h, ADDRESS *to, const char *resent_from,
+                                 ADDRESS *env_from)
+{
+  int i, ret = 0;
+  FILE *f;
+  char date[SHORT_STRING], tempfile[_POSIX_PATH_MAX];
+  MESSAGE *msg = NULL;
+
+  if (!h)
+  {
+         /* Try to bounce each message out, aborting if we get any failures. */
+    for (i=0; i<Context->msgcount; i++)
+      if (Context->hdrs[i]->tagged)
+        ret |= _mutt_bounce_message (fp, Context->hdrs[i], to, resent_from, env_from);
+    return ret;
+  }
+
+  /* If we failed to open a message, return with error */
+  if (!fp && (msg = mx_open_message (Context, h->msgno)) == NULL)
+    return -1;
+
+  if (!fp) fp = msg->fp;
+
+  mutt_mktemp (tempfile);
+  if ((f = safe_fopen (tempfile, "w")) != NULL)
+  {
+    int ch_flags = CH_XMIT | CH_NONEWLINE | CH_NOQFROM;
+    
+    if (!option (OPTBOUNCEDELIVERED))
+      ch_flags |= CH_WEED_DELIVERED;
+    
+    fseek (fp, h->offset, 0);
+    fprintf (f, "Resent-From: %s", resent_from);
+    fprintf (f, "\nResent-%s", mutt_make_date (date, sizeof(date)));
+    fprintf (f, "Resent-Message-ID: %s\n", mutt_gen_msgid());
+    fputs ("Resent-To: ", f);
+    mutt_write_address_list (to, f, 11, 0);
+    mutt_copy_header (fp, h, f, ch_flags, NULL);
+    fputc ('\n', f);
+    mutt_copy_bytes (fp, f, h->content->length);
+    fclose (f);
+
+    ret = mutt_invoke_mta (env_from, to, NULL, NULL, tempfile,
+                               h->content->encoding == ENC8BIT);
+  }
+
+  if (msg)
+    mx_close_message (&msg);
+
+  return ret;
+}
+
+int mutt_bounce_message (FILE *fp, HEADER *h, ADDRESS *to)
+{
+  ADDRESS *from;
+  const char *fqdn = mutt_fqdn (1);
+  char resent_from[STRING];
+  int ret;
+  char *err;
+  
+  resent_from[0] = '\0';
+  from = mutt_default_from ();
+
+  if (fqdn)
+    rfc822_qualify (from, fqdn);
+
+  rfc2047_encode_adrlist (from, "Resent-From");
+  if (mutt_addrlist_to_idna (from, &err))
+  {
+    mutt_error (_("Bad IDN %s while preparing resent-from."),
+               err);
+    return -1;
+  }
+  rfc822_write_address (resent_from, sizeof (resent_from), from, 0);
+
+#ifdef USE_NNTP
+  unset_option (OPTNEWSSEND);
+#endif
+
+  ret = _mutt_bounce_message (fp, h, to, resent_from, from);
+
+  rfc822_free_address (&from);
+
+  return ret;
+}
+
+
+/* given a list of addresses, return a list of unique addresses */
+ADDRESS *mutt_remove_duplicates (ADDRESS *addr)
+{
+  ADDRESS *top = NULL;
+  ADDRESS *tmp;
+  
+  if ((top = addr) == NULL)
+    return (NULL);
+  addr = addr->next;
+  top->next = NULL;
+  while (addr)
+  {
+    tmp = top;
+    do {
+      if (addr->mailbox && tmp->mailbox &&
+         !ascii_strcasecmp (addr->mailbox, tmp->mailbox))
+      {
+       /* duplicate address, just ignore it */
+       tmp = addr;
+       addr = addr->next;
+       tmp->next = NULL;
+       rfc822_free_address (&tmp);
+      }
+      else if (!tmp->next)
+      {
+       /* unique address.  add it to the list */
+       tmp->next = addr;
+       addr = addr->next;
+       tmp = tmp->next;
+       tmp->next = NULL;
+       tmp = NULL; /* so we exit the loop */
+      }
+      else
+       tmp = tmp->next;
+    } while (tmp);
+  }
+
+  return (top);
+}
+
+static void set_noconv_flags (BODY *b, short flag)
+{
+  for(; b; b = b->next)
+  {
+    if (b->type == TYPEMESSAGE || b->type == TYPEMULTIPART)
+      set_noconv_flags (b->parts, flag);
+    else if (b->type == TYPETEXT && b->noconv)
+    {
+      if (flag)
+       mutt_set_parameter ("x-mutt-noconv", "yes", &b->parameter);
+      else
+       mutt_delete_parameter ("x-mutt-noconv", &b->parameter);
+    }
+  }
+}
+
+int mutt_write_fcc (const char *path, HEADER *hdr, const char *msgid, int post, char *fcc)
+{
+  CONTEXT f;
+  MESSAGE *msg;
+  char tempfile[_POSIX_PATH_MAX];
+  FILE *tempfp = NULL;
+  int r;
+
+  if (post)
+    set_noconv_flags (hdr->content, 1);
+  
+  if (mx_open_mailbox (path, M_APPEND | M_QUIET, &f) == NULL)
+  {
+    dprint (1, (debugfile, "mutt_write_fcc(): unable to open mailbox %s in append-mode, aborting.\n",
+               path));
+    return (-1);
+  }
+
+  /* We need to add a Content-Length field to avoid problems where a line in
+   * the message body begins with "From "   
+   */
+  if (f.magic == M_MMDF || f.magic == M_MBOX)
+  {
+    mutt_mktemp (tempfile);
+    if ((tempfp = safe_fopen (tempfile, "w+")) == NULL)
+    {
+      mutt_perror (tempfile);
+      mx_close_mailbox (&f, NULL);
+      return (-1);
+    }
+  }
+
+  hdr->read = !post; /* make sure to put it in the `cur' directory (maildir) */
+  if ((msg = mx_open_new_message (&f, hdr, M_ADD_FROM)) == NULL)
+  {
+    mx_close_mailbox (&f, NULL);
+    return (-1);
+  }
+
+  /* post == 1 => postpone message. Set mode = -1 in mutt_write_rfc822_header()
+   * post == 0 => Normal mode. Set mode = 0 in mutt_write_rfc822_header() 
+   * */
+  mutt_write_rfc822_header (msg->fp, hdr->env, hdr->content, post ? -post : 0, 0);
+
+  /* (postponment) if this was a reply of some sort, <msgid> contians the
+   * Message-ID: of message replied to.  Save it using a special X-Mutt-
+   * header so it can be picked up if the message is recalled at a later
+   * point in time.  This will allow the message to be marked as replied if
+   * the same mailbox is still open.
+   */
+  if (post && msgid)
+    fprintf (msg->fp, "X-Mutt-References: %s\n", msgid);
+  
+  /* (postponment) save the Fcc: using a special X-Mutt- header so that
+   * it can be picked up when the message is recalled 
+   */
+  if (post && fcc)
+    fprintf (msg->fp, "X-Mutt-Fcc: %s\n", fcc);
+  fprintf (msg->fp, "Status: RO\n");
+
+
+
+  /* (postponment) if the mail is to be signed or encrypted, save this info */
+  if ((WithCrypto & APPLICATION_PGP)
+      && post && (hdr->security & APPLICATION_PGP))
+  {
+    fputs ("X-Mutt-PGP: ", msg->fp);
+    if (hdr->security & ENCRYPT) 
+      fputc ('E', msg->fp);
+    if (hdr->security & SIGN)
+    {
+      fputc ('S', msg->fp);
+      if (PgpSignAs && *PgpSignAs)
+        fprintf (msg->fp, "<%s>", PgpSignAs);
+    }
+    fputc ('\n', msg->fp);
+  }
+
+  /* (postponment) if the mail is to be signed or encrypted, save this info */
+  if ((WithCrypto & APPLICATION_SMIME)
+      && post && (hdr->security & APPLICATION_SMIME))
+  {
+    fputs ("X-Mutt-SMIME: ", msg->fp);
+    if (hdr->security & ENCRYPT) {
+       fputc ('E', msg->fp);
+       if (SmimeCryptAlg && *SmimeCryptAlg)
+           fprintf (msg->fp, "C<%s>", SmimeCryptAlg);
+    }
+    if (hdr->security & SIGN) {
+       fputc ('S', msg->fp);
+       if (SmimeDefaultKey && *SmimeDefaultKey)
+           fprintf (msg->fp, "<%s>", SmimeDefaultKey);
+    }
+    fputc ('\n', msg->fp);
+  }
+
+#ifdef MIXMASTER
+  /* (postponement) if the mail is to be sent through a mixmaster 
+   * chain, save that information
+   */
+  
+  if (post && hdr->chain && hdr->chain)
+  {
+    LIST *p;
+
+    fputs ("X-Mutt-Mix:", msg->fp);
+    for (p = hdr->chain; p; p = p->next)
+      fprintf (msg->fp, " %s", (char *) p->data);
+    
+    fputc ('\n', msg->fp);
+  }
+#endif    
+
+  if (tempfp)
+  {
+    char sasha[LONG_STRING];
+    int lines = 0;
+
+    mutt_write_mime_body (hdr->content, tempfp);
+
+    /* make sure the last line ends with a newline.  Emacs doesn't ensure
+     * this will happen, and it can cause problems parsing the mailbox   
+     * later.
+     */
+    fseek (tempfp, -1, 2);
+    if (fgetc (tempfp) != '\n')
+    {
+      fseek (tempfp, 0, 2);
+      fputc ('\n', tempfp);
+    }
+
+    fflush (tempfp);
+    if (ferror (tempfp))
+    {
+      dprint (1, (debugfile, "mutt_write_fcc(): %s: write failed.\n", tempfile));
+      fclose (tempfp);
+      unlink (tempfile);
+      mx_commit_message (msg, &f);     /* XXX - really? */
+      mx_close_message (&msg);
+      mx_close_mailbox (&f, NULL);
+      return -1;
+    }
+
+    /* count the number of lines */
+    rewind (tempfp);
+    while (fgets (sasha, sizeof (sasha), tempfp) != NULL)
+      lines++;
+    fprintf (msg->fp, "Content-Length: %ld\n", (long) ftell (tempfp));
+    fprintf (msg->fp, "Lines: %d\n\n", lines);
+
+    /* copy the body and clean up */
+    rewind (tempfp);
+    r = mutt_copy_stream (tempfp, msg->fp);
+    if (fclose (tempfp) != 0)
+      r = -1;
+    /* if there was an error, leave the temp version */
+    if (!r)
+      unlink (tempfile);
+  }
+  else
+  {
+    fputc ('\n', msg->fp); /* finish off the header */
+    r = mutt_write_mime_body (hdr->content, msg->fp);
+  }
+
+  if (mx_commit_message (msg, &f) != 0)
+    r = -1;
+  mx_close_message (&msg);
+  mx_close_mailbox (&f, NULL);
+
+  if (post)
+    set_noconv_flags (hdr->content, 0);
+  
+  return r;
+}
diff --git a/sha1.c b/sha1.c
new file mode 100644 (file)
index 0000000..9196664
--- /dev/null
+++ b/sha1.c
@@ -0,0 +1,190 @@
+/*
+ SHA-1 in C
+
+ By Steve Reid <steve@edmweb.com>, with small changes to make it
+ fit into mutt by Thomas Roessler <roessler@does-not-exist.org>.
+
+ 100% Public Domain.
+
+ Test Vectors (from FIPS PUB 180-1)
+ "abc"
+ A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D
+ "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+ 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1
+ A million repetitions of "a"
+ 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
+*/
+
+#define SHA1HANDSOFF
+
+#include <string.h>
+
+#include "sha1.h"
+
+#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
+
+/* blk0() and blk() perform the initial expand. */
+/* I got the idea of expanding during the round function from SSLeay */
+#ifdef WORDS_BIGENDIAN
+#  define blk0(i) block->l[i]
+#else
+#  define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \
+                   |(rol(block->l[i],8)&0x00FF00FF))
+#endif
+
+#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \
+    ^block->l[(i+2)&15]^block->l[i&15],1))
+
+/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */
+#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);
+#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30);
+#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30);
+#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30);
+#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30);
+
+
+/* Hash a single 512-bit block. This is the core of the algorithm. */
+
+void SHA1Transform(uint32_t state[5], const unsigned char buffer[64])
+{
+uint32_t a, b, c, d, e;
+typedef union {
+    unsigned char c[64];
+    uint32_t l[16];
+} CHAR64LONG16;
+#ifdef SHA1HANDSOFF
+CHAR64LONG16 block[1];  /* use array to appear as a pointer */
+    memcpy(block, buffer, 64);
+#else
+    /* The following had better never be used because it causes the
+     * pointer-to-const buffer to be cast into a pointer to non-const.
+     * And the result is written through.  I threw a "const" in, hoping
+     * this will cause a diagnostic.
+     */
+CHAR64LONG16* block = (const CHAR64LONG16*)buffer;
+#endif
+    /* Copy context->state[] to working vars */
+    a = state[0];
+    b = state[1];
+    c = state[2];
+    d = state[3];
+    e = state[4];
+    /* 4 rounds of 20 operations each. Loop unrolled. */
+    R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
+    R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
+    R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
+    R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
+    R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
+    R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
+    R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
+    R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
+    R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
+    R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
+    R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
+    R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
+    R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
+    R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
+    R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
+    R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
+    R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
+    R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
+    R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
+    R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
+    /* Add the working vars back into context.state[] */
+    state[0] += a;
+    state[1] += b;
+    state[2] += c;
+    state[3] += d;
+    state[4] += e;
+    /* Wipe variables */
+    a = b = c = d = e = 0;
+#ifdef SHA1HANDSOFF
+    memset(block, '\0', sizeof(block));
+#endif
+}
+
+
+/* SHA1Init - Initialize new context */
+
+void SHA1Init(SHA1_CTX* context)
+{
+    /* SHA1 initialization constants */
+    context->state[0] = 0x67452301;
+    context->state[1] = 0xEFCDAB89;
+    context->state[2] = 0x98BADCFE;
+    context->state[3] = 0x10325476;
+    context->state[4] = 0xC3D2E1F0;
+    context->count[0] = context->count[1] = 0;
+}
+
+
+/* Run your data through this. */
+
+void SHA1Update(SHA1_CTX* context, const unsigned char* data, uint32_t len)
+{
+uint32_t i;
+uint32_t j;
+
+    j = context->count[0];
+    if ((context->count[0] += len << 3) < j)
+       context->count[1]++;
+    context->count[1] += (len>>29);
+    j = (j >> 3) & 63;
+    if ((j + len) > 63) {
+        memcpy(&context->buffer[j], data, (i = 64-j));
+        SHA1Transform(context->state, context->buffer);
+        for ( ; i + 63 < len; i += 64) {
+            SHA1Transform(context->state, &data[i]);
+        }
+        j = 0;
+    }
+    else i = 0;
+    memcpy(&context->buffer[j], &data[i], len - i);
+}
+
+
+/* Add padding and return the message digest. */
+
+void SHA1Final(unsigned char digest[20], SHA1_CTX* context)
+{
+unsigned i;
+unsigned char finalcount[8];
+unsigned char c;
+
+#if 0  /* untested "improvement" by DHR */
+    /* Convert context->count to a sequence of bytes
+     * in finalcount.  Second element first, but
+     * big-endian order within element.
+     * But we do it all backwards.
+     */
+    unsigned char *fcp = &finalcount[8];
+
+    for (i = 0; i < 2; i++)
+    {
+       uint32_t t = context->count[i];
+       int j;
+
+       for (j = 0; j < 4; t >>= 8, j++)
+           *--fcp = (unsigned char) t
+    }
+#else
+    for (i = 0; i < 8; i++) {
+        finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)]
+         >> ((3-(i & 3)) * 8) ) & 255);  /* Endian independent */
+    }
+#endif
+    c = 0200;
+    SHA1Update(context, &c, 1);
+    while ((context->count[0] & 504) != 448) {
+       c = 0000;
+        SHA1Update(context, &c, 1);
+    }
+    SHA1Update(context, finalcount, 8);  /* Should cause a SHA1Transform() */
+    for (i = 0; i < 20; i++) {
+        digest[i] = (unsigned char)
+         ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
+    }
+    /* Wipe variables */
+    memset(context, '\0', sizeof(*context));
+    memset(&finalcount, '\0', sizeof(finalcount));
+}
diff --git a/sha1.h b/sha1.h
new file mode 100644 (file)
index 0000000..8381955
--- /dev/null
+++ b/sha1.h
@@ -0,0 +1,50 @@
+/*
+ SHA-1 in C
+
+ By Steve Reid <steve@edmweb.com>, with small changes to make it
+ fit into mutt by Thomas Roessler <roessler@does-not-exist.org>.
+
+*/
+
+#ifndef _SHA1_H
+# define _SHA1_H
+
+#include "config.h"
+
+#include <sys/types.h>
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+
+#ifndef HAVE_UINT32_T
+#  if SIZEOF_INT == 4
+typedef unsigned int uint32_t;
+#  elif SIZEOF_LONG == 4
+typedef unsigned long uint32_t;
+#  endif
+#endif
+
+typedef struct {
+  uint32_t state[5];
+  uint32_t count[2];
+  unsigned char buffer[64];
+} SHA1_CTX;
+
+void SHA1Transform(uint32_t state[5], const unsigned char buffer[64]);
+void SHA1Init(SHA1_CTX* context);
+void SHA1Update(SHA1_CTX* context, const unsigned char* data, uint32_t len);
+void SHA1Final(unsigned char digest[20], SHA1_CTX* context);
+
+# define SHA1_Transform SHA1Transform
+# define SHA1_Init SHA1Init
+# define SHA1_Update SHA1Update
+# define SHA1_Final SHA1Final
+
+# define SHA_DIGEST_LENGTH 20
+
+#endif
+
diff --git a/signal.c b/signal.c
new file mode 100644 (file)
index 0000000..e641737
--- /dev/null
+++ b/signal.c
@@ -0,0 +1,244 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_curses.h"
+
+#include <signal.h>
+#include <string.h>
+#include <sys/wait.h>
+#include <errno.h>
+
+static sigset_t Sigset;
+static sigset_t SigsetSys;
+static struct sigaction SysOldInt;
+static struct sigaction SysOldQuit;
+static int IsEndwin = 0;
+
+/* Attempt to catch "ordinary" signals and shut down gracefully. */
+RETSIGTYPE exit_handler (int sig)
+{
+  curs_set (1);
+  endwin (); /* just to be safe */
+#if SYS_SIGLIST_DECLARED
+  printf(_("%s...  Exiting.\n"), sys_siglist[sig]);
+#else
+#if (__sun__ && __svr4__)
+  printf(_("Caught %s...  Exiting.\n"), _sys_siglist[sig]);
+#else
+#if (__alpha && __osf__)
+  printf(_("Caught %s...  Exiting.\n"), __sys_siglist[sig]);
+#else
+  printf(_("Caught signal %d...  Exiting.\n"), sig);
+#endif
+#endif
+#endif
+  exit (0);
+}
+
+RETSIGTYPE chld_handler (int sig)
+{
+  /* empty */
+}
+
+RETSIGTYPE sighandler (int sig)
+{
+  int save_errno = errno;
+
+  switch (sig)
+  {
+    case SIGTSTP: /* user requested a suspend */
+      if (!option (OPTSUSPEND))
+        break;
+      IsEndwin = isendwin ();
+      curs_set (1);
+      if (!IsEndwin)
+       endwin ();
+      kill (0, SIGSTOP);
+
+    case SIGCONT:
+      if (!IsEndwin)
+       refresh ();
+      mutt_curs_set (-1);
+      break;
+
+#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
+    case SIGWINCH:
+      SigWinch = 1;
+      break;
+#endif
+
+    case SIGINT:
+      SigInt = 1;
+      break;
+
+  }
+  errno = save_errno;
+}
+
+#ifdef USE_SLANG_CURSES
+int mutt_intr_hook (void)
+{
+  return (-1);
+}
+#endif /* USE_SLANG_CURSES */
+
+void mutt_signal_init (void)
+{
+  struct sigaction act;
+
+  sigemptyset (&act.sa_mask);
+  act.sa_flags = 0;
+  act.sa_handler = SIG_IGN;
+  sigaction (SIGPIPE, &act, NULL);
+
+  act.sa_handler = exit_handler;
+  sigaction (SIGTERM, &act, NULL);
+  sigaction (SIGHUP, &act, NULL);
+  sigaction (SIGQUIT, &act, NULL);
+
+  /* we want to avoid race conditions */
+  sigaddset (&act.sa_mask, SIGTSTP);
+
+  act.sa_handler = sighandler;
+
+  /* we want SIGALRM to abort the current syscall, so we do this before
+   * setting the SA_RESTART flag below.  currently this is only used to
+   * timeout on a connect() call in a reasonable amout of time.
+   */
+  sigaction (SIGALRM, &act, NULL);
+
+  /* we also don't want to mess with interrupted system calls */
+#ifdef SA_RESTART
+  act.sa_flags = SA_RESTART;
+#endif
+
+  sigaction (SIGCONT, &act, NULL);
+  sigaction (SIGTSTP, &act, NULL);
+  sigaction (SIGINT, &act, NULL);
+#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
+  sigaction (SIGWINCH, &act, NULL);
+#endif
+
+  /* POSIX doesn't allow us to ignore SIGCHLD,
+   * so we just install a dummy handler for it
+   */
+  act.sa_handler = chld_handler;
+  /* don't need to block any other signals here */
+  sigemptyset (&act.sa_mask);
+  /* we don't want to mess with stopped children */
+  act.sa_flags |= SA_NOCLDSTOP;
+  sigaction (SIGCHLD, &act, NULL);
+
+#ifdef USE_SLANG_CURSES
+  /* This bit of code is required because of the implementation of
+   * SLcurses_wgetch().  If a signal is received (like SIGWINCH) when we
+   * are in blocking mode, SLsys_getkey() will not return an error unless
+   * a handler function is defined and it returns -1.  This is needed so
+   * that if the user resizes the screen while at a prompt, it will just
+   * abort and go back to the main-menu.
+   */
+  SLang_getkey_intr_hook = mutt_intr_hook;
+#endif
+}
+
+/* signals which are important to block while doing critical ops */
+void mutt_block_signals (void)
+{
+  if (!option (OPTSIGNALSBLOCKED))
+  {
+    sigemptyset (&Sigset);
+    sigaddset (&Sigset, SIGTERM);
+    sigaddset (&Sigset, SIGHUP);
+    sigaddset (&Sigset, SIGTSTP);
+    sigaddset (&Sigset, SIGINT);
+#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
+    sigaddset (&Sigset, SIGWINCH);
+#endif
+    sigprocmask (SIG_BLOCK, &Sigset, 0);
+    set_option (OPTSIGNALSBLOCKED);
+  }
+}
+
+/* restore the previous signal mask */
+void mutt_unblock_signals (void)
+{
+  if (option (OPTSIGNALSBLOCKED))
+  {
+    sigprocmask (SIG_UNBLOCK, &Sigset, 0);
+    unset_option (OPTSIGNALSBLOCKED);
+  }
+}
+
+void mutt_block_signals_system (void)
+{
+  struct sigaction sa;
+
+  if (! option (OPTSYSSIGNALSBLOCKED))
+  {
+    /* POSIX: ignore SIGINT and SIGQUIT & block SIGCHLD  before exec */
+    sa.sa_handler = SIG_IGN;
+    sa.sa_flags = 0;
+    sigemptyset (&sa.sa_mask);
+    sigaction (SIGINT, &sa, &SysOldInt);
+    sigaction (SIGQUIT, &sa, &SysOldQuit);
+
+    sigemptyset (&SigsetSys);
+    sigaddset (&SigsetSys, SIGCHLD);
+    sigprocmask (SIG_BLOCK, &SigsetSys, 0);
+    set_option (OPTSYSSIGNALSBLOCKED);
+  }
+}
+
+void mutt_unblock_signals_system (int catch)
+{
+  if (option (OPTSYSSIGNALSBLOCKED))
+  {
+    sigprocmask (SIG_UNBLOCK, &SigsetSys, NULL);
+    if (catch)
+    {
+      sigaction (SIGQUIT, &SysOldQuit, NULL);
+      sigaction (SIGINT, &SysOldInt, NULL);
+    }
+    else
+    {
+      struct sigaction sa;
+
+      sa.sa_handler = SIG_DFL;
+      sigemptyset (&sa.sa_mask);
+      sa.sa_flags = 0;
+      sigaction (SIGQUIT, &sa, NULL);
+      sigaction (SIGINT, &sa, NULL);
+    }
+
+    unset_option (OPTSYSSIGNALSBLOCKED);
+  }
+}
+
+void mutt_allow_interrupt (int disposition)
+{
+  struct sigaction sa;
+  
+  memset (&sa, 0, sizeof sa);
+  sa.sa_handler = sighandler;
+#ifdef SA_RESTART
+  if (disposition == 0)
+    sa.sa_flags |= SA_RESTART;
+#endif
+  sigaction (SIGINT, &sa, NULL);
+}
diff --git a/smime.c b/smime.c
new file mode 100644 (file)
index 0000000..fda19e9
--- /dev/null
+++ b/smime.c
@@ -0,0 +1,1920 @@
+/*
+ * Copyright (C) 2001,2002 Oliver Ehli <elmy@acm.org>
+ * Copyright (C) 2002 Mike Schiraldi <raldi@research.netsol.com>
+ *
+ *     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.
+ */
+
+#include "mutt.h"
+#include "mutt_curses.h"
+#include "mutt_menu.h"
+#include "smime.h"
+#include "mime.h"
+#include "copy.h"
+
+#include <sys/wait.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <ctype.h>
+
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
+
+#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
+
+#ifdef HAVE_SYS_RESOURCE_H
+# include <sys/resource.h>
+#endif
+
+#ifdef CRYPT_BACKEND_CLASSIC_SMIME
+
+#include "mutt_crypt.h"
+
+
+struct smime_command_context {
+  const char *key;                 /* %k */
+  const char *cryptalg;                    /* %a */
+  const char *fname;               /* %f */
+  const char *sig_fname;           /* %s */
+  const char *certificates;        /* %c */
+  const char *intermediates;        /* %i */
+};
+
+
+typedef struct {
+  unsigned int hash;
+  char suffix;
+  char email[256];
+  char nick[256];
+  char trust; /* i=Invalid r=revoked e=expired u=unverified v=verified t=trusted */
+  short public; /* 1=public 0=private */
+} smime_id;
+
+
+char SmimePass[STRING];
+time_t SmimeExptime = 0; /* when does the cached passphrase expire? */
+
+
+static char SmimeKeyToUse[_POSIX_PATH_MAX] = { 0 };
+static char SmimeCertToUse[_POSIX_PATH_MAX];
+static char SmimeIntermediateToUse[_POSIX_PATH_MAX];
+
+
+/*
+ *     Queries and passphrase handling.
+ */
+
+
+
+
+/* these are copies from pgp.c */
+
+
+void smime_void_passphrase (void)
+{
+  memset (SmimePass, 0, sizeof (SmimePass));
+  SmimeExptime = 0;
+}
+
+
+
+
+
+
+/*
+ *     The OpenSSL interface
+ */
+
+/* This is almost identical to ppgp's invoking interface. */
+
+static const char *_mutt_fmt_smime_command (char *dest,
+                                           size_t destlen,
+                                           char op,
+                                           const char *src,
+                                           const char *prefix,
+                                           const char *ifstring,
+                                           const char *elsestring,
+                                           unsigned long data,
+                                           format_flag flags)
+{
+  char fmt[16];
+  struct smime_command_context *cctx = (struct smime_command_context *) data;
+  int optional = (flags & M_FORMAT_OPTIONAL);
+  
+  switch (op)
+  {
+    case 'C':
+    {
+      if (!optional)
+      {
+       char path[_POSIX_PATH_MAX];
+       char buf1[LONG_STRING], buf2[LONG_STRING];
+       struct stat sb;
+
+       strfcpy (path, NONULL (SmimeCALocation), sizeof (path));
+       mutt_expand_path (path, sizeof (path));
+       mutt_quote_filename (buf1, sizeof (buf1), path);
+
+       if (stat (path, &sb) != 0 || !S_ISDIR (sb.st_mode))
+         snprintf (buf2, sizeof (buf2), "-CAfile %s", buf1);
+       else
+         snprintf (buf2, sizeof (buf2), "-CApath %s", buf1);
+       
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, buf2);
+      }
+      else if (!SmimeCALocation)
+       optional = 0;
+      break;
+    }
+    
+    case 'c':
+    {           /* certificate (list) */
+      if (!optional) {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, NONULL(cctx->certificates));
+      }
+      else if (!cctx->certificates)
+       optional = 0;
+      break;
+    }
+    
+    case 'i':
+    {           /* intermediate certificates  */
+      if (!optional) {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, NONULL(cctx->intermediates));
+      }
+      else if (!cctx->intermediates)
+       optional = 0;
+      break;
+    }
+    
+    case 's':
+    {           /* detached signature */
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, NONULL (cctx->sig_fname));
+      }
+      else if (!cctx->sig_fname)
+       optional = 0;
+      break;
+    }
+    
+    case 'k':
+    {           /* private key */
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, NONULL (cctx->key));
+      }
+      else if (!cctx->key)
+       optional = 0;
+      break;
+    }
+    
+    case 'a':
+    {           /* algorithm for encryption */
+      if (!optional) {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, NONULL (cctx->cryptalg));
+      }
+      else if (!cctx->key)
+       optional = 0;
+      break;
+    }
+    
+    case 'f':
+    {           /* file to process */
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       snprintf (dest, destlen, fmt, NONULL (cctx->fname));
+      }
+      else if (!cctx->fname)
+       optional = 0;
+      break;
+    }
+    
+    default:
+      *dest = '\0';
+      break;
+  }
+
+  if (optional)
+    mutt_FormatString (dest, destlen, ifstring, _mutt_fmt_smime_command,
+                      data, 0);
+  else if (flags & M_FORMAT_OPTIONAL)
+    mutt_FormatString (dest, destlen, elsestring, _mutt_fmt_smime_command,
+                      data, 0);
+
+  return (src);
+}
+
+
+
+static void mutt_smime_command (char *d, size_t dlen,
+                               struct smime_command_context *cctx, const char *fmt)
+{
+  mutt_FormatString (d, dlen, NONULL(fmt), _mutt_fmt_smime_command,
+                   (unsigned long) cctx, 0);
+  dprint (2,(debugfile, "mutt_smime_command: %s\n", d));
+}
+
+
+
+
+static pid_t smime_invoke (FILE **smimein, FILE **smimeout, FILE **smimeerr,
+                          int smimeinfd, int smimeoutfd, int smimeerrfd,
+                          const char *fname,
+                          const char *sig_fname,
+                          const char *cryptalg,
+                          const char *key,
+                          const char *certificates,
+                          const char *intermediates,
+                          const char *format)
+{
+  struct smime_command_context cctx;
+  char cmd[HUGE_STRING];
+  
+  memset (&cctx, 0, sizeof (cctx));
+
+  if (!format || !*format)
+    return (pid_t) -1;
+  
+  cctx.fname          = fname;
+  cctx.sig_fname       = sig_fname;
+  cctx.key            = key;
+  cctx.cryptalg               = cryptalg;
+  cctx.certificates    = certificates;
+  cctx.intermediates   = intermediates;
+  
+  mutt_smime_command (cmd, sizeof (cmd), &cctx, format);
+
+  return mutt_create_filter_fd (cmd, smimein, smimeout, smimeerr,
+                               smimeinfd, smimeoutfd, smimeerrfd);
+}
+
+
+
+
+
+
+/*
+ *    Key and certificate handling.
+ */
+
+
+
+/* 
+   Search the certificate index for given mailbox.
+   return certificate file name.
+*/
+
+static void smime_entry (char *s, size_t l, MUTTMENU * menu, int num)
+{
+  smime_id *Table = (smime_id*) menu->data;
+  smime_id this = Table[num];
+  char* truststate;
+  switch(this.trust) {
+    case 't':
+      truststate = N_("Trusted   ");
+      break;
+    case 'v':
+      truststate = N_("Verified  ");
+      break;
+    case 'u':
+      truststate = N_("Unverified");
+      break;
+    case 'e':
+      truststate = N_("Expired   ");
+      break;
+    case 'r':
+      truststate = N_("Revoked   ");
+      break;
+    case 'i':
+      truststate = N_("Invalid   ");
+      break;
+    default:
+      truststate = N_("Unknown   ");
+  }
+  if (this.public)
+    snprintf(s, l, " 0x%.8X.%i %s %-35.35s %s", this.hash, this.suffix, truststate, this.email, this.nick);
+  else
+    snprintf(s, l, " 0x%.8X.%i %-35.35s %s", this.hash, this.suffix, this.email, this.nick);
+}
+
+
+
+
+
+char* smime_ask_for_key (char *prompt, char *mailbox, short public)
+{
+  char *fname;
+  smime_id *Table;
+  long cert_num; /* Will contain the number of certificates.
+      * To be able to get it, the .index file will be read twice... */
+  char index_file[_POSIX_PATH_MAX];
+  FILE *index;
+  char buf[LONG_STRING];
+  char fields[5][STRING];
+  int numFields, hash_suffix, done, cur; /* The current entry */
+  MUTTMENU* menu;
+  unsigned int hash;
+  char helpstr[HUGE_STRING*3];
+  char qry[256];
+  char title[256];
+
+  if (!prompt) prompt = _("Enter keyID: ");
+  snprintf(index_file, sizeof (index_file), "%s/.index",
+    public ? NONULL(SmimeCertificates) : NONULL(SmimeKeys));
+  
+  index = fopen(index_file, "r");
+  if (index == NULL) 
+  {
+    mutt_perror (index_file);      
+    return NULL;
+  }
+  /* Count Lines */
+  cert_num = 0;
+  while (!feof(index)) {
+    if (fgets(buf, sizeof(buf), index)) cert_num++;
+  }
+  fclose(index);
+
+  FOREVER
+  {
+    *qry = 0;
+    if (mutt_get_field(prompt,
+      qry, sizeof(qry), 0))
+      return NULL;
+    snprintf(title, sizeof(title), _("S/MIME certificates matching \"%s\"."),
+      qry);
+
+    
+    index = fopen(index_file, "r");
+    if (index == NULL) 
+    {
+      mutt_perror (index_file);      
+      return NULL;
+    }
+    /* Read Entries */
+    cur = 0;
+    Table = safe_calloc(cert_num, sizeof (smime_id));
+    while (!feof(index)) {
+        numFields = fscanf (index, MUTT_FORMAT(STRING) " %x.%i " MUTT_FORMAT(STRING), fields[0], &hash,
+          &hash_suffix, fields[2]);
+        if (public)
+          fscanf (index, MUTT_FORMAT(STRING) " " MUTT_FORMAT(STRING) "\n", fields[3], fields[4]);
+  
+      /* 0=email 1=name 2=nick 3=intermediate 4=trust */
+      if (numFields < 2) continue;
+  
+      /* Check if query matches this certificate */
+      if (!mutt_stristr(fields[0], qry) &&
+          !mutt_stristr(fields[2], qry))
+        continue;
+  
+      Table[cur].hash = hash;
+      Table[cur].suffix = hash_suffix;
+      strncpy(Table[cur].email, fields[0], sizeof(Table[cur].email));
+      strncpy(Table[cur].nick, fields[2], sizeof(Table[cur].nick));
+      Table[cur].trust = *fields[4];
+      Table[cur].public = public;
+  
+      cur++;
+    }
+    fclose(index);
+  
+    /* Make Helpstring */
+    helpstr[0] = 0;
+    mutt_make_help (buf, sizeof (buf), _("Exit  "), MENU_SMIME, OP_EXIT);
+    strcat (helpstr, buf);     /* __STRCAT_CHECKED__ */
+    mutt_make_help (buf, sizeof (buf), _("Select  "), MENU_SMIME,
+        OP_GENERIC_SELECT_ENTRY);
+    strcat (helpstr, buf);     /* __STRCAT_CHECKED__ */
+    mutt_make_help (buf, sizeof(buf), _("Help"), MENU_SMIME, OP_HELP);
+    strcat (helpstr, buf);     /* __STRCAT_CHECKED__ */
+  
+    /* Create the menu */
+    menu = mutt_new_menu();
+    menu->max = cur;
+    menu->make_entry = smime_entry;
+    menu->menu = MENU_SMIME;
+    menu->help = helpstr;
+    menu->data = Table;
+    menu->title = title;
+    /* sorting keys might be done later - TODO */
+  
+    mutt_clear_error();
+  
+    done = 0;
+    hash = 0;
+    while (!done) {
+      switch (mutt_menuLoop (menu)) {
+        case OP_GENERIC_SELECT_ENTRY:
+          cur = menu->current;
+       hash = 1;
+          done = 1;
+          break;
+        case OP_EXIT:
+          hash = 0;
+          done = 1;
+          break;
+      }
+    }
+    if (hash) {
+      fname = safe_malloc(14); /* Hash + '.' + Suffix + \n + \0 */
+      sprintf(fname, "%.8x.%i\n", Table[cur].hash, Table[cur].suffix);
+    }
+    else fname = NULL;
+  
+    mutt_menuDestroy (&menu);
+    FREE (&Table);
+    set_option (OPTNEEDREDRAW);
+  
+    if (fname) return fname;
+  }
+}
+
+
+
+char *smime_get_field_from_db (char *mailbox, char *query, short public, short may_ask)
+{
+  int addr_len, query_len, found = 0, ask = 0, choice = 0;
+  char cert_path[_POSIX_PATH_MAX];
+  char buf[LONG_STRING], prompt[STRING];
+  char fields[5][STRING];
+  int numFields;
+  struct stat info;
+  char *key=NULL, key_trust_level = 0;
+  FILE *fp;
+
+  if(!mailbox && !query) return(NULL);
+
+  addr_len = mailbox ? mutt_strlen (mailbox) : 0;
+  query_len = query ? mutt_strlen (query) : 0;
+
+  /* index-file format:
+     mailbox certfile label issuer_certfile trust_flags\n
+
+     \n is also copied here, serving as delimitation.
+     
+     certfile is a hash value generated by openssl.
+     Note that this was done according to the OpenSSL
+     specs on their CA-directory.
+
+  */
+  snprintf (cert_path, sizeof (cert_path), "%s/.index",
+           (public ? NONULL(SmimeCertificates) : NONULL(SmimeKeys)));
+
+  if (!stat (cert_path, &info))
+  {
+    if ((fp = safe_fopen (cert_path, "r")) == NULL)
+    {
+      mutt_perror (cert_path);
+      return (NULL);
+    }
+
+    while (fgets (buf, sizeof (buf) - 1, fp) != NULL)
+      if (mailbox && !(mutt_strncasecmp (mailbox, buf, addr_len)))
+      {
+       numFields = sscanf (buf, 
+                           MUTT_FORMAT(STRING) " " MUTT_FORMAT(STRING) " " 
+                           MUTT_FORMAT(STRING) " " MUTT_FORMAT(STRING) " " 
+                           MUTT_FORMAT(STRING) "\n", 
+                           fields[0], fields[1],
+                          fields[2], fields[3], 
+                           fields[4]);
+       if (numFields < 2)
+           continue;
+       if (mailbox && public && 
+           (!fields[4] ||
+            *fields[4] == 'i' || *fields[4] == 'e' || *fields[4] == 'r'))
+           continue;
+
+       if (found)
+       {
+         if (public && *fields[4] == 'u' )
+           snprintf (prompt, sizeof (prompt),
+                     _("ID %s is unverified. Do you want to use it for %s ?"),
+                     fields[1], mailbox);
+         else if (public && *fields[4] == 'v' )
+           snprintf (prompt, sizeof (prompt),
+                     _("Use (untrusted!) ID %s for %s ?"),
+                     fields[1], mailbox);
+         else
+           snprintf (prompt, sizeof (prompt), _("Use ID %s for %s ?"),
+                     fields[1], mailbox);
+         if (may_ask == 0)
+           choice = M_YES;
+         if (may_ask && (choice = mutt_yesorno (prompt, M_NO)) == -1)
+         {
+           found = 0;
+           ask = 0;
+           FREE (&key);
+           key = NULL;
+           break;
+         }
+         else if (choice == M_NO) 
+         {
+           ask = 1;
+           continue;
+         }
+         else if (choice == M_YES)
+         {
+           snprintf (key,mutt_strlen(key)+1, fields[1]);
+           ask = 0;
+           break;
+         }
+       }
+       else
+       {
+         key = safe_calloc(1, mutt_strlen(fields[1])+2);
+         if (public) key_trust_level = *fields[4];
+         snprintf(key, mutt_strlen(fields[1])+1, "%s", fields[1]);
+
+       }
+       found = 1;
+      }
+      else if(query)
+      {
+       numFields = sscanf (buf, "%s %s %s %s %s\n", fields[0], fields[1],
+                           fields[2], fields[3], fields[4]);
+
+       /* query = label: return certificate. */
+       if (numFields >= 3 && 
+           !(mutt_strncasecmp (query, fields[2], query_len)))
+       {
+         ask = 0;
+         key = safe_calloc(1, mutt_strlen(fields[1])+2);
+         snprintf(key, mutt_strlen(fields[1])+1, "%s", fields[1]);
+       }
+       /* query = certificate: return intermediate certificate. */
+       else if (numFields >= 4 && 
+                !(mutt_strncasecmp (query, fields[1], query_len)))
+       {
+         ask = 0;
+         key = safe_calloc(1, mutt_strlen(fields[3])+2);
+         snprintf(key, mutt_strlen(fields[3])+1, "%s", fields[3]);
+       }
+      }
+
+    fclose (fp);
+
+    if (ask)
+    {
+      if (public && *fields[4] == 'u' )
+       snprintf (prompt, sizeof (prompt),
+                 _("ID %s is unverified. Do you want to use it for %s ?"),
+                 fields[1], mailbox);
+      else if (public && *fields[4] == 'v' )
+       snprintf (prompt, sizeof (prompt),
+                 _("Use (untrusted!) ID %s for %s ?"),
+                 fields[1], mailbox);
+      else
+       snprintf (prompt, sizeof(prompt), _("Use ID %s for %s ?"), key,
+                 mailbox);
+      choice = mutt_yesorno (prompt, M_NO);
+      if (choice == -1 || choice == M_NO)
+      {
+       FREE (&key);
+       key = NULL;
+      }
+    }
+    else if (key_trust_level && may_ask)
+    {
+      if (key_trust_level == 'u' )
+      {
+       snprintf (prompt, sizeof (prompt),
+                 _("ID %s is unverified. Do you want to use it for %s ?"),
+                 key, mailbox);
+       choice = mutt_yesorno (prompt, M_NO);
+       if (choice != M_YES)
+       {
+         FREE (&key);
+         key = NULL;
+       }
+
+      }
+      else if (key_trust_level == 'v' )
+      {
+       mutt_error (_("Warning: You have not yet decided to trust ID %s. (any key to continue)"), key);
+       mutt_sleep (5);
+      }
+    }
+
+  }
+
+  if (key)
+  {
+    key[mutt_strlen(key)+1] = '\0';
+    key[mutt_strlen(key)] = '\n';
+  }
+
+  return key;
+}
+
+
+
+
+/* 
+   This sets the '*ToUse' variables for an upcoming decryption, where
+   the reuquired key is different from SmimeDefaultKey.
+*/
+
+void _smime_getkeys (char *mailbox)
+{
+  char *k = NULL;
+  char buf[STRING];
+
+  k = smime_get_field_from_db (mailbox, NULL, 0, 1);
+
+  if (!k)
+  {
+    snprintf(buf, sizeof(buf), _("Enter keyID for %s: "),
+            mailbox);
+    k = smime_ask_for_key(buf, mailbox, 0);
+  }
+
+  if (k)
+  {
+    k[mutt_strlen (k)-1] = '\0';
+    
+    /* the key used last time. */
+    if (*SmimeKeyToUse && 
+        !mutt_strcasecmp (k, SmimeKeyToUse + mutt_strlen (SmimeKeys)+1))
+    {
+      FREE (&k);
+      return;
+    }
+    else smime_void_passphrase ();
+
+    snprintf (SmimeKeyToUse, sizeof (SmimeKeyToUse), "%s/%s", 
+             NONULL(SmimeKeys), k);
+    
+    snprintf (SmimeCertToUse, sizeof (SmimeCertToUse), "%s/%s",
+             NONULL(SmimeCertificates), k);
+
+    if (mutt_strcasecmp (k, SmimeDefaultKey))
+      smime_void_passphrase ();
+
+    FREE (&k);
+    return;
+  }
+
+  if (*SmimeKeyToUse)
+  {
+    if (!mutt_strcasecmp (SmimeDefaultKey, 
+                          SmimeKeyToUse + mutt_strlen (SmimeKeys)+1))
+      return;
+
+    smime_void_passphrase ();
+  }
+
+  snprintf (SmimeKeyToUse, sizeof (SmimeKeyToUse), "%s/%s", 
+           NONULL (SmimeKeys), NONULL (SmimeDefaultKey));
+  
+  snprintf (SmimeCertToUse, sizeof (SmimeCertToUse), "%s/%s",
+           NONULL (SmimeCertificates), NONULL (SmimeDefaultKey));
+}
+
+void smime_getkeys (ENVELOPE *env)
+{
+  ADDRESS *t;
+  int found = 0;
+
+  if (option (OPTSDEFAULTDECRYPTKEY) && SmimeDefaultKey && *SmimeDefaultKey)
+  {
+    snprintf (SmimeKeyToUse, sizeof (SmimeKeyToUse), "%s/%s", 
+             NONULL (SmimeKeys), SmimeDefaultKey);
+    
+    snprintf (SmimeCertToUse, sizeof (SmimeCertToUse), "%s/%s",
+             NONULL(SmimeCertificates), SmimeDefaultKey);
+
+    return;
+  }
+
+  for (t = env->to; !found && t; t = t->next)
+    if (mutt_addr_is_user (t))
+    {
+      found = 1;
+      _smime_getkeys (t->mailbox);
+    }
+  for (t = env->cc; !found && t; t = t->next)
+    if (mutt_addr_is_user (t))
+    {
+      found = 1;
+      _smime_getkeys (t->mailbox);
+    }
+  if (!found && (t = mutt_default_from()))
+  {
+    _smime_getkeys (t->mailbox);
+    rfc822_free_address (&t);
+  }
+}
+
+/* This routine attempts to find the keyids of the recipients of a message.
+ * It returns NULL if any of the keys can not be found.
+ */
+
+char *smime_findKeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
+{
+  char *keyID, *keylist = NULL;
+  size_t keylist_size = 0;
+  size_t keylist_used = 0;
+  ADDRESS *tmp = NULL, *addr = NULL;
+  ADDRESS **last = &tmp;
+  ADDRESS *p, *q;
+  int i;
+
+  const char *fqdn = mutt_fqdn (1);
+  
+  for (i = 0; i < 3; i++)
+  {
+    switch (i)
+    {
+      case 0: p = to; break;
+      case 1: p = cc; break;
+      case 2: p = bcc; break;
+      default: abort ();
+    }
+    
+    *last = rfc822_cpy_adr (p);
+    while (*last)
+      last = &((*last)->next);
+  }
+
+  if (fqdn)
+    rfc822_qualify (tmp, fqdn);
+
+  tmp = mutt_remove_duplicates (tmp);
+  
+  for (p = tmp; p ; p = p->next)
+  {
+    char buf[LONG_STRING];
+
+    q = p;
+
+    if ((keyID = smime_get_field_from_db (q->mailbox, NULL, 1, 1)) == NULL)
+    {
+      snprintf(buf, sizeof(buf),
+              _("Enter keyID for %s: "),
+              q->mailbox);
+      keyID = smime_ask_for_key(buf, q->mailbox, 1);
+    }
+    if(!keyID)
+    {
+      mutt_message (_("No (valid) certificate found for %s."), q->mailbox);
+      FREE (&keylist);
+      rfc822_free_address (&tmp);
+      rfc822_free_address (&addr);
+      return NULL;
+    }
+    
+    keylist_size += mutt_strlen (keyID) + 1;
+    safe_realloc (&keylist, keylist_size);
+    sprintf (keylist + keylist_used, "%s", keyID);     /* __SPRINTF_CHECKED__ */
+    keylist_used = mutt_strlen (keylist);
+
+    rfc822_free_address (&addr);
+
+  }
+  rfc822_free_address (&tmp);
+  return (keylist);
+}
+
+
+
+
+
+
+static int smime_handle_cert_email (char *certificate, char *mailbox,
+                                  int copy, char ***buffer, int *num)
+{
+  FILE *fpout = NULL, *fperr = NULL;
+  char tmpfname[_POSIX_PATH_MAX];
+  char email[STRING];
+  int ret = -1, count = 0;
+  pid_t thepid;
+
+  mutt_mktemp (tmpfname);
+  if ((fperr = safe_fopen (tmpfname, "w+")) == NULL)
+  {
+    mutt_perror (tmpfname);
+    return 1;
+  }
+  mutt_unlink (tmpfname);
+
+  mutt_mktemp (tmpfname);
+  if ((fpout = safe_fopen (tmpfname, "w+")) == NULL)
+  {
+    fclose (fperr);
+    mutt_perror (tmpfname);
+    return 1;
+  }
+  mutt_unlink (tmpfname);
+
+  if ((thepid =  smime_invoke (NULL, NULL, NULL,
+                              -1, fileno (fpout), fileno (fperr),
+                              certificate, NULL, NULL, NULL, NULL, NULL,
+                              SmimeGetCertEmailCommand))== -1)
+  {
+    mutt_message (_("Error: unable to create OpenSSL subprocess!"));
+    fclose (fperr);
+    fclose (fpout);
+    return 1;
+  }
+
+  mutt_wait_filter (thepid);
+
+  fflush (fpout);
+  rewind (fpout);
+  rewind (fperr);
+  fflush (fperr);
+
+
+  while ((fgets (email, sizeof (email), fpout)))
+  {
+    *(email + mutt_strlen (email)-1) = '\0';
+    if(mutt_strncasecmp (email, mailbox, mutt_strlen (mailbox)) == 0)
+      ret=1;
+
+    ret = ret < 0 ? 0 : ret;
+    count++;
+  }
+
+  if (ret == -1)
+  {
+    mutt_endwin(NULL);
+    mutt_copy_stream (fperr, stdout);
+    mutt_any_key_to_continue (_("Error: unable to create OpenSSL subprocess!"));
+    ret = 1;
+  }
+  else if (!ret)
+    ret = 1;
+  else ret = 0;
+
+  if(copy && buffer && num)
+  {
+    (*num) = count;
+    *buffer =  safe_calloc(sizeof(char*), count);
+    count = 0;
+
+    rewind (fpout);
+    while ((fgets (email, sizeof (email), fpout)))
+    {
+      *(email + mutt_strlen (email) - 1) = '\0';
+      (*buffer)[count] = safe_calloc(1, mutt_strlen (email) + 1);
+      strncpy((*buffer)[count], email, mutt_strlen (email));
+      count++;
+    }
+  }
+  else if(copy) ret = 2;
+
+  fclose (fpout);
+  fclose (fperr);
+
+  return ret;
+}
+
+
+
+static char *smime_extract_certificate (char *infile)
+{
+  FILE *fpout = NULL, *fperr = NULL;
+  char pk7out[_POSIX_PATH_MAX], certfile[_POSIX_PATH_MAX];
+  char tmpfname[_POSIX_PATH_MAX];
+  pid_t thepid;
+  int empty;
+
+
+  mutt_mktemp (tmpfname);
+  if ((fperr = safe_fopen (tmpfname, "w+")) == NULL)
+  {
+    mutt_perror (tmpfname);
+    return NULL;
+  }
+  mutt_unlink (tmpfname);
+
+  mutt_mktemp (pk7out);
+  if ((fpout = safe_fopen (pk7out, "w+")) == NULL)
+  {
+    fclose (fperr);
+    mutt_perror (pk7out);
+    return NULL;
+  }
+
+  /* Step 1: Convert the signature to a PKCS#7 structure, as we can't
+     extract the full set of certificates directly.
+  */
+  if ((thepid =  smime_invoke (NULL, NULL, NULL,
+                              -1, fileno (fpout), fileno (fperr),
+                              infile, NULL, NULL, NULL, NULL, NULL,
+                              SmimePk7outCommand))== -1)
+  {
+    mutt_any_key_to_continue (_("Error: unable to create OpenSSL subprocess!"));
+    fclose (fperr);
+    fclose (fpout);
+    mutt_unlink (pk7out);
+    return NULL;
+  }
+
+  mutt_wait_filter (thepid);
+
+
+  fflush (fpout);
+  rewind (fpout);
+  rewind (fperr);
+  fflush (fperr);
+  empty = (fgetc (fpout) == EOF);
+  if (empty)
+  {
+    mutt_perror (pk7out);
+    mutt_copy_stream (fperr, stdout);
+    fclose (fpout);
+    fclose (fperr);
+    mutt_unlink (pk7out);
+    return NULL;
+    
+  }
+
+
+  fclose (fpout);
+  mutt_mktemp (certfile);
+  if ((fpout = safe_fopen (certfile, "w+")) == NULL)
+  {
+    fclose (fperr);
+    mutt_unlink (pk7out);
+    mutt_perror (certfile);
+    return NULL;
+  }
+  
+  /* Step 2: Extract the certificates from a PKCS#7 structure.
+   */
+  if ((thepid =  smime_invoke (NULL, NULL, NULL,
+                              -1, fileno (fpout), fileno (fperr),
+                              pk7out, NULL, NULL, NULL, NULL, NULL,
+                              SmimeGetCertCommand))== -1)
+  {
+    mutt_any_key_to_continue (_("Error: unable to create OpenSSL subprocess!"));
+    fclose (fperr);
+    fclose (fpout);
+    mutt_unlink (pk7out);
+    mutt_unlink (certfile);
+    return NULL;
+  }
+
+  mutt_wait_filter (thepid);
+
+  mutt_unlink (pk7out);
+
+  fflush (fpout);
+  rewind (fpout);
+  rewind (fperr);
+  fflush (fperr);
+  empty =  (fgetc (fpout) == EOF);
+  if (empty)
+  {
+    mutt_copy_stream (fperr, stdout);
+    fclose (fpout);
+    fclose (fperr);
+    mutt_unlink (certfile);
+    return NULL;
+  }
+
+  fclose (fpout);
+  fclose (fperr);
+
+  return safe_strdup (certfile);
+}
+
+static char *smime_extract_signer_certificate (char *infile)
+{
+  FILE *fpout = NULL, *fperr = NULL;
+  char pk7out[_POSIX_PATH_MAX], certfile[_POSIX_PATH_MAX];
+  char tmpfname[_POSIX_PATH_MAX];
+  pid_t thepid;
+  int empty;
+
+
+  mutt_mktemp (tmpfname);
+  if ((fperr = safe_fopen (tmpfname, "w+")) == NULL)
+  {
+    mutt_perror (tmpfname);
+    return NULL;
+  }
+  mutt_unlink (tmpfname);
+
+
+  mutt_mktemp (certfile);
+  if ((fpout = safe_fopen (certfile, "w+")) == NULL)
+  {
+    fclose (fperr);
+    mutt_perror (certfile);
+    return NULL;
+  }
+  
+  /* Extract signer's certificate
+   */
+  if ((thepid =  smime_invoke (NULL, NULL, NULL,
+                              -1, -1, fileno (fperr),
+                              infile, NULL, NULL, NULL, certfile, NULL,
+                              SmimeGetSignerCertCommand))== -1)
+  {
+    mutt_any_key_to_continue (_("Error: unable to create OpenSSL subprocess!"));
+    fclose (fperr);
+    fclose (fpout);
+    mutt_unlink (pk7out);
+    mutt_unlink (certfile);
+    return NULL;
+  }
+
+  mutt_wait_filter (thepid);
+
+  fflush (fpout);
+  rewind (fpout);
+  rewind (fperr);
+  fflush (fperr);
+  empty =  (fgetc (fpout) == EOF);
+  if (empty)
+  {
+    mutt_endwin (NULL);
+    mutt_copy_stream (fperr, stdout);
+    mutt_any_key_to_continue (NULL);
+    fclose (fpout);
+    fclose (fperr);
+    mutt_unlink (certfile);
+    return NULL;
+  }
+
+  fclose (fpout);
+  fclose (fperr);
+
+  return safe_strdup (certfile);
+}
+
+
+
+
+/* Add a certificate and update index file (externally). */
+
+void smime_invoke_import (char *infile, char *mailbox)
+{
+  char tmpfname[_POSIX_PATH_MAX], *certfile = NULL, buf[STRING];
+  FILE *smimein=NULL, *fpout = NULL, *fperr = NULL;
+  pid_t thepid=-1;
+
+  mutt_mktemp (tmpfname);
+  if ((fperr = safe_fopen (tmpfname, "w+")) == NULL)
+  {
+    mutt_perror (tmpfname);
+    return;
+  }
+  mutt_unlink (tmpfname);
+
+  mutt_mktemp (tmpfname);
+  if ((fpout = safe_fopen (tmpfname, "w+")) == NULL)
+  {
+    fclose (fperr);
+    mutt_perror (tmpfname);
+    return;
+  }
+  mutt_unlink (tmpfname);
+
+
+  buf[0] = '\0';
+  if (option (OPTASKCERTLABEL))
+    mutt_get_field ("Label for certificate:", buf, sizeof (buf), 0);
+
+  mutt_endwin (NULL);
+  if ((certfile = smime_extract_certificate(infile)))
+  {
+    mutt_endwin (NULL);
+  
+    if ((thepid =  smime_invoke (&smimein, NULL, NULL,
+                                -1, fileno(fpout), fileno(fperr),
+                                certfile, NULL, NULL, NULL, NULL, NULL,
+                                SmimeImportCertCommand))== -1)
+    {
+      mutt_message (_("Error: unable to create OpenSSL subprocess!"));
+      return;
+    }
+    fputs (buf, smimein);
+    fputc ('\n', smimein);
+    fclose(smimein);
+
+    mutt_wait_filter (thepid);
+  
+    mutt_unlink (certfile);
+    FREE (&certfile);
+  }
+
+  fflush (fpout);
+  rewind (fpout);
+  fflush (fperr);
+  rewind (fperr);
+
+  mutt_copy_stream (fpout, stdout);
+  mutt_copy_stream (fperr, stdout);
+
+  fclose (fpout);
+  fclose (fperr);
+
+}
+
+
+
+int smime_verify_sender(HEADER *h)
+{
+  char *mbox = NULL, *certfile, tempfname[_POSIX_PATH_MAX];
+  FILE *fpout;
+  int retval=1;
+
+  mutt_mktemp (tempfname);
+  if (!(fpout = safe_fopen (tempfname, "w")))
+  {
+    mutt_perror (tempfname);
+    return 1;
+  }
+
+  if(h->security & ENCRYPT)
+    mutt_copy_message (fpout, Context, h,
+                      M_CM_DECODE_CRYPT & M_CM_DECODE_SMIME,
+                      CH_MIME|CH_WEED|CH_NONEWLINE);
+  else
+    mutt_copy_message (fpout, Context, h, 0, 0);
+
+  fflush(fpout);
+  fclose (fpout);
+
+  if (h->env->from)
+  {
+    h->env->from = mutt_expand_aliases (h->env->from); 
+    mbox = h->env->from->mailbox; 
+  }
+  else if (h->env->sender)
+  {
+    h->env->sender = mutt_expand_aliases (h->env->sender); 
+    mbox = h->env->sender->mailbox; 
+  }
+
+  if (mbox)
+  {
+    if ((certfile = smime_extract_signer_certificate(tempfname)))
+    {
+      mutt_unlink(tempfname);
+      if (smime_handle_cert_email (certfile, mbox, 0, NULL, NULL))
+      {
+       if(isendwin())
+         mutt_any_key_to_continue(NULL);
+      }
+      else
+       retval = 0;
+      mutt_unlink(certfile);
+      FREE (&certfile);
+    }
+  else 
+       mutt_any_key_to_continue(_("no certfile"));
+  }
+  else 
+       mutt_any_key_to_continue(_("no mbox"));
+
+  mutt_unlink(tempfname);
+  return retval;
+}
+
+
+
+
+
+
+
+
+
+/*
+ *    Creating S/MIME - bodies.
+ */
+
+
+
+
+static
+pid_t smime_invoke_encrypt (FILE **smimein, FILE **smimeout, FILE **smimeerr,
+                           int smimeinfd, int smimeoutfd, int smimeerrfd,
+                           const char *fname, const char *uids)
+{
+  return smime_invoke (smimein, smimeout, smimeerr,
+                      smimeinfd, smimeoutfd, smimeerrfd,
+                      fname, NULL, SmimeCryptAlg, NULL, uids, NULL,
+                      SmimeEncryptCommand);
+}
+
+
+static
+pid_t smime_invoke_sign (FILE **smimein, FILE **smimeout, FILE **smimeerr,
+                        int smimeinfd, int smimeoutfd, int smimeerrfd, 
+                        const char *fname)
+{
+  return smime_invoke (smimein, smimeout, smimeerr, smimeinfd, smimeoutfd,
+                      smimeerrfd, fname, NULL, NULL, SmimeKeyToUse,
+                      SmimeCertToUse, SmimeIntermediateToUse,
+                      SmimeSignCommand);
+}
+
+
+
+
+BODY *smime_build_smime_entity (BODY *a, char *certlist)
+{
+  char buf[LONG_STRING], certfile[LONG_STRING];
+  char tempfile[_POSIX_PATH_MAX], smimeerrfile[_POSIX_PATH_MAX];
+  char smimeinfile[_POSIX_PATH_MAX];
+  char *cert_start = certlist, *cert_end = certlist;
+  FILE *smimein = NULL, *smimeerr = NULL, *fpout = NULL, *fptmp = NULL;
+  BODY *t;
+  int err = 0, empty;
+  pid_t thepid;
+  
+  mutt_mktemp (tempfile);
+  if ((fpout = safe_fopen (tempfile, "w+")) == NULL)
+  {
+    mutt_perror (tempfile);
+    return (NULL);
+  }
+
+  mutt_mktemp (smimeerrfile);
+  if ((smimeerr = safe_fopen (smimeerrfile, "w+")) == NULL)
+  {
+    mutt_perror (smimeerrfile);
+    fclose (fpout);
+    mutt_unlink (tempfile);
+    return NULL;
+  }
+  mutt_unlink (smimeerrfile);
+  
+  mutt_mktemp (smimeinfile);
+  if ((fptmp = safe_fopen (smimeinfile, "w+")) == NULL)
+  {
+    mutt_perror (smimeinfile);
+    mutt_unlink (tempfile);
+    fclose (fpout);
+    fclose (smimeerr);
+    return NULL;
+  }
+
+  *certfile = '\0';
+  while (1)
+  {
+    int off = mutt_strlen (certfile);
+    while (*++cert_end && *cert_end != '\n');
+    if (!*cert_end) break;
+    *cert_end = '\0';
+    snprintf (certfile+off, sizeof (certfile)-off, " %s/%s",
+             NONULL(SmimeCertificates), cert_start);
+    *cert_end = '\n';
+    cert_start = cert_end;
+    cert_start++;
+  }
+
+  /* write a MIME entity */
+  mutt_write_mime_header (a, fptmp);
+  fputc ('\n', fptmp);
+  mutt_write_mime_body (a, fptmp);
+  fclose (fptmp);
+
+  if ((thepid =
+       smime_invoke_encrypt (&smimein, NULL, NULL, -1,
+                            fileno (fpout), fileno (smimeerr),
+                            smimeinfile, certfile)) == -1)
+  {
+    fclose (smimeerr);
+    mutt_unlink (smimeinfile);
+    mutt_unlink (certfile);
+    return (NULL);
+  }
+
+  fclose (smimein);
+  
+  mutt_wait_filter (thepid);
+  mutt_unlink (smimeinfile);
+  mutt_unlink (certfile);
+  
+  fflush (fpout);
+  rewind (fpout);
+  empty = (fgetc (fpout) == EOF);
+  fclose (fpout);
+  fflush (smimeerr);
+  rewind (smimeerr);
+  while (fgets (buf, sizeof (buf) - 1, smimeerr) != NULL)
+  {
+    err = 1;
+    fputs (buf, stdout);
+  }
+  fclose (smimeerr);
+
+  /* pause if there is any error output from SMIME */
+  if (err)
+    mutt_any_key_to_continue (NULL);
+
+  if (empty)
+  {
+    /* fatal error while trying to encrypt message */
+    if (!err) mutt_any_key_to_continue _("No output from OpenSSL..");
+    mutt_unlink (tempfile);
+    return (NULL);
+  }
+
+  t = mutt_new_body ();
+  t->type = TYPEAPPLICATION;
+  t->subtype = safe_strdup ("x-pkcs7-mime");
+  mutt_set_parameter ("name", "smime.p7m", &t->parameter);
+  mutt_set_parameter ("smime-type", "enveloped-data", &t->parameter);
+  t->encoding = ENCBASE64;  /* The output of OpenSSL SHOULD be binary */
+  t->use_disp = 1;
+  t->disposition = DISPATTACH;
+  t->d_filename = safe_strdup ("smime.p7m");
+  t->filename = safe_strdup (tempfile);
+  t->unlink = 1; /*delete after sending the message */
+  t->parts=0;
+  t->next=0;
+  
+  return (t);
+}
+
+
+
+
+BODY *smime_sign_message (BODY *a )
+{
+  BODY *t;
+  char buffer[LONG_STRING];
+  char signedfile[_POSIX_PATH_MAX], filetosign[_POSIX_PATH_MAX];
+  FILE *smimein = NULL, *smimeout = NULL, *smimeerr = NULL, *sfp = NULL;
+  int err = 0;
+  int empty = 0;
+  pid_t thepid;
+  char *intermediates = smime_get_field_from_db(NULL, SmimeDefaultKey, 1, 1);
+
+  if (!intermediates)
+  {
+    mutt_message(_("Warning: Intermediate certificate not found."));
+    intermediates = SmimeDefaultKey; /* so openssl won't complain in any case */
+  }
+  else
+      intermediates[mutt_strlen (intermediates)-1] = '\0';
+
+  convert_to_7bit (a); /* Signed data _must_ be in 7-bit format. */
+
+  mutt_mktemp (filetosign);
+  if ((sfp = safe_fopen (filetosign, "w+")) == NULL)
+  {
+    mutt_perror (filetosign);
+    return NULL;
+  }
+
+  mutt_mktemp (signedfile);
+  if ((smimeout = safe_fopen (signedfile, "w+")) == NULL)
+  {
+    mutt_perror (signedfile);
+    fclose (sfp);
+    mutt_unlink (filetosign);
+    return NULL;
+  }
+  
+  mutt_write_mime_header (a, sfp);
+  fputc ('\n', sfp);
+  mutt_write_mime_body (a, sfp);
+  fclose (sfp);
+
+  
+
+  snprintf (SmimeKeyToUse, sizeof (SmimeKeyToUse), "%s/%s", 
+          NONULL(SmimeKeys), SmimeDefaultKey);
+
+  snprintf (SmimeCertToUse, sizeof (SmimeCertToUse), "%s/%s",
+          NONULL(SmimeCertificates), SmimeDefaultKey);
+  
+  snprintf (SmimeIntermediateToUse, sizeof (SmimeIntermediateToUse), "%s/%s",
+          NONULL(SmimeCertificates), intermediates);
+  
+
+
+  if ((thepid = smime_invoke_sign (&smimein, NULL, &smimeerr,
+                                -1, fileno (smimeout), -1, filetosign)) == -1)
+  {
+    mutt_perror _("Can't open OpenSSL subprocess!");
+    fclose (smimeout);
+    mutt_unlink (signedfile);
+    mutt_unlink (filetosign);
+    return NULL;
+  }
+  fputs (SmimePass, smimein);
+  fputc ('\n', smimein);
+  fclose (smimein);
+  
+
+  mutt_wait_filter (thepid);
+
+  /* check for errors from OpenSSL */
+  err = 0;
+  fflush (smimeerr);
+  rewind (smimeerr);
+  while (fgets (buffer, sizeof (buffer) - 1, smimeerr) != NULL)
+  {
+    err = 1;
+    fputs (buffer, stdout);
+  }
+  fclose (smimeerr);
+
+
+  fflush (smimeout);
+  rewind (smimeout);
+  empty = (fgetc (smimeout) == EOF);
+  fclose (smimeout);
+
+  mutt_unlink (filetosign);
+  
+
+  if (err)
+    mutt_any_key_to_continue (NULL);
+
+  if (empty)
+  {
+    mutt_any_key_to_continue _("No output from OpenSSL...");
+    mutt_unlink (signedfile);
+    return (NULL); /* fatal error while signing */
+  }
+
+  t = mutt_new_body ();
+  t->type = TYPEMULTIPART;
+  t->subtype = safe_strdup ("signed");
+  t->encoding = ENC7BIT;
+  t->use_disp = 0;
+  t->disposition = DISPINLINE;
+
+  mutt_generate_boundary (&t->parameter);
+  /* check if this can be extracted from private key somehow.... */
+  mutt_set_parameter ("micalg", "sha1", &t->parameter);
+  mutt_set_parameter ("protocol", "application/x-pkcs7-signature",
+                    &t->parameter);
+
+  t->parts = a;
+  a = t;
+
+  t->parts->next = mutt_new_body ();
+  t = t->parts->next;
+  t->type = TYPEAPPLICATION;
+  t->subtype = safe_strdup ("x-pkcs7-signature");
+  t->filename = safe_strdup (signedfile);
+  t->d_filename = safe_strdup ("smime.p7s");
+  t->use_disp = 1;
+  t->disposition = DISPATTACH;
+  t->encoding = ENCBASE64;
+  t->unlink = 1; /* ok to remove this file after sending. */
+
+  return (a);
+
+}
+
+
+
+
+
+
+/*
+ *    Handling S/MIME - bodies.
+ */
+
+
+
+
+
+
+static
+pid_t smime_invoke_verify (FILE **smimein, FILE **smimeout, FILE **smimeerr,
+                          int smimeinfd, int smimeoutfd, int smimeerrfd, 
+                          const char *fname, const char *sig_fname, int opaque)
+{
+  return smime_invoke (smimein, smimeout, smimeerr, smimeinfd, smimeoutfd,
+                      smimeerrfd, fname, sig_fname, NULL, NULL, NULL, NULL,
+                      (opaque ? SmimeVerifyOpaqueCommand : SmimeVerifyCommand));
+}
+
+
+static
+pid_t smime_invoke_decrypt (FILE **smimein, FILE **smimeout, FILE **smimeerr,
+                           int smimeinfd, int smimeoutfd, int smimeerrfd, 
+                           const char *fname)
+{
+  return smime_invoke (smimein, smimeout, smimeerr, smimeinfd, smimeoutfd,
+                      smimeerrfd, fname, NULL, NULL, SmimeKeyToUse,
+                      SmimeCertToUse, NULL, SmimeDecryptCommand);
+}
+
+
+
+int smime_verify_one (BODY *sigbdy, STATE *s, const char *tempfile)
+{
+  char signedfile[_POSIX_PATH_MAX], smimeerrfile[_POSIX_PATH_MAX];
+  FILE *fp=NULL, *smimeout=NULL, *smimeerr=NULL;
+  pid_t thepid;
+  int badsig = -1;
+
+  long tmpoffset = 0;
+  size_t tmplength = 0;
+  int origType = sigbdy->type;
+  char *savePrefix = NULL;
+
+
+  snprintf (signedfile, sizeof (signedfile), "%s.sig", tempfile);
+  
+  /* decode to a tempfile, saving the original destination */
+  fp = s->fpout;
+  if ((s->fpout = safe_fopen (signedfile, "w")) == NULL)
+  {
+    mutt_perror (signedfile);
+    return -1;
+  }
+  /* decoding the attachment changes the size and offset, so save a copy
+   * of the "real" values now, and restore them after processing
+   */
+  tmplength = sigbdy->length;
+  tmpoffset = sigbdy->offset;
+
+  /* if we are decoding binary bodies, we don't want to prefix each
+   * line with the prefix or else the data will get corrupted.
+   */
+  savePrefix = s->prefix;
+  s->prefix = NULL;
+
+  mutt_decode_attachment (sigbdy, s);
+
+  sigbdy->length = ftell (s->fpout);
+  sigbdy->offset = 0;
+  fclose (s->fpout);
+
+  /* restore final destination and substitute the tempfile for input */
+  s->fpout = fp;
+  fp = s->fpin;
+  s->fpin = fopen (signedfile, "r");
+
+  /* restore the prefix */
+  s->prefix = savePrefix;
+  
+  sigbdy->type = origType;
+
+  
+  mutt_mktemp (smimeerrfile);
+  if (!(smimeerr = safe_fopen (smimeerrfile, "w+")))
+  {
+    mutt_perror (smimeerrfile);
+    mutt_unlink (signedfile);
+    return -1;
+  }
+  
+  crypt_current_time (s, "OpenSSL");
+  
+  if ((thepid = smime_invoke_verify (NULL, &smimeout, NULL, 
+                                  -1, -1, fileno (smimeerr),
+                                  tempfile, signedfile, 0)) != -1)
+  {
+    fflush (smimeout);
+    fclose (smimeout);
+      
+    if (mutt_wait_filter (thepid))
+      badsig = -1;
+    else
+    {
+      char *line = NULL;
+      int lineno = 0;
+      size_t linelen;
+      
+      fflush (smimeerr);
+      rewind (smimeerr);
+      
+      line = mutt_read_line (line, &linelen, smimeerr, &lineno);
+      if (linelen && !mutt_strcasecmp (line, "verification successful"))
+       badsig = 0;
+
+      FREE (&line);
+    }
+  }
+  
+  fflush (smimeerr);
+  rewind (smimeerr);
+  mutt_copy_stream (smimeerr, s->fpout);
+  fclose (smimeerr);
+    
+  state_attach_puts (_("[-- End of OpenSSL output --]\n\n"), s);
+  
+  mutt_unlink (signedfile);
+  mutt_unlink (smimeerrfile);
+
+  sigbdy->length = tmplength;
+  sigbdy->offset = tmpoffset;
+  
+  /* restore the original source stream */
+  fclose (s->fpin);
+  s->fpin = fp;
+  
+
+  return badsig;
+}
+
+
+
+
+
+/*
+  This handles application/pkcs7-mime which can either be a signed
+  or an encrypted message.
+*/
+
+static BODY *smime_handle_entity (BODY *m, STATE *s, FILE *outFile)
+{
+  int len=0;
+  int c;
+  long last_pos;
+  char buf[HUGE_STRING];
+  char outfile[_POSIX_PATH_MAX], errfile[_POSIX_PATH_MAX];
+  char tmpfname[_POSIX_PATH_MAX];
+  char tmptmpfname[_POSIX_PATH_MAX];
+  FILE *smimeout = NULL, *smimein=NULL, *smimeerr=NULL;
+  FILE *tmpfp=NULL, *tmpfp_buffer=NULL, *fpout=NULL;
+  struct stat info;
+  BODY *p=NULL;
+  pid_t thepid=-1;
+  unsigned int type = mutt_is_application_smime (m);
+
+  if (!(type & APPLICATION_SMIME)) return NULL;
+
+  mutt_mktemp (outfile);
+  if ((smimeout = safe_fopen (outfile, "w+")) == NULL)
+  {
+    mutt_perror (outfile);
+    return NULL;
+  }
+  
+  mutt_mktemp (errfile);
+  if ((smimeerr = safe_fopen (errfile, "w+")) == NULL)
+  {
+    mutt_perror (errfile);
+    fclose (smimeout); smimeout = NULL;
+    return NULL;
+  }
+  mutt_unlink (errfile);
+
+  
+  mutt_mktemp (tmpfname);
+  if ((tmpfp = safe_fopen (tmpfname, "w+")) == NULL)
+  {
+    mutt_perror (tmpfname);
+    fclose (smimeout); smimeout = NULL;
+    fclose (smimeerr); smimeerr = NULL;
+    return NULL;
+  }
+
+  fseek (s->fpin, m->offset, 0);
+  last_pos = m->offset;
+
+  mutt_copy_bytes (s->fpin, tmpfp,  m->length);
+
+  fflush (tmpfp);
+  fclose (tmpfp);
+
+  if ((type & ENCRYPT) &&
+      (thepid = smime_invoke_decrypt (&smimein, NULL, NULL, -1,
+                                     fileno (smimeout),  fileno (smimeerr), tmpfname)) == -1)
+  {
+    fclose (smimeout); smimeout = NULL;
+    mutt_unlink (tmpfname);
+    state_attach_puts (_("[-- Error: unable to create OpenSSL subprocess! --]\n"), s);
+    return NULL;
+  }
+  else if ((type & SIGNOPAQUE) &&
+          (thepid = smime_invoke_verify (&smimein, NULL, NULL, -1,
+                                         fileno (smimeout), fileno (smimeerr), NULL,
+                                         tmpfname, SIGNOPAQUE)) == -1)
+  {
+    fclose (smimeout); smimeout = NULL;
+    mutt_unlink (tmpfname);
+    state_attach_puts (_("[-- Error: unable to create OpenSSL subprocess! --]\n"), s);
+    return NULL;
+  }
+
+  
+  if (type & ENCRYPT)
+  {
+    if (!smime_valid_passphrase ())
+      smime_void_passphrase ();
+    fputs (SmimePass, smimein);
+    fputc ('\n', smimein);
+  }
+
+  fclose (smimein);
+       
+  mutt_wait_filter (thepid);
+  mutt_unlink (tmpfname);
+  
+
+  if (s->flags & M_DISPLAY)
+  {
+    rewind (smimeerr);
+    
+    if ((c = fgetc (smimeerr)) != EOF)
+    {
+      ungetc (c, smimeerr);
+      
+      crypt_current_time (s, "OpenSSL");
+      mutt_copy_stream (smimeerr, s->fpout);
+      state_attach_puts (_("[-- End of OpenSSL output --]\n\n"), s);
+    }
+    
+    if (type & ENCRYPT)
+      state_attach_puts (_("[-- The following data is S/MIME"
+                           " encrypted --]\n"), s);
+    else
+      state_attach_puts (_("[-- The following data is S/MIME signed --]\n"), s);
+  }
+
+  if (smimeout)
+  {
+    fflush (smimeout);
+    rewind (smimeout);
+    
+    if (outFile) fpout = outFile;
+    else
+    {
+      mutt_mktemp (tmptmpfname);
+      if ((fpout = safe_fopen (tmptmpfname, "w+")) == NULL)
+      {
+       mutt_perror(tmptmpfname);
+       fclose (smimeout); smimeout = NULL;
+       return NULL;
+      }
+    }
+    while (fgets (buf, sizeof (buf) - 1, smimeout) != NULL)
+    {
+      len = mutt_strlen (buf);
+      if (len > 1 && buf[len - 2] == '\r')
+      {
+       buf[len-2] = '\n';
+       buf[len-1] = '\0';
+      }
+      fputs (buf, fpout);
+    }
+    fflush (fpout);
+    rewind (fpout); 
+
+
+    if ((p = mutt_read_mime_header (fpout, 0)) != NULL)
+    {
+      fstat (fileno (fpout), &info);
+      p->length = info.st_size - p->offset;
+         
+      mutt_parse_part (fpout, p);
+      if (s->fpout)
+      {
+       rewind (fpout);
+       tmpfp_buffer = s->fpin;
+       s->fpin = fpout;
+       mutt_body_handler (p, s);
+       s->fpin = tmpfp_buffer;
+      }
+      
+    }
+    fclose (smimeout);
+    smimeout = NULL;
+    mutt_unlink (outfile);
+
+    if (!outFile)
+    {
+      fclose (fpout);
+      mutt_unlink (tmptmpfname);
+    }
+    fpout = NULL;
+  }
+
+  if (s->flags & M_DISPLAY)
+  {
+    if (type & ENCRYPT)
+      state_attach_puts (_("\n[-- End of S/MIME encrypted data. --]\n"), s);
+    else
+      state_attach_puts (_("\n[-- End of S/MIME signed data. --]\n"), s);
+  }
+
+  if (type & SIGNOPAQUE)
+  {
+    char *line = NULL;
+    int lineno = 0;
+    size_t linelen;
+    
+    rewind (smimeerr);
+    
+    line = mutt_read_line (line, &linelen, smimeerr, &lineno);
+    if (linelen && !mutt_strcasecmp (line, "verification successful"))
+      m->goodsig = 1;
+    FREE (&line);
+  }
+  else 
+  {
+    m->goodsig = p->goodsig;
+    m->badsig  = p->badsig;
+  }
+  fclose (smimeerr);
+
+  return (p);
+}
+
+
+
+
+
+int smime_decrypt_mime (FILE *fpin, FILE **fpout, BODY *b, BODY **cur)
+{
+
+
+  char tempfile[_POSIX_PATH_MAX];
+  STATE s;
+  long tmpoffset = b->offset;
+  size_t tmplength = b->length;
+  int origType = b->type;
+  FILE *tmpfp=NULL;
+
+  if (!mutt_is_application_smime (b))
+    return -1;
+
+  if (b->parts)
+    return -1;
+  
+  memset (&s, 0, sizeof (s));
+  s.fpin = fpin;
+  fseek (s.fpin, b->offset, 0);
+
+  mutt_mktemp (tempfile);
+  if ((tmpfp = safe_fopen (tempfile, "w+")) == NULL)
+  {
+    mutt_perror (tempfile);
+    return (-1);
+  }
+
+  mutt_unlink (tempfile);
+  s.fpout = tmpfp;
+  mutt_decode_attachment (b, &s);
+  fflush (tmpfp);
+  b->length = ftell (s.fpout);
+  b->offset = 0;
+  rewind (tmpfp);
+  s.fpin = tmpfp;
+  s.fpout = 0;
+
+  mutt_mktemp (tempfile);
+  if ((*fpout = safe_fopen (tempfile, "w+")) == NULL)
+  {
+    mutt_perror (tempfile);
+    return (-1);
+  }
+  mutt_unlink (tempfile);
+
+  *cur = smime_handle_entity (b, &s, *fpout);
+  (*cur)->goodsig = b->goodsig;
+  (*cur)->badsig = b->badsig;
+  b->type = origType;
+  b->length = tmplength;
+  b->offset = tmpoffset;
+  fclose (tmpfp);
+
+  rewind (*fpout);
+  return (0);
+
+}
+
+
+void smime_application_smime_handler (BODY *m, STATE *s)
+{
+    
+    smime_handle_entity (m, s, NULL);
+
+}
+#endif /* CRYPT_BACKEND_CLASSIC_SMIME */
diff --git a/smime.h b/smime.h
new file mode 100644 (file)
index 0000000..360ecd8
--- /dev/null
+++ b/smime.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2001,2002 Oliver Ehli <elmy@acm.org>
+ *
+ *     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.
+ */
+
+
+#ifdef CRYPT_BACKEND_CLASSIC_SMIME
+
+#include "mutt_crypt.h"
+
+
+
+
+
+#define smime_valid_passphrase() crypt_valid_passphrase(APPLICATION_SMIME)
+
+void smime_void_passphrase (void);
+
+int   smime_decrypt_mime (FILE *, FILE **, BODY *, BODY **);
+
+void  smime_application_smime_handler (BODY *, STATE *);
+
+
+BODY* smime_sign_message (BODY *);
+
+BODY* smime_build_smime_entity (BODY *, char *);
+
+int   smime_verify_one(BODY *, STATE *, const char *);
+
+
+int   smime_verify_sender(HEADER *);
+
+
+char* smime_get_field_from_db (char *, char *, short, short);
+
+void  smime_getkeys (ENVELOPE *);
+
+char* smime_ask_for_key (char *, char *, short);
+
+char *smime_findKeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc);
+
+void  smime_invoke_import (char *, char *);
+
+#endif
+
+
diff --git a/smime_keys.pl b/smime_keys.pl
new file mode 100755 (executable)
index 0000000..97f53e2
--- /dev/null
@@ -0,0 +1,964 @@
+#! /usr/bin/perl -w
+
+# Copyright (C) 2001,2002 Oliver Ehli <elmy@acm.org>
+# Copyright (C) 2001 Mike Schiraldi <raldi@research.netsol.com>
+# Copyright (C) 2003 Bjoern Jacke <bjoern@j3e.de>
+#
+#     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.
+
+use strict;
+use File::Copy;
+
+umask 077;
+
+require "timelocal.pl";
+
+sub usage ();
+sub newfile ($;$$);
+sub mutt_Q ($ );
+sub mycopy ($$);
+
+#  directory setup routines
+sub mkdir_recursive ($ );
+sub init_paths ();
+
+# key/certificate management methods
+sub list_certs ();
+sub query_label ();
+sub add_entry ($$$$$ );
+sub add_certificate ($$$$;$ );
+sub add_key ($$$$);
+sub add_root_cert ($ );
+sub parse_pem (@ );
+sub handle_pem (@ );
+sub modify_entry ($$$;$ );
+sub remove_pair ($ );
+sub change_label ($ );
+sub verify_cert($$);
+sub do_verify($$$ );
+              
+# Get the directories mutt uses for certificate/key storage.
+
+my $mutt = $ENV{MUTT_CMDLINE} || 'mutt';
+my $opensslbin = "/usr/bin/openssl";
+my @tempfiles = ();
+my @cert_tmp_file = ();
+
+my $tmpdir;
+my $private_keys_path = mutt_Q 'smime_keys';
+my $certificates_path = mutt_Q 'smime_certificates';
+my $root_certs_path   = mutt_Q 'smime_ca_location';
+my $root_certs_switch;
+if ( -d $root_certs_path) {
+       $root_certs_switch = -CApath;
+} else {
+       $root_certs_switch = -CAfile;
+}
+
+
+#
+# OPS
+#
+
+if(@ARGV == 1 and $ARGV[0] eq "init") {
+    init_paths;
+}
+elsif(@ARGV == 1 and $ARGV[0] eq "list") {
+    list_certs;
+}
+elsif(@ARGV == 2 and $ARGV[0] eq "label") {
+    change_label($ARGV[1]);
+}
+elsif(@ARGV == 2 and $ARGV[0] eq "add_cert") {
+    my $format = -B $ARGV[1] ? 'DER' : 'PEM'; 
+    my $cmd = "$opensslbin x509 -noout -hash -in $ARGV[1] -inform $format";
+    my $cert_hash = `$cmd`;
+    $? and die "'$cmd' returned $?";
+    chomp($cert_hash); 
+    my $label = query_label;
+    &add_certificate($ARGV[1], \$cert_hash, 1, $label, '?');
+}
+elsif(@ARGV == 2 and $ARGV[0] eq "add_pem") {
+    -e $ARGV[1] and -s $ARGV[1] or die("$ARGV[1] is nonexistent or empty.");
+    open(PEM_FILE, "<$ARGV[1]") or die("Can't open $ARGV[1]: $!");
+    my @pem = <PEM_FILE>;
+    close(PEM_FILE);
+    handle_pem(@pem);
+}
+elsif( @ARGV == 2 and $ARGV[0] eq "add_p12") {
+    -e $ARGV[1] and -s $ARGV[1] or die("$ARGV[1] is nonexistent or empty.");
+
+    print "\nNOTE: This will ask you for two passphrases:\n";
+    print "       1. The passphrase you used for exporting\n";
+    print "       2. The passphrase you wish to secure your private key with.\n\n";
+
+    my $pem_file = "$ARGV[1].pem";
+    
+    my $cmd = "$opensslbin pkcs12 -in $ARGV[1] -out $pem_file";
+    system $cmd and die "'$cmd' returned $?";
+    
+    -e $pem_file and -s $pem_file or die("Conversion of $ARGV[1] failed.");
+    open(PEM_FILE, $pem_file) or die("Can't open $pem_file: $!");
+    my @pem = <PEM_FILE>;
+    close(PEM_FILE);
+    unlink $pem_file;
+    handle_pem(@pem);
+}
+elsif(@ARGV == 4 and $ARGV[0] eq "add_chain") {
+    my $mailbox;
+    my $format = -B $ARGV[2] ? 'DER' : 'PEM'; 
+    my $cmd = "$opensslbin x509 -noout -hash -in $ARGV[2] -inform $format";
+    my $cert_hash = `$cmd`;
+
+    $? and die "'$cmd' returned $?";
+
+    $format = -B $ARGV[3] ? 'DER' : 'PEM'; 
+
+    $cmd = "$opensslbin x509 -noout -hash -in $ARGV[3] -inform $format";
+    my $issuer_hash = `$cmd`;
+    $? and die "'$cmd' returned $?";
+    
+    chomp($cert_hash); 
+    chomp($issuer_hash);
+
+    my $label = query_label;
+    
+    add_certificate($ARGV[3], \$issuer_hash, 0, $label); 
+    my @mailbox = &add_certificate($ARGV[2], \$cert_hash, 1, $label, $issuer_hash);
+    
+    foreach $mailbox (@mailbox) {
+      chomp($mailbox);
+      add_key($ARGV[1], $cert_hash, $mailbox, $label);
+    }
+}
+elsif((@ARGV == 2 or @ARGV == 3) and $ARGV[0] eq "verify") {
+    verify_cert($ARGV[1], $ARGV[2]);
+}
+elsif(@ARGV == 2 and $ARGV[0] eq "remove") {
+    remove_pair($ARGV[1]);
+}
+elsif(@ARGV == 2 and $ARGV[0] eq "add_root") {
+    add_root_cert($ARGV[1]);
+}
+else {    
+    usage;
+    exit(1);
+}
+
+exit(0);
+
+
+
+
+
+##############  sub-routines  ########################
+
+sub usage () {
+    print <<EOF;
+
+Usage: smime_keys <operation>  [file(s) | keyID [file(s)]]
+
+        with operation being one of:
+
+        init      : no files needed, inits directory structure.
+
+        list      : lists the certificates stored in database.
+        label     : keyID required. changes/removes/adds label.
+        remove    : keyID required.
+        verify    : 1=keyID and optionally 2=CRL
+                    Verifies the certificate chain, and optionally wether
+                    this certificate is included in supplied CRL (PEM format).
+                    Note: to verify all certificates at the same time,
+                    replace keyID with "all"
+
+        add_cert  : certificate required.
+        add_chain : three files reqd: 1=Key, 2=certificate
+                    plus 3=intermediate certificate(s).
+        add_p12   : one file reqd. Adds keypair to database.
+                    file is PKCS12 (e.g. export from netscape).
+        add_pem   : one file reqd. Adds keypair to database.
+                    (file was converted from e.g. PKCS12).
+
+        add_root  : one file reqd. Adds PEM root certificate to the location
+                    specified within muttrc (smime_verify_* command)
+
+EOF
+}
+
+sub mutt_Q ($) {
+    my $var = shift or die;
+
+    my $cmd = "$mutt -v >/dev/null 2>/dev/null";
+    system ($cmd) == 0 
+        or die<<EOF;
+Couldn't launch mutt. I attempted to do so by running the command "$mutt".
+If that's not the right command, you can override it by setting the 
+environment variable \$MUTT_CMDLINE
+EOF
+
+    $cmd = "$mutt -Q $var 2>/dev/null";
+    my $answer = `$cmd`;
+
+    $? and die<<EOF;
+Couldn't look up the value of the mutt variable "$var". 
+You must set this in your mutt config file. See contrib/smime.rc for an example.
+EOF
+#'
+
+    $answer =~ /\"(.*?)\"/ and return $1;
+    
+    $answer =~ /^Mutt (.*?) / and die<<EOF;
+This script requires mutt 1.5.0 or later. You are using mutt $1.
+EOF
+    
+    die "Value of $var is weird\n";
+}
+
+sub mycopy ($$) {
+    my $source = shift or die;
+    my $dest = shift or die;
+
+    copy $source, $dest or die "Problem copying $source to $dest: $!\n";
+}
+
+#
+#  directory setup routines
+#
+
+
+sub mkdir_recursive ($) {
+    my $path = shift or die;
+    my $tmp_path;
+    
+    for my $dir (split /\//, $path) {
+        $tmp_path .= "$dir/";
+
+        -d $tmp_path 
+            or mkdir $tmp_path, 0700
+                or die "Can't mkdir $tmp_path: $!";
+    }
+}
+
+sub init_paths () {
+    mkdir_recursive($certificates_path);
+    mkdir_recursive($private_keys_path);
+
+    my $file;
+
+    $file = $certificates_path . "/.index";
+    -f $file or open(TMP_FILE, ">$file") and close(TMP_FILE)
+        or die "Can't touch $file: $!";
+
+    $file = $private_keys_path . "/.index";
+    -f $file or open(TMP_FILE, ">$file") and close(TMP_FILE)
+        or die "Can't touch $file: $!";
+}
+
+
+
+#
+# certificate management methods
+#
+
+sub list_certs () {
+  my %keyflags = ( 'i', '(Invalid)',  'r', '(Revoked)', 'e', '(Expired)',
+                  'u', '(Unverified)', 'v', '(Valid)', 't', '(Trusted)');
+
+  open(INDEX, "<$certificates_path/.index") or 
+    die "Couldn't open $certificates_path/.index: $!";
+  
+  print "\n";
+  while(<INDEX>) {
+    my $tmp;
+    my @tmp;
+    my $tab = "            ";
+    my @fields = split;
+
+    if($fields[2] eq '-') {
+      print "$fields[1]: Issued for: $fields[0] $keyflags{$fields[4]}\n";
+    } else {
+      print "$fields[1]: Issued for: $fields[0] \"$fields[2]\" $keyflags{$fields[4]}\n";
+    }
+
+    my $certfile = "$certificates_path/$fields[1]";
+    my $cert;
+    {
+        open F, $certfile or
+            die "Couldn't open $certfile: $!";
+        local $/;
+        $cert = <F>;
+       close F;
+    }
+
+    my $subject_in;
+    my $issuer_in;
+    my $date1_in;
+    my $date2_in;
+
+    my $format = -B $certfile ? 'DER' : 'PEM'; 
+    my $cmd = "$opensslbin x509 -subject -issuer -dates -noout -in $certfile -inform $format";
+    ($subject_in, $issuer_in, $date1_in, $date2_in) = `$cmd`;
+    $? and print "ERROR: '$cmd' returned $?\n\n" and next;
+
+
+    my @subject = split(/\//, $subject_in);
+    while(@subject) {
+      $tmp = shift @subject;
+      ($tmp =~ /^CN\=/) and last;
+      undef $tmp;
+    }
+    defined $tmp and @tmp = split (/\=/, $tmp) and
+      print $tab."Subject: $tmp[1]\n";
+
+    my @issuer = split(/\//, $issuer_in);
+    while(@issuer) {
+      $tmp = shift @issuer;
+      ($tmp =~ /^CN\=/) and last;
+      undef $tmp;
+    }
+    defined $tmp and @tmp = split (/\=/, $tmp) and
+      print $tab."Issued by: $tmp[1]";
+
+    if ( defined $date1_in and defined $date2_in ) {
+      @tmp = split (/\=/, $date1_in);
+      $tmp = $tmp[1];
+      @tmp = split (/\=/, $date2_in);
+      print $tab."Certificate is not valid before $tmp".
+       $tab."                      or after  ".$tmp[1];
+    }
+
+    -e "$private_keys_path/$fields[1]" and
+      print "$tab - Matching private key installed -\n";
+
+    $format = -B "$certificates_path/$fields[1]" ? 'DER' : 'PEM'; 
+    $cmd = "$opensslbin x509 -purpose -noout -in $certfile -inform $format";
+    my $purpose_in = `$cmd`;
+    $? and die "'$cmd' returned $?";
+
+    my @purpose = split (/\n/, $purpose_in);
+    print "$tab$purpose[0] (displays S/MIME options only)\n";
+    while(@purpose) {
+      $tmp = shift @purpose;
+      ($tmp =~ /^S\/MIME/ and $tmp =~ /Yes/) or next;
+      my @tmptmp = split (/:/, $tmp);
+      print "$tab  $tmptmp[0]\n";
+    }
+
+    print "\n";
+  }
+  
+  close(INDEX);
+}
+
+
+
+sub query_label () {
+    my @words;
+    my $input;
+
+    print "\nYou may assign a label to this key, so you don't have to remember\n";
+    print "the key ID. This has to be _one_ word (no whitespaces).\n\n";
+
+    print "Enter label: ";
+    chomp($input = <STDIN>);
+
+    my ($label, $junk) = split(/\s/, $input, 2);     
+    
+    defined $junk 
+        and print "\nUsing '$label' as label; ignoring '$junk'\n";
+
+    defined $label || ($label =  "-");
+
+    return $label;
+}
+
+
+
+sub add_entry ($$$$$) {
+    my $mailbox = shift or die;
+    my $hashvalue = shift or die;
+    my $use_cert = shift;
+    my $label = shift or die;
+    my $issuer_hash = shift;
+
+    my @fields;
+
+    if ($use_cert) {
+        open(INDEX, "+<$certificates_path/.index") or 
+            die "Couldn't open $certificates_path/.index: $!";
+    }
+    else {
+        open(INDEX, "+<$private_keys_path/.index") or 
+            die "Couldn't open $private_keys_path/.index: $!";
+    }
+
+    while(<INDEX>) {
+        @fields = split;
+        return if ($fields[0] eq $mailbox && $fields[1] eq $hashvalue);
+    }
+
+    if ($use_cert) {
+        print INDEX "$mailbox $hashvalue $label $issuer_hash u\n";
+    }
+    else {
+        print INDEX "$mailbox $hashvalue $label \n";
+    }
+
+    close(INDEX);
+}
+
+
+sub add_certificate ($$$$;$) {
+    my $filename = shift or die;
+    my $hashvalue = shift or die;
+    my $add_to_index = shift;
+    my $label = shift or die;
+    my $issuer_hash = shift;
+
+    my $iter = 0;
+    my @mailbox;
+    my $mailbox;
+
+    while(-e "$certificates_path/$$hashvalue.$iter") {
+        my ($t1, $t2);
+        my $format = -B $filename ? 'DER' : 'PEM'; 
+        my $cmd = "$opensslbin x509 -in $filename -inform $format -fingerprint -noout";
+        $t1 = `$cmd`;
+        $? and die "'$cmd' returned $?";
+
+        $format = -B "$certificates_path/$$hashvalue.$iter" ? 'DER' : 'PEM'; 
+        $cmd = "$opensslbin x509 -in $certificates_path/$$hashvalue.$iter -inform $format -fingerprint -noout";
+        $t2 = `$cmd`;
+        $? and die "'$cmd' returned $?";
+        
+        $t1 eq $t2 and last;
+
+        $iter++;
+    }
+    $$hashvalue .= ".$iter";
+    
+    if (-e "$certificates_path/$$hashvalue") {
+            print "\nCertificate: $certificates_path/$$hashvalue already installed.\n";
+    }
+    else {
+        mycopy $filename, "$certificates_path/$$hashvalue";
+
+        if ($add_to_index) {
+            my $format = -B $filename ? 'DER' : 'PEM'; 
+           my $cmd = "$opensslbin x509 -in $filename -inform $format -email -noout";
+           @mailbox = `$cmd`;
+           $? and die "'$cmd' returned $?";
+
+           foreach $mailbox (@mailbox) {
+             chomp($mailbox);
+             add_entry($mailbox, $$hashvalue, 1, $label, $issuer_hash);
+
+             print "\ncertificate $$hashvalue ($label) for $mailbox added.\n";
+           }
+           verify_cert($$hashvalue, undef);
+        }
+        else {
+            print "added certificate: $certificates_path/$$hashvalue.\n";
+        }
+    }
+
+    return @mailbox;
+}
+
+
+sub add_key ($$$$) {
+    my $file = shift or die;
+    my $hashvalue = shift or die;
+    my $mailbox = shift or die;
+    my $label = shift or die;
+
+    unless (-e "$private_keys_path/$hashvalue") {
+        mycopy $file, "$private_keys_path/$hashvalue";
+    }    
+
+    add_entry($mailbox, $hashvalue, 0, $label, "");
+    print "added private key: " .
+      "$private_keys_path/$hashvalue for $mailbox\n";
+} 
+
+
+
+
+
+
+sub parse_pem (@) {
+    my $state = 0;
+    my $cert_iter = 0;
+    my @bag_attribs;
+    my $numBags = 0;
+
+    $cert_tmp_file[$cert_iter] = newfile("cert_tmp.$cert_iter","temp");
+    my $cert_tmp_iter = $cert_tmp_file[$cert_iter];
+    open(CERT_FILE, ">$cert_tmp_iter") 
+        or die "Couldn't open $cert_tmp_iter: $!";
+
+    while($_ = shift(@_)) {
+        if(/^Bag Attributes/) {
+            $numBags++;
+            $state == 0 or  die("PEM-parse error at: $.");
+           $state = 1;
+            $bag_attribs[$cert_iter*4+1] = "";
+            $bag_attribs[$cert_iter*4+2] = "";
+            $bag_attribs[$cert_iter*4+3] = "";
+        }
+
+        ($state == 1) and /localKeyID:\s*(.*)/ 
+            and ($bag_attribs[$cert_iter*4+1] = $1);
+
+        ($state == 1) and /subject=\s*(.*)/    
+            and ($bag_attribs[$cert_iter*4+2] = $1);
+
+        ($state == 1) and /issuer=\s*(.*)/     
+            and ($bag_attribs[$cert_iter*4+3] = $1);
+        
+        if(/^-----/) {
+            if(/BEGIN/) {
+                print CERT_FILE;
+                $state = 2;
+
+                if(/PRIVATE/) {
+                    $bag_attribs[$cert_iter*4] = "K";
+                    next;
+                }
+                if(/CERTIFICATE/) {
+                    $bag_attribs[$cert_iter*4] = "C";
+                    next;
+                }
+                die("What's this: $_");
+            }
+            if(/END/) {
+                $state = 0;
+                print CERT_FILE;
+                close(CERT_FILE);
+                $cert_iter++;
+               $cert_tmp_file[$cert_iter] = newfile("cert_tmp.$cert_iter","temp");
+               $cert_tmp_iter = $cert_tmp_file[$cert_iter];
+                open(CERT_FILE, ">$cert_tmp_iter")
+                    or die "Couldn't open $cert_tmp_iter: $!";
+                next;
+            }
+        }
+        print CERT_FILE;
+    }
+    close(CERT_FILE);
+
+    # I'll add support for unbagged cetificates, in case this is needed.
+    $numBags == $cert_iter or 
+        die("Not all contents were bagged. can't continue.");
+
+    return @bag_attribs;
+}
+
+
+# This requires the Bag Attributes to be set
+sub handle_pem (@) {
+
+    my @pem_contents;
+    my $iter=0;
+    my $root_cert;
+    my $key;
+    my $certificate;
+    my $intermediate;
+    my @mailbox;
+    my $mailbox;
+
+    @pem_contents = &parse_pem(@_);
+
+    # private key and certificate use the same 'localKeyID'
+    while($iter <= $#pem_contents / 4) {
+        if($pem_contents[$iter * 4] eq "K") {
+            $key = $iter;
+            last;
+        }
+        $iter++;
+    }
+    ($iter > $#pem_contents / 2) and die("Couldn't find private key!");
+
+    $pem_contents[($key * 4)+1] or die("Attribute 'localKeyID' wasn't set.");
+
+    $iter = 0;
+    while($iter <= $#pem_contents / 4) {
+        $iter == $key and ($iter++) and next;
+        if($pem_contents[($iter * 4)+1] eq $pem_contents[($key * 4)+1]) {
+            $certificate = $iter;
+            last;
+        }
+        $iter++;
+    }
+    ($iter > $#pem_contents / 4) and die("Couldn't find matching certificate!");
+
+    my $tmp_key = newfile("tmp_key","temp");
+    mycopy $cert_tmp_file[$key], $tmp_key;
+    my $tmp_certificate = newfile("tmp_certificate","temp");
+    mycopy $cert_tmp_file[$certificate], $tmp_certificate;
+
+    # root certificate is self signed
+    $iter = 0;
+
+    while($iter <= $#pem_contents / 4) {
+        if ($iter == $key or $iter == $certificate) {
+            $iter++; 
+            next;
+        }
+
+        if($pem_contents[($iter * 4)+2] eq $pem_contents[($iter * 4)+3]) {
+            $root_cert = $iter;
+            last;
+        }
+        $iter++;
+    }
+    if ($iter > $#pem_contents / 4) {
+      print "Couldn't identify root certificate!\n";
+      $root_cert = -1;      
+    }
+
+    # what's left are intermediate certificates.
+    $iter = 0;
+
+    # needs to be set, so we can check it later
+    $intermediate = $root_cert;
+    my $tmp_issuer_cert = newfile("tmp_issuer_cert","temp");
+    while($iter <= $#pem_contents / 4) {
+        if ($iter == $key or $iter == $certificate or $iter == $root_cert) {
+            $iter++; 
+            next;
+        }
+
+       open (IC, ">> $tmp_issuer_cert") or die "can't open $tmp_issuer_cert: $?";
+       my $cert_tmp_iter = $cert_tmp_file[$iter];
+       open (CERT, "< $cert_tmp_iter") or die "can't open $cert_tmp_iter: $?";
+       print IC while (<CERT>);
+       close IC;
+       close CERT;
+
+       # although there may be many, just need to know if there was any
+       $intermediate = $iter;
+
+        $iter++;
+    }
+
+    # no intermediate certificates ? use root-cert instead (if that was found...)
+    if($intermediate == $root_cert) {
+        if ($root_cert == -1) {
+         die("No root and no intermediate certificates. Can't continue.");
+       }
+        mycopy $cert_tmp_file[$root_cert], $tmp_issuer_cert;
+    }
+
+    my $label = query_label;
+
+    my $format = -B $tmp_certificate ? 'DER' : 'PEM'; 
+    my $cmd = "$opensslbin x509 -noout -hash -in $tmp_certificate -inform $format";
+    my $cert_hash = `$cmd`;
+    $? and die "'$cmd' returned $?";
+
+    $format = -B $tmp_issuer_cert ? 'DER' : 'PEM'; 
+    $cmd = "$opensslbin x509 -noout -hash -in $tmp_issuer_cert -inform $format";
+    my $issuer_hash = `$cmd`;
+    $? and die "'$cmd' returned $?";
+
+    chomp($cert_hash); chomp($issuer_hash);
+
+    # Note: $cert_hash will be changed to reflect the correct filename
+    #       within add_cert() ONLY, so these _have_ to get called first..
+    add_certificate($tmp_issuer_cert, \$issuer_hash, 0, $label);
+    @mailbox = &add_certificate("$tmp_certificate", \$cert_hash, 1, $label, $issuer_hash); 
+    foreach $mailbox (@mailbox) {
+      chomp($mailbox);
+      add_key($tmp_key, $cert_hash, $mailbox, $label);
+    }
+}
+
+
+
+
+
+
+sub modify_entry ($$$;$ ) {
+    my $op = shift or die;
+    my $hashvalue = shift or die;
+    my $use_cert = shift;
+    my $crl;
+    my $label;
+    my $path;
+    my @fields;
+
+    $op eq 'L' and ($label = shift or die);
+    $op eq 'V' and ($crl = shift);
+
+
+    if ($use_cert) {
+        $path = $certificates_path;
+    }
+    else {
+        $path = $private_keys_path;
+    }
+
+    open(INDEX, "<$path/.index") or  
+      die "Couldn't open $path/.index: $!";
+    my $newindex = newfile("$path/.index.tmp");
+    open(NEW_INDEX, ">$newindex") or 
+      die "Couldn't create $newindex: $!";
+
+    while(<INDEX>) {
+        @fields = split;
+        if($fields[1] eq $hashvalue or $hashvalue eq 'all') {
+         $op eq 'R' and next;
+         print NEW_INDEX "$fields[0] $fields[1]";
+         if($op eq 'L') {
+           if($use_cert) {
+             print NEW_INDEX " $label $fields[3] $fields[4]";
+           }
+           else {
+             print NEW_INDEX " $label";
+           }
+         }
+         if ($op eq 'V') {
+           print "\n==> about to verify certificate of $fields[0]\n";
+           my $flag = &do_verify($fields[1], $fields[3], $crl);
+           print NEW_INDEX " $fields[2] $fields[3] $flag";
+         }
+         print NEW_INDEX "\n";
+         next;
+       }
+       print NEW_INDEX;
+    }
+    close(INDEX);
+    close(NEW_INDEX);
+
+    rename $newindex, "$path/.index" 
+        or die "Couldn't rename $newindex to $path/.index: $!\n";
+
+    print "\n";
+}
+
+
+
+
+sub remove_pair ($ ) {
+  my $keyid = shift or die;
+
+  if (-e "$certificates_path/$keyid") {
+    unlink "$certificates_path/$keyid";
+    modify_entry('R', $keyid, 1);
+    print "Removed certificate $keyid.\n";
+  }
+  else {
+    die "No such certificate: $keyid";
+  }
+
+  if (-e "$private_keys_path/$keyid") {
+    unlink "$private_keys_path/$keyid";
+    modify_entry('R', $keyid, 0);
+    print "Removed private key $keyid.\n";
+  }
+}
+
+
+
+sub change_label ($ ) {
+  my $keyid = shift or die;
+  
+  my $label = query_label;
+
+  if (-e "$certificates_path/$keyid") {
+    modify_entry('L', $keyid, 1, $label);
+    print "Changed label for certificate $keyid.\n";
+  }
+  else {
+    die "No such certificate: $keyid";
+  }
+
+  if (-e "$private_keys_path/$keyid") {
+    modify_entry('L', $keyid, 0, $label);
+    print "Changed label for private key $keyid.\n";
+  }
+
+}
+
+
+
+
+sub verify_cert ($$) {
+  my $keyid = shift or die;
+  my $crl = shift;
+
+  -e "$certificates_path/$keyid" or $keyid eq 'all'
+    or die "No such certificate: $keyid";
+  modify_entry('V', $keyid, 1, $crl);
+}
+
+
+
+
+sub do_verify($$$) {
+
+  my $cert = shift or die;
+  my $issuerid = shift or die;
+  my $crl = shift;
+
+  my $result = 'i';
+  my $trust_q;
+  my $issuer_path;
+  my $cert_path = "$certificates_path/$cert";
+
+  if($issuerid eq '?') {
+    $issuer_path = "$certificates_path/$cert";
+  } else {
+    $issuer_path = "$certificates_path/$issuerid";
+  }
+
+  my $cmd = "$opensslbin verify $root_certs_switch $root_certs_path -purpose smimesign -purpose smimeencrypt -untrusted $issuer_path $cert_path";
+  my $output = `$cmd`;
+  $? and die "'$cmd' returned $?";
+  chop $output;
+  print "\n$output\n";
+
+  ($output =~ /OK/) and ($result = 'v');
+
+  $result eq 'i' and return $result;
+
+  my $format = -B $cert_path ? 'DER' : 'PEM'; 
+  $cmd = "$opensslbin x509 -dates -serial -noout -in $cert_path -inform $format";
+  (my $date1_in, my $date2_in, my $serial_in) = `$cmd`;
+  $? and die "'$cmd' returned $?";
+
+  if ( defined $date1_in and defined $date2_in ) {
+    my @tmp = split (/\=/, $date1_in);
+    my $tmp = $tmp[1];
+    @tmp = split (/\=/, $date2_in);
+    my %months = ('Jan', '00', 'Feb', '01', 'Mar', '02', 'Apr', '03',
+                 'May', '04', 'Jun', '05', 'Jul', '06', 'Aug', '07',
+                 'Sep', '08', 'Oct', '09', 'Nov', '10', 'Dec', '11');
+
+    my @fields =
+      $tmp =~ /(\w+)\s*(\d+)\s*(\d+):(\d+):(\d+)\s*(\d+)\s*GMT/;
+
+    $#fields != 5 and print "Expiration Date: Parse Error :  $tmp\n\n" or
+      timegm($fields[4], $fields[3], $fields[2], $fields[1],
+            $months{$fields[0]}, $fields[5]) > time and $result = 'e';
+    $result eq 'e' and print "Certificate is not yet valid.\n" and return $result;
+
+    @fields =
+      $tmp[1] =~ /(\w+)\s*(\d+)\s*(\d+):(\d+):(\d+)\s*(\d+)\s*GMT/;
+
+    $#fields != 5 and print "Expiration Date: Parse Error :  $tmp[1]\n\n" or
+      timegm($fields[4], $fields[3], $fields[2], $fields[1],
+            $months{$fields[0]}, $fields[5]) < time and $result = 'e';
+    $result eq 'e' and print "Certificate has expired.\n" and return $result;
+
+  }
+    
+  if ( defined $crl ) {
+    my @serial = split (/\=/, $serial_in);
+    my $cmd = "$opensslbin crl -text -noout -in $crl | grep -A1 $serial[1]";
+    (my $l1, my $l2) = `$cmd`;
+    $? and die "'$cmd' returned $?";
+    
+    if ( defined $l2 ) {
+      my @revoke_date = split (/:\s/, $l2);
+      print "FAILURE: Certificate $cert has been revoked on $revoke_date[1]\n";
+      $result = 'r';
+    }
+  }    
+  print "\n";
+
+  if ($result eq 'v') {
+    return 't';
+  }
+
+  return $result;
+}
+
+
+
+sub add_root_cert ($) {
+  my $root_cert = shift or die;
+
+  my $format = -B $root_cert ? 'DER' : 'PEM'; 
+
+  my $cmd = "$opensslbin x509 -noout -hash -in $root_cert -inform $format";
+  my $root_hash = `$cmd`;
+  $? and die "'$cmd' returned $?";
+
+  if (-d $root_certs_path) {
+    -e "$root_certs_path/$root_hash" or
+        mycopy $root_cert, "$root_certs_path/$root_hash";
+  }
+  else {
+    open(ROOT_CERTS, ">>$root_certs_path") or 
+      die ("Couldn't open $root_certs_path for writing");
+
+    $cmd = "$opensslbin x509 -in $root_cert -inform $format -fingerprint -noout";
+    $? and die "'$cmd' returned $?";
+    chomp(my $md5fp = `$cmd`);
+
+    $cmd = "$opensslbin x509 -in $root_cert -inform $format -text -noout";
+    $? and die "'$cmd' returned $?";
+    my @cert_text = `$cmd`;
+
+    print "Enter a label, name or description for this certificate: ";
+    my $input = <STDIN>;
+
+    my $line = "=======================================\n";
+    print ROOT_CERTS "\n$input$line$md5fp\nPEM-Data:\n";
+
+    $cmd = "$opensslbin x509 -in $root_cert -inform $format";
+    my $cert = `$cmd`;
+    $? and die "'$cmd' returned $?";
+    print ROOT_CERTS $cert;
+    print ROOT_CERTS @cert_text;
+    close (ROOT_CERTS);
+  }
+  
+}
+
+sub newfile ($;$$) {
+       # returns a file name which does not exist for tmp file creation
+       my $filename = shift;
+       my $option = shift;
+       $option = "notemp" if (not defined($option));
+       if (! $tmpdir and $option eq "temp") {
+               $tmpdir = mutt_Q 'tmpdir';
+               $tmpdir = newfile("$tmpdir/smime");
+               mkdir $tmpdir, 0700 || die "Can't create $tmpdir: $!\n";
+       }
+       $filename = "$tmpdir/$filename" if ($option eq "temp");
+       my $newfilename = $filename;
+       my $count = 0;
+       while (-e $newfilename) {
+               $newfilename = "$filename.$count";
+               $count++;
+       }
+       unshift(@tempfiles,$newfilename);
+       return $newfilename;
+}
+
+
+END {
+       # remove all our temporary files in the end:
+       for (@tempfiles){
+               if (-f) {
+                       unlink;
+               } elsif (-d) { 
+                       rmdir;
+               }
+       }
+}
diff --git a/snprintf.c b/snprintf.c
new file mode 100644 (file)
index 0000000..c2ebbde
--- /dev/null
@@ -0,0 +1,789 @@
+/**************************************************************
+ * Original:
+ * Patrick Powell Tue Apr 11 09:48:21 PDT 1995
+ * A bombproof version of doprnt (dopr) included.
+ * Sigh.  This sort of thing is always nasty do deal with.  Note that
+ * the version here does not include floating point...
+ *
+ * snprintf() is used instead of sprintf() as it does limit checks
+ * for string length.  This covers a nasty loophole.
+ *
+ * The other functions are there to prevent NULL pointers from
+ * causing nast effects.
+ *
+ * More Recently:
+ *  Brandon Long <blong@fiction.net> 9/15/96 for mutt 0.43
+ *  This was ugly.  It is still ugly.  I opted out of floating point
+ *  numbers, but the formatter understands just about everything
+ *  from the normal C string format, at least as far as I can tell from
+ *  the Solaris 2.5 printf(3S) man page.
+ *
+ *  Brandon Long <blong@fiction.net> 10/22/97 for mutt 0.87.1
+ *    Ok, added some minimal floating point support, which means this
+ *    probably requires libm on most operating systems.  Don't yet
+ *    support the exponent (e,E) and sigfig (g,G).  Also, fmtint()
+ *    was pretty badly broken, it just wasn't being exercised in ways
+ *    which showed it, so that's been fixed.  Also, formated the code
+ *    to mutt conventions, and removed dead code left over from the
+ *    original.  Also, there is now a builtin-test, just compile with:
+ *           gcc -DTEST_SNPRINTF -o snprintf snprintf.c -lm
+ *    and run snprintf for results.
+ * 
+ *  Thomas Roessler <roessler@does-not-exist.org> 01/27/98 for mutt 0.89i
+ *    The PGP code was using unsigned hexadecimal formats. 
+ *    Unfortunately, unsigned formats simply didn't work.
+ *
+ *  Michael Elkins <me@mutt.org> 03/05/98 for mutt 0.90.8
+ *    The original code assumed that both snprintf() and vsnprintf() were
+ *    missing.  Some systems only have snprintf() but not vsnprintf(), so
+ *    the code is now broken down under HAVE_SNPRINTF and HAVE_VSNPRINTF.
+ *
+ **************************************************************/
+
+#include "config.h"
+
+#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF)
+
+#include <string.h>
+# include <ctype.h>
+#include <sys/types.h>
+
+/* Define this as a fall through, HAVE_STDARG_H is probably already set */
+
+#define HAVE_VARARGS_H
+
+/* varargs declarations: */
+
+#if defined(HAVE_STDARG_H)
+# include <stdarg.h>
+# define HAVE_STDARGS    /* let's hope that works everywhere (mj) */
+# define VA_LOCAL_DECL   va_list ap
+# define VA_START(f)     va_start(ap, f)
+# define VA_SHIFT(v,t)  ;   /* no-op for ANSI */
+# define VA_END          va_end(ap)
+#else
+# if defined(HAVE_VARARGS_H)
+#  include <varargs.h>
+#  undef HAVE_STDARGS
+#  define VA_LOCAL_DECL   va_list ap
+#  define VA_START(f)     va_start(ap)      /* f is ignored! */
+#  define VA_SHIFT(v,t) v = va_arg(ap,t)
+#  define VA_END        va_end(ap)
+# else
+/*XX ** NO VARARGS ** XX*/
+# endif
+#endif
+
+/*int snprintf (char *str, size_t count, const char *fmt, ...);*/
+/*int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);*/
+
+static void dopr (char *buffer, size_t maxlen, const char *format, 
+                  va_list args);
+static void fmtstr (char *buffer, size_t *currlen, size_t maxlen,
+                   char *value, int flags, int min, int max);
+static void fmtint (char *buffer, size_t *currlen, size_t maxlen,
+                   long value, int base, int min, int max, int flags);
+static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
+                  long double fvalue, int min, int max, int flags);
+static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c );
+
+/*
+ * dopr(): poor man's version of doprintf
+ */
+
+/* format read states */
+#define DP_S_DEFAULT 0
+#define DP_S_FLAGS   1
+#define DP_S_MIN     2
+#define DP_S_DOT     3
+#define DP_S_MAX     4
+#define DP_S_MOD     5
+#define DP_S_CONV    6
+#define DP_S_DONE    7
+
+/* format flags - Bits */
+#define DP_F_MINUS     (1 << 0)
+#define DP_F_PLUS      (1 << 1)
+#define DP_F_SPACE     (1 << 2)
+#define DP_F_NUM       (1 << 3)
+#define DP_F_ZERO      (1 << 4)
+#define DP_F_UP        (1 << 5)
+#define DP_F_UNSIGNED  (1 << 6)
+
+/* Conversion Flags */
+#define DP_C_SHORT   1
+#define DP_C_LONG    2
+#define DP_C_LDOUBLE 3
+
+#define char_to_int(p) (p - '0')
+#undef MAX
+#define MAX(p,q) ((p >= q) ? p : q)
+
+static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
+{
+  char ch;
+  long value;
+  long double fvalue;
+  char *strvalue;
+  int min;
+  int max;
+  int state;
+  int flags;
+  int cflags;
+  size_t currlen;
+  
+  state = DP_S_DEFAULT;
+  currlen = flags = cflags = min = 0;
+  max = -1;
+  ch = *format++;
+
+  while (state != DP_S_DONE)
+  {
+    if ((ch == '\0') || (currlen >= maxlen)) 
+      state = DP_S_DONE;
+
+    switch(state) 
+    {
+    case DP_S_DEFAULT:
+      if (ch == '%') 
+       state = DP_S_FLAGS;
+      else 
+       dopr_outch (buffer, &currlen, maxlen, ch);
+      ch = *format++;
+      break;
+    case DP_S_FLAGS:
+      switch (ch) 
+      {
+      case '-':
+       flags |= DP_F_MINUS;
+        ch = *format++;
+       break;
+      case '+':
+       flags |= DP_F_PLUS;
+        ch = *format++;
+       break;
+      case ' ':
+       flags |= DP_F_SPACE;
+        ch = *format++;
+       break;
+      case '#':
+       flags |= DP_F_NUM;
+        ch = *format++;
+       break;
+      case '0':
+       flags |= DP_F_ZERO;
+        ch = *format++;
+       break;
+      default:
+       state = DP_S_MIN;
+       break;
+      }
+      break;
+    case DP_S_MIN:
+      if (isdigit((unsigned char)ch)) 
+      {
+       min = 10*min + char_to_int (ch);
+       ch = *format++;
+      } 
+      else if (ch == '*') 
+      {
+       min = va_arg (args, int);
+       ch = *format++;
+       state = DP_S_DOT;
+      } 
+      else 
+       state = DP_S_DOT;
+      break;
+    case DP_S_DOT:
+      if (ch == '.') 
+      {
+       state = DP_S_MAX;
+       ch = *format++;
+      } 
+      else 
+       state = DP_S_MOD;
+      break;
+    case DP_S_MAX:
+      if (isdigit((unsigned char)ch)) 
+      {
+       if (max < 0)
+         max = 0;
+       max = 10*max + char_to_int (ch);
+       ch = *format++;
+      } 
+      else if (ch == '*') 
+      {
+       max = va_arg (args, int);
+       ch = *format++;
+       state = DP_S_MOD;
+      } 
+      else 
+       state = DP_S_MOD;
+      break;
+    case DP_S_MOD:
+      /* Currently, we don't support Long Long, bummer */
+      switch (ch) 
+      {
+      case 'h':
+       cflags = DP_C_SHORT;
+       ch = *format++;
+       break;
+      case 'l':
+       cflags = DP_C_LONG;
+       ch = *format++;
+       break;
+      case 'L':
+       cflags = DP_C_LDOUBLE;
+       ch = *format++;
+       break;
+      default:
+       break;
+      }
+      state = DP_S_CONV;
+      break;
+    case DP_S_CONV:
+      switch (ch) 
+      {
+      case 'd':
+      case 'i':
+       if (cflags == DP_C_SHORT) 
+         value = va_arg (args, short int);
+       else if (cflags == DP_C_LONG)
+         value = va_arg (args, long int);
+       else
+         value = va_arg (args, int);
+       fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
+       break;
+      case 'o':
+       flags |= DP_F_UNSIGNED;
+       if (cflags == DP_C_SHORT)
+         value = va_arg (args, unsigned short int);
+       else if (cflags == DP_C_LONG)
+         value = va_arg (args, unsigned long int);
+       else
+         value = va_arg (args, unsigned int);
+       fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags);
+       break;
+      case 'u':
+       flags |= DP_F_UNSIGNED;
+       if (cflags == DP_C_SHORT)
+         value = va_arg (args, unsigned short int);
+       else if (cflags == DP_C_LONG)
+         value = va_arg (args, unsigned long int);
+       else
+         value = va_arg (args, unsigned int);
+       fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
+       break;
+      case 'X':
+       flags |= DP_F_UP;
+      case 'x':
+       flags |= DP_F_UNSIGNED;
+       if (cflags == DP_C_SHORT)
+         value = va_arg (args, unsigned short int);
+       else if (cflags == DP_C_LONG)
+         value = va_arg (args, unsigned long int);
+       else
+         value = va_arg (args, unsigned int);
+       fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags);
+       break;
+      case 'f':
+       if (cflags == DP_C_LDOUBLE)
+         fvalue = va_arg (args, long double);
+       else
+         fvalue = va_arg (args, double);
+       /* um, floating point? */
+       fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags);
+       break;
+      case 'E':
+       flags |= DP_F_UP;
+      case 'e':
+       if (cflags == DP_C_LDOUBLE)
+         fvalue = va_arg (args, long double);
+       else
+         fvalue = va_arg (args, double);
+       break;
+      case 'G':
+       flags |= DP_F_UP;
+      case 'g':
+       if (cflags == DP_C_LDOUBLE)
+         fvalue = va_arg (args, long double);
+       else
+         fvalue = va_arg (args, double);
+       break;
+      case 'c':
+       dopr_outch (buffer, &currlen, maxlen, va_arg (args, int));
+       break;
+      case 's':
+       strvalue = va_arg (args, char *);
+       if (max < 0) 
+         max = maxlen; /* ie, no max */
+       fmtstr (buffer, &currlen, maxlen, strvalue, flags, min, max);
+       break;
+      case 'p':
+       strvalue = va_arg (args, void *);
+       fmtint (buffer, &currlen, maxlen, (long) strvalue, 16, min, max, flags);
+       break;
+      case 'n':
+       if (cflags == DP_C_SHORT) 
+       {
+         short int *num;
+         num = va_arg (args, short int *);
+         *num = currlen;
+        } 
+       else if (cflags == DP_C_LONG) 
+       {
+         long int *num;
+         num = va_arg (args, long int *);
+         *num = currlen;
+        } 
+       else 
+       {
+         int *num;
+         num = va_arg (args, int *);
+         *num = currlen;
+        }
+       break;
+      case '%':
+       dopr_outch (buffer, &currlen, maxlen, ch);
+       break;
+      case 'w':
+       /* not supported yet, treat as next char */
+       ch = *format++;
+       break;
+      default:
+       /* Unknown, skip */
+       break;
+      }
+      ch = *format++;
+      state = DP_S_DEFAULT;
+      flags = cflags = min = 0;
+      max = -1;
+      break;
+    case DP_S_DONE:
+      break;
+    default:
+      /* hmm? */
+      break; /* some picky compilers need this */
+    }
+  }
+  if (currlen < maxlen - 1) 
+    buffer[currlen] = '\0';
+  else 
+    buffer[maxlen - 1] = '\0';
+}
+
+static void fmtstr (char *buffer, size_t *currlen, size_t maxlen,
+                   char *value, int flags, int min, int max)
+{
+  int padlen, strln;     /* amount to pad */
+  int cnt = 0;
+  
+  if (value == 0)
+  {
+    value = "<NULL>";
+  }
+
+  for (strln = 0; value[strln]; ++strln); /* strlen */
+  padlen = min - strln;
+  if (padlen < 0) 
+    padlen = 0;
+  if (flags & DP_F_MINUS) 
+    padlen = -padlen; /* Left Justify */
+
+  while ((padlen > 0) && (cnt < max)) 
+  {
+    dopr_outch (buffer, currlen, maxlen, ' ');
+    --padlen;
+    ++cnt;
+  }
+  while (*value && (cnt < max)) 
+  {
+    dopr_outch (buffer, currlen, maxlen, *value++);
+    ++cnt;
+  }
+  while ((padlen < 0) && (cnt < max)) 
+  {
+    dopr_outch (buffer, currlen, maxlen, ' ');
+    ++padlen;
+    ++cnt;
+  }
+}
+
+/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */
+
+static void fmtint (char *buffer, size_t *currlen, size_t maxlen,
+                   long value, int base, int min, int max, int flags)
+{
+  int signvalue = 0;
+  unsigned long uvalue;
+  char convert[20];
+  int place = 0;
+  int spadlen = 0; /* amount to space pad */
+  int zpadlen = 0; /* amount to zero pad */
+  int caps = 0;
+  
+  if (max < 0)
+    max = 0;
+
+  uvalue = value;
+
+  if(!(flags & DP_F_UNSIGNED))
+  {
+    if( value < 0 ) {
+      signvalue = '-';
+      uvalue = -value;
+    }
+    else
+      if (flags & DP_F_PLUS)  /* Do a sign (+/i) */
+       signvalue = '+';
+    else
+      if (flags & DP_F_SPACE)
+       signvalue = ' ';
+  }
+  
+  if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
+
+  do {
+    convert[place++] =
+      (caps? "0123456789ABCDEF":"0123456789abcdef")
+      [uvalue % (unsigned)base  ];
+    uvalue = (uvalue / (unsigned)base );
+  } while(uvalue && (place < 20));
+  if (place == 20) place--;
+  convert[place] = 0;
+
+  zpadlen = max - place;
+  spadlen = min - MAX (max, place) - (signvalue ? 1 : 0);
+  if (zpadlen < 0) zpadlen = 0;
+  if (spadlen < 0) spadlen = 0;
+  if (flags & DP_F_ZERO)
+  {
+    zpadlen = MAX(zpadlen, spadlen);
+    spadlen = 0;
+  }
+  if (flags & DP_F_MINUS) 
+    spadlen = -spadlen; /* Left Justifty */
+
+#ifdef DEBUG_SNPRINTF
+  dprint (1, (debugfile, "zpad: %d, spad: %d, min: %d, max: %d, place: %d\n",
+      zpadlen, spadlen, min, max, place));
+#endif
+
+  /* Spaces */
+  while (spadlen > 0) 
+  {
+    dopr_outch (buffer, currlen, maxlen, ' ');
+    --spadlen;
+  }
+
+  /* Sign */
+  if (signvalue) 
+    dopr_outch (buffer, currlen, maxlen, signvalue);
+
+  /* Zeros */
+  if (zpadlen > 0) 
+  {
+    while (zpadlen > 0)
+    {
+      dopr_outch (buffer, currlen, maxlen, '0');
+      --zpadlen;
+    }
+  }
+
+  /* Digits */
+  while (place > 0) 
+    dopr_outch (buffer, currlen, maxlen, convert[--place]);
+  
+  /* Left Justified spaces */
+  while (spadlen < 0) {
+    dopr_outch (buffer, currlen, maxlen, ' ');
+    ++spadlen;
+  }
+}
+
+static long double abs_val (long double value)
+{
+  long double result = value;
+
+  if (value < 0)
+    result = -value;
+
+  return result;
+}
+
+static long double pow10 (int exp)
+{
+  long double result = 1;
+
+  while (exp)
+  {
+    result *= 10;
+    exp--;
+  }
+  
+  return result;
+}
+
+static long round (long double value)
+{
+  long intpart;
+
+  intpart = value;
+  value = value - intpart;
+  if (value >= 0.5)
+    intpart++;
+
+  return intpart;
+}
+
+static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
+                  long double fvalue, int min, int max, int flags)
+{
+  int signvalue = 0;
+  long double ufvalue;
+  char iconvert[20];
+  char fconvert[20];
+  int iplace = 0;
+  int fplace = 0;
+  int padlen = 0; /* amount to pad */
+  int zpadlen = 0; 
+  int caps = 0;
+  long intpart;
+  long fracpart;
+  
+  /* 
+   * AIX manpage says the default is 0, but Solaris says the default
+   * is 6, and sprintf on AIX defaults to 6
+   */
+  if (max < 0)
+    max = 6;
+
+  ufvalue = abs_val (fvalue);
+
+  if (fvalue < 0)
+    signvalue = '-';
+  else
+    if (flags & DP_F_PLUS)  /* Do a sign (+/i) */
+      signvalue = '+';
+    else
+      if (flags & DP_F_SPACE)
+       signvalue = ' ';
+
+#if 0
+  if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
+#endif
+
+  intpart = ufvalue;
+
+  /* 
+   * Sorry, we only support 9 digits past the decimal because of our 
+   * conversion method
+   */
+  if (max > 9)
+    max = 9;
+
+  /* We "cheat" by converting the fractional part to integer by
+   * multiplying by a factor of 10
+   */
+  fracpart = round ((pow10 (max)) * (ufvalue - intpart));
+
+  if (fracpart >= pow10 (max))
+  {
+    intpart++;
+    fracpart -= pow10 (max);
+  }
+
+#ifdef DEBUG_SNPRINTF
+  dprint (1, (debugfile, "fmtfp: %f =? %d.%d\n", fvalue, intpart, fracpart));
+#endif
+
+  /* Convert integer part */
+  do {
+    iconvert[iplace++] =
+      (caps? "0123456789ABCDEF":"0123456789abcdef")[intpart % 10];
+    intpart = (intpart / 10);
+  } while(intpart && (iplace < 20));
+  if (iplace == 20) iplace--;
+  iconvert[iplace] = 0;
+
+  /* Convert fractional part */
+  do {
+    fconvert[fplace++] =
+      (caps? "0123456789ABCDEF":"0123456789abcdef")[fracpart % 10];
+    fracpart = (fracpart / 10);
+  } while(fracpart && (fplace < 20));
+  if (fplace == 20) fplace--;
+  fconvert[fplace] = 0;
+
+  /* -1 for decimal point, another -1 if we are printing a sign */
+  padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0); 
+  zpadlen = max - fplace;
+  if (zpadlen < 0)
+    zpadlen = 0;
+  if (padlen < 0) 
+    padlen = 0;
+  if (flags & DP_F_MINUS) 
+    padlen = -padlen; /* Left Justifty */
+
+  if ((flags & DP_F_ZERO) && (padlen > 0)) 
+  {
+    if (signvalue) 
+    {
+      dopr_outch (buffer, currlen, maxlen, signvalue);
+      --padlen;
+      signvalue = 0;
+    }
+    while (padlen > 0)
+    {
+      dopr_outch (buffer, currlen, maxlen, '0');
+      --padlen;
+    }
+  }
+  while (padlen > 0)
+  {
+    dopr_outch (buffer, currlen, maxlen, ' ');
+    --padlen;
+  }
+  if (signvalue) 
+    dopr_outch (buffer, currlen, maxlen, signvalue);
+
+  while (iplace > 0) 
+    dopr_outch (buffer, currlen, maxlen, iconvert[--iplace]);
+
+  /*
+   * Decimal point.  This should probably use locale to find the correct
+   * char to print out.
+   */
+  dopr_outch (buffer, currlen, maxlen, '.');
+
+  while (fplace > 0) 
+    dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]);
+
+  while (zpadlen > 0)
+  {
+    dopr_outch (buffer, currlen, maxlen, '0');
+    --zpadlen;
+  }
+
+  while (padlen < 0) 
+  {
+    dopr_outch (buffer, currlen, maxlen, ' ');
+    ++padlen;
+  }
+}
+
+static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c)
+{
+  if (*currlen < maxlen)
+    buffer[(*currlen)++] = c;
+}
+#endif /* !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) */
+
+#ifndef HAVE_VSNPRINTF
+int vsnprintf (char *str, size_t count, const char *fmt, va_list args)
+{
+  str[0] = 0;
+  dopr(str, count, fmt, args);
+  return(strlen(str));
+}
+#endif /* !HAVE_VSNPRINTF */
+
+#ifndef HAVE_SNPRINTF
+/* VARARGS3 */
+#ifdef HAVE_STDARGS
+int snprintf (char *str,size_t count,const char *fmt,...)
+#else
+int snprintf (va_alist) va_dcl
+#endif
+{
+#ifndef HAVE_STDARGS
+  char *str;
+  size_t count;
+  char *fmt;
+#endif
+  VA_LOCAL_DECL;
+    
+  VA_START (fmt);
+  VA_SHIFT (str, char *);
+  VA_SHIFT (count, size_t );
+  VA_SHIFT (fmt, char *);
+  (void) vsnprintf(str, count, fmt, ap);
+  VA_END;
+  return(strlen(str));
+}
+
+#ifdef TEST_SNPRINTF
+#ifndef LONG_STRING
+#define LONG_STRING 1024
+#endif
+int main (void)
+{
+  char buf1[LONG_STRING];
+  char buf2[LONG_STRING];
+  char *fp_fmt[] = {
+    "%-1.5f",
+    "%1.5f",
+    "%123.9f",
+    "%10.5f",
+    "% 10.5f",
+    "%+22.9f",
+    "%+4.9f",
+    "%01.3f",
+    "%4f",
+    "%3.1f",
+    "%3.2f",
+    NULL
+  };
+  double fp_nums[] = { -1.5, 134.21, 91340.2, 341.1234, 0203.9, 0.96, 0.996, 
+    0.9996, 1.996, 4.136, 0};
+  char *int_fmt[] = {
+    "%-1.5d",
+    "%1.5d",
+    "%123.9d",
+    "%5.5d",
+    "%10.5d",
+    "% 10.5d",
+    "%+22.33d",
+    "%01.3d",
+    "%4d",
+    NULL
+  };
+  long int_nums[] = { -1, 134, 91340, 341, 0203, 0};
+  int x, y;
+  int fail = 0;
+  int num = 0;
+
+  printf ("Testing snprintf format codes against system sprintf...\n");
+
+  for (x = 0; fp_fmt[x] != NULL ; x++)
+    for (y = 0; fp_nums[y] != 0 ; y++)
+    {
+      snprintf (buf1, sizeof (buf1), fp_fmt[x], fp_nums[y]);
+      sprintf (buf2, fp_fmt[x], fp_nums[y]);
+      if (strcmp (buf1, buf2))
+      {
+       printf("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf  = %s\n", /* __SPRINTF_CHECKED__ */
+           fp_fmt[x], buf1, buf2);
+       fail++;
+      }
+      num++;
+    }
+
+  for (x = 0; int_fmt[x] != NULL ; x++)
+    for (y = 0; int_nums[y] != 0 ; y++)
+    {
+      snprintf (buf1, sizeof (buf1), int_fmt[x], int_nums[y]);
+      sprintf (buf2, int_fmt[x], int_nums[y]);
+      if (strcmp (buf1, buf2))
+      {
+       printf("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf  = %s\n", /* __SPRINTF_CHECKED__ */
+           int_fmt[x], buf1, buf2);
+       fail++;
+      }
+      num++;
+    }
+  printf ("%d tests failed out of %d.\n", fail, num);
+}
+#endif /* SNPRINTF_TEST */
+
+#endif /* !HAVE_SNPRINTF */
diff --git a/sort.c b/sort.c
new file mode 100644 (file)
index 0000000..e6942ba
--- /dev/null
+++ b/sort.c
@@ -0,0 +1,307 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "sort.h"
+#include "mutt_idna.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+
+#define SORTCODE(x) (Sort & SORT_REVERSE) ? -(x) : x
+
+/* function to use as discriminator when normal sort method is equal */
+static sort_t *AuxSort = NULL;
+
+#define AUXSORT(code,a,b) if (!code && AuxSort && !option(OPTAUXSORT)) { \
+  set_option(OPTAUXSORT); \
+  code = AuxSort(a,b); \
+  unset_option(OPTAUXSORT); \
+} \
+if (!code) \
+  code = (*((HEADER **)a))->index - (*((HEADER **)b))->index;
+
+int compare_score (const void *a, const void *b)
+{
+  HEADER **pa = (HEADER **) a;
+  HEADER **pb = (HEADER **) b;
+  int result = (*pb)->score - (*pa)->score; /* note that this is reverse */
+  AUXSORT(result,a,b);
+  return (SORTCODE (result));
+}
+
+int compare_size (const void *a, const void *b)
+{
+  HEADER **pa = (HEADER **) a;
+  HEADER **pb = (HEADER **) b;
+  int result = (*pa)->content->length - (*pb)->content->length;
+  AUXSORT(result,a,b);
+  return (SORTCODE (result));
+}
+
+int compare_date_sent (const void *a, const void *b)
+{
+  HEADER **pa = (HEADER **) a;
+  HEADER **pb = (HEADER **) b;
+  int result = (*pa)->date_sent - (*pb)->date_sent;
+  AUXSORT(result,a,b);
+  return (SORTCODE (result));
+}
+
+int compare_subject (const void *a, const void *b)
+{
+  HEADER **pa = (HEADER **) a;
+  HEADER **pb = (HEADER **) b;
+  int rc;
+
+  if (!(*pa)->env->real_subj)
+  {
+    if (!(*pb)->env->real_subj)
+      rc = compare_date_sent (pa, pb);
+    else
+      rc = -1;
+  }
+  else if (!(*pb)->env->real_subj)
+    rc = 1;
+  else
+    rc = mutt_strcasecmp ((*pa)->env->real_subj, (*pb)->env->real_subj);
+  AUXSORT(rc,a,b);
+  return (SORTCODE (rc));
+}
+
+const char *mutt_get_name (ADDRESS *a)
+{
+  ADDRESS *ali;
+  const char * name = "";
+
+  if (a)
+  {
+    if (option (OPTREVALIAS) && (ali = alias_reverse_lookup (a)) && ali->personal)
+      name = ali->personal;
+    else if (a->personal)
+      name = a->personal;
+    else if (a->mailbox)
+      name = (mutt_addr_for_display (a));
+  }
+  /* don't return NULL to avoid segfault when printing/comparing */
+  return name;
+}
+
+int compare_to (const void *a, const void *b)
+{
+  HEADER **ppa = (HEADER **) a;
+  HEADER **ppb = (HEADER **) b;
+  char fa[1024];
+  char fb[1024];
+  int result;
+
+  /* mutt_get_name() will sometimes return a pointer to a static buffer.
+   * On the next call that pointer may get smashed so we copy the return value
+   * to our own memory space. */
+
+  strncpy(fa,mutt_get_name ((*ppa)->env->to),sizeof(fa));
+  fa[sizeof(fa)-1] = '\0';
+
+  strncpy(fb,mutt_get_name ((*ppb)->env->to),sizeof(fb));
+  fb[sizeof(fb)-1] = '\0';
+
+  result = mutt_strcasecmp (fa, fb);
+  AUXSORT(result,a,b);
+  return (SORTCODE (result));
+}
+
+int compare_from (const void *a, const void *b)
+{
+  HEADER **ppa = (HEADER **) a;
+  HEADER **ppb = (HEADER **) b;
+  char fa[1024];
+  char fb[1024];
+  int result;
+
+  /* mutt_get_name() will sometimes return a pointer to a static buffer.
+   * On the next call that pointer may get smashed so we copy the return value
+   * to our own memory space. */
+
+  strncpy(fa,mutt_get_name ((*ppa)->env->from),sizeof(fa));
+  fa[sizeof(fa)-1] = '\0';
+
+  strncpy(fb,mutt_get_name ((*ppb)->env->from),sizeof(fb));
+  fb[sizeof(fb)-1] = '\0';
+
+  result = mutt_strcasecmp (fa, fb);
+  AUXSORT(result,a,b);
+  return (SORTCODE (result));
+}
+
+int compare_date_received (const void *a, const void *b)
+{
+  HEADER **pa = (HEADER **) a;
+  HEADER **pb = (HEADER **) b;
+  int result = (*pa)->received - (*pb)->received;
+  AUXSORT(result,a,b);
+  return (SORTCODE (result));
+}
+
+int compare_order (const void *a, const void *b)
+{
+  HEADER **ha = (HEADER **) a;
+  HEADER **hb = (HEADER **) b;
+
+#ifdef USE_NNTP
+  if ((*ha)->article_num && (*hb)->article_num)
+  {
+    int result = (*ha)->article_num - (*hb)->article_num;
+    AUXSORT(result,a,b);
+    return (SORTCODE (result));
+  }
+  else
+#endif
+  /* no need to auxsort because you will never have equality here */
+  return (SORTCODE ((*ha)->index - (*hb)->index));
+}
+
+sort_t *mutt_get_sort_func (int method)
+{
+  switch (method & SORT_MASK)
+  {
+    case SORT_RECEIVED:
+      return (compare_date_received);
+    case SORT_ORDER:
+      return (compare_order);
+    case SORT_DATE:
+      return (compare_date_sent);
+    case SORT_SUBJECT:
+      return (compare_subject);
+    case SORT_FROM:
+      return (compare_from);
+    case SORT_SIZE:
+      return (compare_size);
+    case SORT_TO:
+      return (compare_to);
+    case SORT_SCORE:
+      return (compare_score);
+    default:
+      return (NULL);
+  }
+  /* not reached */
+}
+
+void mutt_sort_headers (CONTEXT *ctx, int init)
+{
+  int i;
+  HEADER *h;
+  THREAD *thread, *top;
+  sort_t *sortfunc;
+  
+  unset_option (OPTNEEDRESORT);
+
+  if (!ctx)
+    return;
+
+  if (!ctx->msgcount)
+  {
+    /* this function gets called by mutt_sync_mailbox(), which may have just
+     * deleted all the messages.  the virtual message numbers are not updated
+     * in that routine, so we must make sure to zero the vcount member.
+     */
+    ctx->vcount = 0;
+    mutt_clear_threads (ctx);
+    return; /* nothing to do! */
+  }
+
+  if (!ctx->quiet)
+    mutt_message _("Sorting mailbox...");
+
+  if (option (OPTNEEDRESCORE) && option (OPTSCORE))
+  {
+    for (i = 0; i < ctx->msgcount; i++)
+      mutt_score_message (ctx, ctx->hdrs[i], 1);
+  }
+  unset_option (OPTNEEDRESCORE);
+
+  if (option (OPTRESORTINIT))
+  {
+    unset_option (OPTRESORTINIT);
+    init = 1;
+  }
+
+  if (init && ctx->tree)
+    mutt_clear_threads (ctx);
+
+  if ((Sort & SORT_MASK) == SORT_THREADS)
+  {
+    AuxSort = NULL;
+    /* if $sort_aux changed after the mailbox is sorted, then all the
+       subthreads need to be resorted */
+    if (option (OPTSORTSUBTHREADS))
+    {
+      i = Sort;
+      Sort = SortAux;
+      if (ctx->tree)
+       ctx->tree = mutt_sort_subthreads (ctx->tree, 1);
+      Sort = i;
+      unset_option (OPTSORTSUBTHREADS);
+    }
+    mutt_sort_threads (ctx, init);
+  }
+  else if ((sortfunc = mutt_get_sort_func (Sort)) == NULL ||
+          (AuxSort = mutt_get_sort_func (SortAux)) == NULL)
+  {
+    mutt_error _("Could not find sorting function! [report this bug]");
+    mutt_sleep (1);
+    return;
+  }
+  else 
+    qsort ((void *) ctx->hdrs, ctx->msgcount, sizeof (HEADER *), sortfunc);
+
+  /* adjust the virtual message numbers */
+  ctx->vcount = 0;
+  for (i = 0; i < ctx->msgcount; i++)
+  {
+    HEADER *cur = ctx->hdrs[i];
+    if (cur->virtual != -1 || (cur->collapsed && (!ctx->pattern || cur->limited)))
+    {
+      cur->virtual = ctx->vcount;
+      ctx->v2r[ctx->vcount] = i;
+      ctx->vcount++;
+    }
+    cur->msgno = i;
+  }
+
+  /* re-collapse threads marked as collapsed */
+  if ((Sort & SORT_MASK) == SORT_THREADS)
+  {
+    top = ctx->tree;
+    while ((thread = top) != NULL)
+    {
+      while (!thread->message)
+       thread = thread->child;
+      h = thread->message;
+
+      if (h->collapsed)
+       mutt_collapse_thread (ctx, h);
+      top = top->next;
+    }
+    mutt_set_virtual (ctx);
+  }
+
+  if (!ctx->quiet)
+    mutt_clear_error ();
+}
diff --git a/sort.h b/sort.h
new file mode 100644 (file)
index 0000000..87af059
--- /dev/null
+++ b/sort.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#define SORT_DATE      1   /* the date the mail was sent. */
+#define SORT_SIZE      2
+#define SORT_SUBJECT   3
+#define SORT_FROM      4
+#define SORT_ORDER     5   /* the order the messages appear in the mailbox. */
+#define SORT_THREADS   6
+#define SORT_RECEIVED  7   /* when the message were delivered locally */
+#define SORT_TO                8
+#define SORT_SCORE     9
+#define SORT_ALIAS     10
+#define SORT_ADDRESS   11
+#define SORT_KEYID     12
+#define SORT_TRUST     13
+#define SORT_MASK      0xf
+#define SORT_REVERSE   (1<<4)
+#define SORT_LAST      (1<<5)
+
+typedef int sort_t (const void *, const void *);
+sort_t *mutt_get_sort_func (int);
+
+void mutt_clear_threads (CONTEXT *);
+void mutt_sort_headers (CONTEXT *, int);
+void mutt_sort_threads (CONTEXT *, int);
+int mutt_select_sort (int);
+THREAD *mutt_sort_subthreads (THREAD *, int);
+
+WHERE short BrowserSort INITVAL (SORT_SUBJECT);
+WHERE short Sort INITVAL (SORT_DATE);
+WHERE short SortAux INITVAL (SORT_DATE); /* auxiallary sorting method */
+WHERE short SortAlias INITVAL (SORT_ALIAS);
+
+/* FIXME: This one does not belong to here */
+WHERE short PgpSortKeys INITVAL (SORT_ADDRESS);
+
+#include "mapping.h"
+extern const struct mapping_t SortMethods[];
diff --git a/stamp-h.in b/stamp-h.in
new file mode 100644 (file)
index 0000000..9788f70
--- /dev/null
@@ -0,0 +1 @@
+timestamp
diff --git a/status.c b/status.c
new file mode 100644 (file)
index 0000000..3d175f6
--- /dev/null
+++ b/status.c
@@ -0,0 +1,295 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "mutt_menu.h"
+#include "mutt_curses.h"
+#include "sort.h"
+#include "mapping.h"
+#include "mx.h"
+
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+
+static char *get_sort_str (char *buf, size_t buflen, int method)
+{
+  snprintf (buf, buflen, "%s%s%s",
+           (method & SORT_REVERSE) ? "reverse-" : "",
+           (method & SORT_LAST) ? "last-" : "",
+           mutt_getnamebyvalue (method & SORT_MASK, SortMethods));
+  return buf;
+}
+
+/* %b = number of incoming folders with unread messages [option]
+ * %d = number of deleted messages [option]
+ * %f = full mailbox path
+ * %F = number of flagged messages [option]
+ * %h = hostname
+ * %l = length of mailbox (in bytes) [option]
+ * %m = total number of messages [option]
+ * %M = number of messages shown (virutal message count when limiting) [option]
+ * %n = number of new messages [option]
+ * %p = number of postponed messages [option]
+ * %P = percent of way through index
+ * %r = readonly/wontwrite/changed flag
+ * %s = current sorting method ($sort)
+ * %S = current aux sorting method ($sort_aux)
+ * %t = # of tagged messages [option]
+ * %v = Mutt version 
+ * %V = currently active limit pattern [option] */
+static const char *
+status_format_str (char *buf, size_t buflen, char op, const char *src,
+                  const char *prefix, const char *ifstring,
+                  const char *elsestring,
+                  unsigned long data, format_flag flags)
+{
+  char fmt[SHORT_STRING], tmp[SHORT_STRING], *cp;
+  int count, optional = (flags & M_FORMAT_OPTIONAL);
+  MUTTMENU *menu = (MUTTMENU *) data;
+
+  *buf = 0;
+  switch (op)
+  {
+    case 'b':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (buf, buflen, fmt, mutt_buffy_check (0));
+      }
+      else if (!mutt_buffy_check (0))
+       optional = 0;
+      break;
+
+    case 'd':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (buf, buflen, fmt, Context ? Context->deleted : 0);
+      }
+      else if (!Context || !Context->deleted)
+       optional = 0;
+      break;
+
+    case 'h':
+      snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+      snprintf (buf, buflen, fmt, NONULL(Hostname));
+      break;
+
+    case 'f':
+      snprintf (fmt, sizeof(fmt), "%%%ss", prefix);
+      if (Context && Context->path)
+      {
+       strfcpy (tmp, Context->path, sizeof (tmp));
+       mutt_pretty_mailbox (tmp);
+      }
+      else
+       strfcpy (tmp, _("(no mailbox)"), sizeof (tmp));
+      snprintf (buf, buflen, fmt, tmp);
+      break;
+
+    case 'F':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (buf, buflen, fmt, Context ? Context->flagged : 0);
+      }
+      else if (!Context || !Context->flagged)
+       optional = 0;
+      break;
+
+    case 'l':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       mutt_pretty_size (tmp, sizeof (tmp), Context ? Context->size : 0);
+       snprintf (buf, buflen, fmt, tmp);
+      }
+      else if (!Context || !Context->size)
+       optional = 0;
+      break;
+
+    case 'L':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+       mutt_pretty_size (tmp, sizeof (tmp), Context ? Context->vsize: 0);
+       snprintf (buf, buflen, fmt, tmp);
+      }
+      else if (!Context || !Context->pattern)
+       optional = 0;
+      break;
+
+    case 'm':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (buf, buflen, fmt, Context ? Context->msgcount : 0);
+      }
+      else if (!Context || !Context->msgcount)
+       optional = 0;
+      break;
+
+    case 'M':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof(fmt), "%%%sd", prefix);
+       snprintf (buf, buflen, fmt, Context ? Context->vcount : 0);
+      }
+      else if (!Context || !Context->pattern)
+       optional = 0;
+      break;
+
+    case 'n':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (buf, buflen, fmt, Context ? Context->new : 0);
+      }
+      else if (!Context || !Context->new)
+       optional = 0;
+      break;
+
+    case 'o':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (buf, buflen, fmt, Context ? Context->unread - Context->new : 0);
+      }
+      else if (!Context || !(Context->unread - Context->new))
+       optional = 0;
+      break;
+
+    case 'p':
+      count = mutt_num_postponed (0);
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (buf, buflen, fmt, count);
+      }
+      else if (!count)
+       optional = 0;
+      break;
+
+    case 'P':
+      if (menu->top + menu->pagelen >= menu->max)
+       cp = menu->top ? "end" : "all";
+      else
+      {
+       count = (100 * (menu->top + menu->pagelen)) / menu->max;
+       snprintf (tmp, sizeof (tmp), "%d%%", count);
+       cp = tmp;
+      }
+      snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+      snprintf (buf, buflen, fmt, cp);
+      break;
+
+    case 'r':
+    {
+      int i = 0;
+
+      if (Context)
+      {
+       i = option(OPTATTACHMSG) ? 3 : ((Context->readonly ||
+          Context->dontwrite) ? 2 : (Context->changed || (
+#ifdef USE_IMAP
+        /* deleted doesn't necessarily mean changed in IMAP */
+          Context->magic != M_IMAP &&
+#endif
+          Context->deleted)) ? 1 : 0);
+      }
+      
+      if (!StChars)
+       buf[0] = 0;
+      else if (i >= mutt_strlen(StChars))
+       buf[0] = StChars[0];
+      else
+       buf[0] = StChars[i];
+
+      buf[1] = 0;
+      break;
+    }
+      
+    case 's':
+      snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+      snprintf (buf, buflen, fmt,
+               get_sort_str (tmp, sizeof (tmp), Sort));
+      break;
+
+    case 'S':
+      snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+      snprintf (buf, buflen, fmt,
+               get_sort_str (tmp, sizeof (tmp), SortAux));
+      break;
+
+    case 't':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (buf, buflen, fmt, Context ? Context->tagged : 0);
+      }
+      else if (!Context || !Context->tagged)
+       optional = 0;
+      break;
+
+    case 'u':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+       snprintf (buf, buflen, fmt, Context ? Context->unread : 0);
+      }
+      else if (!Context || !Context->unread)
+       optional = 0;
+      break;
+
+    case 'v':
+      snprintf (fmt, sizeof (fmt), "Mutt %%s");
+      snprintf (buf, buflen, fmt, MUTT_VERSION);
+      break;
+
+    case 'V':
+      if (!optional)
+      {
+       snprintf (fmt, sizeof(fmt), "%%%ss", prefix);
+       snprintf (buf, buflen, fmt, Context ? Context->pattern : 0);
+      }
+      else if (!Context || !Context->pattern)
+       optional = 0;
+      break;
+
+    case 0:
+      *buf = 0;
+      return (src);
+
+    default:
+      snprintf (buf, buflen, "%%%s%c", prefix, op);
+      break;
+  }
+
+  if (optional)
+    menu_status_line (buf, buflen, menu, ifstring);
+  else if (flags & M_FORMAT_OPTIONAL)
+    menu_status_line (buf, buflen, menu, elsestring);
+
+  return (src);
+}
+
+void menu_status_line (char *buf, size_t buflen, MUTTMENU *menu, const char *p)
+{
+  mutt_FormatString (buf, buflen, p, status_format_str, (unsigned long) menu, 0);
+}
diff --git a/stderr.txt b/stderr.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/strcasecmp.c b/strcasecmp.c
new file mode 100644 (file)
index 0000000..51e6e10
--- /dev/null
@@ -0,0 +1,40 @@
+#include <ctype.h>
+#include <sys/types.h>
+
+/* UnixWare doesn't have these functions in its standard C library */
+
+int strncasecmp (char *s1, char *s2, size_t n)
+{
+  register int c1, c2, l = 0;
+  
+  while (*s1 && *s2 && l < n)
+  {
+    c1 = tolower ((unsigned char) *s1);
+    c2 = tolower ((unsigned char) *s2);
+    if (c1 != c2)
+      return (c1 - c2);
+    s1++;
+    s2++;
+    l++;
+  }
+  if (l == n)
+    return (int) (0);
+  else
+    return (int) (*s1 - *s2);
+}
+
+int strcasecmp (char *s1, char *s2)
+{
+  register int c1, c2;
+  
+  while (*s1 && *s2)
+  {
+    c1 = tolower ((unsigned char) *s1);
+    c2 = tolower ((unsigned char) *s2);
+    if (c1 != c2)
+      return (c1 - c2);
+    s1++;
+    s2++;
+  }                                                                           
+  return (int) (*s1 - *s2);
+}
diff --git a/strdup.c b/strdup.c
new file mode 100644 (file)
index 0000000..0249a05
--- /dev/null
+++ b/strdup.c
@@ -0,0 +1,19 @@
+/* ultrix doesn't have strdup */
+
+#include <string.h>
+#include <stdlib.h>
+
+char *strdup (const char *s)   /* __MEM_CHECKED__ */
+{
+  char *d;
+  
+  if (s == NULL)
+    return NULL;
+  
+  if ((d = malloc (strlen (s) + 1)) == NULL)   /* __MEM_CHECKED__ */
+    return NULL;
+
+  memcpy (d, s, strlen (s) + 1);
+  return d;
+}
+
diff --git a/system.c b/system.c
new file mode 100644 (file)
index 0000000..3ed31cf
--- /dev/null
+++ b/system.c
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * 
+ *     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.
+ */ 
+
+#include "mutt.h"
+#ifdef USE_IMAP
+# include "imap.h"
+# include <errno.h>
+#endif
+
+#include <stdlib.h>
+#include <signal.h>
+#include <string.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+int _mutt_system (const char *cmd, int flags)
+{
+  int rc = -1;
+  struct sigaction act;
+  struct sigaction oldtstp;
+  struct sigaction oldcont;
+  sigset_t set;
+  pid_t thepid;
+
+  if (!cmd || !*cmd)
+    return (0);
+
+  /* must ignore SIGINT and SIGQUIT */
+
+  mutt_block_signals_system ();
+
+  /* also don't want to be stopped right now */
+  if (flags & M_DETACH_PROCESS)
+  {
+    sigemptyset (&set);
+    sigaddset (&set, SIGTSTP);
+    sigprocmask (SIG_BLOCK, &set, NULL);
+  }
+  else
+  {
+    act.sa_handler = SIG_DFL;
+    /* we want to restart the waitpid() below */
+#ifdef SA_RESTART
+    act.sa_flags = SA_RESTART;
+#endif
+    sigemptyset (&act.sa_mask);
+    sigaction (SIGTSTP, &act, &oldtstp);
+    sigaction (SIGCONT, &act, &oldcont);
+  }
+
+  if ((thepid = fork ()) == 0)
+  {
+    act.sa_flags = 0;
+
+    if (flags & M_DETACH_PROCESS)
+    {
+      int fd;
+
+      /* give up controlling terminal */
+      setsid ();
+
+      switch (fork ())
+      {
+       case 0:
+#if defined(OPEN_MAX)
+         for (fd = 0; fd < OPEN_MAX; fd++)
+           close (fd);
+#elif defined(_POSIX_OPEN_MAX)
+         for (fd = 0; fd < _POSIX_OPEN_MAX; fd++)
+           close (fd);
+#else
+         close (0);
+         close (1);
+         close (2);
+#endif
+         chdir ("/");
+         act.sa_handler = SIG_DFL;
+         sigaction (SIGCHLD, &act, NULL);
+         break;
+
+       case -1:
+         _exit (127);
+
+       default:
+         _exit (0);
+      }
+    }
+
+    /* reset signals for the child; not really needed, but... */
+    mutt_unblock_signals_system (0);
+    act.sa_handler = SIG_DFL;
+    act.sa_flags = 0;
+    sigemptyset (&act.sa_mask);
+    sigaction (SIGTERM, &act, NULL);
+    sigaction (SIGTSTP, &act, NULL);
+    sigaction (SIGCONT, &act, NULL);
+
+    execl (EXECSHELL, "sh", "-c", cmd, NULL);
+    _exit (127); /* execl error */
+  }
+  else if (thepid != -1)
+  {
+#ifndef USE_IMAP
+    /* wait for the (first) child process to finish */
+    waitpid (thepid, &rc, 0);
+#else
+    rc = imap_wait_keepalive (thepid);
+#endif
+  }
+
+  sigaction (SIGCONT, &oldcont, NULL);
+  sigaction (SIGTSTP, &oldtstp, NULL);
+
+  /* reset SIGINT, SIGQUIT and SIGCHLD */
+  mutt_unblock_signals_system (1);
+  if (flags & M_DETACH_PROCESS)
+    sigprocmask (SIG_UNBLOCK, &set, NULL);
+
+  rc = (thepid != -1) ? (WIFEXITED (rc) ? WEXITSTATUS (rc) : -1) : -1;
+
+  return (rc);
+}
diff --git a/thread.c b/thread.c
new file mode 100644 (file)
index 0000000..03409ea
--- /dev/null
+++ b/thread.c
@@ -0,0 +1,1338 @@
+/*
+ * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ *
+ *     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.
+ */ 
+
+#include "mutt.h"
+#include "sort.h"
+
+#include <string.h>
+#include <ctype.h>
+
+#define VISIBLE(hdr, ctx) (hdr->virtual >= 0 || (hdr->collapsed && (!ctx->pattern || hdr->limited)))
+
+/* determine whether a is a descendant of b */
+static int is_descendant (THREAD *a, THREAD *b)
+{
+  while (a)
+  {
+    if (a == b)
+      return (1);
+    a = a->parent;
+  }
+  return (0);
+}
+
+/* Determines whether to display a message's subject. */
+static int need_display_subject (CONTEXT *ctx, HEADER *hdr)
+{
+  THREAD *tmp, *tree = hdr->thread;
+
+  /* if our subject is different from our parent's, display it */
+  if (hdr->subject_changed)
+    return (1);
+
+  /* if our subject is different from that of our closest previously displayed
+   * sibling, display the subject */
+  for (tmp = tree->prev; tmp; tmp = tmp->prev)
+  {
+    hdr = tmp->message;
+    if (hdr && VISIBLE (hdr, ctx))
+    {
+      if (hdr->subject_changed)
+       return (1);
+      else
+       break;
+    }
+  }
+  
+  /* if there is a parent-to-child subject change anywhere between us and our
+   * closest displayed ancestor, display the subject */
+  for (tmp = tree->parent; tmp; tmp = tmp->parent)
+  {
+    hdr = tmp->message;
+    if (hdr)
+    {
+      if (VISIBLE (hdr, ctx))
+       return (0);
+      else if (hdr->subject_changed)
+       return (1);
+    }
+  }
+
+  /* if we have no visible parent or previous sibling, display the subject */
+  return (1);
+}
+
+static void linearize_tree (CONTEXT *ctx)
+{
+  THREAD *tree = ctx->tree;
+  HEADER **array = ctx->hdrs + (Sort & SORT_REVERSE ? ctx->msgcount - 1 : 0);
+
+  while (tree)
+  {
+    while (!tree->message)
+      tree = tree->child;
+
+    *array = tree->message;
+    array += Sort & SORT_REVERSE ? -1 : 1;
+
+    if (tree->child)
+      tree = tree->child;
+    else
+    {
+      while (tree)
+      {
+       if (tree->next)
+       {
+         tree = tree->next;
+         break;
+       }
+       else
+         tree = tree->parent;
+      }
+    }
+  }
+}
+
+/* this calculates whether a node is the root of a subtree that has visible
+ * nodes, whether a node itself is visible, whether, if invisible, it has
+ * depth anyway, and whether any of its later siblings are roots of visible
+ * subtrees.  while it's at it, it frees the old thread display, so we can
+ * skip parts of the tree in mutt_draw_tree() if we've decided here that we
+ * don't care about them any more.
+ */
+static void calculate_visibility (CONTEXT *ctx, int *max_depth)
+{
+  THREAD *tmp, *tree = ctx->tree;
+  int hide_top_missing = option (OPTHIDETOPMISSING) && !option (OPTHIDEMISSING);
+  int hide_top_limited = option (OPTHIDETOPLIMITED) && !option (OPTHIDELIMITED);
+  int depth = 0;
+
+  /* we walk each level backwards to make it easier to compute next_subtree_visible */
+  while (tree->next)
+    tree = tree->next;
+  *max_depth = 0;
+
+  FOREVER
+  {
+    if (depth > *max_depth)
+      *max_depth = depth;
+
+    tree->subtree_visible = 0;
+    if (tree->message)
+    {
+      FREE (&tree->message->tree);
+      if (VISIBLE (tree->message, ctx))
+      {
+       tree->deep = 1;
+       tree->visible = 1;
+       tree->message->display_subject = need_display_subject (ctx, tree->message);
+       for (tmp = tree; tmp; tmp = tmp->parent)
+       {
+         if (tmp->subtree_visible)
+         {
+           tmp->deep = 1;
+           tmp->subtree_visible = 2;
+           break;
+         }
+         else
+           tmp->subtree_visible = 1;
+       }
+      }
+      else
+      {
+       tree->visible = 0;
+       tree->deep = !option (OPTHIDELIMITED);
+      }
+    }
+    else
+    {
+      tree->visible = 0;
+      tree->deep = !option (OPTHIDEMISSING);
+    }
+    tree->next_subtree_visible = tree->next && (tree->next->next_subtree_visible
+                                               || tree->next->subtree_visible);
+    if (tree->child)
+    {
+      depth++;
+      tree = tree->child;
+      while (tree->next)
+       tree = tree->next;
+    }
+    else if (tree->prev)
+      tree = tree->prev;
+    else
+    {
+      while (tree && !tree->prev)
+      {
+       depth--;
+       tree = tree->parent;
+      }
+      if (!tree)
+       break;
+      else
+       tree = tree->prev;
+    }
+  }
+  
+  /* now fix up for the OPTHIDETOP* options if necessary */
+  if (hide_top_limited || hide_top_missing)
+  {
+    tree = ctx->tree;
+    FOREVER
+    {
+      if (!tree->visible && tree->deep && tree->subtree_visible < 2 
+         && ((tree->message && hide_top_limited) || (!tree->message && hide_top_missing)))
+       tree->deep = 0;
+      if (!tree->deep && tree->child && tree->subtree_visible)
+       tree = tree->child;
+      else if (tree->next)
+       tree = tree->next;
+      else
+      {
+       while (tree && !tree->next)
+         tree = tree->parent;
+       if (!tree)
+         break;
+       else
+         tree = tree->next;
+      }
+    }
+  }
+}
+
+/* Since the graphics characters have a value >255, I have to resort to
+ * using escape sequences to pass the information to print_enriched_string().
+ * These are the macros M_TREE_* defined in mutt.h.
+ *
+ * ncurses should automatically use the default ASCII characters instead of
+ * graphics chars on terminals which don't support them (see the man page
+ * for curs_addch).
+ */
+void mutt_draw_tree (CONTEXT *ctx)
+{
+  char *pfx = NULL, *mypfx = NULL, *arrow = NULL, *myarrow = NULL, *new_tree;
+  char corner = (Sort & SORT_REVERSE) ? M_TREE_ULCORNER : M_TREE_LLCORNER;
+  char vtee = (Sort & SORT_REVERSE) ? M_TREE_BTEE : M_TREE_TTEE;
+  int depth = 0, start_depth = 0, max_depth = 0, width = option (OPTNARROWTREE) ? 1 : 2;
+  THREAD *nextdisp = NULL, *pseudo = NULL, *parent = NULL, *tree = ctx->tree;
+
+  /* Do the visibility calculations and free the old thread chars.
+   * From now on we can simply ignore invisible subtrees
+   */
+  calculate_visibility (ctx, &max_depth);
+  pfx = safe_malloc (width * max_depth + 2);
+  arrow = safe_malloc (width * max_depth + 2);
+  while (tree)
+  {
+    if (depth)
+    {
+      myarrow = arrow + (depth - start_depth - (start_depth ? 0 : 1)) * width;
+      if (depth && start_depth == depth)
+       myarrow[0] = nextdisp ? M_TREE_LTEE : corner;
+      else if (parent->message && !option (OPTHIDELIMITED))
+       myarrow[0] = M_TREE_HIDDEN;
+      else if (!parent->message && !option (OPTHIDEMISSING))
+       myarrow[0] = M_TREE_MISSING;
+      else
+       myarrow[0] = vtee;
+      if (width == 2)
+       myarrow[1] = pseudo ?  M_TREE_STAR
+                            : (tree->duplicate_thread ? M_TREE_EQUALS : M_TREE_HLINE);
+      if (tree->visible)
+      {
+       myarrow[width] = M_TREE_RARROW;
+       myarrow[width + 1] = 0;
+       new_tree = safe_malloc ((2 + depth * width));
+       if (start_depth > 1)
+       {
+         strncpy (new_tree, pfx, (start_depth - 1) * width);
+         strfcpy (new_tree + (start_depth - 1) * width,
+                  arrow, (1 + depth - start_depth) * width + 2);
+       }
+       else
+         strfcpy (new_tree, arrow, 2 + depth * width);
+       tree->message->tree = new_tree;
+      }
+    }
+    if (tree->child && depth)
+    {
+      mypfx = pfx + (depth - 1) * width;
+      mypfx[0] = nextdisp ? M_TREE_VLINE : M_TREE_SPACE;
+      if (width == 2)
+       mypfx[1] = M_TREE_SPACE;
+    }
+    parent = tree;
+    nextdisp = NULL;
+    pseudo = NULL;
+    do
+    {
+      if (tree->child && tree->subtree_visible)
+      {
+       if (tree->deep)
+         depth++;
+       if (tree->visible)
+         start_depth = depth;
+       tree = tree->child;
+
+       /* we do this here because we need to make sure that the first child thread
+        * of the old tree that we deal with is actually displayed if any are,
+        * or we might set the parent variable wrong while going through it. */
+       while (!tree->subtree_visible && tree->next)
+         tree = tree->next;
+      }
+      else
+      {
+       while (!tree->next && tree->parent)
+       {
+         if (tree == pseudo)
+           pseudo = NULL;
+         if (tree == nextdisp)
+           nextdisp = NULL;
+         if (tree->visible)
+           start_depth = depth;
+         tree = tree->parent;
+         if (tree->deep)
+         {
+           if (start_depth == depth)
+             start_depth--;
+           depth--;
+         }
+       }
+       if (tree == pseudo)
+         pseudo = NULL;
+       if (tree == nextdisp)
+         nextdisp = NULL;
+       if (tree->visible)
+         start_depth = depth;
+       tree = tree->next;
+       if (!tree)
+         break;
+      }
+      if (!pseudo && tree->fake_thread)
+       pseudo = tree;
+      if (!nextdisp && tree->next_subtree_visible)
+       nextdisp = tree;
+    }
+    while (!tree->deep);
+  }
+
+  FREE (&pfx);
+  FREE (&arrow);
+}
+
+/* since we may be trying to attach as a pseudo-thread a THREAD that
+ * has no message, we have to make a list of all the subjects of its
+ * most immediate existing descendants.  we also note the earliest
+ * date on any of the parents and put it in *dateptr. */
+static LIST *make_subject_list (THREAD *cur, time_t *dateptr)
+{
+  THREAD *start = cur;
+  ENVELOPE *env;
+  time_t thisdate;
+  LIST *curlist, *oldlist, *newlist, *subjects = NULL;
+  int rc = 0;
+  
+  FOREVER
+  {
+    while (!cur->message)
+      cur = cur->child;
+
+    if (dateptr)
+    {
+      thisdate = option (OPTTHREADRECEIVED)
+       ? cur->message->received : cur->message->date_sent;
+      if (!*dateptr || thisdate < *dateptr)
+       *dateptr = thisdate;
+    }
+
+    env = cur->message->env;
+    if (env->real_subj &&
+       ((env->real_subj != env->subject) || (!option (OPTSORTRE))))
+    {
+      for (curlist = subjects, oldlist = NULL;
+          curlist; oldlist = curlist, curlist = curlist->next)
+      {
+       rc = mutt_strcmp (env->real_subj, curlist->data);
+       if (rc >= 0)
+         break;
+      }
+      if (!curlist || rc > 0)
+      {
+       newlist = safe_calloc (1, sizeof (LIST));
+       newlist->data = env->real_subj;
+       if (oldlist)
+       {
+         newlist->next = oldlist->next;
+         oldlist->next = newlist;
+       }
+       else
+       {
+         newlist->next = subjects;
+         subjects = newlist;
+       }
+      }
+    }
+
+    while (!cur->next && cur != start)
+    {
+      cur = cur->parent;
+    }
+    if (cur == start)
+      break;
+    cur = cur->next;
+  }
+
+  return (subjects);
+}
+
+/* find the best possible match for a parent mesage based upon subject.
+ * if there are multiple matches, the one which was sent the latest, but
+ * before the current message, is used. 
+ */
+static THREAD *find_subject (CONTEXT *ctx, THREAD *cur)
+{
+  struct hash_elem *ptr;
+  THREAD *tmp, *last = NULL;
+  int hash;
+  LIST *subjects = NULL, *oldlist;
+  time_t date = 0;  
+
+  subjects = make_subject_list (cur, &date);
+
+  while (subjects)
+  {
+    hash = hash_string ((unsigned char *) subjects->data,
+                       ctx->subj_hash->nelem);
+    for (ptr = ctx->subj_hash->table[hash]; ptr; ptr = ptr->next)
+    {
+      tmp = ((HEADER *) ptr->data)->thread;
+      if (tmp != cur &&                           /* don't match the same message */
+         !tmp->fake_thread &&             /* don't match pseudo threads */
+         tmp->message->subject_changed && /* only match interesting replies */
+         !is_descendant (tmp, cur) &&     /* don't match in the same thread */
+         (date >= (option (OPTTHREADRECEIVED) ?
+                   tmp->message->received :
+                   tmp->message->date_sent)) &&
+         (!last ||
+          (option (OPTTHREADRECEIVED) ?
+           (last->message->received < tmp->message->received) :
+           (last->message->date_sent < tmp->message->date_sent))) &&
+         tmp->message->env->real_subj &&
+         mutt_strcmp (subjects->data, tmp->message->env->real_subj) == 0)
+       last = tmp; /* best match so far */
+    }
+
+    oldlist = subjects;
+    subjects = subjects->next;
+    FREE (&oldlist);
+  }
+  return (last);
+}
+
+/* remove cur and its descendants from their current location.
+ * also make sure ancestors of cur no longer are sorted by the
+ * fact that cur is their descendant. */
+static void unlink_message (THREAD **old, THREAD *cur)
+{
+  THREAD *tmp;
+
+  if (cur->prev)
+    cur->prev->next = cur->next;
+  else
+    *old = cur->next;
+
+  if (cur->next)
+    cur->next->prev = cur->prev;
+
+  if (cur->sort_key)
+  {
+    for (tmp = cur->parent; tmp && tmp->sort_key == cur->sort_key;
+        tmp = tmp->parent)
+      tmp->sort_key = NULL;
+  }
+}
+
+/* add cur as a prior sibling of *new, with parent newparent */
+static void insert_message (THREAD **new, THREAD *newparent, THREAD *cur)
+{
+  if (*new)
+    (*new)->prev = cur;
+
+  cur->parent = newparent;
+  cur->next = *new;
+  cur->prev = NULL;
+  *new = cur;
+}
+
+/* thread by subject things that didn't get threaded by message-id */
+static void pseudo_threads (CONTEXT *ctx)
+{
+  THREAD *tree = ctx->tree, *top = tree;
+  THREAD *tmp, *cur, *parent, *curchild, *nextchild;
+
+  if (!ctx->subj_hash)
+    ctx->subj_hash = mutt_make_subj_hash (ctx);
+
+  while (tree)
+  {
+    cur = tree;
+    tree = tree->next;
+    if ((parent = find_subject (ctx, cur)) != NULL)
+    {
+      cur->fake_thread = 1;
+      unlink_message (&top, cur);
+      insert_message (&parent->child, parent, cur);
+      parent->sort_children = 1;
+      tmp = cur;
+      FOREVER
+      {
+       while (!tmp->message)
+         tmp = tmp->child;
+
+       /* if the message we're attaching has pseudo-children, they
+        * need to be attached to its parent, so move them up a level.
+        * but only do this if they have the same real subject as the
+        * parent, since otherwise they rightly belong to the message
+        * we're attaching. */
+       if (tmp == cur
+           || !mutt_strcmp (tmp->message->env->real_subj,
+                            parent->message->env->real_subj))
+       {
+         tmp->message->subject_changed = 0;
+
+         for (curchild = tmp->child; curchild; )
+         {
+           nextchild = curchild->next;
+           if (curchild->fake_thread)
+           {
+             unlink_message (&tmp->child, curchild);
+             insert_message (&parent->child, parent, curchild);
+           }
+           curchild = nextchild;
+         }
+       }
+
+       while (!tmp->next && tmp != cur)
+       {
+         tmp = tmp->parent;
+       }
+       if (tmp == cur)
+         break;
+       tmp = tmp->next;
+      }
+    }
+  }
+  ctx->tree = top;
+}
+
+
+void mutt_clear_threads (CONTEXT *ctx)
+{
+  int i;
+
+  for (i = 0; i < ctx->msgcount; i++)
+  {
+    ctx->hdrs[i]->thread = NULL;
+    ctx->hdrs[i]->threaded = 0;
+  }
+  ctx->tree = NULL;
+
+  if (ctx->thread_hash)
+    hash_destroy (&ctx->thread_hash, *free);
+}
+
+int compare_threads (const void *a, const void *b)
+{
+  static sort_t *sort_func = NULL;
+
+  if (a || b)
+    return ((*sort_func) (&(*((THREAD **) a))->sort_key,
+                         &(*((THREAD **) b))->sort_key));
+  /* a hack to let us reset sort_func even though we can't
+   * have extra arguments because of qsort
+   */
+  else
+  {
+    sort_func = NULL;
+    sort_func = mutt_get_sort_func (Sort);
+    return (sort_func ? 1 : 0);
+  }
+}
+
+THREAD *mutt_sort_subthreads (THREAD *thread, int init)
+{
+  THREAD **array, *sort_key, *top, *tmp;
+  HEADER *oldsort_key;
+  int i, array_size, sort_top = 0;
+  
+  /* we put things into the array backwards to save some cycles,
+   * but we want to have to move less stuff around if we're 
+   * resorting, so we sort backwards and then put them back
+   * in reverse order so they're forwards
+   */
+  Sort ^= SORT_REVERSE;
+  if (!compare_threads (NULL, NULL))
+    return (thread);
+
+  top = thread;
+
+  array = safe_calloc ((array_size = 256), sizeof (THREAD *));
+  while (1)
+  {
+    if (init || !thread->sort_key)
+    {
+      thread->sort_key = NULL;
+
+      if (thread->parent)
+        thread->parent->sort_children = 1;
+      else
+       sort_top = 1;
+    }
+
+    if (thread->child)
+    {
+      thread = thread->child;
+      continue;
+    }
+    else
+    {
+      /* if it has no children, it must be real. sort it on its own merits */
+      thread->sort_key = thread->message;
+
+      if (thread->next)
+      {
+       thread = thread->next;
+       continue;
+      }
+    }
+
+    while (!thread->next)
+    {
+      /* if it has siblings and needs to be sorted, sort it... */
+      if (thread->prev && (thread->parent ? thread->parent->sort_children : sort_top))
+      {
+       /* put them into the array */
+       for (i = 0; thread; i++, thread = thread->prev)
+       {
+         if (i >= array_size)
+           safe_realloc (&array, (array_size *= 2) * sizeof (THREAD *));
+
+         array[i] = thread;
+       }
+
+       qsort ((void *) array, i, sizeof (THREAD *), *compare_threads);
+
+       /* attach them back together.  make thread the last sibling. */
+       thread = array[0];
+       thread->next = NULL;
+       array[i - 1]->prev = NULL;
+
+       if (thread->parent)
+         thread->parent->child = array[i - 1];
+       else
+         top = array[i - 1];
+
+       while (--i)
+       {
+         array[i - 1]->prev = array[i];
+         array[i]->next = array[i - 1];
+       }
+      }
+
+      if (thread->parent)
+      {
+       tmp = thread;
+       thread = thread->parent;
+
+       if (!thread->sort_key || thread->sort_children)
+       {
+         /* make sort_key the first or last sibling, as appropriate */
+         sort_key = (!(Sort & SORT_LAST) ^ !(Sort & SORT_REVERSE)) ? thread->child : tmp;
+
+         /* we just sorted its children */
+         thread->sort_children = 0;
+
+         oldsort_key = thread->sort_key;
+         thread->sort_key = thread->message;
+
+         if (Sort & SORT_LAST)
+         {
+           if (!thread->sort_key
+               || ((((Sort & SORT_REVERSE) ? 1 : -1)
+                    * compare_threads ((void *) &thread,
+                                       (void *) &sort_key))
+                   > 0))
+             thread->sort_key = sort_key->sort_key;
+         }
+         else if (!thread->sort_key)
+           thread->sort_key = sort_key->sort_key;
+
+         /* if its sort_key has changed, we need to resort it and siblings */
+         if (oldsort_key != thread->sort_key)
+         {
+           if (thread->parent)
+             thread->parent->sort_children = 1;
+           else
+             sort_top = 1;
+         }
+       }
+      }
+      else
+      {
+       Sort ^= SORT_REVERSE;
+       FREE (&array);
+       return (top);
+      }
+    }
+
+    thread = thread->next;
+  }
+}
+
+static void check_subjects (CONTEXT *ctx, int init)
+{
+  HEADER *cur;
+  THREAD *tmp;
+  int i;
+
+  for (i = 0; i < ctx->msgcount; i++)
+  {
+    cur = ctx->hdrs[i];
+    if (cur->thread->check_subject)
+      cur->thread->check_subject = 0;
+    else if (!init)
+      continue;
+
+    /* figure out which messages have subjects different than their parents' */
+    tmp = cur->thread->parent;
+    while (tmp && !tmp->message)
+    {
+      tmp = tmp->parent;
+    }
+
+    if (!tmp)
+      cur->subject_changed = 1;
+    else if (cur->env->real_subj && tmp->message->env->real_subj)
+      cur->subject_changed = mutt_strcmp (cur->env->real_subj,
+                                         tmp->message->env->real_subj) ? 1 : 0;
+    else
+      cur->subject_changed = (cur->env->real_subj
+                             || tmp->message->env->real_subj) ? 1 : 0;
+  }
+}
+
+void mutt_sort_threads (CONTEXT *ctx, int init)
+{
+  HEADER *cur;
+  int i, oldsort, using_refs = 0;
+  THREAD *thread, *new, *tmp, top;
+  LIST *ref = NULL;
+  
+  /* set Sort to the secondary method to support the set sort_aux=reverse-*
+   * settings.  The sorting functions just look at the value of
+   * SORT_REVERSE
+   */
+  oldsort = Sort;
+  Sort = SortAux;
+  
+  if (!ctx->thread_hash)
+    init = 1;
+
+  if (init)
+    ctx->thread_hash = hash_create (ctx->msgcount * 2);
+
+  /* we want a quick way to see if things are actually attached to the top of the
+   * thread tree or if they're just dangling, so we attach everything to a top
+   * node temporarily */
+  top.parent = top.next = top.prev = NULL;
+  top.child = ctx->tree;
+  for (thread = ctx->tree; thread; thread = thread->next)
+    thread->parent = &top;
+
+  /* put each new message together with the matching messageless THREAD if it
+   * exists.  otherwise, if there is a THREAD that already has a message, thread
+   * new message as an identical child.  if we didn't attach the message to a
+   * THREAD, make a new one for it. */
+  for (i = 0; i < ctx->msgcount; i++)
+  {
+    cur = ctx->hdrs[i];
+
+    if (!cur->thread)
+    {
+      if ((!init || option (OPTDUPTHREADS)) && cur->env->message_id)
+       thread = hash_find (ctx->thread_hash, cur->env->message_id);
+      else
+       thread = NULL;
+
+      if (thread && !thread->message)
+      {
+       /* this is a message which was missing before */
+       thread->message = cur;
+       cur->thread = thread;
+       thread->check_subject = 1;
+
+       /* mark descendants as needing subject_changed checked */
+       for (tmp = (thread->child ? thread->child : thread); tmp != thread; )
+       {
+         while (!tmp->message)
+           tmp = tmp->child;
+         tmp->check_subject = 1;
+         while (!tmp->next && tmp != thread)
+           tmp = tmp->parent;
+         if (tmp != thread)
+           tmp = tmp->next;
+       }
+
+       if (thread->parent)
+       {
+         /* remove threading info above it based on its children, which we'll
+          * recalculate based on its headers.  make sure not to leave
+          * dangling missing messages.  note that we haven't kept track
+          * of what info came from its children and what from its siblings'
+          * children, so we just remove the stuff that's definitely from it */
+         do
+         {
+           tmp = thread->parent;
+           unlink_message (&tmp->child, thread);
+           thread->parent = NULL;
+           thread->sort_key = NULL;
+           thread->fake_thread = 0;
+           thread = tmp;
+         } while (thread != &top && !thread->child && !thread->message);
+       }
+      }
+      else
+      {
+       new = (option (OPTDUPTHREADS) ? thread : NULL);
+
+       thread = safe_calloc (1, sizeof (THREAD));
+       thread->message = cur;
+       thread->check_subject = 1;
+       cur->thread = thread;
+       hash_insert (ctx->thread_hash,
+                    cur->env->message_id ? cur->env->message_id : "",
+                    thread, 1);
+
+       if (new)
+       {
+         if (new->duplicate_thread)
+           new = new->parent;
+
+         thread = cur->thread;
+
+         insert_message (&new->child, new, thread);
+         thread->duplicate_thread = 1;
+         thread->message->threaded = 1;
+       }
+      }
+    }
+    else
+    {
+      /* unlink pseudo-threads because they might be children of newly
+       * arrived messages */
+      thread = cur->thread;
+      for (new = thread->child; new; )
+      {
+       tmp = new->next;
+       if (new->fake_thread)
+       {
+         unlink_message (&thread->child, new);
+         insert_message (&top.child, &top, new);
+         new->fake_thread = 0;
+       }
+       new = tmp;
+      }
+    }
+  }
+
+  /* thread by references */
+  for (i = 0; i < ctx->msgcount; i++)
+  {
+    cur = ctx->hdrs[i];
+    if (cur->threaded)
+      continue;
+    cur->threaded = 1;
+
+    thread = cur->thread;
+    using_refs = 0;
+
+    while (1)
+    {
+      if (using_refs == 0)
+      {
+       /* look at the beginning of in-reply-to: */
+       if ((ref = cur->env->in_reply_to) != NULL)
+         using_refs = 1;
+       else
+       {
+         ref = cur->env->references;
+         using_refs = 2;
+       }
+      }
+      else if (using_refs == 1)
+      {
+       /* if there's no references header, use all the in-reply-to:
+        * data that we have.  otherwise, use the first reference
+        * if it's different than the first in-reply-to, otherwise use
+        * the second reference (since at least eudora puts the most
+        * recent reference in in-reply-to and the rest in references)
+        */
+       if (!cur->env->references)
+         ref = ref->next;
+       else
+       {
+         if (mutt_strcmp (ref->data, cur->env->references->data))
+           ref = cur->env->references;
+         else
+           ref = cur->env->references->next;
+         
+         using_refs = 2;
+       }
+      }
+      else
+       ref = ref->next; /* go on with references */
+      
+      if (!ref)
+       break;
+
+      if ((new = hash_find (ctx->thread_hash, ref->data)) == NULL)
+      {
+       new = safe_calloc (1, sizeof (THREAD));
+       hash_insert (ctx->thread_hash, ref->data, new, 1);
+      }
+      else
+      {
+       if (new->duplicate_thread)
+         new = new->parent;
+       if (is_descendant (new, thread)) /* no loops! */
+         break;
+      }
+
+      if (thread->parent)
+       unlink_message (&top.child, thread);
+      insert_message (&new->child, new, thread);
+      thread = new;
+      if (thread->message || (thread->parent && thread->parent != &top))
+       break;
+    }
+
+    if (!thread->parent)
+      insert_message (&top.child, &top, thread);
+  }
+
+  /* detach everything from the temporary top node */
+  for (thread = top.child; thread; thread = thread->next)
+  {
+    thread->parent = NULL;
+  }
+  ctx->tree = top.child;
+
+  check_subjects (ctx, init);
+
+  if (!option (OPTSTRICTTHREADS))
+    pseudo_threads (ctx);
+
+  if (ctx->tree)
+  {
+    ctx->tree = mutt_sort_subthreads (ctx->tree, init);
+
+    /* restore the oldsort order. */
+    Sort = oldsort;
+    
+    /* Put the list into an array. */
+    linearize_tree (ctx);
+
+    /* Draw the thread tree. */
+    mutt_draw_tree (ctx);
+  }
+}
+
+static HEADER *find_virtual (THREAD *cur, int reverse)
+{
+  THREAD *top;
+
+  if (cur->message && cur->message->virtual >= 0)
+    return (cur->message);
+
+  top = cur;
+  if ((cur = cur->child) == NULL)
+    return (NULL);
+
+  while (reverse && cur->next)
+    cur = cur->next;
+
+  FOREVER
+  {
+    if (cur->message && cur->message->virtual >= 0)
+      return (cur->message);
+
+    if (cur->child)
+    {
+      cur = cur->child;
+
+      while (reverse && cur->next)
+       cur = cur->next;
+    }
+    else if (reverse ? cur->prev : cur->next)
+      cur = reverse ? cur->prev : cur->next;
+    else
+    {
+      while (!(reverse ? cur->prev : cur->next))
+      {
+       cur = cur->parent;
+       if (cur == top)
+         return (NULL);
+      }
+      cur = reverse ? cur->prev : cur->next;
+    }
+    /* not reached */
+  }
+}
+
+int _mutt_aside_thread (HEADER *hdr, short dir, short subthreads)
+{
+  THREAD *cur;
+  HEADER *tmp;
+
+  if ((Sort & SORT_MASK) != SORT_THREADS)
+  {
+    mutt_error _("Threading is not enabled.");
+    return (hdr->virtual);
+  }
+
+  cur = hdr->thread;
+
+  if (!subthreads)
+  {
+    while (cur->parent)
+      cur = cur->parent;
+  }
+  else
+  {
+    if ((dir != 0) ^ ((Sort & SORT_REVERSE) != 0))
+    {
+      while (!cur->next && cur->parent)
+       cur = cur->parent;
+    }
+    else
+    {
+      while (!cur->prev && cur->parent)
+       cur = cur->parent;
+    }
+  }
+
+  if ((dir != 0) ^ ((Sort & SORT_REVERSE) != 0))
+  {
+    do
+    { 
+      cur = cur->next;
+      if (!cur)
+       return (-1);
+      tmp = find_virtual (cur, 0);
+    } while (!tmp);
+  }
+  else
+  {
+    do
+    { 
+      cur = cur->prev;
+      if (!cur)
+       return (-1);
+      tmp = find_virtual (cur, 1);
+    } while (!tmp);
+  }
+
+  return (tmp->virtual);
+}
+
+int mutt_parent_message (CONTEXT *ctx, HEADER *hdr)
+{
+  THREAD *thread;
+
+  if ((Sort & SORT_MASK) != SORT_THREADS)
+  {
+    mutt_error _("Threading is not enabled.");
+    return (hdr->virtual);
+  }
+
+  for (thread = hdr->thread->parent; thread; thread = thread->parent)
+  {
+    if ((hdr = thread->message) != NULL)
+    {
+      if (VISIBLE (hdr, ctx))
+       return (hdr->virtual);
+      else
+      {
+       mutt_error _("Parent message is not visible in this limited view.");
+       return (-1);
+      }
+    }
+  }
+  
+  mutt_error _("Parent message is not available.");
+  return (-1);
+}
+
+void mutt_set_virtual (CONTEXT *ctx)
+{
+  int i;
+  HEADER *cur;
+
+  ctx->vcount = 0;
+  ctx->vsize = 0;
+
+  for (i = 0; i < ctx->msgcount; i++)
+  {
+    cur = ctx->hdrs[i];
+    if (cur->virtual >= 0)
+    {
+      cur->virtual = ctx->vcount;
+      ctx->v2r[ctx->vcount] = i;
+      ctx->vcount++;
+      ctx->vsize += cur->content->length + cur->content->offset - cur->content->hdr_offset;
+      cur->num_hidden = mutt_get_hidden (ctx, cur);
+    }
+  }
+}
+
+int _mutt_traverse_thread (CONTEXT *ctx, HEADER *cur, int flag)
+{
+  THREAD *thread, *top;
+  HEADER *roothdr = NULL;
+  int final, reverse = (Sort & SORT_REVERSE), minmsgno;
+  int num_hidden = 0, new = 0, old = 0;
+  int min_unread_msgno = INT_MAX, min_unread = cur->virtual;
+#define CHECK_LIMIT (!ctx->pattern || cur->limited)
+
+  if ((Sort & SORT_MASK) != SORT_THREADS && !(flag & M_THREAD_GET_HIDDEN))
+  {
+    mutt_error (_("Threading is not enabled."));
+    return (cur->virtual);
+  }
+
+  final = cur->virtual;
+  thread = cur->thread;
+  while (thread->parent)
+    thread = thread->parent;
+  top = thread;
+  while (!thread->message)
+    thread = thread->child;
+  cur = thread->message;
+  minmsgno = cur->msgno;
+
+  if (!cur->read && CHECK_LIMIT)
+  {
+    if (cur->old)
+      old = 2;
+    else
+      new = 1;
+    if (cur->msgno < min_unread_msgno)
+    {
+      min_unread = cur->virtual;
+      min_unread_msgno = cur->msgno;
+    }
+  }
+
+  if (cur->virtual == -1 && CHECK_LIMIT)
+    num_hidden++;
+
+  if (flag & (M_THREAD_COLLAPSE | M_THREAD_UNCOLLAPSE))
+  {
+    cur->pair = 0; /* force index entry's color to be re-evaluated */
+    cur->collapsed = flag & M_THREAD_COLLAPSE;
+    if (cur->virtual != -1)
+    {
+      roothdr = cur;
+      if (flag & M_THREAD_COLLAPSE)
+       final = roothdr->virtual;
+    }
+  }
+
+  if (thread == top && (thread = thread->child) == NULL)
+  {
+    /* return value depends on action requested */
+    if (flag & (M_THREAD_COLLAPSE | M_THREAD_UNCOLLAPSE))
+      return (final);
+    else if (flag & M_THREAD_UNREAD)
+      return ((old && new) ? new : (old ? old : new));
+    else if (flag & M_THREAD_GET_HIDDEN)
+      return (num_hidden);
+    else if (flag & M_THREAD_NEXT_UNREAD)
+      return (min_unread);
+  }
+  
+  FOREVER
+  {
+    cur = thread->message;
+
+    if (cur)
+    {
+      if (flag & (M_THREAD_COLLAPSE | M_THREAD_UNCOLLAPSE))
+      {
+       cur->pair = 0; /* force index entry's color to be re-evaluated */
+       cur->collapsed = flag & M_THREAD_COLLAPSE;
+       if (!roothdr && CHECK_LIMIT)
+       {
+         roothdr = cur;
+         if (flag & M_THREAD_COLLAPSE)
+           final = roothdr->virtual;
+       }
+
+       if (reverse && (flag & M_THREAD_COLLAPSE) && (cur->msgno < minmsgno) && CHECK_LIMIT)
+       {
+         minmsgno = cur->msgno;
+         final = cur->virtual;
+       }
+
+       if (flag & M_THREAD_COLLAPSE)
+       {
+         if (cur != roothdr)
+           cur->virtual = -1;
+       }
+       else 
+       {
+         if (CHECK_LIMIT)
+           cur->virtual = cur->msgno;
+       }
+      }
+
+
+      if (!cur->read && CHECK_LIMIT)
+      {
+       if (cur->old)
+         old = 2;
+       else
+         new = 1;
+       if (cur->msgno < min_unread_msgno)
+       {
+         min_unread = cur->virtual;
+         min_unread_msgno = cur->msgno;
+       }
+      }
+
+      if (cur->virtual == -1 && CHECK_LIMIT)
+       num_hidden++;
+    }
+
+    if (thread->child)
+      thread = thread->child;
+    else if (thread->next)
+      thread = thread->next;
+    else
+    {
+      int done = 0;
+      while (!thread->next)
+      {
+       thread = thread->parent;
+       if (thread == top)
+       {
+         done = 1;
+         break;
+       }
+      }
+      if (done)
+       break;
+      thread = thread->next;
+    }
+  }
+
+  /* return value depends on action requested */
+  if (flag & (M_THREAD_COLLAPSE | M_THREAD_UNCOLLAPSE))
+    return (final);
+  else if (flag & M_THREAD_UNREAD)
+    return ((old && new) ? new : (old ? old : new));
+  else if (flag & M_THREAD_GET_HIDDEN)
+    return (num_hidden+1);
+  else if (flag & M_THREAD_NEXT_UNREAD)
+    return (min_unread);
+
+  return (0);
+#undef CHECK_LIMIT
+}
+
+
+/* if flag is 0, we want to know how many messages
+ * are in the thread.  if flag is 1, we want to know
+ * our position in the thread. */
+int mutt_messages_in_thread (CONTEXT *ctx, HEADER *hdr, int flag)
+{
+  THREAD *threads[2];
+  int i, rc;
+
+  if ((Sort & SORT_MASK) != SORT_THREADS || !hdr->thread)
+    return (1);
+
+  threads[0] = hdr->thread;
+  while (threads[0]->parent)
+    threads[0] = threads[0]->parent;
+
+  threads[1] = flag ? hdr->thread : threads[0]->next;
+
+  for (i = 0; i < ((flag || !threads[1]) ? 1 : 2); i++)
+  {
+    while (!threads[i]->message)
+      threads[i] = threads[i]->child;
+  } 
+
+  if (Sort & SORT_REVERSE)
+    rc = threads[0]->message->msgno - (threads[1] ? threads[1]->message->msgno : -1);
+  else
+    rc = (threads[1] ? threads[1]->message->msgno : ctx->msgcount) - threads[0]->message->msgno;
+  
+  if (flag)
+    rc += 1;
+  
+  return (rc);
+}
+
+
+HASH *mutt_make_id_hash (CONTEXT *ctx)
+{
+  int i;
+  HEADER *hdr;
+  HASH *hash;
+
+  hash = hash_create (ctx->msgcount * 2);
+
+  for (i = 0; i < ctx->msgcount; i++)
+  {
+    hdr = ctx->hdrs[i];
+    if (hdr->env->message_id)
+      hash_insert (hash, hdr->env->message_id, hdr, 0);
+  }
+
+  return hash;
+}
+
+HASH *mutt_make_subj_hash (CONTEXT *ctx)
+{
+  int i;
+  HEADER *hdr;
+  HASH *hash;
+
+  hash = hash_create (ctx->msgcount * 2);
+
+  for (i = 0; i < ctx->msgcount; i++)
+  {
+    hdr = ctx->hdrs[i];
+    if (hdr->env->real_subj)
+      hash_insert (hash, hdr->env->real_subj, hdr, 1);
+  }
+
+  return hash;
+}
diff --git a/url.c b/url.c
new file mode 100644 (file)
index 0000000..6e6dc77
--- /dev/null
+++ b/url.c
@@ -0,0 +1,257 @@
+/*
+ * Copyright (C) 2000 Thomas Roessler <roessler@does-not-exist.org>
+ * 
+ *     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.
+ */ 
+
+/*
+ * A simple URL parser.
+ */
+
+#include "mutt.h"
+#include "mapping.h"
+#include "url.h"
+
+#include "mime.h"
+
+#include <ctype.h>
+
+static struct mapping_t UrlMap[] =
+{
+  { "file",    U_FILE },
+  { "imap",    U_IMAP },
+  { "imaps",   U_IMAPS },
+  { "pop",     U_POP  },
+  { "pops",    U_POPS  },
+  { "nntp",    U_NNTP },
+  { "nntps",   U_NNTPS },
+  { "snews",   U_NNTPS },
+  { "mailto",  U_MAILTO },
+  { NULL,      U_UNKNOWN}
+};
+
+
+static void url_pct_decode (char *s)
+{
+  char *d;
+
+  if (!s)
+    return;
+  
+  for (d = s; *s; s++)
+  {
+    if (*s == '%' && s[1] && s[2] &&
+       isxdigit ((unsigned char) s[1]) &&
+        isxdigit ((unsigned char) s[2]) &&
+       hexval (s[1]) >= 0 && hexval (s[2]) >= 0)
+    {
+      *d++ = (hexval (s[1]) << 4) | (hexval (s[2]));
+      s += 2;
+    }
+    else
+      *d++ = *s;
+  }
+  *d ='\0';
+}
+
+url_scheme_t url_check_scheme (const char *s)
+{
+  char sbuf[STRING];
+  char *t;
+  int i;
+  
+  if (!s || !(t = strchr (s, ':')))
+    return U_UNKNOWN;
+  if ((t - s) + 1 >= sizeof (sbuf))
+    return U_UNKNOWN;
+  
+  strfcpy (sbuf, s, t - s + 1);
+  for (t = sbuf; *t; t++)
+    *t = ascii_tolower (*t);
+
+  if ((i = mutt_getvaluebyname (sbuf, UrlMap)) == -1)
+    return U_UNKNOWN;
+  else
+    return (url_scheme_t) i;
+}
+
+int url_parse_file (char *d, const char *src, size_t dl)
+{
+  if (ascii_strncasecmp (src, "file:", 5))
+    return -1;
+  else if (!ascii_strncasecmp (src, "file://", 7))     /* we don't support remote files */
+    return -1;
+  else
+    strfcpy (d, src + 5, dl);
+  
+  url_pct_decode (d);
+  return 0;
+}
+
+/* ciss_parse_userhost: fill in components of ciss with info from src. Note
+ *   these are pointers into src, which is altered with '\0's. Port of 0
+ *   means no port given. */
+static char *ciss_parse_userhost (ciss_url_t *ciss, char *src)
+{
+  char *t;
+  char *p;
+  char *path;
+
+  ciss->user = NULL;
+  ciss->pass = NULL;
+  ciss->host = NULL;
+  ciss->port = 0;
+
+  if (strncmp (src, "//", 2))
+    return src;
+  
+  src += 2;
+
+  if ((path = strchr (src, '/')))
+    *path++ = '\0';
+  
+  if ((t = strrchr (src, '@')))
+  {
+    *t = '\0';
+    if ((p = strchr (src, ':')))
+    {
+      *p = '\0';
+      ciss->pass = p + 1;
+      url_pct_decode (ciss->pass);
+    }
+    ciss->user = src;
+    url_pct_decode (ciss->user);
+    t++;
+  }
+  else
+    t = src;
+  
+  if ((p = strchr (t, ':')))
+  {
+    *p++ = '\0';
+    ciss->port = atoi (p);
+  }
+  else
+    ciss->port = 0;
+  
+  ciss->host = t;
+  url_pct_decode (ciss->host);
+  return path;
+}
+
+/* url_parse_ciss: Fill in ciss_url_t. char* elements are pointers into src,
+ *   which is modified by this call (duplicate it first if you need to). */
+int url_parse_ciss (ciss_url_t *ciss, char *src)
+{
+  char *tmp;
+
+  if ((ciss->scheme = url_check_scheme (src)) == U_UNKNOWN)
+    return -1;
+
+  tmp = strchr (src, ':') + 1;
+
+  ciss->path = ciss_parse_userhost (ciss, tmp);
+  url_pct_decode (ciss->path);
+  
+  return 0;
+}
+
+/* url_ciss_tostring: output the URL string for a given CISS object. */
+int url_ciss_tostring (ciss_url_t* ciss, char* dest, size_t len, int flags)
+{
+  if (ciss->scheme == U_UNKNOWN)
+    return -1;
+
+  snprintf (dest, len, "%s:", mutt_getnamebyvalue (ciss->scheme, UrlMap));
+
+  if (ciss->host)
+  {
+    strncat (dest, "//", len - strlen (dest));
+    if (ciss->user) {
+      if (flags & U_DECODE_PASSWD && ciss->pass)
+       snprintf (dest + strlen (dest), len - strlen (dest), "%s:%s@",
+                 ciss->user, ciss->pass);
+      else
+       snprintf (dest + strlen (dest), len - strlen (dest), "%s@",
+                 ciss->user);
+    }
+
+    if (ciss->port)
+      snprintf (dest + strlen (dest), len - strlen (dest), "%s:%hu/",
+               ciss->host, ciss->port);
+    else
+      snprintf (dest + strlen (dest), len - strlen (dest), "%s/", ciss->host);
+  }
+
+  if (ciss->path)
+    strncat (dest, ciss->path, len - strlen (dest));
+
+  return 0;
+}
+
+int url_parse_mailto (ENVELOPE *e, char **body, const char *src)
+{
+  char *t;
+  char *tmp;
+  char *headers;
+  char *tag, *value;
+  char scratch[HUGE_STRING];
+
+  int taglen;
+
+  LIST *last = NULL;
+  
+  if (!(t = strchr (src, ':')))
+    return -1;
+  
+  if ((tmp = safe_strdup (t + 1)) == NULL)
+    return -1;
+
+  if ((headers = strchr (tmp, '?')))
+    *headers++ = '\0';
+
+  url_pct_decode (tmp);
+  e->to = rfc822_parse_adrlist (e->to, tmp);
+
+  tag = headers ? strtok (headers, "&") : NULL;
+  
+  for (; tag; tag = strtok (NULL, "&"))
+  {
+    if ((value = strchr (tag, '=')))
+      *value++ = '\0';
+    if (!value || !*value)
+      continue;
+
+    url_pct_decode (tag);
+    url_pct_decode (value);
+
+    if (!ascii_strcasecmp (tag, "body"))
+      mutt_str_replace (body, value);
+    else 
+    {
+      taglen = strlen (tag);
+      /* mutt_parse_rfc822_line makes some assumptions */
+      snprintf (scratch, sizeof (scratch), "%s: %s", tag, value);
+      scratch[taglen] = '\0';
+      value = &scratch[taglen+1];
+      SKIPWS (value);
+      mutt_parse_rfc822_line (e, NULL, scratch, value, 1, 0, 0, &last);
+    }
+  }
+  
+  FREE (&tmp);
+  return 0;
+}
+
diff --git a/url.h b/url.h
new file mode 100644 (file)
index 0000000..5e0f3ae
--- /dev/null
+++ b/url.h
@@ -0,0 +1,37 @@
+#ifndef _URL_H
+# define _URL_H
+
+typedef enum url_scheme
+{
+  U_FILE,
+  U_POP,
+  U_POPS,
+  U_IMAP,
+  U_IMAPS,
+  U_NNTP,
+  U_NNTPS,
+  U_MAILTO,
+  U_UNKNOWN
+}
+url_scheme_t;
+
+#define U_DECODE_PASSWD (1)
+
+typedef struct ciss_url
+{
+  url_scheme_t scheme;
+  char *user;
+  char *pass;
+  char *host;
+  unsigned short port;
+  char *path;
+} 
+ciss_url_t;
+
+url_scheme_t url_check_scheme (const char *s);
+int url_parse_file (char *d, const char *src, size_t dl);
+int url_parse_ciss (ciss_url_t *ciss, char *src);
+int url_ciss_tostring (ciss_url_t* ciss, char* dest, size_t len, int flags);
+int url_parse_mailto (ENVELOPE *e, char **body, const char *src);
+
+#endif
diff --git a/utf8.c b/utf8.c
new file mode 100644 (file)
index 0000000..b65b2a9
--- /dev/null
+++ b/utf8.c
@@ -0,0 +1,76 @@
+#ifndef HAVE_WC_FUNCS
+
+#include <errno.h>
+
+#ifndef EILSEQ
+#define EILSEQ EINVAL
+#endif
+
+int mutt_wctoutf8 (char *s, unsigned int c)
+{
+  if (c < (1 << 7)) 
+  {
+    if (s)
+      *s++ = c;
+    return 1;
+  }
+  else if (c < (1 << 11))
+  {
+    if (s)
+    {
+      *s++ = 0xc0 | (c >> 6);
+      *s++ = 0x80 | (c & 0x3f);
+    }
+    return 2;
+  }
+  else if (c < (1 << 16))
+  {
+    if (s)
+    {
+      *s++ = 0xe0 | (c >> 12);
+      *s++ = 0x80 | ((c >> 6) & 0x3f);
+      *s++ = 0x80 | (c & 0x3f);
+    }
+    return 3;
+  }
+  else if (c < (1 << 21))
+  {
+    if (s)
+    {
+      *s++ = 0xf0 | (c >> 18);
+      *s++ = 0x80 | ((c >> 12) & 0x3f);
+      *s++ = 0x80 | ((c >> 6) & 0x3f);
+      *s++ = 0x80 | (c & 0x3f);
+    }
+    return 4;
+  }
+  else if (c < (1 << 26))
+  {
+    if (s)
+    {
+      *s++ = 0xf8 | (c >> 24);
+      *s++ = 0x80 | ((c >> 18) & 0x3f);
+      *s++ = 0x80 | ((c >> 12) & 0x3f);
+      *s++ = 0x80 | ((c >> 6) & 0x3f);
+      *s++ = 0x80 | (c & 0x3f);
+    }
+    return 5;
+  }
+  else if (c < (1 << 31))
+  {
+    if (s)
+    {
+      *s++ = 0xfc | (c >> 30);
+      *s++ = 0x80 | ((c >> 24) & 0x3f);
+      *s++ = 0x80 | ((c >> 18) & 0x3f);
+      *s++ = 0x80 | ((c >> 12) & 0x3f);
+      *s++ = 0x80 | ((c >> 6) & 0x3f);
+      *s++ = 0x80 | (c & 0x3f);
+    }
+    return 6;
+  }
+  errno = EILSEQ;
+  return -1;
+}
+
+#endif /* !HAVE_WC_FUNCS */
diff --git a/wcwidth.c b/wcwidth.c
new file mode 100644 (file)
index 0000000..e0e1cb7
--- /dev/null
+++ b/wcwidth.c
@@ -0,0 +1,140 @@
+/*
+ * This is an implementation of wcwidth() and wcswidth() as defined in
+ * "The Single UNIX Specification, Version 2, The Open Group, 1997"
+ * <http://www.UNIX-systems.org/online.html>
+ *
+ * Markus Kuhn -- 2000-02-08 -- public domain
+ */
+
+/* Adapted for Mutt by Edmund Grimley Evans.
+ */
+
+#ifndef HAVE_WC_FUNCS
+
+#include "mutt.h"
+#include "mbyte.h"
+
+#include <ctype.h>
+
+/* These functions define the column width of an ISO 10646 character
+ * as follows:
+ *
+ *    - The null character (U+0000) has a column width of 0.
+ *
+ *    - Other C0/C1 control characters and DEL will lead to a return
+ *      value of -1.
+ *
+ *    - Non-spacing and enclosing combining characters (general
+ *      category code Mn or Me in the Unicode database) have a
+ *      column width of 0.
+ *
+ *    - Spacing characters in the East Asian Wide (W) or East Asian
+ *      FullWidth (F) category as defined in Unicode Technical
+ *      Report #11 have a column width of 2.
+ *
+ *    - All remaining characters (including all printable
+ *      ISO 8859-1 and WGL4 characters, Unicode control characters,
+ *      etc.) have a column width of 1.
+ *
+ * This implementation assumes that wchar_t characters are encoded
+ * in ISO 10646.
+ */
+
+int wcwidth_ucs(wchar_t ucs)
+{
+  /* sorted list of non-overlapping intervals of non-spacing characters */
+  static const struct interval {
+    unsigned short first;
+    unsigned short last;
+  } combining[] = {
+    { 0x0300, 0x034E }, { 0x0360, 0x0362 }, { 0x0483, 0x0486 },
+    { 0x0488, 0x0489 }, { 0x0591, 0x05A1 }, { 0x05A3, 0x05B9 },
+    { 0x05BB, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 },
+    { 0x05C4, 0x05C4 }, { 0x064B, 0x0655 }, { 0x0670, 0x0670 },
+    { 0x06D6, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED },
+    { 0x0711, 0x0711 }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 },
+    { 0x0901, 0x0902 }, { 0x093C, 0x093C }, { 0x0941, 0x0948 },
+    { 0x094D, 0x094D }, { 0x0951, 0x0954 }, { 0x0962, 0x0963 },
+    { 0x0981, 0x0981 }, { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 },
+    { 0x09CD, 0x09CD }, { 0x09E2, 0x09E3 }, { 0x0A02, 0x0A02 },
+    { 0x0A3C, 0x0A3C }, { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 },
+    { 0x0A4B, 0x0A4D }, { 0x0A70, 0x0A71 }, { 0x0A81, 0x0A82 },
+    { 0x0ABC, 0x0ABC }, { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 },
+    { 0x0ACD, 0x0ACD }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C },
+    { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, { 0x0B4D, 0x0B4D },
+    { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 },
+    { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 },
+    { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0CBF, 0x0CBF },
+    { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, { 0x0D41, 0x0D43 },
+    { 0x0D4D, 0x0D4D }, { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 },
+    { 0x0DD6, 0x0DD6 }, { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A },
+    { 0x0E47, 0x0E4E }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 },
+    { 0x0EBB, 0x0EBC }, { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 },
+    { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 },
+    { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 },
+    { 0x0F90, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 },
+    { 0x102D, 0x1030 }, { 0x1032, 0x1032 }, { 0x1036, 0x1037 },
+    { 0x1039, 0x1039 }, { 0x1058, 0x1059 }, { 0x17B7, 0x17BD },
+    { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x18A9, 0x18A9 },
+    { 0x20D0, 0x20E3 }, { 0x302A, 0x302F }, { 0x3099, 0x309A },
+    { 0xFB1E, 0xFB1E }, { 0xFE20, 0xFE23 }
+  };
+  int min = 0;
+  int max = sizeof(combining) / sizeof(struct interval) - 1;
+  int mid;
+
+  if (ucs == 0)
+    return 0;
+
+  /* test for 8-bit control characters */
+  if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0))
+    return -1;
+
+  /* first quick check for Latin-1 etc. characters */
+  if (ucs < combining[0].first)
+    return 1;
+
+  /* binary search in table of non-spacing characters */
+  while (max >= min) {
+    mid = (min + max) / 2;
+    if (combining[mid].last < ucs)
+      min = mid + 1;
+    else if (combining[mid].first > ucs)
+      max = mid - 1;
+    else if (combining[mid].first <= ucs && combining[mid].last >= ucs)
+      return 0;
+  }
+
+  /* if we arrive here, ucs is not a combining or C0/C1 control character */
+
+  /* fast test for majority of non-wide scripts */
+  if (ucs < 0x1100)
+    return 1;
+
+  return 1 +
+    ((ucs >= 0x1100 && ucs <= 0x115f) || /* Hangul Jamo */
+     (ucs >= 0x2e80 && ucs <= 0xa4cf && (ucs & ~0x0011) != 0x300a &&
+      ucs != 0x303f) ||                  /* CJK ... Yi */
+     (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */
+     (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */
+     (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */
+     (ucs >= 0xff00 && ucs <= 0xff5f) || /* Fullwidth Forms */
+     (ucs >= 0xffe0 && ucs <= 0xffe6));
+}
+
+#endif /* !HAVE_WC_FUNCS */
+
+#if 0 /* original */
+int wcswidth(const wchar_t *pwcs, size_t n)
+{
+  int w, width = 0;
+
+  for (;*pwcs && n-- > 0; pwcs++)
+    if ((w = wcwidth(*pwcs)) < 0)
+      return -1;
+    else
+      width += w;
+
+  return width;
+}
+#endif